一个编码 Agent 可能还在工作,可能在等下一条指令,也可能卡在回合中间。难的不是把这些状态画出来,而是在不上传会话内容、也不对着一个旧会话乱响的前提下,判断哪一个状态是真的
来源始终在本地
Claude Code 和 Codex 本来就会在机器上写 JSONL 会话记录。Agent Island 检查各服务商本地会话目录下的近期文件。判断一个会话有没有在动,它不需要一个托管的状态服务
扫描器会用到文件修改时间、近期事件,以及 App 有没有观察到那个文件在产出。旧文件被忽略,这样一份过期的会话记录就不会在启动之后变成一条新鲜提醒
刻意做小的状态模型
每个候选会话被归为空闲、工作中、轮到你了,或者某个注意力状态。Claude 的完成标记包括带终止原因的助手回合,Codex 用它的任务完成事件。一个更新的开始事件会让 Codex 会话留在工作中
同一家服务商可能存在多个会话。Agent Island 为每家挑出当前最紧急的那个状态,然后在顶部条上渲染一个 Claude 信号和一个 Codex 信号
卡住和安静不是一回事
一个没变过的文件并不自动等于卡住。App 必须先观察到它在工作,之后一段没有完成标记的长时间停顿,才可能变成注意力状态。正是这段额外的历史,让普通的空闲会话不会变红
这个信号证明不了什么
会话活动能说明工具有没有在动。它说不出生成的代码对不对、某次工具调用有没有价值,也说不出一个旧会话是不是已经被删了。状态界面刻意保持很窄:Agent 是在工作、在等你,还是在请求你的注意
公开源码里有当前的扫描器实现和它的状态阈值
← 全部文章