agent-chat

SkillFiles & storage

XMTP real-time agent-to-agent and user-to-agent encrypted messaging daemon for EverClaw. Manages always-on messaging via XMTP MLS protocol with multi-identity buddy bot support, filesystem-based IPC bridge, consent policies, and cross-platform daemon lifecycle (launchd/systemd). Use when setting up XMTP messaging, managing agent identities, configuring buddy bots, troubleshooting message delivery, or controlling the agent-chat daemon.

Available today. Use it from your connected AI after setup.

Add ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.

Then ask your AI: use the agent-chat skill

What this skill tells your AI

The instructions your AI receives, as published by profbernardoj/everclaw-community-branches in skills/agent-chat/SKILL.md and read by ahel’s review.

XMTP real-time agent-to-agent and user-to-agent messaging for EverClaw.

Overview

Always-on daemon providing E2E-encrypted messaging via XMTP's MLS protocol. Runs as a separate process managed by launchd (macOS) or systemd (Linux), communicating with OpenClaw through a filesystem bridge.

Version

0.2.0

Dependencies

  • @xmtp/agent-sdk ^2.3.0
  • xmtp-comms-guard ^6.0.0 (peer)
  • Node.js >= 20.0.0

Quick Start

# 1. Generate XMTP identity (one-time)
node skills/agent-chat/setup-identity.mjs

# 2. Install daemon as system service
bash scripts/setup-agent-chat.sh

# 3. Check status
bash scripts/setup-agent-chat.sh --status

Daemon Management

The setup-agent-chat.sh script installs the XMTP daemon as a persistent system service.

Commands

# Install and start daemon (auto-detects OS)
bash scripts/setup-agent-chat.sh

# Check daemon status
bash scripts/setup-agent-chat.sh --status

# View recent logs
bash scripts/setup-agent-chat.sh --logs

# Restart daemon
bash scripts/setup-agent-chat.sh --restart

# Uninstall daemon
bash scripts/setup-agent-chat.sh --uninstall

# Install without starting
bash scripts/setup-agent-chat.sh --skip-start

Platform Support

PlatformService ManagerLocationLogs
macOSlaunchd~/Library/LaunchAgents/com.everclaw.agent-chat.plist~/.everclaw/logs/agent-chat.*
Linuxsystemd (user)~/.config/systemd/user/everclaw-agent-chat.servicejournalctl --user -u everclaw-agent-chat

Note: Linux uses user-level systemd (no sudo required). All services run as your user account.

Manual Commands

macOS (launchd):

# Check if loaded
launchctl list | grep everclaw

# View logs
tail -f ~/.everclaw/logs/agent-chat.log

# Stop/start
launchctl bootout gui/$(id -u)/com.everclaw.agent-chat
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.everclaw.agent-chat.plist

Linux (systemd):

# Check status
systemctl --user status everclaw-agent-chat

# View logs
journalctl --user -u everclaw-agent-chat -f

# Stop/start
systemctl --user stop everclaw-agent-chat
systemctl --user start everclaw-agent-chat

Architecture

  • Process model: Separate always-on daemon (not in-process with OpenClaw)
  • IPC: Filesystem bridge (~/.everclaw/xmtp/outbox/ → inbox/)
  • Message format: V6 JSON inside XMTP text content type
  • Consent: Configurable per-agent (open/handshake/strict)
  • Middleware chain: Consent → CommsGuard V6 → Router

Identity Model

Two-tier:

  • 28 flavor canonical wallets — project-controlled, open consent
  • Per-user wallets — generated at install, handshake consent

XMTP wallet is messaging-only — no funds. Separate from MOR staking wallet.

CLI Reference

# Identity status
node skills/agent-chat/cli.mjs status

# Daemon health
node skills/agent-chat/cli.mjs health

# List peer groups
node skills/agent-chat/cli.mjs groups

# Trust a peer (allow messages)
node skills/agent-chat/cli.mjs trust-peer 0x... --as colleague --name "Agent Name"

# List trusted peers
node skills/agent-chat/cli.mjs peers list

# Send a message (via outbox)
node skills/agent-chat/cli.mjs send 0x... "Hello, agent!"

Files

FilePurpose
daemon.mjsEntry point for launchd/systemd
cli.mjsCLI commands
setup-identity.mjsOne-time key generation
src/agent.mjsAgent creation + middleware wiring
src/identity.mjsSecret/identity loading (multi-identity: agentId param)
src/paths.mjsPath resolution + agent ID validation (multi-identity)
src/consent.mjs3-policy consent gate
src/router.mjsMessage routing (COMMAND/DATA dispatch)
src/bridge.mjsFilesystem outbox watcher (multi-identity: agentId param)
src/health.mjsHealth file writer (multi-identity: agentId param)
src/health.mjsHealth file writer
src/groups.mjsGroup conversation mapping
src/payer.mjsFee stub (network currently free)
src/index.mjsPublic API re-exports

Multi-Identity (Buddy Bots)

Each buddy bot agent gets its own XMTP identity, daemon process, and data directory. This is called "multi-identity" mode — one daemon per agent, running as independent services.

Directory Layout

AgentData DirectoryService (macOS)Service (Linux)
Host (default)~/.everclaw/xmtp/com.everclaw.agent-chateverclaw-agent-chat
Alice~/.everclaw/xmtp-alice/com.everclaw.agent-chat.aliceeverclaw-agent-chat-alice
Bob~/.everclaw/xmtp-bob/com.everclaw.agent-chat.bobeverclaw-agent-chat-bob

Each agent's directory contains its own .secrets.json, identity.json, inbox/, outbox/, and peers.json — fully isolated from other agents.

Agent ID Rules

Agent IDs must be:

  • 1-63 characters
  • Lowercase alphanumeric + hyphens only
  • Must start with a letter or digit (no leading hyphens)
  • No path traversal characters (.., /, etc.)

This prevents directory traversal attacks and service name conflicts.

Setup

# Generate identity for a buddy bot
node skills/agent-chat/setup-identity.mjs --agent-id alice

# Install daemon for that buddy bot
bash scripts/setup-agent-chat.sh --agent-id alice

# List all installed daemons
bash scripts/setup-agent-chat.sh --list

# Check status of a specific agent
bash scripts/setup-agent-chat.sh --status --agent-id alice

# Restart a specific agent
bash scripts/setup-agent-chat.sh --restart --agent-id alice

# Uninstall a specific agent
bash scripts/setup-agent-chat.sh --uninstall --agent-id alice

Environment Variables

VariablePurpose
AGENT_CHAT_AGENT_IDAgent ID (alternative to --agent-id flag)
AGENT_CHAT_XMTP_DIROverride XMTP data directory (default agent only)
EVERCLAW_HOMEBase directory (default: ~/.everclaw)

AGENT_CHAT_XMTP_DIR only affects the default (host) agent. Per-agent paths always resolve from EVERCLAW_HOME to maintain isolation.

How It Works

Each per-agent service file (launchd plist or systemd unit) contains the AGENT_CHAT_AGENT_ID environment variable. When the daemon starts, it reads this env var and resolves all paths accordingly:

  1. AGENT_CHAT_AGENT_ID=alice → data dir is ~/.everclaw/xmtp-alice/
  2. No env var → data dir is ~/.everclaw/xmtp/ (default host)

The --agent-id CLI flag takes priority over the env var, allowing manual overrides.

Security

  • Each agent's data directory is chmod 700
  • Each agent's .secrets.json is chmod 600
  • Agent IDs are validated against a strict regex to prevent path traversal and service injection
  • Agents cannot access each other's wallets, messages, or peer lists

Security

  • Keys stored in ~/.everclaw/xmtp/.secrets.json (chmod 600)
  • Directory secured: ~/.everclaw/xmtp/ (chmod 700)
  • Path traversal protection on inbox writes
  • Agent ID validation: regex /^[a-z0-9][a-z0-9-]{0,62}$/ prevents directory traversal and service injection
  • CommsGuard V6 validates all structured messages
  • Plain text messages bypass comms-guard (acceptable for agent-to-agent v1)

Troubleshooting

Daemon won't start

  1. Check Node.js version: node --version (need >= 20.0.0)
  2. Verify identity exists: ls ~/.everclaw/xmtp/.secrets.json
  3. Check logs: bash scripts/setup-agent-chat.sh --logs
  4. Reinstall: bash scripts/setup-agent-chat.sh --uninstall && bash scripts/setup-agent-chat.sh

Messages not sending

  1. Check peer is trusted: node skills/agent-chat/cli.mjs peers list
  2. Check daemon health: node skills/agent-chat/cli.mjs health
  3. Check outbox queue: ls ~/.everclaw/xmtp/outbox/
  4. Check daemon is running: bash scripts/setup-agent-chat.sh --status

XMTP installation limit

XMTP limits the number of installations per identity. If you see warnings about installation limits:

  1. Check installations: node skills/agent-chat/cli.mjs status
  2. Revoke old installations via XMTP console (if available)
  3. Generate new identity: node skills/agent-chat/setup-identity.mjs (creates new address)

Signals

GitHub stars
112
Forks
20
Last commit
Sep 2026

ahel review

  • K1binfo
    installs-packages (in README.md)

Automated review, not a security audit. Ruleset v1+k2.

Advanced
Item type
skill
Key
agent-chat
Source
github.com/profbernardoj/everclaw-community-branches