Fountain
The fountain lexicon declares Managoat’s workload layer (formerly fountain) as typed chant resources. Managoat runs coding agents in sandboxed VMs. Three kinds are declarable, the three fountain apply reconciles: Environment (sandbox baseline), Vault (env-var overrides) and Agent (a runnable agent config). Conversations are runs, not resources: start them with the fountainRun op.
Teammate, Schedule and Webhook are still exported, but Managoat removed the team, its scheduler and webhooks (managoat/managoat#2793): declaring one fails the build with FTN025, which names what replaced it. A long-lived thread is one conversation resumed by channel_id (what a Steward’s runs use), and a cadence is a clock outside Managoat running chant run <op> --on fountain. See Coming from the team kinds below.
Types are generated from a pinned fountain release’s OpenAPI spec, so they track the real API.
Install it with:
npm install --save-dev @intentius/chant-lexicon-fountainQuick Start
Section titled “Quick Start”import { Environment, Agent } from "@intentius/chant-lexicon-fountain";
export const env = new Environment({ name: "team-env", networking_type: "limited", // FTN010 requires explicit intent networking_config: { allowed_hosts: ["github.com"] }, metadata: { "managed-by": "chant" }, // enables owned-only reconcile/prune});
export const helper = new Agent({ name: "helper", model: "anthropic/claude-sonnet-4-6", runtime: "claude", environment: env, // typed ref, serialized by name});The loop
Section titled “The loop”chant build— synthesize and lint. The FTN rules catch open networking, credential literals, and unresolvable${VAR}references before review. The same rules run viachant auditover a repo of hand-writtenfountain applymanifests — no chant project needed; the documents are parsed back into the entity graph.chant run <apply op>or callfountainApply— reconcile against the API. Idempotent by name.chant lifecycle diff --live— drift. A UI edit to an owned Environment shows up here.chant import --from— adopt UI-built resources into typed files.
Endpoint and auth
Section titled “Endpoint and auth”FOUNTAIN_ENDPOINT (defaults to the hosted instance) and FOUNTAIN_TOKEN. Mint a token via POST /api/auth/token with email and password, or from the account UI. The same code applies to a local mix phx.server fountain by pointing FOUNTAIN_ENDPOINT at it — registration and token mint work headless, so CI needs no browser.
Coming from the team kinds
Section titled “Coming from the team kinds”Managoat removed these between v0.21.0 and v0.29.0, the pinned spec. Each now fails the build with FTN025, and chant import skips its documents:
| Was | Now |
|---|---|
Teammate (an agent on the team, with a thread) | One conversation resumed by channel_id. A Steward’s runs go to chant:steward:<name>; its sandbox keeps its disk across park and wake. Or --on e2b, a sandbox of your own. |
Schedule (a cron prompt into that thread) | A clock outside Managoat (a CI schedule:, a CronJob) running chant run <op> --on fountain. The cadence stays on the Op. |
Webhook | Nothing upstream. Read a run’s outcome from chant run, or the conversation’s event stream. |
Agent sandbox_mode: "persistent" | Drop it: every conversation gets a sandbox of its own, and persistent is a 422. |
sandbox_provider daytona or runner | sprites or e2b, or unset for the instance default. |
runtime: "opencode" | claude, codex, gemini or acp. |
fountain.profiles.<name>.team | steward, the steward’s name. |
At a Glance
Section titled “At a Glance”| Metric | Count |
|---|---|
| Resources | 3 |
| Property types | 1 |
| Services | 1 |
| Intrinsic functions | 0 |
| Pseudo-parameters | 0 |
| Lint rules | 12 |
Lexicon version: 0.124.34
Namespace: Fountain
- All Rules — 12 rules
- Serialization — output format details