OTTERLOOP でビルド
OtterLoop は SeaOtter の敵対的批評家に対するエージェント向け契約です。同じループが AgentOS の有無を問わず、あらゆるフレームワーク・モデル・クラウドで機能します。成果物を提出し、判定を読み、修正し、ゲートを通過するまで反復します。
統合
すべてが同じ評価契約にルーティングされます。ホスト API が批評家の実行・条件付け・位置特定・リッチな返却・署名済み監査記録を担います。MCP サーバーと Python SDK はその HTTP サーフェスの薄いラッパーです。
統合
すべてが同じ評価契約にルーティングされます。ホスト API が批評家の実行・条件付け・位置特定・リッチな返却・署名済み監査記録を担います。MCP サーバーと Python SDK はその HTTP サーフェスの薄いラッパーです。
MCP
Claude、Codex、Cursor、または任意の MCP 対応ランタイムで利用。
{ "mcpServers": { "otterloop": {
"command": "python", "args": ["-m", "otterloop.mcp_server"],
"env": { "OTTERLOOP_API_URL": "https://dev-api.seaotter.ai",
"OTTERLOOP_API_KEY": "sk-otter-...",
"OTTERLOOP_POLICY_ID": "acme-prod-acceptance" } } } }curl
HTTP 経由のワンショット採点コール。
curl -s https://dev-api.seaotter.ai/api/v1/eval/feedback \
-H "Authorization: Bearer $OTTER_KEY" -H 'Content-Type: application/json' \
-d '{ "modality":"text", "policy_id":"acme-prod-acceptance", "locale":"ja",
"prompt":"Draft the Q3 incident postmortem",
"artifact_parts":[{"mime_type":"text/plain","text":"..."}],
"return_feedback_artifacts": true }'Python SDK
クライアントに produce → grade → revise の駆動を任せ、ship まで。
from otterloop import OtterLoopClient otter = OtterLoopClient(policy_id="acme-prod-acceptance", locale="ja") final = otter.loop(produce=lambda feedback: my_agent.revise(feedback), work=my_agent.first_draft(), modality="document", references=["file://brand-guide.pdf", "file://gold-postmortem.md"], max_rounds=5, target_band="ship")
開発者コンソール
アカウント用の評価 API キーを発行し、あらかじめ用意された MCP、Python SDK、または curl の設定をコピーして、任意のエージェントを SeaOtter の敵対的批評家へ接続します。シークレットの表示は 1 回限りです—離れる前に保管してください。
キーを読み込み中…
AGENT QUICKSTART
SeaOtter is agent-native: an agent can discover this contract from /llms.txt, then run the whole loop over MCP or plain HTTP. The only human step today is minting the first eval key (above) — the agent does the rest. Every eval call carries Authorization: Bearer <sk-otter-...>. Bases: https://api.seaotter.ai (prod), https://dev-api.seaotter.ai (dev).
Machine-readable: /llms.txt · OpenAPI spec · interactive API docs.
1 — mint a key (one-time, signed-in user)
Returns the full sk-otter-... secret exactly once.
curl -s -X POST https://api.seaotter.ai/api/v1/agent-keys \
-H "Authorization: Bearer $SEAOTTER_USER_JWT" -H 'Content-Type: application/json' \
-d '{"name":"my-agent"}'
# -> { "id": "...", "key": "sk-otter-...", "key_prefix": "sk-otter-abcde", ... }2 — connect over MCP (.mcp.json)
Claude / Cursor. Codex uses [mcp_servers.otterloop] in config.toml.
{ "mcpServers": { "otterloop": {
"command": "python", "args": ["-m", "otterloop.mcp_server"],
"env": { "OTTERLOOP_API_URL": "https://api.seaotter.ai",
"OTTERLOOP_API_KEY": "sk-otter-...",
"OTTERLOOP_POLICY_ID": "acme-prod-acceptance" } } } }3 — score over HTTP
One-shot grade -> verdict + run_id to keep iterating.
curl -s https://api.seaotter.ai/api/v1/eval/feedback \
-H "Authorization: Bearer $OTTER_KEY" -H 'Content-Type: application/json' \
-d '{ "modality":"text", "policy_id":"acme-prod-acceptance",
"prompt":"Draft the Q3 incident postmortem",
"artifact_parts":[{"mime_type":"text/plain","text":"...your work..."}],
"return_feedback_artifacts": true }'
# -> { "run_id": "...", "verdict": { "score": ..., "band": "route_to_fix", "flaws": [...] } }5 — iterate until it ships
Re-score a revision against the same run.
curl -s -X POST https://api.seaotter.ai/api/v1/eval/runs/$RUN_ID/iterate \
-H "Authorization: Bearer $OTTER_KEY" -H 'Content-Type: application/json' \
-d '{ "decision":"reprompt", "new_artifact_ref":"inline:v2",
"artifact_parts":[{"mime_type":"text/plain","text":"...revised work..."}] }'判定契約
判定は人間レビューのスクリーンショットではなく、先端のエージェント向けに設計されています。スコア、バンド、欠陥、アップグレード、アンカー、根拠、そしてエージェントが直接利用できるリッチ・フィードバックのアーティファクト参照を保持します。
判定スキーマ
{
"score": 0.91,
"band": "ship",
"decision": "ship",
"flaws": [
{ "criterion": "source_grounding", "severity": "high", "evidence": "Unsupported number", "detail": "The claim is not backed by the cited file", "anchor": { "kind": "span", "span": [418, 462] } }
],
"upgrades": [
{ "action": "Replace the unsupported figure", "target_criterion": "source_grounding", "draft": "Use the cited value from page 2 instead." }
],
"rationale": "Localized feedback so the agent can revise the exact failing region.",
"feedback_artifacts": [{ "kind": "annotated_png", "ref": "artifact://..." }]
}条件付け
OtterLoop は一般的な「良し悪し」スコアではありません。判定を、組織のポリシー、エージェントに与えられたプロンプトや意図、遵守すべき参照ファイルに条件付けられます。
適切な受入ポリシーを適用。同一アーティファクトでも、チームごとに合否が異なる理由を防御可能な形で示せます。
元の依頼を批評家に渡し、理想化した一般解ではなく、課題に対して評価します。
ブランドガイド、ゴールド例、真正ソース文書、過去反復が条件付けの証拠になります。
モダリティ
同じループが、テキスト、コード、画像、デック、ドキュメント、スプレッドシート、音声、動画、マルチステップの軌跡をカバーします。返却には人間やエージェントが読めるメディアと、正規の判定 JSON の両方を含められます。
| モダリティ | 返却 |
|---|---|
| 画像またはデザインフレーム | 注釈付き PNG、欠陥のバウンディングボックス、Markdown レポート |
| デック、PDF、またはドキュメント | 注釈付きページ、ページごとのノート、機械可読のアンカー |
| スプレッドシート | フラグ付きセル、基準に基づくノート、構造化された差分 |
| 動画または音声 | タイムスタンプマーカー、キャプション、ローカライズされた根拠 |
| テキストまたはコード | スパンにアンカーしたレビューと、エージェントが適用できるアップグレード案 |