Antigravity 詳細環境実装および連携ドキュメント

本ドキュメントでは、DiscordVPS Hub、Antigravity(ローカル実行環境)、Obsidianがどのように連携し、各ツールがどのような役割と権限を持っているかを技術的な視点から詳細に解説します。


1. Discord側(コマンドインターフェース)

Discordはユーザーからの指示を受け付けるフロントフェースとして機能します。専用のBot(AntiCrow 🐦⬛)が稼働しています。

運用されているチャンネルと役割:

  • #ai-command: Antigravityに対する直接のタスク指示を行うメインチャンネル。
  • #ai-chat: AIとの一般的な会話用。
  • #ai-control: システムの起動、停止、再起動などの管理用。
  • #daily-journal: 日記やメモを投稿する場所。このチャンネルの投稿はタスク化されず、別プロセスの journal_listener が拾い上げて生データとして保存します。
  • #ai-log: ローカルの稼働状況(VPSからの受信、IDEへの注入成功・失敗など)をWebhook経由で受け取る監視チャンネル。

技術的連携: Bot (bot.py) は #ai-command などの発言をフックし、VPS Hub の API (POST /push) を叩いて原文のまま指示をデータベースに送信します。


2. VPS Hub(中継・キュー管理)

VPS上に構築されたFastAPIサーバー (main.py) で、DiscordとローカルPC間を疎結合にする役割を持ちます。

主なエンドポイント:

  • POST /push: Discord Botからタスクを受け取りSQLiteデータベースに pending 状態で保存。
  • GET /pull: ローカルの poller.py が定期的に(デフォルト5秒間隔)アクセスし、未処理のタスクを取得。同時に claimed 状態へ移行。
  • POST /status: ローカル側からの作業進捗や完了報告を受け取りDBを更新。

3. Local Runner & Antigravity IDE(実行エンジン)

ここが心臓部です。ローカルPC上で稼働し、VPSからタスクを引き抜いてAntigravity(AI IDE)に強制実行させます。

連携の仕組み(WebSocketインジェクション):

  1. 取得: poller.pyVPS Hub から GET /pull で指示を取得し、JSON形式で C:\ai_work\queue\inbox に保存。
  2. WebSocket中継: 同時に、ローカルで立ち上がっている ws_server.py (ポート8123) に対してWebsocket通信で指示内容を送信します。
  3. IDE側の裏口: Antigravityの生ソースコード(フロントエンドである [[workbench.js]])にはあらかじめ「127.0.0.1:8123 にWebSocket接続し、メッセージが来たらチャット入力欄(textarea)を探し出して自動入力&エンターキー押下をエミュレートする」コードが仕込まれています。

Antigravityの能力(ローカル操作以外について):

  • 現在のAntigravityはVS Codeフォークであるため、強力なローカルファイル操作・ターミナル実行能力(PowerShellエミュレート)を標準で持ちます。
  • ブラウザ操作・Web自動化: Playwrightを利用してクロミウムブラウザを立ち上げ、ユーザーに代わってWeb検索や定形作業を行えます。
  • API/MCP(Model Context Protocol)連携: MCPを活用した外部ツールへの接続について、システム全体はHTTPおよびstdioを通じた外部サーバーとの連携能力を有していますが、現在は「DiscordVPSWebSocket → IDEの生UI入力」という堅牢なUIインジェクションによる「テキスト指示の強行突破」が主軸となっています。今後MCPサーバーを立ち上げてローカルツール(例えばDBクエリ機能やブラウザ自動化アドオン等)をAntigravityへ直接アタッチすることも可能な設計です。

4. Obsidian(データの終着点)

すべての作業結果、ログ、抽出されたナレッジはObsidianVaultC:\ai_work\obsidian-Local\obsidian valut)に集約されます。

vault_importer.py による自動振り分けの仕組み: ローカルの監視フォルダ(例: Google DriveのDropBoxフォルダ)や、作業結果の出力フォルダにあるファイル(.md, .txtなど)の中身・パスをPythonスクリプトが定期監視(10秒おき)し、Vault内の適切なフォルダへリネーム・移動(shutil.move)します。

フォルダ構成と保存ルール:

  • 01_Core\Extracts: ジャーナル(Core)から抽出された重要情報
  • 02_Practical\Proposals: 具体的な提案やマニュアル・プレイブック
  • 04_Knowledge\Notes / Ideas / Extracts: アイデア出しや知識の保存
  • 05_diary\Raw: #daily-journal から吸い上げられた未加工の日記データ
  • 07_Media: 画像(PNG, JPG)や動画、PDFなどを拡張子で判別し、各種サブフォルダ(Images, Videos等)に配置(同時にメタデータ付きのMDサイドカーファイルも自動生成)
  • 08_AI_Output\Raw: AIが生成した中間プロンプトなど

AIエージェントへの参照の仕組み: Antigravity自体は稼働時、自身のワークスペース(現在は C:\ai_work 以下全体)をコンテキストとして把握できるため、Obsidian Vaultも同じツリー内にある限りは、必要に応じてファイルシステムからMarkdownを自由に読み込み、過去のログやルール(Knowledge Item等)を参照しながら新しいタスクを実行できる「自己参照型」システムとして機能しています。