id: ADR-001 title: Rust est le langage d’implémentation de ZeroClaw date: 2026-07-04 status: accepté relates-to:
- docs/book/src/foundations/fnd-001-intentional-architecture.md
- docs/book/src/architecture/crates.md
- Cargo.toml
ADR-001 : Rust est le langage d’implémentation pour ZeroClaw
Ceci est un enregistrement rétroactif d’une décision prise avant le processus ADR formel. La date exacte de la décision d’origine n’est pas disponible dans cet enregistrement ; la date ci-dessus est la date à laquelle cet ADR a été ajouté à la documentation d’architecture.
Cet enregistrement a été rédigé à partir de FND-002 §6.3 et de la structure actuelle du référentiel. Il n’a pas été récupéré à partir d’un ancien fichier ADR.
Contexte
ZeroClaw est un runtime d’agent local-first dont la distribution principale doit s’exécuter sans qu’un runtime de langage requis soit installé par l’utilisateur. Il s’intègre à de nombreuses frontières de système d’exploitation et de réseau, et conserve un contrôle strict sur la sécurité, la mémoire, les processus, la journalisation et le comportement de configuration.
Le projet comporte également des expériences de systèmes d’agents adjacents dans d’autres langages. Ces projets sont utiles pour l’exploration, mais le runtime a besoin d’un seul langage d’implémentation pour le code livré en tant que ZeroClaw : providers, channels, tools, memory, config, gateway, prise en charge matérielle et la CLI destinée à l’utilisateur.
Rust répond aux exigences qui façonnent le runtime :
- distribution prévisible d’un binaire unique ;
- propriété explicite et gestion des erreurs aux frontières d’E/S et de sécurité ;
- réseautage asynchrone et supervision de processus sans une grande dépendance d’exécution ;
- builds feature-gated pour les canaux, le matériel, la passerelle et les capacités optionnelles ;
- un workspace Cargo pour les crates, les tests, la génération de docs et les workflows de release.
Décision
Le runtime de ZeroClaw, les crates first-party, la CLI, la gateway, les hosts d’outillage, les intégrations de providers, les intégrations de canaux, les backends de mémoire, le schéma de configuration et le support matériel sont implémentés en tant que membres du workspace Rust.
Du code non-Rust peut exister en périphérie lorsqu’il s’agit de la frontière correcte : scripts shell, aides à la release et au packaging, assets web générés, CLI externes, serveurs MCP, scripts de skill et plugins invités. Ces surfaces peuvent supporter, empaqueter, piloter ou étendre ZeroClaw, mais elles ne deviennent pas la base d’implémentation du runtime principal à moins qu’une nouvelle ADR acceptée ne remplace celle-ci.
Conséquences
Conséquences positives :
- Les contributeurs peuvent raisonner sur le comportement d’exécution via un seul espace de travail typé plutôt qu’au moyen de plusieurs environnements d’exécution de langages.
- La compilation, le lint, les tests, la génération de la documentation, la publication et la gestion des fonctionnalités pour le workspace principal transitent tous par Cargo.
- Le code sensible à la sécurité bénéficie du modèle de possession de Rust et de la propagation explicite des erreurs.
- Les intégrations de première partie partagent les limites de crate, les contrats de trait et les conventions de journalisation/configuration.
Conséquences négatives :
- Les contributeurs qui ne connaissent que TypeScript, Python, Go ou shell doivent surmonter une courbe d’apprentissage de Rust avant de modifier le comportement principal.
- Les intégrations Web, UI et de services externes nécessitent une conception explicite des frontières au lieu de partager librement l’état de l’application avec le runtime.
- Les documentations générées, les catalogues de localisation et les artefacts de publication dépendent souvent des outils Rust, même lorsque la sortie visible est du Markdown, du Fluent, du HTML ou des métadonnées d’empaquetage.
- Les expérimentations dans les projets adjacents doivent être délibérément portées en Rust avant de devenir le comportement d’exécution de ZeroClaw.
Décisions de suivi :
- ADR-002 documente la façon dont les points d’extension Rust sont exposés dans le workspace.
- ADR-003 enregistre la frontière entre plugins et composants.
Références
- FND-001: Architecture intentionnelle
- Architecture : Crates
- Protocole de plugin
AGENTS.mdCargo.toml