Skip to content
Back to skills

Fountain

ASecurity

Delegate work to Fountain agents — sandboxed coding agents (claude/codex/gemini/opencode) that each run in their own per-conversation sandbox on a Fountain instance. Use when the user asks to spin up an agent on Fountain, hand a task to a named agent, fan a task out across several agents, or continue a Fountain conversation. The fountain_* tools are the interface; this skill is the operating model.

  • 16 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 19, 2026
ai-agentsgoapi

Works with

  • cursor
  • api
  • mcp

Security analysis

A100/100

Scanned September 19, 2026

npx -y skills add managoat/fountain --skill fountain --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Fountain?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Fountain
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/managoat-fountain-ed57c1f2/badge)](https://www.skillsdirectory.com/skills/managoat-fountain-ed57c1f2)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: fountain
description: Delegate work to Fountain agents — sandboxed coding agents (claude/codex/gemini/opencode) that each run in their own per-conversation sandbox on a Fountain instance. Use when the user asks to spin up an agent on Fountain, hand a task to a named agent, fan a task out across several agents, or continue a Fountain conversation. The fountain_* tools are the interface; this skill is the operating model.
---

# Fountain from Hermes

You have `fountain_*` tools. Each call talks to a Fountain instance on the
user's behalf; the work runs **there**, in a sandbox Fountain provisions, not
on this machine.

## Mental model

| Primitive | What it is |
|---|---|
| **Agent** | a named runtime config: runtime (claude/codex/gemini/opencode), model, system prompt, an environment (packages, repos, secrets, network policy), optional skills and MCP servers |
| **Conversation** | one running instance of an agent in a fresh sandbox; multi-turn; the sandbox keeps state between turns until it is terminated or reclaimed |
| **Turn** | one prompt and everything the agent did in response |
| **Vault** | a bag of secret overrides picked per conversation (wins over the environment on key collision) |

The user chooses *which* agent by name; you do not configure agents from here.

## Workflow

1. `fountain_agents` — once per session, or when the user names an agent you
   have not seen. Match by name; pass the name (or id) to `fountain_run`.
2. `fountain_run(agent, prompt)` — write the prompt as if briefing a contractor
   with **no other context**: the goal, the repo/paths if the environment
   clones one, what "done" looks like, and what to report back. It provisions
   a sandbox (typically 30–90 s) and waits for the answer.
3. Read `output`. If `done` is `false`, the turn is still running: call
   `fountain_wait(conversation_id)` — repeat until `done`. Do not re-run the
   task.
4. Follow-ups go to the **same** conversation with `fountain_send` — the agent
   remembers the earlier turns and the sandbox still has its files.
5. When the delegated work is finished and no follow-up is expected,
   `fountain_terminate`. Idle conversations are reclaimed anyway; terminating
   just frees the sandbox sooner.

### Fan-out

Start each with `wait: false`, then `fountain_wait` each conversation id in
turn:

```
fountain_run(agent="reviewer", prompt="Audit auth/ …", wait=false)  → conv A
fountain_run(agent="reviewer", prompt="Audit billing/ …", wait=false) → conv B
fountain_wait(A); fountain_wait(B)
```

### Long turns

Every blocking call returns after `timeout_seconds` (default 300) with
`done=false` and the output so far. Keep waiting with `fountain_wait`; the
cursor is remembered, so you only see new text. Never assume a turn failed
because a wait returned — check `done` / `turn_state`.

## Reporting back

Relay the agent's `output` faithfully — it is the deliverable — and include
the conversation `url` so the user can open the transcript in Fountain. Say
which agent ran and whether the turn finished (`turn_state: done`), failed
(`failed`, with `reason`) or was interrupted.

## Errors you may see

- `No agent named …` — list agents; the user probably meant a different name.
- `HTTP 401` — the API key is wrong or missing (`FOUNTAIN_API_KEY`, or
  `fountain auth login`).
- `HTTP 402` — the account has no active subscription on that instance.
- `HTTP 404` on a conversation — wrong id, or it belongs to another account.
- `conversation_busy` — a turn is already running; `fountain_wait` first.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.