agentsclimarketplace

Handoff

Skill allemaar/open-skills/skills/handoff

Generate a structured cold-agent handoff brief (YAML frontmatter + Obsidian markdown + YON blocks) that any fresh LLM session can pick up and execute. Trigger when the user runs /handoff or says "create a handoff", "dispatch to a fresh agent", "hand this to a cold session", "switch to a new session", "I have N tasks for cold agents", "package this for another agent". Use /orchestrate-mode instead when you want to keep the *current* session as coordinator (no artifact produced).From its SKILL.md

Install
npx -y skills add allemaar/open-skills --skill handoff

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 13 stars13 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

14.9 KB, ~3.5k tokens by cl100k_base, as published. Nobody here has run it

/handoff

Generates a structured handoff brief: YAML frontmatter (Obsidian-readable, vault-schema-compliant) + Obsidian-flavored markdown body containing YON-tagged structured blocks. The brief is the work item a fresh agent in a new session can pick up and execute autonomously.

Structured execution spec: protocol.yon. It carries the workflow steps, the verify and sources gates, and the rules as validatable records; this file is the explanation. Keep the two in sync — edit one, update the other and refresh the @STAMP date.

When to use

  • UC1 — Dispatch a self-contained task to a fresh agent (agent profile)
  • UC4 — Dispatch a multi-step task that needs to be split into parallel sub-tasks (orchestrator profile)
  • UC3 — Switch the current session to a fresh one carrying in-flight state (new-session profile)

For UC2 (turn the current session into pure orchestrator mode), use /orchestrate-mode instead — that's a behavior switch, not a handoff artifact.

Output

Each handoff produces:

  • A vault file (canonical) at $VAULT/Handoffs/{project}/{YYYY-MM-DD}-{slug}.md (set $VAULT to your Obsidian vault root)
  • A chat surface (paste-convenience): full block if file < 500 lines; otherwise summary (first 30 lines) + 📄 Full brief: <path>

For multi-handoff (count=N): N files + a numbered index in chat (no per-brief content in chat).

The cold agent writes its retro to Handoffs/{project}/retros/{YYYY-MM-DD}-{slug}-retro.md (canonical file) AND emits it as a chat block (paste-back surface). Bidirectional brief↔retro linking is automatic via Obsidian's wikilink graph.

Workflow

1. Determine invocation path

PathTriggerBehavior
1. One-shot complete/handoff agent task="..." where="..." evidence="..." acceptance="..." verify="..."Parse, validate required fields present, write file, emit chat surface.
2. One-shot partial/handoff agent task="..." (missing required)Parse, identify gaps, ask ONLY for missing required, then write.
3. Interactive/handoff (no args)Full Q&A from "What kind?" through all required.
4. Multi one-shot/handoff count=3Each of N briefs runs independent profile-selection + Q&A. Emits N files + numbered index in chat.
5. Multi interactive/handoff then "I have 3 tasks"Detect intent, ask "How many?", then run Path 3 N times independently.
6. Orchestrator subtasksorchestrator profile selectedIf subtasks field unspecified → LLM auto-decomposes, surfaces for review. If specified → LLM validates 5 checks; pass = proceed; fail = findings + auto-/insight-assess.

2. Profile selection (interactive)

Ask the user: "What kind of handoff?"

Auto-suggest orchestrator if user describes a multi-step / parallelizable task, but default to agent (smaller blast radius).

3. Field collection

Required for all profiles:

  • task — one-paragraph description (max 1000 chars)
  • where — absolute paths in scope
  • evidence — pointer to error/commit/file/line that prompted this
  • acceptance — acceptance sentence
  • verify — list of verifiable shell commands (REQUIRED — if user can't name one, push back: "this task isn't measurable enough for a handoff; reconsider scope")
  • sources_required — file paths or wikilinks the cold agent MUST read before planning. Asked interactively as: "Which sources MUST the cold agent read before planning? (file paths or wikilinks, comma-separated.)" If the user supplies a non-empty list → write to @SOURCES.required, brief executes in gated mode. If the user supplies an empty list → push back with: "You haven't named any required sources. Either name what the cold agent must read before planning, OR explicitly confirm 'no sources required' — the brief will run in advisory mode with a prominent warning, and the cold agent will not gate on source ingestion. Confirm 'no sources required' to proceed." Default is to re-prompt for sources. Only after explicit confirmation does the brief write with empty @SOURCES.required and an advisory-mode marker. Writes to the brief's @SOURCES.required block (see handoff-execute/references/SOURCES-BLOCK.md).

Optional with defaults:

  • sources_optional — additional sources surfaced for on-demand reading mid-execution. Asked as: "Any additional sources to surface as optional reading? (Empty = none.)" Writes to @SOURCES.optional.
  • forbidden_actions — preservation guards
  • time-budget-min — wall-clock cap (default: 60)
  • output_location — vault path override

For new-session profile, auto-collect from current session state instead of asking — see profiles/new-session.md.

4. Project detection

project=$(basename "$(git rev-parse --show-toplevel 2>/dev/null)" 2>/dev/null || echo "unsorted")

Local folder name. Works on detached repos. Falls back to unsorted if not in a git repo.

5. Slug generation

slug=$(echo "$task" | head -c 200 | tr '[:upper:]' '[:lower:]' | sed 's/[^a-z0-9]/-/g' | sed 's/-\+/-/g' | sed 's/^-\|-$//g' | head -c 40)

Lowercase-kebab from task description, max 40 chars.

6. Write file

vault_path="${VAULT:?set VAULT to your vault root}/Handoffs/$project/$(date +%Y-%m-%d)-${slug}.md"
mkdir -p "$(dirname "$vault_path")"
# write the brief content (see profiles/{profile}.md for shape)

7. Render chat surface

lines=$(wc -l < "$vault_path")
if [ "$lines" -lt 500 ]; then
  cat "$vault_path"
  echo "📄 Saved to: $vault_path"
else
  head -30 "$vault_path"
  echo "..."
  echo "📄 Full brief: $vault_path"
fi

For multi-handoff (count > 1): render only the numbered index in chat:

3 handoffs created:
  1. <task1 summary> → <path1>
  2. <task2 summary> → <path2>
  3. <task3 summary> → <path3>

8. Emit activation phrase

After the chat surface, ALWAYS emit a copyable activation phrase in a fenced code block. This is the single line the user pastes into a fresh agent session to invoke the brief.

Format (single-handoff):

## Activation phrase (copy-paste into the fresh session)

```
/handoff-execute "<absolute-vault-path>"
```

(If your runtime lacks /handoff-execute (degraded — no gate enforcement): read the brief, then read every source listed under @SOURCES.required before planning; cite sources per plan step; after execution, run the shell commands listed in the brief's @OUTCOME.verify block (this is a data field in the brief, not the /verify skill); emit the retro per @GROUND_TRUTH_REQUIRED.)

Format (multi-handoff): one fenced block per brief, in the same numbered order as the index. Emit the prose fallback once at the bottom of the multi-block, not per brief:

## Activation phrases

Brief 1:
```
/handoff-execute "<path-1>"
```

Brief 2:
```
/handoff-execute "<path-2>"
```

(...)

(If your runtime lacks /handoff-execute (degraded — no gate enforcement): read each brief, then read every source listed under @SOURCES.required before planning; cite sources per plan step; after execution, run the shell commands listed in each brief's @OUTCOME.verify block (this is a data field in the brief, not the /verify skill); emit the retro per @GROUND_TRUTH_REQUIRED.)

Why: the chat surface (Step 7) is for the originating session to verify the brief; the activation phrase is for the receiving session to bootstrap from. Pasting 100+ lines of YAML+markdown into a fresh session is heavier than a one-line pointer that the receiving agent will Read-tool open and follow.

Discipline: the activation phrase MUST use the exact absolute path of the written brief. Wikilinks [[…]] in the activation phrase do not resolve outside Obsidian. Use forward slashes for cross-platform compatibility. Always quote the path — Windows vault paths may contain spaces.

Brief schema (universal)

Every brief has YAML frontmatter conforming to vault schema:

---
title: "Handoff: {short-task-summary}"
type: handoff
profile: agent | orchestrator | new-session
project: "{repo_name}"
status: dispatched
created: YYYY-MM-DD
acceptance: "{one sentence}"
verify:
  - "{shell command 1}"
  - "{shell command 2}"
time-budget-min: 60
trust: 0.8                    # optional
primary-domain: ""            # optional
lifecycle: active
related: []
tags:
  - type/handoff
  - profile/{profile}
  - status/dispatched
  - project/{project}
---

The body is profile-specific — see profiles/agent.md, profiles/orchestrator.md, profiles/new-session.md. All three profiles include a ## Sources section with an @SOURCES YON block; see handoff-execute/references/SOURCES-BLOCK.md for the canonical block schema and tier semantics.

Retro schema (what the cold agent emits)

The cold agent writes its retro file with this frontmatter:

---
title: "Retro: {short-task-summary}"
type: retro
handoff: "[[YYYY-MM-DD-slug]]"
profile: agent | orchestrator | new-session
project: "{repo_name}"
verdict: success | partial | fail | blocked
confidence: low | medium | high
completed: YYYY-MM-DDTHH:MM:SS
trust: 0.9                    # optional
primary-domain: ""            # optional
lifecycle: active
related: []
tags:
  - type/retro
  - verdict/{verdict}
  - profile/{profile}
  - project/{project}
---

The retro body MUST include YON blocks for: @OUTCOME_DELIVERED, @GROUND_TRUTH (with artifacts_modified paths+hashes and git_diff_summary), @GATE_STATUS (per-clause verified|unverified|failed + gate-suite outcome), @DELTA_FROM_BRIEF, @RECOMMENDATIONS, @VERDICT. Narrative-only retros are rejected — ground truth (file paths, hashes, git diff) is non-negotiable.

The brief sign-off section instructs the cold agent on this, and points back to the originating session for /insight-critique (or any LLM-agnostic equivalent).

Rules

  • ALWAYS use absolute paths in target file references.
  • ALWAYS check whether the task has a verifiable acceptance command. If not, push back — handoffs without measurable acceptance are unmeasurable.
  • ALWAYS mkdir -p before writing the brief file.
  • ALWAYS use wikilinks [[file]] for in-vault references; absolute paths for code-repo references.
  • NEVER prescribe runtime-specific skill or tool names in the brief body (the cold agent may be Claude Code, Codex, or another LLM). Describe outcomes, not procedures. Where a step is genuinely runtime-specific, tag it explicitly (e.g. '(Claude Code only)').
  • NEVER write a brief that's smaller than the field schema requires — push back on under-specified tasks instead.
  • NEVER assume the user wants chat-only output — file is canonical.

Anti-patterns

  • "I'll figure out the right place" — name the file path explicitly
  • "Make sure not to break anything" — replace with forbidden_actions list
  • "Run /verify after" — /verify is a Claude Code skill marked disable-model-invocation, so even on Claude Code the cold agent can't invoke it; on other runtimes (Codex, etc.) it doesn't exist at all. Use outcome-based briefs (verifiable shell commands in verify:) instead of prescribing skill invocations.
  • "Use the Agent tool with isolation: worktree" — that's a Claude-Code-specific spawning mechanism; Codex and other runtimes have different (or no) equivalents. Describe the behavior you want ('spawn a fresh isolated agent session', 'run in a clean worktree') in runtime-agnostic prose, and let the cold agent's runtime supply the mechanism. If a step truly only works on one runtime, tag it (e.g. '(Claude Code only)').
  • Skipping @SOURCES.required because "the brief is small" — if it's worth a handoff, it has critical context. Declare what the cold agent must read; let the gate work for you. Empty sources_required drops /handoff-execute into advisory mode (no gate, only a warning).

Companion skills

  • /handoff-execute — the receiving-side executor. Consumes the brief this skill produces, gates on @SOURCES.required, runs verify commands, writes the retro to the canonical vault path.

Briefs that declare @SOURCES are executed in gated mode by /handoff-execute (source ingestion is a hard gate before planning). Briefs without @SOURCES execute in advisory mode (best-effort source scan, no gate, prominent warning emitted). Legacy briefs without @SOURCES continue to work; add @SOURCES to upgrade.

Inspirations

  • /plan-create — phased structure
  • /plan-phases — /verify-style checkpoint pattern
  • /insight-critique — second-assessment workflow (or any LLM equivalent reading frontmatter + body)
  • /insight-retro — informed the retro shape; handoff retro is stricter (mandatory ground-truth fields)
  • The host vault's note frontmatter schema (where present) — the brief frontmatter conforms to it

Human output. This skill's handler-facing output obeys the human-output contract (human-output/SKILL.md).

Self-improvement. On completion, run the Self-Improvement Protocol (self-improve/SKILL.md): if this run surfaced a concrete, blocking-or-recurring weakness in this skill, propose a specific fix for the handler to approve. Conservative — silent otherwise. Never auto-apply.

What ships with it: 4 files

18.3 KB alongside SKILL.md

profiles/

Gives 0 of the 12 instructions most agent orchestration skills give in ~3.5k tokens

Counted across 848 of the 1,300 authors here whose files we hold, read 2026-09-06

  • Dispatch one agent per independent problem domainin 56 of 848, across 42 files
  • Run full test suite after integrationin 55 of 848, across 42 files
  • Verify fixes do not conflictin 40 of 848, across 32 files
  • Review each summary when agents returnin 40 of 848, across 31 files
  • Write a handoff document summarising the current conversationin 30 of 848, across 25 files
  • Reference existing artifacts by path or URLin 26 of 848, across 24 files
  • Give each agent a specific scopein 19 of 848, across 10 files
  • Give each agent a clear goalin 19 of 848, across 10 files
  • Include a suggested skills section in the documentin 18 of 848, across 16 files
  • Tailor the doc to the user argumentsin 18 of 848, across 15 files
  • Issue all subagent dispatches in the same responsein 17 of 848, across 11 files
  • Use git worktrees for isolationin 17 of 848, across 8 files

Said here and by no other author read

  • Use absolute paths in target file references
  • Check whether the task has a verifiable acceptance command
  • Run mkdir -p before writing the brief file
  • Use wikilinks for in-vault references
  • Describe outcomes instead of prescribing runtime-specific skill names

Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.