命令字典
Slash 命令、CLI 子命令、Hook 事件、启动参数的字典与演进史。
Slash 命令、CLI 子命令、Hook 事件、启动参数的字典与演进史。
重启后台会话
claude respawn <id> [--all]claude respawn 7c5dcf5dclaude respawn 用来重启一个后台会话(background session),不管它当前是运行中还是已停止。官方 CLI reference 的描述是:重启后台会话,并保持其 conversation 完整。
它属于后台会话的 shell 管理命令组,和 claude agents、claude attach、claude logs、claude stop(别名 claude kill)、claude rm 同一组。后台会话由 --bg / --background 启动,由后台 supervisor 进程托管。
官方 agent view 文档说明了重启后的行为:
典型动机是让会话用上更新后的 Claude Code 二进制,官方示例里的说法是 "to pick up an updated Claude Code binary"。
来源里没有标注 respawn 的最低版本要求,这里不写版本号。
claude respawn <id>
claude respawn --all
<id> 是后台会话的短 ID,即 claude agents --json 输出里的 id 字段。官方示例:
claude respawn 7c5dcf5d
| 形式 | 作用 |
|---|---|
claude respawn <id> | 重启指定会话,运行中或已停止均可 |
claude respawn --all | 重启所有运行中的会话,例如一次性把全部会话切到更新后的二进制 |
官方文档只列出了这两种形式,没有其他 flag。
官方文档没有列出 respawn 的退出码表。GitHub issue #59806 里有一位用户报告(v2.1.142,Windows;未见维护者对该行为的确认):某个后台会话因上下文过大("Prompt is too long / request too large")进入 "Needs input" 后,claude respawn 会打印 respawned 并返回 exit 0,但该会话的 state.json 一直停在 "state": "stopped"。
| 退出码 | 含义 |
|---|---|
0 | 该 issue 报告,即使会话最终没有重新运行,也返回 0(见下文"常见坑") |
按该 issue 的报告,exit 0 并不一定表示会话已经回到运行状态。脚本里可以再用 claude agents --json 检查 state。
claude agents --json 的 state 取值为 working、blocked、done、failed、stopped。
claude agents --json 打印会话 JSON 数组后退出。后台会话有 id 字段(短 ID),官方说明它可用于 claude attach、claude logs、claude stop,respawn 示例用的也是同样形式的短 ID。
批量重启后台会话的示意写法(注意:来源没有说明 stopped 会话是否出现在默认的 --json 输出里,--json --all 才会额外包含已完成的后台会话;关机后 48 小时内的会话显示为 failed 而不是 stopped,下面的过滤条件会漏掉它们,使用时请按实际输出调整):
claude agents --json \
| jq -r '.[] | select(.kind=="background" and .state=="stopped") | .id' \
| xargs -I{} claude respawn {}
这条管道是根据官方 --json 字段说明组合出来的,不是官方给出的示例。issue #62448 里有一个用户提供的 workaround,思路相同,但用的是 .sessionId:
claude agents --json | jq -r '.[].sessionId' | xargs -I{} claude respawn {}
官方文档说 sessionId 是完整 UUID,用于 claude --resume,而 id 才是文档明确标注可给 attach / logs / stop 使用的短 ID。因此上面的脚本用 .id。
| 约束 | 原因 / 来源 |
|---|---|
--all 只重启运行中的会话 | 官方文档:"Restart every running session"。已停止的会话要用 claude respawn <id> 单独恢复 |
| 关机 / 重启后会话不会自动恢复 | 官方文档:sleep 本身不会停止会话,shutdown / reboot 会。正在等待你输入的会话保持 Needs input;其他运行中的会话在 48 小时内显示为 failed,attach 或回复即可从中断处重启;超过 48 小时显示为 stopped,回复或 claude attach <id> 可恢复 |
| 会话由 supervisor 进程托管 | claude daemon status 查看 supervisor 状态。claude daemon stop --any 会停止 supervisor 和它托管的后台会话 |
claude respawn --all 让所有运行中的后台会话换到新二进制(官方文档给出的用法)。claude respawn <id>,保留其 conversation。failed 的会话,attach 或回复即可从中断处重启;超过 48 小时显示为 stopped 的会话,回复或 claude attach <id> 即可恢复;只有当已保存的 conversation 被清理后,才用 claude respawn <id> 重新运行其原始 prompt。--all 在某些版本被解析器拒绝。 issue #62448 报告,在 Claude Code 2.1.150(macOS)上,claude respawn --help 显示 Usage: claude respawn <id>|--all,但执行 claude respawn --all 报 error: unknown option '--all'。该 issue 已被标为 "Closed as not planned",而官方 agent view 文档现在收录了 --all。你所用版本是否支持,以 claude respawn --help 和实际运行为准。不支持时可用上面的 xargs 循环代替。claude respawn 返回 exit 0,但 state 一直是 stopped,反复 respawn 也不会变成 working。issue 里的 workaround 是 claude rm <id> 再 claude --bg "<prompt>" 新建会话,报告者称这会丢失该会话的 conversation。不过官方文档说明,claude rm 后 transcript 仍保留在本机,可通过 claude --resume 访问。