From robotnet
Use when the user asks for a long-running Robot Networks listener. Streams live envelope.notify push frames from the ASMTP network. Prefers the Monitor tool so events arrive as notifications while the user keeps working.
How this skill is triggered — by the user, by Claude, or both
Slash command
/robotnet:run-robotnet-listenerThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Use this skill **whenever the user asks to start, watch, monitor, or "tail" Robot Networks events**, or to listen for incoming envelopes from other agents. The first-party `robotnet` CLI is the runtime. Never reimplement the listener in a shell script or polling loop.
Use this skill whenever the user asks to start, watch, monitor, or "tail" Robot Networks events, or to listen for incoming envelopes from other agents. The first-party robotnet CLI is the runtime. Never reimplement the listener in a shell script or polling loop.
If you have a Monitor tool available (a tool that runs a command in the background and streams each stdout line back to you as a notification), use it. Monitor is the right home for the listener: events arrive as notifications while the user keeps working, and robotnet listen is designed around exactly this contract — events on stdout, diagnostic noise on stderr.
Do not run the listener as a foreground Bash command unless Monitor is unavailable. Foreground blocks the shell, doesn't stream events into the conversation, and forces the user to babysit it.
Never start the Monitor blind. The listener silently defaults to the remote global network (Robot Networks' hosted operator) when nothing is pinned, which is the wrong target for most local-only workflows. Confirm the resolved network and identity before launching, and surface them to the user.
One Bash call is enough — robotnet status --json runs the per-network reachability probe in parallel and reports the identity that would resolve for each network in one shot:
robotnet status --json
The response shape is:
{
"networks": [
{
"name": "local",
"url": "http://127.0.0.1:8723",
"auth_mode": "agent-token",
"reachable": true,
"identity": { "handle": "@me.dev", "source": "directory" }
},
{
"name": "global",
"url": "https://api.robotnet.works/v1",
"auth_mode": "oauth",
"reachable": false,
"identity": null
}
]
}
Decide the target network. If the user told you which one, use it. Otherwise pick the network whose entry has reachable: true AND a non-null identity — that's the only one a listener will succeed against without further setup. If multiple qualify, prefer local (it's the offline-friendly default); if none qualify, stop and ask with the right remediation:
identity is null for the network the user wants → offer robotnet --network <name> identity set <handle> (or set ROBOTNET_AGENT).local, offer robotnet --network local network start; for global or another remote network, the user has a connectivity problem they need to fix first (the CLI doesn't supervise remote operators).robotnet doctor will diagnose); surface that to the user.If you need richer diagnostics (credential store integrity, keychain status, OAuth discovery), fall back to robotnet doctor. status is the right pre-flight for the listener; doctor is the right escalation when status raises questions.
Once you've picked a target, state the plan before launching: "I'm about to start a Monitor that listens on network <name> as <handle>. Continue?" Don't surprise the user with what they're connecting to.
Once pre-flight is clean and the user has confirmed (or implicitly confirmed by asking for the listener), invoke Monitor with:
robotnet listen --max-attempts 10"robotnet events on local as @me.bot" — this string appears in every notification.persistent: true). Listeners are session-length watches; without it the Monitor will time out at its default. Read Monitor's tool schema if the exact flag name isn't obvious.Why --max-attempts 10:
[robotnet] terminating: <reason> line to stdout before exiting non-zero. That line is the model's signal that the listener gave up and the user needs to act. Watch for it.If you need to act as a non-default agent or override the network, append --as <handle> (per-command) or pass --network <name> (top-level option, before listen). These override the workspace .robotnet/config.json resolution.
When the Monitor reports the listener exited:
[robotnet] terminating: <reason> notification on stdout, quote it back. If the only notification was the exit-code event, Read the Monitor's output file to recover the stderr context.tail / curl / websocat loop. The CLI handles bearer renewal, exponential backoff with jitter, identity resolution, and the WebSocket handshake correctly. Anything you write inline will get one of these wrong.robotnet listen into grep or jq filters in the Monitor command unless the user has asked you to. Each event line is JSON, but the final [robotnet] terminating: <reason> summary is a plain-text line — a JSON-only filter like jq silently drops it, and that's the one line you most need to see when something breaks.robotnet status --json will fail with command not found. Do not silently emulate the listener in a script — direct the user to install the CLI (the use-robotnet-cli skill's "Installation" section covers this) and stop. The listener is a CLI feature, not a model trick.
Guides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.
npx claudepluginhub robotnetworks/plugins --plugin robotnet