Where each harness finds skills and what the model is told about them before one is used. Exact directories for every scope are on the Locations page.
| Question | Codex CLIchecked at 0.162.1 | Claude Codechecked at 2.1.299 | Cursor Agentchecked at 2026.10.12-d47ca18 | OpenCodechecked at 2.0.29 | pichecked at 1.2.0 |
|---|---|---|---|---|---|
| Where it looks for skills | Codex scans
At 0.162.1 the bundled system skills are imagegen, openai-docs, review-agent, skill-creator and skill-installer; the docs' mention of a As of 0.163.0, system roots ignore directory symlinks. Host scans continue below SKILL.md and cap each root at 2,000 directories / 20,000 entries. Executor and cloud skill providers have their own limits. | Claude Code loads Cowork and cloud sessions (including routines) do not read Bundled skills ship with Claude Code; turn them off with | Project skills load from Built-in Cursor skills ( Only In CLI 2026.10.12, the | OpenCode reads The docs say the project walk stops at the project root, but 2.0.28 keeps going up to the filesystem root. There is no switch to turn off the | User skills come from Discovery is recursive and stops at a directory containing Loose |
| Nested folders and scan limits | Ordinary host roots scan recursively: a skill folder can be up to 6 directory levels below the root (root = 0). They skip hidden subdirectories and continue below a folder containing Checked in Codex 0.163.0 source. Each root is capped at 2,000 directories and 20,000 entries, so large trees can be incomplete before reaching the depth limit. AgentPlugin-format plugin roots accept only | Partly Only skill folders directly inside a skills directory are found (as of 2.1.302). Nested skills are skipped, whether they sit in a plain category folder or under another skill's This applies to both user and project Plugin skill folders and additional directories may scan differently; that is unknown. | CLI 2026.10.12-d47ca18 scans recursively through skill directories at depth 10 (root = 0). It skips hidden folders, This describes the CLI; the Cursor editor may behave differently. | Partly The built-in config skill scanner in v2.1.1 discovers nested SKILL.md files through directory depth 6 (root = 0), accepts loose .md files only at the root, skips hidden and ignored directories, and stops descending when a directory contains SKILL.md. It stats symlinks to classify files/directories. These bounds apply to this filesystem scanner, not arbitrary plugin-provided skills. OpenCode 1.x scan rules don't carry over to 2.x. At v2.1.1 the built-in config skill scanner starts at depth 0 and descends through depth 6, skips hidden/ignored directories, and stops below a directory containing SKILL.md. This is the built-in filesystem source, not a bound on every plugin-provided skill. | Scans recursively, but stops descending as soon as it finds an eligible There is no depth limit on the recursive scan. How symlink cycles are handled is unknown. |
| Stop scanning below a folder containing SKILL.md? | No, for recursive host roots. Finding Codex 0.163.0 source. AgentPlugin-format roots accept direct child skills only; deeper skills are excluded by that layout rule, regardless of whether a parent manifest exists. Cloud/custom providers are outside this finding. | Partly Nested skills are never found, even without a parent This applies to both user and project Plugin skill folders and additional directories may scan differently; that is unknown. | No. The recursive CLI scanner continues into subdirectories after finding This describes Cursor CLI 2026.10.12; the editor may behave differently. | Not documented Yes for the built-in config filesystem scanner in v2.1.1: once SKILL.md is found in a directory, it records that file and does not descend beneath that directory. Other plugin-provided skill sources are separate. Whether the scan continues below a folder that is already a skill is unknown. | Yes. An eligible A parent skill can still tell the agent to read nested files; being discovered as a skill and being readable are separate. |
| What the model sees before using one | The model gets a The budget covers only this initial list. A skill's full
| Every turn Claude sees a listing of each skill's name plus its Skills with
2.1.301 fixed skill listings disappearing after 2.1.304: compaction resends the skill list; /reload-skills sends only new/changed skills, and resumed/cloud plugin reloads avoid repeatedly resending the entire list. | At startup the agent is given the list of available skills with each skill's
| At each model step, OpenCode adds an | Pi adds an If neither Skills with |
| Many skills or long descriptions | Descriptions longer than 1,024 characters are cut to 1,021 characters plus No warning is shown when descriptions are only shortened; it appears only when skills are dropped. A skill dropped from the list can still be invoked by name with | Each skill's combined A skill whose description was dropped can still be invoked by name, but Claude is less likely to pick it on its own. | Partly Skills are not dropped for being numerous or long, but Use | Nothing is truncated or dropped. All eligible skills are listed with their full descriptions, and V2 enforces no limit on ID length or description length. When the set changes during a session, only additions and removals are sent, and the full list is resent whenever a skill's name or description changes. | Partly Pi has no limit on the number of skills and does not truncate descriptions: every skill is listed with its full description. A description over 1024 characters, or a name that breaks the naming rules (more than 64 characters, or anything other than lowercase letters, digits and hyphens), only triggers a startup warning, and the skill still loads. A |
| Two skills with the same name | Skills with the same Only exact duplicates of the same A bare | Enterprise beats personal, and personal beats project, so with | Partly The docs require | Skills are keyed by an ID taken from the path (the folder name for Inside one folder, Two skills can share a display | The first skill discovered with a name is kept, and Pi shows a collision warning naming the winning and losing paths. Precedence is project settings entries, then project auto-discovered skills ( Skill paths passed with |
| New or edited skills mid-session | Codex watches the skill folders and picks up new, edited or removed skills automatically, usually within about 10 seconds, so they apply on later turns without a restart. If a change doesn't show up, restart Codex. Edits to Skill folders on remote environments are not watched. | Yes. Claude Code watches File watching is off in bare mode. A skill already invoked stays in the conversation as it was rendered; Claude Code does not re-read the file on later turns. 2.1.304: compaction resends the skill list; /reload-skills sends only new/changed skills, and resumed/cloud plugin reloads avoid repeatedly resending the entire list. | Partly Skills are discovered when Cursor starts, so restart | Yes. Skill folders are watched, and about 100 ms after an edit settles the skills are rescanned. Config changes also trigger a rescan. On the next model step, the model is told about added or removed skills, or gets a fresh list if a name or description changed. No restart is needed. v2.1.1 serializes config-skill refreshes, deduplicates directory/file watches and debounces changes by 100 ms before reloading. | Pi does not watch skill files. After you add or edit a skill during a session, run |
| Disable or hide a skill | To disable a skill, add
| Add
| Set In CLI 2026.10.12 a skill whose | Partly Set | Set
|
Notes and sources
Codex CLI, 14 sources
- Codex does not implement Claude's disable-model-invocation SKILL.md field; the analogous policy lives in agents/openai.yaml with inverted polarity.
- No cited first-party contract establishes a separate per-skill switch for explicit user invocation.
- Source-observed in Codex 0.160.1 (d27764b82f7118f674371e6d6e76271d9d606edb): policy.allow_implicit_invocation: false excludes the entire skill row before initial listing budget allocation. Explicit invocation still consumes conversation context when instructions load.
- Plugin submission identity is plugin-name:skill-name (combined length <=64; names unique within plugin). This does not establish exact typed plugin invocation syntax.
- Local equal-name skills are not merged and both can appear in selectors; ambiguous bare-name resolution is unverified. See docs/research/plugin-skill-namespaces.md.
Where it looks for skills, 5
Nested folders and scan limits, 5
Stop scanning below a folder containing SKILL.md?, 5
What the model sees before using one, 4
Two skills with the same name, 4
Disable or hide a skill, 4
Claude Code, 6 sources
- The two controls are independent: a skill may be model-only, user-only, available through both channels, or unavailable through both invocation channels.
- Plugin skills use /plugin-name:skill-name; this namespace is supplied by plugin loading, not by copying standalone skill folders. See docs/research/plugin-skill-namespaces.md.
- 2.1.304 resends the catalog after compaction; /reload-skills sends only new or changed skills. Plugin reloads in resumed/cloud sessions no longer resend the entire list repeatedly.
- 2.1.304 limits skill hooks per source to 1,024 hooks and 16,384 matcher characters; under plugin-only hook policy, a main-conversation skill with excluded hooks no longer receives allowed-tools.
- 2.1.304 fixes Directory-plugin skills picked from Cowork cloud’s slash menu not running as commands. This hosted fix does not establish local filesystem discovery behavior.
Where it looks for skills, 1
Nested folders and scan limits, 2
- Claude Code 2.1.302 nested skills discovery and flattening crossover
Stop scanning below a folder containing SKILL.md?, 2
- Claude Code 2.1.302 nested skills discovery and flattening crossover
What the model sees before using one, 4
Many skills or long descriptions, 2
Two skills with the same name, 1
Disable or hide a skill, 2
Cursor Agent, 3 sources
- The reviewed Cursor contract does not establish a user-invocable equivalent for independently disabling explicit slash invocation.
Where it looks for skills, 3
Nested folders and scan limits, 3
Stop scanning below a folder containing SKILL.md?, 3
What the model sees before using one, 1
Many skills or long descriptions, 2
Two skills with the same name, 1
New or edited skills mid-session, 2
Disable or hide a skill, 2
OpenCode, 9 sources
Nested folders and scan limits, 5
Stop scanning below a folder containing SKILL.md?, 5
pi, 11 sources
- Pi advertises discovered skills to the model and loads them with read.
- --no-skills and enableSkillCommands are global controls; the cited contract does not establish a per-skill automatic-only policy analogous to disable-model-invocation.