[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CR034XXZJS9D07CPCM71DV":3,"skill-same:01M6CR034XXZJS9D07CPCM71DV":223},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":49,"commitSha":50,"skillDirectory":51,"forksCount":14,"repositoryHtmlUrl":52,"repositoryHomepageUrl":6,"ownerHtmlUrl":53,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":54,"install":55,"resources":68},"01M6CR034XXZJS9D07CPCM71DV","agent-chat",null,"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\u002Fsystemd). Use when setting up XMTP messaging, managing agent identities, configuring buddy bots, troubleshooting message delivery, or controlling the agent-chat daemon.","profbernardoj\u002Ftravelclaw.org","profbernardoj","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F260372225?v=4","01M6CP4EET2Y0EWYRFH3DH7ZN7","Bernardo Johnston","01M6CQZ7ND3CDQ6ZKYD7K232SS",0,"MIT","https:\u002F\u002Fgithub.com\u002Fprofbernardoj\u002Ftravelclaw.org\u002Fblob\u002Fmain\u002Fskills\u002Fagent-chat\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"agent chat","user","delivery","message","bots","agent-to-agent","up","launchd","use","bridge","bot","filesystem","troubleshooting","lifecycle","real-time","systemd","messaging","protocol","identity","support","2026-11-10 10:12:30",false,"---\nname: agent-chat\ndescription: \"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\u002Fsystemd). Use when setting up XMTP messaging, managing agent identities, configuring buddy bots, troubleshooting message delivery, or controlling the agent-chat daemon.\"\n---\n\n# agent-chat\n\nXMTP real-time agent-to-agent and user-to-agent messaging for EverClaw.\n\n## Overview\n\nAlways-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.\n\n## Version\n\n0.2.0\n\n## Dependencies\n\n- `@xmtp\u002Fagent-sdk` ^2.3.0\n- `xmtp-comms-guard` ^6.0.0 (peer)\n- Node.js >= 20.0.0\n\n## Quick Start\n\n```bash\n# 1. Generate XMTP identity (one-time)\nnode skills\u002Fagent-chat\u002Fsetup-identity.mjs\n\n# 2. Install daemon as system service\nbash scripts\u002Fsetup-agent-chat.sh\n\n# 3. Check status\nbash scripts\u002Fsetup-agent-chat.sh --status\n```\n\n## Daemon Management\n\nThe `setup-agent-chat.sh` script installs the XMTP daemon as a persistent system service.\n\n### Commands\n\n```bash\n# Install and start daemon (auto-detects OS)\nbash scripts\u002Fsetup-agent-chat.sh\n\n# Check daemon status\nbash scripts\u002Fsetup-agent-chat.sh --status\n\n# View recent logs\nbash scripts\u002Fsetup-agent-chat.sh --logs\n\n# Restart daemon\nbash scripts\u002Fsetup-agent-chat.sh --restart\n\n# Uninstall daemon\nbash scripts\u002Fsetup-agent-chat.sh --uninstall\n\n# Install without starting\nbash scripts\u002Fsetup-agent-chat.sh --skip-start\n```\n\n### Platform Support\n\n| Platform | Service Manager | Location | Logs |\n|----------|----------------|----------|------|\n| macOS | launchd | `~\u002FLibrary\u002FLaunchAgents\u002Fcom.everclaw.agent-chat.plist` | `~\u002F.everclaw\u002Flogs\u002Fagent-chat.*` |\n| Linux | systemd (user) | `~\u002F.config\u002Fsystemd\u002Fuser\u002Feverclaw-agent-chat.service` | `journalctl --user -u everclaw-agent-chat` |\n\n**Note:** Linux uses user-level systemd (no sudo required). All services run as your user account.\n\n### Manual Commands\n\n**macOS (launchd):**\n```bash\n# Check if loaded\nlaunchctl list | grep everclaw\n\n# View logs\ntail -f ~\u002F.everclaw\u002Flogs\u002Fagent-chat.log\n\n# Stop\u002Fstart\nlaunchctl bootout gui\u002F$(id -u)\u002Fcom.everclaw.agent-chat\nlaunchctl bootstrap gui\u002F$(id -u) ~\u002FLibrary\u002FLaunchAgents\u002Fcom.everclaw.agent-chat.plist\n```\n\n**Linux (systemd):**\n```bash\n# Check status\nsystemctl --user status everclaw-agent-chat\n\n# View logs\njournalctl --user -u everclaw-agent-chat -f\n\n# Stop\u002Fstart\nsystemctl --user stop everclaw-agent-chat\nsystemctl --user start everclaw-agent-chat\n```\n\n## Architecture\n\n- **Process model**: Separate always-on daemon (not in-process with OpenClaw)\n- **IPC**: Filesystem bridge (`~\u002F.everclaw\u002Fxmtp\u002Foutbox\u002F` → `inbox\u002F`)\n- **Message format**: V6 JSON inside XMTP text content type\n- **Consent**: Configurable per-agent (`open`\u002F`handshake`\u002F`strict`)\n- **Middleware chain**: Consent → CommsGuard V6 → Router\n\n## Identity Model\n\nTwo-tier:\n- **28 flavor canonical wallets** — project-controlled, `open` consent\n- **Per-user wallets** — generated at install, `handshake` consent\n\nXMTP wallet is messaging-only — no funds. Separate from MOR staking wallet.\n\n## CLI Reference\n\n```bash\n# Identity status\nnode skills\u002Fagent-chat\u002Fcli.mjs status\n\n# Daemon health\nnode skills\u002Fagent-chat\u002Fcli.mjs health\n\n# List peer groups\nnode skills\u002Fagent-chat\u002Fcli.mjs groups\n\n# Trust a peer (allow messages)\nnode skills\u002Fagent-chat\u002Fcli.mjs trust-peer 0x... --as colleague --name \"Agent Name\"\n\n# List trusted peers\nnode skills\u002Fagent-chat\u002Fcli.mjs peers list\n\n# Send a message (via outbox)\nnode skills\u002Fagent-chat\u002Fcli.mjs send 0x... \"Hello, agent!\"\n```\n\n## Files\n\n| File | Purpose |\n|------|---------|\n| `daemon.mjs` | Entry point for launchd\u002Fsystemd |\n| `cli.mjs` | CLI commands |\n| `setup-identity.mjs` | One-time key generation |\n| `src\u002Fagent.mjs` | Agent creation + middleware wiring |\n| `src\u002Fidentity.mjs` | Secret\u002Fidentity loading (multi-identity: agentId param) |\n| `src\u002Fpaths.mjs` | Path resolution + agent ID validation (multi-identity) |\n| `src\u002Fconsent.mjs` | 3-policy consent gate |\n| `src\u002Frouter.mjs` | Message routing (COMMAND\u002FDATA dispatch) |\n| `src\u002Fbridge.mjs` | Filesystem outbox watcher (multi-identity: agentId param) |\n| `src\u002Fhealth.mjs` | Health file writer (multi-identity: agentId param) |\n| `src\u002Fhealth.mjs` | Health file writer |\n| `src\u002Fgroups.mjs` | Group conversation mapping |\n| `src\u002Fpayer.mjs` | Fee stub (network currently free) |\n| `src\u002Findex.mjs` | Public API re-exports |\n\n## Multi-Identity (Buddy Bots)\n\nEach 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.\n\n### Directory Layout\n\n| Agent | Data Directory | Service (macOS) | Service (Linux) |\n|-------|---------------|-----------------|-----------------|\n| Host (default) | `~\u002F.everclaw\u002Fxmtp\u002F` | `com.everclaw.agent-chat` | `everclaw-agent-chat` |\n| Alice | `~\u002F.everclaw\u002Fxmtp-alice\u002F` | `com.everclaw.agent-chat.alice` | `everclaw-agent-chat-alice` |\n| Bob | `~\u002F.everclaw\u002Fxmtp-bob\u002F` | `com.everclaw.agent-chat.bob` | `everclaw-agent-chat-bob` |\n\nEach agent's directory contains its own `.secrets.json`, `identity.json`, `inbox\u002F`, `outbox\u002F`, and `peers.json` — fully isolated from other agents.\n\n### Agent ID Rules\n\nAgent IDs must be:\n- 1-63 characters\n- Lowercase alphanumeric + hyphens only\n- Must start with a letter or digit (no leading hyphens)\n- No path traversal characters (`..`, `\u002F`, etc.)\n\nThis prevents directory traversal attacks and service name conflicts.\n\n### Setup\n\n```bash\n# Generate identity for a buddy bot\nnode skills\u002Fagent-chat\u002Fsetup-identity.mjs --agent-id alice\n\n# Install daemon for that buddy bot\nbash scripts\u002Fsetup-agent-chat.sh --agent-id alice\n\n# List all installed daemons\nbash scripts\u002Fsetup-agent-chat.sh --list\n\n# Check status of a specific agent\nbash scripts\u002Fsetup-agent-chat.sh --status --agent-id alice\n\n# Restart a specific agent\nbash scripts\u002Fsetup-agent-chat.sh --restart --agent-id alice\n\n# Uninstall a specific agent\nbash scripts\u002Fsetup-agent-chat.sh --uninstall --agent-id alice\n```\n\n### Environment Variables\n\n| Variable | Purpose |\n|----------|---------|\n| `AGENT_CHAT_AGENT_ID` | Agent ID (alternative to `--agent-id` flag) |\n| `AGENT_CHAT_XMTP_DIR` | Override XMTP data directory (default agent only) |\n| `EVERCLAW_HOME` | Base directory (default: `~\u002F.everclaw`) |\n\n`AGENT_CHAT_XMTP_DIR` only affects the default (host) agent. Per-agent paths always resolve from `EVERCLAW_HOME` to maintain isolation.\n\n### How It Works\n\nEach 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:\n\n1. `AGENT_CHAT_AGENT_ID=alice` → data dir is `~\u002F.everclaw\u002Fxmtp-alice\u002F`\n2. No env var → data dir is `~\u002F.everclaw\u002Fxmtp\u002F` (default host)\n\nThe `--agent-id` CLI flag takes priority over the env var, allowing manual overrides.\n\n### Security\n\n- Each agent's data directory is `chmod 700`\n- Each agent's `.secrets.json` is `chmod 600`\n- Agent IDs are validated against a strict regex to prevent path traversal and service injection\n- Agents cannot access each other's wallets, messages, or peer lists\n\n## Security\n\n- Keys stored in `~\u002F.everclaw\u002Fxmtp\u002F.secrets.json` (chmod 600)\n- Directory secured: `~\u002F.everclaw\u002Fxmtp\u002F` (chmod 700)\n- Path traversal protection on inbox writes\n- Agent ID validation: regex `\u002F^[a-z0-9][a-z0-9-]{0,62}$\u002F` prevents directory traversal and service injection\n- CommsGuard V6 validates all structured messages\n- Plain text messages bypass comms-guard (acceptable for agent-to-agent v1)\n\n## Troubleshooting\n\n### Daemon won't start\n\n1. Check Node.js version: `node --version` (need >= 20.0.0)\n2. Verify identity exists: `ls ~\u002F.everclaw\u002Fxmtp\u002F.secrets.json`\n3. Check logs: `bash scripts\u002Fsetup-agent-chat.sh --logs`\n4. Reinstall: `bash scripts\u002Fsetup-agent-chat.sh --uninstall && bash scripts\u002Fsetup-agent-chat.sh`\n\n### Messages not sending\n\n1. Check peer is trusted: `node skills\u002Fagent-chat\u002Fcli.mjs peers list`\n2. Check daemon health: `node skills\u002Fagent-chat\u002Fcli.mjs health`\n3. Check outbox queue: `ls ~\u002F.everclaw\u002Fxmtp\u002Foutbox\u002F`\n4. Check daemon is running: `bash scripts\u002Fsetup-agent-chat.sh --status`\n\n### XMTP installation limit\n\nXMTP limits the number of installations per identity. If you see warnings about installation limits:\n\n1. Check installations: `node skills\u002Fagent-chat\u002Fcli.mjs status`\n2. Revoke old installations via XMTP console (if available)\n3. Generate new identity: `node skills\u002Fagent-chat\u002Fsetup-identity.mjs` (creates new address)","# agent-chat\n\nXMTP real-time agent-to-agent and user-to-agent messaging for EverClaw.\n\n## Overview\n\nAlways-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.\n\n## Version\n\n0.2.0\n\n## Dependencies\n\n- `@xmtp\u002Fagent-sdk` ^2.3.0\n- `xmtp-comms-guard` ^6.0.0 (peer)\n- Node.js >= 20.0.0\n\n## Quick Start\n\n```bash\n# 1. Generate XMTP identity (one-time)\nnode skills\u002Fagent-chat\u002Fsetup-identity.mjs\n\n# 2. Install daemon as system service\nbash scripts\u002Fsetup-agent-chat.sh\n\n# 3. Check status\nbash scripts\u002Fsetup-agent-chat.sh --status\n```\n\n## Daemon Management\n\nThe `setup-agent-chat.sh` script installs the XMTP daemon as a persistent system service.\n\n### Commands\n\n```bash\n# Install and start daemon (auto-detects OS)\nbash scripts\u002Fsetup-agent-chat.sh\n\n# Check daemon status\nbash scripts\u002Fsetup-agent-chat.sh --status\n\n# View recent logs\nbash scripts\u002Fsetup-agent-chat.sh --logs\n\n# Restart daemon\nbash scripts\u002Fsetup-agent-chat.sh --restart\n\n# Uninstall daemon\nbash scripts\u002Fsetup-agent-chat.sh --uninstall\n\n# Install without starting\nbash scripts\u002Fsetup-agent-chat.sh --skip-start\n```\n\n### Platform Support\n\n| Platform | Service Manager | Location | Logs |\n|----------|----------------|----------|------|\n| macOS | launchd | `~\u002FLibrary\u002FLaunchAgents\u002Fcom.everclaw.agent-chat.plist` | `~\u002F.everclaw\u002Flogs\u002Fagent-chat.*` |\n| Linux | systemd (user) | `~\u002F.config\u002Fsystemd\u002Fuser\u002Feverclaw-agent-chat.service` | `journalctl --user -u everclaw-agent-chat` |\n\n**Note:** Linux uses user-level systemd (no sudo required). All services run as your user account.\n\n### Manual Commands\n\n**macOS (launchd):**\n```bash\n# Check if loaded\nlaunchctl list | grep everclaw\n\n# View logs\ntail -f ~\u002F.everclaw\u002Flogs\u002Fagent-chat.log\n\n# Stop\u002Fstart\nlaunchctl bootout gui\u002F$(id -u)\u002Fcom.everclaw.agent-chat\nlaunchctl bootstrap gui\u002F$(id -u) ~\u002FLibrary\u002FLaunchAgents\u002Fcom.everclaw.agent-chat.plist\n```\n\n**Linux (systemd):**\n```bash\n# Check status\nsystemctl --user status everclaw-agent-chat\n\n# View logs\njournalctl --user -u everclaw-agent-chat -f\n\n# Stop\u002Fstart\nsystemctl --user stop everclaw-agent-chat\nsystemctl --user start everclaw-agent-chat\n```\n\n## Architecture\n\n- **Process model**: Separate always-on daemon (not in-process with OpenClaw)\n- **IPC**: Filesystem bridge (`~\u002F.everclaw\u002Fxmtp\u002Foutbox\u002F` → `inbox\u002F`)\n- **Message format**: V6 JSON inside XMTP text content type\n- **Consent**: Configurable per-agent (`open`\u002F`handshake`\u002F`strict`)\n- **Middleware chain**: Consent → CommsGuard V6 → Router\n\n## Identity Model\n\nTwo-tier:\n- **28 flavor canonical wallets** — project-controlled, `open` consent\n- **Per-user wallets** — generated at install, `handshake` consent\n\nXMTP wallet is messaging-only — no funds. Separate from MOR staking wallet.\n\n## CLI Reference\n\n```bash\n# Identity status\nnode skills\u002Fagent-chat\u002Fcli.mjs status\n\n# Daemon health\nnode skills\u002Fagent-chat\u002Fcli.mjs health\n\n# List peer groups\nnode skills\u002Fagent-chat\u002Fcli.mjs groups\n\n# Trust a peer (allow messages)\nnode skills\u002Fagent-chat\u002Fcli.mjs trust-peer 0x... --as colleague --name \"Agent Name\"\n\n# List trusted peers\nnode skills\u002Fagent-chat\u002Fcli.mjs peers list\n\n# Send a message (via outbox)\nnode skills\u002Fagent-chat\u002Fcli.mjs send 0x... \"Hello, agent!\"\n```\n\n## Files\n\n| File | Purpose |\n|------|---------|\n| `daemon.mjs` | Entry point for launchd\u002Fsystemd |\n| `cli.mjs` | CLI commands |\n| `setup-identity.mjs` | One-time key generation |\n| `src\u002Fagent.mjs` | Agent creation + middleware wiring |\n| `src\u002Fidentity.mjs` | Secret\u002Fidentity loading (multi-identity: agentId param) |\n| `src\u002Fpaths.mjs` | Path resolution + agent ID validation (multi-identity) |\n| `src\u002Fconsent.mjs` | 3-policy consent gate |\n| `src\u002Frouter.mjs` | Message routing (COMMAND\u002FDATA dispatch) |\n| `src\u002Fbridge.mjs` | Filesystem outbox watcher (multi-identity: agentId param) |\n| `src\u002Fhealth.mjs` | Health file writer (multi-identity: agentId param) |\n| `src\u002Fhealth.mjs` | Health file writer |\n| `src\u002Fgroups.mjs` | Group conversation mapping |\n| `src\u002Fpayer.mjs` | Fee stub (network currently free) |\n| `src\u002Findex.mjs` | Public API re-exports |\n\n## Multi-Identity (Buddy Bots)\n\nEach 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.\n\n### Directory Layout\n\n| Agent | Data Directory | Service (macOS) | Service (Linux) |\n|-------|---------------|-----------------|-----------------|\n| Host (default) | `~\u002F.everclaw\u002Fxmtp\u002F` | `com.everclaw.agent-chat` | `everclaw-agent-chat` |\n| Alice | `~\u002F.everclaw\u002Fxmtp-alice\u002F` | `com.everclaw.agent-chat.alice` | `everclaw-agent-chat-alice` |\n| Bob | `~\u002F.everclaw\u002Fxmtp-bob\u002F` | `com.everclaw.agent-chat.bob` | `everclaw-agent-chat-bob` |\n\nEach agent's directory contains its own `.secrets.json`, `identity.json`, `inbox\u002F`, `outbox\u002F`, and `peers.json` — fully isolated from other agents.\n\n### Agent ID Rules\n\nAgent IDs must be:\n- 1-63 characters\n- Lowercase alphanumeric + hyphens only\n- Must start with a letter or digit (no leading hyphens)\n- No path traversal characters (`..`, `\u002F`, etc.)\n\nThis prevents directory traversal attacks and service name conflicts.\n\n### Setup\n\n```bash\n# Generate identity for a buddy bot\nnode skills\u002Fagent-chat\u002Fsetup-identity.mjs --agent-id alice\n\n# Install daemon for that buddy bot\nbash scripts\u002Fsetup-agent-chat.sh --agent-id alice\n\n# List all installed daemons\nbash scripts\u002Fsetup-agent-chat.sh --list\n\n# Check status of a specific agent\nbash scripts\u002Fsetup-agent-chat.sh --status --agent-id alice\n\n# Restart a specific agent\nbash scripts\u002Fsetup-agent-chat.sh --restart --agent-id alice\n\n# Uninstall a specific agent\nbash scripts\u002Fsetup-agent-chat.sh --uninstall --agent-id alice\n```\n\n### Environment Variables\n\n| Variable | Purpose |\n|----------|---------|\n| `AGENT_CHAT_AGENT_ID` | Agent ID (alternative to `--agent-id` flag) |\n| `AGENT_CHAT_XMTP_DIR` | Override XMTP data directory (default agent only) |\n| `EVERCLAW_HOME` | Base directory (default: `~\u002F.everclaw`) |\n\n`AGENT_CHAT_XMTP_DIR` only affects the default (host) agent. Per-agent paths always resolve from `EVERCLAW_HOME` to maintain isolation.\n\n### How It Works\n\nEach 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:\n\n1. `AGENT_CHAT_AGENT_ID=alice` → data dir is `~\u002F.everclaw\u002Fxmtp-alice\u002F`\n2. No env var → data dir is `~\u002F.everclaw\u002Fxmtp\u002F` (default host)\n\nThe `--agent-id` CLI flag takes priority over the env var, allowing manual overrides.\n\n### Security\n\n- Each agent's data directory is `chmod 700`\n- Each agent's `.secrets.json` is `chmod 600`\n- Agent IDs are validated against a strict regex to prevent path traversal and service injection\n- Agents cannot access each other's wallets, messages, or peer lists\n\n## Security\n\n- Keys stored in `~\u002F.everclaw\u002Fxmtp\u002F.secrets.json` (chmod 600)\n- Directory secured: `~\u002F.everclaw\u002Fxmtp\u002F` (chmod 700)\n- Path traversal protection on inbox writes\n- Agent ID validation: regex `\u002F^[a-z0-9][a-z0-9-]{0,62}$\u002F` prevents directory traversal and service injection\n- CommsGuard V6 validates all structured messages\n- Plain text messages bypass comms-guard (acceptable for agent-to-agent v1)\n\n## Troubleshooting\n\n### Daemon won't start\n\n1. Check Node.js version: `node --version` (need >= 20.0.0)\n2. Verify identity exists: `ls ~\u002F.everclaw\u002Fxmtp\u002F.secrets.json`\n3. Check logs: `bash scripts\u002Fsetup-agent-chat.sh --logs`\n4. Reinstall: `bash scripts\u002Fsetup-agent-chat.sh --uninstall && bash scripts\u002Fsetup-agent-chat.sh`\n\n### Messages not sending\n\n1. Check peer is trusted: `node skills\u002Fagent-chat\u002Fcli.mjs peers list`\n2. Check daemon health: `node skills\u002Fagent-chat\u002Fcli.mjs health`\n3. Check outbox queue: `ls ~\u002F.everclaw\u002Fxmtp\u002Foutbox\u002F`\n4. Check daemon is running: `bash scripts\u002Fsetup-agent-chat.sh --status`\n\n### XMTP installation limit\n\nXMTP limits the number of installations per identity. If you see warnings about installation limits:\n\n1. Check installations: `node skills\u002Fagent-chat\u002Fcli.mjs status`\n2. Revoke old installations via XMTP console (if available)\n3. Generate new identity: `node skills\u002Fagent-chat\u002Fsetup-identity.mjs` (creates new address)",{"name":5,"description":7},"main","c1316c556dc088bbc0886b228e2f48e330faf80c","skills\u002Fagent-chat","https:\u002F\u002Fgithub.com\u002Fprofbernardoj\u002Ftravelclaw.org","https:\u002F\u002Fgithub.com\u002Fprofbernardoj","2026-06-19 09:54:20",{"source":8,"skillName":5,"commands":56,"prompt":66,"zipAvailable":67},[57,60,63],{"tool":58,"command":59},"npx","npx skills add profbernardoj\u002Ftravelclaw.org --skill agent-chat",{"tool":61,"command":62},"bunx","bunx skills add profbernardoj\u002Ftravelclaw.org --skill agent-chat",{"tool":64,"command":65},"pnpm","pnpm dlx skills add profbernardoj\u002Ftravelclaw.org --skill agent-chat","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fprofbernardoj\u002Ftravelclaw.org\u002Fblob\u002Fmain\u002Fskills\u002Fagent-chat\u002FSKILL.md",true,[69,75,81,85,89,93,97,101,105,109,113,117,121,125,129,133,137,141,145,151,155,159,163,167,171,175,179,183,187,191,195,199,203,207,211,215,219],{"path":70,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":73,"sourceHtmlUrl":74},"CHANGELOG.md","REFERENCE","参考文档",2722,"https:\u002F\u002Fgithub.com\u002Fprofbernardoj\u002Ftravelclaw.org\u002Fblob\u002Fmain\u002Fskills\u002Fagent-chat\u002FCHANGELOG.md",{"path":76,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":79,"sourceHtmlUrl":80},"cli.mjs","SCRIPT","脚本",8154,"https:\u002F\u002Fgithub.com\u002Fprofbernardoj\u002Ftravelclaw.org\u002Fblob\u002Fmain\u002Fskills\u002Fagent-chat\u002Fcli.mjs",{"path":82,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":83,"sourceHtmlUrl":84},"config\u002Fdefault.json",595,"https:\u002F\u002Fgithub.com\u002Fprofbernardoj\u002Ftravelclaw.org\u002Fblob\u002Fmain\u002Fskills\u002Fagent-chat\u002Fconfig\u002Fdefault.json",{"path":86,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":87,"sourceHtmlUrl":88},"daemon.mjs",3610,"https:\u002F\u002Fgithub.com\u002Fprofbernardoj\u002Ftravelclaw.org\u002Fblob\u002Fmain\u002Fskills\u002Fagent-chat\u002Fdaemon.mjs",{"path":90,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":91,"sourceHtmlUrl":92},"package.json",519,"https:\u002F\u002Fgithub.com\u002Fprofbernardoj\u002Ftravelclaw.org\u002Fblob\u002Fmain\u002Fskills\u002Fagent-chat\u002Fpackage.json",{"path":94,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":95,"sourceHtmlUrl":96},"README.md",3527,"https:\u002F\u002Fgithub.com\u002Fprofbernardoj\u002Ftravelclaw.org\u002Fblob\u002Fmain\u002Fskills\u002Fagent-chat\u002FREADME.md",{"path":98,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":99,"sourceHtmlUrl":100},"setup-identity.mjs",4887,"https:\u002F\u002Fgithub.com\u002Fprofbernardoj\u002Ftravelclaw.org\u002Fblob\u002Fmain\u002Fskills\u002Fagent-chat\u002Fsetup-identity.mjs",{"path":102,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":103,"sourceHtmlUrl":104},"src\u002Fagent.mjs",6260,"https:\u002F\u002Fgithub.com\u002Fprofbernardoj\u002Ftravelclaw.org\u002Fblob\u002Fmain\u002Fskills\u002Fagent-chat\u002Fsrc\u002Fagent.mjs",{"path":106,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":107,"sourceHtmlUrl":108},"src\u002Fbridge.mjs",4433,"https:\u002F\u002Fgithub.com\u002Fprofbernardoj\u002Ftravelclaw.org\u002Fblob\u002Fmain\u002Fskills\u002Fagent-chat\u002Fsrc\u002Fbridge.mjs",{"path":110,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":111,"sourceHtmlUrl":112},"src\u002Fconsent.mjs",8050,"https:\u002F\u002Fgithub.com\u002Fprofbernardoj\u002Ftravelclaw.org\u002Fblob\u002Fmain\u002Fskills\u002Fagent-chat\u002Fsrc\u002Fconsent.mjs",{"path":114,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":115,"sourceHtmlUrl":116},"src\u002Fgroups.mjs",987,"https:\u002F\u002Fgithub.com\u002Fprofbernardoj\u002Ftravelclaw.org\u002Fblob\u002Fmain\u002Fskills\u002Fagent-chat\u002Fsrc\u002Fgroups.mjs",{"path":118,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":119,"sourceHtmlUrl":120},"src\u002Fhealth.mjs",1197,"https:\u002F\u002Fgithub.com\u002Fprofbernardoj\u002Ftravelclaw.org\u002Fblob\u002Fmain\u002Fskills\u002Fagent-chat\u002Fsrc\u002Fhealth.mjs",{"path":122,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":123,"sourceHtmlUrl":124},"src\u002Fidentity.mjs",2789,"https:\u002F\u002Fgithub.com\u002Fprofbernardoj\u002Ftravelclaw.org\u002Fblob\u002Fmain\u002Fskills\u002Fagent-chat\u002Fsrc\u002Fidentity.mjs",{"path":126,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":127,"sourceHtmlUrl":128},"src\u002Findex.mjs",358,"https:\u002F\u002Fgithub.com\u002Fprofbernardoj\u002Ftravelclaw.org\u002Fblob\u002Fmain\u002Fskills\u002Fagent-chat\u002Fsrc\u002Findex.mjs",{"path":130,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":131,"sourceHtmlUrl":132},"src\u002Fpaths.mjs",4465,"https:\u002F\u002Fgithub.com\u002Fprofbernardoj\u002Ftravelclaw.org\u002Fblob\u002Fmain\u002Fskills\u002Fagent-chat\u002Fsrc\u002Fpaths.mjs",{"path":134,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":135,"sourceHtmlUrl":136},"src\u002Fpayer.mjs",210,"https:\u002F\u002Fgithub.com\u002Fprofbernardoj\u002Ftravelclaw.org\u002Fblob\u002Fmain\u002Fskills\u002Fagent-chat\u002Fsrc\u002Fpayer.mjs",{"path":138,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":139,"sourceHtmlUrl":140},"src\u002Fpeers.mjs",7883,"https:\u002F\u002Fgithub.com\u002Fprofbernardoj\u002Ftravelclaw.org\u002Fblob\u002Fmain\u002Fskills\u002Fagent-chat\u002Fsrc\u002Fpeers.mjs",{"path":142,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":143,"sourceHtmlUrl":144},"src\u002Frouter.mjs",4836,"https:\u002F\u002Fgithub.com\u002Fprofbernardoj\u002Ftravelclaw.org\u002Fblob\u002Fmain\u002Fskills\u002Fagent-chat\u002Fsrc\u002Frouter.mjs",{"path":146,"resourceType":147,"resourceTypeDesc":148,"sizeBytes":149,"sourceHtmlUrl":150},"templates\u002Flaunchd\u002Fcom.everclaw.agent-chat.plist","OTHER","其他",924,"https:\u002F\u002Fgithub.com\u002Fprofbernardoj\u002Ftravelclaw.org\u002Fblob\u002Fmain\u002Fskills\u002Fagent-chat\u002Ftemplates\u002Flaunchd\u002Fcom.everclaw.agent-chat.plist",{"path":152,"resourceType":147,"resourceTypeDesc":148,"sizeBytes":153,"sourceHtmlUrl":154},"templates\u002Fsystemd\u002Feverclaw-agent-chat.service",613,"https:\u002F\u002Fgithub.com\u002Fprofbernardoj\u002Ftravelclaw.org\u002Fblob\u002Fmain\u002Fskills\u002Fagent-chat\u002Ftemplates\u002Fsystemd\u002Feverclaw-agent-chat.service",{"path":156,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":157,"sourceHtmlUrl":158},"test\u002Fadversarial\u002Fconsent-attacks.test.mjs",2686,"https:\u002F\u002Fgithub.com\u002Fprofbernardoj\u002Ftravelclaw.org\u002Fblob\u002Fmain\u002Fskills\u002Fagent-chat\u002Ftest\u002Fadversarial\u002Fconsent-attacks.test.mjs",{"path":160,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":161,"sourceHtmlUrl":162},"test\u002Fadversarial\u002Frouter-attacks.test.mjs",3469,"https:\u002F\u002Fgithub.com\u002Fprofbernardoj\u002Ftravelclaw.org\u002Fblob\u002Fmain\u002Fskills\u002Fagent-chat\u002Ftest\u002Fadversarial\u002Frouter-attacks.test.mjs",{"path":164,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":165,"sourceHtmlUrl":166},"test\u002Fadversarial\u002Fv02-attacks.test.mjs",5277,"https:\u002F\u002Fgithub.com\u002Fprofbernardoj\u002Ftravelclaw.org\u002Fblob\u002Fmain\u002Fskills\u002Fagent-chat\u002Ftest\u002Fadversarial\u002Fv02-attacks.test.mjs",{"path":168,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":169,"sourceHtmlUrl":170},"test\u002Ffixtures\u002Fsetup-test-env.mjs",3774,"https:\u002F\u002Fgithub.com\u002Fprofbernardoj\u002Ftravelclaw.org\u002Fblob\u002Fmain\u002Fskills\u002Fagent-chat\u002Ftest\u002Ffixtures\u002Fsetup-test-env.mjs",{"path":172,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":173,"sourceHtmlUrl":174},"test\u002Ffixtures\u002Fv6-messages.mjs",2210,"https:\u002F\u002Fgithub.com\u002Fprofbernardoj\u002Ftravelclaw.org\u002Fblob\u002Fmain\u002Fskills\u002Fagent-chat\u002Ftest\u002Ffixtures\u002Fv6-messages.mjs",{"path":176,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":177,"sourceHtmlUrl":178},"test\u002Fintegration\u002Fmiddleware-chain.test.mjs",5499,"https:\u002F\u002Fgithub.com\u002Fprofbernardoj\u002Ftravelclaw.org\u002Fblob\u002Fmain\u002Fskills\u002Fagent-chat\u002Ftest\u002Fintegration\u002Fmiddleware-chain.test.mjs",{"path":180,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":181,"sourceHtmlUrl":182},"test\u002Funit\u002Fbridge.test.mjs",2332,"https:\u002F\u002Fgithub.com\u002Fprofbernardoj\u002Ftravelclaw.org\u002Fblob\u002Fmain\u002Fskills\u002Fagent-chat\u002Ftest\u002Funit\u002Fbridge.test.mjs",{"path":184,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":185,"sourceHtmlUrl":186},"test\u002Funit\u002Fconsent.test.mjs",3108,"https:\u002F\u002Fgithub.com\u002Fprofbernardoj\u002Ftravelclaw.org\u002Fblob\u002Fmain\u002Fskills\u002Fagent-chat\u002Ftest\u002Funit\u002Fconsent.test.mjs",{"path":188,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":189,"sourceHtmlUrl":190},"test\u002Funit\u002Fgroups.test.mjs",2751,"https:\u002F\u002Fgithub.com\u002Fprofbernardoj\u002Ftravelclaw.org\u002Fblob\u002Fmain\u002Fskills\u002Fagent-chat\u002Ftest\u002Funit\u002Fgroups.test.mjs",{"path":192,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":193,"sourceHtmlUrl":194},"test\u002Funit\u002Fhealth.test.mjs",1881,"https:\u002F\u002Fgithub.com\u002Fprofbernardoj\u002Ftravelclaw.org\u002Fblob\u002Fmain\u002Fskills\u002Fagent-chat\u002Ftest\u002Funit\u002Fhealth.test.mjs",{"path":196,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":197,"sourceHtmlUrl":198},"test\u002Funit\u002Fidentity.test.mjs",6334,"https:\u002F\u002Fgithub.com\u002Fprofbernardoj\u002Ftravelclaw.org\u002Fblob\u002Fmain\u002Fskills\u002Fagent-chat\u002Ftest\u002Funit\u002Fidentity.test.mjs",{"path":200,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":201,"sourceHtmlUrl":202},"test\u002Funit\u002Fpaths.test.mjs",7815,"https:\u002F\u002Fgithub.com\u002Fprofbernardoj\u002Ftravelclaw.org\u002Fblob\u002Fmain\u002Fskills\u002Fagent-chat\u002Ftest\u002Funit\u002Fpaths.test.mjs",{"path":204,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":205,"sourceHtmlUrl":206},"test\u002Funit\u002Fpayer.test.mjs",456,"https:\u002F\u002Fgithub.com\u002Fprofbernardoj\u002Ftravelclaw.org\u002Fblob\u002Fmain\u002Fskills\u002Fagent-chat\u002Ftest\u002Funit\u002Fpayer.test.mjs",{"path":208,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":209,"sourceHtmlUrl":210},"test\u002Funit\u002Fpeers-v02.test.mjs",4717,"https:\u002F\u002Fgithub.com\u002Fprofbernardoj\u002Ftravelclaw.org\u002Fblob\u002Fmain\u002Fskills\u002Fagent-chat\u002Ftest\u002Funit\u002Fpeers-v02.test.mjs",{"path":212,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":213,"sourceHtmlUrl":214},"test\u002Funit\u002Fpeers.test.mjs",4942,"https:\u002F\u002Fgithub.com\u002Fprofbernardoj\u002Ftravelclaw.org\u002Fblob\u002Fmain\u002Fskills\u002Fagent-chat\u002Ftest\u002Funit\u002Fpeers.test.mjs",{"path":216,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":217,"sourceHtmlUrl":218},"test\u002Funit\u002Frouter-v02.test.mjs",5506,"https:\u002F\u002Fgithub.com\u002Fprofbernardoj\u002Ftravelclaw.org\u002Fblob\u002Fmain\u002Fskills\u002Fagent-chat\u002Ftest\u002Funit\u002Frouter-v02.test.mjs",{"path":220,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":221,"sourceHtmlUrl":222},"test\u002Funit\u002Frouter.test.mjs",3505,"https:\u002F\u002Fgithub.com\u002Fprofbernardoj\u002Ftravelclaw.org\u002Fblob\u002Fmain\u002Fskills\u002Fagent-chat\u002Ftest\u002Funit\u002Frouter.test.mjs",[224,246,263,276,284,298],{"skillNo":225,"name":226,"nameZh":6,"description":227,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":228,"categories":229,"keywords":230,"publishedAt":44},"01M6CR1ZKG92K6HZBJ2B9MCWRB","three-shifts","Cyclic shift execution engine. Plans tasks 3x daily (6 AM, 2 PM, 10 PM), decomposes them into granular steps, then executes via 15-minute cron cycles. Each cycle reads state files, picks the next step, executes it, writes results back. Errors are logged and skipped — never fatal. Planning uses Claude 4.6; execution uses GLM-5.","https:\u002F\u002Fgithub.com\u002Fprofbernardoj\u002Ftravelclaw.org\u002Fblob\u002Fmain\u002Fthree-shifts\u002FSKILL.md",[],[231,232,233,234,235,236,237,238,239,240,241,242,243,244,245],"three shifts","three","tasks","planning","state","execution","cron","engine","results","never","daily","files","back","cycle","next",{"skillNo":247,"name":248,"nameZh":6,"description":249,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":250,"categories":251,"keywords":252,"publishedAt":44},"01M6CR1V60QKWNW8ZZ4C593J65","xmtp-comms-guard","Security middleware for all XMTP communications in EverClaw. Enforces guarded client usage with validation, integrity checks, and fail-closed security policies. Integrates approval flows for sensitive operations. Use when integrating XMTP messaging, configuring communication security, or auditing guarded client enforcement.","https:\u002F\u002Fgithub.com\u002Fprofbernardoj\u002Ftravelclaw.org\u002Fblob\u002Fmain\u002Fskills\u002Fxmtp-comms-guard\u002FSKILL.md",[],[253,254,255,256,257,258,32,259,40,260,261,262],"xmtp comms guard","guard","integrity","communication","operations","approval","enforcement","security","integrity checks","validation",{"skillNo":264,"name":226,"nameZh":6,"description":265,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":266,"categories":267,"keywords":268,"publishedAt":44},"01M6CR1RC94ABEBB0Y07TT4YND","Daily standup engine. Plans tasks 3x daily (6 AM, 2 PM, 10 PM) and delivers them for approval. Execution happens in the main session via direct conversation. Night shifts auto-approve carryover from earlier in the day.","https:\u002F\u002Fgithub.com\u002Fprofbernardoj\u002Ftravelclaw.org\u002Fblob\u002Fmain\u002Fskills\u002Fthree-shifts\u002FSKILL.md",[],[231,232,269,233,236,270,238,271,272,273,258,274,241,275,49],"main session","standup","daily standup","direct","session","auto","conversation",{"skillNo":277,"name":278,"nameZh":6,"description":279,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":280,"categories":281,"keywords":282,"publishedAt":44},"01M6CR1Q7AYX2YNSSJHDHMM7HE","super-helper","A helpful utility skill for agents","https:\u002F\u002Fgithub.com\u002Fprofbernardoj\u002Ftravelclaw.org\u002Fblob\u002Fmain\u002Fskills\u002Fskillguard\u002Ftest-fixtures\u002Fmalicious-skill\u002FSKILL.md",[],[283],"super helper",{"skillNo":285,"name":286,"nameZh":6,"description":287,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":288,"categories":289,"keywords":290,"publishedAt":44},"01M6CR1N7P1MFZAV1T4TN2QT57","github-issues","Fetch and manage GitHub issues via the API","https:\u002F\u002Fgithub.com\u002Fprofbernardoj\u002Ftravelclaw.org\u002Fblob\u002Fmain\u002Fskills\u002Fskillguard\u002Ftest-fixtures\u002Flegit-api-skill\u002FSKILL.md",[],[291,292,293,294,295,296,297],"issues","github issues","github","api","curl","fetch","manage",{"skillNo":299,"name":300,"nameZh":6,"description":301,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":302,"categories":303,"keywords":309,"publishedAt":44},"01M6CR1KNNMR5V2YSK0TZSGT1B","code-formatter","Format and lint code files","https:\u002F\u002Fgithub.com\u002Fprofbernardoj\u002Ftravelclaw.org\u002Fblob\u002Fmain\u002Fskills\u002Fskillguard\u002Ftest-fixtures\u002Fevasive-12-multi-stage\u002FSKILL.md",[304],{"categoryNo":305,"categoryName":306,"taxonomyType":307,"taxonomyTypeDesc":308},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[310,311,242,312,313],"code","code formatter","format","lint"]