Salta ai contenuti

Run senza nessuno e resoconto del mattino

Quando un incarico scatta, può non esserci nessuno: sono le due di notte. Quella squadra è senza nessuno (unattended): il run dell’incarico e ogni agente sotto di lui. Kedalio la tratta diversamente in due modi, così il lavoro di una notte non aspetta il mattino per un comando innocuo e non fa niente che tu non abbia permesso.

Un run senza nessuno può leggere senza chiedere, in più alla sua delega:

  • gli strumenti di lettura del motore (Read, Glob, Grep, LS);
  • i comandi che leggono soltanto: cd, pwd, ls, cat, head, tail, wc, echo, grep, find;
  • git status, log, diff, show, rev-parse, ls-files e le forme di git branch che elencano.

Un comando fatto di più parti (cd app && git status | head) passa quando passa ogni parte. Quello che questi comandi sanno fare oltre a leggere (find -exec, find -delete, git log --output) resta una richiesta, a meno che la delega non lo permetta. Un divieto da qualunque parte vince sempre, e le richieste serie restano serie.

Tutto il resto è una richiesta, come di giorno: sale prima ai genitori, poi arriva a te come notifica. Se non rispondi entro 30 minuti, viene rifiutata da sola, e l’agente legge:

This run is unattended (an assignment’s): nobody is there to answer, and no answer came within 30 minutes, so this is refused. Go on without this action if you can; otherwise stop, and say in your final message what you could not do and why.

Cioè: nessuno ha risposto, quindi il run va avanti senza quell’azione se può, altrimenti si ferma e dice cosa non ha potuto fare e perché. Un «no» non sblocca niente, quindi una richiesta seria viene rifiutata allo stesso modo. Il brief di ogni esecuzione chiede anche all’agente di dire, alla fine, cosa ha fatto e cosa resta.

Ogni mattina alle 07:30 sul tuo fuso (l’ora si cambia da Claude o ChatGPT con kedalio.squad_settings), il server scrive il resoconto di tutto quello che è successo dall’ultimo:

  • Aspettano te: le richieste ancora aperte;
  • Non riusciti: le esecuzioni fallite o mancate;
  • Saltato: non c’era nessuno a rispondere: ogni richiesta rifiutata da sola, come «… rifiutato da solo dopo 30 minuti senza risposta»;
  • Incarichi: ogni esecuzione, con quello di cui ha fatto il push e il suo riassunto;
  • le Squadre coinvolte, i seguiti Programmati dagli agenti, le notifiche Trattenute durante le ore di silenzio;
  • il Costo, dal registro.

I fatti li raccoglie il server. Un run breve di un modello piccolo (Haiku, con un login di Claude Code; nessuno strumento, al massimo 0,50 $) li scrive in prosa nella tua lingua. Senza host, o senza prosa entro quindici minuti, escono i fatti da soli.

Ti arriva in tre modi:

  • una notifica, «Resoconto del mattino»;
  • una riga nel diario della tua memoria: «Resoconto del mattino: 3 esecuzioni, 2 squadre, 1 in attesa di te, $4.10.»;
  • la scheda Report di stamattina in Oggi, per un giorno, quando il resoconto ha la sua prosa.

Ogni esecuzione fallita o mancata diventa anche una task («Guarda «backup notturno»: non riuscito»), così resta nella tua lista finché non te ne occupi. Da Claude o ChatGPT, tasks.report legge il resoconto.

  • Le ore di silenzio (from–to, anche a cavallo della mezzanotte) trattengono le notifiche normali e le richieste finché non finiscono; il resoconto le conta. Le richieste serie arrivano lo stesso, senza suono. Il resoconto arriva alla sua ora anche durante le ore di silenzio: quell’ora l’hai scelta tu.
  • La pausa globale ferma le nuove esecuzioni (registrate come saltate) e le nuove squadre ovunque; le squadre al lavoro vanno avanti, a meno che tu non le fermi tutte. Da Claude o ChatGPT la accende pause (e stopAll ferma ogni squadra); Oggi mostra un avviso finché è attiva, con Riprendi.

Entrambe stanno in Sistema → Preferenze: le ore di silenzio (da, a, o nessuna), la pausa globale e l’ora del resoconto. La pausa ha anche Metti in pausa e ferma tutti gli agenti. La notifica del resoconto apre Oggi, che mostra il resoconto di stamattina quando la sua prosa è stata scritta (senza, i fatti sono nella notifica), con la Cronologia dei precedenti; è anche nel diario e in tasks.report.

Non ancora costruito: un modello piccolo che giudica le richieste dei run senza nessuno.