/session-handoff
/session-handoff kanban board
End an implementation session that started from a GitHub issue — writes the handoff, records progress against the issue, moves the card.
- invocation model + user
- prereqs gh, authenticated with the project OAuth scope:…
- tested used daily
- suggested model · effort sonnet · medium
Install
Install just this, from a clone of the repo. Anything it needs comes with it.
./scripts/install-skills.sh --skill session-handoff # bash, Git Bash, macOS, Linux
.\scripts\install-skills.ps1 -Skill session-handoff # Windows PowerShell
Needs: handoff-auto, kanban-setup, next (installed with it).
What it does
Ends an implementation session tied to a GitHub issue: writes the handoff document (via handoff-auto), adds a ## Board status section, and moves the issue's card to reflect reality.
When to use
- Wrapping up a session that started from an issue / board card.
- The
implementeragent calls it to finish.
How to invoke
/session-handoff <issue number or URL>. Claude can also run it itself.
How it works
Calls
handoff-autowith the issue as argument; takes the path it prints.Appends
## Board statusto that doc: issues/cards touched, complete / partial / blocked, deviations from the issue, new ideas found mid-session.Moves the card (board lookup per
next/BOARD.md).- Projects v2 via
gh project item-editwith IDs looked up fromgh project field-list/item-list(GraphQL fallback when the list is stale). - Label fallback creates
status:in-reviewfirst if missing, then swapsstatus:in-progress→status:in-reviewwhen complete, otherwise leaves it and comments if blocked. - A Projects board with no In Review option: the card stays In Progress, the handoff says so, and it points at
IN-REVIEW-OPTION.md. - Run by a guarded agent (
implementer/manager, read-onlygh), it skips the move and comment and lists them in the handoff for the caller.
- Projects v2 via
Prints the handoff file path.
- Follows any handoff filename/section rules in the repo's
CLAUDE.md/AGENTS.md. - Commits the handoff only per
handoff-auto/TRACKING.md: never on a fork, and in commit mode only when the current branch is the default. - On a task branch it stays uncommitted on disk (
update-progresscommits it on the default branch), so it can't leak into the task's PR.
Flow
Card status flow: todo → in-progress → in-review → done.
- todo: set explicitly by
gh project item-editwhen an issue is added —item-addalone leaves Status empty. - in-progress: set by
pairormeta-orchestratorwhen they create the branch (their guarded agents can only read withgh). - in-review: set by
session-handoff. - done: set by
update-progress, once verified and merged; unmerged stays in-review. - Label-mode
status:*labels are created on first use (gh label create --color <hex> --force, colors innext/BOARD.md), not assumed to exist.
Design principles
- Record reality, not hope. Only a complete session moves the card to In Review. Complete means the issue's done-when is met: deviations are listed, and the done-when is not rewritten to fit. Partial or blocked work stays In Progress, and a blocked one gets an issue comment saying why.
- Wrap, don't duplicate. The document itself comes from
handoff-auto; this skill only adds board status and the card move. - Path last. The handoff path is the final line, so the
implementeragent's caller can read it.
Shared context for these principles: Matt Pocock's video.
Use cases
- Ending a manual session that started from
/nextand an issue. - The
implementeragent's last step, so a manager or orchestrator gets a handoff whose path it can read. - Stopping partway through a task: the board shows it is still In Progress, and the handoff says what is left.
Tips
- Pass the issue number (or URL) so the handoff and the card move target the right issue.
- Next, open a fresh session and run
update-progresswith the printed path; that is what verifies and closes the issue. - Deviations listed under
## Board statusare whatupdate-progresslater sends toconsult-plan, so name them plainly in the session. - A board error doesn't block: the handoff is still written and the error is noted.
Example
handoff-autowritesskilleddocs/handoffs/2026-10-15-csv-export.mdand prints its path.- Appended to it:
## Board status
- #31 Add CSV export: partial. Export works; tests for files over 1 GB missing.
- Deviation: used a streaming writer instead of building the file in memory.
- New idea: an `--gzip` option (not in the issue).
- Partial, so the card stays In Progress (no comment, since it isn't blocked).
- Prints the handoff's absolute path as the last line.
Related
- Next step:
update-progressin a fresh session, with the printed path. - Wraps
handoff-auto; preloaded by theimplementeragent.
Prereqs
gh, authenticated with theprojectOAuth scope: rungh auth refresh -s project -s read:projectonce (seekanban/README.md).handoff-autoinstalled.
Sample workflows
- Close one session, start the next
session-handoff → you → update-progress → next → you
Install just this one:./scripts/install-skills.sh --workflow close-the-loopor.\scripts\install-skills.ps1 -Workflow close-the-loop - Wrap up a long session
smartzone → divide → you → session-handoff → you
Install just this one:./scripts/install-skills.sh --workflow wrap-up-long-sessionor.\scripts\install-skills.ps1 -Workflow wrap-up-long-session
Use cases & tips from the community