Chromeで開いたChatGPTの通常Chat・Workについて、ファビコン・実行中タブ数のバッジ・全タブ一覧・実行時間・オプトインの通知を表示する非公式の個人向け拡張機能です。Chat/Workの監視ではOpenAI非公開APIを使用しません。Codex連携を明示的にONにした場合のみ、既存のCodex Usage Manager APIへHTTPS通信します。
判定は画面上のUIからの推測です。公式な推論・WorkステータスAPIではありません。 Workは画面の構造やタスクの進行方法によって「状態不明」になります。ブラウザのタブを閉じた後にクラウド側で継続するWorkは追跡しません。実Work画面での自動判定は未検証です。
| 表示 | 意味 |
|---|---|
| 🟢 ✓ | 入力待機 / 明示的な完了表示 |
| 🟠 ··· | 通常Chat応答中(暫定的な送信直後も含む) |
| 🔵 ↻ | Work実行中と推測 |
| 🟣 ! | Work確認待ちと推測 |
| ⚪ ? | 不確実 / 取得不能 |
v0.3から維持した機能: Chat/Workの自動状態判定、タブごとのファビコン、オフで元に戻す、複数ウィンドウのタブ一覧、状態別集計、実行中件数バッジ(実行中がなければ確認待ち !)、行を押してタブに移動、Workモードの手動指定。
v0.4で追加した機能:
- 完了通知:実際の停止ボタンなどの強い「処理中」証拠があり、同じタブ・同じ処理の完了状態が約1.4秒安定した場合に限る。送信直後の暫定推論だけでは通知しません。
- Work確認待ち通知:承認・入力待ちと判定された状態が約0.85秒安定したら通知。
- 実行時間:各タブの「確証のある実行中」の経過時間を一覧に1秒単位で表示。
- 通知クリックで戻る:該当ChatGPTタブとそのChromeウィンドウを前面へ。
- 通知のON/OFF:すべて初期値OFF。初回ON時だけChrome通知権限を要求します。すべてOFFに戻すと権限を返却します。
- 重複通知防止:タブID・実行開始時刻・通知種別の組合せをセッション保存。MV3バックグラウンドワーカー停止後も同じ処理を二重通知しません。
- 長時間アラート:初期値OFF。5・10・15・30・60分から選択。確証のある処理が継続している場合だけ、1分おきの検査で1処理1回通知します。
- 停止ボタンが一瞬消えた、画面表示が「不明」になった、URLが別の会話に切り替わった、Workが暗黙に止まっただけ、などの場合には完了通知をしません。
- Workで「完了」を明示するUIが見つからなければ完了通知を出しません。承認待ち判定も正確性を保証できません。
- タブの破棄・スリープ・閉鎖中や通信不能時は、通知や実行時間が遅延・停止する場合があります。
- 完了・確認待ちの自動判定はベストエフォートで、推論やクラウドタスクの終了を保証しません。
- 既存の
https://codex-usage-manager.vercel.app/api/usageに読み取り専用 Bearerトークンで接続し、5時間/週間の使用枠(残り%)、各リセット時刻、Banked Resets、最終同期時刻を表示します。追加購入クレジットの金額残高はこのAPIのスキーマに含まれず、取得未対応です。 残り%を金銭クレジット額と混同しないでください。 - 初期状態では未接続でネットワークアクセスも発生しません。「接続する」を押した場合にのみ
optional_host_permissionsのCodex Usage Managerオリジンを要求します。ChatGPTホストの既存権限はそのままです。 - Macのペアリング設定ファイル
~/.codex-usage-manager/pair.jsonの**readTokenのみを拡張機能の入力欄に貼り付けてください。installationTokenや~/.codex/auth.json、ChatGPT Cookieは絶対に貼り付けない**でください。トークンをチャット・Issue・README・スクリーンショットに記載しないでください。 readTokenは拡張機能のchrome.storage.session(Chrome標準の非永続・信頼された拡張機能コンテキスト)だけに保存します。localStorage、chrome.storage.local/sync、ページ本文、URL、コンソールログには保存しません。Chromeを完全終了すると再入力が必要です。接続解除ではトークンとオプション権限を削除します。- 通信はポップアップの拡張機能コンテキストのみで実施し、ChatGPTへのコンテンツスクリプトにはトークンを渡しません。URLは固定、リダイレクト不可、ブラウザCookie非送信、HTTPSのみ。認証失敗時に値を破棄します。
- **同期鮮度:**サーバーが最後に受信した
receivedAtから15分以内は「Fresh」、15~30分は「Delayed」、30分超は「Stale」。Staleの場合、古い値を現在の残高としては表示しません。Mac Collectorの標準同期間隔は10分ですが環境次第で遅れることがあります。 - 取得失敗時は個別に表示します:401(読み取り認証エラー)、404(同期データなし)、503(サーバー一時利用不可)、通信失敗・タイムアウト、レスポンス不正。値が
nullの場合はゼロではなく「未取得」と表示します。 - サーバー側
codex-usage-managerの変更はありません。認証済み/api/usageAPIと現行スキーマで機能するため、変更PRは不要です。実際の個人本番トークンとmacOS通知のE2Eは未検証です。
ChatGPT-Tab-Pulse-v0.5.0.zipをダウンロードし、解凍してください。- Chromeの
chrome://extensions/を開き、右上の「デベロッパーモード」をONにします。 - 「パッケージ化されていない拡張機能を読み込む」を押し、
manifest.jsonが直下にある解凍フォルダを選択します。 - 開いているすべてのChatGPTタブを再読み込みします。ツールバーにピン留めするとバッジを確認しやすくなります。
v0.3から更新する場合: 同じディレクトリを上書きして chrome://extensions/ の「更新」を押すと、同じ拡張機能IDならローカル設定が引き継がれます。別フォルダに入れる場合は古い方を削除してから新しい方を有効にしてください(ファビコンの競合を防ぎます)。
通知の使い方: 拡張機能のポップアップ下部から必要な通知をONにします。許可要求に同意しない限り通知しません。Workが自動判別できない場合は対象タブで「Workとして扱う」を選びます(実行判定を確約するものではありません)。
storage:設定・実行状態・重複通知防止データをローカル/セッションで保存。会話本文は保存しません。alarms:任意の長時間アラートが有効な場合に、Chromeのバックグラウンドで1分ごとに実行中時間を確認。optional_permissions: ["notifications"]:初期状態では通知権限不要。設定をONにした際にだけユーザーに要求。host_permissions:ChatGPTの2ホストのみ。optional_host_permissions:Codex Usage Manager本番オリジンのみ。ユーザーが「接続する」を押すまで付与されません。- バックグラウンドに共有するのは
state(進行状態)、mode、startedAt、確証フラグとモード指定だけ。タブタイトルは一覧を開いたとき表示しますが、通知の文面には含めません。 - ChatGPT会話内容の外部送信・収益化SDK・広告・テレメトリー・パスワード読み取り・ネットワーク通信傍受なし。Codex連携がONのときに限り、読み取りトークン付きリクエストを専用HTTPS APIへ送信します。
node --test tests/*.test.js
for f in background.js popup.js src/*.js; do node --check "$f"; done
python3 tests/browser_smoke.py
python3 tests/popup_smoke.py
python3 tests/codex-popup-smoke.pyGitHub ActionsのCIはNode.js単体テスト・構文チェック・Playwright/Chromiumの3種類のブラウザテストを実施します。ローカルのテストもNode.js標準テストランナーとPlaywright/Chromiumの擬似ChatGPT画面を使用します(python3 -m pip install playwright 等が必要)。ログイン済みの実ChatGPT Work / macOSシステム通知 / 個人本番Codexトークンを使ったE2Eは未確認です。実際のChromeで、2タブ同時実行・完了・Work確認待ち・通知クリックを追加確認してください。
├── manifest.json Chrome MV3 / 必要最小限のアクセス権限
├── background.js 全タブ集計、通知、重複排除、長時間監視
├── popup.html / popup.css / popup.js 一覧、経過時間、通知設定
├── src/
│ ├── content.js DOM監視、安定判定、ファビコン変更
│ ├── detector.js Chat / Work状態の純粋関数
│ ├── overview.js 状態別集計・バッジ・並べ替え
│ ├── notifications.js 通知の保守的な判定ポリシー
│ ├── codex-usage.js 読み取りデータの検証・整形
│ └── codex-panel.js 任意のCodex API接続と画面描画
├── icons/ 拡張機能・ファビコン画像
└── tests/ 単体テスト・擬似ブラウザテスト
非公式の個人向け実験用ツールです。OpenAIの公式製品ではありません。ChromeやChatGPTのUI更新によって動作が変わる可能性があります。