从"召之即来"到"时刻在线"
当前 Claude Code 是纯响应式工具——用户输入,模型响应,等待下一次输入。KAIROS/PROACTIVE 系统的目标是打破这一范式:让 Claude 在用户离开后继续工作、监控变化、并在合适时机主动汇报结果,无需用户持续盯守。
定时自主执行
用户创建 cron 任务后,Claude 在后台按计划自动运行,每秒检查调度状态,触发时自动执行对应 prompt。
主动消息通道
专属的 SendUserMessage 工具负责推送结果,区分"回答用户提问"与"主动发起通知"两种不同语义。
事件驱动集成
通过 GitHub Webhook 监听 PR 评论、CI 结果等外部事件,事件到来时自动唤醒并处理,无需手动轮询。
SendUserMessage 工具(Brief Tool)
专为主动场景设计的消息发送工具。区别于普通文本输出,所有用户可见的内容必须通过这个工具投递,确保不会因用户未展开详情视图而错过关键信息。
- status: 'normal' — 回复用户刚才的请求
- status: 'proactive' — 主动发起(任务完成/遭遇阻塞/需要用户决策)
- 支持 Markdown 富文本与文件附件
- 下游路由依赖 status 字段进行差异化处理
Cron 定时任务调度器
完整的定时任务基础设施,支持一次性与重复性任务,持久化到 .claude/scheduled_tasks.json,跨会话保持生效。
- 每秒检查一次(CHECK_INTERVAL_MS = 1000)
- 分布式锁机制防多会话重复触发
- 5 分钟锁探测,支持 crash 后接管
- 重复任务 7 天自动过期(可配置)
- 抖动配置(Jitter)防止整点流量峰值
Proactive 模式(系统提示注入)
通过修改系统提示,激活模型的主动工作意识。模型将接收周期性的 <tick> 信号,自主判断执行任务还是调用 Sleep 待机。
You are in proactive mode. Take initiative —
explore, act, and make progress without waiting
for instructions.
You will receive periodic <tick> prompts.
Do whatever seems most useful, or call
Sleep if there's nothing to do.
Coordinator 多 Worker 协调器
专为复杂并行任务设计的编排层。Coordinator 是"总指挥",可同时派发多个 Worker 并行执行,收集结果后综合汇报给用户。
- Agent 工具:创建新 Worker
- SendMessage 工具:给现有 Worker 发指令
- TaskStop 工具:终止 Worker
- subscribe_pr_activity:订阅 GitHub PR 事件
- 共享 Scratchpad 目录,跨 Worker 知识传递
GitHub Webhook 集成(KAIROS_GITHUB_WEBHOOKS)
事件驱动的 PR 监听能力。订阅后,GitHub 的 Review 评论、CI 构建结果等事件会以"用户消息"形式到达,Coordinator 自动路由给对应 Worker 处理。
- subscribe_pr_activity / unsubscribe_pr_activity
- 支持 review 评论、CI 结果等事件
- 注意:mergeable_state 变更不走 webhook,需要轮询
- 事件以 <task-notification> XML 格式投递
Away Summary 离开摘要
用户离开终端 5 分钟后,自动生成一份"在你离开期间发生了什么"的摘要,帮助用户快速恢复上下文,无需翻看全部对话记录。
- 5 分钟失焦触发(BLUR_DELAY_MS = 300,000ms)
- 仅在无活跃查询时触发
- 消息类型:system · subtype: 'away_summary'
- GB 门控:tengu_sedge_lantern(默认关)
--proactive --brief 标志或 CLAUDE_CODE_PROACTIVE=1 环境变量启动。系统检查三层 Feature Flag,注入 Proactive 系统提示,启动 Brief 工具和 Cron 调度器。.claude/scheduled_tasks.json。cron: "*/5 * * * *",
prompt: "检查部署状态,失败则通知用户",
durable: true // 持久化,重启后依然有效
})
message: "⚠️ 部署失败:auth 服务 500 错误\n位于 `src/auth/validate.ts:42`",
status: "proactive", // 主动发起,非回复
attachments: ["logs/error.log"]
})
💡 为什么要 SendUserMessage 而不用普通文本?
设计哲学:用户不会主动打开详情视图查看 Claude 的内部思考过程。真正重要的内容必须通过专用工具主动推送,否则就像发了邮件但邮件落在垃圾箱里。
💡 为什么先发"收到"再工作?
用户体验优先:长时间操作必须先发确认,避免用户面对沉默的 loading 状态产生焦虑。设计细节体现了深刻的用户心理洞察。
💡 为什么 status 字段要区分 normal/proactive?
两种消息在用户感知层面截然不同:
- normal:我在回答你的问题,是"对话"
- proactive:我发现了什么要告诉你,是"推送通知"
下游系统根据这个字段做路由,未来可以映射到不同的 UI 展示形式(如桌面通知、侧边栏等)。
💡 为什么调度器每秒检查但要设计 Jitter?
两个看似矛盾的设计目标:
- 精确性:1 秒粒度检查保证任务不晚触发
- 平稳性:Jitter 防止所有用户在 :00 整点同时请求 API,避免流量峰值
通过 GrowthBook 动态下发 Jitter 配置,可以在不发版的情况下调整延迟参数。
从工具到代理的范式转移
这是 Claude Code 从"响应式工具"向"自主代理"演进的关键一步。代理不等待指令,它主动感知环境、执行任务、报告结果。KAIROS 是这个战略转型的技术基础设施。
异步工作流解锁新使用场景
当前 Claude Code 要求用户全程陪伴。主动模式使"交给 Claude 然后去做其他事"成为可能,解锁 CI/CD 监控、定时代码审查、PR 变化跟踪等高价值长尾场景。
多 Worker 并行是差异化竞争力
Coordinator 模式让 Claude 可以并行执行多个子任务,"并行是你的超能力"直接写进了 Coordinator 的系统提示。这在复杂软件工程任务中是极大的时间节省。
通知设计先于 UI 设计
status: 'proactive' 字段以及 SendUserMessage 作为专用通道,体现了 Anthropic 在 UI 还未设计好之前就为"主动推送"建立语义模型——这为未来多端通知奠定了架构基础。
外部事件集成是护城河
GitHub Webhook 集成让 Claude 成为开发流程的一部分,而非独立工具。当 Claude 能监听 PR 变化并自动响应时,切换成本急剧提高——这是典型的工作流嵌入战略。
工作量感知与成本治理
Cron 任务被标记为 WORKLOAD_CRON,Away Summary 和主动任务会区分工作负载类型。这是为差异化计费和配额管理预埋的基础设施——后台任务可能会有独立的计费逻辑。
用户信任建立 高风险
AI 在后台自主执行代码操作,用户可能无法感知在发生什么。建议:提供完整的任务运行日志,允许随时暂停/审查所有计划任务,建立清晰的"Claude 正在做什么"可见性界面。
通知疲劳 高风险
Proactive 消息如果过于频繁或噪音过多,用户会迅速关闭该功能。代码注释中已有意识到这个问题(要求"keep messages tight"),但需要 更严格的推送频率限制和质量门槛。
成本不可控 中风险
后台任务持续消耗 token,用户可能对成本缺乏感知。已有 WORKLOAD_CRON 标记预埋了差异化计费基础。建议:在任务创建时展示预估成本,设置月度 token 预算上限。
任务失控/死循环 中风险
Coordinator 派发的 Worker 如果陷入循环或执行破坏性操作,后果严重。7 天自动过期机制和分布式锁是必要的,还需要:Worker 执行超时限制、危险操作二次确认机制。
多实例冲突 低风险
用户同时打开多个 Claude Code 窗口时,分布式锁(cronTasksLock.ts)已处理任务重复触发问题。5 秒探测间隔确保 crash 后能正确接管。设计较为完善。
GitHub 权限边界 低风险
Webhook 订阅需要明确的 OAuth 授权范围。注释中已提醒 mergeable_state 不走 webhook 需要轮询。建议:在授权时明确告知用户 Claude 将监听哪些 PR 事件,提供随时取消订阅的入口。