Skip to content

Vue d'ensemble de l'architecture codex ​

源码版本rust-v0.145.0

codex est l'Agent de codage open source d'OpenAI ; cette version est la réécriture en Rust (l'ancienne version TypeScript est reléguée dans codex-cli/ comme simple coquille npm). Le cœur des sources est dans codex-rs/, un Cargo workspace regroupant 90+ crate indépendants, découpés très finément par responsabilité. Ce site démonte couche par crate, chaque fichier clé portant un SrcLink qui pointe directement vers la ligne GitHub correspondante.

Découpage en couches ​

Aperçu des principaux crate ​

CouchecrateResponsabilité
Entrée CLIclirépartiteur de sous-commandes, doctor, login, mcp_cmd
Cœur de l'Agentcoreboucle principale de l'Agent, client LLM, compaction, thread de session, outils
Protocole de patchapply-patchformat de patch textuel apply_patch
Bac à sable (sandbox)sandboxing / linux-sandbox / bwrap / windows-sandbox-rsisolation de commande multiplateforme
Politique d'exécutionexecpolicyclassification et stratégie d'autorisation des commandes
Exécutionexec / exec-serverexécution de commande et protocole exec-server
TUItuiinterface terminal, chatwidget, diff_model
App-serverapp-server / app-server-protocol / app-server-transportservice d'orchestration et protocole
MCPmcp-server / rmcp-client / codex-mcp / connectorsintégration Model Context Protocol
Providermodel-provider / model-provider-info / backend-clientabstraction des model provider
Cloudcloud-tasks / cloud-configexécution de tâches dans le cloud
Configurationconfig / codex-homesystème de config et répertoire home
Périphériquesprompts / skills / memories / hooks / plugin / rolloutprompts, skills, mémoires, hooks, plugin, trace

Une phrase par couche ​

  • Entrée CLI : répartition des sous-commandes de la commande codex ; main.rs analyse avec clap puis route vers les sous-commandes.
  • Cœur de l'Agent : la boucle principale consomme les Op, pilote les appels LLM et l'exécution des outils ; CodexThread est l'entrée d'orchestration de session.
  • Exécution sandbox : les commandes tournent dans un bac à sable (sandbox) ; execpolicy classifie d'abord la commande pour décider autorisation/blocage/approbation, puis la confie au sandbox de la plateforme.
  • TUI/App-server : la TUI est le frontend terminal ; App-server expose les capacités de l'Agent via un protocole aux IDE/clients externes.
  • Provider/Cloud : model-provider abstrait les différents backend ; cloud-tasks déporte l'exécution des tâches vers le cloud.

Motivations de conception ​

codex a choisi une réécriture Rust, motivée par le bac à sable (sandbox) et la performance. Un Agent de codage lance des commandes shell arbitraires sur la machine de l'utilisateur ; sans isolation fiable des processus, pas de sécurité. Le système de types et les abstractions à coût nul de Rust permettent à un découpage de 90+ crate très fin de n'entraîner aucun coût à l'exécution. Le workspace est découpé par responsabilité plutôt qu'en un seul gros crate, pour l'incrément de compilation et la clarté des frontières — modifier la TUI ne recompile pas core.

Malentendus fréquents ​

  • « codex est un outil CLI » — à moitié vrai. La CLI n'est que l'entrée ; ce qui tourne vraiment, c'est la combinaison des trois couches core + sandbox + tui/app-server.
  • « La réécriture en Rust sert à être rapide » — Rust apporte l'isolation sandbox et la sécurité au niveau processus ; la performance est un sous-produit.
  • « apply_patch est un format privé à codex » — c'est un protocole de patch textuel utilisé par codex, généré par le modèle, parsé et appliqué par le crate apply-patch.

Ordre de lecture recommandé ​

  1. Entrée CLI et répartition des sous-commandes — depuis la commande codex, voir comment se fait le routage
  2. Boucle principale de l'Agent — comment l'Agent consomme les Op pour piloter le LLM
  3. Client LLM et Responses API — comment on parle au backend OpenAI
  4. Bac à sable multiplateforme — comment les commandes sont isolées
  5. Classification execpolicy — comment les commandes sont classées puis autorisées
  6. Architecture App-server — comment exposer l'Agent via un protocole à l'externe

Après cette lecture, vous saurez expliquer toute la chaîne, depuis « l'utilisateur tape une commande » jusqu'à « le LLM exécute des outils et modifie des fichiers ».