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
클라이언트가 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의 적대적 크리틱에 연결하십시오. 시크릿은 한 번만 표시됩니다 — 이 페이지를 떠나기 전에 보관하십시오.
키 로딩 중…
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, 결함 바운딩 박스, 마크다운 리포트 |
| 슬라이드, PDF 또는 문서 | 주석 처리된 페이지, 페이지별 노트, 기계가 읽을 수 있는 앵커 |
| 스프레드시트 | 플래그 표시된 셀, 기준 기반 노트, 구조화된 델타 |
| 비디오 또는 오디오 | 타임스탬프 마커, 캡션, 로컬라이즈된 근거 |
| 텍스트 또는 코드 | 에이전트가 적용 가능한 업그레이드 초안과 스팬 앵커 리뷰 |