Discord統合OS 構築ワークログ

  • 日付: 2026-02-26
  • 担当: Antigravity (AI Agent)
  • セッション時間: 約3時間

Phase 1: Bot基盤 & チャンネル構築

実施内容

  1. bot.py 修正: on_readybot.tree.sync() を追加し、スラッシュコマンドの自動同期を実現
  2. cogs/setup_os.py 新規作成: !setup_os コマンドで4カテゴリ・12チャンネルを自動構築
    • 【実行・指示】: mission-control, ai-command
    • 【管理・進捗】: status-board, approval
    • 【情報・提案】: idea-pool, daily-digest
    • 【保守・ログ】: activity-log, error-alert
  3. cogs/core_commands.py 新規作成: /model, /new-pj, /status, /done コマンド
  4. cogs/listener.py 修正: Typing Indicator、Auto Threading提案、Model Preface表示
  5. cogs/approval.py 新規作成: 承認UIコンポーネント(承認/却下/詳細確認ボタン)
  6. utils/state_manager.py 新規作成: スレッドごとのモデル・ディレクトリ状態管理(JSON永続化)

結果

  • !setup_os でDiscordサーバーにチャンネル構造が正常に構築された
  • ✅ スラッシュコマンド6個が正常に同期・表示された

Phase 2: Smart Suggestions System

実施内容

  1. /suggest-focus コマンド実装: ユーザーが提案のテーマ(フォーカス)をテキストで設定可能に
  2. SuggestionsDashboard UI View実装:
    • #💡提案・アイデア-idea-pool チャンネルに常駐するコントロールパネル
    • 現在のフォーカス表示、手動の「今すぐ提案を生成する」ボタン
  3. SuggestionActionView 実装: 提案に対するアクションボタン
    • 🔵 この案を採用(実行開始)→ 自動スレッド作成
    • 🔄 別のアプローチを再考 → LLM再クエリ
    • 🔴 今は不要 → 提案メッセージ削除
  4. tasks.loop バックグラウンドタスク: 24時間ごとに自動提案を投稿するスケジューラー
  5. /spawn-dashboard コマンド: ダッシュボードをチャンネルに設置

トラブルシューティング

  • 問題: /spawn-dashboard がDiscord上で表示されない
    • 原因: @app_commands.default_permissions(administrator=True) によりサーバー設定で非表示に
    • 解決: 権限デコレータを一時的に除去
  • 問題: チャンネル名のミスマッチ(suggestions vs idea-pool
    • 解決: SUGGESTION_CHANNEL_NAMEidea-pool に修正
  • 問題: Botプロセスがバックグラウンドで予期せず終了(Exit code: -1073741510)
    • 原因: Windowsターミナルのサスペンド
    • 解決: Start-Process -WindowStyle Hidden でデタッチ起動に変更

結果

  • ✅ ダッシュボードが正常に表示・動作
  • ✅ 「今すぐ提案を生成する」ボタンが動作
  • ✅ バックグラウンドループ(24時間周期)が正常起動

Phase 3: Holistic Obsidian Context Integration

課題認識

  • ユーザーから「テーマと提案の出力が全く違う」というフィードバック
  • 当初はハードコードされたモック提案文を返していた
  • Gemini API連携後も「Obsidian Vaultの内容を反映していない一般論」だった

実施内容

  1. Gemini API直接連携: aiohttp を使いGemini 2.5 Flash APIに直接HTTPリクエスト
  2. get_recent_context() 実装: 06_Projects/01_Active から直近のmdファイルを読み込み
  3. get_full_vault_context() 実装: Vault全体から以下を統合コンテキストとして取得
    • 01_Core/: 価値観・思想・哲学、会社ポリシー、保有リソース、ビジネス構造、自己紹介と夢、財務判断基準、機密情報管理
    • 00_System/: セキュリティ方針、エージェント行動指針、マスタープロンプト
    • 06_Projects/01_Active/: 直近更新のアクティブプロジェクト5件
    • 05_Daily/01_Journal/: 直近のジャーナル3件
    • 04_Knowledge/: ナレッジベース5件
    • 08_Product/: 既存プロダクト情報5件
  4. Gemini system_instruction 活用: コンテキストをシステムインストラクションとして注入し、ユーザープロンプトとは分離

アーキテクチャ

[Obsidian Vault] ─── get_full_vault_context() ───┐
                                                   ▼
[ユーザーのフォーカス設定] ──────────────────── [Gemini 2.5 Flash API]
                                                   │
                                                   ▼
                                          [Discord Embed 提案]
                                                   │
                                         ┌─────────┼─────────┐
                                         ▼         ▼         ▼
                                      [採用]    [再考]    [不要]
                                         │         │
                                    スレッド作成  LLM再クエリ

結果

  • ✅ Vault全体の前提情報がLLMに注入される仕組みが完成
  • ✅ Bot再起動済み、テスト待ち

技術的な学び・ノウハウ

  1. Discord.py の default_permissions: サーバーの権限設定次第でコマンドが非表示になる場合がある
  2. Windows PowerShell でのバックグラウンド実行: Start-Process -WindowStyle Hidden が安定
  3. Gemini API の system_instruction: コンテキストウィンドウが広大(1M tokens)なので、大量のドキュメントを前提条件として注入可能
  4. cp932 エンコーディング問題: Windowsターミナルで絵文字を含むログ出力時に UnicodeEncodeError が発生するが、機能自体には影響なし

次のステップ候補

  • IDEClient経由で「採用」ボタンから実際のAntigravityタスクを発火させる本実装
  • 提案の履歴・アーカイブ機能
  • 提案の評価フィードバックループ(良い提案/悪い提案の学習)
  • 複数フォーカスの同時設定

Phase 4: 連携機能強化 (5機能一括実装)

実施内容

Feature 1: 「採用」ボタン → IDE自動タスク発火

  • SuggestionActionView.accept_suggestionIDEClient.send_instruction() を統合
  • IDE接続チェック → 成功時はCDP経由で自動注入 → 失敗時は手動指示フォールバック
  • 提案タイトル+本文を結合してIDEに送信

Feature 2: 提案の履歴・アーカイブ

  • state_manager.py に提案履歴CRUDメソッド追加(add_suggestion, get_suggestion_history, update_suggestion_status
  • JSONに永続化(最大100件、タイムスタンプ付き)
  • /suggestion-history スラッシュコマンドでEmbed一覧表示
  • 各ボタン操作時にステータス自動更新(pending/accepted/dismissed/rethought)

Feature 3: フィードバックループ

  • RatingView クラス新設: ⭐1~⭐5の5段階評価ボタン
  • state_manager.get_feedback_summary() で高評価/低評価のサマリー生成
  • generate_llm_suggestion() のプロンプトにフィードバック自動注入
  • 「採用」「不要」時に評価UIを表示

Feature 4: 複数フォーカス同時設定

  • state_manager_ensure_focus_list() による後方互換移行ロジック
  • add_focus(), remove_focus(), get_all_focuses(), get_combined_focus_prompt() 追加
  • /suggest-focus をラベル+説明の2パラメータに変更
  • /remove-focus, /list-focuses コマンド新設
  • ダッシュボードで全フォーカス一覧表示

Feature 5: Gemini画像生成Discord連携

  • cogs/image_gen.py 新規Cog作成
  • /generate-image スラッシュコマンド(prompt, model, aspect パラメータ)
  • aiohttp非同期APIコール → base64デコード → discord.File 投稿
  • Flash/Proモデル選択、5種アスペクト比対応

変更ファイル

  • cogs/suggestions.py — Feature 1-4 統合
  • utils/state_manager.py — 履歴CRUD + 複数フォーカス管理
  • cogs/image_gen.py — 新規作成

結果

  • ✅ 全ファイル構文チェック通過(py_compile)
  • ⏳ Discord上での動作テスト待ち