@intentius/chant-lexicon-fountain
v0.44.14
Published
Fountain lexicon for chant — sandboxed agent environments, vaults, and agents as typed estate
Readme
@intentius/chant-lexicon-fountain
fountain lexicon plugin for chant.
fountain runs coding agents in
sandboxed VMs. This lexicon declares its workload layer as typed chant
resources: Environment (sandbox baseline), Vault (env-var overrides),
Agent (a runnable agent config). Conversations are runs, not resources —
start them with the fountainRun op.
chant build serializes to fountain's own manifest YAML (fountain apply -f
accepts it verbatim) — the same YAML fountainApply sends to fountain's bulk
POST /api/apply endpoint in one request.
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 — dangling name = build error
});For agents handling anything sensitive, ConciergeStack bundles the
locked-down defaults (deny-all egress, no vault overrides, ownership marker
on both resources) so loosening any of them is a visible, reviewable
parameter.
Development
just generate # regenerate types from the upstream OpenAPI spec
just validate # check the generated artifacts
just docs # build and serve the docs siteGeneration is pinned to an upstream release artifact — FOUNTAIN_SPEC_VERSION
in src/spec/fetch.ts. The same pin produces the same types on any machine,
so a regeneration that changes the surface means upstream moved, not that
someone's laptop was online.
Without a network it reads the committed snapshot
(src/spec/fountain-openapi.snapshot.json) instead. Either way it prints
which one it used and at what version.
chant dev coverage compares the generated surface against that spec and
reports properties upstream has added, plus the request schemas deliberately
left unmodeled.
Project structure
src/plugin.ts— LexiconPlugin with all lifecycle methodssrc/serializer.ts— manifest YAML outputsrc/codegen/,src/spec/— generation pipeline and spec fetch/parsesrc/lint/rules/,src/lint/post-synth/— FTN001 (AST) and FTN010–017src/op/activities/—fountainApply(reconciler) andfountainRunsrc/composites/—ConciergeStacksrc/skills/— agent skills for authoring, secrets, and locked sandboxessrc/import/,src/describe-resources.ts— adoption and live observationsrc/lsp/— completions and hoversrc/generated/— generated artifacts (do not edit)
