@gonrocca/zero-pi
zero-pi — an installable layer for pi (pi.dev): the zero spec-driven development workflow (clarify → explore → plan → analyze → build → veredicto) with automatic clarify/analyze gates, per-phase model autotune, and token-efficient batched builds. Adds cap
Package details
Install @gonrocca/zero-pi from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:@gonrocca/zero-pi- Package
@gonrocca/zero-pi- Version
0.1.72- Published
- Jul 14, 2026
- Downloads
- 3,871/mo · 420/wk
- Author
- gonrocca
- License
- MIT
- Types
- extension, skill, theme, prompt
- Size
- 464.1 KB
- Dependencies
- 0 dependencies · 0 peers
Pi manifest JSON
{
"prompts": [
"./prompts"
],
"skills": [
"./skills"
],
"themes": [
"./themes"
],
"image": "https://raw.githubusercontent.com/gonzalonicolasr/zero-pi/main/assets/preview.png",
"extensions": [
"./extensions/zero-banner.ts",
"./extensions/zero-hud.ts",
"./extensions/zero-theme.ts",
"./extensions/zero-pretty-code-fences.ts",
"./extensions/zero-pretty-input-box.ts",
"./extensions/zero-pretty-tool-cards.ts",
"./extensions/zero-activity-panel.ts",
"./extensions/working-phrases.ts",
"./extensions/win-tree-kill.ts",
"./extensions/sdd-agents.ts",
"./extensions/conversation-resume.ts",
"./extensions/zero-models.ts",
"./extensions/autotune-extension.ts",
"./extensions/spec-merge-extension.ts",
"./extensions/zero-validate-extension.ts",
"./extensions/zero-status-extension.ts",
"./extensions/zero-doctor-extension.ts",
"./extensions/zero-cost-extension.ts",
"./extensions/zero-checkpoint-extension.ts",
"./extensions/zero-pr-extension.ts",
"./extensions/zero-branch-extension.ts",
"./extensions/zero-git-validate-extension.ts",
"./extensions/zero-archive-extension.ts",
"./extensions/zero-issue-extension.ts",
"./extensions/zero-diff-extension.ts",
"./extensions/provider-guard-extension.ts",
"./extensions/scan-guard-extension.ts"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
███████╗ ███████╗ ██████╗ ██████╗ ██████╗ ██╗
╚══███╔╝ ██╔════╝ ██╔══██╗ ██╔═══██╗ ██╔══██╗ ██║
███╔╝ █████╗ ██████╔╝ ██║ ██║ █████╗ ██████╔╝ ██║
███╔╝ ██╔══╝ ██╔══██╗ ██║ ██║ ╚════╝ ██╔═══╝ ██║
███████╗ ███████╗ ██║ ██║ ╚██████╔╝ ██║ ██║
╚══════╝ ╚══════╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝
@gonrocca/zero-pi
The zero spec-driven development workflow, packaged for pi.
💬 Join the community
Questions, ideas, or want to debate workflow design? Come hang out:
zero-pi is an installable pi package that adds a
disciplined spec-driven development pipeline — plus a handful of quality-of-life
extensions — without modifying pi. Same idea as gentle-pi: pi stays
untouched; zero-pi is a package it loads.
📦 Install
pi install npm:@gonrocca/zero-pi
pi install npm:pi-subagents # required — the pipeline delegates to sub-agents
Needs Node ≥ 20.6. Restart pi after an install or upgrade so pi regenerates
the zero-* phase agents.
Quick start
- Run
/zero-doctorto catch missingpi-subagents, stale generated agents, invalid model config, or GitHub CLI auth before spending tokens. - Run
/zero-models(or set direct assignments) when you want a different model/thinking profile per phase; otherwise the package defaults are used. - Run
/forge <feature>and let the automatic gates drive the flow. - Read the final cost table:
/forgeinvokes/zero-cost <slug>automatically at the end. Re-run/zero-cost [slug]manually only when you want to inspect an older run or debug missing metadata.
🛠 /forge — the SDD pipeline
The core of zero-pi. Run /forge <feature> and the orchestrator drives the
work through six phases — the automatic
clarify → explore → plan → analyze → build → veredicto flow — each delegated
to its own sub-agent:
| Phase | Does |
|---|---|
| clarify | Record de-risking assumptions before exploration; stop only on blocking ambiguity. |
| explore | Investigate the codebase read-only; produce findings. |
| plan | Write requirements, design, and an ordered task list. |
| analyze | Review plan readiness after /zero-validate; decide continue or replan. |
| build | Implement the plan. |
| veredicto | Review it adversarially and record a verdict. |
Each run keeps its paper trail under .sdd/<slug>/: clarifications.md,
findings.md, proposal.md, spec.md, design.md, tasks.md,
checklist.md, and (when Strict TDD engages) tdd-evidence.md.
The clarify and analyze gates are automatic inside /forge — no extra
slash command in the normal flow. clarify writes .sdd/<slug>/clarifications.md
and asks only when proceeding would risk the wrong product; analyze writes
.sdd/<slug>/checklist.md after the structural /zero-validate gate and returns
continue (build) or replan (re-run plan with concrete defects). Neither gate
counts as a build/veredicto round.
The verdict is pasa (done), corregir (re-run build), or replantear
(re-run plan). A hard iteration cap bounds the build↔veredicto loop — reached
without a pasa, the run stops and is reported as not verified.
/forge --continue [slug] resumes an interrupted run.
Build runs test-first. By default the build phase follows a strict TDD
cycle — RED → GREEN → TRIANGULATE → REFACTOR — and records a TDD Cycle
Evidence table; veredicto audits that evidence (tests exist, are really green,
assertions verify real behavior) and returns corregir if the discipline
slipped. It engages only when a test runner exists and the change touches code,
so docs/config-only work degrades gracefully. Opt a project out with
tdd.mode: "off" in .sdd/config.json (see Configuration).
The run speaks Spanish, in a bounded, low-noise format — one short summary
per phase, naming the model that phase runs on, no raw tool output. Or just
describe the work and say "hacelo con sdd": the sdd-routing skill routes it
into /forge for you.
✨ What else it adds
| Feature | What it does |
|---|---|
| Strict TDD | The build phase drives RED → GREEN → TRIANGULATE → REFACTOR with a TDD Cycle Evidence table; veredicto audits it. On by default, runtime-gated on a test runner; tdd.mode: "off" disables it. |
/zero-models |
Pick the model + provider + thinking level for each of the six SDD phases — a boxed-window picker, or set one directly. Direct assignments are validated against pi's model registry when available. |
| Phase tool gating | Generated zero-* sub-agents get phase-specific tool allowlists: explore/veredicto are read-only, clarify/analyze/plan write only .sdd artifacts, build edits code. |
| Dependency-aware tasks | tasks.md is validated as a task graph with mandatory depends: edges, topological ordering, and review workload totals. |
| Autotune | Learns which model fits each phase from your run history and re-tunes itself; optional autotuneBudget.maxPhaseCostUsd suppresses costly step-ups. |
/zero-doctor |
Preflight diagnostics for zero-pi: package install, Node version, pi-subagents, generated phase agents, model config, .sdd/config, run history, git, and gh auth. |
/zero-cost |
Aggregates a run's sub-agent meta.json files into a per-phase token/cost/duration report — /forge invokes it automatically at the end; manual re-run stays available for older runs/debug. |
/zero-checkpoint |
Writes patch-based worktree checkpoints under .sdd/<slug>/checkpoints/ before risky build batches. |
/zero-sync / /zero-archive |
Folds each run's spec delta into a canonical, project-wide spec store and archives approved runs. |
| Git / PR / Issues | /zero-branch, /zero-git-validate, /zero-pr, and /zero-issue keep branches and GitHub links audit-ready. |
| Run memory | Every run recalls and saves traces to Cortex, so runs learn from each other. |
| Provider guard | Warns when the anthropic provider runs on a metered API key instead of your subscription. |
| Startup banner | The sunset ANSI-Shadow ZERO wordmark, drawn once at pi startup — ZERO_HEADER=off to disable. |
| ZERO HUD | OMP-inspired segmented footer for SDD work: phase, model, tokens, cache, cost, diff, context %, and branch. Switch presets with /zero-hud compact|minimal|full|ascii|off or ZERO_HUD_PRESET. |
| Pretty input box | OMP-style prompt chrome with rounded corners, side borders, ZERO chips, and compact keyboard hints. |
| Pretty code fences | Markdown code blocks render as bordered panels with language badges instead of raw txt / json fence lines. |
| Live activity panel | Shows /forge phase progress and recent tool cards above the prompt while work is running. |
| Working-phrase ticker | Swaps pi's static Working... / Procesando... for a large pool of context-aware Spanish/ZERO/SDD phrases + spinner. |
| Conversation resume | Writes .pi/zero-resume.md on exit — the restore command + a conversation tail. |
| Windows tree-kill | Aborting a turn kills the whole process tree — no orphaned claude. |
| SDD routing skill | Natural-language requests that say "hacelo con sdd" route into /forge without remembering the slash command. |
zero-sdd theme |
A dark, high-contrast pi theme tuned for SDD work. |
zero-sunset theme |
A warm sunset variant — gold/coral/magenta accents over warm-dark panels, with one cool tone kept for syntax legibility. Activate with /theme zero-sunset. |
zero-omp-neon theme |
A high-contrast OMP-inspired neon theme with separated colour roles: cyan links/paths, gold titles, mint code/success, violet borders, and navy tool cards. Activate with /theme zero-omp-neon. |
| ZERO theme pack | Extra visual variants: zero-sith, zero-saiyan, zero-matrix, and zero-cyberpunk. Switch quickly with `/zero-theme sith |
⌨️ Commands
| Command | Does |
|---|---|
/forge <feature> |
Run the SDD pipeline — --continue [slug] resumes. |
/zero-models [<phase>=[<provider>/]<model> [thinking=<level>]] |
Show or set per-phase models, providers, and thinking — thinking=<level> (off|minimal|low|medium|high|xhigh); autotune=auto|ask|off. Direct assignments fail fast when pi's registry says the provider/model is unknown or ambiguous. |
/zero-doctor |
Run zero-pi preflight diagnostics: package, Node, pi-subagents, generated agents/support modules, model config, .sdd/config, run history, git, and gh. |
/zero-sync <slug> |
Fold a run's spec delta into the canonical spec store; a first all-## ADDED delta creates the store lazily. |
/zero-archive <slug> |
Merge an approved run into .sdd/specs/, move it to .sdd/archive/YYYY-MM-DD-<slug>/, and persist archivePath. |
/zero-validate <slug> |
Validate proposal/spec/design/tasks artifacts, including task schema and per-domain specs. |
/zero-status |
Show each .sdd/ run's artifact, sync, latest-verdict, and GitHub-link status. |
/zero-hud [compact|minimal|full|ascii|off|on|preview] |
Preview or switch the segmented ZERO footer for this pi session. Default preset: compact. |
/zero-theme [neon|sunset|sdd|sith|saiyan|matrix|cyberpunk] |
Switch between packaged ZERO theme variants without remembering full zero-* names. |
/zero-cost [<slug>] |
Report tokens (in/out/cache), USD cost, duration, and tool-count per SDD phase for a run — reads native pi session metas and project-local .pi-subagents/artifacts; <slug> for a specific run, no argument for the most recent. |
/zero-checkpoint [<slug>] [--json] |
Save diff.patch, status.txt, head.txt, meta.json, and a review-before-running restore.sh under .sdd/<slug>/checkpoints/<id>/. |
/zero-branch <slug> |
Create/reuse the configured SDD Git branch and persist branch/baseBranch. |
/zero-git-validate <slug> |
Check worktree, branch, remote, gh auth, and verdict gating before PR/archive. |
/zero-pr <slug> |
Create an audit-ready GitHub PR from a run that already has verdict pasa. |
/zero-issue <slug> |
Create or reuse a GitHub issue for a run and persist the link. |
/zero-diff <slug> |
Preview the logical spec-store merge without writing files. |
/zero-resume |
Write the session handoff note now. |
🎛️ Visual chrome: HUD, activity panel, prompt box
zero-pi ships several visual extensions. They are related, but each one owns a different part of pi's TUI:
| Surface | File | Where it appears | Purpose |
|---|---|---|---|
| ZERO HUD | extensions/zero-hud.ts |
Footer/status line at the bottom | Persistent model/tokens/cost/diff/context/branch telemetry. |
| Activity panel | extensions/zero-activity-panel.ts |
Widget above the prompt while work is running | Live /forge phase progress plus recent tool cards. |
| Tool cards | extensions/zero-pretty-tool-cards.ts |
Each tool execution/result in chat | ZERO-styled bordered cards with status glyphs, title metadata, and padded content. |
| Prompt box | extensions/zero-pretty-input-box.ts |
The input/editor box | OMP-like rounded box with ZERO chips and key hints. |
| Code fences | extensions/zero-pretty-code-fences.ts |
Markdown code blocks in chat | Bordered panels with language badges instead of raw txt / json lines. |
| Working phrases | extensions/working-phrases.ts |
Tiny loading row (Procesando… (esc)) |
Rotating ZERO/SDD/Star Wars/DBZ phrases and themed spinner. |
ZERO HUD presets
The HUD is the bottom footer. It is not the activity panel. Control it with:
/zero-hud preview
/zero-hud compact
/zero-hud minimal
/zero-hud full
/zero-hud ascii
/zero-hud off
/zero-hud on
Example compact HUD:
ZERO ▸ gpt-5.5 ▸ tok ↑1.1M ↓42K ▸ cost $16.22 ▸ diff +0/-0 ▸ ctx 11%
Startup preset can be set with:
ZERO_HUD_PRESET=full pi
Supported presets: compact (default), minimal, full, ascii, off.
Activity panel vs HUD
During /forge, the activity panel appears above the prompt and summarizes the live run:
╭─ ZERO activity ───────────────────────────────────────────────────────╮
│ SDD ✓ clarify › ✓ explore › ⠋ plan › · analyze › · build › · veredicto
│ Tools ⠋ subagent · ✓ read zero-hud.ts · ✓ bash npm test
╰────────────────────────────────────────────────────────────────────────╯
The activity panel is transient: it clears after the agent finishes. The HUD stays in the footer across normal work.
Applying visual changes after install
After pi install npm:@gonrocca/zero-pi@<version>, reload the active session:
/reload
If a visual monkeypatch was already loaded in the current process, restarting pi is the safest way to force all visual extensions to reinitialize.
Git / PR / Issues
Recommended flow: /zero-branch <slug> → /zero-issue <slug> → /forge <slug> (the orchestrator validates plan artifacts and can create /zero-checkpoint before build) → /zero-git-validate <slug> --for=pr → /zero-pr <slug> → /zero-archive <slug>.
links.json is forward-compatible and may contain:
{
"issueNumber": 12,
"issueUrl": "https://github.com/org/repo/issues/12",
"branch": "sdd/my-feature",
"baseBranch": "main",
"prNumber": 34,
"prUrl": "https://github.com/org/repo/pull/34",
"archivePath": ".sdd/archive/2026-05-24-my-feature"
}
/zero-branch <slug> uses .sdd/config.json when present:
{ "git": { "branchPrefix": "sdd/", "numbering": false, "autoCommit": false, "commitStyle": "conventional", "baseBranch": "main" } }
/zero-pr <slug> builds a PR title/body from .sdd/<slug>/proposal.md,
spec.md, design.md, and tasks.md, then saves the returned prNumber and
prUrl into .sdd/<slug>/links.json. It only runs after the run's latest
recorded verdict is pasa; if an issue was already linked, the PR body includes
Closes #N.
/zero-issue <slug> searches open GitHub issues for the exact normalized title
before creating a new one, then saves issueNumber and issueUrl in the same
links.json. Both commands require the gh CLI to be installed and
authenticated (gh auth login). --type=<label> is optional: when the label
exists in the repository it is passed to gh, and when it does not exist the
command continues without it.
The implementation shells out through gh rather than GitHub-specific Node
SDKs, keeping zero-pi dependency-free and portable across Windows, macOS, and
Linux as long as GitHub CLI is on PATH.
Spec deltas
/zero-sync and /zero-diff understand four delta sections: ## ADDED, ## MODIFIED, ## REMOVED, and ## RENAMED. RENAMED keeps the requirement's store position while changing its stable name:
## RENAMED
### REQ: new-name
from: old-name
Updated requirement body.
Acceptance criteria:
- ...
🔧 Configuration
zero-pi keeps its state in ~/.pi/zero.json (per-phase models, providers,
thinking, and autotune mode) and ~/.pi/zero-runs.jsonl (the run-metrics log);
per-project artifacts live under .sdd/. Set ZERO_RESUME=off to disable the
conversation-resume note.
~/.pi/zero.json stores three parallel per-phase maps plus the autotune mode.
The configurable phases are clarify, explore, plan, analyze, build,
and veredicto; a pre-gates file that lists only the original four stays valid
and the missing clarify/analyze fall back to defaults (cheap/fast clarify,
strong analyze):
{
"models": { "clarify": "claude-haiku-4-5", "analyze": "claude-opus-4-8", "build": "claude-sonnet-4-6" },
"providers": { "clarify": "anthropic", "analyze": "anthropic", "build": "anthropic" },
"thinking": { "analyze": "high", "build": "high" },
"autotune": "ask",
"autotuneBudget": { "maxPhaseCostUsd": 4, "minSamples": 3 }
}
The thinking map sets each phase's pi effort level — one of off, minimal,
low, medium, high, xhigh. An explicit entry always wins; a phase with no
entry (or an invalid level) falls back to the package default — clarify: medium, explore: high, plan: high, analyze: high, build: high,
veredicto: xhigh — so no phase inherits your session-wide
defaultThinkingLevel. autotuneBudget is optional:
when maxPhaseCostUsd is set, autotune will not step a blamed phase up to a more
expensive tier if that phase/model is already at or above the average USD
ceiling with enough cost samples (minSamples, default 3). Set thinking from
the picker's after-model thinking screen, or directly:
/zero-models build=anthropic/claude-sonnet-4-6 thinking=high
/zero-models build=anthropic/claude-sonnet-4-6 high # trailing shorthand
.sdd/config.json carries the per-project git and TDD settings:
{
"git": { "branchPrefix": "sdd/", "numbering": false, "autoCommit": false, "commitStyle": "conventional", "baseBranch": "main" },
"tdd": { "mode": "strict", "testCommand": "" }
}
tdd.mode defaults to "strict" (the build phase runs test-first; veredicto
audits the TDD evidence) and accepts "off" to disable the discipline.
tdd.testCommand overrides the auto-detected test runner the TDD cycle invokes;
leave it empty to let the build/veredicto phases detect it from the project.
Token efficiency
The phase sub-agents run without your global project context
(inheritProjectContext: false): a global AGENTS.md is heavy and may carry
personal data or credentials no phase needs — project conventions still reach
the phases, because explore/build skim the repo's own AGENTS.md/CLAUDE.md.
Every phase runs at an explicit thinking: level (your zero.json entry wins;
gaps take the package defaults above), and explore works under a numeric
tool-call budget with a mid-budget stop check. The heavy lifting happens inside
the sub-agents on their own models — leave the session that runs /forge on
your cheap default model.
Release checks
Before publishing, run npm test and npm run pack-check from
packages/zero-pi. prepublishOnly also runs the test suite, but pack-check
confirms the npm tarball still contains the prompts, skills, themes, assets, and
extension support modules pi needs.
🔗 Relationship to zero
zero-pi is the pi layer of the zero integrator. The zero CLI installs it
onto pi and writes the per-phase model config; you can also install zero-pi on
its own with the command above.
Development
Dependency-free, no build step — pi loads the TypeScript extensions directly.
Run the test suite with npm test.
License
MIT © Gonzalo Rocca · github.com/gonzalonicolasr/zero-pi
