---
name: multi-profile-codex-claude-model-catalogue-scoping
description: memory note multi-profile-codex-claude-model-catalogue-scoping
metadata:
  type: project
---
# Cadrage : profils multiples Codex/Claude + catalogue de modèles

Demande utilisateur : plusieurs profils Codex et Claude, chacun avec son modèle, assignables aux
agents ; lister les modèles plutôt que saisie manuelle quand possible.

## État vérifié de l'existant (2026-07-26)

Le backend est déjà générique multi-profils, contrairement à ce qu'on pourrait croire à la lecture
seule des mémoires F35/F36 (qui documentaient le cas OpenCode) :

- `AgentProfile` (crates/domain/src/profile.rs) porte déjà `model: Option<String>` (ticket #99,
  explicitement prévu pour Codex/Claude), et `profiles.json` (FsProfileStore) est une **liste**
  indexée par `id`, pas un slot singleton par provider.
- Commandes déjà câblées : `list_profiles`, `save_profile` (upsert générique par id),
  `delete_profile`, `reference_profiles`, `detect_profiles`.
- Ce qui existe **seulement pour OpenCode** : `clone_opencode_profile_from_seed` (alloue un id
  frais via IdGenerator) et `save_opencode_provider_profile`, plus un vrai catalogue de modèles
  (`crates/application/src/agent/provider_catalogue.rs`, lit le cache models.dev d'OpenCode avec
  repli statique).
- `catalogue.rs` : un seul profil de référence Claude et un seul Codex, aucun `.with_model(...)`.
- Frontend `ProfilesSettings.tsx` : simple list+delete, pas de create/duplicate/edit inline ;
  toute édition rouvre `FirstRunWizard`.

## Gaps identifiés (pas de migration de schéma nécessaire)

1. Backend : généraliser le pattern `CloneOpenCodeProfileFromSeed` (fresh_profile_id via
   IdGenerator) en un use case `CloneProfileFromSeed` non spécifique à OpenCode, pour dupliquer un
   profil Claude/Codex avec un nom + `model` en override. Ne PAS laisser le frontend miner l'id
   (romprait la discipline IdGenerator déjà en place).
2. Backend : catalogue de modèles Claude/Codex — aucune API fiable côté CLI, donc liste statique
   curée (même esprit que `static_fallback_catalogue()` d'OpenCode), exposée par commande Tauri
   infaillible (`list_claude_models`/`list_codex_models` ou générique par `structuredAdapter`).
   Le frontend garde toujours un champ de saisie manuelle en repli (liste jamais garantie
   exhaustive).
3. Frontend : refonte `ProfilesSettings.tsx` en onglets Codex/Claude/OpenCode avec
   create/duplicate/edit/delete par onglet + `ModelSelect` searchable partagé ; simplifier
   `FirstRunWizard` pour ne créer qu'un profil par défaut par provider détecté, avec renvoi vers
   Settings pour en ajouter d'autres.

## Découpage de livraison
DevBackend (use case + catalogues + commandes, petit lot, zéro migration) → DevFrontend (refonte
Settings + first-run simplifié) → QA (créer 2 profils Claude modèles différents + 2 Codex, assigner
à des agents distincts, vérifier le bon modèle atteint la CLI au lancement, non-régression
OpenCode) → Git (branche feature unique, lot petit et couplé).