| name | create-handoff |
|---|---|
| description | Generate a handoff document after implementation work is complete — summarizes changes, risks, and review focus areas for the review pipeline. Use when done coding and ready to hand off for review. |
| owner | chalk |
| version | 1.0.0 |
| metadata-version | 1 |
| allowed-tools | Bash, Read, Glob, Grep, Write |
| argument-hint | [optional session name or issue reference] |
Generate a structured handoff document summarizing implementation work for the review pipeline.
Derive a session name from context:
- If the user provided
$ARGUMENTS, sanitize it to a safe kebab-case string (lowercase, strip any characters that aren't alphanumeric or hyphens, collapse multiple hyphens) and use that as the item name - Otherwise, infer from the current branch name (e.g.
feature/issue-24-authentication→issue-24-authentication) - If on
main/master, ask the user what to name the session
Create the session directory and handoff file:
SESSION_DIR=".reviews/${session-name}"
HANDOFF_PATH="$SESSION_DIR/handoff.md"
mkdir -p "$SESSION_DIR"If the handoff file already exists with content beyond the template, ask the user whether to overwrite or create a new timestamped session.
Figure out what the current branch was based on:
- Check for a merge base with
main:git merge-base main HEAD - If that fails, try
origin/main - If that fails, try
master/origin/master
Store this as {base} for later steps.
Run these to understand the scope of changes:
git log --oneline {base}..HEAD
git diff --stat {base}..HEAD
git diff {base}..HEADAuto-detect the project's build/check tooling and run what's available. Check for these in order:
Node.js — if package.json exists:
- Detect package manager:
yarn.lock→ yarn,pnpm-lock.yaml→ pnpm, else npm - Run build:
{pm} run build 2>&1 | tail -5 - Run typecheck:
{pm} run typecheck 2>&1 | tail -5ORnpx tsc --noEmit 2>&1 | tail -5 - Run lint:
{pm} run lint 2>&1 | tail -5 - Run test:
{pm} run test 2>&1 | tail -5
Rust — if Cargo.toml exists:
cargo check 2>&1 | tail -5cargo test --no-run 2>&1 | tail -5cargo clippy 2>&1 | tail -5
Go — if go.mod exists:
go build ./... 2>&1 | tail -5go vet ./... 2>&1 | tail -5go test ./... -short 2>&1 | tail -5
Python — if pyproject.toml or requirements.txt exists:
python -m py_compileon changed.pyfilespython -m pytest --co -q 2>&1 | tail -5(collect only, don't run)
Make — if Makefile exists with build/check/test targets:
make build 2>&1 | tail -5make check 2>&1 | tail -5make test 2>&1 | tail -5
If no build system is detected, note "No build system detected — skipped automated checks".
Important: If any check fails, note the failure — do NOT try to fix it. The handoff should report the current state honestly.
Write to HANDOFF_PATH. Use this format:
# Handoff
## Scope
- Item: {item reference — e.g. "#24 — Add authentication" or "Refactor IPC layer"}
- Goal: {1-sentence summary of what was accomplished}
## What Changed
{bullet list of logical changes — describe WHAT each change does, not just file names}
## Files Changed
{bullet list of every file modified/created, from git diff --stat}
## Risk Areas
{bullet list of things that could break, have edge cases, or need careful review}
## Commands Run
{bullet list of every command run and its pass/fail status}
## Known Gaps
{bullet list of things NOT done — e.g. "no tests written", "error handling incomplete", "hardcoded values"}
## Suggested Focus For Reviewers
{bullet list of what reviewers should look at most carefully — prioritize by risk}Show:
- The handoff file path
- A brief summary of what was captured
- Suggest next step: run
/create-reviewto generate a review prompt for any AI reviewer
- Do NOT modify any source code — this skill is read-only except for the handoff file
- Be honest about failures — if build/typecheck fail, report that clearly
- Keep descriptions concrete and actionable — avoid vague statements like "various improvements"
- List ALL files from
git diff --stat, don't summarize or skip any - If there are no commits ahead of base, warn the user that there's nothing to hand off