Repository navigation
feat(native-chat): $ opens Codex skills in the composer - #30827
Conversation
Typing `$` in a Codex chat now opens a skills-only list, as Codex's own apps do. `/` still lists commands and skills for every agent, and other agents keep `$` as plain text.
…does
In Codex chats `$HOME`, `$5`, `$(pwd)`, `${X}` and `$?` stay prose instead of opening the skill list, so Enter sends them; one classifier now serves the trigger, the menu and the insert.
A `$` query no longer matches skill descriptions, so `echo $CODEX_HOME` + Enter sends instead of picking skill-installer; `/` still searches descriptions.
|
Warning Review limit reachedYou've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Next included review available in 1 minute. View limit details
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
…llar-skill-picker
Review loop status: done on
|
ELI5
In a Codex chat, typing
$did nothing. Codex users are used to$opening a list of their skills (it does in Codex's own terminal and desktop apps), so when nothing appeared they concluded skills don't work in Orca. Now$opens a list of just the skills in Codex chats./still works exactly as before.What Changed
/, which lists commands and skills together. Typing$opened nothing.$(at the start of the message or after a space) opens a skills-only list with no command rows and no group headings. Picking a skill inserts$name, the form Codex runs./is unchanged: it still lists commands and skills for every agent.$as plain text. Only an agent whose skills use the$sign opens the list on it. Today that is just Codex.$list never sends a command on Enter; it only completes the skill name.$in ordinary text stays text, using the same rule as Codex's own composer: common environment variables ($HOME,$PATH,$USER…), digits ($5), and$(,${,$?never open the list, soecho $HOME+ Enter sends the message. A$list matches skill names only, not their descriptions, soecho $CODEX_HOMEdoesn't turn into a skill whose description mentions it./keeps matching descriptions.Why
The report in #30813 says typing
$skillin a Codex chat doesn't run the skill. I checked that path before changing anything. I ran a realcodex app-server(codex-cli 0.162.1) with a throwaway home laid out like Orca's (skills folder linked in the same way) and sent a turn containing only the plain text$orca-probe-skill, the same input Orca sends. Codex loaded the skill and answered with its marker text. So a hand-typed$namealready reaches the skill; what was missing is the list that Codex users expect$to open.Earlier, #19832 deliberately made
/the only trigger, so every agent's chat box works the same. This PR keeps that:/still shows every command and skill for every agent, and$is an extra key for Codex only, not a different chat box. That matches the common pattern for skills that use their own sign:$opens skills only, and a multi-agent composer keeps skills in/as well by default.Considered and left out:
/for Codex only, as Codex's own apps do: that would make/behave differently per agent, which is what fix(native-chat): one/picker for every agent, anywhere in the prompt #19832 removed.skills/list) instead of Orca's disk scan: more exact, but it isn't what caused this report. It's a separate change.Plan: two renderer and shared files; no saved data, wire change, process or lifecycle change.
Light-path classification:
src/shared/native-chat-picker-items.ts,src/renderer/src/components/native-chat/native-chat-composer-state.ts), +34/−17 production lines./are unchanged).git log --since=30.dayson both files shows only feat(native-chat): /resume in a structured chat opens Agent Session History #28133, feat(mobile): redesign the chat composer with file attachments and inline skills #30359, fix(native-chat): recall every sent prompt with Up/Down in the composer #26044 and feat(native-chat): suggest files on @ and name the triggers #26017, none fixing a$or skill-trigger symptom, and no reverts.native-chat-composer-state.test.ts.The round-1 reviewer confirmed all four criteria. A second fix round was needed (see Review), so the PR moved to the full review path. The same chat box is also used by the terminal-backed chat view, so
$opens the list there too; on SSH, where Orca can't list skills, it shows the same "Skills can't be listed in SSH chats" row that/already shows there. The mobile chat box has its own autocomplete and is unchanged.Linked Issue
Tracked in #30813. This adds the
$list and makes picking a skill from it run the skill. A hand-typed or picked$namestill doesn't run a skill that comes from a Codex plugin (Codex names thoseplugin:skill) or one whose name is shared by two skills; both come from Orca listing skills from its own disk scan instead of Codex's own skill report, and are left for a follow-up.Visual Proof
Real QA on Windows (main
e932dfbfbb9vs this branch47d17c167b1) with a real Codex and Claude, plus an earlier run on macOS. A throwaway skillqa-markertells Codex to start its reply withQA-MARKER-30827-OK.$echo $CODEX_HOME(built-in skills present)/Branch only:
please run $qaecho $HOMEandecho $CODEX_HOMEsent unchanged$sklists skill-creator and skill-installer$stays plain textThe red "hook exited with code 1" rows appear on main too in these Windows test profiles and are unrelated to this change.
Testing
native-chat-composer-state.test.tspins:$opens a skills-only list in Codex chats (at the start and mid-message); picking a skill writes$name; Claude keeps$as prose;echo $HOME,costs $5andrun $(pwd)open nothing; andecho $CODEX_HOMEoffers no skill through$while/still finds that skill by its description. The six picker and composer test files pass (94 tests).Review
Review loop: one adversarial reviewer, then an architecture review and the readiness checklist after the second fix round. Two fix rounds:
echo $HOME,$PATH,$USER+ Enter replaced the word with a skill instead of sending, and$5/$(pwd)showed an empty list. Fixed by adopting Codex's own rule for which text after$is a skill name.echo $CODEX_HOME+ Enter still became$skill-installer, because the list also matched descriptions. Fixed by matching skill names only for$, as Codex does.Agent skill upstream boundary
Notes
Cross-platform: renderer-only text matching, no platform branches. SSH: no change; native Codex chat runs on the local host only. Mobile: unchanged. Backwards compatibility: no saved data or wire change.
Checklist
N/Awith reasonpnpm lint,pnpm typecheck,pnpm test, andpnpm buildpass (or CI will cover; local preferred)X: @BrennanKB5