L'observabilité : chaque tour laisse sa traceObservability: every turn leaves a trace
Pendant qu'un agent travaille, une histoire se déroule sans vous : un modèle qui répond, des outils qui tranchent, un navigateur qui vieillit, un réseau qui peut ramer. L'observabilité garde cette histoire — chaque tour et chaque étape tracés en local, onze vues pour tout relire, neuf règles qui reconnaissent les anomalies, et des exports sobres qui ne quittent rien sans votre geste.While the agent works, a story unfolds without you: a model answering, tools deciding, a browser aging, a network that can drag. Observability keeps that story — every turn and every step traced locally, eleven views to read it all back, nine rules that recognize anomalies, and lean exports that leave nothing without your gesture.
L'observabilité, en deux motsObservability, in two words
On ne fait pas avancer un chantier en ouvrant ses organes. L'observabilité de VisiDog ne s'installe pas : elle veille déjà. Chaque tour est consigné, chaque étape est mesurée, et tout reste dans le navigateur — dans une base locale propre à la session. Vous ne voyez rien, sauf quand vous le demandez.
You don't move a build forward by opening up its engines. VisiDog's observability installs nothing: it already watches. Every turn is recorded, every step is measured, and it all stays in the browser — in a local base kept for the session. You notice nothing, unless you ask.
Deux gardes-fous organisent tout. La neutralité, d'abord : la collecte ne modifie jamais le dialogue envoyé au modèle ni les résultats des outils, elle observe en spectateur. Et la sobriété. Noms, durées, verdicts, tailles, codes, compteurs : la trace parle de mécanique, pas d'intimité. Le contenu du dialogue reste au magasin des sessions, et les secrets sont expurgés avant d'écrire quoi que ce soit.
Two guard rails organize everything. Neutrality first: the collection never modifies the dialogue sent to the model nor the tools' results; it watches from the side. And leanness. Names, durations, verdicts, sizes, codes, counters: the trace speaks mechanics, not intimacy. Dialogue content stays in the session store, and secrets are expurgated before anything is written.
✓Chaque tour et chaque étape : durées, verdicts, compteursEvery turn and every step: durations, verdicts, counters
✓Tout reste local : la base vit dans le navigateurEverything stays local: the base lives in the browser
✓Le dialogue du modèle n'est jamais copié dans la traceThe model dialogue is never copied into the trace
✓Onze vues d'analyse, intégrées ou en fenêtre autonomeEleven analysis views, built-in or in a standalone window
✓Neuf règles d'anomalies : des constats, jamais des décisionsNine anomaly rules: findings, never decisions
✓Exports JSON, CSV, gzip et OTLP — le réseau attend votre gesteJSON, CSV, gzip and OTLP exports — the network waits for you
La vie d'une traceA trace's life
Tout commence pendant un tour normal : l'agent avance, un outil répond, le navigateur prend son élan, l'inférence part en réseau. Chacun de ces mouvements laisse une empreinte mesurée — des spans qui relient un tour à ses étapes, des durées monotones, une file locale qui tient bon à la reprise. L'enregistreur consolide tout, un run après l'autre, sans déranger le reste du chantier.
It all starts during a normal turn: the agent moves on, a tool answers, the browser takes its stride, inference sets out over the network. Each of those motions leaves a measured imprint — spans tying a turn to its steps, monotonic durations, a local queue that holds up through recovery. The recorder consolidates everything, one run after another, without disturbing the rest of the build.
Schéma 1 — La vie d'une trace : mesurée à la source, consignée en local, relue dans les vues.Diagram 1 — A trace's life: measured at the source, logged locally, re-read in the views.
Concrètement, chaque tour porte son identité de trace et chaque span son parent, résolu dans la même session : un lien qui pointe dehors n'existe pas. Deux niveaux de collecte cohabitent : metrics garde les compteurs du tour, de l'inférence, du navigateur ; full ajoute les détails des outils, des domaines, des journaux et du réseau. La session appartient à son runtime : deux sessions parallèles ne partagent ni tours, ni spans, ni compteurs.
Concretely, every turn carries its trace identity and every span its parent, resolved within the same session: a link that points outside does not exist. Two collection levels cohabit: metrics keeps the counters of the turn, inference and browser; full adds the details of tools, domains, logs and network. The session belongs to its runtime: two parallel conversations share neither turns, nor spans, nor counters.
1Un spectateur, pas un intervenant. La collecte observe : le dialogue envoyé au modèle et les résultats des outils la traversent sans être modifiés d'un octet.A spectator, not a participant. The collection watches: the dialogue sent to the model and the tools' results pass through without being modified by a single byte.
2Le navigateur y va de ses mesures. Long Tasks, latence d'événement, ressources, mémoire, quota, cycle de page : ce qui existe est branché, chaque sonde rattachée aux tours observés.The browser adds its own measurements. Long Tasks, event latency, resources, memory, quota, page lifecycle: whatever exists is wired in, each probe tied to the observed turns.
3Les secrets sortent avant l'écriture. Authentifications Bearer/Basic, clés reconnaissables, affectations de secrets : la trace ne les porte jamais ; une URL perd identification, requête et fragment, un chemin absolu se replie sur [absolute]/nom.Secrets come out before the writing. Bearer/Basic authentications, recognizable keys, secret assignments: the trace never carries them; a URL loses its ident, query and fragment, an absolute path folds back to [absolute]/name.
Les onze vues d'analyseThe eleven analysis views
Deux icônes restent visibles à gauche du badge de mode : l'icône d'activité active ou arrête la collecte de la session affichée, et l'icône de tableaux de bord ouvre les vues. Même quand la collecte est éteinte, l'historique conservé reste lisible. Aucune commande n'est nécessaire pour ces deux gestes.
Two icons stay visible to the left of the mode badge: the activity icon starts or stops collection for the displayed session, and the dashboards icon opens the views. Even when collection is off, the kept history remains readable. No command is needed for either gesture.
Les onze vues couvrent la session d'un coup d'œil : overview la synthèse d'ensemble, runs le défilé des tours, inspect le détail d'un tour choisi, latency les retards et leurs percentiles, tools le comportement des outils, tokens la consommation en jetons, errors les erreurs regroupées, findings les anomalies relevées, logs le journal technique, runtime le navigateur — mémoire, tâches longues, ressources — et diff la comparaison de deux séries. Filtres, timeline et comparaison reposent sur des projections pures : relire n'altère jamais ce qui a été consigné.
The eleven views cover the session at a glance: overview the overall synthesis, runs the parade of turns, inspect the detail of a chosen turn, latency the delays and their percentiles, tools how the tools behaved, tokens token consumption, errors grouped errors, findings the anomalies raised, logs the technical journal, runtime the browser — memory, long tasks, resources — and diff comparing two series. Filters, timeline and comparison rest on pure projections: reading back never alters what was recorded.
Pour un examen tranquille, les vues quittent le terminal : le détachement ouvre une fenêtre autonome qui charge ses propres modules, lit sa base locale et conserve la session, ses filtres et son état de pause. Une fenêtre bloquée par le navigateur garde le volet intégré de la même session — rien n'est perdu.
For a comfortable review, the views leave the terminal: detaching opens a standalone window that loads its own modules, reads its local base and keeps the session, its filters and its pause state. A window blocked by the browser keeps the built-in pane of the same session — nothing is lost.
La détection d'anomaliesAnomaly detection
En parallèle des vues, un lecteur local relit chaque run achevé et pose des constats : neuf règles déterministes, toutes calculées ici, sans modèle appelé. Elles reconnaissent les retards (long_running), les outils répétés (repeated_tool), les erreurs consécutives (repeated_error), les trous d'activité (no_activity), les motifs de boucle (possible_loop), le gel de l'interface (ui_freeze), la pression de contexte (context_pressure), l'essaim à l'arrêt avec slots libres (swarm_stall) et l'outil distant sans annotation de lecture seule (mcp_unannotated).
Alongside the views, a local reader re-reads every finished run and lays down findings: nine deterministic rules, all computed here, with no model called. They recognize delays (long_running), repeated tools (repeated_tool), consecutive errors (repeated_error), idle gaps (no_activity), loop patterns (possible_loop), a frozen interface (ui_freeze), context pressure (context_pressure), a stalled swarm with free slots (swarm_stall) and the remote tool without an access annotation (mcp_unannotated).
Schéma 2 — La détection : neuf règles locales sur les traces, des constats avec preuves, personne ne décide pour vous.Diagram 2 — Detection: nine local rules over the traces, evidenced findings, nobody decides for you.
Chaque constat porte une identité stable — type, sévérité, empreinte du sujet et de la trace — : relire le même blocage au même endroit ne s'empile pas, le constat existant recueille la preuve. Celles-ci accompagnent la lecture : intervalles, cibles, compteurs, durées. Six lectures de fichiers distinctes ne constituent pas une boucle ; une même cible répétée reste, elle, parfaitement détectable.
Every finding carries a stable identity — type, severity, subject and trace fingerprint — so re-reading the same blockage in the same spot does not pile up: the existing finding absorbs the evidence. The evidence comes along with the reading: intervals, targets, counters, durations. Six distinct file reads do not make a loop; one repeated target, however, stays perfectly detectable.
Et le contrat ne bouge pas : un constat n'ouvre pas de modèle, ne bloque pas un outil, ne touche ni budget ni compaction — la détection décrit, c'est vous qui décidez.
And the contract does not move: a finding opens no model, blocks no tool, touches neither budget nor compaction — detection describes, you decide.
Exporter les tracesExporting the traces
Faire sortir une trace se fait d'un mot : /obs export json|csv|gzip|otlp. Les fichiers locaux d'abord — sélecteur de fichier, ou téléchargement en repli — avec un paquet versionné meta, runs, spans, logs, errors, findings, sérialisé en flux : la session entière n'est jamais montée d'un seul bloc en mémoire.
Getting a trace out is one word: /obs export json|csv|gzip|otlp. Local files first — a file picker, or a download as fallback — with a versioned package of meta, runs, spans, logs, errors, findings, serialized as a stream: the whole session is never mounted in memory at once.
Schéma 3 — De l'expurgation à l'export : fichiers locaux, envoi réseau uniquement sur demande explicite.Diagram 3 — From expurgation to export: local files, network send only on explicit request.
L'envoi au réseau, lui, attend une demande explicite : /obs export --otlp appelle une cible HTTPS publique validée — loopback, noms locaux, IP privées et métadonnées cloud refusées sans exception, sans query ni fragment dans l'URL, et aucun réglage ne contourne ce veto. Deux requêtes POST /v1/traces et /v1/logs, sans cookies, sans référent et sans suivre les redirections, le tout borné par une échéance de vingt secondes. Aucun collecteur serveur n'est mis en place : rien n'est envoyé automatiquement.
The network send, meanwhile, waits for an explicit request: /obs export --otlp calls a validated public HTTPS target — loopback, local names, private IPs and cloud metadata refused without exception, no query or fragment in the URL, and no setting bypasses that veto. Two POST requests to /v1/traces and /v1/logs, no cookies, no referer, no redirects, all bounded by a twenty-second deadline. No server collector is set up: nothing is sent automatically.
L'utiliser dans VisiDogUsing it in VisiDog
1
Regardez la collecteMind the collection
L'icône d'activité, à gauche du badge de mode, active ou arrête la collecte de la session affichée — en un clic, sans commande. Allumée, elle trace la session ; éteinte, rien ne se perd, l'historique reste lisible.
The activity icon, to the left of the mode badge, starts or stops collection for the displayed session — one click, no command. On, it traces the session; off, nothing is lost, the history stays readable.
2
Ouvrez les vuesOpen the views
L'icône de tableaux de bord, juste à côté, ouvre les onze vues dans le volet d'aperçu : synthèse, tours, inspection, retards, outils, jetons, erreurs, anomalies, journaux, navigateur, comparaison. Le détachement les mène dans une fenêtre autonome qui garde session, filtres et pause.
The dashboards icon, right next to it, opens the eleven views in the preview pane: synthesis, turns, inspection, delays, tools, tokens, errors, findings, logs, browser, comparison. Detaching carries them into a standalone window that keeps session, filters and pause.
3
ExportezExport
/obs export donne un fichier local au format choisi — json, csv, gzip ou otlp. Pour un envoi réseau explicite, /obs export --otlp poste les traces et les journaux vers une cible HTTPS publique validée.
/obs export gives a local file in the chosen format — json, csv, gzip or otlp. For an explicit network send, /obs export --otlp posts the traces and logs to a validated public HTTPS target.
Cas d'usageUse cases
L'étape qui rameThe step that drags
Une étape tarde et l'agent paraît bloqué : la vue latency donne les percentiles, la règle long_running pose la preuve avec les intervalles — on tranche avant de supposer un plantage.
A step is late and the agent looks stuck: the latency view gives the percentiles, the long_running rule lays down the evidence with intervals — you decide before assuming a crash.
L'outil qui tourne en rondThe tool going in circles
Le même outil revient à la même cible : repeated_tool et possible_loop marquent les motifs avec leurs preuves — vous en tirez une consigne plus ferme ou un garde-fou, au lieu de rater trois tours à deviner.
The same tool keeps hitting the same target: repeated_tool and possible_loop mark the patterns with their evidence — you pull a firmer instruction or a guardrail out of it, instead of wasting three turns guessing.
Rendre des comptes, garder ses secretsReporting without giving away secrets
Fin de séance, le reste de l'équipe attend un état des lieux : /obs export gzip donne le paquet complet, /obs export csv les tours en tableau — sans le contenu des dialogues, avec des empreintes à la place des sorties.
Session over, the rest of the team waits for a status: /obs export gzip gives the full package, /obs export csv the turns as a table — without dialogue content, with fingerprints instead of outputs.
Brancher votre plateforme d'observationWiring up your observability platform
L'entreprise a déjà son outil compatible OTLP : /obs export --otlp envoie les traces et les journaux à votre cible publique validée — le diagnostic arrive au format standard, sans collecteur maison.
The company already runs an OTLP-compatible tool: /obs export --otlp sends the traces and logs to your validated public target — the diagnosis arrives in the standard format, with no home-made collector.
Ce que ça vous apporteWhat it brings you
✓Une mémoire du mécanisme : chaque tour et chaque étape restent disponibles, relis plus tard depuis l'historique conservé.A memory of the machinery: every turn and step stay available, re-read later from the kept history.
✓Zéro gêne pour l'agent : la collecte observe en spectateur — ni le dialogue, ni les résultats d'outils ne changent d'un octet.Zero bother for the agent: the collection watches as a spectator — neither the dialogue nor the tools' results shift by a byte.
✓Des anomalies nommées et prouvées : neuf règles locales, des constats à l'identité stable, avec sévérité et preuves.Anomalies named and proven: nine local rules, findings with a stable identity, severity and evidence.
✓Une lecture à votre façon : onze vues, filtres, timeline, percentiles et comparaison, dans le volet ou en fenêtre autonome.Reading your way: eleven views, filters, timeline, percentiles and comparison, in the pane or a standalone window.
✓Des exports sobres et standard : JSON, CSV, gzip, OTLP — sérialisés en flux, sans monter la session en mémoire d'un seul bloc.Lean, standard exports: JSON, CSV, gzip, OTLP — serialized as streams, never mounting the session in memory at once.
✓Les secrets dehors, avant tout : expurgés à l'écriture, avant la base locale, la diffusion et les exports.Secrets out, before everything: expurgated at write time, before the local base, the display and the exports.
Points d'attentionPoints of attention
Les constats ne décident pasThe findings do not decide
Un constat d'anomalie n'ouvre pas de modèle, ne bloque pas un outil, ne déclenche pas de compaction et ne change pas le budget : il prouve et signale. La suite du chantier reste pilotée par vous, pas par la détection.
An anomaly finding opens no model, blocks no tool, triggers no compaction and changes no budget: it proves and signals. The rest of the build stays steered by you, not by the detection.
La base est généreuse, pas infinieThe base is generous, not endless
La base locale porte des quotas par session et un repli mémoire en cas de saturation : exporter une session ne contourne ni la rétention ni les plafonds déjà appliqués — les lectures restent celles du magasin.
The local base carries quotas per session and a memory fallback when saturated: exporting a session bypasses neither the retention nor the ceilings already applied — reads stay those of the store.
L'envoi OTLP n'est pas une transactionThe OTLP send is not a transaction
L'envoi part en deux requêtes — traces puis journaux : une réussite peut précéder un échec, sans garantie commune. Une réponse refusée rend une erreur OBS_EXPORT_HTTP_<statut> claire. La cible reste une base HTTPS publique, sans secrets dans l'URL.
The send goes out as two requests — traces then logs: one success can precede a failure, with no shared guarantee. A refused response yields a clear OBS_EXPORT_HTTP_<status> error. The target stays a public HTTPS base, with no secrets in the URL.
La trace ne raconte pas toutThe trace does not tell everything
Le contenu du dialogue reste au magasin des sessions : la trace conserve la taille et une empreinte de la sortie, pas le texte. Si vous cherchez ce qui a été dit, rendez-vous au fil de la session — la trace, elle, raconte le mécanisme.
Dialogue content stays in the session store: the trace keeps the size and a fingerprint of the output, not the text. If you are after what was said, go back to the session's thread — the trace, for its part, tells the machinery.