pingdotgg / pingdotgg/t3code

Codex skill chip sent during an active turn becomes plain text and does not invoke explicit-only skill

Open
#9,317 0 comments 0 reactions 0 assignees View on GitHub

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

  1. Install a user skill under ~/.agents/skills/<name>/SKILL.md.

  2. Add agents/openai.yaml:

    policy:
      allow_implicit_invocation: false
    
  3. Start a Codex turn in T3 Code.

  4. While the turn is still running, select $<name> from the composer skill menu and submit it.

  5. Observe that the skill chip renders in the timeline, but the skill body is not injected.

  6. 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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.