Skip to content

Files a checkout carries ​

Project identity and Toolkit pin ​

Commit .foundry/project.toml. Init creates identity and pins the verified Toolkit. Keep the shared identity across clones. The example below comes from this repository. Use your generated identity and digest.

text
schema_version = 2
project_id = "project_24a65729-12e3-460e-bc96-25d51eaebd9b"
publication_root = "foundry"
minimum_cli_version = "2.0.0"
toolkit_version = "2.0.0"
toolkit_digest = "sha256:82cd76b4e1c0885ff045d059edad03408c3295c8cf7b21c3fc32b69b7bab5cf5"

[knowledge]
choice = "e11"
decided = "2026-10-12"

The [knowledge] table is the answer to what agents should know about: none, own, e11 or other, and the day it was last given. Init writes it and raises minimum_cli_version to the CLI that wrote it. The names picked for other live in .alloy/corpus.lock, not here. config.toml is regenerated from the answer (e11_platform is on only for e11); set e11_platform under [modules.foundry] in .foundry/custom/config.toml to override it.

Price list ​

Commit .foundry/pricing.json. Each rate is microdollars per million tokens. One dollar equals one million microdollars. The engine pins the snapshot for each run. Doctor compares rates with the CLI’s published table.

text
{
  "schemaVersion": 1,
  "capturedAt": "2026-09-09T00:00:00.000Z",
  "rates": {
    "anthropic/claude-opus-5": {
      "inputMicrosPerMillionTokens": 5000000,
      "outputMicrosPerMillionTokens": 25000000,
      "cacheReadMicrosPerMillionTokens": 500000,
      "cacheWriteMicrosPerMillionTokens": 6250000
    }
  }
}

This excerpt shows one model from the captured list. Retain the models your project intends to use and review their rates.

Execution profiles ​

Commit .foundry/profiles.toml. Use argument arrays for trusted commands. Story text does not supply executable shell commands. This example assumes your project provides pnpm test.

text
[profiles.default]
setup = [{ id = "install", argv = ["pnpm", "install", "--frozen-lockfile"], timeout_ms = 900000 }]
worker_scoped = [{ id = "test", argv = ["pnpm", "test"], timeout_ms = 600000 }]
acceptance = [{ id = "test", argv = ["pnpm", "test"], timeout_ms = 600000 }]
final = []
environment = []

[worker]
attribution = false
FieldPurpose
setupPrepare dependencies before the worker.
worker_scopedTell the worker which checks to run.
acceptanceChecks the controller executes to judge delivery.
repairOptional write commands for repairing failed formatting checks once.
finalCommands at the final verification stage.
environmentNames of additional environment variables passed to workers and commands. Values stay outside the plan.
compare_with_baseBugfix profiles only. On unless set to false: the test and lint commands fail a fix only on failures the staged base did not already have.
[worker] attributionControls worker commit attribution. The default is false.

Match worker and acceptance checks. Edit profiles before planning because each run seals its profile. Use --profile <id> to choose a named profile.

Local and derived files ​

PathOwner and purpose
.foundry/local.jsonGenerated checkout identity link. Keep ignored.
.foundry/initiative.jsonLocal current initiative pointer. Keep ignored.
.foundry/config.tomlGenerated central project configuration. Keep ignored.
.foundry/config.user.tomlGenerated personal configuration. Keep ignored.
.foundry/custom/Handwritten team overrides are committed. Personal .user.toml files stay ignored.
.foundry/foundry/Materialized Toolkit files. Keep ignored.
.foundry/scripts/Helpers from the Toolkit. Keep ignored.
.claude/skills/Generated Foundry skills for Claude Code. Keep generated entries ignored.
.agents/skills/Generated Foundry skills for Codex. Keep generated entries ignored.
.opencode/skills/Generated Foundry skills for OpenCode. Keep generated entries ignored.

Visual verification files ​

Only an app that uses the optional visual add-on carries these.

PathOwner and purpose
<app>/visual.config.jsonCommitted, one per app. How to serve the app and sign in, envFiles, masks, errorText, errorSelectors, reference, screens, ledger, publish, evidence. e11 visual schema prints the schema.
<app>/visual/decision-ledger.yamlCommitted when the config's ledger key names it. Known, intentional differences from the design.
<app>/visual.local.jsonPer machine, ignored. Where the design reference checkout lives.
~/.e11-foundry/flow-hooks.jsonPer person, under Foundry Home. { "schemaVersion": 1, "visual": true } turns the flow hooks on in every project on the machine; no installer writes it.
{implementation_artifacts}/visual/<slug>/A run folder, under the initiative's stories when one is in force, the same for every hooked flow. features.md, visuals.md, composites/ (with a reconcile's composites/round-<n>/ pre-fix snapshots and its annotated NN-<id>.run.png composites), run.json, screens.run.json, findings.json and reconcile-report.md are committed; before/, after/, reference/, start/ and logs/ are ignored by the folder's own .gitignore.

Error intake files ​

Only a project that ran e11 errors init carries these. The working state is never in the checkout.

PathOwner and purpose
.foundry/custom/e11-errors.tomlCommitted. The errors projects, their sources and runners, budgets and the base branch.
.foundry/custom/errors/locate.mdCommitted. Where the team's code, logs and environments are, for the agent.
[profiles.bugfix] in .foundry/profiles.tomlCommitted. The default profile with e11 errors verify-repro last in worker_scoped and acceptance.
<publication_root>/errors/<project>/Committed through e11 errors ledger --cut. ledger.jsonl and one <slug>/ folder per root cause.
~/.e11-foundry/workspaces/<workspaceId>/errors/<project>/ledger/Per workspace, under Foundry Home. The working ledger every action reads and writes; e11 errors ledger prints it.
~/.e11-foundry/workspaces/<workspaceId>/errors/<project>/ledger.lockPer workspace. The lease every ledger writer holds.
~/.e11-foundry/workspaces/<workspaceId>/errors/<project>/nights/<date>.jsonPer workspace. One record per night: what it ran, spent, landed and ported, or the refusal that stopped it. e11 doctor reads them.
~/.e11-foundry/workspaces/<workspaceId>/errors/<project>/logs/Per workspace. The night's log and every step's output.
~/.e11-foundry/workspaces/<workspaceId>/errors/<project>/nightly.lockPer workspace. Held for a whole night.
~/.e11-foundry/workspaces/<workspaceId>/errors/<project>/port/<slug>/Per workspace. A port's replay worktree, removed when it ends.
~/.e11-foundry/workspaces/<workspaceId>/errors/nightly.envPer workspace, mode 600. The nightly job's tokens and PATH additions.
~/.e11-foundry/workspaces/<workspaceId>/errors/<project>/ledger/<slug>/pr.mdPer workspace. The pull request text the publish session wrote; e11 errors port --push opens the PR from it.
<checkout>.errors-<project>/Beside the checkout. The nightly job's own worktree, a Foundry checkout the sweep and engine runs work in; its errors state is the checkout's. e11 uninstall removes it.
~/Library/LaunchAgents/com.engineering11.foundry-errors.<project>.<hash>.plistPer checkout. The nightly job, running the CLI itself; <hash> names the checkout, so two clones keep two jobs. e11 errors schedule --remove or e11 uninstall removes it, and a job under the older name without the hash.

Managed ignore rules ​

Commit the ignore blocks written by init. They keep generated files out of Git and allow the three shared inputs and team overrides. Preserve block markers and contents exactly. A modified managed block causes a refusal.

sh
git check-ignore .foundry/local.json
git check-ignore .foundry/project.toml
git status --short

The first command should print the local file. The project file should have no ignore match. Your publication root belongs in Git. Remove an unrelated ignore rule if the rule hides stories.

Derived file ignore rules

Proprietary to Engineering11 LLC.