---
read_when:
    - Mac メニュー UI または状態ロジックの調整
summary: メニューバーのステータスロジックとユーザーに表示される内容
title: メニューバー
x-i18n:
    generated_at: "2026-05-02T04:59:41Z"
    model: gpt-5.5
    provider: openai
    source_hash: 340b86a2e222fb1fe7fda4f0f0434127af1393a64348ea033ea284ba52866beb
    source_path: platforms/mac/menu-bar.md
    workflow: 16
---

# メニューバーのステータスロジック

## 表示内容

- メニューバーアイコンとメニューの最初のステータス行に、現在のエージェント作業状態を表示します。
- 作業がアクティブな間はヘルスステータスを非表示にし、すべてのセッションがアイドルになると再表示します。
- ルートの「コンテキスト」サブメニューには、直近のセッションをルートメニュー内で直接展開せずに表示します。
- ルートメニューの「ノード」ブロックには、クライアント/プレゼンス項目ではなく、**デバイス**のみ（`node.list` 経由のペアリング済みノード）を一覧表示します。
- プロバイダー使用状況のスナップショットが利用可能な場合、ルートの「使用状況」セクションがコンテキストの下に表示され、利用可能な場合は使用コストの詳細が続きます。

## 状態モデル

- セッション: イベントは `runId`（実行ごと）と、ペイロード内の `sessionKey` とともに届きます。「メイン」セッションはキー `main` です。存在しない場合は、最も最近更新されたセッションにフォールバックします。
- 優先順位: メインが常に優先されます。メインがアクティブな場合、その状態が即座に表示されます。メインがアイドルの場合、最も最近アクティブだった非メインセッションが表示されます。アクティビティ中に切り替わり続けることはありません。現在のセッションがアイドルになるか、メインがアクティブになったときにのみ切り替えます。
- アクティビティ種別:
  - `job`: 高レベルのコマンド実行（`state: started|streaming|done|error`）。
  - `tool`: `toolName` と `meta/args` を伴う `phase: start|result`。

## IconState 列挙型（Swift）

- `idle`
- `workingMain(ActivityKind)`
- `workingOther(ActivityKind)`
- `overridden(ActivityKind)`（デバッグオーバーライド）

### ActivityKind → グリフ

- `exec` → 💻
- `read` → 📄
- `write` → ✍️
- `edit` → 📝
- `attach` → 📎
- デフォルト → 🛠️

### 視覚的な対応

- `idle`: 通常のクリッター。
- `workingMain`: グリフ付きバッジ、フルティント、脚の「作業中」アニメーション。
- `workingOther`: グリフ付きバッジ、控えめなティント、走り回りなし。
- `overridden`: アクティビティに関係なく、選択したグリフ/ティントを使用します。

## コンテキストサブメニュー

- ルートメニューには、セッション数/ステータス付きの「コンテキスト」行が 1 つ表示され、サブメニューを開きます。
- コンテキストサブメニューのヘッダーには、過去 24 時間のアクティブセッション数が表示されます。
- 各セッション行には、トークンバー、経過時間、プレビュー、思考中/詳細表示、リセット、コンパクト化、削除アクションが保持されます。
- 読み込み中、切断中、セッション読み込みエラーのメッセージは、コンテキストサブメニュー内に表示されます。
- プロバイダー使用状況と使用コストの詳細は、サブメニューを開かなくても一目で確認できるように、コンテキストの下のルートレベルに残ります。

## ステータス行テキスト（メニュー）

- 作業がアクティブな間: `<Session role> · <activity label>`
  - 例: `Main · exec: pnpm test`、`Other · read: apps/macos/Sources/OpenClaw/AppState.swift`。
- アイドル時: ヘルスサマリーにフォールバックします。

## イベント取り込み

- ソース: コントロールチャネルの `agent` イベント（`ControlChannel.handleAgentEvent`）。
- 解析されるフィールド:
  - 開始/停止用の `data.state` を伴う `stream: "job"`。
  - `data.phase`、`name`、任意の `meta`/`args` を伴う `stream: "tool"`。
- ラベル:
  - `exec`: `args.command` の最初の行。
  - `read`/`write`: 短縮されたパス。
  - `edit`: パスに加え、`meta`/diff 数から推定した変更種別。
  - フォールバック: ツール名。

## デバッグオーバーライド

- 設定 ▸ デバッグ ▸ 「アイコンオーバーライド」ピッカー:
  - `System (auto)`（デフォルト）
  - `Working: main`（ツール種別ごと）
  - `Working: other`（ツール種別ごと）
  - `Idle`
- `@AppStorage("iconOverride")` 経由で保存され、`IconState.overridden` にマッピングされます。

## テストチェックリスト

- メインセッションジョブをトリガーする: アイコンが即座に切り替わり、ステータス行にメインラベルが表示されることを確認します。
- メインがアイドルの間に非メインセッションジョブをトリガーする: アイコン/ステータスに非メインが表示され、完了するまで安定していることを確認します。
- 他のセッションがアクティブな間にメインを開始する: アイコンが即座にメインへ切り替わることを確認します。
- 急速なツールバースト: バッジがちらつかないことを確認します（ツール結果に対する TTL 猶予）。
- すべてのセッションがアイドルになると、ヘルス行が再表示されます。

## 関連

- [macOS アプリ](/ja-JP/platforms/macos)
- [メニューバーアイコン](/ja-JP/platforms/mac/icon)
