Case study · Duo · 2025 — 2026

CRAI l'IDE conversationnel du hardware.

« Claude Code pour le hardware. » CRAI est un IDE desktop conversationnel pour tout ce qui est physique et embarqué : robotique, drones, IoT, firmware, CNC, PCB, ROS2, simulation, CAD. Un agent IA pilote un vrai terminal Linux isolé dans un conteneur Docker par projet — on le regarde générer, tester et itérer en temps réel.

Projet en binôme, de la première ligne au packaging. Mon rôle : fullstack & agent IA — architecture, boucle agent, backend, frontend 3D, pipeline CI, 918 tests automatisés.

Rôle
Fullstack & agent IA (binôme)
Période
2025 — 2026
Statut
v1.0 livrée · v1.1 en cours
Stack
Tauri 2, React 18, TypeScript, FastAPI, Python, Docker, Claude API, Three.js, Qdrant
CRAI — IDE hardware : l'agent IA génère une frame de drone 5 pouces et son firmware ESC dans le chat (outils Bash et écriture de fichiers), viewer 3D au centre, arborescence de fichiers classée par catégories, statut du conteneur Docker et coût de génération dans la barre d'état

Le problème résolu

Construire un objet physique — un drone, une station météo, un bras robotisé — demande de jongler entre cinq mondes outillés séparément : la CAO (Fusion, SolidWorks), l'électronique (KiCad), le firmware (PlatformIO, STM32Cube), la simulation (Gazebo) et le sourcing de composants. Chaque outil a sa courbe d'apprentissage, ses formats, ses exports. Le coût d'entrée est énorme, et l'itération est lente.

CRAI ramène tout ça dans une seule conversation :

Architecture

Trois couches, trois responsabilités :

  1. Desktop Tauri 2 + React 18 — le shell natif (Rust) embarque une UI React : chat streaming, viewer 3D (react-three-fiber), éditeur de graphe (xyflow), Monaco, terminal xterm. État partagé entre TanStack Query (données serveur) et Zustand (état UI).
  2. Backend FastAPI + boucle agent — orchestre les tours de l'agent (Claude Opus 4.7, sous-agents Haiku), streame chaque événement en SSE (texte, appels d'outils, diffs, coût), persiste graphe, fichiers, checkpoints et mémoire cross-session (Qdrant).
  3. Un conteneur Docker par projet — le sandbox où tout s'exécute : génération de géométrie (OCCT), FEA, compilation firmware (ESP32, STM32, Arduino), simulation physique, ROS2. L'isolation rend l'agent libre et inoffensif.

L'agent et ses outils primitifs

Le choix de design central : peu d'outils, mais primitifs. Plutôt qu'une API par fonctionnalité (« generate_frame », « compile_firmware »…), l'agent reçoit 14 outils bas niveau — bash, lecture/écriture de fichiers, manipulation du graphe, rendu 3D… Les capacités émergent de leur composition, comme pour un humain devant un terminal.

Git pour le hardware

Un robot n'est pas un dossier de fichiers : c'est un graphe — des pièces mécaniques, des composants électroniques, du firmware, reliés par des arêtes typées (mounted_on, powers, controls, simulates…). CRAI versionne ce graphe comme git versionne du code :

Qualité — 918 tests

Un agent autonome qui exécute du code arbitraire exige une base testée sérieusement :

Défis rencontrés

Apprentissages

  1. Les primitives battent les features. Chaque fois que j'ai été tenté d'ajouter un outil spécialisé, la bonne réponse était de rendre les primitives plus fiables. L'agent compose mieux que je ne prévois.
  2. La transparence est une feature de sécurité. Montrer chaque commande, chaque durée, chaque coût transforme la méfiance envers l'agent en supervision. C'est ce qui rend l'autonomie acceptable.
  3. L'infrastructure de test est le produit. Sur un projet à deux avec un agent non déterministe, les 918 tests et les cassettes ne sont pas du confort : c'est ce qui permet de refactorer la boucle agent un an après sans tout casser.