🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

经典著作代码审查 hyhmrright/brooks-lint

DeepSeek Harnessv1.9.1
hyhmrright0 天前有提交已提供中文文档扫描:含敏感能力

植根于十二本经典工程著作的 AI 代码审查。

69.6/100
综合分
1,557
GitHub 星标
1,110
npm 周下载
—/5
用户评分

数据截至 2026/11/3 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add brooks-lint
npm 源 · brooks-lint 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · platform
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 0 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包brooks-lint @ 1.9.1
✓Node 引擎要求 >=20 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/29 01:38:46

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件
查看扫描证据(共 9 处,展示前 9 条)
  • 读取本地文件
    lib/index.js:78
    const entries = await readdir(assetRoot, { withFileTypes: true });
  • 读取本地文件
    lib/index.js:86
    raw = await readFile(locator, "utf8");
  • 读取本地文件
    lib/index.js:124
    const { content } = parseSkill(await readFile(locator, "utf8"), locator);
  • 读取本地文件
    bin/brooks-lint.mjs:22
    try { return await realpath(location); }
  • 读取本地文件
    bin/brooks-lint.mjs:41
    console.log(JSON.parse(await readFile(path.join(root, 'package.json'), 'utf8')).version); return;
  • 读取本地文件
    bin/brooks-lint.mjs:63
    const resolvedSource = await realpath(source);
  • 读取本地文件
    bin/brooks-lint.mjs:69
    const entries = await readdir(source, { withFileTypes: true });
  • 写入本地文件
    bin/brooks-lint.mjs:77
    await mkdir(target, { recursive: true });
  • 读取本地文件
    scripts/npm-platforms.mjs:6
    const source = await readFile(installer, 'utf8');
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

界面预览

1 张 · 点击查看大图

功能亮点

  • 腐化风险诊断
  • 附书籍引用与严重度标签
  • 六种分析模式

AI 代码审查,扎根 12 本经典工程书——腐化风险诊断附书籍引用、严重度标签,6 种分析模式含全量扫描自动修复

v1.9.12026-10-24
· [1.9.1] - 2026-10-24 本次发布把 GitHub 和 npm 统一到 1.9.1。已撤回的 npm 1.9.0 不再复用。发布前需在确切的发布提交上通过远程 CI。 · 新增 · 原生 DeepSeek Harness 插件包和技能服务商,通过 DSH 注册表暴露六个技能及其共享资源(#44)。感谢 @Sad-happy。 · 可移植的 npm 命令行工具,把技能安装到全部 14 个现有编程智能体平台目标,支持全局、项目和自定义目标位置、平台列表,且不依赖 Bash 或 Git。 · npm 分发元数据、打包产物安装回归测试,以及 DSH 市场索引生成器,要求 npm 版本已实际发布并使用其注册表发布时间戳。文档涵盖 npm 安装、发布和添加项目自有的 DSH 市场源;不声称默认收录进市场,也不声称与线上宿主兼容。 · 修复 · 发布测试夹具克隆时不继承标签,避免已发布的附注标签在 CI 中改变合成的审计基线。 · npm 发布要求工作树干净且已提交,并且确切提交上最近一次远程 Validate 运行成功,包括每个矩阵任务。回归测试和发布流程在发布前强制执行远程验证。 · DSH 技能发现现在只忽略缺失的文件;意外的读取失败会保留文件路径和原始原因,不再静默隐藏技能。六个服务商回归测试覆盖发现、描述、加载、共享资源和错误处理。 · 变更 · 在所有 README 译文、清单、安装指南和网站中,把 GitHub 和 npm 的发布信息同步到 1.9.1。纳入版本管理的 About/topics/managed-label 配置和元数据校验命令现在参与发布门禁。 · 全部六份 README 译文以及入门指南和 DSH 指南现在区分 npm 文件系统安装与原生插件注册。安装器测试覆盖所有平台目标、参数校验、路径安全,以及保留无关文件。 · 致谢 特别感谢 @Sad-happy 在 #44 中贡献原生 DeepSeek Harness 包和技能服务商,并在 DSH 0.2.1-rc.2 桌面版上完成社区端到端验证。你的贡献让 brooks-lint 成为真正可安装的 DSH 插件,你在真实宿主上的测试帮助我们把它带到 npm 和插件市场发现。 · 安装与 DSH 发现 用 Node.js 20+ 和 npm 安装可移植的 Agent Skills: npx brooks-lint install codex npx brooks-lint install --list 按包名安装原生 DSH 插件: dsh plugin --profile web add brooks-lint 要在 DSH Discover 中搜索,启用 Custom plugin markets 并添加项目自有的源: 搜索 brooks-lint,或用 codex、cursor 等关键词发现它。DSH 不附带默认索引源。社区市场提交正在等待维护者审核:awesome-dsh-plugin #9022 和 Open Plugin Market #65。 已发布的产物已验证全部 28 条全局/项目安装路径、六个 DSH 技能,以及按包名进行的实际 DSH 插件管理器安装。这不代表在每个编程宿主中都做过全新的端到端测试。
v1.8.02026-10-16
· [1.8.0] - 2026-10-16 · 新增 · 通过 GitHub Action 的 max-tokens 输入和 --max-tokens 命令行参数,可配置模型输出上限,并校验为正的安全整数(#39、#42)。感谢 @scottschreckengaust。 · 新增 config-ref Action 输入:CI 现在把 .brooks-lint.yaml 和条件性自定义风险指引加载到独立的系统策略块。拉取请求默认使用可信的基线策略;config-ref: head 显式选用检出策略(#40)。感谢 @scottschreckengaust。 · 社区贡献的文档,以及一个 OIDC 工作流示例,用于在 Amazon Bedrock 和 Mantle 上运行 Claude,复用现有的自定义端点支持(#38)。感谢 @scottschreckengaust。这些集成保留,但不在维护者持续验证范围内。 · 共享审查指引和 sweep 报告现在会标明配置来源,并遵循运行器提供的策略。新增基线策略抑制回归场景,结构评估套件增至 58 个场景(#40)。感谢 @scottschreckengaust。 · 修复 · 截断的报告现在会发出工作流警告,在 JSON 中带上 truncated: true,并在 PR 评论中显示警告,让不完整的发现和被抬高的健康分可见。现有 live-eval 运行器也能检测截断(#42)。感谢 @scottschreckengaust。 · CI 会应用配置的严格度和其他项目策略,不再默默使用默认值。PR 基线策略不可用时现在会显式失败,不再回退到未经批准的 head 策略(#40;关闭 #43)。 · 文档中记录的 Action 固定版本现在会在全部六个 README 和工作流示例中自动跟随发布版本;更新了可执行的 GitHub Action 依赖,并新增版本漂移回归检查(#41)。感谢 @scottschreckengaust。 · 发布审计输出现在能正确处理零和单数计数,会说明审计范围,回归覆盖也更强。发布审计测试夹具使用隔离的基线标签,继承的分支历史无法使其失效。 · 变更 · 仓库维护从 Claude Code 迁移到 Codex:可发现的本地技能链接、Codex 智能体角色、顺序维护框架,以及显式的离线验证关卡。完成的变更必须提交并推送。 · 维护者测试政策:维护者的 Claude 账号已被封禁。从 2026-10-16 起,维护者持续测试和验证只覆盖 Codex 相关能力。此前对 Claude Code、Gemini CLI 和其他平台的验证属于历史记录。现有集成仍然可用,欢迎社区验证和贡献。 · 本政策不会把 GitHub Action 或 live-eval 运行器迁移到 OpenAI 后端:它们仍使用现有的 Anthropic 客户端。Anthropic live eval 不再属于维护者例行验证;离线验证、单元测试、结构评估和解析器基准仍在使用。 · 在全部六个 README 和工作流示例中说明:CI 里的 mode: sweep 只报告发现,不应用修复(#37)。感谢 @scottschreckengaust。同时说明了 token 输入描述,并移除冗余的最低版本标注,这些已由版本引用校验覆盖(#41、#42)。
v1.7.02026-09-20
仅面向维护者——六个技能、它们的指南,以及插件安装的所有内容,都与 1.6.0 逐字节一致。1.6.0 发布时,更新日志章节漏掉了两处改动,且都是发布后审计才发现的,所以这次发布加固了*本仓库*的发布流程。 · 新增 · npm run changelog:audit——逐条核对发布范围内的每个提交(scripts/changelog-audit.mjs)。它从上一个发布标签(v[0-9]*)推导范围,只应用三条豁免——版本号提升、分支提交已单独列出的合并提交、每周的 star 历史刷新——其余打印成清单逐条走。每行要么补一条记录,要么写明不需要记录的理由。两次发布之间,它把同一范围当作下个版本的待办清单,并以 0 退出,所以选版本号之前,也用它核对版本号与实际未发布的改动是否相符。 star 历史豁免按提交改动的文件判断,不看提交标题:路径来自 STAR_HISTORY_FILES,由 gen-star-history.mjs 导出,让图表生成器和豁免共用一份定义。若改用 [bot] + chore: 匹配,dependabot[bot] 的 chore(deps): bump … 就会白得豁免,而依赖升级是本更新日志要记录的改动。 · npm run validate 里的发布期覆盖率闸门。checkChangelog() 只证明新版本的章节存在。checkChangelogCoverage() 现在还会拦下机器能证明的那一处缺口:范围内合并的拉取请求,其 #N 从未被该章节引用——按 #N 或 /pull/N 链接匹配。 它只在发布进行中运行,判定条件是「package.json 的版本还没有 v 标签」——所以日常开发时它不动作,而在唯一要紧的时刻无法跳过,也不用记任何开关。validate.yml 用 fetch-depth: 0 检出,因为闸门需要标签。 · 提交落地时不带版本号提升、把记录推迟到下个版本的,用 Changelog: git 尾注标记。审计会在清单里标出它。用尾注而不是正文里写一句话,因为散文分不清一个提交是推迟自己的记录,还是在引用另一个推迟了记录的提交——1.6.0 就是这样丢了 d4b5c40,尽管它用大白话请求被记录。 · npm run validate 每次运行都说明闸门做了什么。停用时说明原因(Changelog coverage: not audited — v1.6.0 is already tagged.);审计时说明范围和覆盖面(… audited 4 commits in v1.6.0..HEAD — pull-request citations only; walk the rest with npm run changelog:audit.)。普通 npm version 在提交时就打标签,而远端删掉的标签在本地仍存活——两者都会悄悄让整个发布期的审计失效,而不声不响的关闭状态读起来和通过一模一样。 被审计的那一半直到这次发布才补上:闸门在真正执行审计的那条路径上什么都不打印,而覆盖它的测试此前只在本仓库带标签时跑过,所以只走了停用分支,从没走过另一条。升到 1.7.0 让仓库首次进入强制模式,测试当场失败。 · 修复 · 上面的 [1.6.0] 章节现在补上了漏掉的两处改动——d4b5c40 的平台校验检查,以及来自 @2233admin 的 PR #25,此人在一次表彰了另外两位贡献者的发布中未被署名。两处都是 1.6.0 发布后补的。 · 变更 · 发布现在要求走完提交范围,而不是抽样。CLAUDE.md 的 Release Process、release 技能和 release-manager 智能体都在写更新日志与校验之间加了明确的审计步骤,三者现在都写明 1.6.0 漏记所违反的规则:除列出的三条豁免外一律不豁免——没有用户可见行为变化的内部加固也要一条记录,外部贡献者的维护者向修复同样要,并像其他人一样获得 @handle 署名。 · 发布流程记录了绿色审计证明不了什么。三处盲区,属于构造使然:章节里任何地方出现一个裸 #N 就能过闸门(它只证明数字写了,不证明记录写了);rebase 合并的 PR 既不留 (#N) 标题也不留合并提交,所以它清单行背后没有任何强制;发布版本提升本身暂存的内容,任何发布都不会审计——这类修复要在提升版本号前作为独立提交落地。已记录在 CLAUDE.md、release 技能和 release-manager 智能体中。
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
brooks-lint 植根于十二本经典工程著作的 AI 代码审查。 一致、可溯源、可落地。 English ·简体中文 ·繁體中文 ·日本語 · 한국어 · 快速上手 • 六类衰退风险 • 实际效果 • 基准测试 • 安装 → 访问官网 "一个孩子要十月怀胎,无论派多少人去都一样。" —— Frederick Brooks,《人月神话》(1975) 五十年过去,Brooks 依然正确——McConnell、Fowler、Martin、Hunt & Thomas、Evans、Ousterhout、Winters、Meszaros、Osherove、Feathers 以及 Google 测试团队同样如此。 大多数代码质量工具只数行数和圈复杂度。brooks-lint 更进一步——它对照六个衰退风险维度(综合自十二本经典工程著作)诊断你的代码,每一次都产出带书目出处、严重度标签和具体对策的结构化诊断。 完整的"书目—技能"映射(含例外与误报防护),见 skills/_shared/source-coverage.md。
展开完整文档(README 剩余 1 节)
brooks-lint

植根于十二本经典工程著作的 AI 代码审查。
一致、可溯源、可落地。

English ·简体中文 ·繁體中文 ·日本語 · 한국어 ·

快速上手 • 六类衰退风险 • 实际效果 • 基准测试 • 安装

→ 访问官网

"一个孩子要十月怀胎,无论派多少人去都一样。"
—— Frederick Brooks,《人月神话》(1975)

五十年过去,Brooks 依然正确——McConnell、Fowler、Martin、Hunt & Thomas、Evans、Ousterhout、Winters、Meszaros、Osherove、Feathers 以及 Google 测试团队同样如此。

大多数代码质量工具只数行数和圈复杂度。brooks-lint 更进一步——它对照六个衰退风险维度(综合自十二本经典工程著作)诊断你的代码,每一次都产出带书目出处、严重度标签和具体对策的结构化诊断。

完整的"书目—技能"映射(含例外与误报防护),见 skills/_shared/source-coverage.md。

快速上手

Claude Code
/plugin marketplace add hyhmrright/brooks-lint
/plugin install brooks-lint@brooks-lint-marketplace

其他任意 Agent Skills 平台 —— Cursor · Codex · Gemini · Copilot · Windsurf · OpenCode · Kiro · Bob …
curl -fsSL https://raw.githubusercontent.com/hyhmrright/brooks-lint/main/scripts/install.sh | bash -s -- <平台>

装好后直接开口("审查这个 PR""审计架构"),或运行六个命令之一——/brooks-review、/brooks-audit、 /brooks-debt、/brooks-test、/brooks-health、/brooks-sweep(各自的作用)。

每条诊断都以 症状 → 根源 → 后果 → 对策 返回,附书目出处和 0–100 健康分。完整安装方式(另外 10 个平台)和 CI/CD 配置见下文。

十二本书

| 书名 | 作者 | 贡献于 |
| The Mythical Man-Month(人月神话,1975) | Frederick P. Brooks Jr. | R2、R4、R5 |
| Code Complete(代码大全,1993,第 2 版 2004) | Steve McConnell | R1、R4 |
| Refactoring(重构,1999,第 2 版 2018) | Martin Fowler | R1、R2、R3、R4、R6 |
| Clean Architecture(架构整洁之道,2017) | Robert C. Martin | R2、R5 |
| The Pragmatic Programmer(程序员修炼之道,1999,20 周年版 2019) | Andrew Hunt & David Thomas | R2、R3、R4、R5、T2、T3 |
| Domain-Driven Design(领域驱动设计,2003) | Eric Evans | R1、R3、R6 |
| A Philosophy of Software Design(软件设计的哲学,2018) | John Ousterhout | R1、R4 |
| Software Engineering at Google(Google 软件工程,2020) | Winters, Manshreck & Wright | R2、R5 |
| The Art of Unit Testing(单元测试的艺术,2009,第 3 版 2023) | Roy Osherove | T1、T2、T4、T5 |
| How Google Tests Software(Google 测试之道,2012) | Whittaker, Arbon & Carollo | T5、T6 |
| Working Effectively with Legacy Code(修改代码的艺术,2004) | Michael Feathers | T4、T5、T6 |
| xUnit Test Patterns(xUnit 测试模式,2007) | Gerard Meszaros | T1、T2、T3、T4 |

六类衰退风险

brooks-lint 从六类生产代码衰退风险和六类测试代码衰退风险两个角度评估你的代码,这些维度综合自十二本经典工程著作:

| 衰退风险 | 诊断问题 | 出处 |
| 🧠 认知过载 | 理解这段代码要花多少脑力? | Code Complete、Refactoring、DDD、Philosophy of SD |
| 🔗 变更扩散 | 改一处会牵连多少不相干的东西? | Refactoring、Clean Architecture、Pragmatic、SE@Google |
| 📋 知识重复 | 同一个决策是否在多处被表达? | Pragmatic、Refactoring、DDD |
| 🌀 偶发复杂度 | 代码是否比问题本身更复杂? | Refactoring、Code Complete、Brooks、Philosophy of SD |
| 🏗️ 依赖失序 | 依赖是否朝一致的方向流动? | Clean Architecture、Brooks、Pragmatic、SE@Google |
| 🗺️ 领域模型失真 | 代码是否忠实地表达了业务领域? | DDD、Refactoring |

Philosophy of SD = A Philosophy of Software Design(Ousterhout) · SE@Google = Software Engineering at Google(Winters 等)

实际效果

给定这段代码:

class UserService:
def update_profile(self, user_id, name, email, avatar_url):
user = self.db.query(f"SELECT * FROM users WHERE id = {user_id}")
user['email'] = email
...
if user['email'] != email: # 永远为 False —— 隐性 bug
self.smtp.send(...)
points = user['login_count'] * 10 + 500
self.db.execute(f"UPDATE loyalty SET points={points} WHERE user_id={user_id}")

brooks-lint 产出:

健康分:28/100

这个方法把四个不相干的业务职责塞进同一个函数,含有一个会静默吞掉"邮箱变更通知"的逻辑 bug,并且对 SQL 注入门户大开。

🔴 变更扩散 —— 单个方法因四个不相干的业务原因而改动

症状: update_profile 在同一个方法体里完成资料字段更新、邮箱变更通知、积分重算和缓存失效。
根源: Fowler — Refactoring — 发散式变更(Divergent Change);Hunt & Thomas — The Pragmatic Programmer — 正交性(Orthogonality) 后果: 任何对积分公式的改动都可能破坏邮件通知,反之亦然。每次修改都同时背负着四个不相干领域的回归风险。
对策: 抽出 NotificationService、LoyaltyService 和 UserCacheInvalidator。UserService.update_profile 应只做编排、逐一调用它们——本身不持有任何实现逻辑。

🔴 领域模型失真 —— 隐性逻辑 bug:邮箱通知永不触发

症状: user['email'] = email 在 if user['email'] != email 之前就覆盖了旧值——条件恒为 False,通知是死代码。
根源: McConnell — Code Complete — 第 17 章:非常规控制结构 后果: 用户改邮箱时永远收不到通知。这是静默的数据完整性失效——系统看似正常运转,实则违反了业务规则。
对策: 在任何修改之前先捕获 old_email = user['email'],拿它(而非 user['email'])做比较。

(另有 6 条诊断,含 SQL 注入、依赖失序、魔法数字)

带依赖图的架构审查

在模式 2(架构审查)中,brooks-lint 会在报告顶部生成一张 Mermaid 依赖图。模块按严重度着色:红=Critical,黄=Warning,绿=干净。

graph TD
subgraph src/api
AuthController
UserController
end
subgraph src/domain
UserService
OrderService
end
subgraph src/infra
Database
EmailClient
end

AuthController --> UserService
UserController --> UserService
UserController --> OrderService
OrderService --> UserService
OrderService --> EmailClient
UserService --> Database
EmailClient -.->|circular| OrderService

classDef critical fill:#ff6b6b,stroke:#c92a2a,color:#fff
classDef warning fill:#ffd43b,stroke:#e67700
classDef clean fill:#51cf66,stroke:#2b8a3e,color:#fff

class OrderService,EmailClient critical
class AuthController warning
class UserService,UserController,Database clean

该图在 GitHub、Notion 等 Markdown 环境中原生渲染——无需额外工具。

更多示例

完整画廊 收录了 brooks-lint 在 Python、TypeScript、Go、Java 上的真实输出——涵盖 PR 审查、带 Mermaid 依赖图的架构审查、技术债评估和测试质量审查。

初次接触这些衰退风险?衰退风险实战指南 逐一讲解全部六类——每类的诊断问题、代表症状、出处书目与对策。

基准测试

在 3 个真实场景(PR 审查、架构审查、技术债评估)上测试:

| 评估项 | brooks-lint | 仅用 Claude |
| 结构化诊断(症状 → 根源 → 后果 → 对策) | ✅ 100% | ❌ 0% |
| 每条诊断带书目出处 | ✅ 100% | ❌ 0% |
| 严重度标签(🔴/🟡/🟢) | ✅ 100% | ❌ 0% |
| 健康分(0–100) | ✅ 100% | ❌ 0% |
| 识别"变更扩散" | ✅ 100% | ✅ 100% |
| 整体通过率 | 94% | 16% |

差距不在于 Claude 能不能发现问题——而在于它能否每一次都稳定地发现,并附上可溯源的证据和可落地的对策。

可复现基准

上表是示意性的。下面这些数字确定、可在本地复算:

parser 保真度 —— SARIF 输出与 CI 闸门都依赖于正确解析模型的 Markdown 报告。在一个冻结的 30 份真实模型报告语料上(覆盖全部六种 mode,evals/benchmark-corpus.json),每份都配有独立评分的发现清单(由另一遍模型评分、并经人工抽查),实际发布的 parser 跑分如下——执行 npm run benchmark:

| 指标(n = 30,冻结语料) | 结果 |
| 严重度计数精确吻合(parser vs 人工标注真值) | 30 / 30 |
| 风险码 precision / recall | 100% / 100%(56 个 finding-level 码,0 假阳 / 0 假阴) |
| 产出合法 SARIF 2.1.0 | 30 / 30 |

由于 parser 是确定性的、语料是冻结的,npm run benchmark 对任何人都给出相同结果,npm test 也将其作为回归守卫。该语料有意包含 9 份假阳性 / tradeoff 报告(例如一个看起来像循环依赖、实则是端口与适配器的设计),它们必须保持干净。

打分确定性 —— 给定一组固定发现(2 Critical / 3 Warning / 1 Suggestion),三个 strictness 预设产出的分数与其 common.md 表的预测分毫不差:strict 34、balanced 54、legacy-friendly 74——且只有 legacy-friendly 会优先列出前三高杠杆修复。

模型质量 —— 模型能否在真实代码上找到正确的风险,由 58 场景 eval 套件(evals/evals.json)衡量:npm run evals(结构校验)与 npm run evals:live(实测,需 ANTHROPIC_API_KEY)。

范围与诚实说明:parser 数字是确定性的、可精确复算;strictness 与 eval 套件的数字是对模型的单次实测,会有轻微跑动差异。parser 基准衡量的是报告解析保真度(工具是否读出了报告里写的每条发现),而非某条发现"是否正确"。严重度计数吻合是完全独立的信号;风险码一致性还反映了 parser 与 grader 共用同一套权威 name→code 映射。

横向对比

| | brooks-lint | ESLint / Pylint | GitHub Copilot Review | 原生 Claude |
| 检测语法与风格问题 | — | ✅ | ✅ | ~ |
| 结构化诊断链 | ✅ | ❌ | ❌ | ❌ |
| 将诊断溯源到经典著作 | ✅ | ❌ | ❌ | ❌ |
| 一致的严重度标签 | ✅ | ✅ | ~ | ❌ |
| 架构层面的洞察 | ✅ | ❌ | ~ | ~ |
| 领域模型分析 | ✅ | ❌ | ❌ | ~ |
| 零配置、无需安装插件 | ✅ | ❌ | ✅ | ✅ |
| 适用于任何语言 | ✅ | ❌ | ✅ | ✅ |

~ = 偶尔 / 不稳定

brooks-lint 不是要取代你的 linter。 它捕捉的是 linter 抓不到的东西:架构漂移、知识孤岛、领域模型失真——这些问题往往在无人察觉的几个月里持续拖慢团队。

安装

Claude Code

/plugin marketplace add hyhmrright/brooks-lint
/plugin install brooks-lint@brooks-lint-marketplace

短命令(/brooks-review)会在首次会话启动时自动安装——也可以自己跑 bash hooks/session-start。
不想走市场:mkdir -p ~/.claude/skills/brooks-lint && cp -r skills/* ~/.claude/skills/brooks-lint/。

Gemini CLI · Codex CLI

/extensions install https://github.com/hyhmrright/brooks-lint # Gemini CLI
Install the brooks-lint skill from hyhmrright/brooks-lint # 在 Codex 会话中直接说

或使用下面的安装器:./scripts/install.sh gemini / ./scripts/install.sh codex。

其它所有平台——OpenCode · Cursor · Windsurf · Antigravity · pi · Copilot · Kiro · Factory Droid · DeepSeek Harness · IBM Bob

brooks-lint 以标准 Agent Skills 形式分发。任何加载 Agent Skills 的 agent 都能无需任何转换运行全部六种模式——一条命令即可安装:

选择你的平台;加 --project 装进当前仓库而非全局配置
curl -fsSL https://raw.githubusercontent.com/hyhmrright/brooks-lint/main/scripts/install.sh | bash -s -- <平台>
<平台> = opencode · cursor · windsurf · antigravity · pi · kiro · copilot · droid · dsh · gemini · codex · claude · bob · agents

也可使用 Node.js 20+ 和 npm 安装同一套 Agent Skills,无需 Git 或 Bash。安装器覆盖 13 个具名编码工具及通用 agents 目标,安装的是技能而非 IDE 原生扩展。自动检查验证文件布局和资源,不代表每个宿主的运行时实测。Shell 安装器仍然可用。

npx brooks-lint install <平台>
npx brooks-lint install <平台> --project
npx brooks-lint install --list

特别感谢 @Sad-happy 在 PR #44 中实现原生 DSH bundle 和技能提供器,并在 DSH 0.2.1-rc.2 桌面应用中完成社区验证,让按包名安装插件成为可能。安装及自定义市场搜索见 DSH 指南。

安装器会把技能扁平拷进该平台对应的文件夹,让共享框架(../_shared/)始终正确解析——你不可能装错布局。
装好后直接提问("审查这个 PR"、"审查架构"),对应技能就会依据 description 自动触发。

| 平台 | 安装到 | 同时读取 | 指南 |
| OpenCode | ~/.config/opencode/skills | ~/.claude/skills、AGENTS.md | 配置 |
| Cursor(2.4+) | ~/.cursor/skills | .agents/skills、AGENTS.md | 配置 |
| Windsurf(Cascade) | ~/.codeium/windsurf/skills | AGENTS.md | 配置 |
| Antigravity(Google) | .agent/skills(--project) | AGENTS.md、GEMINI.md | 配置 |
| pi(earendil-works) | ~/.pi/agent/skills | — | 配置 |
| GitHub Copilot | .github/skills(--project) | .claude/skills、AGENTS.md | 配置 |
| Kiro(AWS) | ~/.kiro/skills | AGENTS.md | 配置 |
| Factory Droid | ~/.factory/skills | AGENTS.md | 配置 |
| DeepSeek Harness(dsh) | ~/.dsh/skills | ~/.agents/skills、AGENTS.md | 配置 |
| IBM Bob(bob) | ~/.bob/skills | AGENTS.md | 配置 |

OpenCode v2、Kiro、Factory Droid 与 DeepSeek Harness 还会自动注册 /brooks-review。不熟悉 skills、或用的是上面没列出的 agent?见 docs/getting-started.md。

Maintainer testing policy (2026-10-16). My Claude account has been banned. Going forward,
I will only test and verify Codex-related capabilities. Earlier verification of Claude Code,
Gemini CLI, or other platforms is historical and does not imply ongoing testing. Existing
integrations remain available, but their current behavior is not verified by the maintainer;
community test reports and contributions are welcome.

🧪 历史验证记录。 Claude Code、Gemini CLI、Codex CLI 曾由维护者验证。上面十个平台依据各工具官方技能规范编写,并已在文件布局层面验证(安装器经过测试),但维护者尚未在每个平台端到端实跑。在某平台试过了——无论成功还是失败?
请提一个 issue,附上平台、版本和你看到的结果。
用的是其它兼容 Agent Skills 的 agent?它几乎肯定以同样方式工作——告诉我们,我们会补上。

斜杠命令

| 命令 | 作用 |
| /brooks-review | 粘贴一段 diff,或让 AI 指向改动的文件。以 症状 → 根源 → 后果 → 对策 的格式逐一诊断六类衰退风险。 |
| /brooks-audit | 梳理模块依赖(附 Mermaid 依赖图)、识别循环依赖,并检查是否符合康威定律。 |
| /brooks-debt | 按六类衰退风险对技术债分类,以 痛感 × 扩散面 打优先级,产出带 Critical / Scheduled / Monitored 分级的偿还路线图。 |
| /brooks-test | 对照六类测试空间衰退风险审查测试套件——测试晦涩、测试脆弱、测试重复、Mock 滥用、覆盖率幻觉、架构错配。 |
| /brooks-health | 对全部四个质量维度做精简扫描,产出一个加权综合健康分。适合发版前或新团队上手时使用。 |
| /brooks-sweep | 一次性扫描 R1–R6、T1–T6 与架构,然后施加修复:安全改动自动应用,跨文件改动需确认,架构决策标记为人工处理项。输出修复日志与健康分变化。 |

各平台语法。 Claude Code 也接受带命名空间的完整形式 /brooks-lint:brooks-review——短命令由 session-start 钩子在首次会话启动时自动安装。Codex CLI 用 $brooks-review。Gemini CLI 与 OpenCode v2 直接用上表。Cursor、Antigravity、pi、DeepSeek Harness 依据每个技能的 description 自动调用 Agent Skills,直接提问即可("审查这个 PR"、"我们最糟的技术债在哪");需要显式调用时用各平台自己的语法(pi 把每个技能注册为 /skill:brooks-review;dsh 直接用上表,可从 / 菜单选或手打)。在所有平台上,当你讨论代码质量、架构或测试健康时,这些技能也会自动触发。

PR 审查会自动包含一个轻量的第 7 步快速测试检查(对纯文档 diff 会跳过)。需要完整的测试审查请用 /brooks-test;需要某个维度的深度诊断时,请用该维度的专项技能,而不是 /brooks-health。

配置

在项目根目录放一个 .brooks-lint.yaml 来定制审查行为:

version: 1

strictness: balanced # strict | balanced(默认)| legacy-friendly——对遗留代码更宽松的打分

disable:
- T5 # 跳过覆盖率指标检查——我们不强制覆盖率

severity:
R1: suggestion # 在该领域下调"认知过载"诊断的严重度

ignore:
- "/.generated."
- "/vendor/"

custom_risks: # 定义项目专属 Cx 风险码——见 skills/_shared/custom-risks-guide.md suppress: # 按风险码 + 路径下调特定诊断(如已接受的遗留债务)

可复制 .brooks-lint.example.yaml 作为起点。
所有设置均为可选——完全省略该文件即使用默认行为。

| 设置 | 说明 |
| strictness | 打分预设:strict、balanced(默认)或 legacy-friendly(更轻的扣分,并优先列出高杠杆修复项) |
| disable | 要跳过的风险码(R1–R6、T1–T6) |
| severity | 覆盖严重度等级(critical / warning / suggestion) |
| ignore | 要排除的文件 glob 模式 |
| focus | 只评估这些风险码(不能与 disable 同时使用) |
| custom_risks | 定义项目专属风险码(C1、C2……)——见 custom-risks-guide.md |
| suppress | 按风险码 + 路径下调特定诊断的严重度(可带 expires: 过期日期) |

为什么是这些书,为什么是现在?

"软件的复杂性是本质属性,而非偶然属性。"
—— Frederick Brooks

AI 能帮你更快地写代码,却无法告诉你正在建造的是大教堂还是焦油坑——而生成越廉价,这些作者识别出的衰退风险就越尖锐。接入 AI 助手并不能修复认知过载或领域模型失真;生成更多代码会加剧变更扩散和知识重复;跑得更快让偶发复杂度和依赖失序更加危险。

项目结构

每个技能都是一个 SKILL.md(触发条件 + 流程骨架)加上它自己的指南:

brooks-lint/
├── .claude-plugin/ · .codex-plugin/ # 各平台插件元数据 ├── skills/ │ ├── _shared/ # common.md(铁律、配置、报告模板、健康分) │ │ # source-coverage.md · decay-risks.md(R1–R6) │ │ # test-decay-risks.md(T1–T6)· remedy-guide.md · custom-risks-guide.md │ ├── brooks-review/ # 模式 1:PR 审查 → pr-review-guide.md │ ├── brooks-audit/ # 模式 2:架构审查 → architecture-guide.md、onboarding-guide.md │ ├── brooks-debt/ # 模式 3:技术债 → debt-guide.md │ ├── brooks-test/ # 模式 4:测试质量 → test-guide.md │ ├── brooks-health/ # 模式 5:健康仪表盘 → health-guide.md │ └── brooks-sweep/ # 模式 6:全面扫描 → sweep-guide.md ├── hooks/ # SessionStart 钩子 ├── commands/ # 短命令包装(由钩子自动安装) ├── evals/ # 58 场景评测套件 + 冻结的 parser 保真度语料 └── assets/ # logo、banner、demo

CI/CD 集成

用 GitHub Action 在每个 PR 上自动运行 brooks-lint:

.github/workflows/brooks-lint.yml
name: Brooks-Lint PR Review
on:
pull_request:
types: [opened, synchronize, reopened]

jobs:
brooks-lint:
runs-on: ubuntu-latest
permissions:
pull-requests: write
steps:
- uses: actions/checkout@v7
with:
fetch-depth: 0
- uses: hyhmrright/brooks-lint/.github/actions/brooks-lint@v1.9.1
with:
mode: review
anthropic-api-key: ${{ secrets.ANTHROPIC_API_KEY }}
fail-below: 70

完整模板见 docs/github-action-example.yml。

该 Action 会把审查结果作为 PR 评论发布,并可在健康分跌破阈值时让检查失败。若仓库中提交了 .brooks-lint-history.json,评论还会包含趋势变化(如 "85 → 82(−3),近 3 次运行")。

CI 中的 mode: sweep 只会诊断,绝不会应用修复。 该 Action 只发起一次不带工具的 API 调用,因此 Full Sweep 的同意闸门(Step 0)、就地改写文件和迭代循环都无法运行 —— Fix Log 与 Iteration History 两节会是空的,.brooks-lint.yaml 里的 sweep.max_iterations 在这里同样失效。你拿到的是一次清扫的描述,而不是一次清扫。要让修复真正落地,请在具备文件工具、能回答 Step 0 同意提示的环境中交互式运行 /brooks-sweep。五个只读模式 —— review、audit、debt、test、health —— 在 CI 中的表现与本地完全一致。

质量闸门与 Code Scanning。 除 fail-below 外,该 Action 还提供:

with:
mode: review
anthropic-api-key: ${{ secrets.ANTHROPIC_API_KEY }}
fail-on: critical # 出现任何 Critical 即失败(none | warning | critical) fail-on-regression: true # 健康分较上次运行下降则失败 sarif-file: brooks-lint.sarif # 同时把诊断上传到 GitHub Code Scanning

fail-on-regression 读取 .brooks-lint-history.json,因此提交该文件即可强制"无新增回归"。设置 sarif-file 会让诊断直接显示在 PR 的 Files changed 标签页,并需要 job 具备 security-events: write 权限。

CI 中的项目配置。 action 会应用你的 .brooks-lint.yaml(strictness、disable、focus、severity、ignore、custom_risks),并且从 base 分支读取,而不是从 PR 的 checkout 读取。因此 pull request 无法削弱审查它自己的策略:若某个 diff 禁用了所有风险,它本会在该配置变更获批之前就拿到 100 分并通过 fail-below。同理,PR 首次新增的配置也要等合并后才生效。报告中的 Config: 行会写明所用来源(例如 applied from base (main))。这需要克隆中存在 base 侧的对象,所以模板使用 fetch-depth: 0 执行 checkout;在 PR 中,如果缺少 base 引用,action 会报错并提示使用 fetch-depth: 0,绝不会回退到 PR 自己的策略。在非 PR 场景(包括本地运行)中,如果无法读取 base 引用,则会回退到工作区配置,并明确注明来源。设置 config-ref: head 可改用 PR 自己的副本 —— 适用于 .brooks-lint.yaml 已受 CODEOWNERS 保护、且希望配置变更在提出它的 PR 中即刻生效的情况:

with:
mode: review
anthropic-api-key: ${{ secrets.ANTHROPIC_API_KEY }}
config-ref: base # base (default) | head

自定义 API 端点。 api-base-url 让 action 改为调用任意 Anthropic 兼容的 /v1/messages 端点 —— 自建代理、LLM 网关或区域镜像 —— 而不是 api.anthropic.com。把该端点的密钥作为 anthropic-api-key 传入,把它期望的模型 id 作为 model 传入:

with:
mode: review
api-base-url: https://your-gateway.example.com
anthropic-api-key: ${{ secrets.GATEWAY_API_KEY }}
model: gateway-model-id

brooks-lint 会把你的 diff 发送到这里填写的主机,因此只应指向你信任其接触源码的一方。自己运行 scripts/ci-review.mjs 完全不需要参数 —— Anthropic SDK 会直接读取 ANTHROPIC_BASE_URL。

Amazon Bedrock 上的 Claude。 Bedrock 原生提供 Anthropic Messages API,因此不需要任何新客户端:把 api-base-url(需要 action v1.6.0+)指向 https://bedrock-runtime.{region}.amazonaws.com/anthropic,并把一个短期 Bedrock API 密钥作为 anthropic-api-key 传入 —— 该密钥在 job 内由通过 OIDC 扮演的角色现签,因此不必把长期密钥存进 secret。完整接线以注释步骤的形式放在 docs/github-action-example.yml 里:扮演角色、签发令牌、模型 id、所需的 IAM 权限,以及 bedrock-mantle 备选端点。上面那条关于信任的提醒依然成立 —— 走 Bedrock 时,diff 送往的是你自己指定区域里的你自己的 AWS 账户。

这条路无法评审来自 fork 的 pull request。 GitHub 既不会把仓库 secret、也不会把 id-token: write 授予 fork 的 pull_request 运行,于是既没有可换取角色的 OIDC 令牌,也没有可回退的已存密钥。要覆盖 fork,需要换用别的触发方式(pull_request_target,并付出针对不受信任分支运行所需的全部谨慎),或换一个密钥来源。

输出上限。 max-tokens: 8192 可提高报告的输出 token 上限(默认 4096)。较长的 sweep 或 health 报告可能触及该上限,而截断会朝错误的方向出错:被截掉的诊断根本不会被统计,于是健康分反而更高,fail-below 闸门可能放过一次本该失败的运行。这件事不必靠你自己发现:报告被截断的运行会输出 ::warning:: 注解,在 PR 评论中重复该警告,并在 brooks-lint-report.json 中写入 "truncated": true —— 调高 max-tokens 后重新运行即可。运行不会因此失败。

成本: 每次 PR 运行约 $0.05–0.15,取决于 diff 大小和模型。建议仅在 pull_request 事件上运行。

路线图

当前状态(v1.4): 12 本书地基,6 类生产衰退风险(R1–R6)+ 6 类测试衰退风险(T1–T6),6 个技能, CI 质量闸门、面向 GitHub Code Scanning 的 SARIF 输出、严格度预设,以及一个可复现的 parser 保真度基准。

里程碑 v0.2 → v1.4

- v0.2–v0.4:插件基础设施、六本书框架、衰退风险维度、基准套件
- v0.5–v0.7:测试质量审查、Mermaid 依赖图、.brooks-lint.yaml、扩展到 10 本书
- v0.8–v0.9:独立技能架构;步骤校验、自动 diff 范围、/brooks-health、趋势追踪、分诊模式、--fix 对策、GitHub Action
- v1.0–v1.2:评测自动化、自定义 Cx 风险码、全量扫描技能、npm run bump 版本传播
- v1.3:Codex 市场元数据、多平台一键安装脚本、多语言 README + 落地页
- v1.4:SARIF 输出、CI severity + 回归闸门、严格度预设、57 场景 eval 套件、npm run benchmark

贡献

见 CONTRIBUTING.md。现在最有价值的贡献是新的评测用例和更好的衰退风险症状模式。
在你自己的 PR 上跑一遍 /brooks-review——我们用正在打造的工具来审查贡献。

许可证

MIT License——详见 LICENSE。

致谢

本项目站在十二位巨人的肩膀上——完整书单与版本见上面的十二本书。本工具中编码的衰退风险,是我们对他们思想的综合,并应用于现代代码质量评估。

Star 历史

⭐ 如果这个工具让你以不同的眼光看待自己的代码库,请给它点个 star!
预览分享卡片长什么样 ↓hyhmrright/brooks-lint
分享 · DeepSeek Harness Hub
hyhmrright/brooks-lint

植根于十二本经典工程著作的 AI 代码审查。

回到顶部