Whetstone

Throughline

✅ Open source (MIT) · ✅ Model-agnostic — runs in any agent

Keep the thread — within a session, and across them.

A small, agent-agnostic skill that keeps work on-thread — within a single session, and across the seam between sessions or agents. (Task Track + Handoff.)

It packages two linked habits:

The point that ties them together: the ⭐️ MAIN tag is the shared goal anchor. Task Track holds it within a run; the handoff’s ⭐️ Goal carries it across runs. One sentence: don’t lose the thread — within a session, or between them.

New in 0.3.0 — the rules live in one data file (rules/task-rules.json) that the checker reads and the flow is drawn from; the handoff has nine sections found by name, and a skeleton every project can share. See the CHANGELOG.

New in 0.2.0 — disciplines extracted from another year of daily use:

How the two halves connect

Logic flow — how Task Track and Handoff share one goal anchor

A single, self-contained SVG — opens in any browser or Markdown viewer, nothing to install. For the rules themselves there is an interactive rule map (open the HTML in a browser): every rule in rules/task-rules.json as a card under the moment it first fires — hover a card for its why, its pass condition and what checks it. The map is generated from the rule file, so it changes when the rules do; the picture above is the idea, and stays. Both are drawn with Arcgram — the project Throughline’s disciplines were lived on before they were extracted here.

The thread runs: a session’s ⭐️ MAIN is written into the handoff’s ⭐️ Goal, picked up by the next session, re-derived against ground truth, and carried forward as the next ⭐️ MAIN — which loops back to begin the cycle again.

What’s in here

Path What it is
skills/throughline/SKILL.md The skill — the two habits and how they connect. Works as a skill or a paste-in prompt.
.claude-plugin/plugin.json Plugin manifest (so it installs as a Claude Code / Cowork plugin).
commands/handoff.md The write operation: compact a session into a handoff doc.
commands/resume.md The read operation: pick up a handoff and re-derive before trusting it.
templates/handoff.template.md The single source of truth for a handoff’s structure.
references/task-track.md The within-session discipline, in depth.
references/handoff.md The across-session protocol (the seven anti-drift mechanisms + the multi-agent rules), in depth.
examples/example-handoff.md A filled-in handoff to copy the shape from.
rules/task-rules.json Every rule as data — the one source the checker reads and the flow is drawn from.
tools/handoff.py Optional, zero-dependency helper: new (scaffold), check (validate against the rules), brief.
tools/test_handoff.py Its tests: python3 tools/test_handoff.py.
assets/logic-flow.svg The diagram above — how the two halves share one goal anchor (an Arcgram flow, exported as SVG).
assets/throughline-flow.html The rule map, interactive: every rule under the moment it first fires, drawn from the rule file (hover a card for its why, pass condition and what checks it).

Use it

As a prompt (any agent — Claude, OpenAI, Gemini, Cursor, Cline, a local model). Paste the relevant file into your agent. Nothing assumes a particular platform; every capability degrades gracefully (no file write → emit inline; no live access → re-derive from the artifacts you have; no code execution → skip the helper).

As a skill / slash command (Claude Code, Cursor, etc.). Drop the folder where your tool reads skills/commands. Then handoff to wrap up and resume to pick up.

The optional helper (only where you can run code) does the mechanizable half — it never summarizes:

python3 tools/handoff.py new                 # scaffold a blank handoff from the template
python3 tools/handoff.py check HANDOFF.md    # validate: sections, one ⭐️ MAIN, re-derive note, secret sweep

It reads the required sections from the template at runtime, so the prompt and the validator can’t drift apart — the skill dogfoods its own single-source-of-truth rule.

Why it’s shaped this way

Long or multi-agent work fails two ways: reasoning drifts off the goal within a session, and the thread gets dropped between sessions. The same goal anchor closes both gaps. The handoff is deliberately light — a plain-text artifact, capability-agnostic, with a write side and a read side — because the next agent might be anyone, anywhere, and a heavy protocol that assumes your platform is a protocol nobody else can pick up.

License

MIT — see LICENSE.