CodeEraser
CodeEraser 图标:橡皮扫过代码行

CodeEraser

LLM 写的代码会堆积:重复代码块、死文件、过期文档、结构蔓延。 CodeEraser 度量它、判决它、用一个只准变好的分数把住大门。

安装包 GitHub Releases:x86_64-windows · x86_64-linux · aarch64-macos · x86_64-macos · aarch64-linux,GUI + CLI + 判决核,SHA256 钉扎;Windows 安装包运行 ce setup,AppImage / dmg 用户自己跑一次
Homebrew brew install skymanbp/codeeraser/codeeraser(macOS 与 Linux,由同一组 pin 生成)
Cargo cargo install codeeraser
Claude Code ce setup,或手动:/plugin marketplace add skymanbp/CodeEraser@release,再 /plugin install codeeraser@codeeraser
更新 ce update --yes

ce update 拿最新 tag 对比本构建(退出码 0 / 1 / 2);--yes 在两枚 SHA256 pin 都通过后替换 cece-core(但绝不动插件或 cargo 拥有的副本,它们各自给出自己的更新命令);--installer 则保存经校验的 GUI 安装包。GUI 有更新屏,Claude Code 里用 /codeeraser:update

$ ce check --lang zh --roast
检查分数 944/1000 | 判轴 0:86 1:0 2:102 3:0 4:0 5:0 6:205 | 候选 34
棘轮:新增 0,移除 0,超限 0,动用容差 3 -> pass
注:10 块并入既有成员,15 个文件内对不入相似表
毒舌:干净得可疑。你贿赂谁了?

真实输出:CodeEraser 判决它自己的仓库。棘轮只收不放:违规集入基线银行,新增熵直接判负。

同一个任务,跑两遍

不带 CodeEraser带 CodeEraser
文件落盘前被拒绝的写入02
残留的克隆块40
重复文档段10
仍欠的删除10
检查分数871979

同一个七步任务,两份完全相同的种子树;唯一的变量是 CodeEraser 在不在环内——写入时的守卫、Stop 审计,以及审计拒绝之后按自己的计划执行的擦除。两次都仍以红色收场——但红的不是同一件事。

种子是 demo/seed/,一个精确到分的 Python + TypeScript 小型开票服务,两次运行之前先由同样的门量过、判为干净;任务是加折扣、紧凑报表、CSV 与 JSON 输出,以及 API 里的金额格式化。

看它工作

接进工作流

CI 门 ce check . --fail-under 939  # 棘轮+地板;exit 1 直接把流水线判红
pre-commit ce precommit  # 暂存区净行数 + 涉改重复块
MCP ce mcp  # 每个报告家族都是任意 agent 可读的只读工具

判决家族

ce check

总门。轴合成 0–1000 分,对基线银行只缩不涨的棘轮,外加 CI 硬地板。

ce dedup

winnowing 指纹的 T1/T2 克隆检测,克隆块预算只准往下棘。

ce clone

T3 近似克隆:Haskell 核的树编辑距离判决,改名换形的拷贝一并抓。

ce deadcode

缓存引用图上的存活性判决:无保留入边、无入口声明即判死,门就红。旁边是未被提及的声明顾问,它永不把门翻红。

ce docdup

文档与注释里的重复散文,活段上的精确 Jaccard 判决。

ce structure

树尺度结构熵:布局偏离、文档陈旧、冗余、模块度诸轴,整仓一览。

ce scan

逐文件逐函数的尺寸、复杂度、可读性,经典指标由核分级;判的是全局表,或该文件自己那条 [[rules.class]] 线。

ce trend

主线历史上的分数轨迹,逐提交缓存、可重建、方向诚实。

ce erase

确定性两段式擦除器:死文件、逐字重复的文档孪生、整单元精确克隆。先出计划,只在干净工作区上应用,且永不通过让模型重写代码来完成。

ce churn

git 窗口内的改动热度,逐单元归属,看得出一个文件是在被重写,还是只在被追加。

ce join

三信号联判:把改动、重复与存活性折成一条判决,热的、重复的、已死的那个角落会自己报名。

ce similar

同角色顾问:在索引已有的词袋上做整数 BM25,由核判定哪些候选扮演查询的角色。确定性、离线的检索,只当顾问,永不把门翻红。

守卫钩子

作为 Claude Code 插件:重复写入在落笔瞬间被拦,停止时审计,会话开始报健康。

实测 · v1.7.3

hook 探针 p50(两文件夹具)46 ms
全仓扫描 p50671 ms
增量索引 p50(暖跑,dedup_warm)490 ms
守卫误报(人裁 630 事件)每 500 次编辑 0.00 次误报
docdup 判准(冻结黄金集)范围内 17/17(100%)

每个数字由回放产生(cli/tests/it/bench.rs 与 bench_backfill.rs),单源 contracts/bench/bench.json——绝不手填。当前发布 v1.7.4 沿用 v1.7.3 的数值:按规则它算新程序,但本版的改动落在这七项指标所计时的范围之外,故未重新测量。

完整评估仪表盘 →

内部构造

架构图:仓库由 Rust 度量侧解析并取指纹(tree-sitter、由逐项目 daemon 保温的 SQLite 指纹索引、引用图、git 窗口),经一条十二个家族的 NDJSON wire 进入 Haskell 判决核(策略作为数据随之发布),同一批报告由五张面孔渲染(终端、GUI、MCP 服务器、Claude Code hooks、CI)
度量在 Rust,判决在 Haskell:一条 wire、每家族一份报告 schema、五张面孔。由 docs/diagrams/architecture.zh.json 渲染;每个组件都引用自己的源文件。打开原尺寸 SVG

查看组件级技术栈与执行门禁 →

信任锚

全部十五个发布二进制(平台 × ce / ce-core,再加个 GUI 安装包)都以 SHA256 钉扎在 plugin/bin/manifest.env;tag 阶段逐 pin 校验、等被打标提交的 CI 全绿、拒绝任何计划外资产,然后才发布。SHA256SUMS 覆盖全集可离线核对。代码签名被刻意排除在设计外;哈希链就是永久信任锚。本仓库每次提交都用自己的工具给自己把门。