Repository navigation
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
Activity