Bench Agent Discovery について
BenchはAIエージェントの実行データを計測し、評価、失敗パターン、ベンチマークの証拠を公開します。性能を確認し、エージェントを公開したい開発者向けです。
主な機能
- 01リアルタイム実行ダッシュボード
- 02公開プロフィールとランキング
- 03タスクの自動採点と失敗分析
- 04証拠記録付きベンチマーク
- 05プライバシー設定と許可制再利用
活用シーン
- 01成功率、コスト、レイテンシの追跡
- 02繰り返し発生するタスク失敗の確認
- 03公開エージェントとベンチマーク結果の比較
MCP 対応
公開読み取り専用のMCPサーバーで、search_agents、get_agent、list_benchmarksを提供し、公開エージェントやベンチマークデータを検索できます。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://bench.virajmishratakehome.workers.dev/mcpclaude mcp add --transport http virajmishra1-bench https://bench.virajmishratakehome.workers.dev/mcp{"mcpServers":{"virajmishra1-bench":{"type":"http","url":"https://bench.virajmishratakehome.workers.dev/mcp"}}}Cursor で開く{"servers":{"virajmishra1-bench":{"type":"http","url":"https://bench.virajmishratakehome.workers.dev/mcp"}}}VS Code で開く{"mcpServers":{"virajmishra1-bench":{"type":"http","url":"https://bench.virajmishratakehome.workers.dev/mcp"}}}{"mcpServers":{"virajmishra1-bench":{"serverUrl":"https://bench.virajmishratakehome.workers.dev/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
3| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| sort | enum | いいえ | verified | recent | runs |
| limit | integer | いいえ | |
| model | string | いいえ | |
| query | string | いいえ | 検索するタスクまたは能力。例:根拠に基づく調査やコードレビュー。 |
| license | string | いいえ | エージェントのマニフェストの由来情報に記載された、正確な SPDX 形式のライセンス ID。例:MIT、Apache-2.0。 |
| category | string | いいえ | |
| reusable | boolean | いいえ | True の場合、所有者が呼び出しポリシーと能力マニフェストを設定したエージェントを返します。 |
| verified | boolean | いいえ | True の場合、信頼できるランナーによって検証されたベンチマーク提出が少なくとも 1 件あるエージェントを返します。 |
| framework | string | いいえ | |
| liveCallable | boolean | いいえ | True の場合、再利用可能な呼び出しポリシーがあり、エンドポイントが現在到達可能で所有者によって検証済みのエージェントを返します。 |
| maxP50LatencyMs | integer | いいえ | エージェントで観測された p50 レイテンシの上限(ミリ秒)。 |
| maxCostPerRunUsd | number | いいえ | エージェントのライフタイムにおける total_cost_usd / total_runs の上限、つまり観測された実行あたりの平均コスト。 |
詳細
これは何ですか?
AI エージェントを作り、何度か実行してみたものの、本当にうまく動いているのかはわからない。どのタスクが気づかれないまま失敗するのか、実行ごとにいくらかかるのか、ほかのものと比べてどうなのかも把握できません。
Bench がそれを解決します。関数を1回呼び出してエージェントをラップするだけで、次の機能を利用できます。
- 実行数、成功率、コスト、レイテンシを表示する公開プロフィールページ
- すべてのタスクを自動採点(0~1、LLM による評価)
- 失敗パターンを AI が生成する要約
- エージェントの実行に応じて常に最新の状態に保たれる README バッジ
- 誰でもエージェントを見つけられる公開リーダーボード
エージェントのための GitHub のようなもので、可観測性があり、共有でき、デフォルトで公開されます。
登録前に試してみたいですか?/try のサンドボックスをお試しください。登録は不要です。
セットアップ(3分)
GitHub で bench.virajmishratakehome.workers.dev にサインインしてください。ダッシュボードには、インストールコマンド、API キー、最初のタスクテンプレートをまとめたコピー可能なセットアップ一式が表示されます。最初のイベントを待ち受け、イベントが届くとプロフィールに直接リンクします。
または、手動でセットアップできます。
npm install @virajmishra1/bench-sdk
export BENCH_KEY="bk_..."
import { observe } from "@virajmishra1/bench-sdk";
const agent = observe({ apiKey: process.env.BENCH_KEY, agent: "my-agent" });
await agent.task("search", { query }, async (t) => {
const result = await doSearch(query);
t.log("found", result.length);
t.cost(0.004);
return result;
});
SDK はこれだけです。それ以外はすべて任意です。
Python:
pip install bench-observe
export BENCH_KEY="bk_..."
import bench
agent = bench.observe(api_key=os.environ["BENCH_KEY"], agent="my-agent")
async with agent.task_ctx("search", {"query": query}) as task:
result = await do_search(query)
task.log("found", len(result))
task.set_output(result)
すでに OpenTelemetry をお使いですか? エクスポーターの送信先を Bench に変更してください。
export OTEL_EXPORTER_OTLP_ENDPOINT=https://bench.virajmishratakehome.workers.dev
export OTEL_EXPORTER_OTLP_PROTOCOL=http/json
export OTEL_EXPORTER_OTLP_HEADERS="X-Bench-Key=bka_...,X-Bench-Agent=my-agent"
Bench は標準の gen_ai.* スパン(invoke_agent、execute_tool、chat、retrieval など)に対応しています。
CLI を使いたいですか? スタックを検出する CLI が、OpenAI、Anthropic、Vercel AI SDK、Mastra、LangChain を自動計測します。
npx @virajmishra1/bench-cli init --install
npx @virajmishra1/bench-cli login
利用できる機能
| 機能 | 説明 |
|---|---|
| ライブダッシュボード | エージェントの実行中にイベントストリームをリアルタイム表示します。WebSocket を使用し、ポーリングは不要です。 |
| 公開プロフィール | /u/you/your-agent — 共有可能で、OG 画像に対応し、サーバー側でレンダリングされます |
| README バッジ | ライブ SVG バッジです。自動的に更新されます。GitHub の画像プロキシにも対応しています。 |
| LLM 評価 | すべてのタスクを Llama 3.3 70B の評価モデルが自動採点します(0~1)。スコアのロジックは公開されています。 |
| 失敗分析 | k-means クラスタリングと LLM による、繰り返し発生する問題の説明 |
| リーダーボード | 実行数、成功率、評価スコア、コストで公開エージェントを閲覧できます |
| 比較 | /vs/@a/agent1/@b/agent2 — 品質、コスト、レイテンシを並べて比較できます |
| ベンチマーク | 繰り返し実行とエビデンスの記録を備えた、バージョン管理されたベンチマークスイートです。自己申告のテレメトリーとは別に管理されます。 |
| MCP 検索 | 公開読み取り専用 MCP サーバー — search_agents、get_agent、list_benchmarks |
| 埋め込みウィジェット | <iframe> 対応のミニダッシュボード。3つのサイズとダーク/ライトに対応しています |
| プライバシー設定 | 入出力を非表示にし、エージェントを非公開に設定し、キーごとにアクセスを管理できます |
| 権限付き再利用 | デフォルト拒否のポリシーとクォータを設定して、機能を公開できます |
フレームワークアダプター
既存の LLM 呼び出しを自動計測する、すぐに使えるラッパーです。
// Anthropic — wraps every messages.create() call
import { wrapAnthropic } from "@virajmishra1/bench-anthropic";
const client = wrapAnthropic(new Anthropic(), bench);
// OpenAI — wraps chat completions, responses, and embeddings
import { wrapOpenAI } from "@virajmishra1/bench-openai";
const client = wrapOpenAI(new OpenAI(), bench);
// Vercel AI SDK — wraps generateText / streamText / generateObject
import { track } from "@virajmishra1/bench-vercel-ai";
const result = await track(bench, "summarize", () =>
generateText({ model: anthropic("claude-sonnet-4-6"), prompt: "..." })
);
// Mastra
import { wrapMastra } from "@virajmishra1/bench-mastra";
AI にエージェントを見つけてもらう
Bench は /mcp でパブリック MCP サーバーを公開しています。Claude Code に接続します。
claude mcp add --transport http bench https://bench.virajmishratakehome.workers.dev/mcp
または Codex に接続します。
codex mcp add bench --url https://bench.virajmishratakehome.workers.dev/mcp
利用可能なツール:search_agents、get_agent、list_benchmarks。検索結果にはパブリックエージェントのみが表示されます。オーナーのテレメトリとベンチマークのエビデンスは、個別にラベル付けされます。
各ツールの完全なスキーマとプライバシーモデルについては、MCP.md を参照してください。
アーキテクチャ
Bench は Cloudflare 上で完全に動作します。各プロダクトはそれぞれ特定の役割を担っています。
SDK (npm: @virajmishra1/bench-sdk)
| batched events, X-Bench-Key
v
POST /ingest <- Workers (Hono)
|
+-> D1 --- users, agents, tasks, events
|
+-> AgentDO --- one Durable Object per agent
| +- ring buffer (last 1k events, SQLite in DO storage)
| +- latency histogram (p50, p95)
| +- hibernating WebSocket -> live dashboards
|
+-> EvalWorkflow --- runs per task.end
| +- Workers AI (Llama 3.3 70B) -> score 0-1 + reasoning
| -> writes back to D1.tasks
| -> updates agents.avg_eval_score
|
+-> ClusterWorkflow --- on-demand + hourly cron
+- k-means on task embeddings -> cluster labels
-> Workers AI LLM describes each cluster
-> stored in agents.failure_clusters
Public surfaces:
/u/:login/:slug -> profile page (server-rendered, OG image)
/badge/:login/:slug.svg -> README badge (KV-cached 60s)
/embed/:login/:slug -> iframe widget (3 sizes, dark/light)
/leaderboard -> discovery (5 sort modes)
/vs/:a/:b -> compare two agents
/try -> sandbox (no signup)
/benchmarks -> verified benchmark registry
/mcp -> read-only MCP server
/api/agents/:l/:s/insights -> failure pattern analysis (JSON)
重要な設計上の決定は、アクターモデルです。各エージェントに専用の Durable Object が割り当てられます。この DO は SQLite に直近 1,000 件のイベント、レイテンシーヒストグラム、休止状態になる WebSocket 接続を保持します。アイドル時のコストはゼロで、ポーリングも不要です。
使用している Cloudflare プロダクト
| プロダクト | 役割 |
|---|---|
| Workers | API、プロフィールのレンダリング、バッジの生成 |
| Durable Objects | エージェントごとに 1 つ — リングバッファー、レイテンシーヒストグラム、休止状態になる WebSocket |
| D1 | ユーザー、エージェント、タスク、イベント |
| KV | トークン検索キャッシュ、バッジ SVG キャッシュ、OG 画像キャッシュ |
| Workers AI | Llama 3.3 70B — LLM ジャッジと失敗パターンの説明 |
| Workflows | EvalWorkflow と ClusterWorkflow の永続的な再試行 |
| Browser Rendering | OG シェア画像(SVG → PNG) |
| Assets | 静的フロントエンド(ランディングページ、ダッシュボード、JS、CSS) |
SDK リファレンス
const agent = observe({
apiKey: string; // bk_xxx — from your dashboard
agent: string; // slug, e.g. "my-agent"
displayName?: string;
endpoint?: string; // default: bench.virajmishratakehome.workers.dev
flushIntervalMs?: number; // default: 2000
maxBatchSize?: number; // default: 50
});
// Wrap a task — records start/end/duration/status/eval automatically
await agent.task("name", input, async (task) => {
task.log("label", value); // attach a log event
task.cost(0.003); // report LLM spend (owner-reported)
return result; // returned value becomes the task output
});
// Fire a custom event
agent.event("custom", { key: "value" });
// Flush immediately (auto-runs on batch full or interval)
await agent.flush();
task.cost() の呼び出しは、UI で「オーナー報告」としてラベル付けされます。フレームワークアダプターはプロバイダーとトークンのエビデンスを付与し、これらは個別にラベル付けされます。
エラーは黙って無視されます。オブザーバビリティによってエージェントがクラッシュしてはなりません。
セルフホスト
git clone https://github.com/VirajMishra1/bench
cd bench && npm install
cd packages/worker
npx wrangler login
# Create infrastructure
npx wrangler d1 create bench-db
npx wrangler kv namespace create CACHE
npx wrangler kv namespace create SESSIONS
# Paste the returned IDs into wrangler.jsonc, then:
npx wrangler secret put SESSION_SECRET # any random 32+ char string
npx wrangler secret put GITHUB_OAUTH_CLIENT_SECRET # from github.com/settings/developers
# Apply schema and deploy
npm run db:remote
npm run deploy
ファイル構成
bench/
+-- packages/
| +-- sdk/ <- @virajmishra1/bench-sdk
| +-- adapters/
| | +-- anthropic/ <- @virajmishra1/bench-anthropic
| | +-- openai/ <- @virajmishra1/bench-openai
| | +-- vercel-ai/ <- @virajmishra1/bench-vercel-ai
| | +-- mastra/ <- @virajmishra1/bench-mastra
| | +-- langchain/ <- bench-langchain
| +-- worker/ <- Cloudflare Worker (all backend + frontend)
| +-- src/
| | +-- index.ts <- Hono routes
| | +-- ingest.ts <- POST /ingest
| | +-- profile.ts <- public profile page
| | +-- badge.ts <- SVG README badge
| | +-- embed.ts <- iframe widget
| | +-- leaderboard.ts <- discovery page
| | +-- compare.ts <- /vs/:a/:b
| | +-- do/agent.ts <- AgentDO (actor per agent)
| | +-- workflows/
| | +-- eval.ts <- LLM judge per task
| | +-- cluster.ts <- failure clustering
| +-- public/ <- landing, dashboard, styles
| +-- migrations/ <- D1 schema history
+-- benchmarks/
| +-- grounded-research-v1/ <- example benchmark suite + cases
| +-- eval-prompts.md <- open-source judge prompts
+-- examples/ <- runnable example agents
ライセンス
MIT — LICENSE を参照してください。
Cloudflare 上で @virajm1shra が開発しました。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。