openai / openai/codex

TUI skill picker uses display_name casing, causing explicit-only skill invocation to fail

Open
#43,727 4 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug CLI skills TUI
Dominant language
Rust
Stars
125k
Forks
19.4k
PR merge metrics
PR metrics pending

Description

What version of Codex CLI is running?

codex-cli 0.149.1

Platform

Arch Linux, kernel 7.1.9, x86_64

Originator

codex-tui, source cli

What issue are you seeing?

Selecting an explicit-only skill from the $ picker produces a mention using the
skill's title-cased interface.display_name. The canonical skill name is lowercase.

The picker-generated mention fails. Manually typing the canonical lowercase name
succeeds.

The valid skill appears in the picker, but selection immediately produces:

The Wayfinder skill is not available in this session.

Skill metadata

SKILL.md:

---
name: wayfinder
description: Plan a large effort as a shared map of decision tickets.
disable-model-invocation: true
---

agents/openai.yaml:

interface:
  display_name: "Wayfinder"
  short_description: "Map a large effort as decision tickets"
policy:
  allow_implicit_invocation: false

The skill is installed at:

~/.agents/skills/wayfinder/SKILL.md

There is no skills.config entry disabling it.

Reproduction
  1. Start a fresh Codex TUI session.
  2. Open the $ skill picker.
  3. Select Wayfinder.
  4. Submit $Wayfinder #1.
  5. Observe that Codex reports the skill unavailable.
  6. Start another fresh session.
  7. Manually type $wayfinder #1.
  8. Observe that Codex loads and follows the skill.
Redacted rollout evidence

Picker invocation:

session_meta:
  cli_version: 0.149.1
  originator: codex-tui
  source: cli

user:
  $Wayfinder #1

assistant:
  The Wayfinder skill is not available in this session.

Manual invocation:

session_meta:
  cli_version: 0.149.1
  originator: codex-tui
  source: cli

user:
  $wayfinder #1

assistant:
  I'm using Wayfinder to load map #1...

I reproduced the picker failure in at least four fresh sessions.

Suspected cause

The picker appears to submit interface.display_name as a plain $name token
instead of submitting the canonical skill identity or a structured
UserInput::Skill.

Plain mention selection currently calls:

mentions.contains_plain_name(skill.name.as_str())

contains_plain_name performs an exact set lookup. Therefore $Wayfinder does
not match the canonical name wayfinder.

Expected behavior

Selecting a skill from the picker should invoke that exact skill regardless of
display-name capitalization.

The picker could submit a structured UserInput::Skill containing the canonical
path, emit the canonical name, or make plain-name comparison case-insensitive.

Related issues
  • #23454
  • #40600

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 by tracing the TUI skill picker’s selection path and the plain-name handling through mentions.contains_plain_name(skill.name.as_str()). Reproduce the $Wayfinder failure and $wayfinder success, then verify that selecting a title-cased display name invokes the canonical wayfinder skill without breaking explicit-only behavior.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
cli
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
68/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.