| name | handoff |
| description | Generate a copy-ready handoff prompt for transferring work context to a new session. TRIGGER when: user asks to hand off work, create a handoff prompt, transfer context, wrap up session, prepare for next session (e.g., "handoff ํด์ค", "๋ค์ ์ธ์
์ผ๋ก ๋๊ฒจ์ค", "์์
์ด๊ดํด์ค", "handoff prompt ๋ง๋ค์ด์ค"). DO NOT TRIGGER when: user is committing, creating PRs, reviewing code, or performing other git operations without handoff intent. |
| version | 1.1.0 |
| allowed-tools | Bash(git *), Read, Glob, Grep |
The One Principle
Write only what the next session cannot recover by reading the repo.
The next session is a capable agent with full access to the code, the docs, the git history, and the GitHub API. It will explore on its own. Anything it can find by reading a file is noise in the handoff โ it costs tokens, and worse, a stale restatement of a file competes with the file itself.
What it cannot recover by reading:
- Decisions and their reasons โ the code shows what was chosen, never why, nor what was rejected.
- Dead ends โ an approach that was tried and abandoned leaves no trace in the repo, so the next session will happily retry it.
- Constraints stated by the user โ preferences, scope boundaries, "don't touch X".
- The next action โ what to do first, which the repo cannot tell it.
That is the entire content of a handoff. Everything else is a session recap, and a session recap is not a handoff.
Test every line before writing it: "Could the next session learn this by opening a file?" If yes, delete it and reference the path instead.
Parse Arguments
| Argument | Type | Description |
|---|
topic | Optional string | Focus filter โ scope the handoff to this topic only (e.g., /handoff auth ๋ฆฌํฉํ ๋ง) |
-y | Optional flag | Skip the draft step and output the handoff directly |
If $ARGUMENTS contains -y, treat it as the skip flag; the remaining text is the topic filter. If $ARGUMENTS is empty, scope the handoff to whatever the session was actually working on.
Gather Context
1. The conversation. This is the only real source. Identify, from the next session's perspective:
- What it should do first
- What was decided, and why
- What was tried and rejected
- What constraints it must respect
If a topic filter was given, drop everything outside it.
2. Git โ branch name only.
git branch --show-current
git status --short
From this, take exactly two facts: the branch name, and whether uncommitted changes exist. Do NOT run git log, git diff --stat, or git stash list, and do NOT list changed files โ the next session runs git status itself in one command. The handoff says that there is uncommitted work, never what it is.
3. Referenced paths. If the session created or worked against a spec, plan, design doc, or issue, note its path or number. Verify the path exists before citing it.
- Reference by path only. Never quote, summarize, or paraphrase the content of a file into the handoff.
- Do NOT go hunting for documents the session never touched. No speculative
Glob over spec/plan directories, no scanning for artifacts that "might be relevant". If the conversation did not mention it, it does not belong in the handoff.
The Handoff Is an Order, Not a Briefing
The output is a prompt the user pastes to put the next agent to work immediately. It is not a status report the user then has to act on by writing a second message. If the user has to follow the handoff with "so go do it," the handoff failed.
Two consequences for how you write it:
Write it as the user speaking to the agent. Use the user's own conversational register, the way they actually talk in this session โ plain spoken Korean (~ํด์ค, ~๋ถํฐ ์์ํ๋ฉด ๋ผ, ~๋ ์ด๋ฏธ ํด๋จ์ด), not spec prose (~ํ ๊ฒ, ~๋ฅผ ์ํํ๋ค). You are drafting the message the user would have typed themselves, so it should sound like them, not like a requirements document.
Every handoff ends in an action. Even when the direction is genuinely undecided, the directive still commands: "๋จผ์ X ํ์ด๋ณด๊ณ ์ด๋ป๊ฒ ๊ฐ์ง ์ ๋ฆฌํด์ ์๋ ค์ค" โ investigate and report is an action. What is never acceptable is a directive-free summary that leaves the agent waiting for instructions.
Build the Handoff
Three parts, in order. Nothing else.
Directive โ 1~3 lines opening the prompt, in the user's spoken voice. Name the branch, say what to do first, and make it concrete enough to start on without asking a follow-up question. Mention uncommitted changes here if there are any.
๋งฅ๋ฝ โ 0~4 bullets. Only decisions, reasons, dead ends, and constraints โ still in the user's voice ("๋ฏธ๋ค์จ์ด๋ก ํ๋ ค๋ค ์ ์์ด. SSR์์ ์ฟ ํค๋ฅผ ๋ชป ์ฝ๋๋ผ"). If the session produced nothing that survives the One Principle, omit this section entirely. An empty ๋งฅ๋ฝ is a correct outcome, not a failure.
์ฐธ๊ณ โ paths, PR numbers, issue numbers. Only ones the next session will actually open to do its first action. Omit if there are none.
Hard limits: 15 lines total, 4 bullets in ๋งฅ๋ฝ. If it does not fit, the extra content was recap.
Skills and slash commands
Do NOT mention skills, slash commands, or plugins in the handoff by default โ not /commit, not /pr, not third-party plugin commands. The next session picks its own tools, and it may not be running in the same agent or with the same plugins installed.
The single exception: the user explicitly asks for a skill in the handoff. In that case, pick only from the skills actually available in the current session, and weave the name into the directive so a copy-paste triggers it.
Example
feat/auth-refactor ๋ธ๋์น์์ ์ธ์
๋ง๋ฃ ์ฒ๋ฆฌ ์ด์ด์ ํด์ค.
์ปค๋ฐ ์ ํ ๋ณ๊ฒฝ์ด ๋จ์ ์์ผ๋ git status๋ถํฐ ํ์ธํ๊ณ ์์ํ๋ฉด ๋ผ.
**๋งฅ๋ฝ**
- ํ ํฐ ๊ฐฑ์ ์ ๋ฏธ๋ค์จ์ด ๋ง๊ณ ํด๋ผ์ด์ธํธ ์ธํฐ์
ํฐ์์ ์ฒ๋ฆฌํ๊ธฐ๋ก ํ์ด. ๋ฏธ๋ค์จ์ด๋ก ํ๋ ค๋ค ์ ์๋๋ฐ, SSR ๊ฒฝ๋ก์์ ์ฟ ํค๋ฅผ ๋ชป ์ฝ๋๋ผ
- ๋ฆฌํ๋ ์ ํ ํฐ ํ์ ์ ์ด๋ฒ ์ค์ฝํ์์ ๋นผ๊ธฐ๋ก ํ์ผ๋ ๊ฑด๋๋ฆฌ์ง ๋ง
**์ฐธ๊ณ **
- docs/auth-design.md
- #128
Read that as the user's own message: it tells the agent to start, in the voice the user actually uses. The ๋งฅ๋ฝ bullets carry things no file states โ a rejected approach with the reason it failed, and a scope boundary. The ์ฐธ๊ณ lines are paths, not summaries.
Notice what is absent: no file list, no commit log, no recap of what this session accomplished, no skill names, and no "์ํฉ์ ํ์
ํ๋ผ"-style preamble that would leave the agent idling instead of working.
Output
Show the handoff wrapped in a fenced ```markdown block so /copy can pick it up as a single selectable item. Put nothing above it except, at most, one line noting a referenced artifact if one was found.
Do not append a confirmation question โ the block speaks for itself, and the user will ask if they want changes. When -y is passed, output with no preamble at all.
Constraints:
- Create no files. The terminal output IS the deliverable.
- Do not execute the next action. Only describe it.
- Do not touch git state. This skill is strictly read-only.