Skills Reference
Skills are workflow shortcuts installed into your assistant's skill directory by ndx init. Typing /skill-name in a Claude Code or Codex session invokes the skill and its step-by-step instructions run as a tool-use loop.
Skill files live at:
| Assistant | Directory | Format |
|---|---|---|
| Claude Code | .claude/skills/<name>/SKILL.md | YAML frontmatter + markdown body |
| Codex | .agents/skills/<name>/SKILL.md | YAML frontmatter + markdown body |
The canonical skill definitions are in packages/core/assistant-assets/skills/. Running ndx init regenerates and overwrites the per-assistant copies from that source.
Skill Inventory
The table below is derived from packages/core/assistant-assets/manifest.json.
| Skill | Purpose | Invoke |
|---|---|---|
no-plan-mode | Prevent plan-mode stalls in autonomous hench runs | Always active in ndx work --auto |
ndx-plan | Analyze the codebase and propose PRD updates | /ndx-plan |
ndx-status | Show project status combining PRD progress and codebase health | /ndx-status |
ndx-capture | Capture a requirement, feature idea, or task from conversation context | /ndx-capture [description] |
ndx-zone | Deep-dive into an architectural zone's structure and health | /ndx-zone [zone-id] |
ndx-work | Pick up a task from the PRD and begin working on it | /ndx-work [task-id] |
ndx-config | View or change n-dx configuration with guided assistance | /ndx-config [key] [value] |
ndx-reshape | Restructure the PRD hierarchy — regroup epics, change levels, merge overlaps | /ndx-reshape |
ndx-feedback | Submit feedback, bug reports, or feature requests for n-dx | /ndx-feedback [description] |
ndx-adversarial-review | Attack a change or a completion claim, triage what breaks, capture what the user approves | /ndx-adversarial-review [task-id | name | topic] |
What every state-mutating skill does at the end
The per-skill step lists below are summaries. Any skill that changes project state — /ndx-work, /ndx-capture, /ndx-plan, /ndx-reshape, /ndx-config, and /ndx-adversarial-review once you approve its findings — finishes with two steps they all share:
- Commit, using
git status --porcelainfirst. This matters because rex MCP writes are side effects:add_itemandedit_itemwrite to.rex/prd_tree/<slug>/index.mdeven when no file was edited directly, so a skill that only called MCP tools still has changes to commit. - Record the run with
ndx hench record, so skill-driven work is auditable next tondx workruns. Token usage comes from the Claude Code session transcript, counting only the spend since the previous record — so several skill runs in one session each get their own slice rather than all claiming the session total. Skills whose work spans many PRD items (/ndx-plan,/ndx-reshape,/ndx-config,/ndx-adversarial-review) record againstskill:<name>, whichget_token_usagereports in itsorphansbucket: work that produced many items should not be charged to one of them.
Skill Details
no-plan-mode
Purpose: Prevents the assistant from entering plan-only mode during autonomous hench runs, which would stall the execution loop waiting for user approval.
When it triggers: This skill is embedded in the hench system prompt for all CLI-provider runs (ndx work --auto, ndx work --loop, ndx self-heal, etc.). It is always active during autonomous execution — you do not invoke it manually.
What it does: Instructs the assistant to make implementation decisions immediately based on existing code patterns and project conventions, document ambiguity via append_log, and proceed rather than stall.
Customization: If you want to relax the constraint for a specific run, pass --permission-mode=plan to ndx work. To change the default for your project, set hench.permissionMode in .n-dx.json.
ndx-plan
Purpose: Analyze the codebase and propose new PRD items to fill gaps between the current state and the desired product direction.
When it triggers: Invoke manually with /ndx-plan when you want a fresh analysis-driven proposal session. Equivalent to running ndx plan from the terminal but interactive within the chat window.
What it does:
- Calls
get_overviewandget_findings(sourcevision MCP) to assess current state - Calls
get_prd_status(rex MCP) to avoid duplicating existing items - Calls
get_next_stepsfor prioritized recommendations - Proposes new epics/features/tasks and creates them via
add_itemafter approval
Customization: Edit .claude/skills/ndx-plan/SKILL.md to focus proposals on specific product areas or add domain-specific analysis steps. Note that ndx init will overwrite this file — see Adding your own skill for a durable approach.
ndx-status
Purpose: One-command health dashboard: PRD completion progress + codebase quality metrics + recommended next action.
When it triggers: Invoke manually with /ndx-status. Use it at the start of a session to orient yourself, or after a batch of work to see what changed.
What it does:
- Calls
get_prd_status(rex MCP) for completion stats - Calls
get_overviewandget_findings(sourcevision MCP) for codebase metrics and active issues - Calls
health(rex MCP) for structure health score - Calls
get_next_task(rex MCP) to surface the recommended next action - Presents a unified report
Customization: Extend the skill body to include custom metrics, alerts on specific findings, or integration with external status systems.
ndx-capture
Purpose: Turn a freeform description — from the conversation or as an argument — into a structured PRD item placed in the right spot in the hierarchy.
When it triggers: Invoke with /ndx-capture or /ndx-capture <description>. Use it whenever you want to quickly log a requirement without leaving the chat.
What it does:
- Uses the provided description or reviews recent conversation for captured requirements
- Calls
get_prd_status(rex MCP) to understand current structure - Determines level (epic / feature / task) and finds an appropriate parent
- Drafts the item with title, description, and acceptance criteria
- Presents to the user for confirmation, then creates via
add_item - Wires
blockedByedges if ordering relationships exist
Customization: Modify the skill body to add custom fields, enforce acceptance criteria templates, or auto-assign tags based on keywords.
ndx-zone
Purpose: Deep-dive into the structure, health, and cross-zone dependencies of a specific architectural zone detected by sourcevision.
When it triggers: Invoke with /ndx-zone (prompts you to pick a zone) or /ndx-zone <zone-id> to target a specific zone directly.
What it does:
- If no zone-id given, calls
get_overviewand lists zones - Calls
get_zone(sourcevision MCP) for full zone details - Reads
.sourcevision/zones/<zone-id>/context.md - Calls
get_findingsfiltered to the zone - Calls
get_importsfor cross-zone dependency edges - Presents cohesion/coupling metrics, key files, and active findings
Customization: Add domain-specific checks to the zone report, such as asserting that specific files belong to specific zones or flagging zones that exceed a cohesion threshold.
ndx-work
Purpose: Guided task execution: pick up the next PRD task, build a work plan, implement it following the project's execution discipline, and mark it complete.
When it triggers: Invoke with /ndx-work (picks next task) or /ndx-work <task-id> (specific task). Use this for interactive, human-supervised task execution in contrast to ndx work --auto which runs unattended.
What it does:
- Reads
.rex/workflow.mdfor execution discipline (TDD, validation, commit conventions) - Calls
get_itemorget_next_task(rex MCP) for task details - Calls
get_file_info,get_imports,get_zone(sourcevision MCP) to understand context - Presents a work plan for user approval
- Marks task
in_progress, implements, runs tests, commits, markscompleted - Calls
append_logwith decisions and outcomes - Records the run with
ndx hench record, so skill-driven work appears in run history alongsidendx workruns — with its token usage read from the Claude Code session transcript, sondx usageand the dashboard's per-item rollup account for it
Customization: The execution workflow is defined in .rex/workflow.md (project-specific) rather than in the skill itself — edit that file to change the discipline applied to every task.
ndx-config
Purpose: View, explain, and modify n-dx configuration settings with guided assistance and validation.
When it triggers: Invoke with /ndx-config (shows all settings), /ndx-config <key> (explains one key), or /ndx-config <key> <value> (validates and sets). Equivalent to the ndx config command but with explanations.
What it does: Covers LLM settings (vendor, model, API keys), Rex settings (budget thresholds, adapter), Hench settings (provider, max turns, token budget), and Web settings (dashboard port). Validates the value before applying and runs the appropriate ndx config command.
Customization: Extend the skill to add documentation for project-specific config keys or to add validation rules for your environment.
ndx-reshape
Purpose: LLM-assisted PRD cleanup: regroup scattered epics, fix wrong levels, merge overlapping items, and normalize naming.
When it triggers: Invoke with /ndx-reshape when the PRD has grown organically and needs structural cleanup. Typically run after a long feature sprint or after multiple ndx plan --accept cycles.
What it does:
- Calls
get_prd_status(rex MCP) to assess the current epic/feature structure - Detects problems: too many epics, wrong levels, overlapping areas, orphaned items
- Proposes a target structure (7-12 top-level epics, 3-15 features each)
- After user approval, executes via
add_item,move_item,edit_item,merge_items - Verifies with
reorganize(rex MCP)
Customization: Adjust the target epic count or naming conventions in the skill body to match your team's PRD style guide.
ndx-feedback
Purpose: File a GitHub issue on the n-dx repo with automatically gathered environment context and an optional anonymized project profile.
When it triggers: Invoke with /ndx-feedback or /ndx-feedback <description> when you encounter a bug, want to request a feature, or have a question that hints at a docs gap.
What it does:
- Categorizes the feedback (bug / feature request / improvement / question)
- Gathers environment context automatically (n-dx version, Node.js, OS, LLM provider)
- Optionally collects an anonymized project profile (with user consent — no code or paths)
- Drafts a GitHub issue with title, description, and labels
- Presents the draft for review, then creates via
gh issue create
Customization: Update the GitHub repo target in the skill body if you have a fork; add fields to the template for your internal triage process.
ndx-adversarial-review
Purpose: Review by attack rather than by inspection. Try to break a change — or to disprove the claim that a task is done — then triage each finding for validity and necessity before anything is recorded as work.
When it triggers: Invoke with /ndx-adversarial-review for the current diff, /ndx-adversarial-review <task-id> to attack a completion claim against its acceptance criteria, or /ndx-adversarial-review <name or topic> to have the skill find the matching PRD item and confirm it with you first.
What it does:
- Resolves the target — working diff, branch diff, or a PRD item (clarifying with you when given a name or topic rather than an ID)
- Builds ground truth: reads changed files in full, maps callers via sourcevision, then discovers and runs the project's own checks — typecheck, tests, lint — from
.rex/workflow.md, the manifest scripts, or CI config - Pass 1 — attack. Works a fixed rubric (unimagined inputs, failure paths, concurrency, platform, contract drift, test quality, the claim itself). Every finding needs a constructed trigger and a genuine attempt to refute it, or it is dropped
- Pass 2 — necessity. Judges each survivor on reachability, existing coverage, fix cost, and scope, landing on must-fix / should-fix / not-worth-fixing / out-of-scope
- Reports findings with severity, verdict, and proposed solutions — then stops and asks which to capture
- Checks what the PRD already tracks by enumerating
.rex/prd_tree/, matching on the defect rather than the wording. An already-tracked finding is never re-added: if the review has something new to say about it, the skill offers to extend the existing item viaedit_item; if it does not, it says so and skips - Creates one PRD item per genuinely new approved finding, carrying the failure scenario, the candidate solutions, and acceptance criteria that fail today
What it will not do: edit source, apply a fix, or write a PRD item you did not approve. Steps 1–5 write nothing at all. A green test suite bounds the review but never ends it — "checks pass, no findings" is treated as a review that was not performed.
Customization: The Pass 1 rubric is a floor, not a ceiling — add dimensions that matter for your stack. The severity table is tuned for projects where corrupting PRD state is the worst outcome; adjust it if your project's critical failure is something else.
Adding Your Own Skill
You can add project-specific skills alongside the bundled ones. ndx init only writes the skills listed in the manifest — it does not touch directories it did not create.
File layout
.claude/
skills/
my-skill/
SKILL.md ← skill body with YAML frontmatterSKILL.md format
---
name: my-skill
description: One-line description shown in /help and skill listings
argument-hint: "[optional-arg]" # omit if no argument
---
Skill body — plain markdown instructions for the assistant.
1. First step
2. Second stepSteps
Create the directory and file:
shmkdir -p .claude/skills/my-skill cat > .claude/skills/my-skill/SKILL.md << 'EOF' --- name: my-skill description: Do something project-specific --- 1. Step one 2. Step two EOFVerify the skill appears in Claude Code by typing
/my-skillin a new session.For Codex, mirror the file to
.agents/skills/my-skill/SKILL.md.
Overriding a bundled skill
ndx init overwrites bundled skill files on each run. To permanently customize a bundled skill, use one of these approaches:
- Project-local replacement: Create a skill with a different name (e.g.,
my-ndx-plan) and document that it replaces the bundled one in your project'sAGENTS.mdorCLAUDE.md. - Fork the asset: Copy the bundled skill body from
packages/core/assistant-assets/skills/<name>.md, modify it, and write it to.claude/skills/<name>/SKILL.mdafter runningndx init. Re-apply after eachndx initrun using a post-init script. - Contribute upstream: If your customization is generally useful, open a PR to update
packages/core/assistant-assets/skills/<name>.mdandmanifest.json.
Adding a skill to the bundled set (contributing)
Add
packages/core/assistant-assets/skills/<name>.mdwith the skill body.Add an entry to
packages/core/assistant-assets/manifest.jsonunder"skills":json"my-skill": { "description": "One-line description", "argumentHint": "[optional-arg]" }Run
ndx init .to generate the vendor skill files.The integration tests in
tests/e2e/verify that every manifest entry has a corresponding skill file —listSkillFiles()is the enforcement point.
