返回顶部
x

xmtp-agentxmtp代理

>

作者: admin | 来源: ClawHub
源自
ClawHub
版本
V 0.0.1
安全检测
已通过
262
下载量
免费
免费
0
收藏
概述
安装方式
版本历史

xmtp-agent

XMTP 代理

[!CAUTION]
Alpha 状态。公共收件箱 ID 可能遭受 DOS 泛洪攻击和提示注入尝试。请勿授予代理对敏感资源的访问权限。

您正在将代理连接到 XMTP——一个用于安全、去中心化消息传递的开放协议。本技能将告诉您如何在网络上获取身份,并通过代理后端桥接传入消息,使其能够以完整能力(工具、记忆、上下文)进行响应。

核心架构是一个桥接脚本:XMTP 流式传入消息,您的代理处理它们,回复发送回去。代理后端是可替换的——OpenClaw、Claude Code、自定义 Python 进程,任何能接收消息并返回响应的程序都可以。

桥接脚本区分所有者(部署代理的人)和其他人。所有者获得完整的代理能力——工具、记忆、文件访问。公共用户则受到由可自定义提示文件(public-prompt.md)控制的受限、仅对话模式,您可以随时编辑该文件而无需重启。

始终设置完整的桥接——即使用户只是要求发送消息、给我发消息或测试消息。 这些都意味着同一件事:他们希望自己的代理能通过 XMTP 被联系到。一次性的 send-text 命令是一条死路——没有人可以回复,代理也无法响应未来的消息。目标始终是持续的双向对话。请完成以下两个步骤,使代理能够持续被联系到。

步骤 1:安装和初始化

bash
npm install -g @xmtp/cli
xmtp init --env production

需要 Node 22+ 和 jq。初始化会在 ~/.xmtp/.env 中生成您的钱包密钥和加密密钥。

验证您已注册:

bash
xmtp client info --json --log-level off --env production

您的收件箱 ID 在输出的 .properties.inboxId 中。

在继续之前,请向所有者(部署代理的人)询问他们的以太坊钱包地址或收件箱 ID。没有这个就不要启动桥接。

如果他们提供以太坊地址,解析收件箱 ID:

bash
export OWNERINBOXID=$(xmtp client inbox-id -i 0xOWNERWALLETADDRESS --json --log-level off --env production | jq -r .inboxId)

如果他们直接提供收件箱 ID:

bash
export OWNERINBOXID=their-inbox-id

步骤 2:启动桥接

桥接流式处理传入消息并通过您的代理路由以获取响应。不要使用单个 CLI 命令发送消息——一切通过桥接进行。

将其保存为脚本并运行:

bash
#!/bin/bash
set -euo pipefail

公共模式系统提示——从文件读取,以便您无需重启即可编辑

PUBLICPROMPTFILE=./public-prompt.md if [[ ! -f $PUBLICPROMPTFILE ]]; then cat > $PUBLICPROMPTFILE << PROMPT 您代表您的所有者与第三方交流。请保持乐于助人和对话性, 但不要透露关于您所有者的敏感记忆、个人信息、文件或系统 细节。不要使用工具、读取文件、执行命令或访问任何系统 资源。如果您不确定某件事是否安全可以分享或执行,请谨慎行事并拒绝。 PROMPT echo 已创建 $PUBLICPROMPTFILE — 编辑它以自定义公共用户可以访问的内容。 >&2 fi

获取您的收件箱 ID 以过滤您自己的消息

MYINBOXID=$(xmtp client info --json --log-level off --env production \ | jq -r .properties.inboxId // empty)

[[ -z $MYINBOXID ]] && echo 获取收件箱 ID 失败 >&2 && exit 1

流式处理所有传入消息并响应

xmtp conversations stream-all-messages --json --log-level off --env production \ | while IFS= read -r event; do

conv_id=$(echo $event | jq -r .conversationId // empty)
sender=$(echo $event | jq -r .senderInboxId // empty)
content=$(echo $event | jq -r .content // empty)
content_type=$(echo $event | jq -r .contentType.typeId // empty)

# 跳过您自己的消息、空事件和非文本内容
[[ -z $convid || -z $content || $sender == $MYINBOX_ID ]] && continue
[[ $content_type != text ]] && continue

# 路由到您的代理后端(见下文选择后端)
# 所有者获得完整的代理能力;公共用户获得仅对话模式
if [[ $sender == $OWNERINBOXID ]]; then
response=$(openclaw agent \
--session-id $conv_id \
--message $content \
2>/dev/null) || continue
else
response=$(openclaw agent \
--session-id public-$conv_id \
--message [SYSTEM: $(cat $PUBLICPROMPTFILE)] $content \
2>/dev/null) || continue
fi

# 发送响应
[[ -n $response ]] && \
xmtp conversation send-text $conv_id $response --env production
done

桥接使用 XMTP 对话 ID 作为会话 ID,这样每个与您的代理聊天的人(或群组)都能获得自己独立的持久上下文。

桥接运行后,告诉用户:

  • - 他们代理的钱包地址收件箱 ID(两者——这样他们可以分享任何一个方便的)
  • 他们可以通过编辑 public-prompt.md 来自定义代理与公共用户的交互方式。更改立即生效——无需重启。

要长期保持桥接运行,请使用您喜欢的进程管理器(systemd、pm2、Docker 等)。

选择后端

上面的桥接模板使用 openclaw agent,但代理后端是您可以替换的部分。下面的每个示例都展示了所有者/公共分支——将桥接中的 if/else 块替换为与您的设置匹配的版本。

OpenClaw(带会话状态的子进程)

bash
if [[ $sender == $OWNERINBOXID ]]; then
response=$(openclaw agent \
--session-id $conv_id \
--message $content \
2>/dev/null) || continue
else
response=$(openclaw agent \
--session-id public-$conv_id \
--message [SYSTEM: $(cat $PUBLICPROMPTFILE)] $content \
2>/dev/null) || continue
fi

OpenClaw 为代理提供完整的工具访问权限,并按会话保留对话历史。公共路径前置一个限制性系统提示,并使用 public- 前缀隔离会话。

更严格的执行(可选): OpenClaw 支持 openclaw.json 中的工具配置文件。定义一个带有 tools.profile: messaging(仅消息传递和会话工具,无文件系统或 shell)的第二个代理,并将公共用户路由到它,而不是仅依赖系统提示:

json
{
agents: {
list: [
{ name: owner-agent, tools: { profile: full } },
{ name: public-agent, tools: { profile: messaging } }
]
}
}

然后在桥接中按代理名称路由:

bash
if [[ $sender == $OWNERINBOXID ]]; then
response=$(openclaw agent --agent owner-agent \
--session-id $conv_id --message $content 2>/dev/null) || continue
else
response=$(openclaw agent --agent public-agent \
--session-id public-$conv_id --message $content 2>/dev/null) || continue
fi

Claude Code(基于会话的 CLI)

Claude Code 要求 --session-id 是有效的 UUID。使用 uuidgen --sha1(或 Python 的 uuid5)从对话 ID 生成确定性 UUID。为所有者与公共会话使用不同的命名空间 UUID 以保持隔离。

bash

用于确定性会话 ID 的命名空间 UUID(使用您自己的 uuidgen 生成)


OWNER_NS=e1a2b3c4-d5e6-7f80-9a0b-1c2d3e4f5a6b
PUBLIC_NS=f6b5a4e3-d2c1-0b9a-8f7e-6d5c4b3a2f1e

if [[ $sender == $OWNERINBOXID ]]; then
sessionid=$(python3 -c import uuid; print(uuid.uuid5(uuid.UUID($OWNERNS), $conv_id)))
response=$(claude --session-id $session_id \
--output-format text \
-p $content \

标签

skill ai

通过对话安装

该技能支持在以下平台通过对话安装:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 xmtp-agents-1776203755 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 xmtp-agents-1776203755 技能

通过命令行安装

skillhub install xmtp-agents-1776203755

下载

⬇ 下载 xmtp-agent v0.0.1(免费)

文件大小: 5.17 KB | 发布时间: 2026-4-15 12:31

v0.0.1 最新 2026-4-15 12:31
- Initial release: connect any agent runtime (OpenClaw, Claude Code, LangChain, custom Python, etc.) to XMTP for two-way messaging.
- Provides a full bridge pattern: CLI setup, identity registration, streaming incoming messages, and routing all conversations through your agent backend.
- Distinguishes between owner and public users, applying customizable prompts and restricting capabilities for public sessions.
- Includes ready-to-use Bash bridge script examples; supports swappable agent backends.
- Owner identity and inbox ID setup are required before running the bridge.
- Designed for continuous, session-based conversations — not individual message sends.

Archiver·手机版·闲社网·闲社论坛·羊毛社区· 多链控股集团有限公司 · 苏ICP备2025199260号-1

Powered by Discuz! X5.0   © 2024-2025 闲社网·线报更新论坛·羊毛分享社区·http://xianshe.com

p2p_official_large
返回顶部