Export a snapshot
behold export captures whatever you are looking at into a static folder that any host can serve. Read-only, and fully interactive.
npx behold export --out ./behold-exportnpx serve ./behold-exportPan and zoom, the zoom dial, the inspect pane and the env/tier pickers all work client-side. There is no backend and no live observe: it is a snapshot, and it says so.
What it captures
Section titled “What it captures”Every read endpoint for the whole lens matrix (each env/tier × zoom × radial), rendered in-process by the same handlers the live server runs. A snapshot is byte-identical to what live would have shown at that moment.
With a live overlay
Section titled “With a live overlay”npx behold export ../my-project --env prod --out ./behold-exportFreezes the drift colours as they were when you exported. Useful for an incident write-up, or for showing someone an estate they have no credentials for.
Each captured environment also carries its health and rotation, read once with chant lifecycle health when the export runs: the health marks on the cards and the Route 53 records out of rotation are drawn as they were then. The read uses the export’s own credentials and endpoints (AWS_ENDPOINT_URL and the like, or the environment’s declared endpoint), the same as the drift overlay. A chant older than 0.124.33 captures the refusal, and the bundle draws no health marks.
The view it opens on
Section titled “The view it opens on”A bundle opens on the source graph (env: (source)) at the zoom behold would pick for the estate. --open-env and --open-zoom choose something else:
npx behold export ../my-workspace --open-env frozen --open-zoom composites --out ./behold-export--open-env takes one of the environments the export captures, which are the ones the estate declares. --open-zoom takes components, logical, composites, resources or attributes, and ops when the estate has emitted Ops. The export refuses any other value before it captures anything, and says which values it would take. The choice is written to the bundle’s manifest.json as opening. A link with its own ?env= or ?zoom= still opens where the link points.
A line at the foot of the page
Section titled “A line at the foot of the page”--note puts one line of text under the graph, such as how to run the estate yourself. A span in backticks is drawn as code, and nothing else is markup:
npx behold export . --note 'Run this yourself: `npx @intentius/behold demo three-cloud`' --out ./behold-exportThe note is at most 200 characters on one line, and the export refuses anything else before it captures. It is written to manifest.json as note. The three-cloud demo ends its page this way.
A declared workspace
Section titled “A declared workspace”Exporting a directory that holds a chant.workspace.json names the bundle after the workspace, not after its first member. The generated wrangler.jsonc names the Worker behold-<workspace name> (behold-three-cloud for a workspace declared as three-cloud), and manifest.json carries workspace with the declared name and projectDir with the workspace root’s directory name. --name still overrides the Worker name. A single project is named after its directory, as before.
What it leaves out
Section titled “What it leaves out”A bundle carries the picture and nothing about the machine that made it: no list of your recent projects, no user name, and every absolute path reduced to its directory’s name.
A Terraform card carries its root’s whole source file. --no-source leaves that text out of every snapshot:
npx behold export . --no-source --out ./behold-exportA terragucci estate
Section titled “A terragucci estate”--terragucci <src> captures the marks serve --terragucci shows, with the same dates, and the audit record’s timeline as one more snapshot (a refusal or an absent record is captured as the lane shows it, and does not fail the export). --publish s3://<bucket>/<prefix>/views/<name> also uploads the bundle there, signed with AWS credentials from the environment; it writes only under a views/<name> directory, one folder per commit (views/<name>/<commit>/, the checkout’s HEAD or --commit <sha>), with history.json, latest.json and an index.html that opens the newest beside them; --keep <n> (default 30) is how many commits stay. Publish a view says how terragucci’s estate job puts it beside estate.html.
Hosting it
Section titled “Hosting it”The bundle is deploy-ready for Cloudflare, since export writes an assets-only wrangler.jsonc:
cd ./behold-export && npx wrangler deployGitHub Pages, S3 and nginx work too. The live app needs Docker and a chant subprocess and cannot run on an edge worker; the pre-baked export can.