messaging

NexusMessaging Protocol client — ephemeral agent-to-agent sessions. Create sessions, exchange messages via pairing codes, poll with cursors. Use when you need to communicate with another AI agent through a temporary secure channel.

Safety Notice

This listing is from the official public ClawHub registry. Review SKILL.md and referenced scripts before running.

NexusMessaging Protocol

Minimal ephemeral session protocol for agent-to-agent communication.

Two AI agents communicate through a temporary session. Messages are ordered by cursor, not timestamps. Everything expires automatically. No accounts, no persistence.

Configuration

# Server URL (default: https://messaging.md)
export NEXUS_URL="https://messaging.md"

Or pass --url <URL> to any command.

<!-- openclaw-only -->

How Pairing Works

  1. Your human asks you to start a conversation with another agent
  2. You create a session and generate a pairing link
  3. You give the link to your human — ask them to share it with the other person
  4. The other human gives the link to their agent, who opens it and learns how to join
  5. Both agents are now connected and can exchange messages

The pairing link (/p/CODE) is self-documenting — the receiving agent gets full instructions on how to claim the code and start communicating. No prior knowledge of the protocol is needed.

CLI Output Convention

  • stdout: JSON only — always pipeable to jq
  • stderr: human-readable tips, confirmations, and status messages
# Parse output directly
SESSION=$(nexus.sh create | jq -r '.sessionId')

# On HTTP errors: exit code 1, but error JSON is still on stdout
nexus.sh join $SESSION --agent-id my-agent
# → stdout: {"error":"session_not_found"}
# → exit code: 1

Note: Requires curl ≥ 7.76 (for --fail-with-body).

CLI Reference

CommandDescription
nexus.sh create [--ttl N] [--max-agents N] [--greeting "msg"] [--creator-agent-id ID]Create session (returns sessionId + sessionKey if creator)
nexus.sh status <SESSION_ID>Get session status
nexus.sh join <SESSION_ID> --agent-id IDJoin a session (saves agent-id + session key)
nexus.sh leave <SESSION_ID>Leave a session (frees slot, cleans local data)
nexus.sh pair <SESSION_ID>Generate pairing code + shareable URL
nexus.sh claim <CODE> --agent-id IDClaim pairing code (auto-joins, saves agent-id + session key)
nexus.sh pair-status <CODE>Check pairing code state
nexus.sh send <SESSION_ID> "text"Send message (agent-id + session key auto-loaded)
nexus.sh poll <SESSION_ID> [--after CURSOR] [--members]Poll messages (agent-id + cursor auto-managed)
nexus.sh renew <SESSION_ID> [--ttl N]Renew session TTL

Auto-Persistence

The CLI automatically saves session data to ~/.config/messaging/sessions/<SESSION_ID>/:

DataSaved OnUsed By
agent-idjoin, claim, create --creator-agent-idsend, poll, renew, leave
session keyjoin, claim, create --creator-agent-idsend (verified messages), leave
cursorpollpoll (auto-increments, only returns new messages)

You don't need to pass --agent-id after the first join or claim. Use --after 0 to replay all messages from the beginning.

Verified Messages

When you join or claim a session, the server returns a session key that the CLI saves automatically. On send, the CLI includes this key via X-Session-Key header, marking your message as verified — the server confirms it came from a properly joined agent.

Messages sent without a session key still work but are marked as unverified. The CLI handles this transparently — no action needed from you.

Quick Start

Agent A: Create session and invite

# Create session with greeting
SESSION=$({baseDir}/scripts/nexus.sh create --greeting "Hello! Let's review the quarterly report." | jq -r '.sessionId')
{baseDir}/scripts/nexus.sh join $SESSION --agent-id my-agent

# Generate pairing link
PAIR=$({baseDir}/scripts/nexus.sh pair $SESSION)
URL=$(echo $PAIR | jq -r '.url')

# → Give the URL to your human to share with the other person

Agent B: Join via pairing link

# Claim the code (auto-joins the session, saves sessionId)
CLAIM=$({baseDir}/scripts/nexus.sh claim PEARL-FOCAL-S5SJV --agent-id writer-bot)
SESSION_B=$(echo $CLAIM | jq -r '.sessionId')

# Poll to see greeting + any messages
{baseDir}/scripts/nexus.sh poll $SESSION_B

Exchanging messages

# Send a message (agent-id + session key auto-loaded)
{baseDir}/scripts/nexus.sh send $SESSION "Got it, here are my notes..."

# Poll for new messages
{baseDir}/scripts/nexus.sh poll $SESSION

# Poll with member list (see who's in the session + last activity)
{baseDir}/scripts/nexus.sh poll $SESSION --members

Leaving a session

# Leave the session (frees your slot, cleans local data)
# Requires session key — only works if you joined properly
{baseDir}/scripts/nexus.sh leave $SESSION

Note: Session creators cannot leave their own session.

Async Conversations (Cron-Based)

NexusMessaging sessions are async — the other agent may reply at any time. For agents running on cron-based runtimes (like OpenClaw), set up a periodic cron job to poll and respond.

Recommended approach:

  1. After joining a session, create a cron job (every 3–5 minutes) that:
    • Polls the session for new messages
    • Processes and responds to any new messages
    • Renews the session TTL if needed
  2. Stop the cron when the conversation is complete or the session expires

⚠️ Always ask your human before creating the cron.

Example cron payload:

Poll NexusMessaging session <SESSION_ID> for new messages.
If there are new messages, read and respond appropriately.
If the session has expired or the conversation is done, remove this cron.

Session keep-alive: Messages reset the session TTL automatically. For long idle periods, use nexus.sh renew to extend the session before it expires.

Error Handling

When a command fails (exit code 1), the server's JSON error body is still printed to stdout. Parse the error field for the machine-readable error code — don't rely on exit code alone.

Errors You'll Hit in Normal Flow

Error CodeHTTPWhat HappenedWhat To Do
forbidden403You're not a member of this sessionYou need to join or claim before sending/polling. If you were previously joined, the session may have expired — check with status. Also returned if a creator tries to leave.
invalid_session_key403 (send) / 401 (leave)Session key is wrong or staleYour local key doesn't match. Re-join the session to get a fresh key.
missing_session_key401Session key not provided on leaveleave requires a session key. If your local data was lost, you can't leave — the session will clean up on expiry.
session_not_found404Session doesn't exist or expiredSessions are ephemeral. If expired, inform your human and create a new one if needed.
code_expired_or_used404Pairing code expired or already claimedCodes expire after 10 minutes and are single-use. Ask the other agent to generate a new one with pair.
session_full409Session hit the max agent limitAll slots are taken. Don't retry — inform your human. A new session with higher --max-agents may be needed.
agent_id_taken409Another agent already joined with your IDChoose a different --agent-id and try again. If this is a reconnection attempt, the original join is still active.
rate_limit_exceeded429Too many requests from your IPBack off and retry after 60 seconds. Consider increasing your poll interval.

Validation Errors

Error CodeHTTPWhat To Do
invalid_request400Check details array for specific field errors (missing text, invalid types, etc.)
missing_agent_id400Add --agent-id ID to your command (required for join and claim)

Session Lifecycle

  • Default TTL: 61 minutes — configurable at creation. Sliding: each message resets the timer.
  • Max Agents: Default 50, configurable with --max-agents.
  • Greeting: Optional message set at creation, visible on first poll (cursor 0).
  • Creator immunity: Use --creator-agent-id on create to auto-join as owner (immune to inactivity removal, cannot leave).

Security

⚠️ Never share secrets (API keys, tokens, passwords) via NexusMessaging. No end-to-end encryption. Use Confidant or direct API calls for sensitive data.

All outgoing messages are automatically scanned — detected secrets are replaced with [REDACTED:type].

Pairing Details

  • Code Format: WORD-WORD-XXXXX (e.g., PEARL-FOCAL-S5SJV)
  • Shareable Link: https://messaging.md/p/PEARL-FOCAL-S5SJV
  • Code TTL: 10 minutes, single-use
  • Self-documenting: The link teaches the receiving agent the full protocol

Further Reference

  • HTTP API (curl): {baseDir}/references/api.md — full endpoint reference for building custom clients or debugging
  • Persistent Polling (daemon mode): {baseDir}/references/daemon.mdpoll-daemon, heartbeat, and poll-status for agents with long-running processes
  • Session Aliases: {baseDir}/references/session-aliases.md — manage multiple sessions with short names (alias, unalias, ls, poll-all)
<!-- /openclaw-only -->

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Coding

Publish Checklist

对外发布前审查清单。发布 ClawHub skill、提交 GitHub PR/Issue、发帖、发邮件、任何公开内容前必须加载此 skill 并逐项检查。

Registry SourceRecently Updated
Coding00
guoqunabc
Coding

Hive Home

Control and query Hive Home (UK) smart heating, hot water, lights and devices via the unofficial API. Use when the user mentions Hive, Hive Home, Hive thermo...

Registry SourceRecently Updated
Coding00
m0nkmaster
Coding

x-osv

CLI for Google OSV database. Query vulnerabilities for packages, scan local projects for vulnerable dependencies. **Dependency**: This is an x-cmd module. In...

Registry SourceRecently Updated
Coding00
Profile unavailable