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

GEODE

Autonomous Agent Harness

観測から、次の行動へ。

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

2026.02.21 — present

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

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

候補の採択とリリースの権限は、別々の判定。

Crucibleはポリシー探索とは別の実験カーネルです。候補コミットを許可されたサーフェスと凍結された契約で検証し、別の測定用checkoutでペアのタスクを集計して、KEEP、REJECT、INVALIDのいずれかとします。

Crucible構成図 · 固定コミット9e2c041と公開成果物23e3428から作図
GEODE Crucible構成図候補の採択、sealedの適格性、製品リリースを別々の権限として保つ実験カーネルです。supervisorはプロデューサーから候補コミットを1つ受け取り、許可されたサーフェスとfrozen evaluatorに照らして検査し、隔離された測定用checkoutでtau2タスクを実行します。promotion.pyは事前登録されたtaskとfamilyの単位でペアの結果を集計してKEEP、REJECT、INVALIDを決め、KEEPは探索のheadを動かすだけです。sealed評価はtrain bundleを1回限りのdisjointなtest packで判定し、ELIGIBLEでもeligible refに届くだけで、リリースの権限はありません。actor · userモデルr14 · r35: gpt-5.4/hightau2環境タスク · シミュレートされたユーザーGEODEの製品リリース接続なし · 別の権限search/producersプロデューサーのコマンド · 設定済みreplay producersearch/supervisor.pypropose → preflightevaluate → decide → recordcontract.py許可されたサーフェス · candidate difffrozen evaluator · 事前登録attempt/feedback.json失敗コード · trainタスクIDmeasurement checkoutプロデューサーから隔離assays/tau2の実行 · receiptタスクの検証器promotion.pyペア · task · familyの集計KEEP · REJECT · INVALIDattestation/bundle.pytrain bundle · 再計算したKEEPattestation/sealed.pydisjoint test pack · 1回のみ使用ELIGIBLE · release_authority nonerefs/cruciblesearch/* headeligible/*geode-eval-artifactsr14 · train KEEP → sealed REJECTr35 · INVALID · 0ペア · nullevolve/crucible外部の実験カーネル · SILとは別search · trainの判定attestation · sealed1 候補を要求 · propose → preflight → search/producers12 候補コミット1つ · search/producers → propose → preflight23 許可されたサーフェス · diffの検査 · propose → preflight → 許可されたサーフェス · candidate diff34隔離されたcheckout5固定した契約で実行6actor · userの対話7モデル呼び出し8paired evidence9事前登録された集計10KEEP · headの移動1paired evidence2事前登録された集計3REJECT · INVALID4失敗コード · タスクID1record · ref receipt2 train bundleのみ · 1回 · train bundle · 再計算したKEEP → disjoint test pack · 1回のみ使用23 eligible refまで · ELIGIBLE · release_authority none → eligible/*31公開版verdict.json2sealed decision.json

trainの判定

許可されたサーフェス内の候補1つを、隔離されたcheckoutで固定した契約のもとに測定し、事前登録されたルールでKEEP、REJECT、INVALIDを決めます。

  1. propose → preflightsearch/supervisor.py実行 · 判定: 候補を要求search/producers

    探索のsupervisorがプロデューサーに候補を要求します。r14の候補は、replay producerが以前の候補(r13)を再適用したもので、LLMが新たに生成したものではありません。

  2. search/producersデータ: 候補コミット1つpropose → preflightsearch/supervisor.py

    プロデューサーは、許可されたパスの範囲内で候補コミットを1つ返します。

  3. propose → preflightsearch/supervisor.py実行 · 判定: 許可されたサーフェス · diffの検査許可されたサーフェス · candidate diffcontract.py

    candidate diffが契約で許可されたサーフェスの範囲内にあるかを確認し、frozen evaluatorを検証します。r14とr35で許可された対象はtau2_agent_policy.mdの1ファイルで、coreとCrucibleの実装はevaluatorのパスとして固定されていました。

  4. evaluate → decide → recordsearch/supervisor.py実行 · 判定: 隔離されたcheckoutプロデューサーから隔離measurement checkout

    プロデューサーから隔離された測定用checkoutで候補を検査します。

  5. プロデューサーから隔離measurement checkout実行 · 判定: 固定した契約で実行tau2の実行 · receiptassays/

    ベースラインと候補を、同じ契約・シード・タスクで実行します。

  6. tau2の実行 · receiptassays/データ: actor · userの対話tau2環境

    GEODEエージェント(actor)が、tau2のタスク環境で、evaluatorが所有するシミュレートされたユーザーと対話します。

  7. tau2の実行 · receiptassays/データ: モデル呼び出しactor · userモデル

    r14とr35では、actorとシミュレートされたユーザーのどちらもgpt-5.4/high(サブスクリプション)でした。

  8. タスクの検証器assays/データ: paired evidenceペア · task · familyの集計promotion.py

    タスクの検証器の結果を、ベースラインと候補のペアとして保持します。

  9. frozen evaluator · 事前登録contract.py実行 · 判定: 事前登録された集計ペア · task · familyの集計promotion.py

    ペアの結果をtaskと事前登録されたfamilyの単位で集計し、予算・カバレッジ・インフラ・安全の条件は別に確認します。

  10. KEEP · REJECT · INVALIDpromotion.py実行 · 判定: KEEP · headの移動search/* headrefs/crucible

    KEEPの場合、refs/crucible/search/*の次のheadが候補になります。trainの判定のpromotion_authorityはnoneです。

却下 · 無効 · フィードバック

REJECTとINVALIDはheadを維持し、次の候補には失敗コードと固定されたtrainタスクIDだけを返します。INVALIDは0点ではありません。

  1. タスクの検証器assays/データ: paired evidenceペア · task · familyの集計promotion.py

    タスクの検証器の結果を、ベースラインと候補のペアとして保持します。

  2. frozen evaluator · 事前登録contract.py実行 · 判定: 事前登録された集計ペア · task · familyの集計promotion.py

    ペアの結果をtaskと事前登録されたfamilyの単位で集計し、予算・カバレッジ・インフラ・安全の条件は別に確認します。

  3. KEEP · REJECT · INVALIDpromotion.pyデータ: REJECT · INVALID失敗コード · trainタスクIDattempt/feedback.json

    却下または無効の場合は以前のheadがそのまま残り、候補とその記録は保持されます。INVALIDの平均は0ではなくnullです。

  4. 失敗コード · trainタスクIDattempt/feedback.jsonデータ: 失敗コード · タスクIDsearch/producers

    次の候補へのフィードバックは、失敗コードと固定されたtrainタスクIDに限られます。evaluatorの実行記録や正解は渡しません。

sealedの適格性 · 権限の分離

trainのKEEPは探索のheadを動かすだけです。sealedの適格性もeligible refまでで、製品のリリースとデプロイはCrucibleの外にある別の権限です。

  1. evaluate → decide → recordsearch/supervisor.pyデータ: record · ref receipttrain bundle · 再計算したKEEPattestation/bundle.py

    train bundleは、契約、ベースラインと候補の根拠、再計算したKEEP、提案の系譜、supervisorの記録、適用されたrefのreceiptがすべてつながったときにだけ成立します。改善の別名ではありません。

  2. train bundle · 再計算したKEEPattestation/bundle.py実行 · 判定: train bundleのみ · 1回disjoint test pack · 1回のみ使用attestation/sealed.py

    sealed評価はtrainと重ならないtest packを1回だけ使い、インフラの再試行は0回です。

  3. ELIGIBLE · release_authority noneattestation/sealed.py実行 · 判定: eligible refまでeligible/*refs/crucible

    ELIGIBLEでもrefs/crucible/eligible/*に書き込むだけで、release_authorityはnoneに固定されています。

公開記録 · r14 · r35

r14はtrainでKEEPの後、sealedでREJECTでした。r35(2026年7月13日)はカバレッジ不足とインフラの汚染によりINVALID(ペア0行、平均null)で、headは変わりませんでした。

  1. KEEP · REJECT · INVALIDpromotion.pyデータ: 公開版verdict.jsongeode-eval-artifacts

    公開成果物は、23e3428に固定された正規化済みの記録です。r14の事前登録されたtrain configのハッシュは公開されたconfigのバイト列と異なるため、元のチェーン全体を再認証したわけではありません。

  2. attestation/sealed.pyデータ: sealed decision.jsonr14 · train KEEP → sealed REJECTgeode-eval-artifacts

    r14:telecom trainの6タスク × 1試行(ペア6行、昇格権限なし)でKEEP、その後の別のsealed判定でREJECT(リリース権限なし)でした。

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

  • 実線 · リクエスト・候補・結果が流れる方向
  • 破線 · 実行・判定・認可・設定
  • 太い黒線 · 選んだフロー。番号は順序
  • ボックス · コードまたは記録の境界、見出しにパス
  • 内側のチップ · その境界内の構成要素
  • 破線ボックス · その境界の外
  • 探索のsupervisor
  • 契約 · 判定 · 証明
  • ref · 記録
  • プロデューサー · 実行

CrucibleはSILとは別のカーネルで、2つの探索は互いの候補を昇格させる1本のパイプラインではありません。製品リリースのボックスには、入ってくる接続がありません。

3つの権限
trainのKEEPは探索のheadを動かし、sealedのELIGIBLEはeligible refを記録し、製品リリースはCrucibleの外の別の判断です。先の判定が後の権限を与えることはありません。
nullは0ではない
r35は9タスク × 3試行(armあたり27行)を計画しましたが、比較できるペアが0だったため、平均と改善値はnullです。27タスクの失敗や成功率0%ではありません。