--- 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` (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é).