Show HN:Crabby —— 一款像 Rust 编译器那样审查代码的 Claude Code 技能
这种格式适用于代码审查、写作审查、架构、策略——任何你提交的内容。其中「写作审查」的例子往往让人惊讶:它会用与 SQL 注入完全相同的 error[W002] 格式,标出事后复盘文档里的被动语态。
https://github.com/ekadetov/crabby
仓库概览
- 仓库:ekadetov/crabby
- 描述:暴躁的 Rust 螃蟹诊断模式,用于 Claude Code。以
error[CODE]格式输出,针对你的代码、你的文档、你的人生选择。 - Stars:1 | Forks:0
- 开发语言:未知
- 许可证:MIT
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 范围过大 |