Discord統合OS 構築ワークログ
- 日付: 2026-02-26
- 担当: Antigravity (AI Agent)
- セッション時間: 約3時間
Phase 1: Bot基盤 & チャンネル構築
実施内容
bot.py 修正: on_ready に bot.tree.sync() を追加し、スラッシュコマンドの自動同期を実現
cogs/setup_os.py 新規作成: !setup_os コマンドで4カテゴリ・12チャンネルを自動構築
- 【実行・指示】: mission-control, ai-command
- 【管理・進捗】: status-board, approval
- 【情報・提案】: idea-pool, daily-digest
- 【保守・ログ】: activity-log, error-alert
cogs/core_commands.py 新規作成: /model, /new-pj, /status, /done コマンド
cogs/listener.py 修正: Typing Indicator、Auto Threading提案、Model Preface表示
cogs/approval.py 新規作成: 承認UIコンポーネント(承認/却下/詳細確認ボタン)
utils/state_manager.py 新規作成: スレッドごとのモデル・ディレクトリ状態管理(JSON永続化)
結果
- ✅
!setup_os でDiscordサーバーにチャンネル構造が正常に構築された
- ✅ スラッシュコマンド6個が正常に同期・表示された
Phase 2: Smart Suggestions System
実施内容
/suggest-focus コマンド実装: ユーザーが提案のテーマ(フォーカス)をテキストで設定可能に
SuggestionsDashboard UI View実装:
#💡提案・アイデア-idea-pool チャンネルに常駐するコントロールパネル
- 現在のフォーカス表示、手動の「今すぐ提案を生成する」ボタン
SuggestionActionView 実装: 提案に対するアクションボタン
- 🔵 この案を採用(実行開始)→ 自動スレッド作成
- 🔄 別のアプローチを再考 → LLM再クエリ
- 🔴 今は不要 → 提案メッセージ削除
tasks.loop バックグラウンドタスク: 24時間ごとに自動提案を投稿するスケジューラー
/spawn-dashboard コマンド: ダッシュボードをチャンネルに設置
トラブルシューティング
- 問題:
/spawn-dashboard がDiscord上で表示されない
- 原因:
@app_commands.default_permissions(administrator=True) によりサーバー設定で非表示に
- 解決: 権限デコレータを一時的に除去
- 問題: チャンネル名のミスマッチ(
suggestions vs idea-pool)
- 解決:
SUGGESTION_CHANNEL_NAME を idea-pool に修正
- 問題: Botプロセスがバックグラウンドで予期せず終了(Exit code: -1073741510)
- 原因: Windowsターミナルのサスペンド
- 解決:
Start-Process -WindowStyle Hidden でデタッチ起動に変更
結果
- ✅ ダッシュボードが正常に表示・動作
- ✅ 「今すぐ提案を生成する」ボタンが動作
- ✅ バックグラウンドループ(24時間周期)が正常起動
Phase 3: Holistic Obsidian Context Integration
課題認識
- ユーザーから「テーマと提案の出力が全く違う」というフィードバック
- 当初はハードコードされたモック提案文を返していた
- Gemini API連携後も「Obsidian Vaultの内容を反映していない一般論」だった
実施内容
- Gemini API直接連携:
aiohttp を使いGemini 2.5 Flash APIに直接HTTPリクエスト
get_recent_context() 実装: 06_Projects/01_Active から直近のmdファイルを読み込み
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件
- Gemini
system_instruction 活用: コンテキストをシステムインストラクションとして注入し、ユーザープロンプトとは分離
アーキテクチャ
[Obsidian Vault] ─── get_full_vault_context() ───┐
▼
[ユーザーのフォーカス設定] ──────────────────── [Gemini 2.5 Flash API]
│
▼
[Discord Embed 提案]
│
┌─────────┼─────────┐
▼ ▼ ▼
[採用] [再考] [不要]
│ │
スレッド作成 LLM再クエリ
結果
- ✅ Vault全体の前提情報がLLMに注入される仕組みが完成
- ✅ Bot再起動済み、テスト待ち
技術的な学び・ノウハウ
- Discord.py の
default_permissions: サーバーの権限設定次第でコマンドが非表示になる場合がある
- Windows PowerShell でのバックグラウンド実行:
Start-Process -WindowStyle Hidden が安定
- Gemini API の
system_instruction: コンテキストウィンドウが広大(1M tokens)なので、大量のドキュメントを前提条件として注入可能
- cp932 エンコーディング問題: Windowsターミナルで絵文字を含むログ出力時に
UnicodeEncodeError が発生するが、機能自体には影響なし
次のステップ候補
Phase 4: 連携機能強化 (5機能一括実装)
実施内容
Feature 1: 「採用」ボタン → IDE自動タスク発火
SuggestionActionView.accept_suggestion に IDEClient.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上での動作テスト待ち