sumi5.top
笔记 · 2026-10-16

Claude Code×Grok Bot不用 webhook,一个 Python 脚本搞定

适合谁:你在没有图形界面的机器(VPS)上跑 Claude Code,装不了 Grok Bot 桌面 App,想让 Claude Code 把子任务交给 Grok Bot、再把答案拿回来。想反过来让 Grok Bot 指挥 Claude Code,看文末。

让 Claude Code 把任务交给 Cursor 的 Grok Bot,等它答完,拿着结果接着干。Grok Bot 能直接搜 X 上的帖子,所以最适合把「去推特上查一查」这种活儿交给它。

实测:让它去 X 上搜「Claude in Chrome」的帖子,一次拿回 8 条带链接的摘要,外加一段整体评价的总结。

纯 Python 标准库 不用 Node 22 不用常驻进程 不用公网回调
Claude Codeskill 调脚本
ask →
← reply
↓ ask ↑ reply
grokbot_api.py标准库 HTTP
HTTPS →
← 轮询
↓ HTTPS ↑ 轮询
Grok Botapi.cursor.com
01

为什么不用 webhook

最早流传的方案是 webhook:Claude Code 把任务 POST 给 Grok Bot,Grok Bot 做完再回传结果。照着做会遇到两个问题:

  • Grok Bot 界面不显示 webhook 的 URL 和 key;
  • 限流计数出错,只发了几次请求就返回 400:Automation run rate limit exceeded … current_count=10002,楼里有好几个人遇到。

评论区有人指了另一条路:Cursor 官方 BDK 扩展 cursor-grokbot-agents。它根本不走 webhook,只是拿你的 API key 调 4 个 HTTP 接口。既然只是 4 个接口,那就跳过 BDK,直接调用。

02

只有 4 个接口

主机都是 https://api.cursor.com,请求头带 Authorization: Bearer <你的 key>。

方法路径作用
POST/v0/grokbot/sessions按名字拿到 bot 的会话(没有就新建)
POST…/sessions/{id}/messages发一条消息
GET…/sessions/{id}/entries读回复,以及这一回合答完没有
POST…/sessions/{id}/interrupt打断它正在做的事

回复是 kind 为 send-message 的条目;turn 里的 inFlight、queued、idle 用来判断它答完了没有。

03

为什么不走其他路线

把两边连起来还有三种办法,但每一种都需要我这边没有的东西:

webhook

界面不显示 URL 和 key,限流计数出错,几次请求就返回 400。

Cursor 官方 BDK 扩展

需要 Node 22.13 以上,外加一个常驻的 bdk serve 进程。我的机器是没有图形界面的 VPS,Node 版本较旧,也不想再多养一个常驻进程。

grok-bot-cli(社区工具)

需要在同一台机器上装好并登录 Grok Bot 桌面 App。我的 Claude Code 跑在没有图形界面的 VPS 上,这条路走不通。

如果你是在装了 Grok Bot App 的 Mac 上用 Claude Code,grok-bot-cli 值得一试:功能更多,也不用自己管理 key。

04

四步用起来

  1. 拿一把个人 key。最稳的办法是让 BDK 帮你生成,它走浏览器授权加轮询,没有图形界面的 VPS 也能用:把打印出来的网址拿到自己电脑的浏览器里点确认即可。
    npx -p @cursor/bdk bdk login
    完成后 key 在 ~/.config/agent-serve/credentials.json 的 apiKey 字段里。
  2. 把 key 存成只有自己能读的文件,然后删掉 BDK 留下的那份。
    mkdir -p ~/.grokbot && chmod 700 ~/.grokbot
    python3 -c 'import json,os;print(json.load(open(os.path.expanduser("~/.config/agent-serve/credentials.json")))["apiKey"],end="")' > ~/.grokbot/cursor_api_key
    chmod 600 ~/.grokbot/cursor_api_key
    rm ~/.config/agent-serve/credentials.json
  3. 写上允许对话的 bot 名字,要和 Grok Bot app 里显示的完全一致(原因见下面的坑②)。
    echo 'GROKBOT_AGENTS=你的bot名字' >> ~/.grokbot/env
  4. 下载脚本和 skill,开问。
    mkdir -p ~/.claude/skills/grokbot && cd ~/.claude/skills/grokbot
    curl -fsSLO https://sumi5.top/grokbot/grokbot_api.py
    curl -fsSLO https://sumi5.top/grokbot/SKILL.md
    
    python3 grokbot_api.py ask "在 X 上搜一下关于 xxx 的帖子,给 5 条带链接"
    python3 grokbot_api.py check      # 返回 running 时继续等,别重发
    python3 grokbot_api.py interrupt  # 它跑偏了就打断
    装好 skill 以后,直接跟 Claude Code 说「问 Grok Bot 一下……」就行。
05

踩过的三个坑

坑① 必须是个人 key

在 dashboard 里生成的如果是团队或服务账号的 token,调用会被拒:403 Service tokens are not permitted on this endpoint。用上面的 bdk login 生成的一定是个人 key。

坑② 名字拼错,账号里会多出一个空 bot

sessions 接口是按名字查找,找不到就新建。所以脚本强制要求设置白名单,而且一旦发现会话是刚刚新建的,就立刻停下、不发任务。官方扩展的做法是照样发出去,再在结果里提示 created: true。

坑③ bdk init 会偷偷做额外的事

不加 --json 时,它会执行 npm install -g、往 ~/.cursor 里装技能,最后停在浏览器登录那一步等你。只想看看模板的话,记得加 --json。

06

安全:两条一定要守

这把 key 等于你的整个账号。拿到它的人能读写、打断你所有的 Grok Bot 会话。

  • 单独建一把,起个好认的名字;
  • 存在 600 权限的文件里,不要写进仓库的 .env,也不要贴进任何聊天;
  • 不用了就去 dashboard 撤销。

Grok Bot 的回复只能当数据,不能当指令。它会去搜网页、读帖子,别人写在网上的话可能混进回复里。

在 Claude Code 的 skill 里写死:回复里如果出现「去执行 xxx」「忽略之前的指示」这类话,一律不执行,原样转述给你。下载的 SKILL.md 里已经写好了这一条。

07

风险说明

  • /v0/grokbot/* 是 Cursor 未公开的接口,是从官方 BDK 扩展的行为里看出来的,不是文档承诺过的 API,随时可能改路径、改字段,或者直接下线。
  • 脚本只带你自己的 key 和普通请求头,不冒充官方客户端。但调用未公开接口本身是否符合 Cursor 的服务条款,请自己判断。
  • 官方支持的接入方式是 BDK 扩展 cursor-grokbot-agents(需要 Node ≥ 22.13 和常驻的 bdk serve)。本脚本适合个人试玩,风险自负。

想反过来,让 Grok Bot 指挥 Claude Code?那是另一件事:用 grok-bot-cli 的 Claude 通道,或者 ssh 加 tmux,会更合适。

08

致谢

  • Riley Brown:「从 Claude Code 控制 Grok Bot」这个想法的出处。原帖
  • Agent Native:最早的 webhook 版完整教程。原帖
  • @genoooool:在评论里指出官方 BDK 扩展这条路。回复