跳转到正文
莫尔索随笔
返回

为调试和 Max 用户补丁 Claude Code

预计 4 分钟

第一时间捕获有价值的信号

本文译自 Patching Claude Code for debugging and /cost support for Max users。本文介绍了 cc-antidebug 工具,它可以为 Claude Code 打补丁,解决 SDK 调试问题,并让 Max 计划用户也能查看会话的 Token 使用量和成本。

补丁 Claude Code

我爱 Claude Code,它真的很好,但它也有一些烦恼。

不允许调试

我最近研究了使用 Claude Code SDK。SDK 有不同的风格。最简单的就是用 --print 在 CLI 上调用 Claude。还有一个 TypeScript SDK 和一个 Python SDK。这两个基本上都是作为子进程生成 Claude Code,然后通过 stdin 和 stdout 与它通信。

当你调试一个使用 Claude Code TypeScript SDK 的 Node.js 应用时,SDK 调用会失败。Claude Code 有反调试功能,检测是否附加了调试器。当我使用 VS Code 的 JavaScript Debug Terminal 时,它设置了环境变量,这些变量通过进程树继承。生成的 Claude Code 进程看到这些调试器环境变量并立即退出。这非常烦人。

但成本是多少?

如果你用 Pro 或 Max 计划登录到 Claude Code 中输入 /cost,Claude Code 不会向你显示当前会话的 Token 使用量和成本。相反,你会看到一个小消息,基本上告诉你,别担心你那小脑袋。你有一个计划。你不需要知道数字。数字对你不好。这也非常烦人。

修补所有东西

我已经设法禁用了 Claude Code 内部的反调试,正如你通过完整阅读我上一篇很棒的博客文章所学到的。我处理这个问题的方法反映了我处理修补原生可执行文件的方法。用 JavaScript 只是更容易得多。

首先我用 Biome 格式化了 Claude Code 可执行文件。然后我搜索了用于检测调试器附加到 Node.js 进程的字符串,比如 --inspect-brk。一旦我找到了进行反调试检查的函数,我就写了一个小函数,使用邪恶的正则表达式来撕掉检查并用无操作替换它们。该函数现在告诉 Claude Code,“不,这里没有调试。一切都完全没问题。”

同样的原则可以应用于允许 /cost 向我们显示 Token 使用量和成本,即使我们用 Max 计划登录。Claude Code 会输出这个字符串:“With your Claude Max subscription, no need to monitor cost — your subscription includes Claude Code usage”。所以再次,我只是在格式化的二进制文件中定位该字符串,查看其周围的上下文,并写了一堆更多邪恶的正则表达式来用一个无操作替换它,说:“这里没有计划。你完全可以继续只显示 Token 使用量和成本。数字现在好了。“

cc-antidebug

现在我喜欢直接做事的工具,我不必考虑它。而且我喜欢分享我的工具。这就是为什么我构建了 cc-antidebug,它现在在 NPM 上可用。这是你可以如何使用它。

CLI 使用

只想修补你的全局安装一次?用这个。而且你还可以恢复原始二进制文件。注意 Claude Code 会不时更新。你需要重新应用补丁。

# 应用补丁
npx @mariozechner/cc-antidebug patch

# 恢复原始二进制文件
npx @mariozechner/cc-antidebug restore

编程使用

你也可以在你的 Node.js 应用中使用它。这对于 CI 和其他类似用例相关,你只想临时修补并再次恢复未修补的版本:

npm install @mariozechner/cc-antidebug
import { patchClaudeBinary, restoreClaudeBinary } from "@mariozechner/cc-antidebug";

// 应用补丁
patchClaudeBinary();

// 在这里做你的调试工作...

// 恢复原始版本
restoreClaudeBinary();

结果

我们还能做什么?

嗯,我想天空是极限。尽管源代码被混淆和压缩了,但它仍然相当易读(在用 Biome 格式化之后)。而且如果你不能阅读它或跟随执行流程,只需把它给 Claude。如果你用 cc-antidebug 修补你的 Claude Code 安装,你甚至可以调试交互式 Claude Code 会话。这样你就可以识别和消除其他烦恼。当然,Claude Code 会随着时间变化,所以你的补丁可能直到宇宙热寂都不适用。但为新的 Claude Code 版本更新你的补丁足够容易。