Where each harness looks for definitions, grouped by scope. Numbers (#) give each path's place in the order; the Order row says what they mean. Paths are documented by the vendor unless marked undocumented.
Skills
| Where it looks | Codex CLI | Claude Code | Cursor Agent | pi | OpenCode |
|---|---|---|---|---|---|
| Project |
|
|
|
|
|
| User |
|
|
|
|
|
| Team, admin and managed |
|
| — | — | — |
| Plugins and packages |
|
|
|
| — |
| Built in |
| — | — | — |
|
| Configured or per run | — | — | — |
|
|
| Which skills are visible | Every definition stays visible | Every definition stays visible | Every definition stays visible | Every definition stays visible | One definition per ID survives |
| When names collide | Same-named definitions both appear | Namespaced when plugin; otherwise documented separately | Not established | Not established | Later source wins by id |
| Order |
|
|
|
|
|
| Recorded from | Codex CLI documentation; paths documented unless marked Primary reference | Claude Code documentation; paths documented unless marked Primary reference | Cursor Agent CLI documentation; paths documented unless marked Primary reference | pi coding agent documentation; paths documented unless marked Primary reference | Reviewed @opencode/cli (2.x) 2.0.29 Primary reference |
Codex CLI, notes and evidence
- Two skills with the same name are not merged; both may appear.
- Symlinked skill directories are followed.
- Numbered locations reflect the documentation listing; the unnumbered deprecated root is source-confirmed, not a documented precedence position.
- Reclassified 2026-10-14: v1 orderStatus was "documented-scan-order". The v1 notes state: "Numbered locations reflect the documentation listing; the unnumbered deprecated root is source-confirmed, not a documented precedence position." Positions are retained as listing only; runtime scan order is not established.
Evidence
- Codex: Agent Skills, first-party-docs, 2026-08-27
- Codex skill roots: deprecated user compatibility location, first-party-source, 2026-10-01
Claude Code, notes and evidence
- Claude Code 2.1.300 did not automatically discover project .agents/skills or user ~/.agents/skills in the 2026-10-15 isolated startup-inventory probe. Both .claude/skills controls were discovered; moving the identical .agents fixtures into .claude/skills made them appear. Invocation was not tested because the isolated home had no login.
- The documentation does not promise that this display order is duplicate-name precedence.
Evidence
- Claude Code: Extend Claude with skills, first-party-docs, 2026-10-15
- Claude Code 2.1.300 .agents/skills discovery and .claude/skills crossover probe, live-observation, 2026-10-15
Cursor Agent, notes and evidence
- Discovery is recursive.
- User roots do not transfer to cloud agents or remote workers.
- The documentation lists roots but does not establish duplicate-name precedence.
Evidence
- Cursor Agent Skills, first-party-docs, 2026-08-27
pi, notes and evidence
- --no-skills disables discovery but does not cancel explicit --skill paths.
- Pin pi version before relying on root Markdown discovery or duplicate precedence.
Evidence
- pi skills documentation, first-party-source, 2026-08-27
OpenCode, notes and evidence
- Released 2.0.29 source/documentation review; this is not a rerun of the retained 2.0.20 native probe.
- Later registered sources replace earlier definitions by path-derived ID; frontmatter name is a display label.
- Native config scans also accept the singular skill directory; explicit sources may be local directories or HTTP catalogs.
Evidence
- Released OpenCode 2.0.29 skill roots, identity, precedence and loading, first-party-source, 2026-10-15
- OpenCode 2.0.29 configured skill sources, first-party-source, 2026-10-15
- OpenCode 2.0.29 compatibility skill discovery, first-party-source, 2026-10-15
- OpenCode 2.0.29 skill parser, first-party-source, 2026-10-15
Instructions
| Where it looks | Codex CLI | Claude Code | Cursor Agent | OpenCode |
|---|---|---|---|---|
| Project |
|
|
|
|
| User |
|
|
|
|
| Team, admin and managed | — |
|
| — |
| Configured or per run | — | — | — |
|
| How instruction files combine | Path applicable | Merge applicable | Merge applicable | Combine |
| When instructions conflict | More specific wins | Context guidance not enforced policy | Earlier layer wins | No conflict resolution |
| Order |
|
|
|
|
| Recorded from | Codex CLI documentation; paths documented unless marked Primary reference | Claude Code documentation; paths documented unless marked Primary reference | Cursor Agent CLI documentation; paths documented unless marked Primary reference | Reviewed @opencode/cli (2.x) 2.0.29 Primary reference |
No research recorded for pi.
Codex CLI, notes and evidence
- Instruction discovery follows the working path and stops at the current directory; it is distinct from skill discovery.
- Files compose root-to-current-directory until the configured combined-byte limit is reached.
Evidence
- Codex AGENTS.md instructions, first-party-docs, 2026-10-15
Claude Code, notes and evidence
- See the Claude instruction contract for structured modes, exclusions, and version caveats.
- Reclassified 2026-10-15 from the documented load order at code.claude.com/docs/en/memory#how-claude-md-files-load.
Evidence
- Claude Code auto memory and instructions, first-party-docs, 2026-10-15
Cursor Agent, notes and evidence
- Project rules may activate always, by glob, by relevance, or manually.
Evidence
- Cursor rules, first-party-docs, 2026-10-15
OpenCode, notes and evidence
- V2 recognizes AGENTS.md only; CLAUDE.md fallback is not supported.
- OPENCODE_DISABLE_PROJECT_CONFIG=1 skips project discovery while retaining the global file.
- Loaded files combine without harness conflict resolution.
- Instruction order does not establish a winning conflicting instruction.
Evidence
- opencode docs: v2/docs/instructions/, first-party-docs, 2026-10-15
- opencode source: packages/core/src/config/plugin/instruction.ts, first-party-source, 2026-10-15
- opencode source: packages/core/src/tool/plugin/read.ts, first-party-source, 2026-10-15
- opencode source: packages/util/src/global.ts, first-party-source, 2026-10-15
Hooks
| Where it looks | Codex CLI | Claude Code | Cursor Agent | pi | OpenCode |
|---|---|---|---|---|---|
| Project |
|
|
|
|
|
| User |
|
|
|
|
|
| Team, admin and managed |
|
|
| — | — |
| Plugins and packages |
|
|
|
| — |
| Configured or per run | — |
| — |
| — |
| How hooks from several places combine | Merge all | Merge all | Merge all | Extension load order | Load all |
| When hooks conflict | All matching run | Decision precedence is event specific | All applicable sources | Middleware/event specific | Not established Handler interactions depend on hook and plugin; no global collision policy asserted. |
| Order |
|
|
|
|
|
| Recorded from | Codex CLI documentation; paths documented unless marked Primary reference | Claude Code documentation; paths documented unless marked Primary reference | Cursor Agent CLI documentation; paths documented unless marked Primary reference | pi coding agent documentation; paths documented unless marked Primary reference | Reviewed @opencode/cli (2.x) 2.0.29 Primary reference |
Codex CLI, notes and evidence
- All matching sources merge; higher-precedence config layers do not replace lower hook layers.
- Matching command hooks launch concurrently, so list order is not execution order.
Evidence
- Codex hooks, first-party-docs, 2026-10-15
Claude Code, notes and evidence
- Hook entries merge across settings levels rather than replacing each other.
- Matching handlers may run in parallel; event decision precedence is separate from source order.
- allowManagedHooksOnly can exclude user, project, local, and most plugin hooks.
Evidence
- Claude Code hooks reference, first-party-docs, 2026-10-15
Cursor Agent, notes and evidence
- The source list is not a guaranteed handler execution order.
- Cloud agents omit user hooks and several event types; command hooks only.
- Working directory differs by source scope.
Evidence
- Cursor hooks, first-party-docs, 2026-10-15
pi, notes and evidence
- Handlers that chain mutations run in extension load order; later handlers see earlier changes.
- Project extensions cannot participate in project_trust because they load only after trust resolves.
Evidence
- pi extensions documentation at 853a80d2, first-party-source, 2026-08-29
OpenCode, notes and evidence
- Direct .ts/.js files and immediate package directories are discovered; configured relative entries resolve from their config file.
- Hook handlers are plugin code, with event-specific control.
Evidence
- Released OpenCode 2.0.29 plugin discovery and configuration, first-party-source, 2026-10-15
Subagents
| Where it looks | Codex CLI | Cursor Agent | OpenCode |
|---|---|---|---|
| Project |
|
|
|
| User |
|
|
|
| Built in |
| — | — |
| Which definitions are visible | Name precedence | Name precedence | Agent definition merge |
| When names collide | Custom name overrides built in | First precedence wins | Not established |
| Order |
|
|
|
| Recorded from | Codex CLI documentation; paths documented unless marked Primary reference | Cursor Agent CLI documentation; paths documented unless marked Primary reference | Reviewed @opencode/cli (2.x) 2.0.29 Primary reference |
No research recorded for Claude Code, pi.
Codex CLI, notes and evidence
- A custom agent with the same name as a built-in agent takes precedence.
- Each custom agent is a standalone TOML configuration layer.
Evidence
- Codex subagents, first-party-docs, 2026-10-15
Cursor Agent, notes and evidence
- Project definitions take precedence over user definitions; native Cursor roots take precedence over compatibility roots for duplicate names.
Evidence
- Cursor subagents, first-party-docs, 2026-10-15
OpenCode, notes and evidence
- The same agent roots define primary agents and subagents; mode selects their role.
- Legacy numeric precedence metadata is not projected as a separately established scan or load sequence.
Evidence
- opencode docs: v2/docs/tools, first-party-docs, 2026-10-15
- opencode docs: v2/docs/agents, first-party-docs, 2026-10-15
- opencode source: packages/core/src/tool/plugin/subagent.ts, first-party-source, 2026-10-15
- opencode source: packages/tui/src/component/prompt/autocomplete.tsx, first-party-source, 2026-10-15
- opencode docs: v2/docs/commands, first-party-docs, 2026-10-15
- opencode source: packages/core/src/plugin/agent.ts, first-party-source, 2026-10-15
- opencode source: packages/core/src/config/plugin/agent.ts, first-party-source, 2026-10-15
- opencode source: packages/schema/src/config/agent.ts, first-party-source, 2026-10-15
- opencode docs: v2/docs/migrate-v1, first-party-docs, 2026-10-15
- opencode source: packages/core/src/session/subagent-completion.ts, first-party-source, 2026-10-15
- opencode source: packages/tui/src/config/keybind.ts, first-party-source, 2026-10-15
- opencode docs: v2/docs/config, first-party-docs, 2026-10-15
- opencode docs: v2/docs/permissions, first-party-docs, 2026-10-15
- opencode source: packages/schema/src/config/experimental.ts, first-party-source, 2026-10-15
- opencode source: packages/tui/src/routes/session/composer/subagents-tab.tsx, first-party-source, 2026-10-15
Plugins
| Where it looks | Codex CLI | Claude Code | Cursor Agent | pi | OpenCode |
|---|---|---|---|---|---|
| Project | — | — | — |
|
|
| User |
|
|
|
|
|
| Team, admin and managed |
|
|
| — | — |
| Plugins and packages | — | — | — |
| — |
| Configured or per run |
|
|
|
| — |
| Which plugins load | Enabled set | Enabled set | Enabled set | Extension load order | Load all |
| When names collide | Namespaced components | Plugin components namespaced | Not established | Component specific | Not established Handler interactions depend on hook and plugin; no global collision policy asserted. |
| Order |
|
|
|
|
|
| Recorded from | Codex CLI documentation; paths documented unless marked Primary reference | Claude Code documentation; paths documented unless marked Primary reference | Cursor Agent CLI documentation; paths documented unless marked Primary reference | pi coding agent documentation; paths documented unless marked Primary reference | Reviewed @opencode/cli (2.x) 2.0.29 Primary reference |
Codex CLI, notes and evidence
- The public contract is installation/enabling, not a stable cache path. Do not treat an implementation cache as an authoring root.
Evidence
- Codex plugins, first-party-docs, 2026-08-27
Claude Code, notes and evidence
- Installed plugins may be copied into a cache; plugin code must resolve assets through ${CLAUDE_PLUGIN_ROOT}, not its authoring path.
Evidence
- Claude Code plugins, first-party-docs, 2026-08-27
- Claude Code plugin loading and on-disk discovery, first-party-docs, 2026-10-15
Cursor Agent, notes and evidence
- Plugin-relative paths use ${PLUGIN_ROOT}; do not persist author-machine absolute paths.
Evidence
- Cursor plugins, first-party-docs, 2026-10-15
pi, notes and evidence
- pi calls this surface extensions/packages rather than plugins.
- Duplicate commands receive numeric suffixes in load order instead of silently replacing each other.
- V1 labeled loading "documented-partially" but did not record a complete sequence. No complete ordering is inferred during migration.
Evidence
- pi extensions documentation at 853a80d2, first-party-source, 2026-08-29
OpenCode, notes and evidence
- Direct .ts/.js files and immediate package directories are discovered; configured relative entries resolve from their config file.
- Hook handlers are plugin code, with event-specific control.
Evidence
- Released OpenCode 2.0.29 plugin discovery and configuration, first-party-source, 2026-10-15
MCP servers
| Where it looks | Claude Code | pi | OpenCode |
|---|---|---|---|
| Project |
|
|
|
| User |
|
|
|
| How server configs combine | Scope precedence | Project over global | Whole server replacement |
| Same server name in two places | Higher scope precedence wins | Project server name replaces global | Higher precedence config replaces server object |
| Order |
|
|
|
| Recorded from | Claude Code documentation; paths documented unless marked Primary reference | Reviewed pi coding agent 0.99.1 Primary reference | Reviewed @opencode/cli (2.x) 2.0.29 Primary reference |
No research recorded for Codex CLI, Cursor Agent.
Claude Code, notes and evidence
- V1 records scope precedence but no scope sequence. Its collision rule is retained separately; no exact ordering is inferred.
Evidence
- Claude Code MCP, first-party-docs, 2026-10-15
- Claude Code 2.1.251 MCP settings discovery observation, live-observation, 2026-09-08
pi, notes and evidence
- Applies to built-in MCP in 0.99.1. An extension registering /mcp replaces built-in session discovery; SDK sessions must opt in.
Evidence
- pi 0.99.1 MCP servers documentation, first-party-source, 2026-09-30
OpenCode, notes and evidence
- Managed system configuration and macOS MDM settings have higher priority.
- A same-name server object is replaced as a whole; fields do not merge.
- Project servers connect without a trust prompt; managed integration policies can block activation.
Evidence
- opencode docs: v2/docs/config/, first-party-docs, 2026-10-15
- opencode docs: v2/docs/mcp-servers/, first-party-docs, 2026-10-15
- opencode source: packages/core/src/config/plugin/mcp.ts, first-party-source, 2026-10-15
- opencode source: packages/core/src/config/plugin/policy.ts, first-party-source, 2026-10-15