Files
agent-wiki-ui/docs/MVP.md
T
davideandClaude Sonnet 5.5 5a18b9c23d GUI a chat con rendering markdown, sessioni e correzione del thread STA
Sostituisce la GUI a singola richiesta con una chat in stile claude.ai:
conversazione in markdown (Markdig + WebView2) in alto, input in basso,
contesto mantenuto con --session-id / --resume. La GUI ora gira su un
thread STA, necessario a WebView2. Documentazione aggiornata.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-08 12:24:03 +02:00

3.2 KiB

MVP (doc-first)

Obiettivo

Eseguibile C# a riga di comando che inoltra un prompt a Claude Code (claude) lanciandolo nella directory dell'eseguibile, e ne mostra l'output.

Uso

llmrun.exe "spiega questo progetto"

Tutti gli argomenti sono uniti in un unico prompt.

Comportamento

  1. Se non ci sono argomenti: stampa l'uso ed esce con codice 2.
  2. Avvia claude -p <prompt> (modalità non interattiva) con WorkingDirectory = AppContext.BaseDirectory.
  3. Ritrasmette stdout e stderr del processo figlio in tempo reale.
  4. Esce con lo stesso exit code di claude.
  5. Se claude non è trovato: messaggio chiaro ed exit code 127.

GUI (chat)

Senza argomenti si apre una finestra WinForms in stile claude.ai/ChatGPT. Con argomenti resta la CLI.

  • In alto: la conversazione, a messaggi alternati utente/Claude. Le risposte di Claude sono renderizzate in markdown (titoli, liste, tabelle, blocchi di codice) con Markdig dentro un WebView2; i messaggi utente sono testo semplice. Il rendering segue il tema chiaro/scuro di Windows.
  • In basso: campo di input multilinea e pulsante Invia. Invio invia, Maiusc+Invio va a capo.
  • Sopra l'input: menu Modello (predefinito, Fable 5.1, Opus 5.5, Sonnet 5.5, Haiku 5.5: ogni voce mostra versione e ID completo, che è ciò che viene passato a claude; oppure ID digitato a mano), menu Effort (predefinito, low, medium, high, xhigh, max) e pulsante Nuova chat. Passati come --model / --effort; con "predefinito" il flag viene omesso. Solo GUI.
  • Contesto: la conversazione prosegue con claude -p --session-id <guid> al primo messaggio e --resume <guid> ai successivi. "Nuova chat" svuota la vista e genera un nuovo guid.
  • La risposta compare a fine generazione (nessuno streaming nella GUI); durante l'attesa si vede "Claude sta scrivendo…". Se claude esce con errore, lo stderr appare come messaggio di errore.
  • I link nelle risposte si aprono nel browser di sistema, non nella finestra. L'HTML grezzo nel markdown è disabilitato.
  • Finestra 1000x700.

Scelte tecniche

  • .NET 10 (WinForms). Program.cs (CLI + avvio) e Gui.cs (chat). Dipendenze NuGet solo per la GUI: Markdig (markdown→HTML) e Microsoft.Web.WebView2 (richiede il runtime WebView2, già presente su Windows 11).
  • ProcessStartInfo.ArgumentList per passare il prompt (niente problemi di quoting).
  • claude è un .exe nativo (~/.local/bin): si avvia direttamente, senza cmd /c. Lo stdin è chiuso subito per evitare l'attesa di 3s di claude.
  • Working dir: AppContext.BaseDirectory, non la cwd del chiamante.

Fuori scope (MVP)

Streaming token-per-token nella GUI, annullamento di una risposta in corso, salvataggio/riapertura delle chat, config file, logging su file, test automatici, supporto Linux/macOS.

Criteri di accettazione

  • Eseguito da un'altra cartella, claude parte nella cartella dell'exe (verificabile chiedendo "pwd").
  • L'output appare in streaming, non solo alla fine.
  • L'exit code è propagato.
  • Un prompt con virgolette e spazi arriva intatto.

Domande aperte

  • Permessi: serve --allowedTools o --permission-mode per l'uso non interattivo?
  • Formato output: testo semplice o --output-format stream-json?