A lightweight, human-interactive development workflow for AI-assisted coding.
Install the CLI from npm, then initialize the editor-facing commands and skills in your project:
npm install -g zest-dev
zest-dev initIf you prefer not to install globally, run it with npx:
npx zest-dev initAfter installation, verify the CLI is available:
zest-dev --version
zest-dev --helpFrom the project where you want to use Zest Dev, run:
zest-dev initWhen developing this repository locally, install dependencies and link the CLI into your global PATH:
npm install
npm linknpm link makes the global zest-dev command point at this checkout, so local source changes are picked up immediately:
zest-dev --help
zest-dev initPublishing is automated from GitHub Actions after merge to main when package.json contains a new version.
Before publishing, validate the package locally:
npm pack --dry-run --json
pnpm test:local
pnpm test:packageThe repository uses npm Trusted Publishing with GitHub Actions OIDC:
- PRs that change package-shipped CLI files automatically receive a patch version bump when needed.
- PRs fail CI if their version is not ahead of
main. - The
publish-npm.ymlworkflow publishes merged versions withnpm publish --access public --provenance. - npm package settings must include a trusted publisher for
nettee/zest-devwith workflow filenamepublish-npm.yml.
Optional repository secret:
- Set
AUTO_BUMP_TOKENto a fine-grained GitHub token with write access to this repository if you want PR auto-bump pushes to be attributed to that token owner instead ofgithub-actions[bot]. This can avoid GitHub's approval gate on follow-up PR runs triggered by the auto-bump commit.
If publishing fails, inspect the Publish npm workflow run on main before retrying.
Zest Dev uses a content-contract skill / approach command model:
- the
Zest Devskill owns Spec lifecycle and recording contracts - Section Guides define Overview, Design, Plan, and Implementation content
- two thin commands choose how a new Spec reaches Designed Status
- the
zest-devCLI manages Spec files and lifecycle state
Use the lightweight route for straightforward work:
/zest-dev:lightweight "My new feature"Use grilling when the design needs an intensive, one-question-at-a-time decision process:
/zest-dev:grilling "My complex feature"Both commands create and activate a new Spec, establish its Overview, and reach the same Designed Status. The grilling route composes the registered grilling and domain-modeling skills. Research is not a separate status or required step; source-backed Research Findings live beside Design Decisions in the Design Record.
New-format Specs progress through new → designed → planned → implemented.
The zest-dev CLI manages spec files. Use it to inspect and update specs outside of Claude.
| Command | Purpose |
|---|---|
zest-dev status |
View project status |
zest-dev show <spec-id|active> |
View spec content |
zest-dev create <slug> |
Create new spec |
zest-dev set-active <spec-id> |
Set active change spec |
zest-dev unset-active |
Unset active change spec |
zest-dev update <spec-id|active> <status> |
Update spec status |
zest-dev create-branch |
Create a git branch from the active change spec |
zest-dev dump <spec-id|active> [--dry-run] |
Archive a spec as an issue representation or GitHub issue |
zest-dev load [issue] [--from-file <path>] |
Reconstruct a spec from an issue representation or GitHub issue |
zest-dev ralph |
Convert active Spec Progress items into Ralph tasks |
Valid status values: new, designed, planned, implemented
- Forward-only transitions (skipping is allowed): e.g.
new → designedis valid - Backward transitions fail: e.g.
implemented → designed - Setting the same status again returns an error
Zest Dev's editor-facing resources are stored in top-level directories:
commands/- the lightweight and grilling Design Approach entrypointsskills/- the Zest Dev skill and its Section Guidesagents/- reusable subagent definitions
The plugin/ directory is a Claude Code compatibility layer. It keeps plugin metadata under plugin/.claude-plugin/, while plugin/commands, plugin/skills, and plugin/agents are symlinks to the top-level source directories.
project/
├── specs/
│ ├── change/
│ ├── 20260224-init-project/
│ │ ├── spec.md
│ │ ├── design.md
│ │ └── implementation.md
│ ├── 20260225-feature-name/
│ │ ├── spec.md
│ │ ├── design.md
│ │ └── implementation.md
│ └── active -> 20260225-feature-name (symlink)
│ └── current/
│ └── implementation.md
- OpenSpec - Inspired by its current-spec methodology, where specs act as the source of truth for how a system currently behaves and changes are managed separately until they are merged back.
- Matt Pocock Skills:
to-tickets- References its tracer-bullet vertical-slice planning style for breaking design work into Zest Dev Plan tickets. - Matt Pocock Skills:
tdd- References its test-driven implementation methodology for coding work, separate from Plan ticket slicing.