Agent support

What baker writes for each agent, and why. File locations, hook events and transcript formats were checked against vendor docs and source in October 2026 (Codex 0.115 transcripts also against real files). Agent tools change fast; anything still marked verify is unconfirmed. The registry lives in internal/agents/agents.go.

Instructions

AGENTS.md is the single source. It is stewarded by the Linux Foundation’s Agentic AI Foundation and read natively by most tools.

AgentHow it gets AGENTS.mdNotes
Claude CodeCLAUDE.md containing @AGENTS.mdClaude Code skips AGENTS.md once a CLAUDE.md exists, so the import is required. Imports work better than symlinks: Claude’s edit tools don’t write through symlinks, and symlinks break on Windows.
Gemini CLIGEMINI.md containing @AGENTS.mdGemini can also be configured via context.fileName; the import works without config.
Aider.aider.conf.yml with read: AGENTS.mdAider (0.86) doesn’t read AGENTS.md on its own; read: loads it read-only every session.
CodexnativeConcatenates AGENTS.md files root → cwd, capped at 32 KiB by default. doctor warns.
Cursor, Copilot, OpenCode, Windsurf, Amp, Zed, Clinenative

Legacy files hide AGENTS.md. Zed reads only the first match from a list where .rules, .cursorrules, .windsurfrules and .clinerules come before AGENTS.md. baker never writes them, and doctor warns when they exist.

Skills

Canonical: .agents/skills/<name>/SKILL.md (Agent Skills standard). Claude Code doesn’t read .agents/, so baker mirrors skills to .claude/skills/. The mirror is checked by doctor and refreshed by sync.

MCP

Servers are declared once in baker.toml (or by a recipe) and written in each tool’s format:

AgentFileShape
Claude Code.mcp.json{"mcpServers": {name: {command, args, env}}}
Cursor.cursor/mcp.jsonsame as Claude
Gemini CLI.gemini/settings.jsonmcpServers key, merged with your other settings
Copilot (VS Code).vscode/mcp.json{"servers": {name: {type: "stdio", …}}}
OpenCodeopencode.json{"mcp": {name: {type: "local", command: [...], environment}}}
Codex.codex/config.toml[mcp_servers.name] in a managed block. Codex loads project config only once you trust the project (it asks the first time); ~/.codex/config.toml always works.

baker merges into existing JSON files and only adds or removes servers it registered (tracked in .baker/lock.toml).

User-level instructions (baker global sync)

AgentFile
Claude Code~/.claude/CLAUDE.md (+ skills → ~/.claude/skills/)
Codex~/.codex/AGENTS.md
Gemini CLI~/.gemini/GEMINI.md
OpenCode~/.config/opencode/AGENTS.mdWithout it, OpenCode falls back to ~/.claude/CLAUDE.md
Cursornone: user rules live in the settings UI

Only agents whose config folder exists are touched.

Checkpoint hooks

AgentHookStatus
Claude CodeStop + PreCompact in .claude/settings.json✅ {transcript_path, cwd} on stdin
Gemini CLIAfterAgent + PreCompress in .gemini/settings.json✅ {transcript_path, cwd} on stdin. Gemini asks before running a project hook the first time, and again if the command changes
Codexnotify in ~/.codex/config.toml (via baker global sync)✅ JSON payload (with cwd) as the last argument. Codex ignores notify in project config. Skipped if you already have a notify
othersnonehot.md and transcript recovery still work for Claude/Codex/Gemini transcripts

The hook entries come from HooksFile / HookEvents in the registry. Gemini parses hook stdout as JSON, so the command must print nothing; --quiet guarantees that.

Launch commands (baker resume)

AgentCommand
claudeclaude "<brief>"
codexcodex "<brief>"
geminigemini -i "<brief>"
opencodeopencode --prompt "<brief>" (verify whether it submits or only pre-fills; the flag exists)
aideraider --message "<brief>"

For anything else, use baker handoff --copy and paste.

Adding an agent

Add an entry to internal/agents/agents.go with its bridge (if it doesn’t read AGENTS.md), MCP file and format, global file, hook file and events (if it has Claude-style JSON hooks), and launch command. Then add a row to the tables above and to the README.

Edit this page on GitHub