功能 · 04
Agent 多设备通知
当 Mac 上的一轮 Agent 工作真正完成时,把一个最小化事件交给 bluebell,再由系统通知在 Apple 设备上提醒你。

产品边界
bluebell 接收完成事件,不猜测完成
任何能在明确完成时执行本机命令的 Agent 工作流,都可以由用户接入。bluebell 不扫描已安装工具、不自动修改配置,也不通过终端文字或进程退出推测一轮工作是否结束。
用户需要根据所用工具和版本的官方协议选择真正的完成信号。等待批准、一次工具调用、子任务结束或整个会话退出,都不一定等同于“这一轮工作完成”。
数据链路
从工具到系统通知
- 工具 hook / plugin
- →
- bluebellctl
- →
- Mac Event Hub
- →
- CloudKit
- →
- 系统通知
所有工具先收敛成同一个 CodingEvent 边界。bluebellctl 只通过本机 Unix Domain Socket 上报;去重、历史、Mac 通知、CloudKit outbox 和重试都在 bluebell Mac 客户端内。
Mac 控制
总推送开关只影响远程路径
bluebell Mac 的“推送到 Watch 和 iPhone”默认开启。关闭后,现有远程 outbox 会被清空,尚未结算以及之后新接收的事件都只留在 Mac;本地历史、去重身份和独立的 Mac 本地通知开关不受影响。
重新开启后只发送新收到的事件,不补发关闭前或关闭期间的事件。已经提交给 CloudKit 的请求无法撤回,仍可能在关闭后延迟产生通知。
设备表现
Mac、iPhone 与 Watch 各自负责什么

| 设备 | 行为 |
|---|---|
| Mac | 接收事件、2 秒去重结算、本地历史、可选本机通知、云端发送队列与重试。 |
| iPhone | 保留最近事件;默认不参与远程提醒。开启页面开关后也注册同一条系统通知,由 Apple 决定呈现设备。 |
| Apple Watch | 接收正式的系统通知。Agent 页面里的铃铛按钮只用于试听本机通知震动,不代表远程事件已经送达。 |
可靠性
“已接收”不等于“已送达”
bluebellctl 退出 0 表示 Mac 客户端已经安全接收事件,包括被判定为重复的事件;它不是 Watch 收到通知的回执。Mac 的“已加入队列”也只表示事件已进入本地持久化流程。
CloudKit 写入成功仍不保证每台设备立刻收到。Push 可能合并或延迟,系统通知还会受网络、通知权限、Focus、佩戴状态和 Apple 的通知路由影响。bluebell 通过稳定事件身份与拉取真实记录补齐历史,但不宣称 exactly-once 或即时送达。
最小化数据
不会自动上传对话或源码
CloudKit 记录只包含事件 ID、来源、类型、项目显示名、短摘要、通知正文、发生时间和随机生成的来源设备 ID。
完整工作区路径、session / turn 标识、去重键、原始 payload、prompt、transcript 和源码不会自动上传。完整路径仅可用于 Mac 本地记录。你自行填写的来源、项目名、摘要或通知正文仍可能包含敏感内容,请只提供提醒所需的信息。