# ADR-0002 — Più motori CLI (Claude Code, Codex, Antigravity) su Windows e Linux - **Stato**: Proposta - **Data**: 2026-10-15 - **Collegato a**: [ADR-0001](0001-gui-multipiattaforma-avalonia.md) (GUI e piattaforme) ## Contesto L'app lancia solo `claude -p`. Si vuole usare dalla stessa chat anche **OpenAI Codex CLI** e **Antigravity CLI** (`agy`), così come `claude` già installati da terminale dall'utente, su Windows e Linux. L'app non li installa e non gestisce login: sono programmi esterni, autenticati a parte. ## Criteri di decisione 1. Aggiungere un motore costa una definizione dichiarativa, non nuova logica sparsa. 2. Funziona uguale su Windows e Linux: i motori si trovano nel PATH come da terminale. 3. Un solo punto di avvio processo (cartella dell'exe, stdin chiuso, `ArgumentList`), condiviso da CLI e GUI. 4. Nessuna scorciatoia che disattivi i controlli di permesso senza una scelta esplicita dell'utente. ## Decisione - **Astrazione "motore"** in C#. Ogni motore descrive: nome e eseguibile, argomenti per il primo messaggio e per la ripresa, elenco modelli, supporto effort, modo per ottenere l'id di sessione. `RunClaude` diventa `RunEngine(engine, …)`. - **Rilevamento** dei motori cercando l'eseguibile nel PATH (su Windows anche le estensioni di PATHEXT). I motori assenti sono disabilitati nelle Impostazioni, con messaggio chiaro; la CLI esce con 127 come oggi. - **Una chat = un motore**. Il file JSON della chat memorizza il motore; il contesto di sessione non passa da un motore all'altro, quindi cambiare motore apre una nuova chat. - **Impostazioni** nella GUI: motore attivo, modello, effort (solo se supportato), persistite su disco accanto alla cronologia. La CLI ottiene `--engine`. - **Permessi**: di default sola lettura / nessun bypass dei controlli; concedere di più è un'opzione esplicita. - **Output**: ogni motore ha un parser che lo normalizza in testo markdown prima del rendering. ## Comandi dei motori Da verificare con `--help` delle versioni installate: derivano da documentazione e ricerche, non da prove su questo PC, dove `codex` e `agy` non sono installati. | | Claude Code | Codex CLI | Antigravity CLI | |---|---|---|---| | Comando | `claude -p ` | `codex exec ` | `agy -p ` | | Continuare | `--session-id ` poi `--resume ` | `codex exec resume ` | da verificare | | Modello | `--model` | `-m` / `--model` | da verificare | | Effort | `--effort` | via `--config` (da verificare) | non noto | ## Conseguenze **Positive**: un solo flusso di avvio; nuovi motori aggiungibili con una definizione; elimina la duplicazione CLI/GUI. **Negative**: i flag delle CLI cambiano nel tempo e vanno mantenuti; le sessioni non si trasferiscono tra motori; più superficie da testare su due sistemi operativi. ## Rischi e da verificare - [ ] **Codex**: l'id di sessione lo genera Codex e non l'app; va letto dall'output (probabilmente con output JSON) per riprendere la chat. - [ ] **Antigravity**: segnalato un blocco di `agy -p` da sottoprocesso con output rediretto su Windows ([issue #318](https://github.com/google-antigravity/antigravity-cli/issues/318)). Provare con `--print-timeout` e prevedere un messaggio d'errore. I flag vanno messi prima di `-p`. Da provare anche su Linux. - [ ] **Forma dell'eseguibile**: `claude` è un .exe nativo avviabile direttamente; Codex e Antigravity, se installati con un gestore di pacchetti (es. npm), su Windows possono essere script `.cmd` che richiedono `cmd.exe /c`. Su Linux sono normali eseguibili o script con shebang. Verificare e gestire per motore. - [ ] Autenticazione: ogni CLI deve essere già autenticata; l'app mostra l'errore del motore senza gestire login. - [ ] Formato dell'output (testo o JSON) e normalizzazione per ciascun motore. - [ ] Mappatura effort e modelli per motore, con elenco modelli aggiornabile. ## Riferimenti - Passi: [ROADMAP.md](../ROADMAP.md), Fase 4. - Installazione e accesso dei motori: [INSTALL.md](../INSTALL.md).