Show HN:Crabby —— 一款像 Rust 编译器那样审查代码的 Claude Code 技能

news.ycombinator.com 2026-08-13T01:14:48.336996

这种格式适用于代码审查、写作审查、架构、策略——任何你提交的内容。其中「写作审查」的例子往往让人惊讶:它会用与 SQL 注入完全相同的 error[W002] 格式,标出事后复盘文档里的被动语态。

https://github.com/ekadetov/crabby

仓库概览

README

🦀 crabby

Ferris 审查了你的代码。他并不满意。

Before/After | Install | Usage | Why | Error Codes


这是一个 Claude Code 技能,能让 Claude 化身为 Ferris 螃蟹——脾气暴躁、精准、不以为然。诊断输出采用 rustc 错误格式:严重性代码、位置箭头、因果跨度,以及每次都可以直接粘贴的修复建议。适用于代码,适用于写作,也适用于架构、策略,以及任何你敢提交的东西。

Before / After

普通 Claude 的回答

「你的 React 组件之所以会重新渲染,很可能是因为你在每次渲染周期都创建了一个新的对象引用。当传入内联对象时,React 的浅比较会认为它每次都不同。我建议使用 useMemo 来缓存这个对象。」

Crabby 的回答


普通 Claude 的回答

「执行摘要可以更清楚地说明谁对这次事故负责。被动语态让它有点难以理解。你可能需要把它改得更主动一些。」

Crabby 的回答

Install

Usage

短语 效果
激活 crabby 模式
激活 crabby 模式
激活 crabby 模式
激活 crabby 模式
激活 crabby 模式
恢复正常文风
恢复正常文风

Crabby 能做什么

事情 Crabby 的表现
代码审查 精确定位到行,并直接给出修复方案。
文档审查 指出被动语态,还会告诉你具体位置。
策略 / 架构 找出单点故障(SPOF),要求你加熔断器。
客套话 Crabby 不讲客套。
“你可以考虑一下……” 不存在。Crabby 只用直给的语气。
可直接粘贴的修复代码 永远都有,每次都给。
日常对话 保持正常文风,Crabby 知道什么时候该放松。

为什么这么设计

2015 年 Rust 编译器用到了三种认知机制:

1. 分块(Chunking)。 阅读完整消息之前,错误码就唤起了你的模式识别。在阅读详细描述之前,你的大脑就已经把问题归类了(是 bug 而非警告),并给它划了命名空间(B 表示行为问题)。

2. 空间因果(Spatial causation)。 用 / 跨行标注的方式,你可以同时看到原因和结果,而不用在脑子里同时记两件事。两段标注之间隔着的距离,就是 bug 所在。

3. 渐进式披露(Progressive disclosure)。 消息(是什么)→ 位置(在哪)→ 代码范围(怎么发生的)→ 修复建议(怎么改)→ 注释(为什么)。每一层都是完整的信息,你读到够用为止,不用继续往下看。

错误码命名空间

完整分类见 crabby/CODES.md

命名空间 领域 示例
Bug / 行为 B001: 过期闭包,B006: 无限循环
架构 A003: 紧耦合,A007: 单点故障
性能 P002: N+1 查询,P005: 内存泄漏
安全 S001: SQL 注入,S003: 硬编码密钥
写作 / 沟通 W001: 主谓被埋没,W002: 被动语态
复杂度 C002: 圈复杂度过高,C003: 嵌套过深
逻辑 L001: 恒为真的条件,L003: 遗漏边界情况
测试 T001: 测试实现细节,T004: mock 范围过大

开源协议

查看原文