Six shapes of builder, and the few lines each one needs. Every snippet runs against the hosted instance or your own.
You have
A React app
You want An agent in the product, with a sandbox of its own behind the chat.
How Point CopilotKit's AG-UI client at the agent's endpoint. No adapter, no proxy.
import { HttpAgent } from "@ag-ui/client";
const reviewer = new HttpAgent({
url: "https://managoat.com/api/agui/<agent_id>",
headers: { Authorization: "Bearer ftn_..." },
});
Read the guide →
You have
An editor
You want A thread in Zed that runs on a machine that is not yours.
How One agent_servers entry. Credentials come from fountain auth login.
"agent_servers": {
"Fountain: reviewer": {
"command": "fountain",
"args": ["acp", "--agent", "reviewer", "--permission", "ask"]
}
}
Read the guide →
You have
A chat UI with a base-URL field
You want Your agents in its model picker.
How Base URL, key, and a thread header so each chat keeps one sandbox.
curl https://managoat.com/v1/chat/completions \
-H "Authorization: Bearer ftn_..." \
-H "X-Fountain-Thread: prs-2026-08-25" \
-d '{"model": "reviewer", "stream": true,
"messages": [{"role": "user", "content": "Review the open PRs."}]}'
Read the guide →
You have
A personal assistant
You want OpenClaw or Hermes hands a task to a Fountain agent from Telegram, Discord or Slack.
How OpenClaw's acpx plugin spawns fountain acp. Hermes installs the plugin this repo ships.
# OpenClaw: an ACP backend
openclaw plugins install @openclaw/acpx
# Hermes Agent: fountain_run and six siblings
hermes plugins install BinaryBourbon/fountain/integrations/hermes/fountain --enable
Read the guide →
You have
A pipeline
You want Start a run from CI, hear about it when it ends.
How The CLI in a step, a signed webhook to a URL you own.
fountain run reviewer --prompt "Review PR #$PR"
fountain webhooks create https://example.com/hooks/fountain \
--event conversation.turn.done --event conversation.turn.failed
Read the guide →
You have
Your own product
You want A roster of agents and threads, under your login, on your origin.
How The SDK for the calls, Sign in with Fountain for the user, one static app.
import { Fountain } from "@agentshit/fountain-sdk";
const fountain = new Fountain({ apiKey: token }); // from the OAuth flow
const conv = await fountain.conversations.create({ agent: "reviewer" });
for await (const block of fountain.conversations.stream(conv.id)) render(block);
Read the guide →