forgejudge について
ForgeJudgeは、自律型コーディングエージェント向けの、アーカイブ済みオープンソース評価ツールです。凍結されたリーダーボードと再実行可能なテストを備え、サンドボックスでのパッチ採点、実行トレース、複数シードのCI回帰ゲートを組み合わせます。定期実行と保守は終了しています。
主な機能
- 01サンドボックスでのパッチ採点
- 02決定論的なハーネス自己テスト
- 03複数シードのCI回帰ゲート
- 04実行ごとのトレース記録
- 05凍結された評価リーダーボード
活用シーン
- 01保存済みパッチの再採点
- 02評価ハーネスの変更テスト
- 03アーカイブ済みモデル比較の再実行
MCP 対応
`forgejudge mcp` CLIコマンドで任意のMCPサーバーを起動し、ForgeJudgeの機能をMCPクライアントに提供できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
3掲載時のツール一覧 · 3 週間前に更新
このツールにパラメーターはありません。
詳細
ForgeJudge
自律型コーディングエージェント向けのオープンなリーダーボード兼 CI ゲートです。すべてのパッチをサンドボックスで実行し、すべての実行をトレースし、すべてのリグレッションでビルドを失敗させます。
📦 アーカイブ済み(2026-09-28)。 ForgeJudge はメンテナンスを終了しており、定期実行もすべて停止しています。リーダーボードは最後の完全な評価(2026-07-02、162 回の実行)の状態で凍結されています。3 つのモデルのうち 2 つは、その後 Groq によって提供を終了されました。アーカイブの補足とフォークで再実行する方法 →
▶ アーカイブ済みリーダーボード(2026-07-02 時点で凍結):forgejudge.ahmedhobeishy.tech · プレイグラウンド · 評価方法 · モデルの切り替え · MCP レジストリ
最終結果 — 最後の完全な評価、2026-07-02(実行 #34。隠しテスト=エージェントには失敗したテストが表示されません。無料枠で $0。ハーネスは同じままモデルを切り替え。18 タスク × 3 シード=モデルごとに 54 回、合計 162 回の実行):
モデル pass@1 pass@3 現在の状態 llama-3.3-70b-versatile98.1% 100% Groq により 2026-08-16 に提供終了 gpt-oss-120b94.4% 94.4% 利用可能 llama-3.1-8b-instant57.4% 72.2% Groq により 2026-08-16 に提供終了 ハーネスを固定した状態では、8B モデルのスコアは 70B/120B モデルを約 40 ポイント下回っています(モデル切り替えによる差)。また、
pass@3 ≥ pass@1は実行ごとのばらつきを反映しています。これが、CI ゲートをマルチシードにしている理由です。各実行のパッチはruns.jsonにあり、再評価しても同じ判定になります。Langfuse のトレースリンクは元のプロジェクトを指しており、現在は解決されない想定です。詳細、後に未公開となった評価、提供終了したモデルについては、docs/ARCHIVE.mdを参照してください。
ForgeJudge はオープンソースの自律型ソフトウェアエンジニアリングエージェントです。稼働中は、すべてのコミットでその品質を公開の場で証明していました。手作りのシングルエージェントソルバー、決定論的な「実行を判定者とする」ハーネス、実行ごとのトレースを備えたリーダーボード(現在は凍結スナップショット)、リグレッションを阻止する CI ゲートを備え、これらすべてを**$0 でセルフホスト可能**なスタック上で、データ汚染に強く、本質的に検証可能なゴールデンセットに対して実行します。
提供するものは、設計されたハーネス、可観測性、ゲートであり、高い解決率ではありません。
$0の無料モデルを使うエージェントのスコアは、意図的に控えめになります。価値はモデル切り替えの比較によって示します。ハーネスを固定したまま、より優れたモデルに切り替えるとスコアが上がります。
仕組み
flowchart TD
G["Golden set · Git-canonical<br/>18 intrinsically-verifiable, mutation-hardened<br/>make-CI-green tasks"]
subgraph SOLVER["Single-agent solver"]
direction LR
L["localize<br/>(BM25)"] --> R["repair<br/>(LLM router · critic · syntax edit-gate)"] --> V["validate<br/>(run tests)"]
end
G --> SOLVER
SOLVER --> PATCH["unified diff"]
SOLVER -. "every step traced" .-> TRACE["OTel → Langfuse<br/>per-run trace"]
PATCH --> H["Deterministic harness, in a sandbox<br/>apply test_patch + candidate patch · run F2P / P2P<br/><b>RESOLVED iff</b> every FAIL_TO_PASS passes AND every PASS_TO_PASS stays green<br/>swebench-equivalent · stricter on skips · cheat-resistant"]
H --> STORE["Run store<br/>Neon + pgvector"]
STORE --> LB["Leaderboard<br/>pass@1 / pass@3 · cost · tokens · trace link"]
H --> GATE["Multi-seed CI gate<br/>a PR that lowers the resolution rate fails the build"]
style G stroke:#3fb950,stroke-width:2px
style H stroke:#4cc2ff,stroke-width:2px
style GATE stroke:#f0883e,stroke-width:2px
- ソルバー — フェーズ構造の単一ループ(
localize → repair → validate)であり、マルチエージェントの群れではありません。最も低コストで、最も決定論的で、最もデバッグしやすい方式です。BM25 によるローカライズ、無料枠を使う LLM ルーター、構文編集ゲート、低コストのクリティックによる事前フィルター、自動送信機能付きのコスト/ステップ予算を備えています。 - ハーネス — SWE-bench の
RESOLVED_FULLルールを実装し、CI で実際の PASS/FAIL/ERROR/XFAIL の結果を使ってswebench.harness.gradingと同等であることを検証済みです。また、スキップされたFAIL_TO_PASSについては、意図的により厳格です。swebench 4.1.0 では、オラクルテストがスキップされてもRESOLVED_FULLと判定されます(スキップは成功でも失敗でもないためです)。そのため、オラクルを実行する代わりにスキップさせるパッチも解決済みと判定されます。ForgeJudge はスキップを未合格として扱い、この不正利用の手段を塞ぎます。また、パッチは不正利用に強い設計です。採点前に正規のテストファイルを復元するため、パッチでオラクルを無効化することはできません。 - ゴールデンセット — カットオフ後に目的に合わせて作成した 15 個のフィクスチャと、作者自身のリポジトリから抽出した 3 個のタスク(実際のコミット SHA、MIT/独自ライセンス — 漏洩/コピーレフトのリスクはゼロ)。それぞれにミューテーション耐性があります。修正対象の箇所に対する誤った修正を検出します(平均スコア 0.94 で 16 個がミューテーション耐性あり、正規表現/文字列コードの 2 個は判定不能、弱いものは 0 個)。
- サンドボックス/CI/スイープ — 公開リポジトリ上の GitHub Actions が、エフェメラルな隔離 VM サンドボックス、回帰ゲート、リーダーボードのスイープを兼ねており、費用は
$0です。スイープはアーカイブまで毎晩実行されていましたが、現在は手動(workflow_dispatch)です。 - 可観測性 — OpenTelemetry の GenAI スパン(
invoke_agent → retrieval / chat / execute_tool、gen_ai.usage.*、合否を示すgen_ai.evaluation.result)を Langfuse Cloud にエクスポートします。各実行のトレースリンクを記録していました(元の Langfuse プロジェクト内のリンクであり、アーカイブ後は解決されない想定です)。
2 つのゲート、それぞれの役割
決定論的なゴールド整合性ゲート(ハーネス自体が引き続き機能しているか)と、確率的な回帰ゲート(変更によってエージェントの性能が実質的に低下したか)は分けてあります。ゴールドの採点は決定論的であり、ノイズの多いシードごとの実行結果と決して平均してはならないためです。
flowchart TD
PR["Pull request / commit"] --> GG["Gold-integrity gate<br/>deterministic · $0 · re-grade all gold patches"]
GG -->|"any gold task unresolved"| F1["fail — the harness broke"]
GG -->|"all gold tasks resolved"| OK1["harness intact"]
CRON["On-demand multi-seed sweep"] --> SEEDS["run the agent × N seeds<br/>→ one resolution rate per seed"]
SEEDS --> RG["Regression gate<br/>small-sample CI (Student-t / Wilson)"]
BASE["baseline_scores.json<br/>per-seed reference"] --> RG
RG -->|"candidate CI upper bound < baseline CI lower bound"| F2["❌ fail — real regression"]
RG -->|"overlapping · equal · improved"| OK2["✓ no regression"]
style GG stroke:#4cc2ff,stroke-width:2px
style RG stroke:#f0883e,stroke-width:2px
クイックスタート
前提条件:uv(Python 3.12 は利用できるように設定済みです) — curl -LsSf https://astral.sh/uv/install.sh | sh。
git clone https://github.com/ahmedEid1/forgejudge && cd forgejudge
uv sync # Python 3.12, deps via uv
# Run the deterministic harness self-test (no API key, no network):
uv run python -m forgejudge.harness.runner_actions --patch-source gold # 18/18 resolved
# Solve a task with a free model and grade it.
# Needs a (free) Groq key. Either export it, or put it in .env and pass --env-file:
# export GROQ_API_KEY=... # or
# cp .env.example .env && edit GROQ_API_KEY # then: uv run --env-file .env python - <<'PY'
uv run python - <<'PY'
from forgejudge.golden.loader import load_tasks
from forgejudge.agent.solver import solve
from forgejudge.harness.grade import grade
task = {t.instance_id: t for t in load_tasks("golden/dataset.jsonl")}["fixture-semver-001"]
res = solve(task, run_id="demo", budget_usd=0.10, seed=0)
print(res.status, "→ resolved:", grade(task, res.patch).resolved)
PY
高速テスト:uv run pytest -m "not slow"。ゴールデンセットの完全な検証とミューテーション耐性の確認:uv run pytest -m slow。データベースなしで 1 つのモデルをスイープ:uv run --env-file .env python -m forgejudge.eval.sweep --model groq/openai/gpt-oss-120b --seeds 0,1,2 --no-store --out runs-0.jsonl。完全な再実行ガイド(シークレット、データベース、デプロイ)は docs/ARCHIVE.md にあります。pytest マーカーの一覧と開発ワークフローについては CONTRIBUTING.md を参照してください。
インストール
エージェント/ハーネス自体を開発する場合は、クローンして uv sync を実行してください(上記参照)。ForgeJudge をパッケージとして利用する場合:
公開されている
forgejudge==0.1.0はアーカイブより前のもので、models.yamlの複数のロールチェーンに、廃止されたllama-3.3-70b-versatileがまだ記載されています。solve()は引き続きプライマリのgpt-oss-120bを通じて動作しますが、現行のチェーンを使うには git からインストールしてください(pip install git+https://github.com/ahmedEid1/forgejudge)。
# Library + the `forgejudge` CLI (selftest / mcp / info):
pip install forgejudge
forgejudge selftest # deterministic harness check — 18/18 resolved, no key
forgejudge mcp # MCP server over stdio (needs the [mcp] extra)
# Zero-install MCP server (no venv to manage) — for an MCP client config:
uvx --from "forgejudge[mcp]" forgejudge mcp
オプションの追加機能(必要な場合にのみインストールされます):
| 追加機能 | 追加されるもの | 用途 |
|---|---|---|
forgejudge[harness] | swebench | swebench との同等性を確認する採点チェック |
forgejudge[mcp] | fastmcp | MCP サーバー(forgejudge mcp) |
forgejudge[playground] | fastapi、uvicorn、httpx | ガード付きのライブプレイグラウンド API(セルフホスト。ホスト版は現在メンテナンスされていません) |
pip install "forgejudge[mcp]" # one extra
pip install "forgejudge[harness,mcp]" # several
forgejudge selftest と forgejudge info は基本インストールで動作します。追加機能、API キー、ネットワークは不要です。
6つの懸念への先回りした回答
- 「ベンチマークに汚染がある/恣意的に選んでいる。」 ゴールデンセットは新たに作成され、カットオフ後のものです。作者自身のリポジトリとフィクスチャのみをソースとしており(第三者から漏洩する余地はありません)、誤ったパッチでは合格できないようミューテーション耐性を強化しています。SWE-bench Verifiedは現在、広く汚染されていると見なされています。OpenAIは報告を停止しました(2026-02)。「合格」したケースの32%超で解答が漏洩しており、約31%は脆弱なテストで合格していました。ここでは、汚染除去は文書化され、テスト済みの特性であり、脚注にとどまりません。
- 「LLM/フレームワークを薄くラップしただけ。」 オーケストレーターは手作りです(LangChainは使用していません)。制御ループ、サンドボックスとスコアリングのハーネス、不正に強い採点器、ミューテーション耐性強化機能、OTel計装、複数シードのCIゲートが、ここでの成果です。
- 「解決率がSOTAと比べて低い。」 プレミアムモデルと予算を使ったSOTAは約88~94%です。
$0の無料モデルの数値を控えめにしているのは、意図的です。成果物は設計・構築されたシステムであり、モデル差し替え比較(ハーネスを固定したまま、より優れたモデルでスコアが上がること)がその証拠です。 - 「本当に自律的なのか、それとも演出なのか。」 すべての実行でOpenTelemetry/Langfuseのトレースを記録し、保存されたすべてのパッチを再採点すると、記録された判定が決定論的に再現されます。リプレイ優先のプレイグラウンドでは、コストや悪用のリスクをさらすことなく、実際の解決例をデモできます。
- 「エージェントプロジェクトが3つ――単一の技しかないのでは。」 1つの評価手法――ゴールデンセット+判定器+トレース+CIゲート――を、自律性が段階的に高まる3つの領域に適用しています(Lumen → Thoth → ForgeJudge)。
- 決定性。 temperature=0でも決定性は保証されません(pass@1は2~6ポイント変動します)。スコアラーは完全に決定論的です。ゲートは複数シードで評価し(候補のCI上限がベースラインのCI下限を下回る場合にのみ失敗とします)、単発実行の不安定さでビルドが失敗しないようにしています。
リポジトリの構成
| パス | 内容 |
|---|---|
forgejudge/golden/ | ゴールデンセットローダー、フィクスチャ契約、データセットビルダー、ミューテーション耐性強化機能 |
forgejudge/harness/ | 決定論的なgrade()、不正に強い実行機能、swebenchとの同等性チェック、サンドボックス実行機能 |
forgejudge/agent/ | localize → repair → validateの解決ループ、批評機能 |
forgejudge/llm/ | フォールバックとコスト計算機能を備えた、役割ベースのLiteLLMルーター |
forgejudge/obs/ | OpenTelemetry GenAIトレース → Langfuse / Phoenix |
forgejudge/eval/ | リーダーボードの一括評価、品質ゲート付き公開、複数シードの回帰ゲート、LLM-as-a-judgeとCohenのκ |
forgejudge/store/ | Neon(Postgres + pgvector)の実行ストアとリーダーボードクエリ |
golden/dataset.jsonl | 正式なゴールデンセット(1行につき1つのTask) |
.github/workflows/ | ci、gate(ゴールドの整合性)、eval(サンドボックス)、regression-gate、release(v*タグのプッシュ時または手動実行時)、および手動実行専用のsweep、pages-deploy、publish-mcp |
docs/ | DESIGN.md(技術的な詳細解説)、ARCHIVE.md(最終結果と再実行ガイド) |
ライセンス
MIT © 2026 Ahmed Hobeishy。MITライセンスのswebench採点ハーネスをインポートしており、その旨を明記しています。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。