Claude Code 强制使用 telegram@claude-plugins-official Bun版本

2026-04-11 15:231阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐
问题描述:

解锁 Claude Code 的 Channel 功能Telegram)

apply-claude-code-channels-bypass-fix.py.zip (6.6 KB)

测试环境: Claude Code 2.1.84(bun 安装)· Telegram 插件 0.0.4 · macOS
仅测试 Telegram。Discord、iMessage 等其他 Channel 插件结构相同,理论可用,但未实际验证。
其他版本、其他平台(Linux / Windows)、npm / pnpm 安装方式未经测试,脚本在不兼容时会报错并拒绝操作,不会损坏文件。

适用人群: 本补丁主要面向 API Key 用户。订阅用户(Claude.ai OAuth 登录)在灰度放量后可通过正规渠道获得该功能,不建议使用补丁。

参考自 Claude Code Channels 工人能智版,原脚本不支持 bun 安装方式,因此自行重新实现
二进制逆向分析与本文均由 Claude Opus 4.6 完成。

最新版 Claude Code 内置了 Channel 功能,允许通过 MCP 插件将 Telegram、Discord 等即时通讯工具桥接到 Claude Code 会话。用户在 Telegram 上发消息,Claude Code 直接处理并回复,彻底解放终端。

但该功能被多个 feature flag 和策略门控——Anthropic 通过 Statsig 服务端按账户逐步放量,绝大多数用户目前拿不到这些 flag,功能被静默锁定,没有任何提示。

注意: 使用 API Key 登录的用户(ANTHROPIC_API_KEY 环境变量方式)完全无法获得此功能——Statsig gate 只对 Claude.ai OAuth 账户生效,API Key 用户不在放量体系内,补丁是唯一解法。


Channel 有什么用?

Channel 让 Claude Code 拥有一个持久的 Telegram 入口:

  • 随时随地提问 —— 不需要坐在电脑前,手机上发消息即可
  • 任务异步推进 —— 发出指令后离开,Claude 在后台执行,完成后回复
  • 图片/文件传输 —— 发照片、截图、文档,Claude 直接读取处理
  • 工具调用权限控制 —— Claude 需要调用敏感工具时,通过 Telegram 的按钮交互完成授权

为什么被锁定?三层门控

Claude Code 对 Channel 功能设置了三道独立的开关,任何一道不通则功能完全失效:

门控 1:nH_() — Channel 注册决策

这是最核心的一道关卡。每当 MCP 插件连接时,Claude Code 调用 nH_() 函数决定这个插件是否允许注册为 Channel。

原始逻辑会依次检查:

  1. MCP 服务器是否声明了 claude/channel capability(保留此检查)
  2. tengu_harbor feature flag(Statsig 灰度,默认 false → 拦截)
  3. 账户认证状态
  4. 策略/合规检查
  5. 会话模式检查
  6. Marketplace 许可检查
  7. 白名单检查

未获灰度的用户在第 2 步即被拦截,返回 {action:"skip"},后续所有检查根本不会执行。

门控 2:KfA()tengu_harbor_permissions flag

KfA() 控制 channelPermissionCallbacks 的注册。这个回调系统是消息在 awaitAutomatedChecksBeforeDialog 中被实际处理的前提。

// 原始逻辑 function KfA() { return td("tengu_harbor_permissions", !1, ...) } // ↑ 默认 false

如果这道关卡不通,即便消息到达了 Claude Code,也会被静默丢弃。

门控 3:K84() — UI 状态锁定

这道关卡控制界面展示逻辑,disabled/noAuth/policyBlocked 三个字段全部锁为 true,导致 UI 层拒绝展示和处理 Channel 相关内容。


什么是 Statsig feature gate?

Statsig 是一个第三方 feature flag / A/B 测试平台。Claude Code 用它来做功能灰度发布——服务端维护一张「开关表」,每个用户启动 CLI 时拉取自己的开关状态,决定哪些功能可用。

具体到 Channel 功能:Anthropic 在 Statsig 后台创建了 tengu_harbortengu_harbor_permissions 等 gate,只对部分账户开放。CLI 启动时从 Statsig API 拉取你的 gate 列表,缓存在 ~/.claude/statsig/ 目录下。如果你的账户不在放量名单中,这些 gate 根本不会出现在返回数据里,CLI 就 fallback 到代码中的默认值 false——功能关闭,无声无息。


补丁原理

二进制补丁:等长字节替换

Claude Code 使用 bun 编译,JS 源码原样嵌入可执行文件。替换必须等长——长度变化会破坏内部偏移量映射,导致程序崩溃。

补丁共三处,均为最小字节替换:

Patch 1 — nH_() bypass

找到 MCP capability check 的结束标记(这一步保留),将其后所有 skip 检查替换为直接 return{action:"register"},填充等量空格保持长度不变:

anchor: reason:"server did not declare claude/channel capability"}; 之后: [skip checks...return{action:"register"}...}] 替换为: return{action:"register"}[spaces...]}

Patch 2 — KfA() tengu_harbor_permissions flag

原始: tengu_harbor_permissions",!1 替换: tengu_harbor_permissions",!0

仅改 1 字节(10),!1false!0true

Patch 3 — K84() UI 锁定解除

用正则匹配(兼容混淆变量名),将三个锁定字段全部强制为 false:

原始: disabled:!cfH(),noAuth:!xxxx()?.accessToken,policyBlocked:xxx&&yyy?.channelsEnabled!==!0 替换: disabled:!1,noAuth:!1,policyBlocked:!1[spaces...]

如果 Statsig 服务端下发了 gate(比如将来灰度到你),服务端值优先,补丁不会有副作用。


插件修复:bun PATH 问题

问题背景

Channel 功能依赖 MCP 插件(如官方 Telegram 插件)。插件的启动命令定义在 .mcp.json 里:

{ "mcpServers": { "telegram": { "command": "bun", "args": ["run", "--cwd", "${CLAUDE_PLUGIN_ROOT}", "--shell=bun", "--silent", "start"] } } }

问题: Claude Code 通过非交互式 shell 启动 MCP 子进程。非交互式 shell 不会加载 ~/.zshrc / ~/.bashrc,因此不会执行 export PATH="$HOME/.bun/bin:$PATH" 这类配置。结果:shell 找不到 bun,进程以 exit code 127 退出,连接失败。

表现为 /mcp 一直显示 Failed to connect,但手动在终端运行同样命令完全正常。

解决方案:向 .mcp.json 注入 env.PATH

MCP server 配置支持 env 字段,Claude Code 会将其作为环境变量传给子进程:

{ "mcpServers": { "telegram": { "command": "bun", "args": ["run", "--cwd", "${CLAUDE_PLUGIN_ROOT}", "--shell=bun", "--silent", "start"], "env": { "PATH": "/Users/yourname/.bun/bin:/usr/local/bin:/usr/bin:/bin:/opt/homebrew/bin" } } } }

这样 bun 就能被找到,插件的 package.json 的 start 脚本无需改动,插件更新后也不会失效。

注意: 插件实际运行的文件在 ~/.claude/plugins/cache/ 目录,而不是 external_plugins/。修改 external_plugins 里的文件不会生效,脚本会自动处理正确的路径。


脚本流程

扫描 CC 安装 → 读取二进制 → 检测三处补丁状态 ├─ 未补丁 → 备份原文件(.channels-bypass-bak) → 应用三处补丁 → 写回 → macOS 重签名 ├─ 已补丁 → 跳过 └─ 未匹配 → 版本不兼容,不操作 扫描 ~/.claude/plugins/cache/**/.mcp.json ├─ 发现 bun server 且缺少 env.PATH → 注入 bun 路径 └─ 已注入 → 跳过

  • 支持 Windows / macOS / Linux
  • 支持 bun 官方安装 / npm -g / pnpm 三种安装方式
  • 自动检测 bun 位置(~/.bun/bin~/.local/bin、homebrew 等)
  • 自动备份,可一键恢复(--restore
  • macOS 自动 ad-hoc 重签名(修改二进制后必须重签,否则系统拒绝执行)

使用方式

前置要求

  1. 插件文档
    claude-plugins-official
  2. 安装 bun(如未安装):

    curl -fsSL https://bun.sh/install | bash

  3. 安装 Claude Code 官方 Telegram 插件:

    /plugin install telegram@claude-plugins-official

  4. 配置 bot token(通过 /telegram:configure skill)

应用补丁

退出所有 Claude Code 进程后运行:

python3 apply-claude-code-channels-bypass-fix.py # 交互式 python3 apply-claude-code-channels-bypass-fix.py --auto # 全自动(含插件 PATH 修复)

--auto 模式会一次完成:二进制三处补丁 + 所有 bun 插件的 .mcp.json env.PATH 注入。

仅修复插件 PATH

如果二进制已经补丁过,只需修复插件连接问题:

python3 apply-claude-code-channels-bypass-fix.py --fix-plugin --auto

检测当前状态

python3 apply-claude-code-channels-bypass-fix.py --check

恢复原始版本

python3 apply-claude-code-channels-bypass-fix.py --restore --auto

升级 Claude Code 后

新版本会覆盖二进制,补丁失效。重新运行 --auto 即可。插件的 .mcp.json 在插件更新时也可能被覆盖,同样重跑一次即可。


排查常见问题

/mcp 显示 Failed to connect

通常是 bun PATH 问题。运行:

python3 apply-claude-code-channels-bypass-fix.py --fix-plugin --auto

如果仍然失败,可能有上一个 session 的 zombie 进程还在占用 bot token(Telegram 不允许同一 token 有两个 getUpdates 消费者)。排查:

ps aux | grep telegram

找到旧进程后 kill -9 <pid>,再用 /mcp 重连。

消息发出去了但 Claude 没有回复

确认三处二进制补丁都已应用:

python3 apply-claude-code-channels-bypass-fix.py --check

如果显示"未补丁",重新运行 --auto

网友解答:
--【壹】--:

我早上用了 重复造了Claude Code Channels补丁,解决Claude Code非订阅用户telegram、discord无法使用的问题 可以了


--【贰】--:

我把CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC这个配置去掉,就可以用channels了


--【叁】--:

也就是说这是哈雷佬的那个脚本的python版本?我用哈雷佬的脚本没成功,还是用不了channels。我试试这个


--【肆】--:

我去确认下


--【伍】--:

哇,试了其他佬的补丁都不行,就这个可以!!!!多谢大佬


--【陆】--:

太长了,不看


--【柒】--:

前排,前排


--【捌】--:

不是给你看的


--【玖】--:

赶快试试,一直期待的功能

标签:人工智能
问题描述:

解锁 Claude Code 的 Channel 功能Telegram)

apply-claude-code-channels-bypass-fix.py.zip (6.6 KB)

测试环境: Claude Code 2.1.84(bun 安装)· Telegram 插件 0.0.4 · macOS
仅测试 Telegram。Discord、iMessage 等其他 Channel 插件结构相同,理论可用,但未实际验证。
其他版本、其他平台(Linux / Windows)、npm / pnpm 安装方式未经测试,脚本在不兼容时会报错并拒绝操作,不会损坏文件。

适用人群: 本补丁主要面向 API Key 用户。订阅用户(Claude.ai OAuth 登录)在灰度放量后可通过正规渠道获得该功能,不建议使用补丁。

参考自 Claude Code Channels 工人能智版,原脚本不支持 bun 安装方式,因此自行重新实现
二进制逆向分析与本文均由 Claude Opus 4.6 完成。

最新版 Claude Code 内置了 Channel 功能,允许通过 MCP 插件将 Telegram、Discord 等即时通讯工具桥接到 Claude Code 会话。用户在 Telegram 上发消息,Claude Code 直接处理并回复,彻底解放终端。

但该功能被多个 feature flag 和策略门控——Anthropic 通过 Statsig 服务端按账户逐步放量,绝大多数用户目前拿不到这些 flag,功能被静默锁定,没有任何提示。

注意: 使用 API Key 登录的用户(ANTHROPIC_API_KEY 环境变量方式)完全无法获得此功能——Statsig gate 只对 Claude.ai OAuth 账户生效,API Key 用户不在放量体系内,补丁是唯一解法。


Channel 有什么用?

Channel 让 Claude Code 拥有一个持久的 Telegram 入口:

  • 随时随地提问 —— 不需要坐在电脑前,手机上发消息即可
  • 任务异步推进 —— 发出指令后离开,Claude 在后台执行,完成后回复
  • 图片/文件传输 —— 发照片、截图、文档,Claude 直接读取处理
  • 工具调用权限控制 —— Claude 需要调用敏感工具时,通过 Telegram 的按钮交互完成授权

为什么被锁定?三层门控

Claude Code 对 Channel 功能设置了三道独立的开关,任何一道不通则功能完全失效:

门控 1:nH_() — Channel 注册决策

这是最核心的一道关卡。每当 MCP 插件连接时,Claude Code 调用 nH_() 函数决定这个插件是否允许注册为 Channel。

原始逻辑会依次检查:

  1. MCP 服务器是否声明了 claude/channel capability(保留此检查)
  2. tengu_harbor feature flag(Statsig 灰度,默认 false → 拦截)
  3. 账户认证状态
  4. 策略/合规检查
  5. 会话模式检查
  6. Marketplace 许可检查
  7. 白名单检查

未获灰度的用户在第 2 步即被拦截,返回 {action:"skip"},后续所有检查根本不会执行。

门控 2:KfA()tengu_harbor_permissions flag

KfA() 控制 channelPermissionCallbacks 的注册。这个回调系统是消息在 awaitAutomatedChecksBeforeDialog 中被实际处理的前提。

// 原始逻辑 function KfA() { return td("tengu_harbor_permissions", !1, ...) } // ↑ 默认 false

如果这道关卡不通,即便消息到达了 Claude Code,也会被静默丢弃。

门控 3:K84() — UI 状态锁定

这道关卡控制界面展示逻辑,disabled/noAuth/policyBlocked 三个字段全部锁为 true,导致 UI 层拒绝展示和处理 Channel 相关内容。


什么是 Statsig feature gate?

Statsig 是一个第三方 feature flag / A/B 测试平台。Claude Code 用它来做功能灰度发布——服务端维护一张「开关表」,每个用户启动 CLI 时拉取自己的开关状态,决定哪些功能可用。

具体到 Channel 功能:Anthropic 在 Statsig 后台创建了 tengu_harbortengu_harbor_permissions 等 gate,只对部分账户开放。CLI 启动时从 Statsig API 拉取你的 gate 列表,缓存在 ~/.claude/statsig/ 目录下。如果你的账户不在放量名单中,这些 gate 根本不会出现在返回数据里,CLI 就 fallback 到代码中的默认值 false——功能关闭,无声无息。


补丁原理

二进制补丁:等长字节替换

Claude Code 使用 bun 编译,JS 源码原样嵌入可执行文件。替换必须等长——长度变化会破坏内部偏移量映射,导致程序崩溃。

补丁共三处,均为最小字节替换:

Patch 1 — nH_() bypass

找到 MCP capability check 的结束标记(这一步保留),将其后所有 skip 检查替换为直接 return{action:"register"},填充等量空格保持长度不变:

anchor: reason:"server did not declare claude/channel capability"}; 之后: [skip checks...return{action:"register"}...}] 替换为: return{action:"register"}[spaces...]}

Patch 2 — KfA() tengu_harbor_permissions flag

原始: tengu_harbor_permissions",!1 替换: tengu_harbor_permissions",!0

仅改 1 字节(10),!1false!0true

Patch 3 — K84() UI 锁定解除

用正则匹配(兼容混淆变量名),将三个锁定字段全部强制为 false:

原始: disabled:!cfH(),noAuth:!xxxx()?.accessToken,policyBlocked:xxx&&yyy?.channelsEnabled!==!0 替换: disabled:!1,noAuth:!1,policyBlocked:!1[spaces...]

如果 Statsig 服务端下发了 gate(比如将来灰度到你),服务端值优先,补丁不会有副作用。


插件修复:bun PATH 问题

问题背景

Channel 功能依赖 MCP 插件(如官方 Telegram 插件)。插件的启动命令定义在 .mcp.json 里:

{ "mcpServers": { "telegram": { "command": "bun", "args": ["run", "--cwd", "${CLAUDE_PLUGIN_ROOT}", "--shell=bun", "--silent", "start"] } } }

问题: Claude Code 通过非交互式 shell 启动 MCP 子进程。非交互式 shell 不会加载 ~/.zshrc / ~/.bashrc,因此不会执行 export PATH="$HOME/.bun/bin:$PATH" 这类配置。结果:shell 找不到 bun,进程以 exit code 127 退出,连接失败。

表现为 /mcp 一直显示 Failed to connect,但手动在终端运行同样命令完全正常。

解决方案:向 .mcp.json 注入 env.PATH

MCP server 配置支持 env 字段,Claude Code 会将其作为环境变量传给子进程:

{ "mcpServers": { "telegram": { "command": "bun", "args": ["run", "--cwd", "${CLAUDE_PLUGIN_ROOT}", "--shell=bun", "--silent", "start"], "env": { "PATH": "/Users/yourname/.bun/bin:/usr/local/bin:/usr/bin:/bin:/opt/homebrew/bin" } } } }

这样 bun 就能被找到,插件的 package.json 的 start 脚本无需改动,插件更新后也不会失效。

注意: 插件实际运行的文件在 ~/.claude/plugins/cache/ 目录,而不是 external_plugins/。修改 external_plugins 里的文件不会生效,脚本会自动处理正确的路径。


脚本流程

扫描 CC 安装 → 读取二进制 → 检测三处补丁状态 ├─ 未补丁 → 备份原文件(.channels-bypass-bak) → 应用三处补丁 → 写回 → macOS 重签名 ├─ 已补丁 → 跳过 └─ 未匹配 → 版本不兼容,不操作 扫描 ~/.claude/plugins/cache/**/.mcp.json ├─ 发现 bun server 且缺少 env.PATH → 注入 bun 路径 └─ 已注入 → 跳过

  • 支持 Windows / macOS / Linux
  • 支持 bun 官方安装 / npm -g / pnpm 三种安装方式
  • 自动检测 bun 位置(~/.bun/bin~/.local/bin、homebrew 等)
  • 自动备份,可一键恢复(--restore
  • macOS 自动 ad-hoc 重签名(修改二进制后必须重签,否则系统拒绝执行)

使用方式

前置要求

  1. 插件文档
    claude-plugins-official
  2. 安装 bun(如未安装):

    curl -fsSL https://bun.sh/install | bash

  3. 安装 Claude Code 官方 Telegram 插件:

    /plugin install telegram@claude-plugins-official

  4. 配置 bot token(通过 /telegram:configure skill)

应用补丁

退出所有 Claude Code 进程后运行:

python3 apply-claude-code-channels-bypass-fix.py # 交互式 python3 apply-claude-code-channels-bypass-fix.py --auto # 全自动(含插件 PATH 修复)

--auto 模式会一次完成:二进制三处补丁 + 所有 bun 插件的 .mcp.json env.PATH 注入。

仅修复插件 PATH

如果二进制已经补丁过,只需修复插件连接问题:

python3 apply-claude-code-channels-bypass-fix.py --fix-plugin --auto

检测当前状态

python3 apply-claude-code-channels-bypass-fix.py --check

恢复原始版本

python3 apply-claude-code-channels-bypass-fix.py --restore --auto

升级 Claude Code 后

新版本会覆盖二进制,补丁失效。重新运行 --auto 即可。插件的 .mcp.json 在插件更新时也可能被覆盖,同样重跑一次即可。


排查常见问题

/mcp 显示 Failed to connect

通常是 bun PATH 问题。运行:

python3 apply-claude-code-channels-bypass-fix.py --fix-plugin --auto

如果仍然失败,可能有上一个 session 的 zombie 进程还在占用 bot token(Telegram 不允许同一 token 有两个 getUpdates 消费者)。排查:

ps aux | grep telegram

找到旧进程后 kill -9 <pid>,再用 /mcp 重连。

消息发出去了但 Claude 没有回复

确认三处二进制补丁都已应用:

python3 apply-claude-code-channels-bypass-fix.py --check

如果显示"未补丁",重新运行 --auto

网友解答:
--【壹】--:

我早上用了 重复造了Claude Code Channels补丁,解决Claude Code非订阅用户telegram、discord无法使用的问题 可以了


--【贰】--:

我把CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC这个配置去掉,就可以用channels了


--【叁】--:

也就是说这是哈雷佬的那个脚本的python版本?我用哈雷佬的脚本没成功,还是用不了channels。我试试这个


--【肆】--:

我去确认下


--【伍】--:

哇,试了其他佬的补丁都不行,就这个可以!!!!多谢大佬


--【陆】--:

太长了,不看


--【柒】--:

前排,前排


--【捌】--:

不是给你看的


--【玖】--:

赶快试试,一直期待的功能

标签:人工智能