Alla fine avrai Claude Code in esecuzione in un pannello del terminale, Codex in un altro e un paio di chat e agenti attivi a lato. Un'unica bacheca in osFoundry li elenca tutti. Quando Claude Code si ferma su "Do you want to make this edit?", la sua scheda passa nella colonna Needs you (serve il tuo intervento) entro un secondo. Un clic apre il pannello proprio su quel prompt. Rispondi e la scheda torna in Running (in esecuzione).
Chi fa cosa
| Claude Code | App desktop di osFoundry | |
|---|---|---|
| Login | Il suo login di Claude, nel suo processo | Non ne conserva nulla. Per un agente che ha avviato lei, rimuove una ANTHROPIC_API_KEY ereditata, così un'esecuzione con abbonamento non viene fatturata come API |
| Dove gira | Un vero PTY nella schermata Terminal, nella cartella del tuo progetto | Possiede il PTY e tiene una copia emulata dello schermo |
| Chi approva | Tu, nel prompt dei permessi di Claude Code stesso | Non risponde mai al posto tuo. Sposta solo la scheda e apre il pannello |
| Come si conosce lo stato | Claude Code disegna la sua interfaccia come al solito | Legge lo schermo ogni 700 ms confrontandolo con regole pubblicate, e riceve i report degli hook quando ha avviato lei l'agente |
| Dove restano i dati | I tuoi file, il tuo terminale | Il testo dello schermo resta nella memoria dell'app sul tuo Mac. Chiudere una sessione di agente scrive un riepilogo nei tuoi file di conoscenza |
Configurazione
- Apri la schermata Terminal (barra laterale Main → Terminal,
/terminal) e avvia gli agenti come fai di solito. Ogni pannello è un PTY a sé.
~/code/shop-api (fix/checkout-retry) $ claude ~/code/shop-web $ codex osFoundry riconosce Claude Code dal programma che occupa il terminale, oppure dal suo schermo se l'hai avviato tramite uno script wrapper. Non c'è niente da configurare.
- Apri Sessions (barra laterale Main → Sessions,
/sessions). Ogni chat, agente singolo, team, loop e sessione di terminale è una scheda. Le colonne sono Running, Needs you, Paused (in pausa), Idle (inattiva), Done (conclusa) e Failed (fallita). Non puoi trascinare una scheda in una colonna per impostarne lo stato; la colonna dipende da ciò che riporta il runtime.
- Fai clic su Filter (diventa Filtered quando un filtro è attivo) e spunta Needs me only (solo ciò che richiede me). I tipi (Chat, Agent, Team, Loop, Terminal) e l'intervallo di tempo restano com'erano.
Restano due schede: una chat che ha fatto una domanda e il terminale di Claude Code in shop-api.
Una chat finisce qui quando il suo messaggio più recente termina con una domanda di cui aspetta ancora la risposta. Un terminale finisce qui quando il suo stato è blocked, ed è quello che mostra il passo successivo.
- Fai clic sulla scheda
shop-api. La schermata Terminal si apre su quel pannello, con il prompt ancora visibile. La barra a sinistra segna Claude Code come "Needs you · shop-api" e Codex come "Working · shop-web".
Con più pannelli aperti, Mod+. (⌘. su Mac) salta al prossimo agente che ha bisogno di te. Lo dice anche la barra di stato: "⌘. to jump to what needs you".
- Rispondi nel pannello come faresti ovunque: Invio su
1. Yes. Claude Code va avanti e, al passaggio successivo, la barra e la bacheca lo mostrano di nuovo come Working / Running.
- Quando una sessione di agente è finita e si trova in Idle, trascina la sua scheda su Done. L'app chiede prima conferma.
Confermando, viene scritto il riepilogo e poi la sessione viene chiusa. Se il riepilogo non va a buon fine, la sessione resta dov'era. Una sessione in esecuzione non può proprio essere rilasciata su Done: "This session is still running. Pause it first, then end it." (prima va messa in pausa, poi chiusa).
Un'esecuzione reale
Esempio. Il pannello degli screenshot e ciò che osFoundry deduce da ogni schermata. I verdetti vengono dal file di regole di Claude Code, claude.toml, che l'app include e che è anche pubblicato su osfoundry.io/agent-detection/claude.toml.
~/code/shop-api (fix/checkout-retry) $ claude ● Retry now reuses the first charge. Updating the payment code. Edit file src/payments/charge.ts 41 - const intent = await stripe.paymentIntents.create(params) 41 + const intent = await stripe.paymentIntents.create(params, { 42 + idempotencyKey: `charge-${order.id}`, 43 + }) Do you want to make this edit to charge.ts? ❯ 1. Yes 2. Yes, allow all edits during this session 3. No, and tell Claude what to do differently sullo schermo state regola scattata scheda spinner, "esc to interrupt" working esc to interrupt Running il prompt qui sopra blocked Do you want to (proceed|continue|make this edit|create) Needs you ... premi Invio su "1. Yes" di nuovo lo spinner working esc to interrupt Running ● Update(src/payments/charge.ts) ⎿ Updated src/payments/charge.ts with 3 additions and 1 removal ● Bash(npm test -- payments) ⎿ Tests: 42 passed, 42 total ● Fixed. A second press of Pay now reuses the first charge. La regola blocked sta sopra la regola working di proposito. Mentre un prompt è aperto, il footer di Claude Code può ancora dire "esc to interrupt", e vince la prima regola che corrisponde.
Dove sta il confine
osFoundry non risponde mai a un prompt al posto tuo. Altri agenti possono scrivere in un pannello tramite lo strumento runtime_send dell'app, ma questo rifiuta un pannello in attesa di una decisione. Rispondere passa da uno strumento con un nome diverso, runtime_answer, e confermi tu ogni risposta. Il controllo avviene su una lettura nuova dello schermo nel momento in cui si scrive, non sull'ultimo passaggio, quindi un prompt comparso un attimo prima non può catturare tasti pensati come testo normale.
Uno schermo che osFoundry non riesce a leggere viene segnalato come Idle, mai come Needs you. Il commento in detect.rs ne spiega il motivo: basta un falso allarme e la gente smette di fidarsi del badge, e da lì in poi anche gli allarmi veri vanno sprecati. Per questo, quando una regola è incerta, l'app segnala di meno, non di più.
Le regole sono dati, non codice. Un file di regole scaricato può cambiare quali pattern corrispondono e nient'altro. Non può cambiare quale programma viene eseguito. La tua versione personalizzata va in ~/.osfoundry/agent-detection/claude.toml.
Il testo del terminale resta nella memoria dell'app desktop. Solo una sessione che chiudi tu lascia una traccia fuori dal pannello: il suo riepilogo nei tuoi file di conoscenza, scritto prima che qualcosa venga archiviato.
Prossimo passo
Avvia un secondo Claude Code in un'altra cartella, dai a entrambi un compito che richiede una modifica e lascia la bacheca Sessions filtrata su Needs me only mentre fai altro. Se non hai ancora l'app desktop, la trovi nella pagina di download.







