Rivet Agent OS : le système d'exploitation in-process qui exécute les agents IA à 500x moins cher que les sandboxes

Rivet Agent OS : le système d'exploitation in-process qui exécute les agents IA à 500x moins cher que les sandboxes

lschvn9 min de lecture

Nous faisions tourner des machines virtuelles Linux complètes pour exécuter des agents IA. Puis quelqu'un s'est rendu compte que nous avions tout faux.

Pendant deux ans, la réponse standard à « comment exécuter un agent de coding de façon sécurisée ? » a été : spin up une VM cloud, booter Linux, démarrer une session shell, lancer votre agent. E2B. Daytona. Modal. Chaque framework d'agents adoptait le même modèle mental que pour déployer un serveur web, un système d'exploitation complet, un système de fichiers complet, des syscalls vers un vrai noyau, le tout pour un agent qui passe 95 % de son temps à attendre qu'un LLM réponde.

La réponse de Rivet est différente. Très différente.

Qu'est-ce qu'agentOS ?

agentOS est un noyau de système d'exploitation in-process écrit en JavaScript, s'exécutant à l'intérieur d'un processus hôte Node.js. Ce n'est pas du langage marketing, c'est une description précise de l'architecture.

Le noyau gère :

  • Un système de fichiers virtuel avec des pilotes de montage (S3, SQLite, répertoires hôtes, en mémoire)
  • Une table de processus assurant le suivi des processus enfants, des PID, des codes de sortie
  • Des pipes et PTY pour la communication inter-processus
  • Une pile réseau virtuelle avec des règles programmables d'autorisation/refus/proxy

Trois runtimes sont montés dans ce noyau :

1. Isolats V8 pour le code agent. L'agent (Pi, Claude Code, Codex, bientôt) s'exécute dans un contexte JavaScript V8. C'est la même technologie d'isolation que Chrome utilise pour sandboxer chaque onglet du navigateur. Chaque isolat a son propre heap et stack, aucun état partagé, des permissions refusées par défaut pour l'accès au système de fichiers, au réseau et aux processus. Le cold start est d'environ 4 à 6 ms parce que vous ne booter rien, vous créez simplement un nouveau contexte JavaScript à l'intérieur d'un moteur V8 déjà en cours d'exécution.

2. WebAssembly pour les utilitaires POSIX. GNU coreutils, grep, sed, gawk, curl, jq, ripgrep, sqlite3 et plus de 80 autres commandes Unix compilées de C et Rust vers WebAssembly. Ils s'exécutent dans un runtime WASM géré par le noyau, pas dans V8. L'agent communique avec eux via un PTY virtuel, comme dans un shell.

3. Extension sandbox pour les workloads lourds. Lorsque vous avez réellement besoin d'un vrai navigateur, de binaires Linux natifs ou d'un accès GPU, agentOS peut monter un sandbox E2B ou Daytona à la demande et l'exposer dans l'arborescence du système de fichiers virtuel. C'est le modèle hybride : des agents légers et rapides pour les 80 % de tâches qui n'ont pas besoin d'un OS complet, des sandboxes complets quand c'est nécessaire.

Host Tools : le pattern d'intégration qui compte

Le modèle « host tools » est la fonctionnalité la plus sous-estimée d'agentOS. Votre backend expose des fonctions JavaScript à l'agent comme s'il s'agissait de commandes CLI :

const weatherToolkit = toolKit({
  name: "weather",
  tools: {
    get: hostTool({
      description: "Obtenir la météo d'une ville.",
      inputSchema: z.object({ city: z.string() }),
      execute: async ({ city }) => ({ temperature: 18, conditions: "partiellement nuageux" }),
    }),
  },
});

L'agent appelle agentos-weather get --city Lyon. Pas de HTTP. Pas d'headers d'authentification. Pas de bond réseau. Le noyau fait le pont directement vers votre fonction Node.js. C'est le bon modèle pour l'intégration backend.

ACP : LSP pour agents

L'Agent Communication Protocol (ACP) est un protocole standardisé pour la communication éditeur-agent, explicitement modélisé sur le protocole Language Server Protocol (LSP) qui a découplé les serveurs de langage des IDE. ACP définit les sessions, les transcriptions, la logique de reconnexion et les formats universels d'agents. S'il s'impose, les agents deviennent portables entre éditeurs (Cursor, VS Code, etc.) et les éditeurs accedent à tout l'écosystème d'agents ACP. Le parallèle avec LSP est juste : il a fallu une décennie pour que LSP s'impose malgré le fait que la solution était évidemment bonne. ACP en est aux débuts.

Les chiffres

Tous les benchmarks ci-dessous proviennent des propres matériaux de Rivet. Les benchmarks de la bibliothèque secure-exec (la couche la plus granulaire) sont indépendamment reproductibles, Rivet publie les scripts. Tout le reste est auto-déclaré.

PercentileagentOSE2B (sandboxes les plus rapides)Accélération
Cold start p504,8 ms440 ms92x
Cold start p955,6 ms950 ms170x
Cold start p996,1 ms3 150 ms516x

Mémoire par instance : ~131 Mo (agent de coding complet) vs ~1 024 Mo (Daytona). Shell simple : ~22 Mo vs ~1 Go.

Coût en self-hosted sur Hetzner ARM : 0,0000011 $ par seconde. Comparez avec Daytona à 0,0504 $/vCPU-heure : 17x moins cher. À pleine utilisation en self-hosted, les économies sont dans une toute autre league.

Ce sont les chiffres en self-hosted. Rivet Cloud commence à 20 $/mois pour l'offre managée.

Paysage concurrentiel

agentOS ne compete pas avec Modal (GPU serverless, un problème différent), et ne compete pas vraiment avec E2B ou Daytona, il est conçu pour les compléter. L'extension de montage de sandbox rend la relation explicite : vous utilisez agentOS pour le travail léger, et spin up un sandbox quand vous en avez besoin.

Concurrence réelle : Lambda (mauvais choix pour les agents, cold starts de 100 ms+, aucune primitive agent, limites d'exécution de 15 minutes), Cloudflare Workers AI (inférence uniquement, pas un runtime agent).

Acheteur principal : Ingénieurs backend et plateforme dans des startups qui construisent des fonctionnalités d'agents IA et ont besoin d'une infrastructure d'agents rapide, peu coûteuse et intégrable dans leur backend Node.js. Pas les développeurs solo (bien que l'offre gratuite Apache 2.0 soit réelle), et pas les entreprises nécessitant HIPAA ou SOC 2, agentOS n'a pas encore ces certifications.

L'entreprise

Rivet Gaming, Inc., soutenu par YC W23 + a16z Speedrun SR002. Fondateurs Nathan Flurry et Nicholas Kissel. Flurry a précédemment construit l'infrastructure de jeux servant 15M+ MAU et 20k joueurs simultanés. L'ADN jeu-serveur est visible : c'est de la pensée infrastructure à grande échelle appliquée aux agents, coût à l'échelle, exécution rapide, overhead minimal.

La bibliothèque fondamentale de sandboxing, secure-exec, est open source séparément. Rivet Cloud propose de l'hébergement managé (100k heures-acteur gratuites par mois, payant à partir de 20 $/mois). Les entreprises YC et a16z Speedrun bénéficient de 50 % de réduction pendant 12 mois.

Implications

Si agentOS delivers sur ses chiffres à l'échelle, chaque provider de sandbox subit une pression. Le substrat d'exécution pour une tâche agent simple, opérations fichiers, appels API, scripting, peut passer de environ 0,05 $/vCPU-minute à 0,0000011 $/seconde. C'est une réduction de coût de 500x pour le runtime, pas pour le LLM.

Pour OpenClaw, Hermes et chaque framework d'agents : l'architecture isolat V8 + FS virtuel est la chose à surveiller. Même si vous n'adoptez pas agentOS directement, le pattern « host tools » (appels de fonction directs, pas d'auth HTTP), le modèle acteur-par-session et l'approche hybride sandbox sont des idées architecturales qui méritent d'être absorbées.

ACP vs MCP est une bataille distincte et plus longue. MCP a la minds share. ACP est architecturalement plus propre. Le parallèle avec LSP mérite d'être gardé en tête, la bonne réponse ne gagne pas toujours dès le premier jour.

Avertissements

C'est du beta. Seul l'agent Pi est prêt pour la production aujourd'hui ; Claude Code, Codex, OpenCode et Amp sont listés comme « bientôt disponibles ». Aucun audit de sécurité tiers n'a été publié. La couche POSIX WASM est partielle, git et make sont planifiés mais pas encore livrées. GitHub compte 1 576 étoiles, ce qui est modeste. L'architecture est solide ; l'écosystème est naissant.

L'image qui ouvre cet article est une carte de circuit. Cela semblait approprié : agentOS est une infrastructure pour ceux qui se préoccupent de ce qui se cache sous le capot.

Questions fréquentes

Articles connexes

Plus de couverture avec des sujets et tags en commun.

Bug Claude Code #74066 : Des Utilisateurs Signalent une Fuite de Contexte Entre Workspaces sur Sonnet 5, Anthropic N'a Pas Encore Répondu
security

Bug Claude Code #74066 : Des Utilisateurs Signalent une Fuite de Contexte Entre Workspaces sur Sonnet 5, Anthropic N'a Pas Encore Répondu

Un bug ouvert déposé contre Claude Code le 2026-07-04 par un utilisateur [Enterprise ZDR](https://docs.anthropic.com/en/docs/build-with-claude/zero-data-retention) décrit une session de travail sur Sonnet 5 qui commence soudainement à faire référence à une construction de temple Minecraft non liée, puis persiste dans la mauvaise tâche dans son récapitulatif. Le rapporteur (GitHub : [@milesrichardson-edb](https://github.com/milesrichardson-edb), issue [anthropics/claude-code#74066](https://github.com/anthropics/claude-code/issues/74066)) est sur Enterprise Zero Data Retention, le niveau qu'Anthropic présente spécifiquement comme isolé par session. Le triage sur le JSONL de session locale du rapporteur à `~/.claude/projects/<encoded-cwd>/<session-id>.jsonl` montre que le texte fuité n'est pas dans la transcription, ce qui exclut une fuite de contexte locale par chevauchement de fichier. Quatre autres utilisateurs dans les commentaires (avec des historiques de travail remontant à l'an dernier) décrivent un comportement quasi identique sur Claude Code, Claude Mobile et Claude deep research. Le fit architectural le plus plausible est un état de cache KV partagé dans l'inférence ([selon @yv3nne dans les commentaires](https://github.com/anthropics/claude-code/issues/74066#issuecomment-4880448776)), mais aucun ingénieur d'Anthropic n'a commenté l'issue dans les 22 heures depuis son dépôt, et l'issue a atteint le sommet de [Hacker News](https://news.ycombinator.com/item?id=42481789) le 2026-07-04. Le ton dans le fil est partagé : la moitié suspectant une vraie réutilisation de cache plateforme, l'autre moitié suspectant une [hallucination spécifique à Sonnet 5 déclenchée par un lexer Pygments](https://github.com/anthropics/claude-code/issues/74066#issuecomment-4880334711). Les deux lectures sont crédibles.
Fastify v5.9.0 ajoute `request.mediaType` et `onMaxParamLength`, durcit la confiance dans les en-têtes `forwarded`, découpe les grandes réponses HTTP/2 et migre les tests de types vers TSTyche
security

Fastify v5.9.0 ajoute `request.mediaType` et `onMaxParamLength`, durcit la confiance dans les en-têtes `forwarded`, découpe les grandes réponses HTTP/2 et migre les tests de types vers TSTyche

Fastify v5.9.0, publié le 2026-06-28 (github.com/fastify/fastify), est la première version mineure de la ligne v5 en 2026 et un cycle substantiel de 65 PR. Les fonctionnalités principales sont `request.mediaType` (un accesseur typé pour le type de média négocié, [#6653](https://github.com/fastify/fastify/pull/6653) par climba03003), l'option de route `onMaxParamLength` ([#6716](https://github.com/fastify/fastify/pull/6716) par climba03003), et un correctif de sécurité qui ne fait plus confiance à `X-Forwarded-Host` et `X-Forwarded-Proto` quand le socket entrant est absent ([#6684](https://github.com/fastify/fastify/pull/6684) par mcollina). Le cycle livre un correctif de découpage en morceaux du buffer HTTP/2 pour les grandes réponses ([#6746](https://github.com/fastify/fastify/pull/6746) par mcollina), trois gains de performance liés au schéma (parsing différé du ContentType dans `getSchemaSerializer` #6692, mise en cache des objets `ContentType` analysés dans `ContentTypeParser` #6694, garde `typeof` avant `toString.call` dans `send` / `onSendEnd` #6693 par aquie00t), Node.js 26 ajouté à la matrice de tests ([#6728](https://github.com/fastify/fastify/pull/6728) par Fdawgs) et Node.js 20 retiré de la matrice yarn CI ([#6662](https://github.com/fastify/fastify/pull/6662) par Tony133), la migration de la suite de tests de types d'assertions `expect-type` artisanales vers [TSTyche](https://github.com/mrazauskas/tstyche) ([#6532](https://github.com/fastify/fastify/pull/6532) par mrazauskas, avec les suites #6726 et #6727), et un bump de fastify-plugin v6.0.0 purement TypeScript. Autres correctifs notables : déduplication de `res.end` du trailer (#6676), garde de complétion dupliquée du trailer (#6714), `error.code` sur les erreurs de routage (#6678), `hasRequestDecorator` / `hasReplyDecorator` détectant les propriétés natives assignées par constructeur (#6753), `getValidationFunction()` autorisé à retourner `undefined` (#6665), et un nettoyage du `_meta` du socket qui ferme une fuite keep-alive (#6799).
Deno 2.9 livre un démarrage à froid 1,98x plus rapide, 2,2 à 3,1x moins de RSS en charge, le minimum-release-age npm activé par défaut, la politique de confiance no-downgrade et les tests par snapshot natifs
runtimes

Deno 2.9 livre un démarrage à froid 1,98x plus rapide, 2,2 à 3,1x moins de RSS en charge, le minimum-release-age npm activé par défaut, la politique de confiance no-downgrade et les tests par snapshot natifs

Deno 2.9 (Bartek Iwańczuk, publié le 2026-06-25 sur deno.com/blog/v2.9) est la plus grande release Deno du cycle. Le démarrage à froid passe de 34,2 ms à 17,3 ms (1,98x), le pic RSS sur la charge realworld de Deno.serve baisse d'un facteur 2,2 (142 Mo → 64 Mo) et de 3,1x sur les corps de 1 Mio (197 Mo → 63 Mo), et le débit Deno.serve grimpe de 1,27x en realworld (56,8k → 72,4k req/s), 1,11x en plaintext, et 1,18x sur les corps de 1 Mio. Durcissement supply chain : le npm minimum-release-age est activé par défaut avec une fenêtre de 24h (PR #35458), et une nouvelle politique de confiance opt-in no-downgrade (PR #34927) refuse de résoudre toute version dont la preuve de confiance (publication échelonnée, trusted publishing, attestation de provenance) est plus faible que la meilleure preuve sur toute version précédemment publiée du même paquet. Parité du runner de tests : t.assertSnapshot() natif (#35139), Deno.test.each (#34938), --shard pour fan-out CI (#35057), retry et repeats (#35053), sélection change-aware --changed et --related (#35199), et seuils de coverage (#35056). Interop lockfile : deno install seed deno.lock depuis package-lock.json, pnpm-lock.yaml, yarn.lock ou bun.lock (#34296, #35330, #35346, #35350, #35394), pnpm-workspace.yaml auto-migre vers deno.json / package.json (#34993), et les marqueurs de conflit de fusion git dans deno.lock se résolvent automatiquement (#34726). Plus : deno desktop sort de l'expérimental (PR #33441 du 16 juin), sous-commandes deno link / deno unlink / deno list / deno watch, --unsafe-proto stable (#34738), Web Locks API (#31166), Happy Eyeballs v2 (RFC 8305) (#31726), navigator.userAgentData (#34743), la proposition WebCrypto Modern Algorithms (ML-KEM, ML-DSA, SLH-DSA, ChaCha20-Poly1305, famille SHA-3, KMAC, Argon2) (#34447, #34448, #34914, #35223), compat Node 26.3.0 (#34746, #34747), Node-API v10 (#35270), et imports de modules CSS sous --unstable-raw-imports (#35093). Plus de 165 PRs mergent dans ce cycle.

Commentaires

Connexion Connectez-vous pour participer à la conversation.

Pas encore de commentaires. Soyez le premier à partager vos pensées.