| title | The pdd CLI |
|---|---|
| description | Reference for the optional pdd terminal dashboard — install, commands, keybindings, and the .audit/ state it reads. |
| group | reference |
| order | 4 |
| slug | cli |
pdd is an optional terminal dashboard that renders the same parity state as the in-chat
/audit-status command. It runs on Node or Bun — no npm, no install step for
dependencies. The PDD method itself needs no runtime at all; the CLI is only a nicer way to
watch progress from a terminal. Everything it shows is also available in chat via
/audit-status, so the CLI is never required.
The CLI reads the project's .audit/ directory and never writes to
findings, coverage, or the board (the only mutating command is pdd prune, which removes stale
activity records — see below). It has no bearing on the inviolable rules: the AI never authors
commits; push / gh pr create happen only after an explicit human "yes"; merge is 100% human
after target-environment QA approves. The CLI just observes.
pdd runs with whatever runtime is present, in this order:
| Runtime | How it runs | Requires |
|---|---|---|
| Node | executes the committed bundle dist/pdd.js |
Node on PATH |
| Bun | executes the TypeScript source scripts/pdd/index.ts |
Bun on PATH |
No build step and no npm install are involved — the bundle is committed. If neither Node nor
Bun is available, pdd exits with a message pointing you at /audit-status instead.
The CLI ships with the plugin (or repo clone). To get a stable pdd command on your PATH,
install the wrapper once with scripts/install-cli.sh. It copies the bin/pdd wrapper to
~/.local/bin/pdd (or a target directory you pass as the first argument):
# Claude Code plugin cache path:
bash ~/.claude/plugins/cache/parity-driven-development/pdd/*/scripts/install-cli.sh
# From a git clone, run the same script from the repo root:
bash scripts/install-cli.sh
# Install to a custom directory instead of ~/.local/bin:
bash scripts/install-cli.sh /usr/local/binThe wrapper resolves the package location dynamically, so it survives claude plugin update.
If the install directory is not on your PATH, the script prints a warning — add it, then the
pdd command is available from anywhere.
With no path argument, pdd walks up from the current directory to find the nearest
.audit directory, so it works from any subfolder of a project that has run
/audit-bootstrap. Commands that accept a path (tui,
board, prune) take an optional [path] argument to point at a specific .audit location.
The default command. With no arguments, pdd launches the interactive, navigable TUI
(pdd tui is the explicit form; both accept an optional [path]). The TUI shows a collapsible
tree that refreshes live as .audit/ changes:
- Coverage — the parity coverage map and headline percentage.
- Worktrees — expand a worktree to see its branch, full path, and findings.
- Findings — grouped by lifecycle (open / in-progress / done), each listing the finding ids.
- Active now — live executions across agents and worktrees.
Keybindings:
| Key | Action |
|---|---|
↑ / ↓ |
Move selection up / down |
→ / enter |
Expand the selected node |
← / esc |
Collapse the selected node |
q |
Quit |
Prints a static ANSI snapshot of the dashboard once, then exits. Good for piping or for CI
logs where an interactive TUI is not usable. Accepts an optional [path].
Prints the static snapshot and auto-refreshes it whenever anything under .audit/ changes
(via fs.watch). Useful as an always-on side panel while you work. Accepts an optional [path].
Removes stale / orphaned activity records — the "Active now" entries left behind by crashed
or interrupted sessions. This is the only command that mutates state, and it only touches
activity records; findings, coverage, and the board are never altered. Accepts an optional
[path]. It reports how many records were removed, or No stale activity records found.
Checks whether a newer PDD version is available and prints the result. The dashboard also runs
this check once a day (cached, offline-safe) and shows a 🔔 notice when an update exists. Opt out
of all update checking with the PDD_NO_UPDATE_CHECK=1 environment variable.
Updates PDD. For a git-clone install it pulls the latest and re-generates your agents' command
files. For a Claude Code plugin install it prints how to update
(claude plugin update pdd@parity-driven-development), since the plugin is managed by Claude
Code.
Opens an interactive agent picker (specify-init style): select your agents and scope, and it
installs the PDD slash-command / prompt files into each. You may also pass one or more harness
names to install non-interactively (pdd init codex cursor).
Generates the PDD command files for a single harness from the canonical skills/ sources.
<harness> is one of claude, codex, cursor, copilot, gemini. Flags:
| Flag | Effect |
|---|---|
--global |
Install into your home config instead of the project (e.g. ~/.cursor/skills) |
--no-rules |
Skip writing the always-on update-check rule file |
[project-dir] |
Target project directory (defaults to the current directory) |
Each harness writes to its own native skill directory — see the commands reference and the README's "Install in any agent" section for the exact per-harness paths.
Prints the installed PDD version (pdd --version and pdd -v are aliases).
pdd renders the same state the framework stores under .audit/. It reads:
board.md— tasks and cross-finding state.coverage.md— the parity coverage map (the headline percentage).- each finding's frontmatter — id, title, status,
confidencetier,worktree. - the
evidenceblocks inside eachresolution.md.
For the full schema of every file it reads, see
.audit/ structure.
The CLI is optional. If Node and Bun are both unavailable, or you simply prefer to stay in the
agent session, /audit-status renders the same parity-coverage
percentage, confidence distribution, active tasks, and suggested next actions directly in chat —
with zero dependencies.