OpenRig 活动钩子设计全解:/api/activity/hooks 如何做到绝不泄露提示词
OpenRig 活动钩子设计全解/api/activity/hooks 如何做到绝不泄露提示词【免费下载链接】openrigBuild your own network of agents from Claude Code, Codex and Pi: persistent teams with roles, shared context and owned work.项目地址: https://gitcode.com/GitHub_Trending/op/openrigOpenRig让你用 Claude Code、Codex 和 Pi 组建一支持久运行的 AI Agent 团队——每个 Agent 有角色、共享上下文、拥有自己的工位seat。当你盯着一支多 Agent 团队时最关心的问题只有一个它们现在在干什么OpenRig 的答案是活动钩子Activity Hooks与中继Relay机制。本文带你完整看懂/api/activity/hooks这个端点以及 OpenRig 如何通过发送端白名单 接收端白名单 本地令牌 最小状态词汇四层设计保证你的提示词prompt与工具参数永远不会被上报。先看效果每个席位的正在忙/空闲从哪来在 TUI 的拓扑视图里每个 Agent 席位都会显示一个状态点和上下文占用百分比。这些状态不是靠偷看终端输出猜出来的而是由运行时Claude Code、Codex、Pi 等自带的生命周期钩子在关键时刻主动上报会话开始、停止、等待输入等事件触发中继脚本把一条极小的事件 POST 到守护进程的/api/activity/hooks。中继脚本在源头就做减法上报的起点是插件目录里的中继脚本 activity-relay.cjs。它挂在运行时如 Claude Code 的 Stop 钩子、Codex 的 hook上从 stdin 读入供应商给的完整事件负载然后只挑出 7 个字段重新组装sessionName/nodeId/runtime—— 我是谁generation—— 哪一代占位者发的防旧进程诈尸hookEvent/subtype/occurredAt—— 发生了什么、什么类型、何时注意供应商原始负载里可能有工具名、文件路径等敏感信息而 buildOpenRigPayload 只读取白名单字段提示词正文和工具参数在源头就不存在。官方 README 也明确写明That payload excludes prompt text and tool arguments见 README.md。中继还有两个贴心的健壮性设计绝不拖慢 AgentPOST 超时上限 1.5 秒任何错误直接吞掉钩子永远不阻塞 Agent 主循环。三级发现机制优先读环境变量OPENRIG_URL/OPENRIG_ACTIVITY_HOOK_TOKEN读不到就用 hostport 拼 URL再不行就回退读取~/.openrig/activity-endpoint.json文件——这样即使守护进程重启过、进程环境是冻结的旧值席位依然能正确上报。/api/activity/hooks 端点接收端再做一次白名单事件到达 activity.ts 的 POST/hooks后还要过两道关卡第一关令牌认证。守护进程为每个安装生成一个活动钩子令牌32 字节随机数以0600 权限存在本地状态目录里见 activity-endpoint.ts。令牌跨重启保持稳定所以老席位重启后仍能通过认证。请求必须携带Authorization: Bearer token或x-openrig-activity-token头二者缺一即 401。这个令牌被刻意设计为本地回环内部凭证不出现在日志里也不为它过度设计脱敏机制——因为它本来就只在本机生效。第二关字段白名单。端点并不JSON.parse后照单全收而是调用store.recordHookEvent()时逐个指名取值activity.ts#L260-L271runtime、sessionName、nodeId、hookEvent、subtype、occurredAt、generation。即使有人在请求体里塞入提示词全文这些字段也会被静默丢弃——接收端根本不认识它们。为什么保证不泄露提示词四层设计一览层位置防什么① 发送端白名单中继脚本原始负载中的 prompt、工具参数在组装 payload 时就被剔除② 接收端白名单recordHookEvent服务端只按字段名取值多余内容不入库③ 本地令牌认证0600 权限 token 文件防止未授权进程向端点投递任意内容④ 最小状态词汇活动分类法即便事件入库也只映射为 working / idle-at-prompt / unknown 三值第四层是最精妙的。看 activity-taxonomy.ts整个活动分类法只有三个状态值working | idle-at-prompt | unknown。钩子事件经 evidenceFromHookActivity 转换后running→ workingidle→ idle-at-promptneeds_input则变成一个计数 短理由短语比如 permission prompt理由也只是一句人类可读的话而非原文内容。未知状态被当作噪声直接丢弃诚实的 unknown 好过自信的错答。换句话说即使上游某个环节失守这个数据模型的天花板也只是某席位在等待输入——没有任何字段能装下提示词。顺带一提推送通道也只发有变化的通知守护进程还提供GET /api/activity/eventsSSE但按 activity.ts#L328-L358 的设计它只转发seat.activity_changed、seat.rung_health等变更通知身份 序号视图收到通知后自行从/api/ps拉取完整状态。推送链路里同样没有派生内容没有第二套活动机制由构造上就成立。想亲眼验证从这里读起中继脚本与三级发现机制activity-relay.cjs端点认证与字段取值routes/activity.ts令牌生成与 0600 持久化domain/activity-endpoint.ts状态词汇表与证据阶梯domain/activity-taxonomy.ts防篡改测试验证rip-proofactivity-hook-rip-proof.test.ts令牌持久化测试identity-hook-token-persisted.test.ts演示 rig 配置demo/rig.yamlAgent 角色定义见 demo/agents/lead/agent.yaml总结OpenRig 的活动钩子体系是一个值得借鉴的最小数据面设计范例在产生数据的最源头就只采集白名单字段接收端再独立做一遍字段过滤用本地令牌守住入口最后用一个三值状态词汇表给所有数据模型封顶。四层叠加任何一层单独失效都有下一层兜底——这就是/api/activity/hooks能大胆地只看状态、不看内容从而在实时掌握 Agent 团队动态的同时保证提示词一个字节都不外泄的原因。【免费下载链接】openrigBuild your own network of agents from Claude Code, Codex and Pi: persistent teams with roles, shared context and owned work.项目地址: https://gitcode.com/GitHub_Trending/op/openrig创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Angular 模板中的 @for 内置控制流:列表渲染、track 表达式与 DOM 高效更新实战

Angular 模板中的 @for 内置控制流:列表渲染、track 表达式与 DOM 高效更新实战

文档教程知识库 【免费下载链接】developer-roadmap Interactive roadmaps, guides and other educational content to help developers grow in their careers. 项目地址: https://gitcode.com/GitHub_Trending/de/developer-roadmap 点击查看 免费下载 for 是 An…

2026/10/4 7:40:06 阅读更多 →
气象数据处理必备:面积加权平均原理与Matlab实现

气象数据处理必备:面积加权平均原理与Matlab实现

做气象数据处理的人应该都有过这种经历:拿到一套全球格点数据,比如 CMIP6 的月平均降水,或者 ERA5 的逐时温度,第一反应就是mean(mean(data, 1), 2),然后画一条区域平均的时间序列。但画出来之后,发现曲线的…

2026/10/4 7:40:06 阅读更多 →
AI辅助接口设计与异常处理:中小型项目提效实战指南

AI辅助接口设计与异常处理:中小型项目提效实战指南

接口设计这件事,很多人觉得是架构师才需要操心的活儿,写业务代码的时候随手定义几个字段、返回个 200 就完事了。但真正做过线上项目的人都知道,接口设计不到位、异常处理没跟上,后期排查问题的时间成本能占到整个开发周期的四成以…

2026/10/4 7:39:06 阅读更多 →

最新新闻

OpenHarmony 实战:SizedBox 尺寸约束与 Flutter 跨端布局

OpenHarmony 实战:SizedBox 尺寸约束与 Flutter 跨端布局

1. 先把 SizedBox 放在 OpenHarmony 语境下看你可能已经注意到,Flutter for OpenHarmony 的技术讨论里,提到最多的组件不是那些大型业务组件,反而是 SizedBox、Container、Row 这类看起来“太基础”的东西。原因很简单:OpenHarmon…

2026/10/4 9:08:14 阅读更多 →
用matplotlib三维画图可视化纳什均衡点

用matplotlib三维画图可视化纳什均衡点

1. 这不是炫技,是让博弈论“看得见”的硬需求你有没有试过给学生讲纳什均衡?讲到混合策略时,手指在黑板上划来划去,画出两条交叠的直线,再标个点——“看,这就是均衡点!”可台下眼神空洞&#x…

2026/10/4 9:08:14 阅读更多 →
用Go实现UniMate:轻量级局域网剪贴板同步与文件秒传工具

用Go实现UniMate:轻量级局域网剪贴板同步与文件秒传工具

博客圈里有个怪现象,工具类项目总是比应用类项目更让开发者上头。我最近在折腾一个叫UniMate的跨设备协同工具,起因很朴素:工作机上复制了一段代码,回到家里电脑想粘贴,却只能通过网盘、聊天记录或者邮箱手动搬运。手机…

2026/10/4 9:08:14 阅读更多 →
Java工程师转型AI落地:从Spring Boot到RAG的实战路线

Java工程师转型AI落地:从Spring Boot到RAG的实战路线

1. 别焦虑了:AI落地缺的从来不是算法专家,而是能把模型变成产品的工程师最近不少做 Java 的朋友在焦虑,看到铺天盖地的"AI 要替代程序员""不会 Python 没法做 AI"这类论调,总觉得自己被时代抛下了。有个前同事…

2026/10/4 9:07:14 阅读更多 →
为每个测试独立准备数据——Node.js 测试中避免全局 Fixture 与种子数据的实战指南

为每个测试独立准备数据——Node.js 测试中避免全局 Fixture 与种子数据的实战指南

文档教程后端 【免费下载链接】nodebestpractices ✅ The Node.js best practices list (July 2026) 项目地址: https://gitcode.com/GitHub_Trending/no/nodebestpractices 点击查看 免费下载 导读 在 Node.js 后端测试中,"为了跑得快&#xff0…

2026/10/4 9:07:14 阅读更多 →
linux-command 手册精读:znew 命令详解——将 compress 生成的 .Z 压缩包转换为 gzip 的 .gz 格式

linux-command 手册精读:znew 命令详解——将 compress 生成的 .Z 压缩包转换为 gzip 的 .gz 格式

文档教程 【免费下载链接】linux-command Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。https://git.io/linux 项目地址: https://gitcode.com/GitHub_Trending/linux/linux-command 点击查看 免费下载 在 Linux 压缩工具链中&…

2026/10/4 9:07:14 阅读更多 →

日新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 10:36:31 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:35 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:36 阅读更多 →