【免费下载链接】agent-scripts
Scripts for agents, shared between my repositories.
discord-clawd是 agent-scripts 仓库中一个专门用于"通过 Discord 通道与 OpenClaw Agent/会话实时对话"的技能:任务需要向运行在 Discord 后端的 agent 会话提问、或者需要把消息投递到 Discord 通道时启用它,而它的底层传输完全复用仓库中的 OpenClaw Relay 辅助脚本openclaw_relay.py。读完本文你将掌握:如何列出并解析会话目标别名、何时选用ask/publish/force-send三种消息模式、如何配置session_aliases.json会话别名文件,以及发送真实内容前必须遵守的 guardrails 边界——最终能安全地把对话路由到 Discord 后端的 agent 会话,而不是误用于本地归档检索。
技能定位:实时会话中继,而非归档搜索
skills/discord-clawd/SKILL.md的开头就划清了技能边界:
Use this when the task is to talk with the Discord-backed agent/session, ask it a question, or post through that route.
它解决的场景是与 Discord 后端 agent/会话的双向对话——向它提问、或通过该路由发布消息。同时文档明确排除了另一类需求:本地 Discord 归档/历史/搜索查询,这类任务应改用$discrawl(注意skills/discrawl在本仓库中是一个指向仓库外部路径的符号链接,归档搜索功能独立于此技能)。
配套的skills/discord-clawd/agents/openai.yaml给出了该技能的对外接口定义:
interface: display_name: "Discord Clawd" short_description: "Talk to the Discord-backed OpenClaw agent" default_prompt: "Use $discord-clawd to route a private ask or explicit post through the Discord-backed OpenClaw agent/session."其中default_prompt把技能用途凝练为两个动作:private ask(私有询问)与explicit post(显式发布),这恰好对应下文将要展开的ask与force-send两种命令模式。
传输层:OpenClaw Relay 辅助脚本
discord-clawd本身不实现协议细节,而是复用skills/openclaw-relay/scripts/openclaw_relay.py。这个 Python 脚本负责把提示词或消息通过 local / ssh 两种传输方式中继到本地或远程的 OpenClaw 会话(详见 openclaw-relay 技能文档)。
按原文档的运输流程,第一步是进入仓库目录并检查已知目标:
cd ~/Projects/agent-scripts python3 skills/openclaw-relay/scripts/openclaw_relay.py targets python3 skills/openclaw-relay/scripts/openclaw_relay.py resolve --target maintainers说明:cd ~/Projects/agent-scripts是原作者示例中的仓库路径,实际使用时应切换到你自己 clone 的 agent-scripts 目录。targets子命令直接打印别名文件内容(见下文"会话别名配置"),resolve则把目标别名解析为可用的会话键。
各子命令一览
从openclaw_relay.py的build_parser()(源码)可以确认脚本支持的全部子命令与参数:
| 子命令 | 作用 | 关键参数 |
|---|---|---|
doctor | 健康检查,验证 acpx 仓库、.acpxrc.json、gateway token 是否就绪 | --transport,--host |
targets | 列出已知目标别名 | — |
resolve | 将别名或名称解析为会话键 | --target(必填) |
sessions | 列出/过滤会话列表 | --query,--limit |
ensure | 确保控制会话存在 | — |
send | 向控制会话阻塞式发送消息 | --message(必填) |
ask | 向指定目标会话发起私有询问 | --target,--message(均必填) |
publish | 由目标会话决定是否发布 | --target,--text/--text-file,--context,--dry-run |
force-send | 强制直接发布消息(可带媒体) | --target,--text/--text-file,--media,--channel,--to等 |
start | 异步入队一条工作消息 | --message(必填) |
status | 查看控制会话状态 | — |
show | 展示会话内容摘要 | --limit |
wait | 轮询等待会话推进 | --after-seq,--after-updated-at,--timeout,--interval |
cancel | 取消排队中的工作 | — |
所有子命令都共享add_shared_flags()(源码)定义的公共标志:--transport(local/ssh,默认local)、--host(默认steipete@steipete-macstudio.local)、--acpx-repo、--cwd、--agent、--session(控制会话名,默认codex-bridge)、--gateway-url、--gateway-token-file、--targets-file、--limit。脚本刻意避免内置个人路径,全部可用OPENCLAW_RELAY_*环境变量或命令行标志覆盖(见 openclaw-relay/SKILL.md 的 Defaults 小节)。
三种消息模式:ask、publish、force-send
原文档给出的模式选择规则是整个技能的核心决策点:
If the target alias exists, prefer a private ask first. Use
publishwhen the session should decide whether to post. Useforce-sendonly when the user explicitly wants a message posted.
对应三种递进的控制力度:
1.ask:私有询问(首选)
目标别名解析成功后,优先以私有方式向该会话提问,不直接向频道发消息:
python3 skills/openclaw-relay/scripts/openclaw_relay.py ask \ --target maintainers \ --message "Reply with exactly OK."源码层面,cmd_ask()(源码)先调用resolve_target()解析目标,再经run_target_exec()用acpx exec向目标会话注入消息,并通过解析session/update帧汇总出assistantText(extract_prompt_result(),源码)。因此在对话结束后,脚本能返回 agent 的实际回复文本,而不仅仅是"已发送"的壳。
2.publish:交给会话判断是否发布
当会话应当自主决定内容是否适合对外发布时使用。cmd_publish()会构造一段提示词(build_publish_prompt(),源码),指令目标会话:只调用一次sessions_send;若文本符合目标会话上下文则原样播报,否则回复ANNOUNCE_SKIP,并最终以 JSON 返回{"delivery":"posted|skipped|unknown", ...}。多行内容推荐用--text-file读取,避免 shell 转义:
python3 skills/openclaw-relay/scripts/openclaw_relay.py publish \ --target maintainers \ --text-file /tmp/announcement.md \ --context "Weekly maintainer update"--dry-run可预览将要构造的提示词而不真正发送。
3.force-send:用户明确要求发布时
只有当用户明确希望把消息发到通道时才使用。cmd_force_send()(源码)会先由derive_delivery_from_key()(源码)从会话键推导channel、to、threadId,再调用 OpenClaw 的message send命令,支持--text/--text-file与--media(媒体路径或 URL),以及--force-document、--gif-playback、--silent等通道级选项:
python3 skills/openclaw-relay/scripts/openclaw_relay.py force-send \ --target maintainers \ --text "Deploy is done."远程传输时则加--transport ssh与--host:
python3 skills/openclaw-relay/scripts/openclaw_relay.py force-send \ --transport ssh \ --host steipete@steipete-macstudio.local \ --target maintainers \ --text "Demo video." \ --media /tmp/demo.mp4若无法从会话键推导投递目标(即channel或to为空),脚本会报错并要求通过--channel/--to显式覆盖。
会话别名配置:session_aliases.json
discord-clawd的--target maintainers之所以能工作,靠的是目标别名文件。默认路径为skills/openclaw-relay/config/session_aliases.json,仓库中的实际示例为:
{ "main": "agent:main:main", "maintainers": "agent:main:discord:channel:1456744319972282449" }从源码看,session_aliases.json的键值都是字符串,load_aliases()(源码)会对其strip()后使用。会话键遵循agent:<agentId>:<channel>:<kind>:<peer>形态——上例中maintainers就指向 Discord 频道1456744319972282449。若别名缺失,resolve_target()(源码)还会按规则匹配实时会话:完全匹配 key/label、或以:名称结尾的键,并在匹配到多个时以ambiguous target报错,避免误投。
官方文档(openclaw-relay/SKILL.md)提醒:仓库内置的别名文件是占位示例,实际部署时替换为真实值即可。
Guardrails:四条不可逾越的边界
原文档末尾列出的 guardrails 是使用时必须遵守的安全与职责约束:
- 发送真实内容前先解析目标——先
resolve --target,确认别名或会话键有效,再发送实际消息,防止投递到错误会话; - 报告使用的 target 与 delivery mode——每次中继后都要说明实际投递目标和所用模式(ask/publish/force-send),这也是 openclaw-relay/SKILL.md 中"Output Relay"的要求:返回 agent 的真实回复或投递结果,而不是 shell 噪音;
- 不要用于本地 Discord 归档查询——归档/历史/搜索交给
$discrawl,实时对话中继与归档检索是两套技能; - 不要暴露 gateway token 与会话密钥——gateway token 文件(默认
~/.openclaw/gateway.token)与会话键属于敏感信息,任何输出中不得泄露。
故障处理与降级路径
虽然discord-clawd原文档未展开故障处理,但其底层脚本提供了完整的兜底流程(openclaw-relay/SKILL.md 的 Failure Handling):
- 先运行
doctor做健康检查——验证 acpx 仓库目录、cwd/.acpxrc.json、gateway token 是否齐全(cmd_doctor(),源码); - 再运行
status与show查看控制会话状态; - 若控制会话卡死,依次
cancel→ensure→ 重试; - 若路由不确定,先 resolve,优先用别名或精确会话键,并在发送真实内容前用一条极小的探针消息(如
Reply with exactly OK.)验证链路。
这套"先探测、后投递"的流程与discord-clawd的 guardrails 相互印证,确保通过 Discord 后端路由的每一次对话都安全、可控、可追踪。
相关资源
- 技能定义:skills/discord-clawd/SKILL.md
- 接口配置:skills/discord-clawd/agents/openai.yaml
- 中继脚本实现:skills/openclaw-relay/scripts/openclaw_relay.py
- 中继技能文档:skills/openclaw-relay/SKILL.md
- 会话别名示例:skills/openclaw-relay/config/session_aliases.json
【免费下载链接】agent-scripts
Scripts for agents, shared between my repositories.
相关推荐
OpenClaw Discord Clawd 技能:通过 Relay 助手与 Discord 侧 Agent 会话通信
OpenClaw Discord Clawd 技能:通过 Relay 助手与 Discord 侧 Agent 会话通信 Discord Clawd 是 Open
AI 应用AI Agent交互助手后端即时通讯网关Flue Agent SDK 完全指南:用 `@flue/sdk` 与已部署的 Agent 会话对话
Flue Agent SDK 完全指南:用 @flue/sdk 与已部署的 Agent 会话对话 Flue 是「沙箱 Agent 框架」(sandbox age
人工智能大模型AI AgentAgent 框架工具调用Agent 沙箱MCP ClientsMem0 OpenClaw 插件实战:为 OpenClaw Agent 构建跨会话持久记忆
Mem0 OpenClaw 插件实战:为 OpenClaw Agent 构建跨会话持久记忆 本文为 OpenClaw 开发者介绍 Mem0 官方插件 @mem0
人工智能AI AgentAgent 记忆RAG
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考