Agent skill

Queue Handoff

by mvschwarz in mvschwarz/openrig

A skill your agent uses when ending a turn, finishing a slice, blocked on another agent's work, or escalating to a human — durable work handoff via queue items so the system keeps moving across…

Apache-2.0Auto-check passedAgent Workflows

Install Queue Handoff

skills CLI
$ npx skills add mvschwarz/openrig --skill queue-handoff -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install mvschwarz/openrig queue-handoff --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/mvschwarz/openrig.git skills-src && mkdir -p .claude/skills && cp -r skills-src/packages/daemon/assets/plugins/openrig-core/skills/queue-handoff .claude/skills/queue-handoff && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
queue-handoff
GitHub stars
5.5k
Token cost
~2.6k tokens
SKILL.md length
1,450 words
Files
1
Skills in repo
49
Repo updated
First seen
Licence
Apache-2.0

At a glance

A skill your agent uses when ending a turn, finishing a slice, blocked on another agent's work, or escalating to a human — durable work handoff via queue items so the system keeps moving across…

  • Works in 6 steps: Agent ends a turn without a handoff, so… → Agent creates a queue item with… → Queue item is too small and turns work… → …
  • Finishing a slice
  • SKILL.md covers Use this when, Don't use this when, The hot-potato… and Default-nudge semantics (the…, plus 3 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Queue Handoff is an agent skill from mvschwarz/openrig. Use when ending a turn, finishing a slice, blocked on another agent's work, or escalating to a human — durable work handoff via queue items so the system keeps moving across compactions, missed messages, and interruptions. Covers the hot-potato terminal-turn-rule (active work ends by passing the ball, not by going idle), default-nudge semantics, and when --no-nudge is appropriate for intentional cold park or human gate.

Its SKILL.md is about 2.6k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Agent Workflows. The repository describes itself as: Build your own network of agents from Claude Code, Codex and Pi: persistent teams with roles, shared context and owned work. The licence is Apache-2.0.

When your agent uses it

  • Finishing a slice
  • Blocked on another agents work
  • Escalating to a human — durable work handoff via queue items so the system keeps moving across compactions
  • Missed messages

Example prompts

  • “/queue-handoff”

Workflow steps

6 steps, taken from the first numbered list in SKILL.md.

  1. Agent ends a turn without a handoff, so the rig appears idle.
  2. Agent creates a queue item with --no-nudge inside a live loop, intending suppression of attention but breaking immediate motion…
  3. Queue item is too small and turns work into bureaucracy.
  4. Queue item is too broad and loses ownership, proof, or closure criteria.
  5. Human escalation happens in chat but not as a durable attention item.
  6. Agent pastes a large command dump (ps/nodes, big JSON, proof blob) into the qitem body, bloating the stored DATA so every full-body read…

What it can do on your machine

Read from SKILL.md and the folder at commit a7fed63. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md.

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Queue Handoff loads about 2.6k tokens when it runs. Until then it costs about 110 tokens; SKILL.md has 1,450 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~110
When it runs · the whole SKILL.md, loaded when a task matches
~2.6k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from mvschwarz/openrig at commit a7fed63, republished under its Apache-2.0 licence (© mvschwarz). 1,450 words, ~2,593 tokens.

Download SKILL.mdSave it as .claude/skills/queue-handoff/SKILL.md (or your agent's skills folder).
name
queue-handoff
description
Use when ending a turn, finishing a slice, blocked on another agent's work, or escalating to a human — durable work handoff via queue items so the system keeps moving across compactions, missed messages, and interruptions. Covers the hot-potato terminal-turn-rule (active work ends by passing the ball, not by going idle), default-nudge semantics, and when `--no-nudge` is appropriate for intentional cold park or human gate.
metadata.cli_surfaces_referenced
queue, queue create, queue handoff, queue handoff-and-complete

Queue Handoff

Durable work handoff via queue items. Lets the system keep moving through compactions, missed messages, and interruptions by passing the ball forward instead of leaving work suspended in chat or in-flight without an owner.

Use this when

  • Ending a turn on substantive work. Active work should end by passing the ball to an owner or to the human — never by going idle with the rig appearing dormant.
  • Finishing a slice that has a clear next step. Default-nudge: receiver gets a wake-ping plus the durable queue item.
  • Blocked on another agent's work. Park the qitem with closure_reason: blocked_on and the blocker qitem id.
  • Escalating to the human. Make the escalation a durable attention item, not just a chat message.

Don't use this when

  • The work is genuinely complete and there's no follow-on owner. Use closure_reason: no-follow-on (terminal completion) or canceled/denied as appropriate.
  • The handoff would be too small and turn work into bureaucracy. Bundle the work into a coherent slice instead of decomposing every step.
  • The handoff would be too broad and lose ownership/proof/closure criteria. Shape the qitem so the receiver knows the expected next action and closure evidence.

The hot-potato terminal-turn-rule

Active work ends by passing the ball to a named next owner or to the human. The qitem state machine enforces this:

pending → in-progress → done requires closure_reason from one of:

  • handed_off_to — work continues at a different seat (target = new owner)
  • blocked_on — parked pending another qitem (target = blocker qitem id)
  • denied — receiver rejected the work
  • canceled — sender or receiver withdrew
  • no-follow-on — terminal completion, nothing else needed
  • escalation — kicked up to a higher tier (target = escalation target)

Three of those (handed_off_to, blocked_on, escalation) additionally require closure_target. The daemon enforces this at the domain layer; every surface (CLI, MCP, future UI) inherits the same guarantee.

The drafted-park failure (draft ≠ throw). The rule is about the actual pass, not the intention to pass. A turn that ends with a self-instruction typed into your own prompt but left unsent — a drafted go-ahead, a next-atom note you never sent — has not handed off; it has parked, and the seat sits idle for as long as nobody notices. Drafting the handoff feels like doing it; it isn't. Your last act on a turn must be an EDIT or a SEND — a committed change, a rig send, a rig queue handoff — never a drafted prompt line left in the buffer. If your final output is an instruction addressed to yourself, you haven't ended the turn, you've stalled it.

The dispatcher's other half — supersession closes your own outbox. Ending your turn cleanly is only half the rule; the other half fires when you move the world. When a phase transition or a fold receipt supersedes work you dispatched, close those dispatches yourself — with a citation to the event that superseded them. Closure-on-supersession belongs to the dispatcher, never the receiver. Make it a habit: after every fold receipt / phase transition, run an outbox audit — which of my open dispatches did this just make moot? — and close them with the citation.

Why it must live with you: stale dispatch-debt is invisible to the dispatcher because it lands on someone else's queue — the cost is externalized, so no feedback loop ever fires to make you clean it up. The receiver inherits debt they did not create and must burn cycles verifying it before they can hold cleanly; a queue full of stale-pending makes check-before-holding — the discipline you most want cheap — expensive, and it degrades the idle-detector's signal (a real owner looks the same as a stale dispatch). Close it at the source: the moment your own transition mooted it.

And after you hand off, PULL — don't idle with a stocked queue. Handing the baton off ends the sequential thread; it does not end your turn if your own queue still holds work. The circulation pattern: finish → (1) hand the baton off so sequential work continues → (2) check your OWN queue and pull the next item rather than going idle → (3) go truly idle only when your queue is exhausted, then wait for the baton. An agent idling on top of a stocked queue is the single biggest utilization leak (see orchestration-team → queue depth is the orchestrator's product). This is pull-not-push at the seat level and needs no new machinery — the last act after a handoff is a PULL.

Default-nudge semantics (the syntax footgun)

CommandNudges by default?When to use
rig queue createyesNew qitem created from scratch
rig queue handoffyesTransactional close-as-handed-off + create-new
rig queue handoff-and-completeyesAtomic close + create-new; default nudge wakes the new owner

Footgun: --no-nudge accidentally added to a live-loop handoff. The shipped 0.3.1 CLI nudges by default on every queue write surface (rig queue create, rig queue handoff, AND rig queue handoff-and-complete). The only suppression flag is --no-nudge — appropriate for intentional cold park, human-gate signal, or a deliberate poll-driven workflow, but NOT for live-loop handoffs where motion matters.

Rule: in a live loop, omit --no-nudge and trust the default. --no-nudge is the opt-out, not the opt-in. If you find yourself reaching for --notify, stop — that flag does not exist on the shipped 0.3.1 CLI; you may be following a stale instruction that inverted the default-nudge polarity.

Show full SKILL.md (586 more words)Show less

Queue-body hygiene (token + parse safety)

The qitem body is durable DATA the daemon stores and replays on every rig queue show <id> / --json read. Keep it small and parse-safe — a bloated or malformed body costs every future reader, not just the recipient.

  • No large command output in bodies. Do NOT paste rig ps/--nodes dumps, big JSON blobs, full proof output, diffs, or transcript chunks into a qitem body. Link the artifact PATH (e.g. missions/<m>/<slice>/proof.md) or summarize in prose, then point at the file for the detail. A pasted dump makes rig queue show <id> --full --json large. Compact defaults limit a preview, but the stored body still costs readers who need full detail. Keep evidence in its durable artifact.
  • Substantive bodies go through --body-file, not inline --body. For anything beyond a short line, write the body to a file and pass --body-file <path> (or - for stdin). Inline --body with shell metacharacters is fragile.
  • No raw backticks in bodies. Backticks in an inline body are shell command-substitution and corrupt the payload (or execute). If you need code/command spans, use --body-file, or drop the backticks and write the command in plain text.

Heuristic: if the thing you want to include is more than a few lines or contains shell metacharacters (backticks, $, quotes, newlines-with-pipes), it belongs in a file you LINK, not in the body you paste.

The current rig queue show returns a bounded body preview by default; --full returns the complete body and chain fields. Preview truncation does not truncate the stored work. Check bodyTruncated and bodyBytes, then request full content when needed; keep large supporting evidence in linked artifacts.

Failure modes (6; verbatim)

  1. Agent ends a turn without a handoff, so the rig appears idle.
  2. Agent creates a queue item with --no-nudge inside a live loop, intending suppression of attention but breaking immediate motion. --no-nudge is for intentional cold park / human gate, not for routine live-loop handoffs. The opposite footgun — adding a --notify flag that does not exist on the shipped 0.3.1 CLI — comes from following stale instructions; the default already nudges.
  3. Queue item is too small and turns work into bureaucracy.
  4. Queue item is too broad and loses ownership, proof, or closure criteria.
  5. Human escalation happens in chat but not as a durable attention item.
  6. Agent pastes a large command dump (ps/nodes, big JSON, proof blob) into the qitem body, bloating the stored DATA so every full-body read is large. Link the proof PATH or summarize in prose; substantive bodies go through --body-file; no raw backticks inline.

Durable handoff field shape

Every qitem carries:

  • handed_off_to — destination session (qualified pod-member@rig form)
  • handed_off_from — predecessor qitem id (the source session is source_session)
  • state — one of: pending | in-progress | done | blocked | failed | denied | canceled | handed-off
  • closure_reason + closure_target — set on terminal closure per hot-potato rule

(0.5.0) --body-context <ref> — context riding the handoff. rig queue create … --body-context <ref> attaches a composed context pack to the qitem. The snapshot rule: the qitem stores the resolved content in its body plus the ref for provenance — the handoff carries what was actually sent, and a later edit to the library never silently rewrites a past handoff's history. (The rig context noun composes the ref; the queue delivers it — the noun has no send.) See openrig-user → "Context packs and paced delivery."

The fields are auditable on the daemon-backed rig queue surface. Watchdog policies and workflow runtime project new owners off these fields.

If a daemon-backed coordination command fails, debug the command/runtime/schema edge directly — don't fall back to stale pre-upgrade assumptions.

© mvschwarz, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in packages/daemon/assets/plugins/openrig-core/skills/queue-handoff of mvschwarz/openrig.

Open the folder on GitHubat commit a7fed63

Compare with similar skills

Queue Handoff next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Queue Handoff compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Queue Handoff this skillmvschwarz/openrig5.5k—~2.6kAutomated safety check: PassApache-2.0
MCP Server Builderanthropics/skills180k62 repos~2.3kAutomated safety check: PassApache-2.0
Hook Development for Claude Code Pluginsanthropics/claude-plugins-official37k11 repos~4.1kAutomated safety check: NotesApache-2.0
Using Superpowersfarm-fe/farm5.6k34 repos~1.4kAutomated safety check: PassMIT
Executing Plans Inlineobra/superpowers296k2 repos~5.1kAutomated safety check: PassMIT
Claude Code Agent Developmentanthropics/claude-plugins-official37k8 repos~2.8kAutomated safety check: PassApache-2.0

Similar skills

  • MCP Server Builder

    anthropics/skills

    Official

    Guides the design and implementation of Model Context Protocol servers in TypeScript or Python, from tool naming and error messages to evaluation.

    180k GitHub starsUsed in 62 repos~2.3k tokens
    Agent WorkflowsAuto-check passed
  • Hook Development for Claude Code Plugins

    anthropics/claude-plugins-official

    Official

    Explains how to write Claude Code plugin hooks, both prompt-based checks and bash commands, for events such as PreToolUse, Stop and SessionStart.

    37k GitHub starsUsed in 11 repos~4.1k tokens
    Agent WorkflowsAuto-check: notes
  • Using Superpowers

    farm-fe/farm

    A skill your agent uses when starting any conversation - establishes how to find and use skills, requiring Skill tool invocation before ANY response including clarifying questions

    5.6k GitHub starsUsed in 34 repos~1.4k tokens
    Agent WorkflowsAuto-check passed
  • Executing Plans Inline

    obra/superpowers

    Has the agent carry out an implementation plan itself, task by task in the current session, keeping a ledger, proving each step with a test and ending with one whole-branch review.

    296k GitHub starsUsed in 2 repos~5.1k tokens
    Agent WorkflowsAuto-check passed
  • Claude Code Agent Development

    anthropics/claude-plugins-official

    Official

    Explains how to write agents for Claude Code plugins: the markdown file with YAML frontmatter, trigger descriptions, model and color settings, and system prompt design.

    37k GitHub starsUsed in 8 repos~2.8k tokens
    Agent WorkflowsAuto-check passed
  • Skill Creator

    Azure/azqr

    Official

    Create new skills, modify and improve existing skills, and measure skill performance.

    794 GitHub starsUsed in 89 repos~8.2k tokens
    Agent WorkflowsAuto-check passed

More from mvschwarz/openrig

All 49 skills in this repo
  • OpenRig Upgrade Procedure

    mvschwarz/openrig

    Walks an agent through upgrading the OpenRig CLI and daemon one observed step at a time, keeping live seats alive and reconciling managed plugin files.

    5.5k GitHub stars~2.9k tokensUpdated today
    Auto-check passed
  • OpenRig Software Factory

    mvschwarz/openrig

    Helps set up a continuing agent software team for a real repository with OpenRig, choosing between manual work, queue handoffs and an explicit Workflow.

    5.5k GitHub stars~2.5k tokensUpdated today
    Auto-check passed
  • Separates a stable agent seat's identity from its changing occupant, and records honest, two-part provenance whenever one occupant replaces another.

    5.5k GitHub stars~2.1k tokensUpdated today
    Auto-check passed
  • Loads one section of a Markdown file by its path#h2-slug address with a bundled resolver script, for use outside OpenRig's context library.

    5.5k GitHub stars~341 tokensUpdated today
    Auto-check passed
  • Vault User

    mvschwarz/openrig

    A skill your agent uses when checking the health of this rig's HashiCorp Vault or writing, reading, listing, deleting or explaining its secrets.

    5.5k GitHub starsUsed in 1 repo~451 tokens
    Auto-check passed
  • Agent Refocusing

    mvschwarz/openrig

    Re-grounds a long-running agent in the current product outcome by running a path-based trace to the root of its topology and work trees.

    5.5k GitHub stars~399 tokensUpdated today
    Auto-check passed

Categories

Questions about Queue Handoff

What does Queue Handoff do?

A skill your agent uses when ending a turn, finishing a slice, blocked on another agent's work, or escalating to a human — durable work handoff via queue items so the system keeps moving across…. Queue Handoff is an agent skill from mvschwarz/openrig. Use when ending a turn, finishing a slice, blocked on another agent's work, or escalating to a human — durable work handoff via queue items so the system keeps moving across compactions, missed messages, and interruptions.

When should I use Queue Handoff?

Queue Handoff fits situations like: finishing a slice; blocked on another agents work; escalating to a human — durable work handoff via queue items so the system keeps moving across compactions; missed messages.

How do I install Queue Handoff in Claude Code?

Run `npx skills add mvschwarz/openrig --skill queue-handoff -a claude-code`. Or copy the skill folder (packages/daemon/assets/plugins/openrig-core/skills/queue-handoff in mvschwarz/openrig) into .claude/skills/queue-handoff in your project. Claude Code loads it when a task matches its description.

How do I install Queue Handoff in Codex?

Run `npx skills add mvschwarz/openrig --skill queue-handoff -a codex`. Or copy the skill folder (packages/daemon/assets/plugins/openrig-core/skills/queue-handoff in mvschwarz/openrig) into .agents/skills/queue-handoff in your project. Codex loads it when a task matches its description.

Can I use Queue Handoff in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add mvschwarz/openrig --skill queue-handoff -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/queue-handoff, .gemini/skills/queue-handoff, .github/skills/queue-handoff and .opencode/skills/queue-handoff in your project.

What does Queue Handoff need to run?

SKILL.md names no scripts, command-line tools or credentials: Queue Handoff is instructions for the agent only.

Does Queue Handoff access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Queue Handoff safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Queue Handoff use?

Queue Handoff is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Queue Handoff use?

About 2.6k tokens (SKILL.md is roughly 10k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Queue Handoff?

Skills that share tags, products or a category with Queue Handoff: MCP Server Builder (anthropics/skills, 180k stars), Hook Development for Claude Code Plugins (anthropics/claude-plugins-official, 37k stars), Using Superpowers (farm-fe/farm, 5.6k stars) and Executing Plans Inline (obra/superpowers, 296k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Queue Handoff?

mvschwarz (a GitHub user) maintains it in mvschwarz/openrig, which has 5,542 GitHub stars. The repository holds 49 skills in this directory. The repository was last updated on October 7, 2026.

Source: mvschwarz/openrig on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.