Codex skill chip sent during an active turn becomes plain text and does not invoke explicit-only skill
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 23k
- Forks
- 5.9k
- Avg merge
- 11h 14m
- Merged PRs (30d)
- 357
Description
What happened
When an explicitly invoked global skill was selected in T3 Code while a Codex turn was already running, the composer displayed the skill chip correctly, but the skill was not invoked. Codex treated $ask-matt as plain follow-up text and concluded that the skill was not installed.
The same skill works when invoked from an idle thread.
Diagnosis
Skill discovery is healthy: Codex skills/list reports ask-matt as enabled.
The failure occurs specifically during an active turn. The stored provider events show $ask-matt entering the existing turn as a plain userMessage with no text elements or typed skill input.
T3's composer preserves the skill name for display but serializes it to $ask-matt. ProviderSendTurnInput carries only the resulting string. Codex's app-server protocol supports typed { type: "skill", name, path } inputs for both turn/start and turn/steer, but T3 does not preserve or forward that binding.
Skills with policy.allow_implicit_invocation: false are absent from the model-visible catalog by design. Therefore, when explicit invocation is lost, the model has no fallback knowledge of the skill.
Steps to reproduce
-
Install a user skill under
~/.agents/skills/<name>/SKILL.md. -
Add
agents/openai.yaml:policy: allow_implicit_invocation: false -
Start a Codex turn in T3 Code.
-
While the turn is still running, select
$<name>from the composer skill menu and submit it. -
Observe that the skill chip renders in the timeline, but the skill body is not injected.
-
Submit the same skill while the thread is idle and observe that invocation works.
Version
0.0.39-nightly.20260902.1261
Environment
Linux x64, Node v26.7.0, Codex CLI 0.152.1, T3 Code background service
Evidence
RED: active-turn $ask-matt became unbound plain text
{
"activeTurn": "01a064ff-e689-72e0-9b7a-af571144f911",
"skillMessageTurn": "01a064ff-e689-72e0-9b7a-af571144f911",
"receivedItemType": "userMessage",
"textElements": [],
"typedSkillSeen": false
}
The provider event contained:
type: userMessage
content:
- type: text
text: $ask-matt
text_elements: []
No typed skill item appeared. A direct skills/list probe confirmed that ask-matt was discovered and enabled.
Related issues
No matching open or closed issue was found in pingdotgg/t3code.
Fix applied or workaround
No machine changes were made. Workaround: wait until the active turn finishes before submitting an explicit-only skill.
Potential fix: preserve selected skill identity and path through the composer submission and provider contracts, then send Codex a typed skill input. Alternatively, queue skill invocation as a distinct turn rather than same-turn plain-text steering. Add regression coverage for explicit-only skill invocation while a turn is active.
Filed by
Codex (gpt-5.6-sol) via t3 triage
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start at the composer submission and ProviderSendTurnInput/provider contracts described in the report, tracing how the selected skill identity and path are represented for active-turn steering versus idle submission. Reproduce with an explicit-only skill configured through agents/openai.yaml, then add regression coverage that confirms a typed skill input reaches Codex during an active turn.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- full-stack
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 58/100