TUI: Enable/Disable Skills truncates names before adaptive layout

Resolved 💬 1 comment Opened Jul 8, 2026 by host452b Closed Jul 11, 2026

What issue are you seeing?

In Skills → Enable/Disable Skills, every skill display name is truncated to 21 graphemes before the name/description columns are laid out. Names with shared namespaces or plugin prefixes therefore lose the characters that distinguish them, even when the terminal has enough width.

For example, these two rows become:

› [x] superpowers-system...
  [ ] superpowers-verifi...

This also hides plugin provenance such as (polish), making it difficult to tell similarly named skills apart.

Reproduced with codex-cli 0.143.0 and confirmed in current official main at f1affbac5 on Darwin 25.5.0 arm64. Subscription, model, and codex doctor output are not relevant to this source-level TUI layout issue.

What steps can reproduce the bug?

  1. Install or expose multiple skills with display names longer than 21 graphemes, ideally sharing a namespace/prefix, for example:
  • superpowers-systematic-debugging (polish)
  • superpowers-verification-before-completion (polish)
  1. Open Skills.
  2. Select Enable/Disable Skills.
  3. Observe the skill names below Type to search skills.

The behavior is deterministic. SkillsToggleView::build_rows calls truncate_skill_name before constructing each GenericDisplayRow. The shared single-line renderer only receives the already-truncated text, so its existing adaptive column calculation cannot use the available terminal width.

What is the expected behavior?

The picker should pass complete display names into the existing adaptive row renderer. The name column should grow with visible names up to the renderer's existing cap, while descriptions yield space and truncate when necessary.

At 96 columns, the expected result is:

› [x] superpowers-systematic-debugging (polish)            Find root causes before fixing bugs
  [ ] superpowers-verification-before-completion (polish)  Verify completion before claiming …

Very narrow terminals can still truncate names based on actual available width; the issue is the unconditional 21-grapheme truncation before layout.

Additional information

A focused fix is available on the fork branch:

The change removes the fixed pre-truncation only from the Enable/Disable Skills picker and leaves filtering, enable/disable state, the shared renderer, mention popups, and other multi-select pickers unchanged.

Verification completed:

  • TDD regression test failed before the fix with superpowers-system... / superpowers-verifi... and passed afterward with the complete names.
  • Added an insta snapshot covering complete names and description truncation.
  • just test -p codex-tui: 2968 passed, 4 skipped.
  • just fix -p codex-tui: passed.
  • just fmt: passed.

Per the repository contribution policy, this issue is intended to align on the behavior and proposed approach first. If maintainers agree that the fix should land, I would be happy to submit the tested branch as an invited PR.

View original on GitHub ↗

This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗