Rulith 是什么

给智能体一份可以核对的记忆:它记下的材料、立下的规则、得出的结论,每一条都写着依据。算不准的地方它会失败,不会含糊过去。

它解决的问题

智能体开始真的替你办事之后,三个问题就躲不开了:

  1. 它报的数可信吗? 你无法分辨一个数是算出来的还是顺口说的;
  2. 它说做完了,是真做完了吗? "我已经完成"是它的自我评价,不是一个可检查的事实;
  3. 出了错,能定位到哪一步吗? 过程散落在对话里,回头找不到当时它凭什么这么判。

这三个问题有同一个结构:再好的模型,也不能为自己作证。 加长提示词、要求它"一步步想",改善的是概率,不改变这件事的性质——过程仍然不可检查。答案只能来自模型之外。

Rulith 换一种分工:模型提出,板判定

模型把材料与规则放到一块"板"上,板负责推导、检查一致性、做精确计算。模型仍然做它擅长的事(读懂你的意思、提出该记什么该立什么规则),但"这个结论成不成立"不再由它自己说了算。

结论的三种身份

板上每一条内容都有明确来源,而且互不混淆:

这三者不可混同,是整个系统的命门。一个模型说"测试通过了",与一个真实运行器留下的记录,在板上是两种东西——前者进不了需要背书的那道门。

一个具体例子

假设你让智能体核对一张采购单。它在板上记下:

材料  line(item=钢筋, unit=3850, qty=12)
规则  金额 = 单价 × 数量

板推出:

结论  cost(item=钢筋, total=46200)
      依据:按规则「金额 = 单价 × 数量」,从你提供的 1 项材料推导得出

关键不在于undefined这个数对——而在于你能问"凭什么",并且得到一个可以继续追问的答案。如果单价填错了,你顺着依据链一眼看到是哪条材料的问题;如果规则写错了,你看到的是规则本身。模型没有机会把"我觉得差不多是这个数"混进来。

三件让它区别于"给模型加个数据库"的事

精确算术:算不准就失败

±253 内精确;越界、无穷、非数一律报错而不是悄悄舍入

一个会静默给出错数的系统,比一个会报错的系统危险得多——错数会被你当成对的用下去。

目标带反绎提示

你声明"什么算做完",板在每一步告诉你还差哪几件事。不是泛泛地说"继续努力",而是:

G1: priced(item=steel) [open]
  needs via AX_PRICED: checked(item=steel)

缺口具体到可以直接动手。而目标只有在闭包真的支持它时才翻成"已满足"——智能体说做完了不算做完。

缺席不等于通过

"没有人反对"不是"已经批准"。

板用 naf(无法被证明)表达缺席:没有签字就挂在待签,不会因为时间久了、没人提出异议就算通过。这条纪律写在领域能力的判据里,不靠人自觉,也不靠模型的好意。

它是服务,不是你要维护的软件

浏览器登录 console.rulith.com,在客户端(Claude Code / Codex 等)加一行接入命令,智能体就有了这份记忆。换电脑、换会话、换客户端,记忆都还在——因为它住在板上,不在对话里。

接着给它装领域能力:你这一行的词与判据。现成的不够用,自己写

对组织:这套纪律有完整形态

你在这份文档里遇到的每条纪律——结论只能推导、材料与结论永不混淆、收工要过闸、缺席不滑向通过——都是同一套治理结构的自助小号。

它的完整形态还包括:敏感动作的授权闸门(人不点头,动作不存在)、多智能体协作的委托链与验签、争议的独立仲裁、全程证据链的整体回放与审计包导出。这部分面向审批、金融、政务这类强问责场景,支持内网与本地部署,不在云上自助版里

组织视角的完整介绍见 www.rulith.com

→undefined分钟上手

正文住 content/*.md;能力清单、工具清单、字段矩阵由生成器从实现代码抽取 (快照在 facts.json)——改了实现而忘了改文档,校验会自己发现。