Runex
Agent 的共享世界模型。
Object: { type, # 是什么(人 / 项目 / 风险 / 矿机…)
fields, # 有哪些属性(名称、金额、日期…)
links, # 和哪些对象关联
state, # 现在处于哪个阶段(谈判中 / 已签约…)
actions # 能做哪些动作(推进 / 取消 / 归档…) }
Link: { from, relation, to } # A —[关系]→ B什么时候用
| 你说 | Runex 做什么 |
|---|---|
| ”红杉口头确认了,周五签TS,帮我记一下” | 写入 Commitment,关联 Person 和 Deal |
| ”字节把估值砍一半,这事有风险,先别动” | 写入 Risk,Deal 状态不变,Thought 快照 |
| ”王总这个人拖单的概率有多大?“ | 查询 Person 关联的 Deal / Risk / Commitment |
| ”把这笔交易推进到谈判阶段” | 执行有验证的生命周期动作 |
| ”签约之前,先让我看看会影响什么” | preview 干跑,不提交任何变更 |
| ”我现在所有 pending 的承诺都有哪些?“ | 按类型 + 状态过滤,跨所有 session |
| 另一个 skill 需要这里的数据 | 读写同一批共享对象,不用重新告诉它背景 |
为什么需要它
你的邮件 skill 找到了一个承诺。日历 skill 看到了会议。任务 skill 建了截止日期。每个 skill 只记得一个碎片。
邮件 skill ────┐
日历 skill ────┤
任务 skill ────┼──> Runex ──> 人、项目、交易、承诺、风险
笔记 skill ────┤ 关联、状态、动作
CRM skill ────┘Runex 给它们同一套持久的世界模型。
预置对象
加载后立即可用:
# 人与组织
Person: { 名称, 别名?, 邮件? }
Organization: { 名称, 类型? }
Client: { 名称, 联系方式?, 背景? } # prospect → active ↔ inactive → lost
# 工作管理
Project: { 名称, 描述?, 截止日期? } # active ↔ paused → completed / cancelled
Task: { 标题, 优先级?, 截止日期? } # open → in_progress → done / cancelled
Goal: { 标题, 周期?, 关键结果? } # draft → active → achieved / abandoned
Sprint: { 标题, 周期, 聚焦 } # draft → active → completed / cancelled
# 内容与知识
Event: { 标题, 时间?, 参与者? }
Document: { 标题, 链接?, 摘要? }
Note: { 标题, 正文 }
Thought: { 标题, 正文, 时间?, 触发源? } # 时间锚定快照,写完即封存
Message: { 摘要, 发送方?, 接收方?, 渠道? }
# 商务
Deal: { 名称, 金额?, 客户? } # prospecting → negotiating → won / lost
Product: { 名称, 定价?, 版本? } # concept → in-development → launched → retired
# 决策追踪
Commitment: { 描述, 承诺方?, 截止日期? } # pending → fulfilled / broken / cancelled
Decision: { 描述, 背景?, 依据? } # proposed → accepted → superseded / rejected
Risk: { 描述, 发生概率?, 严重程度?, 应对策略? } # open → mitigating → resolved / accepted / dismissed以上是默认核心(17 种类型)。按需还可加载领域包:packs/knowledge(Atom 原子知识/Topic/
HowTo/MOC)、media(自媒体作品/书签)、session(LLMSession 抽象 + ClaudeSession / CodexSession / OpenCodeSession / WeChatConversation)、
time(Thread + closure-aware 日程:closure≠completion,每日 TODO/Done 派生自 Task)、
wiki-links(写 [[名称]] 进关系字段 → 反应式建成 typed 边,无需链接动词)。
运行时查看已装类型:runex schema(表视图)或 runex schema <Supertag> --json。
不够用时,告诉 agent 你需要什么——当场写 schema,加载即生效。
从记忆到本体(ontology)
普通 agent 记忆存文字。知识图谱加了类型和关联。Runex 再给对象加行为——
每个对象知道自己现在处于哪个阶段(比如”谈判中”),能做哪些动作(“推进到签约”),满足什么条件才能做(“合同草稿必须存在”),以及做完之后会触发什么(关联任务自动变更状态)。
这些规则写在 ontology 文件里,一次定义,所有 agent 永远有效——不用每次开新对话都把规则重新解释一遍。
例子:小行星关矿
假设你在用 OpenClaw 经营一家太空矿场。小行星 2029-YX 正在接近,监控系统写入最新距离:
runex node update asteroid-2029-yx --field "距离地球公里" "380000"距离低于警报阈值,规则链依次触发:
AsteroidThreat 2029-YX monitoring → alerted ← 距离低于警戒线
OreMachine 矿机 A / B / C producing → stopped ×3 ← 警报触发停机
Employee 全体矿工 available → suspended ×12 ← 矿机停工触发挂起一条数据写入,三层对象的状态自动联动——你不用守着 agent 一步步喂信息:“警报了,去停矿机”,“矿机停了,去中止矿工上班”。
规则写在 ontology 文件里,不是写在某个 agent 的对话里。任何来源触发同一条写入,响应链都会执行。这套规则可以在对话中现写,加载即生效。
一分钟上手
runex init
runex ontology manifest然后直接和 agent 说话:
红杉开完会了。王总口头说周五出TS,但他提到监管层面有点顾虑,
感觉拖的可能性不小,帮我记一下。Agent 写入三个对象:
Commitment: 王总周五出TS # pending,截止周五
Risk: 监管顾虑导致投资人犹豫 # open,发生概率 medium
Thought: 王总倾向拖延 # 时间戳快照,封存周一回来:
今天到期的承诺有哪些?不用翻上周的聊天记录——直接查到,有状态,有关联。
执行前,先 preview
对任何对象触发一个状态变更,都可能连带影响关联的其他对象。比如”把这笔交易标记为签约”,可能同时触发相关任务完成、承诺履行、风险归档——具体连带了什么,取决于你的 ontology 里定义了哪些规则。
执行前先模拟跑一遍,看看会动哪些东西:
# 模拟执行,不写入任何数据
runex ontology preview win_deal series-a
# 确认无误,再真正提交
runex ontology run win_deal series-a如果条件不满足,Runex 会说明原因,而不是静默失败。
本地运行
~/.runex/data/data.db不上云,不需要账号。通过 pip/uv 安装,支持 Claude Code、Codex CLI、OpenCode。
Runex 把分散的 agent 记忆,变成有类型、有关联、有生命周期的共享对象。