Skip to main content
A repository in the current layout keeps only OuterLayer’s own files in .outerlayer/. Its instructions are in AGENTS.md, its skills in .agents/skills/ and its MCP servers in .mcp.json. See Agent context.
A repository that has not moved to that layout also keeps its sources in .outerlayer/, and outerlayer init --update moves them out:
A .outerlayer/ directory in a subfolder compiles the same way into that subfolder, such as packages/api/CLAUDE.md from packages/api/.outerlayer/AGENTS.md.

Who reads what

A change to policy or validators takes effect when it merges to the base branch, not when it is pushed on a feature branch.

config.json

What each target gets

In a repository that has not moved, outerlayer context emit writes these files for each target in targets: AGENTS.md is written whatever the targets are. For Cursor, each ${VAR} in mcp.json becomes ${env:VAR}, Cursor’s syntax for an environment variable.

commands/

Each Markdown file is a slash command. outerlayer context emit compiles it per target: Claude Code gets the file as written, frontmatter included. Cursor gets the frontmatter description as a comment and drops argument-hint.

policy.yaml and validators

See Policy and validators for every key.

Governed repositories

A repository that another linked repository of its factory governs may commit these files, and a repository that is governed commits its own CLAUDE.md, AGENTS.md and skills. The control plane’s files are not written into it. A laptop session gets them through outerlayer claude, from a copy under ~/.outerlayer/context/. outerlayer claude keeps one folder for each checkout that has skills in .agents/skills/ under ~/.outerlayer/context/own/. Its .claude/skills/ links to each of those skills, so Claude Code loads them under their own names. The CLI removes the folder of a checkout that no longer exists at the next launch. An earlier CLI committed .outerlayer-pin.json at the repository root. The launcher and the session hook do not read it, and a governed repository can delete it. See Share instructions across repositories.