アーキテクチャ
Cluewrenはプレイテスト実行中に5つのコンポーネントを連携させます。
- コーディングエージェント: Claude CodeまたはOpenAI Codex。セッションを進行し、プロジェクトのソースコードを読み、C#ハーネスコードを作成します。
- The Brain(
cluewren mcp): エージェントが起動するMCPサーバー。実行を調整し、MCPツールを提供し、ローカルブリッジをホストし、Roslyn(HarnessCompiler)を使用してharness.csをコンパイルし、Jevへの外部呼び出しを処理します。 - エンジンプラグイン: Unity、Godot、またはUnreal Engineに導入されたパッケージまたはアドオン。ループバックWebSocket経由でbrainに接続し、コマンドの実行、入力の注入、フレームバッファの取得を行います。
- ハーネス子プロセス: brainによって生成される、分離された.NET 10プロセス。brainが
harness.csをコンパイルし、子プロセスがそのコンパイル済みアセンブリを読み込んで動作中のゲームに対して実行します。 - 意思決定モデル(Jev):
api.typesafe.aiで提供されるTypeSafeの高速な意思決定モデル(jev-1.13.0)。
+-------------------+| Coding Agent || (Claude / Codex) |+---------+---------+ | stdio (MCP)+---------v---------+ HTTPS +-----------------------+| The Brain | ----------------------> | TypeSafe Jev API || (cluewren mcp) | <---------------------- | (POST /v1/systemone) |+----+---------+----+ +-----------------------+ | | | pipes | WebSocket (127.0.0.1) | |+----v----+ +-v-------------------+| Harness | | Engine Plugin || Child | | (Unity/Godot/Unreal)|+---------+ +---------------------+検出とブリッジのセキュリティ
Section titled “検出とブリッジのセキュリティ”エンジンプラグインとbrain間の通信は、ローカルのループバックWebSocket上で行われます。
- エフェメラルポート: brainは
127.0.0.1のランダムなポートでリッスンするWebSocketサーバーを起動します。 - 検出ファイル: brainは
%LOCALAPPDATA%\Cluewren\brain.jsonを所有者のみのアクセス権で書き出します。ファイルにはurl、secret、pid、startedが含まれます。 - ループバック限定: プラグインは
127.0.0.1または[::1]のws://エンドポイントにのみ接続します。 - HMACハンドシェイク: brainとプラグインの双方が、HMAC-SHA256ノンス(
brain-proofおよびplugin-proof)を使用して開始ごとのシークレットの知識を相互検証します。共有シークレット自体がソケット上を流れることはありません。 - Originヘッダーの検証: ブラウザからのクロスオリジンリクエストを防止するため、ブリッジサーバーは
Originヘッダーを含む受信接続を拒否します。
子プロセスの分離
Section titled “子プロセスの分離”ハーネス子プロセスは分離された環境で動作します。
- brainはRoslyn(
HarnessCompiler)を使用してharness.csをコンパイルし、子プロセスを起動します。子プロセスはコンパイルされたハーネスを読み込んで実行します。 - 子プロセスは標準入出力パイプのみを通じてbrainと通信します。
- 子プロセスはネットワーク権限やAPIキーを保持しません。ハーネスがJevに問い合わせる際は、パイプ経由でbrainにJSONリクエストを送信し、brainが決定回数の上限を検証した上でTypeSafeに転送します。