GEODEの公式ピクセルキャラクター、Geodi
展示室へ戻る

GEODE

Autonomous Agent Harness

観測から、次の行動へ。

調査、ファイル作業、予約タスクを任せられる、ローカルの自律エージェント・ハーネスです。

2026.02.21 — present

設計・判断・検証: Author · 実装: Claude · レビュー: Codex

  • CLI一般公開 · PyPI
  • MCPサーバー実装済み

Decision Offloading w. Jev

エージェントがタスクの途中で下す中間判断のうち、どれを判断専用モデルJevに任せられるでしょうか。この研究は、任せた後も独立に検証したタスクの品質が保たれるかを、準備、繰り返しの判断、修正、最終的な引き渡しまで含めて確かめます。初期のパイロットの結果は判断の呼び出しを差し替えるだけでは説明できなかったため、入力契約、判断契約、確率ポリシー、実行エージェントによる消費を、それぞれ別の実験に切り分けました。

Jev構成図 · ランタイムは固定コミット9e2c041、研究は2026年9月の記録から作図
Jevの判断経路:ランタイムへの統合と研究上部は、現在のGEODEランタイムにあるオプトインの判断経路です。judgment_engineをjevに設定した場合に限り、最終検証とリフレクションがTypeSafe SystemOne上のJevを1回呼び出し、応答は型・範囲・確率合計の受け入れ検査を通過した後にだけ使われます。最終検証を通過するのはsupportedだけで、その結果は「完了判定」章のPostVerifyとStopのポリシーへ渡ります。下部はランタイムの外にあるJev v3の研究です。固定状態パネル(U3)でAstraとJevの判断を比較し、Harbor 0.22のE/I実行では判断の経路だけを変えて、独立したルールoracleで結果と引き渡しを別々に確認しました。公開パケットはソースと公開版のハッシュを分けて保持し、モデル不要の再計算を提供します。TypeSafe SystemOnejev-1.13.0 · 判断専用Astraの判定 · actorモデルgpt-6-astra/xhigh · サブスクリプションJev研究レポート公開技術レポートcore/config/judgment.pyjudgment_engine · llm | jevauto → typesafe · openrouterloop/_lifecycle.pyPostVerify · Stopポリシーcore/agent/verify.py最終判定 · Choiceの1問supportedのみ通過 · テキストのみadapters/typesafe.pySystemOne · 1回の呼び出し · フォールバックなし受け入れ検査 · 合計の許容誤差1e-5loop/_reflection.pyリフレクション · 根拠の分類memory · observabilityタイムライン · ledgerの判定行U3 · 固定状態パネル120ペア · 27ソース · actorなしAstra · Jev · 同じ質問E/I · Harbor 0.22Astra actor · ツール · 修正判定経路 · Astra · Jev · Jev-firstrule oracle正答 · 引き渡しは別に集計jev-v3-20260927E2E-DATA · ソース · 公開版のハッシュREPRODUCE · model-freeGEODEランタイム · 9e2c041オプトインの判断 · 既定はllmJev v3研究 · 2026年9月ランタイムの外 · 別のハーネス1経路を選択2 リクエスト · 候補 · 観測 · 最終判定 · Choiceの1問 → SystemOne · 1回の呼び出し · フォールバックなし23 SystemOneを1回呼び出し · SystemOne · 1回の呼び出し · フォールバックなし → TypeSafe SystemOne34 受け入れられたChoice · 受け入れ検査 · 合計の許容誤差1e-5 → supportedのみ通過 · テキストのみ45passed · reflection6判定行1同じ選択2根拠を分類3 SystemOneを1回呼び出し · SystemOne · 1回の呼び出し · フォールバックなし → TypeSafe SystemOne34 分類 · 受け入れ検査 · 合計の許容誤差1e-5 → リフレクション · 根拠の分類41Jevの判定2Astraの判定3パネルの結果 · レポート1生成 · ツール · 修正2完了判定の経路3 独立した確認 · E/I · Harbor 0.22 → 正答 · 引き渡しは別に集計34失敗 · 修正の系譜5モデル不要の再計算

ランタイム · 最終判定

Jevを選択した場合、最終検証はChoiceの1問でJevを1回呼び出し、受け入れられたsupportedの判定だけが通過します。

  1. judgment_engine · llm | jevcore/config/judgment.py実行 · 判定: 経路を選択最終判定 · Choiceの1問core/agent/verify.py

    Jevの経路は、judgment_engineをjevに設定した場合にだけ使われます(既定はllm)。provider autoはTypeSafe、次にOpenRouterの順で、キーのある方を選びます。キーがなければLLM judgeの経路のままです。失敗したリクエストを別の場所で再試行するフォールバックではありません。

  2. 最終判定 · Choiceの1問core/agent/verify.pyデータ: リクエスト · 候補 · 観測SystemOne · 1回の呼び出し · フォールバックなしadapters/typesafe.py

    元のリクエストと候補を秘匿化して長さを制限し、ツールの観測とともにChoiceの質問1つ(supported、contradicted、insufficient_evidence)として送ります。判断の呼び出しにはツールを与えません(allow_tools=False)。画像が必要な判断はJevに送られず、verification_errorになります。

  3. SystemOne · 1回の呼び出し · フォールバックなしadapters/typesafe.pyデータ: SystemOneを1回呼び出しTypeSafe SystemOne

    TypeSafeへの直接またはOpenRouter経由で1回呼び出し、別のプロバイダーへ移ることはありません。Jevがルートのテキスト生成モデルとして使われることはありません。

  4. 受け入れ検査 · 合計の許容誤差1e-5adapters/typesafe.pyデータ: 受け入れられたChoicesupportedのみ通過 · テキストのみcore/agent/verify.py

    応答は、型・範囲・確率合計(許容誤差1e-5)の受け入れ検査を通過した後にだけ使われます。通過するのはsupportedだけで、contradictedとinsufficient_evidenceは、固定された次の確認とともに再試行のシグナルになります。end_turnでない応答や受け入れ検査に失敗した応答はverification_errorとなり、再試行のシグナルにはなりません(should_retry=False)。スコアは較正された確率ではなく、二値への射影です。

  5. supportedのみ通過 · テキストのみcore/agent/verify.pyデータ: passed · reflectionPostVerify · Stopポリシーloop/_lifecycle.py

    判定は「完了判定」章のPostVerifyとStopのポリシーへ渡ります。判定はそのポリシーへの入力であって権限ではありません。レビュー待ちになると、候補はpending_textとしてのみ残り、最終応答は空になるため、何も引き渡されません。

  6. PostVerify · Stopポリシーloop/_lifecycle.py記録 · 観測: 判定行タイムライン · ledgerの判定行memory · observability

    判定の決定はタイムラインとevidence ledgerに記録されます。研究の成果物とは別の、ランタイムの記録です。

ランタイム · リフレクション

同じ選択がリフレクションの根拠の分類を動かし、次の確認の文はコードが決めます。

  1. judgment_engine · llm | jevcore/config/judgment.py実行 · 判定: 同じ選択リフレクション · 根拠の分類loop/_reflection.py

    同じ選択がリフレクションにも適用されます。

  2. リフレクション · 根拠の分類loop/_reflection.pyデータ: 根拠を分類SystemOne · 1回の呼び出し · フォールバックなしadapters/typesafe.py

    リフレクションはJevで範囲を限った根拠を分類し、コードが定めた次の確認を追加します。信念の仮説や自信度は変更しません。

  3. SystemOne · 1回の呼び出し · フォールバックなしadapters/typesafe.pyデータ: SystemOneを1回呼び出しTypeSafe SystemOne

    TypeSafeへの直接またはOpenRouter経由で1回呼び出し、別のプロバイダーへ移ることはありません。Jevがルートのテキスト生成モデルとして使われることはありません。

  4. 受け入れ検査 · 合計の許容誤差1e-5adapters/typesafe.pyデータ: 分類リフレクション · 根拠の分類loop/_reflection.py

    受け入れ検査を通過した分類だけが、リフレクションの状態を更新します。失敗した場合、次のラウンドは同じ以前の状態から再試行します。

研究 · 固定パネルU3

actorなしで、同じ状態と質問に対するJevとAstraの判断をペアで比較しました。

  1. Astra · Jev · 同じ質問U3 · 固定状態パネルデータ: Jevの判定TypeSafe SystemOne

    U3(元の実験コミット2f2b494):固定状態120 · ソースクラスター27 · 呼び出し240回。各状態と質問をJevとAstraに1ペアとして送り、actor、ツール、Harborは使っていません。

  2. Astra · Jev · 同じ質問U3 · 固定状態パネルデータ: Astraの判定Astraの判定 · actorモデル

    同じサンプルでの正答はAstra 90/120、Jev 84/120。呼び出しあたりの中央値は10.446秒対0.253秒です。これは判断呼び出しだけのレイテンシで、タスクの所要時間やコスト削減ではありません。

  3. U3 · 固定状態パネルデータ: パネルの結果 · レポートJev研究レポート

    U3の正答率とレイテンシの結果は、公開技術レポートに掲載されています。このパネルがE2Eの公開パケットに含まれるかどうかは、ここでは主張しません。

研究 · E/I実行

Astraをactorとして判定の経路だけを変え、独立したルールoracleで結果と引き渡しを別々に確認しました。

  1. Astra actor · ツール · 修正E/I · Harbor 0.22データ: 生成 · ツール · 修正Astraの判定 · actorモデル

    Harbor 0.22上のE/Iでは、actorのAstraが生成・ツール呼び出し・修正を担い、変わるのは判定の経路だけです。

  2. 判定経路 · Astra · Jev · Jev-firstE/I · Harbor 0.22データ: 完了判定の経路TypeSafe SystemOne

    E7(元の実験コミット1f65534):作成した合成タスク12 × 構成3 × 2回 = 72回、各構成で24/24。Jev-first構成で実際にフォールバックしたのは0/24回で、その効果は測定されていません。

  3. E/I · Harbor 0.22記録 · 観測: 独立した確認正答 · 引き渡しは別に集計rule oracle

    独立したルールoracleが最終結果を確認し、実際の最終的な引き渡しは別に数えます。中断されたU8nの事後11ペアでは、すべての候補がoracleを通過しましたが、引き渡しはAstra 11/11、Jev Noul 0/11でした。

  4. E/I · Harbor 0.22データ: 失敗 · 修正の系譜E2E-DATA · ソース · 公開版のハッシュjev-v3-20260927

    E2Eの公開パケットは準備・失敗・修正の系譜を保持し、ソースと公開版のハッシュを分けています。秘匿化された公開版が、変更されていないソースの検証の代わりになることはありません。

  5. REPRODUCE · model-freejev-v3-20260927データ: モデル不要の再計算Jev研究レポート

    保存された応答から数値を再計算することと、新たに実行することは別の操作です。レポートは公開技術レポートであり、査読済みの論文ではありません。

すべての接続を同じ太さで表示します。フローを選ぶと、その経路だけを番号付きで強調します。

  • 実線 · リクエスト・候補・結果が流れる方向
  • 破線 · 実行・判定・認可・設定
  • 長い一点鎖線 · 記録と観測、判定とは別
  • 太い黒線 · 選んだフロー。番号は順序
  • ボックス · コードまたは記録の境界、見出しにパス
  • 内側のチップ · その境界内の構成要素
  • 破線ボックス · その境界の外
  • ループ · 実行ハーネス
  • 経路の選択 · 判定 · oracle
  • 記録 · 公開パケット
  • 通信 · 判断パネル

上部と下部は別のシステムです。研究の構成と結果がすべて現在のランタイム経路で有効になっているわけではなく、両者の唯一の共通点は同じJevモデル(jev-1.13.0)を呼び出すことです。

ランタイムの受け入れ検査
ランタイムは確率合計の許容誤差を1e-5と厳しく保ちます。評価側の呼び出し元は、ランタイムのパーサーを緩めるのではなく、記録された独自の許容誤差を渡します。
研究の範囲
U3は判断呼び出しだけを測定し、E/Iはactorと修正を含みます。両者の分母を混ぜることはなく、U8nの11ペアは中断された研究の事後分析です。

3つの判断契約

Choice

返り値
カテゴリまたは選択肢ごとの確率
判断対象
完了、リクエストの意図と対象

Noul

返り値
条件ごとのP(true)
判断対象
矛盾、根拠の不足

Score

返り値
固定された順序尺度上の期待値と分布
判断対象
生成された候補の順位

期待値は尺度上の候補の位置を示すもので、確信度としては使いません。

評価と接続

各契約はそれぞれ固定の入力パネルで評価し、一部は実験ハーネスの実行経路に接続して、実行エージェントが判断をどう消費するかを確かめました。上の構成図では、研究の部分がそれらの実行で、ランタイムの部分は現在のGEODEにあるオプトインの経路です。

設計を変えた観測

  1. I5 → I6 · 入力契約
    1. 共通の引き渡し失敗を追跡すると、判定の入力にタスク契約が欠け、同じリクエスト内のツール観測が過去の文脈として記述されていた
    2. 修正したコードと新しいアカウントで行った別の実行で、I6は6/6を引き渡した
  2. U3 · 同じ120の状態ペア
    1. 呼び出しあたりの中央値Astra 10.446秒 · Jev 0.253秒、同じサンプルでの正答90/120 · 84/120
    2. 判断ごとに速度と正確さを併せて比べ、委任の範囲を決める
  3. U2 · 確率
    1. Jevの確率は大きさの較正で優れていたが、誤った判断を上位に並べる順位付けはAstraの方が確実だった
    2. 較正と誤りの選別を別々に測定し、しきい値はselection分割で固定
  4. U6a · 意図と対象
    1. 設計者が作成した40ファミリーでJev 216/220 · Astra 220/220、事前登録の−5ppマージンを満たした
    2. 固定された意図・対象の分類を、次の適用候補に絞り込んだ
  5. U8n · 引き渡し
    1. 中断された実行の事後11ペア:修正された候補は両方のarmでoracleを通過、引き渡しはAstra 11/11 · Jev Noul 0/11
    2. 根拠不足の判定が正しい引き渡しを妨げ、現在のNoulの構成には単独の引き渡し判定を担う根拠がない