managoat
Lets an agent start more Managoat conversations from inside its own sandbox, and stream them.
Summary
| Bundled | Yes, in each sandbox. |
| Declared by | Nobody. Managoat always adds it. |
| Source | apps/fountain/priv/sprite_skills/managoat/SKILL.md |
| Reads | MANAGOAT_BASE_URL, MANAGOAT_TOKEN, MANAGOAT_CONVERSATION_ID, MANAGOAT_SANDBOX_ID |
| Was called | fountain, before the project was renamed. A sandbox also still gets the old FOUNTAIN_* variables, for a while. |
What it gives the agent
Managoat'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
MANAGOAT_TOKEN is a key for one conversation, confined to that
conversation and the ones it starts. It is not a long-lived admin token.
Managoat 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
MANAGOAT_CONVERSATION_ID is always in the sandbox's environment. A
POST /api/conversations made with MANAGOAT_TOKEN always records this
conversation as the parent, with or without
X-Managoat-Parent-Conversation-Id: $MANAGOAT_CONVERSATION_ID, which the skill
still sends. A header naming any other conversation is refused. An operator
can then rebuild the whole spawn chain.
Each child gets its own machine
Every child conversation gets a sandbox of its own, even when its parent runs
in a workspace, so it never shares the parent's disk. The skill tells the agent to pass what
the child needs in the prompt instead. MANAGOAT_SANDBOX_ID is still set, as
the id of the sandbox the agent runs on, but there is no attaching to it. See
Sandboxes.
GET /api/sandboxes lists the machines the token's owner has, with the
conversation on each. Read Sandboxes and
Conversations for the fields.
Limits
A spawned agent has the same skill. Managoat caps how deep the chain goes
at CONVERSATION_MAX_DEPTH (default 5): a start past it gets
422 conversation_depth_exceeded (Spawn depth).
Nothing caps fan-out, one agent starting many siblings, so a runaway fan-out
is still 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 Sandbox lifetime and cost.
The sandbox must reach your instance. MANAGOAT_BASE_URL is the
instance's PUBLIC_URL, and the call comes from the
sandbox's provider, not from your machine. A localhost URL reaches nothing.
On a local instance, put a tunnel such as
cloudflared
or ngrok in front of it and set PUBLIC_URL to the
tunnel's URL. A limited environment must also allow that host.
The token reaches its own tree. MANAGOAT_TOKEN has sprite scope. It
can read the owner's agents, environments and vaults, but not change them. It
can start conversations, which are always children of its own, and prompt,
stream, end and delete its own conversation and the ones it started, at any
depth. Any other conversation reads as 404. It cannot list or search the
account's conversations, follow the account event stream, or apply a
manifest. Read
what a sandbox credential can do for the full list.
The bare /conversations path returns 404. The API is under /api.
Related
- API reference, the same surface from outside.
- Skills.
- About conversations.