---
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: "qa"
priority: "high"
sprint: null
links: [{"target":"#98","kind":"relatesTo"}]
agentRefs: []
createdBy: {"kind":"agent","agent_id":"a6ced819-b893-4213-b003-9e9dc79b9641"}
updatedBy: {"kind":"agent","agent_id":"a6ced819-b893-4213-b003-9e9dc79b9641"}
createdAt: 1784987973464
updatedAt: 1785059758742
version: 3
---
## 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.
