Project-level config should support disabling global/user skills while preserving repo skills
What version of Codex CLI is running?
codex-cli 0.133.0
What subscription do you have?
ChatGPT Pro
Which model were you using?
gpt-5.5
What platform is your computer?
Darwin 25.4.0 arm64 arm
What terminal emulator and version are you using (if applicable)?
iTerm2
Codex doctor report
What issue are you seeing?
Use case:
- I have many global/user skills installed under
~/.agents/skills, such as Lark/Feishu-related skills. - In one specific repository, those global skills are not relevant and consume the skills context budget.
- The repository also has its own project skills under
.codex/skillsand.agents/skills, and those should still be injected.
Current behavior in Codex 0.133.0:
- Project
.codex/config.tomlis loaded. - Project-level
[skills] include_instructions = falseworks, but it disables all skills, including repo/project skills. - Project-level
[[skills.config]]does not filter global/user skills. - Session-level
-c 'skills.config=[...]'can filter skills, so the selector itself is not the issue. - Source code appears to only apply
skills.configfromUserandSessionFlagslayers, notProjectlayers.
Expected behavior:
- A trusted project should be able to filter user/global skills for that project only.
- Repo/project skills should remain injected.
- Global config should remain unchanged for other projects.
This would solve the common case where global skills are useful generally, but too noisy or irrelevant for specific repositories.
What steps can reproduce the bug?
- Install a user/global skill, for example:
~/.agents/skills/lark-doc/SKILL.md
- In a trusted repository, create a project-local Codex config:
.codex/config.toml
```toml
[[skills.config]]
name = "lark-doc"
enabled = false
I also tested path selectors, for example:
[[skills.config]]
path = "/Users/<user>/.agents/skills/lark-doc/SKILL.md"
enabled = false
- From that repository, run:
codex debug prompt-input probe
- Check the generated <skills_instructions> block.
Expected:
The lark-doc skill should be removed from the model-visible skills list for this project only.
Actual:
The project-local .codex/config.toml is loaded, but lark-doc is still present in <skills_instructions>.
Control checks:
- Project config loading works. For example, setting model = "project-config-probe" in .codex/config.toml is reflected by codex doctor --json.
- Project-level [skills] include_instructions = false works, but it disables all skills, including repo/project skills.
- Session-level override works:
codex debug prompt-input \
-c 'skills.config=[{name="lark-doc", enabled=false}]' \
probe
In that case, lark-doc is removed, so the selector itself is not the issue.
This makes it impossible to disable user/global skills for one repository while preserving repo/project skills.
What is the expected behavior?
_No response_
Additional information
_No response_
4 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
I looked at the current config-rule path and this does look like a layer-selection issue rather than a selector issue.
In
codex-rs/core-skills/src/config_rules.rs,skill_config_rules_from_stack()currently iterates the config layer stack but only acceptsConfigLayerSource::UserandConfigLayerSource::SessionFlags. That matches the reported behavior:-c 'skills.config=[...]'works;.codex/config.tomlis loaded for other settings;[[skills.config]]is ignored for skill filtering.A small MVP could be to allow trusted project layers to contribute
skills.configrules, while preserving current precedence order. That would let a repository opt out of noisy user/global skills without using[skills] include_instructions = false, which is too broad because it disables repo/project skills as well.Suggested acceptance criteria:
name.path.include_instructions = falsebehavior remains unchanged.This also seems related to #24299 and #21425: users with large global/plugin skill sets need a project-scoped way to reduce prompt noise without changing their global setup.
I am on Pro x20 subscription, and when you work with a bunch of projects and subprojects — the feature to selectively enable/disable Personal/Team skills is essential. Right now, it clatters the skills view with copies of the same skill just from another level.
Here is how it looks for me:
<img width="753" height="443" alt="Image" src="https://github.com/user-attachments/assets/cc7cd0fb-fcff-4e07-80ca-ea476140ba54" />
So, just filtering out by name is not enough. Perhaps, we should also be able to filter out by path or level (Global/Personal/Team/Project)
Fixing/imroving this will make my workflow more error-prone (especially in cases when top-level skill has different functionality under the same name).
@etraut-openai, fyi
I ran into the same problem and ended up building CLROOM, an open-source launcher for this workflow.
For a Codex launch it keeps repo/project skills available, blocks global
AGENTS.mdand unselected global skills, and leaves your normal global setup untouched.You can then bring back only the global skills you want for that run:
So: project skills stay, unrelated global skills stay out, and nothing has to be removed or rewritten globally.
CLROOM started as a tool for isolated skill testing, so a plain launch uses Clean Room defaults: apps, hooks and plugins are off, developer instructions and notifications are cleared, and shell environment inheritance is reduced.
For normal day-to-day work, I’d start with:
This keeps the skill filtering while bringing apps, hooks and plugins back for your Codex launch.
Or enable only the ones you need.
Current alpha: macOS / Apple Silicon
https://github.com/ewgenij87snwork/clean-room-launcher
I’m the author — I’d really like to know whether this covers the workflow described here, or what’s still missing.