Skip to content
Development
Skill

/handover

Use when handing finished work over to code review — writing a PR description or packaging a change for review by a human, an agent, or both.

From plugin
agent-toolkit
8030 skills

Claude Code

$ npx -y skills add eai-org/agent-toolkit --skill handover --agent claude-code

SKILL.md

handover.SKILL.md
name: handover
description: Use when handing finished work over to code review — writing a PR description or packaging a change for review by a human, an agent, or both.
license: MIT
metadata:
  version: "0.11"

Handover

Package a finished change so its reviewers never reconstruct intent from the diff. Write for a reviewer holding the diff and nothing else — no planning docs, no session, no knowledge that either exists.

Resolve the task

The input is any partial reference — ticket id, slug, a planning artifact's path — or nothing, meaning the session's task; in a fresh session, infer it from branch name and recent commits. Resolve it to the task's **planning home**: its `<id>-<slug>/` directory (no ticket → no id) in the project's planning directory, or its flat `<id>-<slug>.*` files in a shared family directory. One clear match → proceed, stating the home and artifacts found. Inferred, or several candidates (`-vN`, …) → confirm first. An explicit reference matching nothing local → stop and ask; never guess.

Gather

Read these, skipping what doesn't exist:

1. **Task artifacts** — every `<id>-<slug>*.md` in the planning home: ticket, requirements, plan, decisions log, prior review and handover rounds, whatever else matches. 2. **Related tickets** — one hop only: parent (climbing higher only past thin containers — a parent that is only a title and a child list), direct predecessors/successors, explicit relations, family-directory siblings; never expand their own relations. Local `.TICKET.md`s first; fetch from the tracker only when a relation has no local file and looks load-bearing for a why — in doubt whether to fetch, ask. 3. **The session**, when it produced the change: decisions, pivots, constraints. 4. **The diff** from the merge base with the target to `HEAD`, plus commit subjects. Target: the one a prior review or handover round records, else the open PR's base, else the auto-detected default branch — of the `upstream` remote when one exists, else of `origin`, via `git ls-remote --symref <remote> HEAD`; that failing (e.g. offline), the sole existing candidate among `main`, `master`, `develop`/`development`, preferring `upstream`'s remote-tracking ref, then `origin`'s, then the local branch; none or ambiguous → ask. State it and `git fetch` its remote (local-only target → nothing to fetch; a failed fetch → ask, never diff stale refs). No merge base → `git fetch --unshallow` and retry, else ask — never diff against the target itself. An empty diff from the merge base → probably a wrong target: say so and ask, never match planned items against it. Before diffing, name uncommitted changes, untracked included, and ask which belong: the author commits those first; the rest stays out. 5. **PR conventions** — the repo's PR template, wherever the forge looks for one (e.g. root, `.github/`, `docs/`; several → ask the author which), and any project skill for PR descriptions.

An earlier artifact — a ticket review, a prior round — counts only where nothing later settled the point.

Each source once, no deeper than the artifact needs: skim the diff whole; deep-read only the files you will name in the *Review guide*; for a visual, read just the function, component or directory it draws; never rebuild history commit by commit — which commit changed what is the diff's job, not yours.

Then match the plan's steps and acceptance criteria against the diff both ways — planned but absent, present but unplanned. Done when every source is read or confirmed absent and every planned item is matched against a non-empty diff.

Source every claim

State a "why", or any other claim about the change, only where a source gives it. Silence is not a source: never infer a fact from what the diff and docs leave unsaid ("untested so far", "nobody calls this"). A deviation nothing explains is asked of the author once; unanswered or unaskable, it ships flagged in plain words ("nothing records why — worth confirming"), since it may be an unintentional gap rather than a decision. Sourcing is your gate, not the reviewer's reading: it decides what you may write, and never appears in the text. When not sure, always ask. Never guess.

The artifact

`<id>-<slug>.HANDOVER.md` in the planning home, same base as the task's other artifacts; already taken → `<id>-<slug>.HANDOVER-2.md`, `-3`, … — never overwrite. No planning home → `<id>-<slug>/` in the project's planning directory (none evident → `.agents/plans/`), id and slug derived from branch name and changes, stating the choice. The file's first line is the PR title in the repo's commit convention (`# <title>`); the body follows, paste-ready as the PR description, and stands alone:

  • **Mention only what the reviewer can open** — a tracker URL, or a file you verified is committed

on the branch. Everything else — planning docs, decisions log, session, commit hashes — is neither linked nor named: write what it says ("this was meant to …"), never where it says it. A colleague's clarification is stated as what it settled, grounded in something openable ("the goal is X, which <ticket URL> needs"); naming the colleague is the last resort.

  • **Related tickets go unmentioned** unless a why depends on one ("built this way to prepare

for <X>") — then cite its tracker URL.

  • **Under a screen**, ~400 words; the caps below are limits, not targets.
  • **A visual where the diff hides the change's shape** — a flow across several files, a moved or

split layout, a reordered call chain — one per point, never a second for the same one. The smallest shape that makes the point, from [visuals.md](visuals.md), placed right under the line it supports; it takes screen, not words. A visual is a claim: every node and `+`/`-` line is in the diff or a source.

  • **Never hard-wrap**: forges (e.g. GitHub) render newlines in PR bodies as line breaks — one

line per paragraph or bullet.

  • **Plain reviewer-facing wording
Read more
@eai-org
Ships withagent-toolkit

A collection of generic agentic tools for common engineering tasks, designed to work with any AI agent on any kind of software project.

Stars on GitHub

Momentum

stars in total
80
Star history of eai-org/agent-toolkit on GitHub, a chart by star-history.com

Other skills on agent-toolkit.

agentify-project

agentify-project

Make a project agent-ready by converging it toward a canonical agent-neutral structure. Re-runnable, and doubles as an audit.

attach-to-ticket

attach-to-ticket

Attach pasted images, files or URLs to a fetched ticket, saved beside its ticket file and referenced from it, or fill an…

compact-docs-writer

compact-docs-writer

Draft, rewrite, or refine a doc for maximum token economy without losing any rule or intent. Use for docs kept in version control…

context-checkup

context-checkup

Audit what auto-loads into an agent session's context window and suggest lean, reversible fixes to cut startup tokens.

More skills from other plugins.

brainstorming
Auto-invoked

brainstorming

You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…

@obra@obraInstall Skill
ask-matt

ask-matt

Ask which skill or flow fits your situation. A router over the skills in this repo.

skills11d309k
@mattpocock@mattpocockInstall Skill
accessibility
Auto-invoked

accessibility

Design, implement, and audit accessible UI to WCAG 2.2 Level AA across Web, iOS, and Android — semantic ARIA roles and labels,…

ecc13d293k
@affaan-m@affaan-mInstall Skill
compiler-commit

compiler-commit

Use when you want to verify compiler changes and commit with the correct convention. Runs tests, lint, and format, then commits…

react2d252k
@facebook@facebookInstall Skill

Questions about handover.

Which coding agents can use handover?
handover installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.