From armory
Maintains `.docs/handoff.md` as a session-continuity runbook capturing git state, working-tree changes, decisions, blockers, and a resume checklist. Use when ending, pausing, resuming, or transferring in-flight project work across agent sessions.
How this skill is triggered — by the user, by Claude, or both
Slash command
/armory:handoffThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Maintains `.docs/handoff.md` as the project-local cold-start primer for the next coding agent or human developer. The file captures transient session state only: what changed, what was decided, what is blocked, and exactly how to resume.
Maintains .docs/handoff.md as the project-local cold-start primer for the next coding agent or human developer. The file captures transient session state only: what changed, what was decided, what is blocked, and exactly how to resume.
| File | Contents | Load When |
|---|---|---|
references/schema.md | Verbatim handoff schema and line-budget rules | Always before writing |
references/authority-boundaries.md | Boundary between handoff, memory, CLAUDE.md, plans, and git | Always before writing |
| Use handoff | Use another surface |
|---|---|
| In-flight work, uncommitted edits, current branch, blockers, resume steps | git log for committed history |
| Session-scoped decisions and failed approaches | Memory or ADRs for durable project facts |
| Immediate validation state and exact next command | CLAUDE.md for stable setup instructions |
| Current roadmap cursor | Plan files for strategic roadmap content |
/handoff, /handoff init.docs/handoff.md already existsgit available in the project root..docs/handoff.md..docs/handoff.last-validation containing the last verification command and result..docs/handoff.session containing extra bullets for changes, decisions, blockers, or refs./handoff init or invocation from an initialization workflow writes a greenfield stub when .docs/handoff.md is absent./handoff, refresh phrases, and Stop-hook invocation rewrite the full file.references/schema.md and preserve the schema headings exactly.references/authority-boundaries.md and include the authority boundary line in every generated handoff.git rev-parse --show-toplevel, git branch --show-current, git rev-parse --short HEAD, and git status --porcelain..docs/handoff.last-validation..docs/handoff.md atomically; do not append..docs/ if absent..docs/handoff.md.## What changed this session oldest-first.<!-- WARNING: handoff exceeded 200 lines; oldest session changes were truncated. -->.| Operation | Command | Behavior |
|---|---|---|
| Refresh | /handoff | Rewrites .docs/handoff.md from current repo and session state |
| Scaffold | /handoff init | Creates an empty schema stub when no handoff exists |
| Stop refresh | Stop hook | Refreshes only when .docs/handoff.md already exists |
| Dry run | uv run skills/handoff/scripts/handoff.py --dry-run | Prints generated content without writing |
The bundled script is the deterministic baseline used by the command and hook:
uv run skills/handoff/scripts/handoff.py --project-root "$PWD"
uv run skills/handoff/scripts/handoff.py --project-root "$PWD" --init
Agents may improve populated bullets from live session context before writing, but must preserve:
When invoked as /handoff init or under a project initialization flow and .docs/handoff.md does not exist, write the schema with empty placeholders and real git metadata. This documents the /init integration point without modifying any init script.
Write exactly one file: .docs/handoff.md.
Required first lines:
# Handoff — <project name>
**Last touched:** <ISO 8601 timestamp with timezone> · **branch:** `<branch>` · **HEAD:** `<short-sha>` · **session:** <model id>
| Problem | Resolution |
|---|---|
| Not in a git repository | Fail clearly for refresh; scaffold may use branch — and HEAD — only during /handoff init |
.docs/ missing | Create it before writing |
| Validation state unavailable | Write "not recorded this session"; do not claim tests passed |
| Generated file exceeds 200 lines | Truncate oldest What changed bullets and add the warning comment |
| Existing handoff uses old casing or root path | Do not migrate automatically; future refreshes converge only when invoked in that project |
uv run python scripts/validate_evals.pyuv run scripts/evaluate_package.py skills/handoffuv run skills/handoff/scripts/handoff.py --project-root <repo> --dry-runuv run skills/handoff/scripts/handoff.py --project-root <repo> --init --output <tmp-file>npx claudepluginhub mathews-tom/armory --plugin armoryCaptures current workflow state into a handoff document so a fresh session can resume exactly where the previous one left off. Useful when context is running low or work needs to continue in a new session.
Generate a structured handoff document capturing current progress, open tasks, key decisions, and context needed to resume work. Use when ending a session.
Captures mid-work session state into a canonical handoff document for session continuity. Useful when ending a session mid-work, switching tools, or after context-health warnings.