Managoat is the hosted Fountain. Fountain is the open-source engine, and its name is on the CLI, the API, the SDK and this manual. Everything here applies to Managoat unless a page says it is for a self-hosted server.
Overview
Fountain is a server. This section covers everything that drives it from the outside. That is an editor, a chat surface, a plugin host, a relay, or your own code.
The operator configures none of it. There is no env var, no server-side switch, and nothing to run.
Each of these authenticates as an ordinary user, with an API key or with the CLI's saved login. Each works against any instance it can reach.
If you want the services that Fountain itself needs, which are sandboxes, mail, OAuth, billing and error reports, read Services Fountain uses.
| Client | Talks over | Configured on |
|---|---|---|
| Editors | fountain acp |
The developer's machine. |
| OpenClaw | fountain acp |
The OpenClaw host. |
| Hermes Agent | The HTTP API, through a plugin. | The Hermes host. |
| OpenBot | AG-UI over HTTP. | The OpenBot host. |
| Buzz | A Nostr relay, hosted by Fountain. | The Buzz desktop, or POST /api/buzz/agents. |
| Agentic IDEs | /skill and the discovery endpoints. |
The IDE. |
| Your own code | The HTTP API, the TypeScript SDK, the CLI. | Wherever you want. |
Over ACP
The first three of those spawn the same adapter. One page holds its protocol
surface, its _meta extensions and its failure modes,
fountain acp (reference). So the client pages below cover the
setup alone.
Editors. An ACP-capable editor, such as Zed, spawns
fountain acp locally. It then talks to your instance with the credentials
the developer already has.
OpenClaw reaches the same adapter from a chat surface, such
as Telegram, Discord or Slack. Register Fountain as a custom ACP agent in its
acpx plugin. That configuration is client-side, on the OpenClaw host.
Over the API
Hermes Agent is a client of the HTTP API, and not of
fountain acp. A Hermes plugin, which this repo ships under
integrations/hermes/, gives Hermes fountain_run and its siblings. Its
model then delegates a task to a named Fountain agent and reads the answer
back. The plugin authenticates with an API key, or with the CLI's saved login.
OpenBot needs no plugin at all, and only a URL. Fountain
answers AG-UI at
POST /api/agui/:agent_id. CopilotKit's OpenBot, or any other AG-UI host,
registers a Fountain agent as a coworker with a channel of its own. One
channel binds to one conversation, so the sandbox is the memory, and not a
transcript that somebody replays. The coworker holds an API key.
Everything that plugin does is available to you directly. Read the API reference, the TypeScript SDK and the CLI reference.
Do you build a chat surface of your own, the roster-and-threads app that everybody clones? Build a chat app walks the whole thing through in SDK calls. LLM integration covers the discovery endpoints, which let an agentic IDE learn the whole surface from one fetch.
The other direction
Buzz inverts the arrangement. Fountain hosts a Buzz agent, which is a Nostr identity that lives on a relay. Its coding agent runs in a sandbox, and a vault holds its Nostr key. Nobody drives Fountain here. Fountain arrives on the relay and answers.
Provision one from the Buzz desktop, or with POST /api/buzz/agents. It turns
itself on for any image that ships the buzz-acp binary.