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.
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.
$ npx skills add mvschwarz/openrig --skill messaging-the-human -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install mvschwarz/openrig messaging-the-human --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ 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-srcUse ~/.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/
Install the "messaging-the-human" agent skill from https://github.com/mvschwarz/openrig/tree/main/skills/_canonical/core/messaging-the-human into .claude/skills/messaging-the-human/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "messaging-the-human", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/mvschwarz/openrig/tree/main/skills/_canonical/core/messaging-the-humanType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add mvschwarz/openrig --skill messaging-the-human -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install mvschwarz/openrig messaging-the-human --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mvschwarz/openrig.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/_canonical/core/messaging-the-human .agents/skills/messaging-the-human && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "messaging-the-human" agent skill from https://github.com/mvschwarz/openrig/tree/main/skills/_canonical/core/messaging-the-human into .agents/skills/messaging-the-human/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "messaging-the-human", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add mvschwarz/openrig --skill messaging-the-human -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install mvschwarz/openrig messaging-the-human --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mvschwarz/openrig.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/_canonical/core/messaging-the-human .cursor/skills/messaging-the-human && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "messaging-the-human" agent skill from https://github.com/mvschwarz/openrig/tree/main/skills/_canonical/core/messaging-the-human into .cursor/skills/messaging-the-human/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "messaging-the-human", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/mvschwarz/openrig.git --path skills/_canonical/core/messaging-the-human--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add mvschwarz/openrig --skill messaging-the-human -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install mvschwarz/openrig messaging-the-human --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mvschwarz/openrig.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/_canonical/core/messaging-the-human .gemini/skills/messaging-the-human && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "messaging-the-human" agent skill from https://github.com/mvschwarz/openrig/tree/main/skills/_canonical/core/messaging-the-human into .gemini/skills/messaging-the-human/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "messaging-the-human", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install mvschwarz/openrig messaging-the-humanInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add mvschwarz/openrig --skill messaging-the-human -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/mvschwarz/openrig.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/_canonical/core/messaging-the-human .github/skills/messaging-the-human && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "messaging-the-human" agent skill from https://github.com/mvschwarz/openrig/tree/main/skills/_canonical/core/messaging-the-human into .github/skills/messaging-the-human/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "messaging-the-human", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add mvschwarz/openrig --skill messaging-the-human -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install mvschwarz/openrig messaging-the-human --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mvschwarz/openrig.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/_canonical/core/messaging-the-human .opencode/skills/messaging-the-human && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "messaging-the-human" agent skill from https://github.com/mvschwarz/openrig/tree/main/skills/_canonical/core/messaging-the-human into .opencode/skills/messaging-the-human/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "messaging-the-human", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
messaging-the-humanSupplies 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.
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.
Read from SKILL.md and the folder at commit 4b48ca2. It shows what the files ask for, not the result of running them.
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.
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.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
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.
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.
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.
The full file from mvschwarz/openrig at commit 4b48ca2, republished under its Apache-2.0 licence (© mvschwarz). 1,150 words, ~2,061 tokens.
.claude/skills/messaging-the-human/SKILL.md (or your agent's skills folder).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 the registered participants and inspect the chosen human:
rig gateway human list --json
rig gateway human show <entityId> --jsonUse 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:
rig queue create --destination <entityId>@external \
--human-intent decision --summary "<short subject>" --body-file <brief-file> \
--evidence-ref <durable-evidence> --verify --jsonAn 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.
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.
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.
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
Just SKILL.md in skills/_canonical/core/messaging-the-human of mvschwarz/openrig.
Open the folder on GitHubat commit 4b48ca2
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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Human Messaging Transport this skillmvschwarz/openrig | 6.6k | — | ~2.1k | Automated safety check: Pass | Apache-2.0 | |
| Fleet Manager for Agent Sessionsasgeirtj/system_prompts_leaks | 69k | — | ~2.5k | Automated safety check: Pass | CC0-1.0 | |
| Autonomous Agent Patternsdavila7/claude-code-templates | 33k | 7 repos | ~5.6k | Automated safety check: Pass | MIT | |
| Workflow AutomationJoelLewis/finance_skills | 206 | — | ~7.3k | Automated safety check: Pass | MIT | |
| Crisis And Moderationsocial-media-skills/skills | 134 | — | ~1.7k | Automated safety check: Pass | MIT | |
| Ship Featuretheexperiencecompany/gaia | 308 | — | ~2.7k | Automated safety check: Notes | Custom licence |
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.
davila7/claude-code-templates
Design patterns for building autonomous coding agents. An agent skill from davila7/claude-code-templates.
JoelLewis/finance_skills
Design human-in-the-loop workflow orchestration for securities operations: task routing, approval chains, and SLA monitoring.
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…
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…
cursor/plugins
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.
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.
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.
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.
mvschwarz/openrig
Separates a stable agent seat's identity from its changing occupant, and records honest, two-part provenance whenever one occupant replaces another.
mvschwarz/openrig
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.
mvschwarz/openrig
Covers authoring, inspecting, refreshing, promoting and deprecating named Agent Starters, the reusable starting points for agent seats in a rig.
Categories
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.