Free Claude Code 提供了 Discord 和 Telegram 聊天机器人集成方案。你只需配置一个消息平台的 API Token,就能在聊天窗口直接下达编程指令,Claude Code 会在后台执行并实时回传进度,支持任务分支和会话管理。这是实现移动端或轻量级远程编程的可控方案。

Free Claude Code 接入 Discord 和 Telegram:用聊天机器人远程写代码

将 Free Claude Code 代理封装为聊天机器人,意味着你可以在 Discord 或 Telegram 的任意客户端(手机、网页、桌面应用)中,通过发送消息来远程触发 Claude Code 执行编程任务。这打破了必须在 IDE 前工作的限制,实现了“随时随地写代码”的轻量级接入。此方案是 Free Claude Code 中文指南 中远程访问策略的一种实践,它要求你理解并控制整个代理与消息平台的交互过程,符合“古法编程”中透明可控的原则。

核心功能

基于 messaging-bots.md 的文档,该消息机器人封装具备以下核心能力:

  • 远程触发:在 Discord/Telegram 聊天窗口直接发送自然语言或代码指令。
  • 实时回传:机器人会实时将 Claude Code 的思考过程、工具调用结果及最终输出回传到聊天频道。
  • 树状对话分支:这是其核心交互设计。你可以回复机器人的某条任务消息,在该任务的上下文中继续对话,创建独立的分支,而不影响主对话流。
  • 控制命令:提供 /stop/clear/stats 等命令来管理任务和会话。

配置 Discord Bot

创建 Discord 机器人

  1. 访问 Discord Developer Portal 并登录。
  2. 点击 “New Application” 创建新应用,为其命名。
  3. 进入左侧菜单的 “Bot” 页面。
  4. 在 “Privileged Gateway Intents” 下,务必开启 Message Content Intent,这是机器人读取消息内容的关键权限。
  5. 点击 “Add Bot” 下的 “Reset Token” 以生成并复制你的 Bot Token。此 Token 是配置的凭证,需妥善保管。
  6. 在 “OAuth2 > URL Generator” 中,选择 bot scope,并勾选以下权限:
    • Read Messages / View Channels
    • Send Messages
    • Read Message History
  7. 用生成的 URL 将机器人邀请至你的 Discord 服务器或私信频道。

配置环境变量

在 Free Claude Code 项目的根目录或你的启动环境中,配置 .env 文件。关键配置如下:

# 指定使用 Discord 平台
MESSAGING_PLATFORM="discord"
# 上一步获取的 Bot Token
DISCORD_BOT_TOKEN="你的 Discord Bot Token"
# 允许机器人响应的频道ID,多个ID用逗号分隔
ALLOWED_DISCORD_CHANNELS="1234567890"
# Claude Code 执行任务时使用的工作目录
CLAUDE_WORKSPACE="./agent_workspace"
# Claude Code 可以访问的文件系统根目录(安全限制)
ALLOWED_DIR="C:/Users/你的用户名/projects"
变量 说明 是否必须
MESSAGING_PLATFORM 设置为 "discord"
DISCORD_BOT_TOKEN Discord 开发者门户中获取的机器人令牌
ALLOWED_DISCORD_CHANNELS 限制机器人只响应特定频道,从 Discord 设置中复制频道 ID
CLAUDE_WORKSPACE Claude Code 的默认工作目录
ALLOWED_DIR Claude Code 可操作文件的根目录,用于安全隔离

配置 Telegram Bot

创建 Telegram 机器人

  1. 在 Telegram 应用中搜索并打开 @BotFather
  2. 发送命令 /newbot,然后按照提示依次为机器人设置名称和用户名(用户名必须以 bot 结尾)。
  3. 创建成功后,@BotFather 会提供一个 API Token,形如 123456789:ABC...。复制此 Token。
  4. (可选)获取你的个人 User ID:搜索 @userinfobot 并发送任意消息,它会回复你的 ID。此 ID 用于限制机器人只响应你一人。

配置环境变量

# 指定使用 Telegram 平台
MESSAGING_PLATFORM="telegram"
# 从 @BotFather 获取的 Token
TELEGRAM_BOT_TOKEN="123456789:ABC..."
# 限制只允许你的 User ID 使用机器人(推荐私有部署时使用)
ALLOWED_TELEGRAM_USER_ID="你的用户ID"
# Claude Code 的工作目录
CLAUDE_WORKSPACE="./agent_workspace"
# Claude Code 可访问的文件系统根目录
ALLOWED_DIR="C:/Users/你的用户名/projects"

聊天命令

在与机器人的对话中,你可以使用以下命令进行控制:

命令 说明 使用场景
/stop 停止当前正在处理的任务。 取消错误的或耗时过长的任务。
/clear 清理会话上下文。 重置对话,开始一个全新的任务。
/stats 显示当前会话的状态信息,如活动任务数等。 监控机器人运行情况。
带引用的命令 回复(Reply)某条任务消息,然后发送命令。 精准操作特定任务。例如,回复某个任务的进度消息后发送 /stop,仅停止该分支任务。

树状对话分支机制

这是 Free Claude Code 消息系统的核心设计,它模仿了代码开发中的“分支”概念,使得多个编程任务可以并行或基于上下文衍生。

工作原理

  1. 你发送一条消息(如“写一个 TODO App”)。
  2. 机器人回复一条任务消息(标记为任务 A)。
  3. 后续交互有两种模式
    • 创建新任务:直接发送新消息(如“帮我写个 README”),机器人会处理为独立的任务 B。
    • 创建分支回复(Reply)任务 A 的消息,然后发送新指令(如“加一个删除功能”)。机器人会基于任务 A 的会话上下文继续执行,形成一个分支。

示意图解

你:写一个 TODO App
Bot:🔄 Processing... (任务 A)

你:[回复任务 A] 加一个删除功能
Bot:🔄 Processing... (任务 A 的分支) -> 此分支运行在任务 A 的上下文中。

你:帮我写个 README
Bot:🔄 Processing... (任务 B,独立任务) -> 此任务与 A 无关。
  • 独立性:任务 A、任务 A 的分支、任务 B 彼此独立运行,互不干扰。
  • 队列处理:同一个分支内的消息会按照队列顺序处理。

会话管理与速率限制

会话管理

  • 每个任务(包括分支)在启动时会创建一个独立的 Claude Code CLI 会话。
  • 任务执行完成或被 /stop 命令终止后,该会话资源会被释放。
  • 通过回复分支,新任务可以“复刻”父任务的会话上下文(例如,之前的代码生成历史),实现连续编程。
  • 会话状态会持久化到本地的 session_store。即使代理进程重启,之前的会话信息也不会丢失(但运行中的任务会中断)。

速率限制: 为了控制并发和避免滥用,可以在 .env 中配置速率限制:

MESSAGING_RATE_LIMIT=1    # 每个时间窗口内允许处理的最大消息数
MESSAGING_RATE_WINDOW=1   # 时间窗口大小(单位:秒)

默认配置下,机器人每秒最多处理 1 条来自同一用户或频道的消息。如果你在多人协作的 Discord 频道中部署,可以适当调大这两个值。

FAQ

Q: Bot 启动后在 Discord/Telegram 中不响应消息? A: 首先检查 ALLOWED_DISCORD_CHANNELSALLOWED_TELEGRAM_USER_ID 配置是否正确且与当前聊天环境匹配。机器人仅响应白名单内的频道或用户。其次,确认 .env 文件中的 Token 没有填写错误。

Q: 一个任务执行到一半网络断了或进程崩溃了,怎么办? A: 重新发送相同的指令,机器人会创建一个全新的任务来执行。前一个未完成的任务的状态会保留在 session_store 中,但不会自动恢复执行。你需要手动决定是否需要基于旧的上下文继续。

Q: 可以同时配置并使用 Discord 和 Telegram 机器人吗? A: 不可以。MESSAGING_PLATFORM 环境变量只能设置为一个平台。如果确实需要同时支持,你需要启动两个独立的 Free Claude Code 代理实例,为它们配置不同的端口和不同的平台 Token。这与 连接 IDE 时配置不同端口是类似的思路。

Q: 机器人发送的消息在 Discord 和 Telegram 里格式错乱(Markdown 不显示)? A: Discord 和 Telegram 支持的 Markdown 语法略有不同(例如代码块标记)。Free Claude Code 代理内部会进行基本的格式适配。如果遇到显示问题,请检查代理运行日志中是否有格式化相关的错误输出,并确认消息内容本身是符合目标平台 Markdown 语法的。