AI coding tools lose intent.
handoff keeps it executable.
Local-first intent and execution layer for AI-assisted development.
It turns a feature brief into specs, design notes, decisions, execution steps, evidence, and continuation-safe prompts.
Without a structured workflow layer:
- context disappears between chats
- you repeat the same setup and constraints
- intent gets blurred before implementation starts
- requirements and decisions drift apart
- execution drifts away from earlier decisions
- “what should I do next?” becomes manual work again
handoff gives each feature a local workflow workspace:
- capture intent in
FEATURE.md - normalize behavior in
SPEC.md - preserve technical shape in
DESIGN.md - record durable choices in
DECISIONS.md - execute from
STATE.md - keep proof of work through evidence
- resume from
SESSION.md - audit drift with
handoff drift
The workspace stays plain Markdown:
FEATURE.md: the raw feature briefSPEC.md: normalized requirementsDESIGN.md: optional technical designSTATE.md: execution plan and progressSESSION.md: continuation-safe session summaryDECISIONS.md: durable feature decisions and tradeoffs
Then it generates the right prompt for the current state so your assistant can plan, execute, continue, and audit the work without losing the thread.
No API keys. No cloud. No provider lock-in. It works with any AI coding assistant that accepts a text prompt.
handoff init my-feature
# edit .handoff/current/FEATURE.md
handoff run --copy
handoff next
handoff status
handoff drift --copyWhat happens:
handoff initcreates the feature workspacehandoff initalso scans context readiness and tells you if high-value repo context such asREADME.mdorAGENTS.mdis missinghandoff runchooses the right prompt from the saved statehandoff nextshows the next task or blocking actionhandoff statusmakes the current state visiblehandoff driftgenerates an audit prompt to compare saved intent against implementation
If the repo is missing high-value context, run:
handoff prompt context --copyThat prompt helps you improve README.md, AGENTS.md, CLAUDE.md, docs/architecture.md, docs/conventions.md, docs/decisions/, or other context files only when they would materially help future AI sessions.
- Capture feature intent.
- Turn intent into a spec.
- Add design only when it helps.
- Preserve durable decisions.
- Generate an execution plan.
- Execute with evidence.
- Continue safely across sessions.
- Audit drift before closing.
handoff is not just a place to store context.
It keeps the development loop structured:
- intent stays explicit
- specs become the behavioral source of truth
- decisions explain why choices were made
- execution steps stay deterministic
- evidence records what was actually validated
- drift audits catch mismatch before work is closed
- your assistant stops restarting from scratch every session
- feature intent becomes reviewable before code changes
- the next step stays explicit instead of living in chat history
- planning and execution stay separated
- decisions and validation evidence survive handoff
- you can switch models or assistants without throwing away progress
- build with AI across multiple sessions
- work solo and need continuity without extra process overhead
- want intent, decisions, state, and evidence outside chat history
- hand off work between assistants or teammates
cargo build --release
sudo mv ./target/release/handoff /usr/local/bin/handoffOr use the latest GitHub Release.
macOS: If macOS blocks the binary, allow it from System Settings → Privacy & Security.
- Guide: normal workflows, command choice, planning-heavy flow, model usage pattern
- Worked Example: end-to-end example from
FEATURE.mdto continued execution - Architecture: core concepts, state model, and product boundaries
- Troubleshooting: common failure modes and concrete recovery steps
- Reference: command list, workspace layout, config, status/validate, shell completions
- Changelog: user-facing changes
- solo developers shipping with AI
- indie hackers building in public
- teams that want a plain-text project memory layer around coding assistants
handoff is model-agnostic, but a split-model workflow often works well:
- Use a stronger reasoning model for planning-oriented commands such as
handoff run,handoff generate,handoff spec,handoff design, andhandoff taskswhen the feature still needs planning. - Use a cheaper or faster coding model for execution-oriented commands such as
handoff run,handoff start, andhandoff continueonce the plan is ready. - Switch back to the stronger planning model if implementation drifts, the plan becomes inconsistent, or you need to regenerate planning artifacts.
Example pattern:
Strong planning model -> handoff run / generate / spec / design / tasks
Cheaper coding model -> handoff run / start / continue
This keeps planning quality high while reducing cost and latency during implementation loops.
handoff init my-featureTo exclude .handoff/ from Git without affecting .gitignore:
handoff ignore
Run it again to remove the entry from .git/info/exclude.
Focused, minimal changes are preferred. If you change behavior or workflow contracts, also update README.md, CHANGELOG.md, and relevant templates. See AGENTS.md for repository-specific contributor guidance.
MIT. See LICENSE.
