projd

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.

projd

        

Claude Code works great in a single sitting. Then...

Context lost

Long sessions lose context. The agent forgets what it already built and starts second-guessing decisions from earlier.

Branch chaos

Multiple agents commit to the wrong branch, overwrite each other's work, or push directly to main.

No guardrails

Nothing stops the agent from force-pushing, skipping tests, or starting work that conflicts with other agents.

projd adds the missing pieces.

Everything agents need. Nothing they don't.

Feature Planning

Break requirements into JSON feature files with acceptance criteria and dependency ordering.

Branch Isolation

Each agent works in its own git worktree on its own branch. No conflicts.

Git Policy Enforcement

PreToolUse hooks block violations before they execute. The agent cannot bypass branch protection.

Parallel Dispatch

Up to 20 agents in dependency-aware waves, with optional auto-review and merge.

Session Continuity

Structured handoff notes preserve context between sessions instead of relying on chat history.

Smoke-Test Gates

Features are not marked complete until lint, typecheck, and tests pass. Enforced, not optional.

Monitor Dashboard Live TUI with progress bars, token tracking, keyboard shortcuts.
Multi-Project Monorepo support with per-project features and aggregated status.
Upgradeable SHA256 manifest tracking for template updates without losing customizations.
5 Languages TypeScript, Go, Python, Swift, Kotlin with built-in template blocks.

Plan. Dispatch. Review. Ship.

Three modes for different levels of control.

Y

/projd-hands-on

You pick a feature and kick off the agent.

A

Reads handoff notes

Agent picks up context from the previous session.

A

Runs smoke tests

Verifies the codebase is healthy before starting.

A

Implements feature

Works against acceptance criteria. Commits incrementally.

A

Pushes + creates PR

PR ready

Y

Review + merge

You review the PR and start the next feature.

Y

/projd-hands-off

You launch parallel dispatch. That's it.

D

Scans features, plans waves

Identifies pending unblocked features and groups them into parallel waves.

wave 1
A

agent/config-loader

Isolated worktree. Implements, commits, pushes, creates PR.

A

agent/env-lifecycle

Runs in parallel. No conflicts.

D

Blockers done. Wave 2.

config-loader complete -- 3 features unblocked

wave 2
A

agent/docker-backend

Starts only after config-loader is complete.

A

agent/template-engine + agent/shell-completions

3 agents in parallel. Each in its own worktree.

Y

7 PRs ready for review

7/7 features complete across 3 waves

Y

/projd-hands-off auto_review: true

You start it and walk away.

D

Dispatches agents in waves

Same parallel dispatch as hands-off mode.

wave 1
A

Agents build features

Each creates a PR when done.

R

Reviewer agent checks each PR

Runs smoke tests. Verifies acceptance criteria.

R

Pass? Auto-merge.

PR merged automatically

R

Fail? Fix + retry.

Fixes trivial issues inline. Spawns subagent for larger fixes. Still fails? Flagged for you

D

Wave 2 begins after blockers merge

The loop closes itself. You only get pulled in when something fails twice.

See it in action

Real artifacts from a projd workflow.

Feature File — .projd/progress/docker-backend.json
{
  "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 — /projd-hands-off --dry-run
  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)
wave 1 config-loader env-lifecycle
wave 2 docker-backend template-engine completions
wave 3 port-forwarding status-dashboard
Live Monitor — ./.projd/scripts/monitor.sh
projd monitor   devenv — CLI for dev environments   14:32:15
████████████░░░░░░░░   57%   2 done  3 wip  2 pending  (7 total)   tokens: 62.4k in / 18.7k out
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
j/k navigate    d details    l commits    p open PR    m merge    r reset    q quit
Result — 7 features, 3 waves, 7 PRs
  7/7 features complete. 7 PRs ready for review.
  • #4 config-loader agent/config-loader Merged
  • #5 env-lifecycle agent/env-lifecycle Merged
  • #6 docker-backend agent/docker-backend Merged
  • #7 template-engine agent/template-engine Merged
  • #8 shell-completions agent/shell-completions Merged
  • #9 port-forwarding agent/port-forwarding Review
  • #10 status-dashboard agent/status-dashboard Review

A project template, not a platform.

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

Git enforcement at hook level

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.

Session continuity via handoff notes

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.

Dependency-aware dispatch

Features declare blocked_by dependencies explicitly. The dispatcher schedules waves and won't start a feature until its blockers are complete.

Smoke tests as completion gate

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.

When to use projd

Greenfield build from a spec

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.

Adding a major capability

/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.

Batch of independent improvements

8 features on your backlog, none depend on each other. /projd-hands-off builds all 8 in parallel. You merge the PRs.

Multi-service monorepo

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.

Get started in 60 seconds

Claude Code
claude.ai/code
Lefthook
brew install lefthook
jq
brew install jq
gh
brew install gh

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.

terminal