我们的 run_command 工具从 动手实现一个 Coding Agent 诞生起就有一条写死的规矩:subprocess.run(..., timeout=10),命令 10 秒内跑不完就强行终止、返回报错。
对 ls、git status 这类命令来说 10 秒绰绰有余,但如果你让 Agent 起一个类似 dev server 这样长时间运行的命令就会出问题:
服务起来 10s 后就被强行终止,模型还会告诉你「命令超时失败了」。跑一遍完整的测试套件、下载一个比较大的依赖包,都可能遇到这个问题。
Claude Code 是怎么解决的?它的 Bash 工具有个 run_in_background 参数,模型判断某条命令要跑很久,就把它放到后台执行,立即拿到一个任务 id 继续干别的活;等这个命令结束后,一条通知会送到模型的上下文中,它再回头给用户汇报结果。
这一篇就给 My Claude Code 补上这套后台任务管理机制。顺带说一句,这套机制不是只为 shell 命令设计的,任何「跑得久、结束后要告诉模型」的活都能用到,比如以后要实现的 sub agent 机制,本文先聚焦 shell 命令。