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 ».