AREX Feed Article
Claude Code v2.1.232 默认开启子代理 fork,@ 会话互通
UTC 时间 8 月 13 日 23:29,Anthropic 在官方仓库 anthropics/claude-code 发布了 , 标注的日期为 2026 年 8 月 13 日。这一版把两个能力设成默认:subagent_type: "fork" 的子代理继承完整对话和 prompt cache;在提示输入框里打 @ 就能点名另一个 Claude 会话,Claude 用 SendMessage 把消息直接发过去。同批发布的还有多项安全修复:GitLab token 脱敏、两个 Windows/PowerShell 权限绕过修复、sandbox 加固。
两条主线是连着的:一周前刚上线的跨会话消息,在这一版从「Claude 自己找会话」变成「用户点名」;子代理则从「独立上下文、只回摘要」,变成可以 fork 出带着全部来龙去脉的副本。
子代理不再从空白上下文启动
Claude Code 的大多数子代理一直是「摘要外包」模式。官方 写明,每个子代理在自己的上下文窗口里运行,完成后只把摘要带回主对话;它拿到的是自己的 system prompt 加工作目录等基础环境信息,不是完整对话。搜索日志和中间文件因此不会灌进主对话,代价是子代理不知道任务之前发生过什么。
fork 是文档里写明的例外:它继承父对话,而不是从头开始。v2.1.232 把它变成默认:fork 子代理继承完整对话和 prompt cache;交互式会话里非 teammate 的子代理 spawn 也默认转后台运行()。fork 还跳过工具池的两层过滤,拿到与主对话完全一致的工具集合()。
默认值也有边界。文档写明,fork 默认只在交互式会话开启,claude -p 非交互模式和 Agent SDK 里默认关闭;一个 fork 也不能再 spawn 新的 fork。
打一个 @,直接叫另一个会话
用法接近在聊天里 @ 一个子代理:输入 @ 加会话名前几个字母,Claude Code 列出这台机器上其他在运行的会话,选中的 mention 插入提示,例如 @api-worker。发布说明的表述是「在提示中打 @ 按名字 mention 另一个 Claude 会话,Claude 随即用 SendMessage 直接联系它」。
文档给出的样例提示是 "Let @api-worker know the schema migration finished",消息正文由 Claude 自己写。文档标注,这个 @ 点名功能要求 v2.1.232 或更高版本()。
几个边界:只输入一个裸 @ 不会显示会话列表,至少要再打一个字母;云会话和 Remote Control 会话要等 Claude 跨机列出过一次才进入建议;多个存活会话同名时,发送前 Claude 会问你要找哪一个。
投递方式也变了。此前 SendMessage 匹配到会话名后还要你确认 ref,现在名字恰好对应一个存活会话就直接投递。配合这一点,同一台机器上的交互式会话强制唯一命名:起名或改名撞上另一个存活会话时,新会话拿到 name-word-word 形式的变体名并被明确告知。文档说明默认名字从工作目录文件夹名派生,比如 my-app 目录得到 my-app-3f。
收件端控制也有了 UI 入口:/config 新增 "Dialog expiry" 和 "Messages from your other sessions" 两行,后者对应 accept/hold/refuse 三态(发布说明)。默认规则下被 hold 的消息会弹出审批对话框,默认五分钟超时(cross-session messaging 文档)。跨会话消息永远只是一段文字,不含对话历史、不含文件;同机投递走每会话一个的 socket,不经 Anthropic 服务器;送达后按普通 prompt 计入用量。
跨会话消息上线才一周,这版拆掉了它的摩擦
跨会话消息本身在 8 月 7 日才随着 上线:加入 SendMessage 和用于发现会话的 ListAgents,覆盖 macOS 和 Linux,同时加了 crossSessionInbound、dialogExpiry 两个设置。当时的流程是 Claude 先列出会话,再按名字挑。
官方开发者账号 @ClaudeDevs 当天在 X 发的演示帖()写道:"New in Claude Code: your sessions can now message each other. Instead of having to re-explain yourself in another session, you can now tell Claude to do it. It sends a summary (not your history or files), and the other session picks it up mid-task."(大意:你的会话现在可以互相发消息。不必在另一个会话里重新解释,你可以让 Claude 代发;它发的是摘要,不是历史记录或文件,另一个会话会在任务中途收到。)
按 X 公开数据,这条帖获得约 6 万 likes、约 757 万次浏览。v2.1.232 逐项拆掉这条链路的摩擦:@ 点名省掉「先列会话再挑」,bare-name 直投省掉 ref 确认,/config 行省掉手工改 settings 文件。发布所在的 目前有 141,375 个 star、22,702 个 fork。
两个权限绕过修复,九个 GitLab token 家族脱敏
GitLab 侧新增九个 token 家族的脱敏:glrt-、gloas-、glptt-、glagent-、glimt-、glsoat-、glcbt-、glft-、glffct-,可路由的 glpat-/gldt- token 整体脱敏;glab CLI 的配置存储也拿到与 gh 相同的 sandbox 和凭证路径保护。
两个权限绕过都在 Windows 上。其一,PowerShell 里可写变量的参数能静默覆写 $PSDefaultParameterValues,把后续命令的文件访问重定向到别处。其二,Git Bash 会跟随 Cygwin 风格的符号链接,而路径校验把这些链接当作普通文件;现在经过它们的写入要先过权限审批。
其余加固包括:嵌套 git 仓库不再继承父目录的信任,每个仓库单独确认;Bash 的输入重定向 < file 在所有平台接受与参数写法相同的权限检查;跨会话消息在共享 /tmp 上的 socket 目录被加固,预先放置的符号链接或他人目录会被拒绝;sandbox.ripgrep 只接受来自 user、managed 和 --settings 的配置。
网关一侧,email_domain 为空或含 @、空白、逗号时启动即报错。发布说明指出旧行为是「静默地匹配不到任何人,或授予 admin 权限」。Linux 文件系统 sandbox 同时堵住了一个 protected-path 绕过。
加固的副作用:chroot 用户丢了跨会话消息
副作用已经在少数环境出现。8 月 14 日,用户 difro 在仓库开了一份 :在 nix-portable 这类 user-namespace chroot 环境里,2.1.232 的 socket 目录加固会检查 sockets 目录的每一级祖先,要求归当前用户或 root 所有;chroot 内宿主机目录显示为未映射的 uid 65534(nobody),检查永远失败,会话根本不绑定收件 socket。
结果是跨会话消息被静默关闭:/list-agents 里看不到这些会话,SendMessage 也投不进去,唯一痕迹是一条 debug 日志 "cross-session messaging is OFF for this session"。同一台机器上还在跑 2.1.226 的会话一切正常,而且新版会话仍能看见旧版会话,反向却收不到消息。difro 在报告里写,从用户视角看,这种不对称非常令人困惑。
报告被贴上 bug、regression、has repro 标签,到成稿时状态仍为 open。报告者要求至少把失败暴露出来:在 /doctor 或 ListAgents 输出里加警告,或提供覆盖 socket 目录的环境变量;排查这条问题需要从二进制里解出打包的 JS。同一条加固同时做了两件事:挡住共享 /tmp 上的预置符号链接,也把一类原本可用的环境排除在跨会话消息之外。