Skip to content
Agentmart
Submit a tool

handoff

Writes what a session that was not here needs: the state itself, never a reading list.

Skill by Adrian333Dev

IndexedMIT★ 36
Write a review

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/adrian333dev-handoff

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Writes what a session that was not here needs: the state itself, never a reading list.

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md and code. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/handoff

What's inside

Skill name
handoff
Description
Writes what a session that was not here needs: the state itself, never a reading list.
License
MIT
Instructions
158 lines in SKILL.md · view on GitHub

Files (3)

  • SKILL-before-writing-pass.md
  • SKILL.md
  • capture-pass.md

SKILL.md (first lines)

# Handoff

Write what a session that was not here needs to carry on.

It knows the repo. It knows nothing about this conversation.

**One test decides every line: would that session get this wrong without it?** Never whether it mattered here.

**First, run the sweep in `## Capture`.**

## 1. Pick where it goes

Decide this first.

- **Working a ticket** → `## State` inside that ticket's `ticket.md`.
- **Work with no ticket** → a new ticket, `flow new "…" --type <what the work is> --body -`, then move it to the status the work has reached: `flow build <id>` for code in progress, `flow groundwork <id>` while decisions are still open. The body: one paragraph on the job and why, then `## State`.
- **Handing a job to a session that reports back** → a new ticket, `flow new "…" --body -`. A child of the ticket that dispatched it, where one exists.
- **A subagent starting right now** → the prompt, never a file.

**Inside a ticket the state is a living section.** Write to it as the work moves, every time something becomes true that no other file records: after every thing you learned or were told, never after every edit. **A sentence from the user counts**: a constraint, a correction, a leaning they have not locked.

**A child ticket's body and a subagent's prompt are written once**, read once, and never updated in place.

## 2. Gather only what this job needs

Nothing here runs by default. Pick what the next session will trip over.

- **Mid-build** → name the files this session changed, and what changed in each. `git status --short` gets you that in a repo committed regularly; on a tree nobody has committed for weeks it returns everything and separates nothing.
- **Other tickets in flight** → `flow next`, for what else is moving.
- **Handing a job over** → whatever waits for the receiving session: a server already listening, a half-finished install, a folder that is read-only.
- **Groundwork, or a prototype question** → nothing.

## 3. Write it

**The destination decides the sections.** Drop any section nothing fills.

### The `open` block

Every ticket's own skill, `/exp-47`, runs `flow get --files`, which finds this block and loads every file it names **before the session's first turn**.

Write it fenced, inside `## State`:

```open
plan.md
src/parser.js:40-120   # where step 4 stopped
```

- **One path per line**, with a `#` note saying what the reader gets from it.
- **Take a line range where you know one**: `path:40-120`, inclusive.
- **Write the path that reads naturally.** A ticket's paths resolve beside the ticket first, then from the repo root, so `plan.md` and `src/parser.js` both land.
- **Name what the first action opens, and nothing else.** No minimum: a ticket that carries its own context writes no block.
- **Nothing is truncated**: a folder loads whole.
- **Verify every path.**

A subagent gets no block.

### In a ticket: `## State`

Never restate what 4 other files carry:

- **`plan.md`** holds the steps and which ones landed.
- **`groundwork/map.md`** holds every decision and its reasoning.
- **The ticket body** holds why the work exists; `## Done when` holds what finishes it.
- **The research report** holds the findings, wherever `/flow:research` filed it.

What is left is what nobody wrote down, under 4 labels:

- **Now**: what is half-done, broken, half-applied, or in flight this second.
- **Found**: what cost real effort to learn and lives in no file: the version that turned out to matter, the exact payload, the trap already hit.
- **Open**: decisions half-made, threads nobody closed, the option you were leaning toward and why.
- **Touched**: files this session changed that no step in `plan.md` names.

**`Now` and `Touched` are rewritten whole every time.**

**`Found` and `Open` are added to, never regenerated.** A line goes in the moment you learn it, and comes out when it stops being true: a decision closes, or a fact moves to `docs/context/`.

**Most of the time 2 fill.** A build fills *Now* and *Found*. Groundwork fills *Now* and *Open*. **A bug fills all 4 and runs long.**

A fat state section on a build ticket means the plan carries too little.

### Handing a job over: a child ticket's body

The body carries all of it:

- **The job**: what's being done and why, current tense.
- **The state**: done, in flight, broken, half-applied.
- **What is already set up**: the install that ran, the server still listening, the read-only folder, the command that works from one directory only.
- **What binds it**: decisions locked, corrections given, approaches ruled out and why. Weight what was said out loud and written nowhere. Dead ends count as conclusions.
- **What is still open**: threads nobody resolved, the options weighed, the one you were leaning toward and why.
- **What was found**: versions, endpoints, exact payloads, traps already hit. Write out anything that cost real effort, source or no source.
- **The first action**: concrete enough to start on. Name the skill when one applies.

Plus 4 where someone waits on an answer:

- **What turns on the answer**: the decision waiting on it, and what changes if it comes back no.
- **What done looks like**: written before the work starts, as the ticket's `## Done when`.
- **What to produce**: the artifact and its shape: the questions it answers, in order.
- **What to say back**: the 2 or 3 sentences this session needs to carry on.

**A bug with no failing check built yet** → its `## Done when` is the observable: the failure as seen, and what not seeing it would look like.

**A subagent starting now gets the same content in its prompt, plus a stopping point**: "stop after these 3 sources and write the file". Never a time limit.

### How much to write

**Write out what the next session must know. A path is for a file it must open.**

Never name 2 kinds of file:

- **A file whose content you already wrote out here.**
- **A file the session must not act on.** Where a path exists only to stop the reader doing something, write that sentence and drop the path.

## 4. Land it

**`## State` goes at the bottom of `ticket.md`**, plus a line in `## References` for anything this session read that the build will need. While `map.md` is still open its own `## References` holds those, and Phase 4 splits them into the tickets it cuts.

Then `flow handoff <id>`, which adds this session to the ticket's `history.md`.

Everything else has an owner: `flow` the frontmatter, `/flow:execute` `plan.md`, `/flow:debug` and `/flow:prototype` `reports/`, and whoever created the ticket the body paragraph. `## Done when` moves only when a skill re-decides what the ticket is.

From Adrian333Dev/flow, MIT.

More from Adrian333Dev/flow

Signals

Stars
36
Forks
4
Open issues
0
Last commit (this folder)
Oct 16, 2026 (13 days ago)

From GitHub (fetched Oct 24, 2026).

Details

License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from Adrian333Dev

Cite this page

handoff skill. Agent Mart. https://agentmart.dev/skills/adrian333dev-handoff (last updated 2026-10-24)