Agent skill

Human Messaging Transport

by mvschwarz in mvschwarz/openrig

Supplies the mechanics for sending a message to a registered human, discovering who to contact, checking the channel is ready, and drafting a short, phone-readable brief.

Apache-2.0Auto-check passedAgent Workflows

Install Human Messaging Transport

skills CLI
$ npx skills add mvschwarz/openrig --skill messaging-the-human -a claude-code

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

GitHub CLI
$ gh skill install mvschwarz/openrig messaging-the-human --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/skills/_canonical/core/messaging-the-human .claude/skills/messaging-the-human && 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
messaging-the-human
GitHub stars
6.6k
Token cost
~2.1k tokens
SKILL.md length
1,150 words
Files
1
Skills in repo
49
Repo updated
First seen
Licence
Apache-2.0

At a glance

Supplies the mechanics for sending a message to a registered human, discovering who to contact, checking the channel is ready, and drafting a short, phone-readable brief.

  • Sending a human a decision request with a clear recommendation and tradeoff
  • SKILL.md covers Discover, check, send, inspect and Existing blockers and other…
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md
  • Sending a quiet status update that needs no action

What it does

This skill is deliberately transport-neutral: it does not decide when or why to contact a human, nor does installing it create an approval gate, since a separate project policy is meant to supply that judgment. If policy leaves a decision's ownership ambiguous, the skill's job is to name the missing authority rather than convert a solvable technical problem into a human gate on its own.

Before sending anything, it discovers the registered participants and inspects the chosen human through list and show commands, using the returned address rather than a remembered username or guessed address, and checks readiness: whether the channel is configured, enabled, active and ready, treating an indeterminate result as not ready and following the reported next inspection step rather than reconfiguring a connector just to force the check to pass.

Messages are authored for someone reading on a phone: a short subject, then one complete brief of roughly 100 to 150 words stating why it matters, a recommendation and its tradeoff, the bounded action that follows approval, and the specific choice being requested, or for a quiet update, the user-visible outcome and a note that no action is needed. Technical detail and evidence stay in a durable artifact referenced separately, since a local path is not something that reaches a phone. The single outbound primitive takes a destination address, an intent of decision or update, a summary, a body file and a reference to that durable evidence.

When your agent uses it

  • Sending a human a decision request with a clear recommendation and tradeoff
  • Sending a quiet status update that needs no action
  • Checking whether a messaging channel to a human is actually ready before sending
  • Finding the right registered human to contact when several exist

Example prompts

  • “Draft a decision brief asking whether to proceed with this instance update, with the tradeoff stated.”
  • “Check if the messaging channel to the on-call human is ready before I send anything.”
  • “Send a quiet update that the deployment finished with no action needed.”
  • “Who are the registered humans I can message about this decision?”

Requirements

  • The rig gateway CLI with at least one registered human participant

What it can do on your machine

Read from SKILL.md and the folder at commit 4b48ca2. 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 (its code samples are bash).

    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

Human Messaging Transport loads about 2.1k tokens when it runs. Until then it costs about 40 tokens; SKILL.md has 1,150 words of instructions outside code blocks.

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

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 4b48ca2, republished under its Apache-2.0 licence (© mvschwarz). 1,150 words, ~2,061 tokens.

Download SKILL.mdSave it as .claude/skills/messaging-the-human/SKILL.md (or your agent's skills folder).
name
messaging-the-human
description
Use when project policy calls for a human decision or update, a human delivery is pending or failed, or a reply must resume the right work.
metadata.cli_surfaces_referenced
gateway human list, gateway human show, queue create, queue transitions, queue block, send

Messaging the Human

Project World supplies when and why to contact a human. This skill supplies transport-neutral mechanics; installing it does not create an approval gate or choose a connector. If policy leaves a material decision ambiguous, identify the missing authority. Do not convert a solvable technical failure into a human gate.

Discover, check, send, inspect

Discover the registered participants and inspect the chosen human:

bash
rig gateway human list --json
rig gateway human show <entityId> --json

Use the returned address (<entityId>@external), not a username, remembered seat, connector handle, or guessed kernel address. Where several humans exist, use the decision ownership in Project World. An absent or ambiguous registration needs a named registration correction, not a fallback address.

Check readiness: configured, enabled, active, ready, reason, and next action. indeterminate is not ready. Follow the reported next inspection; do not enable or reconfigure a connector merely to make the check pass.

Author for the person reading on a phone: a short subject in --summary, then one complete brief in --body-file. State why it matters, your recommendation and material tradeoff, the bounded action if approved, and the choice requested. For an update, state the user-visible outcome and “No action needed.” Aim for roughly 100–150 words; this is guidance, not a semantic validator. Keep technical continuation, exact candidate/revision and evidence on the owning agent row and in the durable artifact behind --evidence-ref. A local path is not a phone link and Markdown evidence files are not automatically attached.

For example, a synthetic brief could say:

The repaired status view is ready. I recommend updating this instance; live status will briefly pause. Sessions will be preserved. Approve this instance update, or hold? Supporting test detail follows in this thread.

This example grants no authority. Choose --human-intent decision for a request or --human-intent update for a quiet FYI. Omission retains legacy decision behavior; words such as “FYI” and tags do not change intent.

The sole outbound human-message primitive is:

bash
rig queue create --destination <entityId>@external \
  --human-intent decision --summary "<short subject>" --body-file <brief-file> \
  --evidence-ref <durable-evidence> --verify --json

An optional --human-detail-file <path> supplies one coherent supplemental reply in the same thread. Announce its purpose in the brief; the product also marks that a detail reply follows. The primary must already contain the complete scope, options and action. Do not split an agent dump blindly or move the essential choice into overflow. Rendering checks every part and its accessibility fallback before posting; an oversized request is refused with a field-specific correction, never silently clipped. Shorten the brief or related detail as directed. Inspect the failed row, then deliberately cancel/replace the authored request if its content needs correction; a timeout alone is never a reason to replace it.

A follow-up update about earlier work ("the change you approved is merged") can post into that item's thread with --reply-to <earlier-qitem-id>. It is accepted only with --human-intent update. Name the item whose thread the human saw, such as the parked row, and create the update on the same host as that item. Send the update from the seat that owns that thread: the seat that parked the row, or the author of the earlier item. A human reply in a thread reaches its owning seat, so an update from any other seat posts as a new message. It also posts as a new message, rather than being refused, if the earlier thread is missing or closed, or while the earlier item still waits on the human (a pending human decision, or a row parked on the human), since a reply in that thread would answer the decision. In every such case the --verify result says threaded: false with the reason.

To answer a reply the human typed inside one of your threads, --reply-to the row their reply landed as. The update posts in that thread unless one of the cases above applies, and --verify reports it the same way. A message the human started at the top level of the channel has no thread yet, so the answer posts as a new message.

A decision with a few clear choices can carry --human-questions-file <path>: a JSON array of 1–4 questions, each {"id", "question", "options": [{"id", "label", "recommended"?}]} with 2–4 options (labels up to 75 characters, at most one recommended). Slack shows each question as a row of buttons. Each click records that answer on the item, and the decision resolves once every question has one. You then receive one reply row listing the answers. In humanAnswers, clicked answers are option-id strings. A whole typed reply is an object: {kind: "typed-reply", text: "…", placement: "first-unanswered", unansweredCount: N}. It is placed automatically under the first unanswered question; the person did not select that question. N counts the other question slots still empty in humanAnswers after that placement. Earlier button answers stay intact. Read text as the person's words, never as an option id even if the strings match. The typed reply still closes the decision with the other questions unanswered; done is not approval. If every button answer was already recorded, that final answer set stays intact and the typed reply remains in its correlated reply row. Keep the brief complete: the questions add buttons, they do not replace the explanation.

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

If an existing agent-owned row must wait for a decision, block it on the new live qitem ID (rig queue block <work-id> --on <human-qitem-id> ...), not on the human address. Completion of the human qitem resumes its dependants. Blocking on the human as well would issue another notification for the same decision.

The row persists before bounded delivery verification. Read its qitem ID and verification result; posted proves connector posting, not human readership. transport-failed, never-posted, or a pending/indeterminate result leaves the row intact. Inspect that same row and its next action; never create a second row or blindly resend because verification timed out.

bash
rig queue transitions <qitem-id>

For update, confirmed complete delivery may close the delivery obligation. It creates no approval obligation and cannot be used as a decision blocker. Delivered updates remain queryable for Feed; a failure or ambiguous send stays separate. A root message alone does not prove supplemental delivery. Retries reconcile stable part identities and send only missing parts. An FYI reply is not a human decision.

For a decision, a correlated reply binds to that exact human and qitem and records the resolution that resumes the owner. Check the recorded result before claiming the decision arrived; a delivery receipt alone is not acceptance.

Existing blockers and other channels

An existing agent-owned row may be blocked on <entityId>@host. That is an internal custody label resolved through the human registry to the same external participant; it is not a second delivery address. Keep the owner and continuation on that row. Inspect its existing delivery receipt before considering another request, so a legacy blocker does not produce a duplicate message. Never derive @host from the current rig name.

rig send reaches an agent's terminal only. It is not a human transport or a durable human obligation. Agent-to-agent work uses the queue handoff path. Connector-specific configuration and handles belong to registry/readiness tools, not to project-independent message instructions.

© 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 skills/_canonical/core/messaging-the-human of mvschwarz/openrig.

Open the folder on GitHubat commit 4b48ca2

Compare with similar skills

Human Messaging Transport 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.

Human Messaging Transport compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Human Messaging Transport this skillmvschwarz/openrig6.6k—~2.1kAutomated safety check: PassApache-2.0
Fleet Manager for Agent Sessionsasgeirtj/system_prompts_leaks69k—~2.5kAutomated safety check: PassCC0-1.0
Autonomous Agent Patternsdavila7/claude-code-templates33k7 repos~5.6kAutomated safety check: PassMIT
Workflow AutomationJoelLewis/finance_skills206—~7.3kAutomated safety check: PassMIT
Crisis And Moderationsocial-media-skills/skills134—~1.7kAutomated safety check: PassMIT
Ship Featuretheexperiencecompany/gaia308—~2.7kAutomated safety check: NotesCustom licence

Similar skills

  • Fleet Manager for Agent Sessions

    asgeirtj/system_prompts_leaks

    Shows one digest of coding-agent sessions across your connected machines and lets you open, read, steer, approve, stop and close them, over Herdr, tmux or MSP.

    69k GitHub stars~2.5k tokensUpdated today
    Agent WorkflowsAuto-check passed
  • Autonomous Agent Patterns

    davila7/claude-code-templates

    Design patterns for building autonomous coding agents. An agent skill from davila7/claude-code-templates.

    33k GitHub starsUsed in 7 repos~5.6k tokens
    Agent WorkflowsAuto-check passed
  • Workflow Automation

    JoelLewis/finance_skills

    Design human-in-the-loop workflow orchestration for securities operations: task routing, approval chains, and SLA monitoring.

    206 GitHub stars~7.3k tokensUpdated 2 mo ago
    Agent WorkflowsAuto-check passed
  • Crisis And Moderation

    social-media-skills/skills

    A skill your agent uses when something goes wrong on social — the crisis-and-moderation playbook for negative moments, pile-ons, misinformation/deepfakes about the brand, offensive-post backlash…

    134 GitHub stars~1.7k tokensUpdated 8 days ago
    Agent WorkflowsAuto-check passed
  • Ship Feature

    theexperiencecompany/gaia

    Autonomously ship a feature end-to-end with zero human intervention: plan it, implement it, review it with a team of subagents, boot the full stack, drive it in a real browser like a user…

    308 GitHub stars~2.7k tokensUpdated today
    Agent WorkflowsAuto-check: notes
  • Official

    Keeps a TSV decision log for long or unattended agent runs, one row per decision with what, why, evidence and result, so a reviewer can check the work later.

    11k GitHub starsUsed in 8 repos~1.6k 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.

    6.6k GitHub stars~2.9k tokensUpdated today
    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.

    6.6k GitHub stars~864 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.

    6.6k GitHub stars~2.6k 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.

    6.6k GitHub stars~2.5k 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.

    6.6k GitHub stars~341 tokensUpdated today
    Auto-check passed
  • Agent Starters

    mvschwarz/openrig

    Covers authoring, inspecting, refreshing, promoting and deprecating named Agent Starters, the reusable starting points for agent seats in a rig.

    6.6k GitHub stars~1.7k tokensUpdated today
    Auto-check passed

Questions about Human Messaging Transport

What does Human Messaging Transport do?

Supplies the mechanics for sending a message to a registered human, discovering who to contact, checking the channel is ready, and drafting a short, phone-readable brief. This skill is deliberately transport-neutral: it does not decide when or why to contact a human, nor does installing it create an approval gate, since a separate project policy is meant to supply that judgment. If policy leaves a decision's ownership ambiguous, the skill's job is to name the missing authority rather than convert a solvable technical problem into a human gate on its own.

When should I use Human Messaging Transport?

Human Messaging Transport fits situations like: sending a human a decision request with a clear recommendation and tradeoff; sending a quiet status update that needs no action; checking whether a messaging channel to a human is actually ready before sending; finding the right registered human to contact when several exist.

How do I install Human Messaging Transport in Claude Code?

Run `npx skills add mvschwarz/openrig --skill messaging-the-human -a claude-code`. Or copy the skill folder (skills/_canonical/core/messaging-the-human in mvschwarz/openrig) into .claude/skills/messaging-the-human in your project. Claude Code loads it when a task matches its description.

How do I install Human Messaging Transport in Codex?

Run `npx skills add mvschwarz/openrig --skill messaging-the-human -a codex`. Or copy the skill folder (skills/_canonical/core/messaging-the-human in mvschwarz/openrig) into .agents/skills/messaging-the-human in your project. Codex loads it when a task matches its description.

Can I use Human Messaging Transport 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 messaging-the-human -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/messaging-the-human, .gemini/skills/messaging-the-human, .github/skills/messaging-the-human and .opencode/skills/messaging-the-human in your project.

What does Human Messaging Transport need to run?

SKILL.md names no scripts, command-line tools or credentials: Human Messaging Transport is instructions for the agent only. Our summary lists: The rig gateway CLI with at least one registered human participant.

Does Human Messaging Transport 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 Human Messaging Transport 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 Human Messaging Transport use?

Human Messaging Transport 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 Human Messaging Transport use?

About 2.1k tokens (SKILL.md is roughly 8.2k 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 Human Messaging Transport?

Skills that share tags, products or a category with Human Messaging Transport: Fleet Manager for Agent Sessions (asgeirtj/system_prompts_leaks, 69k stars), Autonomous Agent Patterns (davila7/claude-code-templates, 33k stars), Workflow Automation (JoelLewis/finance_skills, 206 stars) and Crisis And Moderation (social-media-skills/skills, 134 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Human Messaging Transport?

mvschwarz (a GitHub user) maintains it in mvschwarz/openrig, which has 6,551 GitHub stars. The repository holds 49 skills in this directory. The repository was last updated on October 10, 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.