Macで動く全 Claude Code セッションを「ドット絵オフィスのAI社員」として見える化し、
画面・スマホ・他のAIから指示を届けられるようにするプロダクトの全体図と現在地
場所: works/AI Office/・検証: bash "AI Office/verify.sh"(全10章 green 維持中)
Mac上の Claude Code 全員が「AI社員」としてドット絵オフィスに出社。いま何をしているか・承認待ちが誰かが一目で分かる
画面の指示ポストに書くと、実際のセッションへ自動配達(Stop hook が起こす)。クリックでRPG風会話・✅承認/🛑停止も1タップ
外出先のiPhone(PWA+HMAC署名)からも指示OK。Mac再起動でも自動で立ち上がる常駐化まで実装済み
🟢=完了 🟡=実装完了・あなたの操作待ち ▫=仕様確定済み(実装はこれから)
| フェーズ | 状態 | できるようになったこと | 品質(敵対的レビュー) |
|---|---|---|---|
| P0 独立化+ハーネス | ✅ 完了 | works直下へ移設・verify.sh検証網・フィクスチャテスト | ハーネス先行で構築 |
| P1 ➕新プロジェクト | ✅ 完了 | 画面の➕からフォルダ選択→専用キャラ自動生成→Terminalでclaude起動 | 24体 → 16所見修正 |
| P2 Cloudflare中継 | ✅ 完了 | Worker+Durable Objectのキュー中継。配達は at-least-once(指示が消えない) | 26体 → 9所見修正 |
| P3 スマホPWA | 🟡 deploy待ち | iPhoneからペアリング→✅承認/🛑停止/自由指示。HMAC署名でMac側が検証=トークン漏洩でも偽造不可 | 設計5体+22体 → 15所見修正 |
| P4 Mac常駐 | 🟡 load待ち | ログイン時自動起動(LaunchAgent)。TCC問題を配置で構造回避・データは単一正本で分岐しない | 設計4体+36体 → 30所見修正 |
| P5 MCP連携 | 📐 仕様確定 | 他のClaude Codeセッションが office_status / office_instruct ツールでオフィスを操作(+OpenClaw用トークン) | 設計4体で仕様書完成・実装待ち |
| P6 磨き | ⬜ 未着手 | QR画像・Web Push通知・スマホ版オフィス絵 など | — |
各フェーズは 設計WF(複数案→敵対→統合仕様)→ 実装 → 敵対的レビューWF(次元別に発見→反証)→ verify全green → コミット の同じ規律で回している。 レビューは「褒める」ためではなく壊しにかかるため(指示が恒久ロストする穴・鍵の漏洩窓・無限クラッシュループ等を実際に修正してきた)。
Cloudflareアカウント認証が必要なため代行不可。ローカル検証(wrangler dev)は全green済み。
cd ~/Downloads/works/"AI Office/relay" npx wrangler login # 初回のみ・ブラウザ認証 TOKEN=$(openssl rand -hex 32) echo "$TOKEN" | npx wrangler secret put RELAY_TOKEN npx wrangler deploy cp office_relay.example.json ~/.claude/office_relay.json && chmod 600 ~/.claude/office_relay.json # ↑中の url を deploy で出たURLに・token を $TOKEN に書き換え → オフィス画面の「📱スマホ連携」でペアリング
ログイン永続の変更なので最終操作はあなたで。インストーラ・plist生成・検証はすべて準備済み。
bash "$HOME/Downloads/works/AI Office/macapp/install.sh" launchctl enable gui/$(id -u)/com.senao.aioffice launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.senao.aioffice.plist launchctl kickstart -k gui/$(id -u)/com.senao.aioffice open http://localhost:4780 # 表示確認 → Mac再起動後も自動で上がればOK # 停止したい時: launchctl bootout gui/$(id -u)/com.senao.aioffice(kill は自動復活するので使わない)