keel v0.2.0
M2 · 可信记忆。记忆终于有了可推导的生死,任务能跨工具接上。
升级:重跑一次安装脚本即可,.keel/ 的格式向后兼容,v0.1.0 建的仓库不用改。
keel sync 会新增 .keel/knowledge/INDEX.md 并更新 CLAUDE.md / AGENTS.md 的协议块。
证据只能跑出来
keel verify <M-…|D-…> -- go test ./internal/store/...
keel verify <M-…|D-…> --rule R-…
真的 exec 一次验证器,把退出码翻译成 pass/fail/error/timeout,写成 .keel/evidence/E-<uuid>.md。
没有「登记一条我认为它通过了」的入口。 自述的通过既不能被别人重跑,也不能被撤回,
写进仓库就成了不可证伪的事实。
- 记忆:pass →
verified并写verified_at;fail →disputed。 - 决策:只追加证据,不改状态。
proven是人的判断,不是跑通一条命令的自动结果。 - 验证器跑不起来或超时:照实记进证据,但不做任何状态转换——那既不是通过也不是失败。
证据记两个摘要,回答两个不同的问题:subject_digest 盯结论本身,
target.content_digest 盯 scope 覆盖的代码。改了记忆正文,旧证据就对不上;
代码变了但结论没变,验证结果算过期。两种失效模式不同,必须分开报。
记忆生命周期由证据推导,check 不改写文件
| finding | 条件 | severity |
|---|---|---|
memory_status_unsupported |
自称 verified,但没有一条 pass 证据的 subject_digest 对得上 |
error |
memory_evidence_stale |
证据验的那份代码之后变过了 | warn |
memory_review_due |
review_after 已过 |
warn |
memory_conflict |
反例指向的结论仍是 verified | warn |
memory_status_unsupported 是 error 而不是提醒:文件自称 verified、证据却撑不住,
等于把未验证的经验当项目规则用。
状态转换的入口只有两个:keel verify 真的跑完一次,或人手工编辑文件。
check 只推导并报告——让 pre-commit 顺手改文件,改动就从 git diff 里消失了。
任务能跨工具接上
keel task set --goal "给存储层加缓存" --done "读完 internal/store" --next "写 LRU"
keel task show
同一个 worktree 上 Claude 与 Codex 之间的交接。摘要出现在 brief 和 SessionStart 最前面。
它在 .keel/cache/ 里、不进 git——这是交接,不是长期记忆;要跨 clone 留下的经验仍走 note / decide。
HEAD 往前走之后会照实说「摘要可能已经落后」,不假装还准确。
检索按任务收敛
brief 改成六档确定性排序:显式 ID > 路径 > 冲突与失败 > 有效证据 > 主题 > 兜底。
「适用条件」不参与打分,而是逐条原样展示:判断它适不适用是宿主 agent 的活,不是 keel 的。
上限为 1(有适用先例才自决)时,额外列出适用先例及其有没有跑出来的证据。
policy.Precedents.Verified 现在接的是真实证据,但它只出现在说明里,不参与上限计算——
扩大自决范围仍然只能改配置。
knowledge/INDEX.md
keel sync 生成并进 git:决策、规则、记忆各一张表,记忆那张带验证时间和证据条数。
clone 之后不装 keel 也能读。内容只来自仓库里的对象,两台机器 sync 出来一模一样。
修复
- 列表选项重复给时静默只留最后一个。
--tag a --tag b会丢掉 a,
--scope/--path/--condition/--rule-migration同样。现在既可重复也可逗号分隔,两种写法等价。
这正是 keel 在别处拒绝的静默丢弃。
还没做
M3 的 keel review 与受控进化;M4 的 init --from、--codemap。
装
curl -fsSL https://raw.githubusercontent.com/shiftu/keel/main/install.sh | bash # macOS / Linux
irm https://raw.githubusercontent.com/shiftu/keel/main/install.ps1 | iex # WindowsSHA256SUMS 一并发布,shasum -a 256 -c SHA256SUMS 可对。