Skip to main content
Aller au contenu principal
SeaOtter
SoumettreDémarrage rapideTarificationDocumentationDémo en directRubriques
Demander l’accès

LA COUCHE D’ACCEPTATION POUR LE TRAVAIL DES AGENTS, À L’ÉCHELLE

Les agents produisent du travail
plus vite que quiconque
ne peut le relire.

Les agents expédient du travail plus vite que toute équipe ne peut le revoir. Le critique de SeaOtter note chaque artefact et renvoie des correctifs jusqu’à ce que la politique soit respectée — agent↔critique, à vitesse machine.

Essayer la démo en directVoir le fonctionnement ↓
POUR AGENTSObtenir une clé API + MCPInscrivez-vous, connectez via MCP ou HTTP, notez et itérez programmatiquement.→POUR PERSONNESSoumettre un travail à la relectureTéléversez le travail de votre agent, recevez un OtterScore et la liste des défauts à corriger.→
Lire la documentation →
  • ACCEPTÉ
  • REPRISE
  • ÉCHEC

La relecture humaine était la boucle. À l’échelle des agents, c’est le goulet d’étranglement.

À L’ÉCHELLE DES AGENTS

Un modèle critique hostile lit le travail — et décide.

Un agent soumet du travail à la notation. Il est routé vers un passage one-shot rapide — ou un contrôle agentique profond qui exécute le travail dans un bac à sable et le sonde. Un modèle critique hostile décide, et vous payez le calcul consommé. Puis reculez : des milliers d’agents, notés en parallèle, en synchrone ou asynchrone.

12,480éléments de travail d’agentévalués en parallèle par OtterScore — un agent critique hostile
9,734expédier1,997router pour correction749bloquer
…et des milliers d’autres, évalués en direct
SHIPROUTE TO FIXBLOCK

OtterScore · agent critique hostileévalue

Feature PR → tests → migration

chaîne de workflow

  1. Spec the change0.84
  2. Implement query0.12
  3. Write tests0.79
  4. Add migration0.81

défaut capté`f"SELECT * FROM users WHERE id = {uid}"` — unparameterised SQL. SQL-injection sink. Blocked under security policy.

verdictBLOCK0.16

Cliquez sur un élément pour inspecter — ou utilisez ← → pour parcourir, Échap pour fermer

FEEDBACK LOCALISÉ

Un défaut que vous ne pouvez pas localiser est un défaut que vous ne pouvez pas corriger.
SeaOtter épingle l’exacte plage et nomme le fichier.

Le critique ne se contente pas de dire qu’il y a un problème. Il localise l’anomalie pour que l’agent révise la ligne, la page, la diapositive, la cellule, l’image ou le timestamp exact qui a échoué.

background.py · Python
28def add_task(self, func, *args, **kwargs):29 task = BackgroundTask(func, *args, **kwargs)30 self.tasks.add_item(task)
ligne 30
encode/starlette · BSD-3-Clause · extraction OSS publique
Un signalement sans localisationnon localisé

"Il peut y avoir un problème quelque part dans cet artefact."

Aucune plage. Aucun fichier. Rien à router.

Critique SeaOtterligne 30

hallucinated_api · élevé

self.tasks.add_item(task)

add_item n’est pas une méthode valide pour list, cela lèvera une exception à l’exécution. Attendu : self.tasks.append(task).

F1 de localisation — localise-t-il le défaut ?

évaluation précoce · n=256 · vérifiée sur holdout
Critique SeaOtter
0.218

Une lecture précoce, vérifiée sur holdout, de la capacité de notre critique à épingler l’exacte plage et à nommer le fichier. La détection est encore en entraînement actif ; la revendication porte ici sur la qualité de localisation, pas sur la critique générique.

SOUMETTRE → NOTER

Soumettez un travail, recevez sa note — synchrone ou asynchrone.

Un agent fait un POST du travail qu’il vient de produire et SeaOtter l’évalue selon votre politique d’acceptation. Les contrôles petits et rapides renvoient le verdict inline. Les contrôles plus lourds renvoient un identifiant de job que l’agent scrute, diffuse ou reçoit par webhook — pour qu’une longue relecture ne bloque jamais l’agent demandeur.

POUR PERSONNES

Humains — transférez ou collez

Envoyez le travail à la boîte de réception SeaOtter et recevez une réponse OtterScore notée, ou collez-le sur le web et notez-le dans votre navigateur. Aucun agent requis.

Soumettre sur le webEnvoyer à la boîte de réception SeaOtter

POUR AGENTS

Agents — API & MCP

Reliez tout agent via HTTP ou MCP pour qu’il note sa propre sortie dans la boucle — même politique, même OtterScore, à vitesse machine. Le démarrage rapide en 60 secondes est juste ci-dessous.

Ouvrir la console développeur

SYNCHRONE

Soumettre et attendre le verdict

POSTez le travail, maintenez la connexion, recevez le verdict OtterScore — bande, défauts, repères, améliorations — dans la même réponse. Idéal pour un contrôle one-shot dans la boucle interne d’un agent, où l’agent a besoin de la réponse avant sa prochaine étape.

POST /api/v1/eval/score → 200 { band, flaws[], upgrades[] }

ASYNCHRONE

Soumettre, obtenir un identifiant de job, collecter plus tard

POSTez le travail, obtenez immédiatement un identifiant de job, puis scrutez le job, abonnez-vous au flux de résultats ou enregistrez un webhook. Idéal pour un contrôle agentique qui exécute le travail dans un bac à sable sur plusieurs passes — l’agent producteur continue et est rappelé à l’arrivée du verdict.

POST /api/v1/eval/jobs → 202 { job_id } · poll · stream (SSE) · webhook

Synchrone · one-shot

Un passage d’un critique hostile, renvoyé inline. Bon marché et forfaitaire.

curl -s https://dev-api.seaotter.ai/api/v1/eval/score \
  -H "Authorization: Bearer $OTTER_KEY" -H 'Content-Type: application/json' \
  -d '{ "mode":"one_shot", "modality":"text",
        "policy_id":"acme-prod-acceptance",
        "artifact_parts":[{"mime_type":"text/plain","text":"..."}] }'
# 200 { "band":"route_to_fix", "flaws":[...], "upgrades":[...] }

Asynchrone · agentique

Le critique exécute le travail dans un bac à sable et le sonde sur plusieurs passes.

POST /api/v1/eval/jobs
  { "mode":"agentic", "modality":"code",
    "policy_id":"acme-prod-acceptance",
    "artifact_ref":"gs://...", "max_passes":6,
    "webhook":"https://acme.internal/otter-callback" }
# 202 { "job_id":"job_8f21", "status":"running" }
GET /api/v1/eval/jobs/job_8f21   # poll, ou stream, ou attendre le webhook

Même politique, même OtterScore, même enregistrement d’audit signé — quel que soit le transport choisi par l’agent.

POUR AGENTS · DÉMARRAGE RAPIDE MCP

Reliez votre agent au critique hostile en 60 secondes.

Trois étapes : frapper une clé, ajouter un serveur MCP, puis votre agent appelle otter_score / otter_iterate dans sa propre boucle — même OtterScore, même politique d’acceptation, à vitesse machine. Le critique note ; votre agent révise selon les défauts jusqu’à franchir la bande. C’est la boucle que vous venez de voir dans la flotte ci-dessus : chaque artefact signalé (route_to_fix, l’arc ambre) ré-entre dans la gate via otter_iterate et n’est expédié que lorsque ready_to_ship vaut true. Aucun humain dans la boucle interne — le visa nominatif est la dernière gate, pas la seule.

01

Enregistrer

Un utilisateur d’organisation connecté frappe la clé d’évaluation de l’agent une fois. Le secret sk-otter-… est affiché une seule fois ; remettez-le à l’agent.

02

Ajouter le serveur MCP

Ajoutez un serveur otterloop dans .mcp.json (Claude / Cursor) ou config.toml (Codex). L’agent obtient des outils de critique en lecture seule qu’il peut auto-approuver.

03

Noter et itérer

L’agent soumet le travail, lit les défauts ancrés, révise et re-soumet — en bouclant tant que ready_to_ship est faux. Survivre au critique EST le produit.

1 — Enregistrer

POST /api/v1/agent-keys avec un JWT utilisateur connecté. Le secret est renvoyé une fois — ou cliquez sur « Generate eval API key » dans la console développeur.

curl -s -X POST https://dev-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", "created_at":"..." }
# Remettez `key` à l’agent comme OTTERLOOP_API_KEY.

2 — Ajouter le serveur MCP

.mcp.json (Claude / Cursor) — Codex utilise [mcp_servers.otterloop] dans config.toml. Installation unique : pip install "otterloop[mcp]". Base prod : https://api.seaotter.ai.

{
  "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": "enterprise-default"
      }
    }
  }
}
# tools: otter_list_policies · otter_score · otter_iterate
#        otter_score_workflow · otter_get_feedback_artifact

3 — Noter et itérer

L’agent exécute soumettre → défauts → réviser → re-soumettre entièrement via MCP. Considérez le verdict comme faisant autorité — NE VOUS notez PAS vous-même.

# soumettez votre travail -> verdict faisant autorité
v = otter_score(
      work="...the artifact your agent produced...",
      modality="text",
      prompt="Draft the Q3 incident postmortem",
      policy_id="enterprise-default")
# -> { run_id, score, band:"route_to_fix",
#      flaws:[{criterion,severity,detail,anchor}],
#      upgrades:[...], ready_to_ship:false }

# révisez selon flaws[]/upgrades[], puis re-soumettez le MÊME run
d = otter_iterate(
      run_id=v["run_id"],
      work="...revised draft addressing the flaws...",
      prompt="addressed sourcing + tone")
# -> { run_id, verdict:{band:"ship",...},
#      delta:{resolved_flaws,new_flaws,persisted_flaws,
#             score_change:+18.0}, ready_to_ship:true }

# continuez d’itérer tant que ready_to_ship est faux.

ITÉRER → CONVERGER

Ce que renvoie otter_iterate — la même convergence route_to_fix → ship que la flotte anime ci-dessus, figée en delta lisible.

route_to_fix→ship

resolved_flaws ↓ 2 · score_change ↑ +18.0 · ready_to_ship → true

Équivalent pure-HTTP (sans MCP) : POST /api/v1/eval/runs → { run_id, first_iteration.critic_verdict }, puis POST /api/v1/eval/runs/{run_id}/iterate { "decision":"re_prompt", "new_artifact_parts":[…] } → { verdict, delta }. Une panne du critique échoue en FERMÉ (band:quarantine) — jamais de réussite silencieuse.

Générer votre clé d’évaluationEssayer la démo en direct

DEUX MODES DE CONTRÔLE

One-shot ou agentique. Vous choisissez la profondeur.

Chaque sortie ne requiert pas le même niveau d’examen. Un contrôle one-shot est un seul passage d’un critique hostile — rapide, peu coûteux, renvoyé inline. Un contrôle agentique exécute le travail dans un bac à sable jetable, connecté à Internet, et le sonde sur plusieurs passes — plus lent, plus coûteux, renvoyé en asynchrone. Dirigez les travaux peu coûteux vers le one-shot et les travaux à fort enjeu vers l’agentique, sous la même politique.

One-shotun seul passage hostileAgentiquebac à sable, multi-passes
Action du critiqueLit l’artefact, la politique, le prompt et les références en un seul passage.Exécute le travail dans un bac à sable jetable et le sonde sur plusieurs passes.
LatenceInline — verdict dans la réponse.Asynchrone — identifiant de job, puis poll, stream ou webhook.
CalculFaible et prévisible.Plus élevé — croît avec le nombre de passes et le temps en bac à sable.
Idéal pourContrôles en boucle interne, brouillons à grand volume, seuils rapides.Code à exécuter, assertions à reproduire, travaux à fort rayon d’impact.
FacturationBon marché, forfait par contrôle.Au compteur selon calcul et temps de bac à sable.

Les deux modes renvoient la même forme de verdict OtterScore et écrivent le même enregistrement d’audit signé.

TARIFICATION À L’USAGE

Payez pour le travail effectué.

Vous êtes facturé pour l’évaluation réellement exécutée, pas au siège. Un contrôle one-shot est bon marché et forfaitaire ; un contrôle agentique est au compteur selon le calcul et le temps en bac à sable. C’est ce qui rend économique l’évaluation de chaque sortie — et de toute la flotte — au lieu de rationner la relecture à un échantillon.

CONTRÔLE ONE-SHOT

Bon marché, forfaitaire

par contrôle, forfait

Un seul passage d’un critique hostile, renvoyé inline. Assez peu cher pour rester dans la boucle interne de chaque agent et noter les brouillons à haut volume.

CONTRÔLE AGENTIQUE

Au compteur selon calcul

au compteur selon calcul + temps bac à sable

Une relecture en bac à sable, multi-passes. Vous payez pour les passes et le temps de bac à sable réellement nécessaires — à réserver aux sorties à fort enjeu où cela se justifie.

Essayer la démo en directLire la doc API

Le déploiement Entreprise reste shadow → enforce → managed ; la tarification à l’usage mesure le travail sous-jacent. Chiffrage concret en £ disponible sur demande.

INFRA OTTERLOOP

Placez le critique dans la boucle de chaque agent.

MCP + HTTP + Python SDKAucun humain dans la boucle interneEntrées multimodales, sorties multimodalesConditionné par votre politique
01

Produire

N’importe quel agent émet du travail : code, texte, image, diaporama, feuille, vidéo, ou une trajectoire complète.

02

Noter

SeaOtter l’évalue selon la bonne rubrique et le seuil conditionné par l’organisation.

03

Lire le feedback

Le verdict renvoie des défauts, améliorations et repères directement ciblables par l’agent.

04

Réviser

L’agent réécrit l’artefact ou l’étape suivante en s’appuyant sur la contre-analyse du critique.

05

Expédier

La boucle s’arrête seulement lorsque la bande franchit le seuil et que la preuve d’audit est écrite.

Essayer la démo en directOuvrir la page Build

MCP

Ajoutez dans `.mcp.json` ou `config.toml` pour Claude, Codex, Cursor ou un runtime personnalisé.

{ "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

Tout runtime parlant HTTP peut noter une fois ou rester dans la boucle.

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

Un appel de boucle orchestre produire → noter → réviser jusqu’au feu vert du critique.

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")
SeaOtterLa boucle d’acceptation adversariale pour le travail des agents en entreprise.
DocumentationDémo en directCritiquesRubriquesInvestisseurs (NDA)

© 2026 SeaOtter. Conçu pour bloquer le mauvais travail des agents.