PRD → Tests → Implementation. Three pipeline profiles. Any AI tool. Any language.
CLI tool that enforces structured AI development.
Pipeline profiles: full, standard, lite. Choose what fits each feature.
Go. Single binary. Zero dependencies. Claude Code, OpenCode, Cursor.
Website · GitHub · Benchmarks
Requires Go 1.25+
go install github.com/veschin/ptsd/v2/cmd/ptsd@latestIf @latest returns a stale version (Go proxy caches ~30 min), pin the tag:
go install github.com/veschin/ptsd/v2/cmd/ptsd@v2.0.0Verify: ptsd version
Shell completion (optional):
# bash -- add to ~/.bashrc
eval "$(ptsd completion bash)"
# fish -- add to ~/.config/fish/config.fish
ptsd completion fish | sourceUninstall: rm $(go env GOPATH)/bin/ptsd. Per project: rm -rf .ptsd/ .claude/ .git/hooks/pre-commit .git/hooks/commit-msg
mkdir my-project && cd my-project
git init
ptsd init --tool claude # or: opencode, generic
ptsd feature add auth "Auth" --pipeline full
ptsd feature status auth in-progress
ptsd context --agent # see what to do nextAfter ptsd init, start a Claude Code session. Hooks fire automatically -- the LLM sees what to do, gets blocked if it tries to skip, and advances stages as it creates artifacts.
Every feature has a pipeline profile. Default: standard.
| Profile | Stages | Use For |
|---|---|---|
| full | PRD -> Seed -> BDD -> Tests -> Impl | Complex, data-heavy features |
| standard | PRD -> BDD -> Tests -> Impl | Default. Most features |
| lite | PRD -> Tests -> Impl | Simple utilities, config |
| Tool | Enforcement |
|---|---|
| Claude Code | Full: gate, track, context via .claude/hooks/ |
| OpenCode | Full: via .opencode/plugins/ptsd.ts |
| Generic | Advisory + git hooks |
Test detection: Go, TypeScript, JavaScript, Python, Ruby, Rust, Java, C#.
Test runner auto-detected from project files (package.json, go.mod, pyproject.toml, Cargo.toml, etc).
ptsd init [--tool claude|opencode|generic]
ptsd feature add <id> <title> [--pipeline full|standard|lite]
ptsd feature list
ptsd feature status <id> <status>
ptsd context --agent
ptsd status
ptsd validate
ptsd review <feature> <stage> <score>
ptsd test map --feature <id> <test-file>
ptsd adopt [--dry-run]
ptsd migrate8 runs, 2 models (Sonnet, GLM-5 via GoLeM), blind evaluation on identical spec.
| Model | Condition | Score | Tests | Commits |
|---|---|---|---|---|
| Sonnet | bare | 25.0/27 | 22 | 0-1 |
| Sonnet | PTSD | 24.5/27 | 26 | 4-8 |
| GLM-5 | bare | 20.5/27 | 9 | 1 |
| GLM-5 | PTSD | 20.0/27 | 24 | 8-13 |
PTSD doesn't make the first implementation better -- it makes the project developable. After a bare run you have code. After a PTSD run you have a feature registry, BDD specs, test mappings, review history, and stage-separated commits.
Full methodology: FEEDBACK.md | Website
| Code | Meaning |
|---|---|
| 0 | Success |
| 1 | Validation failure |
| 2 | Bad arguments |
| 3 | Config error |
| 4 | I/O error |
| 5 | Test runner failure |
MIT
