问题概述
屏幕顶部的状态栏(island)在启动时被无条件创建并始终显示,但在对应 agent 的 status hooks 启用之前,它对该 agent 完全没有反应——而 hooks 默认关闭、且没有自动安装。新用户装好 SharkBay,看到顶部有个状态栏,跑起一个 agent(比如 Claude Code),状态栏却毫无动静:不变绿/黄/红,也不会在需要审批时提醒。整个过程没有任何地方提示这个状态栏依赖某个设置,更没说设置在哪。
新用户的实际体验
- 安装 SharkBay,顶部出现状态栏。
- 安装 / 运行受支持的 agent(Claude Code 等)。
- 状态栏一直没反应——看起来像坏了,其实只是没被配置而已。
根因
- 状态栏窗口在启动时被无条件创建(
electron/main.ts:252),从不根据"是否有 agent 启用了 hooks"来决定显隐。
- status hooks 默认关闭:
getAgentHooksEnabled() 返回 localStorage.getItem(...) === "true"(src/renderer/App.tsx:3741),全新安装时即为 false。
- 没有自动安装。
connector.install() 的唯一调用点是 setHooksEnabled 这个 IPC handler(electron/ipc.ts:544-550),只有用户手动拨动开关时才会触发。
- 这个开关位于:Settings → Agent CLIs → 选中一个已安装的 agent → "Status hooks"(
src/renderer/App.tsx:3796-3804)。其说明文案("More accurate and timely status updates via agent hook integration")完全没提到状态栏依赖它。
其实已经有一个一键 "Enable Hooks" 引导卡——但实际几乎够不着
SessionsDetailTab 里渲染了一张很好的 "Enable Hooks" 卡片,点一下按钮就能为所有受支持的 agent 批量启用 hooks(src/renderer/App.tsx:2704-2720)。问题是它被四重条件挡住,正常用户基本碰不到:
- 仅在本地项目出现——Sessions 标签是
localOnly(App.tsx:144)。
- 用户必须手动切到 Sessions 子标签——详情页默认标签是
"git"(App.tsx:2472),且该面板仅在激活时渲染(App.tsx:2576)。
- 仅当所有受支持的 agent 都未启用 hooks 时才显示(
App.tsx:2702)——一旦启用就消失。这本身合理,但也意味着它只对"还没找到它的人"可见。
- 它和状态栏完全脱节——最显眼、始终存在的元素(状态栏)得不到任何引导,而引导却躲在一个角落里。
建议的修复方向(任选其一即可改善)
- 把已有的引导接到状态栏上。 当没有任何受支持 agent 启用 hooks 时,状态栏的空状态 / 展开态应说明它的作用,并提供一键 "Enable Hooks"(复用
SessionsDetailTab 卡片的逻辑)。
- 状态栏在能工作之前干脆不显示。 没有任何受支持 agent 启用 hooks 时隐藏它。
- 改成 opt-out 而非 opt-in。 首次检测到受支持的 agent 时,提示启用 status hooks(或默认开启)并自动安装。
环境
- macOS
- 全新安装:在手动拨动 "Status hooks" 开关之前,
~/.claude/settings.json 里没有 hooks 字段;在那之前状态栏对 Claude Code 一直没有任何显示。
问题概述
屏幕顶部的状态栏(island)在启动时被无条件创建并始终显示,但在对应 agent 的 status hooks 启用之前,它对该 agent 完全没有反应——而 hooks 默认关闭、且没有自动安装。新用户装好 SharkBay,看到顶部有个状态栏,跑起一个 agent(比如 Claude Code),状态栏却毫无动静:不变绿/黄/红,也不会在需要审批时提醒。整个过程没有任何地方提示这个状态栏依赖某个设置,更没说设置在哪。
新用户的实际体验
根因
electron/main.ts:252),从不根据"是否有 agent 启用了 hooks"来决定显隐。getAgentHooksEnabled()返回localStorage.getItem(...) === "true"(src/renderer/App.tsx:3741),全新安装时即为false。connector.install()的唯一调用点是setHooksEnabled这个 IPC handler(electron/ipc.ts:544-550),只有用户手动拨动开关时才会触发。src/renderer/App.tsx:3796-3804)。其说明文案("More accurate and timely status updates via agent hook integration")完全没提到状态栏依赖它。其实已经有一个一键 "Enable Hooks" 引导卡——但实际几乎够不着
SessionsDetailTab里渲染了一张很好的 "Enable Hooks" 卡片,点一下按钮就能为所有受支持的 agent 批量启用 hooks(src/renderer/App.tsx:2704-2720)。问题是它被四重条件挡住,正常用户基本碰不到:localOnly(App.tsx:144)。"git"(App.tsx:2472),且该面板仅在激活时渲染(App.tsx:2576)。App.tsx:2702)——一旦启用就消失。这本身合理,但也意味着它只对"还没找到它的人"可见。建议的修复方向(任选其一即可改善)
SessionsDetailTab卡片的逻辑)。环境
~/.claude/settings.json里没有hooks字段;在那之前状态栏对 Claude Code 一直没有任何显示。