--- id: "45733f3f-5ef5-4f33-96e7-25afddcd1ce6" number: 99 title: "Modèle par agent contrôlable pour Codex & Claude (headless + TUI) — égaler le pattern OpenCode" status: "closed" priority: "high" sprint: null links: [{"target":"#98","kind":"relatesTo"}] agentRefs: [] createdBy: {"kind":"agent","agent_id":"a6ced819-b893-4213-b003-9e9dc79b9641"} updatedBy: {"kind":"user"} createdAt: 1784987973464 updatedAt: 1785271085627 version: 4 --- ## Problème Aujourd'hui IdeA **ne contrôle pas le modèle** pour les moteurs **Codex** et **Claude** : le modèle utilisé par le headless inter-agent (`codex exec` / `claude -p`) **et** par la TUI interactive est le **défaut du binaire CLI installé**, indépendamment du profil AI de l'agent. - Aucun flag `--model` n'est passé au spawn (`codex.rs:215-239`, `claude.rs:273-284`). - `codex_config_toml` (`lifecycle.rs:2941-2955`) **n'écrit jamais de clé `model`**. - `AgentProfile.model` (`profile.rs:1008`) existe mais est du **code mort** (jamais consommé). - Le `/model` tapé dans la TUI ne se propage **pas** au headless : ce sont deux processus OS séparés (PTY vs `codex exec`/`claude -p`) avec des threads distincts. Le `CODEX_HOME`/cwd est partagé mais rien n'écrit le modèle sur disque côté IdeA. **Contraste** : pour **OpenCode**, le modèle du profil (`OpenCodeConfig.model` / `OpenCodeProviderConfig.model`) **est** celui utilisé par le headless, via le `opencode.json` isolé pointé par `OPENCODE_CONFIG` (`lifecycle.rs:2686-2689`). Un profil IdeA = un (provider, modèle, clé scellée). ## Objectif produit Qu'il existe un **modèle par défaut par agent**, défini dans le **profil AI**, qui soit : 1. utilisé par le **headless inter-agent** (`idea_ask_agent`) ; 2. **exposé par la TUI au lancement** (valeur initiale du modèle dans la CLI) ; pour les **trois** moteurs — OpenCode (déjà OK), Codex et Claude (à égaler). ## Périmètre - **Backend** : nouveau VO domaine miroir d'`OpenCodeProviderConfig`, renderers de config écrivant le modèle, use cases de persistance. - **UI** : duplication / création de profils Codex et Claude comme OpenCode (catalogue de providers, sélection du modèle, clé scellée via SecretRef). ## Lié à - **#98** (relatesTo) : même famille « contrôle du modèle au spawn » (côté OpenCode, résolveur zai/glm-5.2). Indépendant mais cohérent.