A project harness for long-running and parallel AI agent sessions.
You describe what you want. projd breaks it into features. Claude builds them -- one at a time or twenty in parallel. You review PRs. That's the whole deal.
Long sessions lose context. The agent forgets what it already built and starts second-guessing decisions from earlier.
Multiple agents commit to the wrong branch, overwrite each other's work, or push directly to main.
Nothing stops the agent from force-pushing, skipping tests, or starting work that conflicts with other agents.
projd adds the missing pieces.
Break requirements into JSON feature files with acceptance criteria and dependency ordering.
Each agent works in its own git worktree on its own branch. No conflicts.
PreToolUse hooks block violations before they execute. The agent cannot bypass branch protection.
Up to 20 agents in dependency-aware waves, with optional auto-review and merge.
Structured handoff notes preserve context between sessions instead of relying on chat history.
Features are not marked complete until lint, typecheck, and tests pass. Enforced, not optional.
Three modes for different levels of control.
/projd-hands-onYou pick a feature and kick off the agent.
Agent picks up context from the previous session.
Verifies the codebase is healthy before starting.
Works against acceptance criteria. Commits incrementally.
PR ready
You review the PR and start the next feature.
/projd-hands-offYou launch parallel dispatch. That's it.
Identifies pending unblocked features and groups them into parallel waves.
Isolated worktree. Implements, commits, pushes, creates PR.
Runs in parallel. No conflicts.
config-loader complete -- 3 features unblocked
Starts only after config-loader is complete.
3 agents in parallel. Each in its own worktree.
7/7 features complete across 3 waves
/projd-hands-off auto_review: trueYou start it and walk away.
Same parallel dispatch as hands-off mode.
Each creates a PR when done.
Runs smoke tests. Verifies acceptance criteria.
PR merged automatically
Fixes trivial issues inline. Spawns subagent for larger fixes. Still fails? Flagged for you
The loop closes itself. You only get pulled in when something fails twice.
Real artifacts from a projd workflow.
{ "id": "docker-backend", "name": "Docker Backend", "description": "Docker container management for dev environments.", "acceptance_criteria": [ testable, not vague "devenv up starts a container from the project config", "devenv down stops and removes the container", "devenv status shows running containers with port mappings" ], "priority": 3, "status": "pending", pending / in_progress / complete "branch": "", "blocked_by": ["config-loader"], waits for config-loader "notes": "" }
Dispatch plan (max_agents: 20): Wave 1: config-loader, env-lifecycle (2 agents) Wave 2: docker-backend, template-engine, shell-completions (3 agents) Wave 3: port-forwarding, status-dashboard (2 agents)
| Feature | State | Wave | Branch | Tokens | Details |
|---|---|---|---|---|---|
| config-loader | done | 1 | agent/config-loader | 11.2k | PR #4 |
| env-lifecycle | done | 1 | agent/env-lifecycle | 9.8k | PR #5 |
| docker-backend | wip | 2 | agent/docker-backend | 14.1k | implementing container lifecycle |
| template-engine | wip | 2 | agent/template-engine | 8.6k | parsing template variables |
| shell-completions | wip | 2 | agent/shell-completions | 6.3k | generating bash completions |
| port-forwarding | pending | 3 | — | — | blocked by docker-backend |
| status-dashboard | pending | 3 | — | — | blocked by docker-backend |
7/7 features complete. 7 PRs ready for review.
Lives in your repo. Nothing to install globally. No daemon, no desktop app.
| projd | Spec Kit | Agent Orchestrator | Kagan | Claude Squad | dmux | Plandex | |
|---|---|---|---|---|---|---|---|
| Approach | Project template | CLI toolkit | Platform | TUI daemon | Terminal mux | Terminal mux | CLI agent |
| Parallel agents | ✓ worktrees | ✕ | ✓ 30+ worktrees | ✓ 14+ agents | ✓ tmux | ✓ tmux | ✕ |
| Feature planning | ✓ JSON + criteria | ✓ Specs | ✓ Backlog | ✓ Kanban | ✕ | ✕ | ~ Plans |
| Dependency tracking | ✓ blocked_by | ~ ordering | ✓ | ✕ | ✕ | ✕ | ✕ |
| Git policy enforcement | ✓ PreToolUse hook | ✕ | ~ | ✕ | ✕ | ~ hooks | ✕ |
| Session handoff | ✓ .projd/HANDOFF.md | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ |
| Quality gates | ✓ smoke + hooks | ~ extensions | ✓ CI auto-fix | ~ review flow | ✕ | ~ hooks | ~ sandbox |
| Auto PR + review | ✓ + auto-merge | ✕ | ✓ | ✓ | ✕ | ✕ | ✕ |
| Agent support | Claude Code | 25+ agents | Multi-agent | 14+ agents | Multi-agent | 11+ agents | Any LLM |
| Install model | Clone + setup.sh | uv install | npm install | brew install | go install | go install | brew install |
The PreToolUse hook intercepts commands before they execute. The agent cannot bypass branch protection, push to the wrong branch, or force-push. Most orchestrators trust the agent or rely on CI after the fact.
When a session ends with incomplete work, structured handoff notes preserve context for the next session. No relying on chat history or starting from scratch.
Features declare blocked_by dependencies explicitly. The dispatcher schedules waves and won't start a feature until its blockers are complete.
A feature is not marked complete until lint, typecheck, and tests pass. This is enforced by the skill, not left to the agent's judgment.
You have requirements. projd decomposes them into features, builds them in parallel, and you review PRs. A weekend project that would take a week of sequential sessions.
/projd-adopt + /projd-plan. The dependency graph ensures new features build on each other correctly. Smoke tests gate completion so agents can't break what already works.
8 features on your backlog, none depend on each other. /projd-hands-off builds all 8 in parallel. You merge the PRs.
projects.json gives each service its own progress tracker. Agents work across services in parallel without conflicts.
projd is overkill for single-feature bug fixes, quick scripts, or exploratory sessions. Just use Claude Code directly for those.
Install with npm/pnpm:
npx @0x3k/projd
Or with curl:
bash <(curl -fsSL https://raw.githubusercontent.com/0x3k/projd/main/.projd/scripts/remote-install.sh)
Installs /projd-create and /projd-adopt to ~/.claude/skills/. Skills auto-update once per day.