$skill explicit invocation ignores local explicit-only skills absent from implicit skill list
What version of Codex CLI is running?
codex-cli 0.131.0
What subscription do you have?
ChatGPT auth PRO
Which model were you using?
gpt-5.5
What platform is your computer?
Linux 7.0.3-arch1-2 x86_64 unknown
What terminal emulator and version are you using (if applicable)?
Konsole 26.04.1, tmux 3.6a
Codex doctor report
{
"overallStatus": "ok",
"codexVersion": "0.131.0",
"auth": "ChatGPT auth",
"model": "gpt-5.5",
"platform": "linux-x86_64",
"terminal": "Konsole 26.04.1",
"multiplexer": "tmux 3.6a",
"installMethod": "npm",
"note": "Full doctor output contained local absolute paths and was redacted for public issue."
}
What issue are you seeing?
After the dumbing down of the underlying GPT-5.5 models recently. Stuff like this is preventing the agent from resolving skills marked with:
policy:
allow_implicit_invocation: false
Tried with different kinds of reasoning. Was not a problem before.
Should we wait for 5.6 or is it worth addressing?
---
Explicit $skill invocation failed for a local explicit-only skill.
The user invoked:
$act-learn-action
The skill existed at:
.codex/skills/act-learn-action/SKILL.md
Codex did not load it because the skill was absent from the model-visible implicit “Available skills” list. The assistant treated that list as exhaustive and said the named skill was unavailable.
That is incorrect. Explicit-only skills are intentionally not advertised for implicit routing, but $skill should still resolve them.
What steps can reproduce the bug?
- Install an explicit-only skill under:
.codex/skills/act-learn-action/SKILL.md
- Start a Codex session where that skill is not listed in the implicit “Available skills” block.
- Ask Codex:
$act-learn-action update the relevant workflow so this correction is learned
- Observe that Codex reports the skill unavailable instead of loading the local skill.
What is the expected behavior?
When the user explicitly writes $act-learn-action, Codex should resolve that exact skill name from local configured
skill roots such as .codex/skills.
Explicit-only skills should remain excluded from implicit skill matching, but $skill invocation should be reliable
and should not depend on the implicit “Available skills” list.
Additional information
This appears related to #19695, but this report is specifically about the $skill explicit invocation path.
The key bug is treating the implicit advertised skill list as exhaustive even when the user explicitly invokes a skill
by name.
Chat log:
Me:
$act-learn-action need to update the intake skill or workflows to fix this bullshit
It:
The named $act-learn-action skill is not available in this session, so I’ll use the repo’s create-skill workflow and patch the source skill/workflow files directly. The failure was in approval-artifact selection, so I’m going to find where that workflow is authored and add hard ordering/validation rules there, then rebuild/verify if the repo supports it.
8 Comments
Bumping this, this bug is extremely annoying, codex will refuse to use the skill even though the skill appears valid in the TUI picker
This OP issue doesn't capture the exact condition for the bug, it specifically happens when you invoke an explicit-only skill while codex is currently working (as a "steer")
This made skills usage fully unreliable. We can no longer be sure that when we invoke a skill essential for the task, it will be used by Codex.
It happens not only when "steering"; it's just how it works now, for any mode/prompt/workflow.
Explicit-only skills became almost completely unusable as of 2026-06-19.
---
More and more are leaning toward abandoning OpenAI products because they break things that aren't supposed to ever be broken.
Glad I didn't buy a $100 subscription, as no one should pay that amount for a product with such poor QA.
@ OpenAI this is why Claude is better for development in many ways, Anthropic and a growing number of community understands about the context sweet spot, keeping a large library of skills user invoke only is the best way to manage that context window along with a ton of other framework efforts to curtail these model/sandbox setup inefficiencies. This should be a priority to fix for Codex to stay competitive.
App 26.715.72359, same problem
Still happening. Have to close Codex and resume the session for the skills to become available again.
Confirmed independently on macOS arm64 with Codex CLI 0.145.0. The same skill-discovery implementation remains present in 0.146.0.
Reproduction:
timeboxat$CODEX_HOME/skills/timebox/SKILL.md.policy.allow_implicit_invocation: falseinagents/openai.yaml.$timebox You have 2hours to fix this all up! Work faster.$timeboxis “not installed” or “not available in this session.” The refusal repeated later in the same session.Diagnostics:
cli_version: 0.145.0,originator: codex-tui.skills/listrefresh reportstimebox,enabled: true, with no discovery errors.allow_implicit_invocationis false.$timeboxtoken.Expected: explicit invocation resolves and injects the enabled skill even though implicit invocation is disabled. The model must not treat the implicit catalog as exhaustive.
Observed the same. The first invocation gives the error message. Works the second time.
Hi folks — I initially thought I was hitting this exact issue too. I asked Codex to inspect the CLI implementation and then tested the behavior on Codex CLI
0.147.0.In my case, the problem was the skill name. The mention parser only accepts ASCII letters/digits plus
_,-, and:. A dot stops the parsed mention.The behavior appears intentional in the current code: the test for
$alpha.skillexpects the extracted name to be onlyalpha, while the plugin namespace in$slack:searchis preserved.For example, a plugin skill named
release.deploy, invoked as$acme:release.deploy, is parsed only asacme:release. Skill resolution then fails and it looks like the explicit-only skill is unavailable.What fixed it for me:
nameinSKILL.mdfromrelease.deploytorelease-deploy.$acme:release-deploy.policy.allow_implicit_invocation: falseunchanged.I validated both sides with fresh
codex execsessions. Sending onlyHiadded none of my explicit-only plugin skills to the model-visible available-skills list and injected noSKILL.md. Explicitly invoking the renamed skill resolved it and injected its instructions correctly.My case involved skills distributed through a plugin. This worked for me, so it may be worth checking whether any affected skill names contain dots.