Skip to content

What behold is

llms.txtlists every page for an agent

behold is a live control plane over a chant estate. chant compiles TypeScript into spec-native infrastructure output; behold reads what chant declared and what the cloud reports, and shows you the difference.

chant source ──build/lint──▶ graph IR ──behold──▶ live graph + drift + (delegated) actions
(deterministic) (server + browser)

behold shows the estate that spans substrates: an EKS cluster declared in CloudFormation and the Kubernetes Service running on it, beside any Argo CD or Flux project.

Each substrate has its own kind of truth, and behold keeps them distinct rather than flattening:

substrate what “deployed” means there
AWS CloudFormation lists the resource, and the last stack operation succeeded
Kubernetes the object exists, its owned Pods are running, and chant’s field manager still owns the fields it wrote
Azure / GCP the resource answered a read; there is no deploy object to ask

That last row is why component status reads from a resource rollup rather than a stack: on a substrate with no deployment object, the stack cannot be the source of truth, because there isn’t one.

behold writes nothing to a cloud or to your source itself. Every write it offers is a command it starts for you, run by a tool you already trust.

  • Every view is a read: chant graph, snapshots, live describes. Viewing needs only read roles.
  • Sync starts the ApplyOp your project committed. Adopt starts your ReconcileOp, which opens a PR a human merges.
  • Deploy on a project with no committed ApplyOp runs chant run <component> --components on chant’s local executor, as a child of behold. It applies with the credentials in behold’s environment, so Deploy from behold needs write roles there.
  • An environment .behold.json designates to a forge is never applied from your machine; Deploy dispatches the forge’s workflow through your gh.
  • A terragucci repo is applied by its pipeline only: behold refuses every deploy, Op run, approval and dispatch there, and offers none of them.
  • A SQL Yodeler repo (one with a yodel.config.ts) is guarded the same way. Its refusal says code: "sql-yodeler" and names npx yodel approve <env> --plan <digest> (with --sign under a sealed gate) and yodel apply <env> in the project’s pipeline.

Authority stays in your committed source and your executor. If a request would have behold write to a cloud or to source directly, that is a bug.

  • Not a deployer: behold starts your Ops or chant’s local executor, and they do the work.
  • Not a state store. Truth lives in the live system, and ownership is read from a marker on the resource.
  • Not a new abstraction over your cloud. The graph is your declarations and your resources, at their real names.

behold