agentleFS
V-SongbirdV-Songbird/foundry/AGENTS.md

foundry

AGENTS.md4 starsChanged 10 days agoMITView on GitHub

Foundry is the marketplace that lists the Foreman, Hush and Razor plugins for Claude Code and Codex. The plugins are Git submodules pinned by commit; this repository holds the two catalogs, the release procedure, the README contract the plugins share, the brand kit their images come from and the benchmark harness that measures them. Foreman and Razor also run on Antigravity, which has no catalog: its users install a plugin directory from a Foundry clone, which checks the plugin out…

  • Reads credentials
  • Where files are headingNew AGENTS.md files have more rules about keeping secrets out of the code, and fewer about code style.

    Of the AGENTS.md files we read, the 31,542 first seen in the last six months, against the older ones: the kind of rule that gained most share, and the kind that lost most. About files like this in general, not this one, and an estimate, since a kind is a pattern in the words.

  • In this repository5 other files it gives its agents.

The file

We split this AGENTS.md into the rules it gives an agent

8 rules. About 0 are common, 6 are distinctive, and 2 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈6

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 2

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Before changing a catalog or cutting a release, read the release procedure.

    line 16
  2. Distinctive:

    Before changing a plugin or flint, read its own AGENTS.md.

    line 17
  3. Distinctive:

    Before editing or reviewing a plugin README, read the README contract.

    line 18
  4. Very specific:

    Before adding or removing Antigravity in a skill's compatibility line, read the Antigravity skills record.

    line 19
  5. Distinctive:

    Before changing any banner, icon, host card, Ember scene or evidence graphic, read the brand guide.

    line 20
  6. Distinctive:

    Before writing or changing a mod (a hooks module that draws in Claude Code), read the native-look rules.

    line 21
  7. Very specific:

    Before changing benchmarks/ or starting a run, read the benchmarks README.

    line 22
  8. Distinctive:

    Run from the repository root unless a row names another directory.

    line 33

≈ “Common” is an estimate: at least 1 in 5 of the 40,246 AGENTS.md files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
AGENTS.md

Foundry

Foundry is the marketplace that lists the Foreman, Hush and Razor plugins for Claude Code and Codex. The plugins are Git submodules pinned by commit; this repository holds the two catalogs, the release procedure, the README contract the plugins share, the brand kit their images come from and the benchmark harness that measures them. Foreman and Razor also run on Antigravity, which has no catalog: its users install a plugin directory from a Foundry clone, which checks the plugin out at its pinned commit, and Antigravity reads that plugin's own root plugin.json and hooks.json. Nothing is installed here except one package in benchmarks/, the Agent SDK that live --sdk runs need, and the only build is the artwork under brand/. The plugins run their hooks and tests with Node.js 22 or later and Git; Foreman needs Git 2.25 or later.

Start here

  • For installation and the plugin table, read README.md.
  • Before changing a catalog or cutting a release, read the release procedure.
  • Before changing a plugin or flint, read its own AGENTS.md; each submodule is a separate repository with its own rules, tests and changelog.
  • Before editing or reviewing a plugin README, read the README contract.
  • Before adding or removing Antigravity in a skill's compatibility line, read the Antigravity skills record.
  • Before changing any banner, icon, host card, Ember scene or evidence graphic, read the brand guide.
  • Before writing or changing a mod (a hooks module that draws in Claude Code), read the native-look rules.
  • Before changing benchmarks/ or starting a run, read the benchmarks README; a live run starts paid model sessions.
  • To add, pick, correct or close roadmap work, use Foreman (/foreman:foreman). Foundry's ROADMAP.jsonl and .foreman/ are local and ignored; read the pitfall on old commits before any checkout.

Rules that outrank everything

  • A catalog entry never carries a version. The version lives in the plugin's manifests, and a release moves only source.sha and the gitlink.
  • A plugin listed in both catalogs pins the same main commit in both. Hush ships for Claude Code only and stays out of the Codex catalog. Antigravity needs no catalog entry; a plugin that ships for it carries a root plugin.json with the same version as its other manifests.
  • Plugin source changes happen in the plugin's repository on a topic branch, never as loose edits on the pinned checkout.

Commands

Run from the repository root unless a row names another directory.

CommandPurposeCost
claude plugin validate .Validate the Claude Code catalogLocal
agy plugin validate foreman or agy plugin validate razorValidate a plugin's Antigravity packageLocal; needs the Antigravity CLI
node --test tests/*.test.js from foreman/, hush/ or razor/One plugin's suiteLocal temporary fixtures; razor's suite fails under the system temp directory. Foreman's suite takes about 300 s; narrow it with --test-name-pattern
The pin check in cut-release step 4Pins, gitlinks and manifest versions agreeLocal Git reads in each plugin. It reads catalogs and gitlinks from the checkout it runs in and plugin history from the Foundry root it is given; from a worktree, pass the Foundry root
node scripts/check-shared-copies.js, node --test scripts/check-shared-copies.test.jsThe plugins' hand-copied files, listed in cut-release step 4, agree at their pins, and flint's output-styles/hush.md matches Hush's at the commit flint's README names, minus the plugin-only parts flint's AGENTS.md lists; the test proves a changed copy failsLocal reads; a plugin with no checkout is skipped and named, and a run that compared nothing fails. It reads gitlinks, staged ones included, from the checkout it runs in and plugin history from the root argument: from the top of a worktree without plugin checkouts, node scripts/check-shared-copies.js <root> checks the worktree's gitlinks against the Foundry root's plugins. The test takes about a minute and prints nothing until it ends; --test-reporter=spec shows progress
node scripts/check-references.js --root . --memory .claude/memory --exclude "fixtures/" --exclude "^benchmarks/hush/anchors/" --allow "^src/auth\.js" --allow "^src/legacy/cache\.js", node --test scripts/check-references.test.jsEvery Markdown link and anchor, related_files entry, memory pointer, SKILL.md reference and manifest path resolves, and no public file points at an ignored target; exit 1 on a hard break, prose paths only warnLocal reads of the root and the plugin checkouts. It needs every plugin checked out: in a worktree, Foundry's links into the plugins report as missing, so the test's run on this repository is skipped there
node scripts/check-mod-colors.js --types <claude-code.d.ts> [--exceptions <file>] <mod folder>..., node --test scripts/check-mod-colors.test.jsA mod paints only with theme keys; raw colors only where an approved exception lists themLocal; the types file is the one the plugin-authoring skill names when it loads
node --test scripts/cut-release-block.test.jsThe bash block of cut-release step 4 parses, and runs as written from this checkout with exit 0Local; needs a bash that finds node and git, which on Windows is Git's own, and the run needs the claude CLI. The run is skipped and names the plugins when a catalogued plugin has no checkout, as in a worktree; CI checks out no submodules, so this test stays local
git submodule update --initCheck every plugin out at its pinned commitNetwork on a fresh clone
node --test scripts/claude-hooks/*.test.jsThe repository's own hook, which reruns a plugin's suite after an edit under its scripts/ or hooks/; for Foreman, only the test files that cover the edited moduleLocal temporary fixtures
node brand/mascot/build.cjs, node brand/graphics/build.cjsRebuild the Ember scenes or the evidence graphicsLocal
node brand/identity/build.cjsRebuild icons, README banners, wordmarks and social cardsLocal; needs Segoe UI and Sharp at the sharp.sharp version in brand/identity/build-environment.json, resolved normally or through NODE_PATH; the repository installs neither
node brand/identity/build-review.cjsRefresh the review gallery brand/identity/index.htmlLocal
node brand/check-timing.js <svg>Check the SMIL timing lists of an animated SVGLocal
npm ci from benchmarks/Install the Agent SDK pinned in benchmarks/package.json, which only a live --sdk run loadsNetwork, once per checkout; the offline tests and claude -p runs do not need it
node --test foreman/tests/*.test.js, hush/tests/*.test.js or razor/tests/*.test.js from benchmarks/One benchmark suite's offline tests: runners, scorers and fixtures, with no model sessionLocal; reads the plugin checkouts, so CI, which checks out no submodules, cannot run them. From a worktree, set BENCH_PLUGINS_DIR and BENCH_DATA_DIR as the benchmarks configuration says
node runner/hillclimb.js --smoke, --variant <variant> --from <run> or --variant <variant> --regrade from benchmarks/<suite>/The suite's entry point for /claude-api build-eval and /claude-api hillclimb, called once per variant: it writes results.jsonl, traces/ and errors.jsonl under the ignored .claude/hillclimb/<suite>/<variant>/. --smoke grades oracle and null answers; --regrade grades stored output twice and lists changed verdictsLocal with --smoke, --from or --regrade, under the same rules as the row above, except that Hush's --go --max-usd <usd> sends its fidelity judge to the Message Batches API, billed to ANTHROPIC_API_KEY. --variant alone starts the suite's live run, which starts paid model sessions; read Hill-climb a suite first

CI runs .github/workflows/validate-marketplace.yml on pushes and pull requests to main. Its validate job is the check the default branch's ruleset requires. It checks both catalogs: no entry carries a version, each has a full source.sha and a ref, each name is a submodule path whose gitlink names that same commit, and a plugin in both catalogs has one pin. Then it runs claude plugin validate .. A gitlink moved off its pin therefore fails CI. The cut-release step 4 pin check and shared-copy check stay local steps, because they read the plugin checkouts and CI checks out no submodules.

Where things live

PathContent
.claude-plugin/marketplace.jsonClaude Code catalog: foreman, hush, razor
.agents/plugins/marketplace.jsonCodex catalog: foreman, razor
foreman/, hush/, razor/Plugin repositories, mounted as submodules
flint/Plain-text writing and coding instructions; a submodule outside both catalogs. Its gitlink moves in an ordinary commit, only to a commit already on flint's origin/main; the cut-release shared-copy check compares its style copy with Hush's, and nothing else in cut-release or CI covers it
.claude/skills/cut-release/, .agents/skills/cut-release/The release procedure, user-invoked only: Claude Code's skill holds the steps, and the .agents/skills/ skill, which Codex and Antigravity both find, delegates to it with notes for those hosts; its agents/openai.yaml sets Codex's display name and prompt and turns implicit invocation off, and its disable-model-invocation: true keeps it out of the list Antigravity offers the model (record)
.claude/skills/brand/, .agents/skills/brand/The artwork procedure for Claude Code, Codex and Antigravity; the two SKILL.md files stay identical, and the Codex skill's agents/openai.yaml sets its display name and default prompt
.claude/agents/, .codex/agents/plugin-docs-reviewer, the read-only README review, for Claude Code and Codex; the two share one body that differs only in naming Bash or shell commands, so a change goes into both. On Codex it is read-only by its instructions only, because an agent role cannot set its sandbox, and starting the parent session with -s read-only enforces it
.claude/settings.json, .codex/hooks.jsonShared Claude Code settings and the Codex hook registration for this checkout
.github/workflows/validate-marketplace.yml, .github/dependabot.ymlThe CI workflow that produces the required validate check, and the weekly update of its pinned actions
scripts/claude-hooks/The post-edit hook that reruns the touched plugin's tests, with its own test
scripts/check-shared-copies.jsThe check that the plugins' hand-copied files, and flint's copy of Hush's style, agree, with its own test
scripts/cut-release-block.test.jsThe test that runs cut-release step 4's bash block as written
brand/The brand kit: sources, generators and the exported images each plugin copies into its assets/
benchmarks/The benchmark harness: per-plugin runners, fixtures and offline tests; paths.js resolves the plugin checkouts and the ignored .private/benchmarks/<plugin>/ folder that holds run history and output; bench-config-dir.js resolves BENCH_CONFIG_DIR, the scratch Claude state folder a live run needs; test-env.js gives a test that spawns a runner an environment without keys or Claude config folders; sdk-session.js runs a live session through the Agent SDK when a runner gets --sdk, and package.json with its lockfile pins that SDK; hillclimb.js writes the per-variant files that each suite's runner/hillclimb.js hands to /claude-api hillclimb
docs/knowledge/Public documentation: the plugin README contract, the brand guide, the native-look rules for mods (mod-native-look.md) and the Antigravity skills record

Conventions

CLAUDE.md imports this file; keep shared project facts here. Codex reads this file directly.

Each plugin keeps its README, AGENTS.md, tests and docs/knowledge/changelog.md in its own repository. Edit them there, merge into that plugin's main, then re-pin here through the release procedure. This repository carries no single plugin's documentation, only the README contract the three share.

Pitfalls

  • Old commits track the roadmap. Commits before 23db23e8 track ROADMAP.jsonl and .foreman/, so checking one out, or a reset or rebase across it, replaces or deletes the local roadmap. Copy both outside the repository first, or read old commits with git show or a separate worktree.
  • A fresh clone leaves every plugin on a detached HEAD at its pin. A commit made there lands on no branch; switch to a branch in the plugin first.
  • A plugin checkout serves one session at a time. When another task holds a branch or uncommitted edits in foreman/, hush/ or razor/, work in a separate worktree under the root's ignored .private/: git -C <plugin> worktree add ../.private/<plugin>-<id> -b <branch> main, where <id> names your task. The post-edit hook reruns the worktree's suite after an edit in its scripts/ or hooks/. To compare its committed shared copies before merge, run node scripts/check-shared-copies.js --<plugin> .private/<plugin>-<id>, which reads that plugin at the worktree's HEAD and the others at their pins. When an entry changes a shared file in several plugins, pass one override per worktree in the same run; one worktree alone is compared with the others' old pins. For a flint worktree, --flint <dir> reads that worktree's HEAD and compares its output-styles/hush.md with Hush's. After the branch merges, remove it with git -C <plugin> worktree remove ../.private/<plugin>-<id>.
  • A desktop-app worktree keeps the plugin worktree inside it. A session the desktop app started in its own worktree under .claude/worktrees/ adds the plugin worktree there. First run git -C <app worktree> rev-parse --show-toplevel. When it prints the Foundry root, called <root> below, the app folder is not a worktree and Git there acts on the root: if the folder is empty, run git -C <root> worktree add --detach <app worktree> main; if it is not empty, stop and report it rather than clear it, because that command then fails with already exists. Otherwise run git -C <app worktree> switch --detach main. After either command, .private/ is ignored there; add the plugin worktree at <app worktree>/.private/<plugin>-<id>. Pass that absolute path to --<plugin>, as in node scripts/check-shared-copies.js --<plugin> <app worktree>/.private/<plugin>-<id> <root>, because a relative override resolves against the root argument, not the current directory.
  • A pushed gitlink ships to Antigravity. Claude Code and Codex install the catalog's source.sha, but a Foundry clone checks each plugin out at its gitlink, and Antigravity installs that checkout. A release moves both together; never push a main where they differ.
  • git submodule update moves each plugin back to its pin. It stops on uncommitted edits to tracked files; untracked files stay.
  • An Antigravity install is a copy of a checkout, not a pin. agy plugin install copies the directory it is given; a plugin checked out anywhere but its pinned commit installs that other state. An install takes a new release only when its user pulls the clone, runs git submodule update --init and installs again.
  • A plugin's assets/ holds copies. An image edited there is overwritten by the next copy from brand/; change the kit, rebuild, then copy.
  • Codex trusts the Foundry root, not a worktree. Codex loads .codex/agents/ and .codex/hooks.json only in a trusted project, and it keys that trust on the main checkout's path. From a worktree, trust the Foundry root, as in codex -c "projects.'<root>'.trust_level='trusted'"; Codex reports a worktree path under projects as an ignored setting. Project trust loads the hooks, but each hook runs only after the owner also trusts it in Codex's /hooks step, which only the owner persists.
  • Codex's /hooks trust covers a hook's registration, not its script. The trust records a hash of the hook's event, matcher and handler settings: its command, timeout and other handler fields. Codex keys that trust on the absolute path of .codex/hooks.json, so a hook trusted in one checkout is not trusted in another. A changed registration stays off until the owner trusts it again; a changed hook script needs no new trust. From a worktree, the owner runs that trust step as codex --no-daemon, because a long worktree path breaks the TUI's socket.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.