14.2 菜单栏

macOS 菜单栏应用通过图标和状态行显示智能体的工作状态,让用户随时了解 OpenClaw 的运行情况。

概述

OpenClaw 菜单栏应用显示智能体的实时状态,包括正在执行的任务、健康检查状态等信息。菜单栏会根据智能体的活动状态动态更新图标和文本。

状态显示规则

优先级

  • "Main" 会话始终优先显示
  • 健康状态仅在空闲时显示
  • 设备(Nodes)显示,而非客户端(Clients)

会话管理

会话通过 runIdsessionKey 标识,默认优先显示 main 会话。

图标状态

状态类型

  • idle - 空闲状态
  • workingMain(ActivityKind) - 主会话工作中
  • workingOther(ActivityKind) - 其他会话工作中
  • overridden(ActivityKind) - 覆盖状态

视觉效果

  • workingMain: 动画效果 + 完整色调
  • workingOther: 柔和色调 + 无动画
  • idle: 静态图标

活动类型与图标

活动类型 图标 描述
exec 💻 执行命令
read 📄 读取文件
write ✍️ 写入文件
edit 📝 编辑文件
attach 📎 附加资源
其他 🛠️ 通用工具

状态文本格式

显示格式

状态文本使用 · 作为分隔符,显示简短标签:

# 主会话示例
Main · exec: pnpm test

# 其他会话示例
Other · read: apps/macos/Sources/OpenClaw/AppState.swift

# 空闲状态
Idle · Health: OK

文本组成

  • 会话标识: Main / Other
  • 活动类型: exec / read / write / edit 等
  • 详细信息: 命令或文件路径

节点与上下文

节点(Nodes)

菜单栏的 "Nodes" 部分显示设备信息,而非客户端信息。

上下文(Context)

"Usage" 信息显示在 Context 部分,包含提供者数据。

事件来源

控制通道

状态更新来自控制通道的 agent 流:

  • job 事件 - 执行状态
  • tool 事件 - 工具阶段

标签解析

系统会解析 args.command 或文件路径生成状态标签。

调试功能

图标覆盖

开发时可以通过 @AppStorage("iconOverride") 覆盖图标状态进行测试。

测试要点

  • 状态切换稳定性
  • 无闪烁效果
  • 正确的降级回退

使用场景

  • 快速查看智能体当前状态
  • 监控任务执行进度
  • 区分主会话和后台会话
  • 健康状态一览