Skip to content

顶部状态栏(island)始终显示,但在手动启用 status hooks 前对 agent 完全无反应;唯一的一键启用引导藏在非默认子标签里 #16

Description

@sparkleMing

问题概述

屏幕顶部的状态栏(island)在启动时被无条件创建并始终显示,但在对应 agent 的 status hooks 启用之前,它对该 agent 完全没有反应——而 hooks 默认关闭、且没有自动安装。新用户装好 SharkBay,看到顶部有个状态栏,跑起一个 agent(比如 Claude Code),状态栏却毫无动静:不变绿/黄/红,也不会在需要审批时提醒。整个过程没有任何地方提示这个状态栏依赖某个设置,更没说设置在哪。

新用户的实际体验

  1. 安装 SharkBay,顶部出现状态栏。
  2. 安装 / 运行受支持的 agent(Claude Code 等)。
  3. 状态栏一直没反应——看起来像坏了,其实只是没被配置而已。

根因

  • 状态栏窗口在启动时被无条件创建(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)。问题是它被四重条件挡住,正常用户基本碰不到:

  1. 仅在本地项目出现——Sessions 标签是 localOnly(App.tsx:144)。
  2. 用户必须手动切到 Sessions 子标签——详情页默认标签是 "git"(App.tsx:2472),且该面板仅在激活时渲染(App.tsx:2576)。
  3. 仅当所有受支持的 agent 都未启用 hooks 时才显示(App.tsx:2702)——一旦启用就消失。这本身合理,但也意味着它只对"还没找到它的人"可见。
  4. 它和状态栏完全脱节——最显眼、始终存在的元素(状态栏)得不到任何引导,而引导却躲在一个角落里。

建议的修复方向(任选其一即可改善)

  1. 把已有的引导接到状态栏上。 当没有任何受支持 agent 启用 hooks 时,状态栏的空状态 / 展开态应说明它的作用,并提供一键 "Enable Hooks"(复用 SessionsDetailTab 卡片的逻辑)。
  2. 状态栏在能工作之前干脆不显示。 没有任何受支持 agent 启用 hooks 时隐藏它。
  3. 改成 opt-out 而非 opt-in。 首次检测到受支持的 agent 时,提示启用 status hooks(或默认开启)并自动安装。

环境

  • macOS
  • 全新安装:在手动拨动 "Status hooks" 开关之前,~/.claude/settings.json 里没有 hooks 字段;在那之前状态栏对 Claude Code 一直没有任何显示。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions