Agent Harness · Reference sheet
Tool equivalents
One row per harness layer, across Claude Code, Codex and Antigravity. Badges mark version-specific and unverified cells.
Last verified 2026-09-30Claude Code v2.1.284 was the local version. Codex docs moved to learn.chatgpt.com in 2026. version-specific cells will change: re-check them against the changelog when a tool updates. unverified cells are gaps in the sources: test them on your installed version before relying on them.
- Rules:
AGENTS.mdin the repo root, and noCLAUDE.mdnext to it. Nestedtests/AGENTS.mdloads when a file there is read. - Skills: the files live in
.agents/skills/<name>/SKILL.md;.claude/skills/<name>is a symlink (a pointer) to that folder. Invoke with/name. - Reviewer agents:
.claude/agents/<name>.mdwithnameanddescription. - Permission rules and hooks:
.claude/settings.json; hook scripts in.claude/hooks/. Deny, then ask, then allow. - MCP:
.mcp.json; check withclaude mcp list. - Transcript:
/export file.txtfor text; raw JSONL under~/.claude/projects/<project>/. - Plan mode: Shift+Tab. On v2.1.283+ new sessions start in auto mode, so commits and launches can run unprompted unless your rules and guards say otherwise.
Legend. version-specific = true for the version checked on the date shown; re-check after an update. unverified = test it yourself before relying on it.
| Layer | Claude Code | Codex | Antigravity |
|---|---|---|---|
| Rules file & load order | CLAUDE.md; or AGENTS.md when no CLAUDE.md / .claude/CLAUDE.md / CLAUDE.local.md exists v2.1.277+ · verified 2026-09-30. At start: cwd and parents; subdirectory files when a file there is read. Fallback: CLAUDE.md = @AGENTS.md. Under 200 lines | ~/.codex/AGENTS.md (or AGENTS.override.md), then each directory git root to cwd (override, AGENTS.md, fallbacks); concatenated root-down, closer later; 32 KiB default (project_doc_max_bytes) verified 2026-09-30 | AGENTS.md / GEMINI.md as always_on; .agents/rules/*.md (flat; legacy .agent/rules/). Global: ~/.gemini/AGENTS.md or GEMINI.md verified 2026-09-30 |
| Path-scoped rules | .claude/rules/*.md with paths: (YAML list of globs); loads when a matching file is read; no paths = always verified 2026-09-30 | Nested AGENTS.md in the directory (root-down concatenation). Glob-scoped rule files: unverified | .agents/rules/*.md with frontmatter trigger: glob and globs:; other triggers always_on, model_decision, manual verified 2026-09-30 |
| Skills: location & invocation | .claude/skills/<name>/SKILL.md; per-skill symlink to .agents/skills/<name> works. /name or model-chosen from description; disable-model-invocation: true = manual only. A personal skill beats a project skill with the same name verified 2026-09-30 | .agents/skills/<name>/ in cwd and repo root; ~/.agents/skills; /etc/codex/skills. $skill-name or implicit verified 2026-09-30 | .agents/skills/<name>/SKILL.md (name, description). /name or chosen automatically verified 2026-09-30 |
| Workflows / custom commands | Custom commands were merged into skills verified 2026-09-30 | Custom prompts (~/.codex/prompts) deprecated in favour of skills verified 2026-09-30 | Workflows deprecated in favour of skills by 2026-11-01; migrate with /migrate-workflows date-specific · verified 2026-09-30. Workflow file path: unverified |
| Subagents | .claude/agents/<name>.md; name and description required; tools allowlist; model. Own context window. Invoke by natural language, @-mention (guarantees it), or --agent. /agents wizard removed in v2.1.198 verified 2026-09-30 | TOML in .codex/agents/ or ~/.codex/agents/: name, description, developer_instructions required; optional model, sandbox_mode (e.g. "read-only") verified 2026-09-30 | .agents/agents/<name>.md with name, description, tools, model verified 2026-09-30 |
| Hooks: events | hooks in settings.json. Events include SessionStart, UserPromptSubmit, PreToolUse, PostToolUse, Stop, PreCompact and others. Block: exit 2 or JSON deny. ${CLAUDE_PROJECT_DIR} verified 2026-09-30 | .codex/hooks.json (or config.toml). SessionStart, SessionEnd, PreToolUse, PermissionRequest, PostToolUse, PreCompact, PostCompact, UserPromptSubmit, SubagentStart, SubagentStop, Stop, Interrupt verified 2026-09-30 | .agents/hooks.json. PreToolUse, PostToolUse, PreInvocation, PostInvocation, Stop. PreToolUse decision allow | deny | ask verified 2026-09-30 |
| Permission rules | permissions.allow / ask / deny: Bash(git commit *), Read(./.env). Deny, then ask, then allow. Allow rules need workspace trust. Precedence: managed > CLI > settings.local > settings > user verified 2026-09-30 | .codex/rules/*.rules or ~/.codex/rules/default.rules: prefix_rule(pattern=[...], decision="allow|prompt|forbidden", justification=...); most restrictive wins verified 2026-09-30 | Deny / Ask / Allow lists: command(git), read_file(path), write_file(path) verified 2026-09-30 |
| Approval / permission modes | default (UI "Manual"), acceptEdits, plan, auto, dontAsk, bypassPermissions; Shift+Tab cycles modes; permissions.defaultMode "Manual" since v2.1.200 · verified 2026-09-30. Sessions start in auto v2.1.283+ · verified 2026-09-30 | approval_policy: on-request | never | granular | auto_review; untrusted is retired ("can prevent either client from starting") verified 2026-09-30 | Presets: Default, Request Review, Turbo; terminal auto-execution setting verified 2026-09-30 |
| Sandbox | Permission rules and OS sandboxing unverified | sandbox_mode: read-only | workspace-write | danger-full-access; project .codex/config.toml loads only when the project is trusted verified 2026-09-30 | enableTerminalSandbox unverified |
| MCP config | claude mcp add --transport http <name> <url> or claude mcp add <name> -- <cmd>; scopes local (~/.claude.json), project (.mcp.json), user. Project servers need approval; reset: claude mcp reset-project-choices verified 2026-09-30 | [mcp_servers.context7] in config.toml with command/args or url; CLI codex mcp add <name> -- <cmd> verified 2026-09-30 | .agents/mcp_config.json (workspace) or ~/.gemini/config/mcp_config.json: {"mcpServers":{"name":{"command","args"}}}; remote: serverUrl verified 2026-09-30 |
| Plan step | Plan mode (Shift+Tab): no source edits until you approve a plan; with auto mode available, a classifier may approve shell commands; or a /plan prefix on one prompt verified 2026-09-30 | Ask for a plan under a read-only sandbox unverified | /plan produces an Implementation Plan artifact verified 2026-09-30 |
| Attribution | attribution: portable {"commit":"","pr":"","sessionUrl":false}; false needs v2.1.281+ · older versions skip the whole file; includeCoAuthoredBy deprecated since v2.0.62 | Does Codex add a co-author trailer by default? unverified (conflicting sources; make a test commit) | Not documented unverified (make a test commit; the commit-msg hook catches a trailer either way) |
| Transcript location | /export [filename] (plain text); raw JSONL at ~/.claude/projects/<project>/<session>.jsonl; subagents under <session>/subagents/ verified 2026-09-30 | ~/.codex/sessions/YYYY/MM/DD/rollout-*.jsonl unverified (community sources only) | Not documented unverified |
| Output style | /output-style learning (built-in Learning: TODO(human) plus Insight); saved to .claude/settings.local.json. It is an instruction, not a guarantee verified 2026-09-30 | None as of 2026-09-30 unverified | None as of 2026-09-30 unverified |
Tool-neutral homes: AGENTS.md and .agents/skills/ work in all three. Guards 3 and 4 (git hooks and guard tests) are tool-neutral by construction. The paths in the Claude Code column are the course's working setup; the other columns are how you would build the same layers elsewhere.
Sources
Claude Code
Taught in: Lesson 1: How an agent works · Lesson 2: Rules files · Lesson 4: Plan-gated workflow · Lesson 5: Skills · Lesson 6: Reviewer subagents · Lesson 7: Guards · Lesson 8: MCP · Lesson 10: Evidence and honesty
Other sheets: AGENTS.md structure · The four guards · Commit skill · 1-3-1 · Glossary