Handoff — verify you understood Claude's code
SkillAI & modelsUse when a feature or code change made by Claude is complete and the developer wants to confirm they actually understood it before shipping. Triggers on "handoff", "quiz me", "comprehension check", "did I understand this", "verify I read the code", "test my understanding", or after finishing a feature when the developer wants to take ownership of AI-written code. Also triggers on requests for an interactive or clickable quiz ("interactive mode", "let me answer with the mouse", "mode interactif", "je réponds à la souris"). Quizzes the developer on WHERE the logic lives (file/function) and WHY decisions were made (trade-offs, behavior, debugging), with the number of questions scaled to the size of the change. Multiple-choice questions are clickable by default (asked through `AskUserQuestion`) and fall back to typed answers. Points to file:line on wrong answers, allows one retry, then reveals the answer, and ends with a score plus the weak areas to re-read. Conducts the quiz in the developer's language.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Handoff — verify you understood Claude's code skill
What this skill tells your AI
The instructions your AI receives, as published by arimet/handoff in skills/handoff/SKILL.md and read by ahel’s review.
When Claude builds a feature, it is easy to merge the result without truly
reading or understanding it. handoff turns passive review into an active
check: it interviews the developer to confirm they read the code (where the
logic lives) and understood it (why decisions were made, how it behaves),
then reports a score and the spots to revisit.
This skill conducts an interactive quiz. Ask questions one at a time and wait for an answer before continuing. Conduct the entire quiz in the developer's language (match the language they are writing in).
Step 1 — Gather the material (hybrid source)
Build the quiz from two complementary sources:
-
Conversation context — what was built this session: the files touched, the key decisions and trade-offs, what was deliberately NOT done, and what could plausibly break. This is the source for the "why".
-
Git diff (when available) — to objectively anchor "where" and check that nothing important is missed. Run:
git rev-parse --git-dirto confirm a repo exists.git diff --statthengit diff(covers unstaged + staged) to enumerate changed files and lines. Use realfile:linelocations from this diff.
If there is no git repo, degrade gracefully and rely on conversation context alone — still produce a useful quiz.
Step 2 — Calibrate the number of questions
Scale to the size of the change (use the diff stat, or your best estimate from context if there is no git):
| Change size | Questions |
|---|---|
| Small (< ~50 lines, or 1–2 files) | 3 |
| Medium | 5 |
| Large (> ~300 lines, or ≥ 5 files) | 8–10 |
Step 3 — Generate a mixed question set
Cover both reading and understanding. Mix these types:
- Where (multiple choice). "Which file/function contains X?" Provide plausible distractors drawn from other real files in the change.
- Why (open-ended). "Why was approach X chosen over Y?", "What trade-off does this make?", "What would have broken if we hadn't done Z?"
- Behavior (multiple choice or open). "If input X arrives, what happens?", "How would you debug it if X fails?"
Favor the parts of the change that matter most (core logic, tricky edge cases, non-obvious decisions) over trivial boilerplate.
Write every multiple-choice question with 2 to 4 options so it can be answered by clicking (see Step 4).
Step 4 — Ask one question at a time (interactive by default)
Present a single question, wait for the answer, then evaluate it before moving on. Never dump the whole quiz at once.
Interactive mode — clickable answers
Multiple-choice questions are asked through the AskUserQuestion tool so
the developer answers with the mouse instead of typing. Use it by default
whenever the tool is available.
One tool call = one question (never batch several questions into a single call — that would break the one-at-a-time rule):
question— the full question text. Include thefile:linehint here on a retry, never the answer.header— a short topic label, ≤ 12 characters (e.g.Où ?,Hook,Retry flow).options— 2 to 4 entries, each with a shortlabel(1–5 words) and adescriptiongiving the concrete detail (a real path, a behavior).multiSelect: true— only for genuine "select all that apply" questions.
Quiz-specific rules for the options:
- Exactly one option is correct (unless
multiSelect), and its position is varied from question to question — never always first or always last. - Never mark the correct answer. No
(Recommended)suffix, no hedging wording in the distractors. Keep all labels and descriptions the same shape and roughly the same length, so the answer cannot be spotted by formatting. - Distractors must be real — other files, functions or behaviors that actually exist in the change. Invented paths make the question trivial.
- The tool always offers an "Other" escape where the developer can type a free-form answer; grade it on its content like any typed answer.
Open-ended "why" questions stay typed: explaining a trade-off in your own words is the point, and picking a rationale from a list would turn recall into recognition. Ask them as plain text and wait for the reply.
Falling back to typed answers
Use plain text (numbered options the developer answers with a/b/c) when:
- the
AskUserQuestiontool is not available in the current environment, or - the developer asks for it — "no clicking", "text only", "pas de clic",
/handoff --text.
/handoff --interactive (or "quiz me with clickable answers") forces the
clickable mode back on. The quiz content, scoring and retry flow are identical
in both modes — only the input method changes.
Step 5 — Evaluate each answer
- Correct → confirm briefly and move to the next question.
- Wrong or incomplete → point to the relevant
file:lineas a hint without revealing the answer, and invite a second attempt.- In interactive mode, the retry is a second
AskUserQuestioncall for the same question: keep the same options in the same order, and put thefile:linehint in thequestiontext. Do not remove the option the developer just picked — eliminating it would give the answer away. - If the second attempt is still wrong → reveal the correct answer with a short explanation, then continue.
- In interactive mode, the retry is a second
Track the result of each question (correct / correct-on-retry / missed) to build the final score.
Step 6 — Final score and weak areas
End with:
- A score, e.g.
Score: 4/6. - The weak areas: the topics missed, each with a
file:linepointer to re-read. Keep the tone encouraging, not punitive — the goal is to know what to revisit, not to grade harshly.
Optional: automatic suggestion (Stop hook)
This skill ships an optional, non-blocking Stop hook that suggests running
/handoff when a session produced a large diff. It never forces the quiz. See
references/install.md for setup and thresholds.
Signals
- GitHub stars
- 27
- Last commit
- Aug 2026
- Hacker News mentions
- 20
Advanced
- Catalog kind
- skill
- Gateway key
handoff-arimet- Source
- github.com/arimet/handoff