Where each harness looks for definitions, grouped by scope. Numbers (#) come from the source research; the Order row says what they mean. Paths are documented by the vendor unless marked source-confirmed or observed in a probe.
Skills
| Where it looks | Codex CLI | Claude Code | Cursor Agent | OpenCode | pi |
|---|---|---|---|---|---|
| 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 | One definition per ID survives | Every definition stays visible |
| When names collide | Same-named definitions both appear | Namespaced when plugin; otherwise documented separately | Not established | Later source wins by id | Not established |
| 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.20 Primary reference | pi coding agent documentation; paths documented unless marked 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
OpenCode · notes and evidence
- Pinned V2.0.20 tag 84c9be93a56304a108f1a22df0c5d62c26d5b6ca and published @opencode/cli-darwin-arm64 2.0.20; distinct from opencode-ai 1.x and the earlier dev branch snapshot.
- IDs derive from the containing directory or a source-root Markdown filename. Frontmatter name is a display label; equal names with different IDs coexist.
- Source loops and sorted file loops are sequential. Later valid definitions replace earlier entries by ID; observed selections stayed stable across unchanged fixtures and file-size perturbations.
- Order is low to high duplicate-ID precedence for this version, unlike the unproven root order in the 1.18.18 contract.
- Within one source, files are sorted before loading; directory root-probe/SKILL.md replaced flat root-probe.md in the native probe.
- Exact repeated source definitions are deduplicated at first registration; repeating a registered directory in explicit config does not raise its precedence.
- No duplicate warnings were observed in these probes; neither pinned loader emits a duplicate warning. Warning absence is not proof that duplicate instances are absent.
- GET /api/skill returns registered entries with id, name and path; its first response can precede plugin activation. Probe waits for skill plugins to be active and three identical inventory snapshots.
- Native inventory does not prove model advertisement or invocation. V2 advertises permitted described skills unless autoinvoke is false and resolves invocation by ID, according to pinned source.
- Cross-harness visibility persists; installer enablement intent does not prevent a compatible copy from being discovered. Removing the winning copy can expose a lower-precedence copy.
- Sources also scan singular skill directories and configured URL catalogs; those roots were not natively probed here. Built-in override ordering is documented/source-backed, not separately probed.
- Ancestor discovery uses fs.up without a git-root stop at this source revision; it must not inherit the v1-stable traversal claim.
Evidence
- OpenCode V2.0.20 skill IDs, discovery and precedence documentation · first-party-source · 2026-10-01
- OpenCode V2.0.20 sequential config skill loading · first-party-source · 2026-10-01
- OpenCode V2.0.20 compatibility root loading · first-party-source · 2026-10-01
- OpenCode V2.0.20 path-derived IDs and display names · first-party-source · 2026-10-01
- OpenCode V2.0.20 ancestor and compatibility config discovery · first-party-source · 2026-10-01
- OpenCode V2.0.20 native skill inventory handler · first-party-source · 2026-10-01
- OpenCode V2.0.20 isolated repeated skill-root and ID selection · live-observation · 2026-10-01
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
Instructions
| Where it looks | Codex CLI | Claude Code | Cursor Agent |
|---|---|---|---|
| Project |
|
|
|
| User |
|
|
|
| Team, admin and managed | — |
|
|
| How instruction files combine | Path applicable | Merge applicable | Merge applicable |
| When instructions conflict | More specific wins | Context guidance not enforced policy | Earlier layer wins |
| 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 |
No research recorded for OpenCode, 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
Hooks
| Where it looks | Codex CLI | Claude Code | Cursor Agent | pi |
|---|---|---|---|---|
| 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 |
| When hooks conflict | All matching run | Decision precedence is event specific | All applicable sources | Middleware/event specific |
| 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 |
No research recorded for OpenCode.
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
Subagents
| Where it looks | Codex CLI | Cursor Agent |
|---|---|---|
| Project |
|
|
| User |
|
|
| Built in |
| — |
| Which definitions are visible | Name precedence | Name precedence |
| When names collide | Custom name overrides built in | First precedence wins |
| Order |
|
|
| Recorded from | Codex CLI documentation; paths documented unless marked Primary reference | Cursor Agent CLI documentation; paths documented unless marked Primary reference |
No research recorded for Claude Code, OpenCode, 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
Plugins
| Where it looks | Codex CLI | Claude Code | Cursor Agent | pi |
|---|---|---|---|---|
| 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 |
| When names collide | Namespaced components | Plugin components namespaced | Not established | Component specific |
| 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 |
No research recorded for OpenCode.
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
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
MCP servers
| Where it looks | Claude Code | pi |
|---|---|---|
| Project |
|
|
| User |
|
|
| How server configs combine | Scope precedence | Project over global |
| Same server name in two places | Higher scope precedence wins | Project server name replaces global |
| Order |
|
|
| Recorded from | Claude Code documentation; paths documented unless marked Primary reference | Reviewed pi coding agent 0.99.1 Primary reference |
No research recorded for Codex CLI, Cursor Agent, OpenCode.
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