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.
fountain
Lets an agent start more Fountain conversations from inside its own sandbox, and stream them.
At a glance
| Bundled | Yes, in each sandbox. |
| Declared by | Nobody. Fountain always adds it. |
| Source | apps/fountain/priv/sprite_skills/fountain/SKILL.md |
| Reads | FOUNTAIN_BASE_URL, FOUNTAIN_TOKEN, FOUNTAIN_CONVERSATION_ID, FOUNTAIN_SANDBOX_ID |
What it gives the agent
Fountain's own API, from the inside. An agent that has it can fan work out across other agents, then collect the answers.
The skill writes two patterns out. It can fan out N conversations in parallel and gather their results. It can also drive one sub-conversation over several turns.
That is what makes "delegate to another agent" work when a user asks for it.
The credential it uses
FOUNTAIN_TOKEN is a key for one conversation, scoped to that
conversation's owner. It is not a long-lived admin token.
Fountain rotates it at each fresh provision and at each reattach, such as
after a deploy or a BEAM restart, and revokes the previous value. A request
that returns 401 with "reason": "api_key_revoked" means the agent cached a
stale copy. The agent must read the variable from its environment again.
Provenance comes for free
FOUNTAIN_CONVERSATION_ID is always in the sandbox's environment. Send
X-Fountain-Parent-Conversation-Id: $FOUNTAIN_CONVERSATION_ID on a
POST /api/conversations, and Fountain records the parent. An operator can
then rebuild the whole spawn chain.
A child on the same machine
FOUNTAIN_SANDBOX_ID is the id of the sandbox the agent runs on. Send it as
sandbox_id on a POST /api/conversations. The child conversation then runs
on that same machine, with the same disk, at the same time. That only works
for a child of the same agent, environment and vault.
Without it, each child gets a sandbox of its own. When the agent runs in
persistent mode, the child gets that machine instead. To name the other mode
for one child, send sandbox_mode on the same call. See
Sandboxes.
GET /api/sandboxes lists the machines the token's owner has, with the
conversations on each. Read Sandboxes and
Conversations for the fields.
Limits
A spawned agent has the same skill. Nothing stops recursion, so the skill
tells the agent to cap the depth itself with a MAX_DEPTH check. A runaway
fan-out is a real way to spend money.
Each conversation is a real sandbox. The skill says plainly that an orphaned conversation runs until the idle timeout, and that the agent must terminate it without delay. Read Change sandbox lifetimes.
The bare /conversations path is not the API. It redirects a non-browser
request to the login page. The API is under /api.
Related
- API reference, the same surface from outside.
- Skills.
- About conversations.