Codex runtime
When running in Codex, invoke this skill as $skillhelp. Resolve scripts, assets,
and references from the directory containing this SKILL.md, regardless of the
current working directory. Existing ~/.claude/ personal-data paths remain valid
and are still used by the bundled scripts; they do not require Claude to run.
Map Read/Write/Edit/Bash to the available file and shell tools, and
WebSearch/WebFetch to available web tools. For AskUserQuestion, use an
available question tool or a concise chat question; wait for answers that gate
action. Use Codex's delegation tools for required subagents when available;
otherwise disclose that independent execution is unavailable. Discover connected
apps by capability rather than assuming Claude MCP tool names exist.
/skillhelp — the knowledge base for the skills in this repo
You are running the skillhelp skill. It answers questions about any skill
here — how to set it up, how to use it, what commands it has, how it is built,
and why it is failing — out of an index extracted from the skills' own files.
Announce at start: "I'm using the skillhelp skill to answer that from the skill index."
Commands run from the directory containing this SKILL.md ($SKILL_DIR).
Resolve it once. --repo is optional — the CLI walks up to find the repo.
The one rule
Never answer ungrounded: every fact this skill emits carries the file and line it was read from, a fact that loses its source is dropped rather than shown, and a question the cards cannot ground is answered by the retrieval command's own not-documented block — naming which skills and sections were searched — never by prose written to fill the gap.
You know a great deal about these skills from the conversation, from the repo,
and from having written some of them. None of that may enter an answer. The
value here is that a skillhelp answer is checkable: every claim points at a
line the user can open. An answer that mixes remembered context with cited
facts is worse than no answer, because it is no longer checkable and still
looks it.
What is code and what is judgment
The split is declared in skill-invariants.json and checked — a deterministic
step whose command does not exist fails skillfactory verify.
| Deterministic — the machine decides |
Command |
| extract five sections and their file:line sources from every skill |
node scripts/skillhelp.js build |
| prove no card would change, none is missing, no fact lost its source |
node scripts/skillhelp.js check |
| route a question to grounded facts, or emit the not-documented block |
node scripts/skillhelp.js ask |
| list every skill with its version and trigger phrases |
node scripts/skillhelp.js list |
| Model judgment — nothing on disk answers it |
Why |
| which skill the user means when the question names none, or several |
"how do I cut a release" spans release, shipflow and skillfactory; only intent decides |
| writing the answer from the retrieved facts |
a card is grounded facts, not an answer; which three of eleven matter is judgment |
| whether a fact that scored above the floor is actually responsive |
retrieval proves a fact exists and is real, never that it answers this question — a near-miss relayed as an answer is the ungrounded failure wearing a citation |
The flow
Answering a question — the common case
One command. Do not read the cards; ask returns the fact lines inline.
node scripts/skillhelp.js ask "how do I set up ghostwriter"
It returns one of three things, and each has exactly one correct response:
| It returns |
You do |
| ranked facts |
answer from them, citing file:line; say which skill the answer is about |
| a SECTION LISTING |
say so — it is the whole section, retrieved because the question named a skill and a section but no term matched. Do not present it as a targeted answer |
| NOT DOCUMENTED |
relay it. Name what was searched and what is missing. Offer to look in the source, but never answer as if the index had it |
If the question names no skill, ask searches all of them; if it names one, the
search is scoped to it and says so. When the user's phrasing is ambiguous
between two skills, ask which — one line, not a form.
Rebuilding the index
The cards are committed, so they go stale when a skill changes. ci / skillhelp
runs against skills/** and fails when any card would change — the fix is
always one command:
node scripts/skillhelp.js check # what drifted, and why
node scripts/skillhelp.js build # rewrite the cards
Drift is measured on the rendered card, not the skill's file tree: editing a
comment inside a skill's scripts/ changes no answer and reddens nothing.
Browsing
node scripts/skillhelp.js list for the catalogue when the user does not yet
know which skill they want.
Commands
| Command |
Returns |
skillhelp build |
one card per skill — Setup, Usage, Commands, Architecture, Troubleshooting — every fact carrying its file:line, secret-shaped lines refused, plus a manifest hashed on the rendered card. Table: skill, version, sections filled, facts, refused, status. Names every skill with an empty section rather than hiding it |
skillhelp check |
re-extracts and byte-compares against the committed cards. Non-zero on would-change, missing, incomplete, ungrounded or orphaned, and prints the one rebuild command |
skillhelp ask |
grounded facts inline with sources, ranked, stating how many it withheld — or the not-documented block naming every skill and section searched |
skillhelp list |
the catalogue: skill, version, facts, trigger phrases |
Rules that are not negotiable
- Never answer ungrounded: every fact this skill emits carries the file and line it was read from, a fact that loses its source is dropped rather than shown, and a question the cards cannot ground is answered by the retrieval command's own not-documented block — naming which skills and sections were searched — never by prose written to fill the gap.
- Never claim a result you did not observe. Say what you verified and what
you did not.
- Run the commands and never ask about anything in it — the catalogue, the
versions and the drift verdicts are facts on disk. A confirmation is not a
question.
- Never present a section listing as a targeted answer. How a result was
found changes how much it should be trusted.
- Never hand-edit a card. They are generated; edit the skill, then rebuild.
In Claude Code, load /press; in Codex, load $press; then follow the shared PRESS terminal/UI contract from brand/agent-ui.md. Do not copy or override that contract here.
1---2name: skillhelp3description: Answer help questions about the skills in this repo. Use when the user asks how to set up, install or configure a skill, what commands or flags a skill has, how a skill works internally, why a skill is failing or erroring, what a skill refuses to do, which skill to use for a job, or what skills exist at all. Triggers on "/skillhelp", "how do I use <skill>", "how do I set up <skill>", "what commands does <skill> have", "what does <skill> do", "how does <skill> work", "why is <skill> failing", "what skills do I have", "which skill should I use for", "explain <skill> to me", "document my skills", and "rebuild the skill index".4---56## Codex runtime78When running in Codex, invoke this skill as `$skillhelp`. Resolve scripts, assets,9and references from the directory containing this SKILL.md, regardless of the10current working directory. Existing `~/.claude/` personal-data paths remain valid11and are still used by the bundled scripts; they do not require Claude to run.12Map `Read`/`Write`/`Edit`/`Bash` to the available file and shell tools, and13`WebSearch`/`WebFetch` to available web tools. For `AskUserQuestion`, use an14available question tool or a concise chat question; wait for answers that gate15action. Use Codex's delegation tools for required subagents when available;16otherwise disclose that independent execution is unavailable. Discover connected17apps by capability rather than assuming Claude MCP tool names exist.1819# /skillhelp — the knowledge base for the skills in this repo2021You are running the **skillhelp** skill. It answers questions about any skill22here — how to set it up, how to use it, what commands it has, how it is built,23and why it is failing — out of an index extracted from the skills' own files.2425**Announce at start:** "I'm using the skillhelp skill to answer that from the skill index."2627> Commands run from the directory containing this `SKILL.md` (`$SKILL_DIR`).28> Resolve it once. `--repo` is optional — the CLI walks up to find the repo.2930## The one rule3132**Never answer ungrounded: every fact this skill emits carries the file and line it was read from, a fact that loses its source is dropped rather than shown, and a question the cards cannot ground is answered by the retrieval command's own not-documented block — naming which skills and sections were searched — never by prose written to fill the gap.**3334You know a great deal about these skills from the conversation, from the repo,35and from having written some of them. **None of that may enter an answer.** The36value here is that a `skillhelp` answer is checkable: every claim points at a37line the user can open. An answer that mixes remembered context with cited38facts is worse than no answer, because it is no longer checkable and still39looks it.4041## What is code and what is judgment4243The split is declared in `skill-invariants.json` and checked — a deterministic44step whose command does not exist fails `skillfactory verify`.4546| Deterministic — the machine decides | Command |47|---|---|48| extract five sections and their file:line sources from every skill | `node scripts/skillhelp.js build` |49| prove no card would change, none is missing, no fact lost its source | `node scripts/skillhelp.js check` |50| route a question to grounded facts, or emit the not-documented block | `node scripts/skillhelp.js ask` |51| list every skill with its version and trigger phrases | `node scripts/skillhelp.js list` |5253| Model judgment — nothing on disk answers it | Why |54|---|---|55| which skill the user means when the question names none, or several | "how do I cut a release" spans release, shipflow and skillfactory; only intent decides |56| writing the answer from the retrieved facts | a card is grounded facts, not an answer; which three of eleven matter is judgment |57| whether a fact that scored above the floor is actually *responsive* | retrieval proves a fact exists and is real, never that it answers this question — a near-miss relayed as an answer is the ungrounded failure wearing a citation |5859## The flow6061### Answering a question — the common case6263One command. Do not read the cards; `ask` returns the fact lines inline.6465```66node scripts/skillhelp.js ask "how do I set up ghostwriter"67```6869It returns one of three things, and each has exactly one correct response:7071| It returns | You do |72|---|---|73| ranked facts | answer from them, citing `file:line`; say which skill the answer is about |74| a **SECTION LISTING** | say so — it is the whole section, retrieved because the question named a skill and a section but no term matched. Do not present it as a targeted answer |75| **NOT DOCUMENTED** | relay it. Name what was searched and what is missing. Offer to look in the source, but never answer as if the index had it |7677If the question names no skill, `ask` searches all of them; if it names one, the78search is scoped to it and says so. When the user's phrasing is ambiguous79between two skills, ask which — one line, not a form.8081### Rebuilding the index8283The cards are committed, so they go stale when a skill changes. `ci / skillhelp`84runs against `skills/**` and fails when any card **would change** — the fix is85always one command:8687```88node scripts/skillhelp.js check # what drifted, and why89node scripts/skillhelp.js build # rewrite the cards90```9192Drift is measured on the rendered card, not the skill's file tree: editing a93comment inside a skill's `scripts/` changes no answer and reddens nothing.9495### Browsing9697`node scripts/skillhelp.js list` for the catalogue when the user does not yet98know which skill they want.99100## Commands101102| Command | Returns |103|---|---|104| `skillhelp build` | one card per skill — Setup, Usage, Commands, Architecture, Troubleshooting — every fact carrying its `file:line`, secret-shaped lines refused, plus a manifest hashed on the rendered card. Table: skill, version, sections filled, facts, refused, status. Names every skill with an empty section rather than hiding it |105| `skillhelp check` | re-extracts and byte-compares against the committed cards. Non-zero on `would-change`, `missing`, `incomplete`, `ungrounded` or `orphaned`, and prints the one rebuild command |106| `skillhelp ask` | grounded facts inline with sources, ranked, stating how many it withheld — or the not-documented block naming every skill and section searched |107| `skillhelp list` | the catalogue: skill, version, facts, trigger phrases |108109## Rules that are not negotiable110111- **Never answer ungrounded: every fact this skill emits carries the file and line it was read from, a fact that loses its source is dropped rather than shown, and a question the cards cannot ground is answered by the retrieval command's own not-documented block — naming which skills and sections were searched — never by prose written to fill the gap.**112- **Never claim a result you did not observe.** Say what you verified and what113 you did not.114- **Run the commands and never ask about anything in it** — the catalogue, the115 versions and the drift verdicts are facts on disk. A confirmation is not a116 question.117- **Never present a section listing as a targeted answer.** How a result was118 found changes how much it should be trusted.119- **Never hand-edit a card.** They are generated; edit the skill, then rebuild.120121<!-- press:runtime -->122In Claude Code, load `/press`; in Codex, load `$press`; then follow the shared PRESS terminal/UI contract from `brand/agent-ui.md`. Do not copy or override that contract here.123<!-- press:runtime -->