claude-code-notifier
工作原理 指南 常见问题
◐简体中文
English العربية Deutsch Español Français עברית Italiano 日本語 한국어 Nederlands Polski Português (Brasil) Русский Türkçe Tiếng Việt 简体中文 繁體中文
开始使用
全部指南

同时运行多个 Claude Code 会话:分清是哪个在等你

更新于 2026年10月31日 · 阅读约 6 分钟
本页内容 01为什么并行会话容易乱 02先把会话正确隔离 03在自制的每条提醒里带上项目名 04难点:回复到正确的会话 05常见问题

同时运行多个 Claude Code 会话时,一句简单的“Claude 需要你处理”是不够的,因为你分不清是哪个会话发的。解决办法是在每条通知里带上会话的项目或文件夹。每个 hook 都会以 JSON 形式收到会话的 cwd 和 session_id,hook 可以读取它们并把项目名放进提醒。用 claude -n <name> 或 /rename 给会话起个清楚的名字,并用 claude --worktree <name> 让同一仓库上的并行会话各自拥有独立文件夹,文件夹名就会出现在提醒里。

01为什么并行会话容易乱

并排运行两三个 Claude Code 会话已经是常见的工作方式:一个修 bug,一个写测试,一个尝试重构。每个会话按自己的节奏停下来。遇到的问题总是那几个:

  • 收到提醒,却不知道来自哪个 terminal 标签页;
  • 你盯着一个会话,另一个已经在权限 prompt 上等了二十分钟;
  • 在错误的窗口里作答。

这三个问题归根结底都是识别问题。每条提醒都应该说明来源,每个回答都应该回到发起请求的会话。

02先把会话正确隔离

同一仓库使用 worktree

两个会话编辑同一个 checkout 会互相覆盖改动。Claude Code 的 --worktree flag(简写 -w)会创建一个隔离的 git worktree,并在其中启动会话:

claude --worktree feature-auth
claude --worktree fix-login

默认情况下,每个 worktree 创建在仓库根目录的 .claude/worktrees/<name>/ 下,使用名为 worktree-<name> 的新分支。每条命令在单独的 terminal 中运行。把 .claude/worktrees/ 加到 .gitignore,免得 worktree 显示为未跟踪文件。

退出时,Claude Code 会检查 worktree。如果没有改动且你从未给会话命名,Claude Code 会删除该 worktree 及其分支;否则会询问是否保留。之后想回到保留的 worktree,运行退出时打印的 claude --worktree <name> --resume 命令即可。如果想自己管理 worktree,也可以用 git worktree add ../project-feature-a -b feature-a,然后在该文件夹中启动 claude。

对通知来说还有个好处:每个会话现在都有自己的文件夹名,比如 feature-auth,正好适合放进提醒。

给会话命名

有了名字,会话就容易查找和恢复:

claude -n auth-refactor

在运行中的会话里,/rename auth-refactor 效果相同,名字会显示在 prompt 栏上。之后用 claude --resume auth-refactor 就能直接回去。在会话选择器(不带名字的 claude --resume)中,按 Ctrl+W 可把列表扩展到该仓库的所有 worktree。

03在自制的每条提醒里带上项目名

每个命令 hook 都会从标准输入收到 JSON,其中包含所有事件通用的字段,如 session_id、cwd、transcript_path 和 hook_event_name。在 worktree 会话中,cwd 是 worktree 根目录,Claude 切换目录时它也会跟着变。在 hook 中读取它,并用路径的最后一段作为标签。

在 Mac 和 Linux 上,把下面的内容保存为 ~/.claude/hooks/notify-session.sh,并用 chmod +x 设为可执行。需要安装 jq。

#!/bin/sh
input=$(cat)
project=$(basename "$(printf '%s' "$input" | jq -r '.cwd')")
event=$(printf '%s' "$input" | jq -r '.hook_event_name')

case "$event" in
  Stop) msg="Claude has finished" ;;
  *)    msg="Claude needs you" ;;
esac

notify-send "Claude Code: $project" "$msg"

在 Mac 上,把最后一行换成 osascript 通知,做法见 macOS 指南。在 Windows 上,用 PowerShell 的 ConvertFrom-Json 读取同样的 JSON;完整示例见 Windows 指南。

然后在 ~/.claude/settings.json 里把它注册到你关心的事件上:

{
  "hooks": {
    "Stop": [
      { "hooks": [{ "type": "command", "command": "~/.claude/hooks/notify-session.sh" }] }
    ],
    "Notification": [
      { "matcher": "permission_prompt", "hooks": [{ "type": "command", "command": "~/.claude/hooks/notify-session.sh" }] }
    ]
  }
}

关于路径有两点要注意。像 "$input" 这样的变量要加引号,因为文件夹名可能含空格。另外,如果用 ${CLAUDE_PROJECT_DIR} 引用脚本,要记住它始终指向会话启动时的文件夹,即使 Claude 之后切到了某个 worktree 也不会变。需要当前文件夹时,从输入里读取 cwd。

如果你在 tmux 里工作,用 pane 或 window 作标签往往比文件夹更好。tmux 指南介绍了如何找到并切换到正确的 pane。

04难点:回复到正确的会话

带标签的提醒能告诉你哪个会话在等你,但你仍然得回到那个 terminal 去回复。开着三个会话时,就意味着要找到对应的标签页、滚动到 prompt 再输入。自己写的 hook 很难把你的回复送回去,因为只有在该会话里等待的那个 hook 才能把决定返回给 Claude Code。

Claude Code Notifier 正是为此而做。它是一个独立工具,并非 Anthropic 出品。它的命令行工具 ccn 会以 Claude Code hook 的形式安装在 Mac、Windows 和 Linux 上,因此你启动的每个会话都能覆盖到,任何 terminal 都行,无需逐个会话配置。每条通知都带有项目名称和文件夹,所以在 iPhone 或 Android 手机上就能看出是哪个会话发来的。由于发出请求的 hook 正是等待你回复的那个,你在手机上做出的批准、选择或后续指令都会回到提问的那个会话。

多会话场景下有几个值得注意的细节:

  • 多台电脑。一部手机可以与多台电脑配对,一台电脑也可以配对多部手机。ccn devices 会列出与当前电脑配对的手机。
  • 在场检测。如果你在最近 30 秒内有键盘输入,就不会等待手机,terminal 照常提问。如果你不在电脑前,会话会等待手机的回复,最长不超过你设定的上限(hold_ceiling_seconds),一旦你碰了键盘就立即停止等待。
  • 不用手机也有桌面通知。在配对手机之前,任何会话完成、需要权限或提出问题时,ccn 都会在电脑上显示桌面通知。

如果你一次只跑一个会话、而且一直坐在电脑前,带标签的桌面提醒大概就够用了。对比指南把各种方案并排列了出来。

05常见问题

怎么分辨是哪个 Claude Code 会话发来的通知?

从 hook 的 JSON 输入中读取 cwd 字段,把文件夹名放进提醒标题。使用 worktree 时,每个会话都有自己的文件夹,所以名字各不相同。Claude Code Notifier 这类工具会自动在每条通知里带上项目名称和文件夹。

可以在同一个仓库里运行两个 Claude Code 会话吗?

可以,但要给每个会话单独的 worktree,以免改动互相冲突。claude --worktree <name> 会在 .claude/worktrees/<name>/ 下基于新分支创建一个 worktree,并在其中启动会话。

怎么给 Claude Code 会话命名?

用 claude -n <name> 启动,或在会话中运行 /rename <name>。之后可以用 claude --resume <name> 恢复。

hook 是按会话分别运行的吗?

是的。每个会话在自己的事件触发时运行自己的 hook,并在输入中传入该会话的 session_id 和 cwd。~/.claude/settings.json 中的 hook 对你启动的每个会话都生效。

来自不同电脑的通知会混在一起吗?

用 ccn 不会。每台电脑都单独与手机配对、有自己的名称,每条通知也都标明了来源项目。

Claude Code Notifier Claude Code 完成任务或需要你介入时,手机会收到 push,你可以直接在手机上批准、拒绝或回复。ccn 命令行工具在 Mac、Windows 和 Linux 上均可免费使用。
下载 iOS 版 下载 Android 版 安装 ccn

相关指南

  • Claude Code hook 详解:每个事件及其用途介绍 Claude Code hook 是什么、在 settings.json 中放在哪里、matcher、输入和退出码如何工作,以及每个 hook 事件的用途。
  • 在 tmux 或 screen 中运行 Claude Code:从 detached 会话接收通知tmux 或 screen 中的 Claude Code 完成任务或需要你处理时及时收到通知:allow-passthrough、bell 提醒、会话命名,以及 detached 时的手机 push。
  • 获取 Claude Code 通知的所有方式对比内置提醒、自己写的 hook、ntfy 和聊天 webhook、Anthropic 的 Remote Control 以及各类通知 app,逐一对比它们能做什么、不能做什么。
  • 让 Claude Code 跑着,人走开:一套工作流处理 Claude Code 长任务的实用流程:让电脑保持唤醒,减少不必要的 prompt,在手机上收到通知并直接回复。
claude-code-notifier

Claude Code Notifier 是一款独立的第三方应用,与 Anthropic, PBC 无关联,亦未获其认可或赞助。“Claude”和“Claude Code”是 Anthropic, PBC 的商标。

应用 iOS 应用 Android 应用 适用于 macOS、Windows 和 Linux 的 ccn 全部指南
法律信息 隐私政策 服务条款 其他语言 © 2026 touchtap。保留所有权利。 TouchTap Ltd 注册于英格兰和威尔士,公司编号 13942589。