Skip to content

Resources

The lexicon types the three kinds fountain apply reconciles — the workload layer of fountain. Types are generated from fountain’s served OpenAPI spec, so they track the real API. Conversations are deliberately not a resource: they are runs with a status lifecycle, modeled as ops.

A reusable sandbox baseline: packages, repos, setup script, env vars, encrypted secrets, and the networking policy. networking_type is "unrestricted" | "limited"; under limited, egress is restricted to networking_config.allowed_hosts, and with no hosts (or an empty list) the sandbox denies all egress — a deny-all, not an allow-all. FTN010 requires the networking intent to be explicit.

A bag of env-var overrides selected at conversation create. Vault values win on key collision with the environment — which is why agents can carry a vault allowlist upstream (fountain#136). allowed_vault_ids on an Agent is three-state: null allows any tenant vault, [] forbids all, a list is an allowlist.

A named, re-runnable agent configuration: model, runtime, skills (inline SKILL.md or GitHub-sourced with a ref pin), MCP servers, and an optional environment reference — typed, so a dangling reference is a build error, not a 422 at apply time.

import { Environment, Agent } from "@intentius/chant-lexicon-fountain";
export const conciergeEnv = new Environment({
name: "concierge-env",
networking_type: "limited",
networking_config: { allowed_hosts: ["registry.npmjs.org", "github.com"] },
metadata: { "managed-by": "chant" },
});
export const researcher = new Agent({
name: "researcher",
model: "anthropic/claude-sonnet-4-6",
runtime: "claude",
environment: conciergeEnv,
skills: [{ source: "vercel-labs/agent-skills", ref: "main" }],
});