它卡住了会自己找你,不用你盯着。
用 Claude Code 跑长任务的同学大概都经历过这个:给它派了个活儿,起身去倒杯水,回来发现它卡在一个权限弹窗上,进度条纹丝不动。你要是去开个会,回来可能就发现它在那儿干等了半小时。
这个场景烦人的地方在于,你知道它不是不能干,就是差你一下。但你又不可能一直守着它。
我之前也试过装通知插件,跑完了推一条消息过来。但这解决的只是「它做完了」这一个信号------它卡住了呢?它需要你选 A 还是 B 呢?你还是得切回去看。
后来我想了个办法:直接在飞书上跟它对话。它卡了就问我,我回一句它就继续。不用切窗口,不用守工位,手机上就能把事儿办了。
这个东西我做完了,叫 feishu-bridge。整个项目基本上就是用 Claude Code 开发的------我自己写需求,它来实现,挺有意思的一个循环。

它能干嘛
说白了就四件事:
跑完通知你。 Claude 每次完成一轮工作,会自动往你飞书推一条消息,告诉你它干了啥、下一步打算干啥。你不用时不时切回去看。
卡了问你。 Claude Code 有个 MCP 工具叫 feishu_ask_human,它遇到需要你做决定的事,会把选项发到你飞书上,然后老老实实等着。你在手机上回个编号,它就接着跑。
远程下指令。 你在飞书上给它发条私信,它会先生成一个只读计划给你看,你同意了它才执行。执行完结果推回来。这个功能默认是关的,得你手动开。
决策路由。 上面那个「问你」的功能,你在飞书上直接按编号回就行,比如回个「3 A」,它就知道你要选第三个选项的 A。
我平时用得最多的是第二个。AskUserQuestion 弹在终端里,我不在工位的时候就是黑洞------任务卡死了,但我不知道它卡了。换成飞书之后,它把选项发过来,我在地铁上回一句「2」,回去一看已经跑完了。

技术上怎么实现的
没什么高深的,三个东西各管一摊:
Claude Code 本身有 hook 机制,Stop / Notification 事件触发时能执行脚本。我写了个 hook,把这些事件转发到飞书 bot,这是通知的来源。
然后本机跑一个 listen.py,它跟飞书之间维持一条 WebSocket 长连接。你在飞书上发私信,飞书会通过这条连接把消息推过来,listen.py 收到后就拉起一个 claude -p(headless 模式)去执行。
feishu_ask_human 是个 MCP 工具,Claude 主动调用的时候,它会往飞书发消息,然后阻塞轮询等你回复。你回了它才放行。
没有公网服务器,没有 webhook 回调,飞书长连接直接打到你本机。内网环境也能跑。
css
┌─────────────┐ Stop / Notification hook ┌──────────┐
│ Claude Code │ ───────────────────────────► │ 飞书 bot │ ──► 你的手机
└─────────────┘ └──────────┘
▲ │
│ feishu_ask_human (MCP) │ 你私信回复
│ 阻塞轮询,等你那一句 ▼
┌─────────────┐ 长连接 WebSocket ┌──────────┐
│ listen.py │ ◄──────────────────────────── │ 飞书私聊 │
│ 常驻 listener│ im.message.receive_v1 └──────────┘
└─────────────┘
│ spawn
▼
headless `claude -p` ──► 结果推回飞书
装起来不费劲
前置就两个:
- Python ≥ 3.10
- 一个飞书企业自建应用(个人也能建,免费的)
装好 plugin 跑 /feishu-bridge-setup,向导会带着你:建应用、填凭证、起 listener、绑定 owner、验证通知能不能收到。十分钟左右搞定。
飞书那边只要两个权限:
im:message:send_as_bot------发消息im:message.p2p_msg:readonly------只读私聊
群消息是故意不收的。你拉它进群也没用,这是设计,不是 bug。
安全
远程指令这个功能,本质上就是一个飞书消息驱动的远程 shell。这话我得说清楚:remote.enabled 默认是关的。 开箱只有通知和 feishu_ask_human 在跑,这俩都不会替你执行任何东西。
真要开远程执行,有三个开关:
remote.enabled------总开关,你不主动开就不存在require_confirm------执行前先把计划发你审批exec_permission_mode------默认acceptEdits,不是bypassPermissions
再加上只认私聊、只认绑定的 owner。陌生人发消息进来什么都不会发生。
顺带说一句
这个项目本身就是用 Claude Code 开发的。我提需求、Claude 写代码,遇到问题我俩来回讨论,最后成了现在这个样子。整个过程挺自然的------Claude Code 能开发 Claude Code 自己用的工具,某种意义上也算自举了。
代码放在 GitHub 上了:github.com/LHFloveXCF/...
Python 写的,MIT 协议,想用的话直接拿去。