v2.3.0 — 交接、闸门,和一次审计复核
这一版起于两个问题:一个空目录之外的文件夹怎么进 MAGI,以及下一个开工的人
怎么知道上一个人做到哪了。中途插进来一份 68KB 的系统审计,复核完又修掉九处。
magi adopt
magi init 本来就能在非空目录里跑。缺的是判断目录里那堆东西是什么,以及
搬动之后文件之间互指的路径还指得准。前者是判断,留给 skill;后者是路径
算术,写成命令。
关键决定是不在链接会断的地方报错,而是改。证明一条链接要断的那套算术,
同时也算得出它该指向哪——包括写在反引号里的路径,没有任何东西渲染它们,也就
没有任何别的东西会发现它们失效了。
对着两个真实课题仓库做的:Algebra_Energy_Barrier(材料全压在 research/
一层之下,109 个 arXiv id)三棵子树整体搬,0 处改写、27 条链接全活;
KW Duality(扁平,37 个 arXiv id)六次搬动,26 处引用被改对,26 处全是
散文路径、markdown 链接 0 条——这个仓库被任何不管散文的搬动处理都会静默
散架。两者撤销后与原件逐字节相同。
交接:在人进来的时候说,不是在人走的时候
sync --close 多了一节「留给下一个人的半成品」——未提交的改动、排队没跑的
批次、开着没判完的雷达简报、inbox/ 里等着的文件。全部是对已有文件的查询,
一个字都不写:v2 退休 log.md 的理由就是「把同一批事件写到第二个地方,两份
记录就会开始互相矛盾」。
但只在会话结束时说是错的一头。session-start 钩子现在三段一起给:magi next
的清单、上一个会话留下的在途东西、以及 skill 比 CLI 旧的警告。什么都没有时
仍然一个字不说。
skill 过期,终于有东西在看
精确的判据本来就有(逐字节比对当前包会写出来的内容,不信版本号),缺的是没有
任何自动运行的东西问过它。你的 Claude 插件钉在四个月前的快照上,期间没有任何
东西说过一句。现在 sync 每次问,而且报文件名不报数目——skills where 报
的「1 outdated」被人看一眼就放过了,而它背后是一个躲过两轮清理的 v1 skill。
闸门从一个宿主变成三个
代码里那句「Claude Code 是唯一文档化了这些的宿主」是一句关于别人产品的断言,
而且已经过期。
Codex 形状和 Claude 一样,阻断词也一样,一个写入器服务两家。形状不是照
文档抄的:机器上两个真实安装的 Codex 插件里就有 hooks.json,逐字对上。
Antigravity 三处都不同,而且是从它随安装附带的第一方文档里读出来的:顶层
键是钩子名字,Stop 是不带 matcher 的扁平数组,没有 SessionStart。
阻断词是 decision: continue,而它自己的文档写着「任何其他值都允许 agent
停止」——照 Claude 的形状写过去会得到一个能解析、永远不触发的文件。
这条装上了但没验证过,报告里就是这么说的:agy --print 下一个钩子都不
触发,它的文档给路径用的是「e.g.」。一个人以为存在的闸门,比一个他知道要去
检查的闸门更糟。
审计复核:26 条验完,10 条属实
两个 Critical 都属实,而且都比报告写的更糟:
_ours()早就写好、docstring 一字不差描述了那个 bug、从未被调用。真机
复现:一个自己写的research/skill 连同REFERENCE.md被uninstall删掉。.cmd宿主不是崩溃,是静默截断——回显首参数的.cmd收到三行字符串,
打出ARG1=[line one],退出码 0。npm 装的宿主会拿到评审提示词的第一行然后
信心十足地作答。
其余属实并已修:竞态分支自己的 TypeError;executescript 先提交导致失败的
重建把图谱清空;render_command 丢掉 origin 标记(这就是那个 v1
radar_review.md 熬过两次升级的根因);Ctrl+C 在 setup 里等于「是」;
托管块告诉 agent output/ 可随便删,而它装着删不掉的账本——项目自己生成的
_index.md 早就写对了,两个说法发给了不同的读者。
八条判错的全是同一个毛病:照 API 语义推,没实测。resolve() 自己就规范化
大小写、SQLite 不会把 C: 当主机名、urllib 默认就发 UA。
也修了
WebUI 视觉重做(卡片从「材料」变回「纸」)+ 图谱快速搜索,复核时找到 markMatch
在转义后的串里找下标却用未转义的长度去切,搜 & 会把 <mark> 落在实体中间。
补了一条真正执行 JS 的守卫:把函数从 app.js 里按名字抠出来在 node 里跑,
而不是在 Python 里重写一遍。
质量
2780 个测试通过 / 1 跳过。84 条变异用例全部会咬(新增 24 条)。三宿主冒烟于
2026-09-02 通过:复核者驳回了一个故意过宽的命题并逐行点名,18.8 秒。
本版三次栽在同一个坑上:守卫的测试直接调守卫,而调用点那行接线一次都没跑到。
三次都是变异用例报 MISSED 才发现的。
pipx upgrade --install magi-researchBrowser button — magi-browser-extension-v1.2.2.zip below.
Unzip it, open chrome://extensions, turn on Developer Mode, and use Load unpacked on the unzipped folder. It sends the page you are reading to a local MAGI queue and nothing else; nothing enters a library until you approve the batch.