throughline — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited throughline (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Keep the thread — Task Track within a session, Handoff across them.
For any AI agent reading this file. The frontmatter uses Claude's skill format; the body is plain markdown. It works the same for Claude, OpenAI, Gemini, Cursor, Cline, Aider, or a local model — paste the body in as a prompt if your platform has no skill system. Assume nothing about your host's capabilities; everything here degrades gracefully (see "Capability-agnostic by design" below).
Long or multi-agent work fails in two predictable ways, and this skill is two habits that each kill one of them:
surfaces another, which pulls you somewhere adjacent to what you started on. Every step is locally reasonable; together they bend the trajectory. Task Track makes that drift visible by keeping one ⭐️ MAIN goal anchor in front of you.
re-derives what was already known, or trusts a stale summary. Handoff carries the thread forward as a plain-text artifact any agent can pick up.
The correlation — the load-bearing point. The ⭐️ MAIN tag is the shared goal anchor. Task Track holds it within a run; Handoff carries it (plus state) across runs. One sentence: don't lose the thread — within a session or between them. The same anti-drift purpose runs through both, which is why they ship together.
short, self-contained task that finishes in one pass, skip it — the overhead isn't worth it.)
Keep a task list where exactly one task is the ⭐️ MAIN — the goal anchor — and every other task carries a leading emoji marking where it came from, so drift reads at a glance:
| Tag | Meaning |
|---|---|
| ⭐️ MAIN | The session's primary task / goal anchor. Exactly one at a time. Re-read it before any load-bearing step: "am I still solving the MAIN, or something it slid into?" |
| 🌶️ Critical | A critical bug or big-impact task — an origin by impact; whether it serves the MAIN is marked by 🔸. |
| 🍏 Temp this session | Surfaced mid-session, not in any plan. A transient. If it balloons past the MAIN's scope → stop and re-confirm with the human, don't let it silently become the main line. |
| 🍋 Logged + recurred / pulled-in | A previously-logged task that came back, OR a logged task not planned for this session but worth doing now. |
| 🔸 Subtask | A part of the current MAIN, worked one by one; the MAIN is LANDED only when every 🔸 is done. Icons stack: membership, origin, then an optional kind icon (🔍 🐛 📋 🤝 🗂 ⏳ 📖) — 🔸🍋🐛. |
Put the emoji in the task's title — and make sure the title is the channel your task UI actually renders. Some UIs carry a second display field that supersedes the title while a task is in progress (a "currently doing…" spinner text); a title-only marker goes invisible exactly during the phase where drift happens. When a UI offers such an extra display field, omit it rather than mirror the marker into it: an omitted field falls back to the title, which this rule already governs, while a mirrored field is a second copy you must keep in sync by hand. (Known instance, 2026-09: the optional activeForm field in Claude-family task tools — leave it empty.) Badges are fine as extras, but never only the badge.
The discipline, not the decoration: the value isn't the emoji, it's that the trajectory becomes legible. At any moment you can scan the list and see whether the work is still on the main line or chasing transients. When a 🍏 keeps growing, that's the signal to stop and check it against the ⭐️ MAIN. A 🍏 that proves valuable and gets logged is promoted to 🍋 — visible scope management instead of silent absorption.
Four rules keep the anchor honest over time:
renamed into whatever actually happened makes "done" unfalsifiable. A MAIN that became something else is a redirect, not a rename: the original takes an honest not-landed close, the new direction becomes its own new entry. Redirects append; they never rewrite.
session — a new task after a wrap is the same session's second MAIN, not a new session. Anything that counts sessions (trend tables, numbered handoffs) counts boots.
the ⭐️ MAIN, not at wrap time — and keep it visible; the handoff carries it.
verified ticks only after thenamed check actually ran — "done" and "checked" are different claims and must not travel in one checkbox.
Full rationale, examples, and how it pairs with Handoff: references/task-track.md.
When wrapping up, write a plain-markdown handoff the next agent can pick up cold. The doc — not a file, not a tool, not your platform — is the universal interface: any agent and any human can read plain markdown.
Writing a handoff (the handoff operation — see commands/handoff.md):
templates/handoff.template.md (at the plugin root, beside skills/). It is the single source of truthfor a handoff's structure, and the same sections as rules/task-rules.json; do not invent your own (a project with its own heading names adds · Throughline: <name> at the end instead). The sections:
(a copy of Done), a file-hash table.
same text as Next actions #1.
LANDED with evidence /PARTIAL / NOT-LANDED) and its 🔸 subtasks — done, carried → a row, or dropped on the human's words. LANDED needs every subtask done. Silence is not a verdict.
with its row; "none" if none.
trusting this doc: each check named, with its expected result.
link it — don't copy it. Copies go stale; references stay single-source.
every session. If the project keeps a longer history, link to it; don't grow the handoff into a second log.
agreed handoff path; if you can't, just emit the doc inline in your reply.
written, the snapshot is stale — re-run the wrap. A stale handoff misleads the next session worse than none.
Resuming from a handoff (the resume operation — see commands/resume.md):
the handoff is a finding* — a missing doc, stale date, or absent verdict is evidence about how the last session ended; say it out loud, don't silently patch around it. That report is what makes a skipped wrap step get caught* instead of compounding.
named artifacts, re-run the named check, re-confirm cited facts are still current. A snapshot trusted blindly is exactly how stale state causes drift.
orientation by proposing the ⭐️ Goal (Next actions #1) as a concrete action for a one-word confirm** — queue visible, no open-ended "what should we work on?". The proposal is a default, not a lock.
When several agents work the project in parallel (two substrates, a swarm, an auditor): every shared artifact gets exactly one writer; non-owners keep their own progress notes and the owner folds them in at its wrap; the workstream's owner writes its own work-package docs; and the docs — not anyone's chat history — are the coordination channel. Details: references/handoff.md.
Full protocol, the seven anti-drift mechanisms, and why each exists: references/handoff.md.
Throughline is how to keep and hand off the thread; its companion skill strain is when — a session-strain meter that reads how loaded the conversation has become and says when to wrap. The two meet in the middle: strain's cleanest behavioural counts come from the task track this skill maintains (one anchored MAIN, origin-tagged side tasks), and the wrap strain calls for is the handoff this skill writes. Each stands alone; together the loop closes.
The next agent may be on any platform, so assume no specific function exists. Each capability has a graceful fallback:
| If you have… | use it for… | If you don't… |
|---|---|---|
| File-system write | saving the handoff to a known path | emit the handoff inline in your reply — the doc is the deliverable, not the file |
| Live access (web, repo, tools) | re-deriving state against ground truth | re-derive from the artifacts you were handed; flag what you couldn't verify |
| Code execution | the optional tools/handoff.py validator | skip it — the prompt does the whole job without it |
| A task-list tool | the ⭐️ MAIN and its 🔸 subtasks live where the human sees them (the host's task list and plan pane), from the confirm instant | the board or file the human watches, written at the confirm instant — not at the wrap |
| A skill / slash-command system | invoking handoff / resume as commands | paste the relevant section in as a plain prompt |
The two reasoning disciplines — the ⭐️ MAIN goal anchor and re-derive-don't-trust — have zero capability dependency, so they hold at the lowest common denominator.
tools/handoff.py is a single-file, zero-dependency (Python stdlib) helper that does only 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 present, one ⭐️ MAIN,
# re-derive note present, secret-pattern sweepIt reads the required sections from the shared template at runtime, so the validator and the prompt can never drift on structure. It's optional — if you can't run code, the skill is complete without it.
| File | Purpose |
|---|---|
SKILL.md | This file — the two habits and how they connect. |
commands/handoff.md | The write operation (drop-in slash command + paste-in prompt). |
commands/resume.md | The read / pick-up operation. |
templates/handoff.template.md | The handoff's sections (plugin root); the same sections as rules/task-rules.json. |
rules/task-rules.json | The rules as data — what tools/handoff.py checks and the prose explains. |
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. |
tools/handoff.py | Optional stdlib scaffold/validate helper. |
assets/logic-flow.svg | Diagram of how the two halves connect. |
MIT. Free to use, modify, embed, redistribute. Attribution appreciated.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.