跳转到内容

设计理念

Arboria 起于几个具体的麻烦:一个对话承担太多职责,上下文越来越大;每台服务器状态不同,要算 SU,每次都要重新商量;worktree 和文件到处都是;记录要靠人手写。下面是由此定下的几条原则。

Claude Code 的会话应该随开随清。所以 idea、run、笔记和决定都存在会话之外的 SQLite 账本里,写入只走 arb。新会话开始时,hook 从账本里读回一屏摘要,就能接着往下做;CLAUDE.md 只放稳定的规则和你确认过的经验,不放当前状态。

账本用 SQLite 而不是 git 当数据库:跟踪任务的脚本和 Claude 会同时写入,直接用 git 会撞上 index.lock。git 只做事件备份,心跳类的更新不进 git。

LLM 能写入的只有假设、指标、改动原因、run 总结、经验和待办结果,都有长度限制。其余字段由代码生成和校验。“能用程序算的(检查、估计、状态、跟踪任务)都不交给 LLM”。

每个 idea 一个 marimo notebook,是你的主要工作区:整理思路、发起实验、分析结果。Claude 能读它,理解你的想法,但不能改;它的活来自你留下的待办。notebook 不进代码快照,改一句话不会改变快照,合并时也不会冲突。

要改训练代码,你在 notebook 里留待办;要一个新的分析,你直接写 lab.svd(r, ask="…"),命令不存在时交给 Claude 去写,存成一个函数。之后每次调用都只是运行这个函数:不花 token,结果可复现。只改配置的实验和全部分析都不经过 LLM。

Claude 和 notebook 只能生成审核单。作业只在你自己的终端里、你输入 run id 确认之后才会提交;审核单绑定内容哈希,你看完之后代码、配置或资源有任何变化,批准就作废。

为什么不在页面上放批准按钮:marimo 页面上的按钮,本机任何进程都能通过接口去点,所以看板只把命令显示成文字。

在提交前几秒内,或者开跑后十分钟内,而不是八小时之后:审核单在本地就算出计费卡数、分段和预算;开跑后的观察期里,日志出现 NaN 或 OOM 就自动取消。

坦白地说:同一台机器上的进程理论上可以直接改数据库。这套防护挡的是“顺手照做”——会话里一句话、一段日志、一个文件让 Claude 自己去提交或批准——挡不住有意的对抗。对一个人用的研究工具,这是合适的强度;真正的保证放在代码路径上:只有一个提交调用点,提交前核对账本里的人类批准。详见安全模型。

训练代码只读 ARBORIA_DATA、ARBORIA_CKPT_DIR、ARBORIA_OUT 这样的角色变量,不认具体路径;机器之间的差异(架构、分区、计费、路径、Duo)都写进机器 profile。