Geodi, il personaggio pixel ufficiale di GEODE
Torna alla sala

GEODE

Autonomous Agent Harness

Dall’osservazione all’azione successiva.

Un harness locale per agenti autonomi a cui affidare ricerca, lavoro sui file e attività pianificate.

2026.02.21 — present

Progettazione, giudizio, verifica: Author · implementazione: Claude · revisione: Codex

  • CLIPubblicato · PyPI
  • Server MCPImplementato

La proposta di arresto del modello diventa completamento solo attraverso la verifica.

Per un arresto consegnabile, un modello che chiede di fermarsi passa comunque per la verifica di completamento. L’esito è completato, prosecuzione entro il budget o in attesa di revisione; tetti di esecuzione, annullamento ed errori finiscono in uno stato di arresto separato.

Mappa del completamento · disegnata dai percorsi di codice al commit fissato 9e2c041
Mappa del completamento di GEODECome la proposta di arresto di un modello diventa un completamento. Solo gli arresti consegnabili (natural, forced_text, actionable_partial) passano per l’hook PreVerify, un controllo strutturale e il giudice selezionato (LLM judge per impostazione predefinita, Jev se scelto), e per gli hook PostVerify e Stop. Un superamento viene salvato come completed; un fallimento riparabile prosegue la stessa richiesta entro un budget predefinito di due tentativi. Un verdetto inutilizzabile, un tentativo di trasformare un fallimento in un superamento o un budget esaurito trattiene il candidato e mette in pausa la sessione. Gli arresti per annullamento, tetto e infrastruttura e le esecuzioni di control workflow vengono salvati senza verifica.IPC · chiamante CLIrisposta · stato della sessioneRevisore esternopending · non contattatoModello giudiceLLM judge · Jev Choiceipc_server/poller.pycontrol workflow · saltare la verifica pubblicaloop/agent_loop.pyarun · turno del modello_arun_once · continuazione di riparazioneloop/_guards.py · models.pyarresto consegnabile · natural ecc.arresto per fallimento · tetto · annullamentoloop/_lifecycle.pyfinalize_and_return_asyncpolicy_action · lettura del verdettobudget continuation · predefinito 2core/hooks/public.pyPreVerify · STRENGTHENPostVerify · ACCEPT · REVISE · ESCALATEStop · CONTINUEmemory · observabilitycheckpoint · stato della sessionetimeline · righe di decisione del ledgercore/agent/verify.pycontrollo strutturale · empty_turngiudizio semantico · LLM o Jevverification_error · fallisce in chiusuraProcesso runtime di GEODEfine di un turno di AgenticLoopciclo · candidati all’arrestofinalization · verdetto1 proposta di arresto · arun · turno del modello → arresto consegnabile · natural ecc.12candidato al completamento3 PreVerify · finalize_and_return_async → PreVerify · STRENGTHEN34verify_turn_async5richiesta di giudizio6passed · rubric_misses7 decisione PostVerify · policy_action · lettura del verdetto → PostVerify · ACCEPT · REVISE · ESCALATE78Stop · CONTINUE9completed · salvato10risposta1passed · rubric_misses2 decisione PostVerify · policy_action · lettura del verdetto → PostVerify · ACCEPT · REVISE · ESCALATE23Stop · CONTINUE4riparazione · tentativo +11verification_error2 decisione PostVerify · policy_action · lettura del verdetto → PostVerify · ACCEPT · REVISE · ESCALATE23ESCALATE · pending4verdetto · righe delle prove1 guard · tetti · arun · turno del modello → arresto per fallimento · tetto · annullamento12arresto per fallimento · annullamento3saltare la verifica pubblica4solo salvataggio · nessuna verifica5risposta

Verifica → completamento

Solo un arresto consegnabile passa per PreVerify → giudizio → PostVerify → Stop. Né la proposta di arresto del modello né un’istruzione di hook sono di per sé un completamento.

  1. arun · turno del modelloloop/agent_loop.pydati: proposta di arrestoarresto consegnabile · natural ecc.loop/_guards.py · models.py

    Quando il modello risponde con testo senza chiamata a strumento, il turno diventa un candidato all’arresto natural (forced_text nell’ultimo round consentito). La proposta di arresto di un modello non è ancora un completamento.

  2. arresto consegnabile · natural ecc.loop/_guards.py · models.pydati: candidato al completamentofinalize_and_return_asyncloop/_lifecycle.py

    Solo natural, forced_text e actionable_partial sono arresti consegnabili, e solo questi passano alla verifica pubblica.

  3. finalize_and_return_asyncloop/_lifecycle.pyeseguire · decidere: PreVerifyPreVerify · STRENGTHENcore/hooks/public.py

    Con STRENGTHEN, l’hook PreVerify può solo aggiungere requisiti e codici di omissione. Può rendere il verdetto più severo, mai farlo superare.

  4. finalize_and_return_asyncloop/_lifecycle.pyeseguire · decidere: verify_turn_asynccontrollo strutturale · empty_turncore/agent/verify.py

    Prima viene un controllo strutturale (turno vuoto, model_action_required); un fallimento strutturale non riparabile salta il giudizio semantico. Vecchie impostazioni come off o rule_based si risolvono in llm_judge e non possono disattivare il verdetto.

  5. giudizio semantico · LLM o Jevcore/agent/verify.pydati: richiesta di giudizioModello giudice

    Il giudice selezionato (LLM judge per impostazione predefinita, Jev Choice se scelto) viene chiamato una volta, senza strumenti, per al massimo 120 secondi e mai oltre il budget di tempo residuo. Un candidato che può contenere osservazioni personali non viene inviato a un giudice ausiliario.

  6. giudizio semantico · LLM o Jevcore/agent/verify.pydati: passed · rubric_missespolicy_action · lettura del verdettoloop/_lifecycle.py

    Il verdetto riporta superato o non superato, codici di omissione, una reflection per il tentativo successivo e se un nuovo tentativo è utile. Un superamento semantico non copre mai un controllo strutturale fallito.

  7. policy_action · lettura del verdettoloop/_lifecycle.pyeseguire · decidere: decisione PostVerifyPostVerify · ACCEPT · REVISE · ESCALATEcore/hooks/public.py

    L’hook PostVerify decide ACCEPT, REVISE o ESCALATE. Un ACCEPT di un candidato che non ha superato la verifica diventa escalate. In assenza di decisione si applica il predefinito del runtime (superato → accept, ritentabile → revise, altrimenti escalate).

  8. policy_action · lettura del verdettoloop/_lifecycle.pyeseguire · decidere: Stop · CONTINUEStop · CONTINUEcore/hooks/public.py

    Solo quando non si escala, l’istruzione CONTINUE dell’hook Stop può chiedere una continuazione di riparazione. Un’istruzione di hook è un input per il tentativo successivo, non un’autorità.

  9. policy_action · lettura del verdettoloop/_lifecycle.pydati: completed · salvatocheckpoint · stato della sessionememory · observability

    Con un superamento e accept, i tentativi proseguiti vengono uniti, il risultato viene salvato e la sessione viene registrata come completed.

  10. finalize_and_return_asyncloop/_lifecycle.pydati: rispostaIPC · chiamante CLI

    Restituisce la risposta finale se completato, una risposta vuota con EXTERNAL_VERIFICATION_REQUIRED se in attesa di revisione e il motivo dell’arresto per un arresto senza verifica.

Riparazione entro il budget

Un fallimento riparabile prosegue la stessa richiesta. Il budget predefinito è di due tentativi; una volta esaurito, il candidato resta in attesa di revisione.

  1. giudizio semantico · LLM o Jevcore/agent/verify.pydati: passed · rubric_missespolicy_action · lettura del verdettoloop/_lifecycle.py

    Il verdetto riporta superato o non superato, codici di omissione, una reflection per il tentativo successivo e se un nuovo tentativo è utile. Un superamento semantico non copre mai un controllo strutturale fallito.

  2. policy_action · lettura del verdettoloop/_lifecycle.pyeseguire · decidere: decisione PostVerifyPostVerify · ACCEPT · REVISE · ESCALATEcore/hooks/public.py

    L’hook PostVerify decide ACCEPT, REVISE o ESCALATE. Un ACCEPT di un candidato che non ha superato la verifica diventa escalate. In assenza di decisione si applica il predefinito del runtime (superato → accept, ritentabile → revise, altrimenti escalate).

  3. policy_action · lettura del verdettoloop/_lifecycle.pyeseguire · decidere: Stop · CONTINUEStop · CONTINUEcore/hooks/public.py

    Solo quando non si escala, l’istruzione CONTINUE dell’hook Stop può chiedere una continuazione di riparazione. Un’istruzione di hook è un input per il tentativo successivo, non un’autorità.

  4. budget continuation · predefinito 2loop/_lifecycle.pyeseguire · decidere: riparazione · tentativo +1_arun_once · continuazione di riparazioneloop/agent_loop.py

    Solo con un’istruzione di riparazione, e solo finché il numero del tentativo è inferiore al budget (due per impostazione predefinita), la stessa richiesta prosegue. Raggiunto il budget, diventa escalate_budget_exhausted e resta in attesa di revisione.

In attesa di revisione

Un verdetto inutilizzabile, un tentativo di trasformare un fallimento in un superamento o un budget esaurito trattiene il candidato e mette in pausa la sessione.

  1. verification_error · fallisce in chiusuracore/agent/verify.pyfallimento · nessun verdetto: verification_errorpolicy_action · lettura del verdettoloop/_lifecycle.py

    Un giudice mancante, un timeout o una risposta non valida diventano verification_error: né un superamento né un segnale di riparazione. Un verdetto inutilizzabile non sostituisce mai il successo.

  2. policy_action · lettura del verdettoloop/_lifecycle.pyeseguire · decidere: decisione PostVerifyPostVerify · ACCEPT · REVISE · ESCALATEcore/hooks/public.py

    L’hook PostVerify decide ACCEPT, REVISE o ESCALATE. Un ACCEPT di un candidato che non ha superato la verifica diventa escalate. In assenza di decisione si applica il predefinito del runtime (superato → accept, ritentabile → revise, altrimenti escalate).

  3. policy_action · lettura del verdettoloop/_lifecycle.pyeseguire · decidere: ESCALATE · pendingRevisore esterno

    Il candidato resta come pending_text ed è escluso dalle risposte ordinarie, il checkpoint viene salvato e la sessione messa in pausa. Nessun revisore esterno viene contattato automaticamente.

  4. policy_action · lettura del verdettoloop/_lifecycle.pyregistrare · osservare: verdetto · righe delle provetimeline · righe di decisione del ledgermemory · observability

    La timeline riceve righe di decisione, di prova e pending, e l’evidence ledger una riga verification_policy. Sono registri best-effort, non la prova di un effetto esterno.

Arresti senza verifica

Gli arresti per annullamento, tetto e infrastruttura e le esecuzioni di control workflow vengono salvati senza verifica pubblica.

  1. arun · turno del modelloloop/agent_loop.pyeseguire · decidere: guard · tettiarresto per fallimento · tetto · annullamentoloop/_guards.py · models.py

    Guard come i tetti di round, tempo, costo e contesto, l’annullamento e il rilevamento di fallimenti ripetuti chiudono il turno con un elemento dell’insieme chiuso TerminationReason. Un tetto disattivato nella configurazione non è sempre applicato.

  2. arresto per fallimento · tetto · annullamentoloop/_guards.py · models.pyfallimento · nessun verdetto: arresto per fallimento · annullamentofinalize_and_return_asyncloop/_lifecycle.py

    Gli arresti per annullamento, infrastruttura e tetto non hanno un candidato da verificare, perciò vengono salvati senza verifica pubblica.

  3. control workflow · saltare la verifica pubblicaipc_server/poller.pyeseguire · decidere: saltare la verifica pubblicafinalize_and_return_asyncloop/_lifecycle.py

    Quando una chiamata IPC chiede di saltare la verifica pubblica o è attivo un control workflow, la verifica pubblica è disattivata solo per quell’esecuzione e poi viene ripristinato il valore precedente.

  4. finalize_and_return_asyncloop/_lifecycle.pydati: solo salvataggio · nessuna verificacheckpoint · stato della sessionememory · observability

    Anche un arresto senza verifica salva il risultato e il checkpoint ed emette gli eventi di fine sessione.

  5. finalize_and_return_asyncloop/_lifecycle.pydati: rispostaIPC · chiamante CLI

    Restituisce la risposta finale se completato, una risposta vuota con EXTERNAL_VERIFICATION_REQUIRED se in attesa di revisione e il motivo dell’arresto per un arresto senza verifica.

Tutte le connessioni con lo stesso peso. Scegliendo un flusso se ne evidenzia solo il percorso, con passi numerati.

  • Continua · la direzione in cui scorrono richieste, candidati e risultati
  • Tratteggiata · eseguire, decidere, autorizzare, configurare
  • Tratto lungo e punto · registri e osservazione, separati dal verdetto
  • Tratteggio corto · un fallimento o un verdetto inutilizzabile
  • Linea nera spessa · il flusso scelto; i numeri danno l’ordine
  • Riquadro · un confine di codice o di registro, con il percorso nell’intestazione
  • Chip interno · un componente in quel confine
  • Riquadro tratteggiato · fuori da quel confine
  • ciclo · finalization
  • arresti · hook · verdetto
  • salvataggio · registri
  • ingresso IPC

Sono disegnati solo i percorsi di chiamata del commit fissato 9e2c041. Il superamento presso il modello giudice è distinto dal successo di un verifier di benchmark esterno; qui il completamento è una decisione interna al runtime.

Motore di giudizio
Il predefinito è l’LLM judge; Jev Choice giudica solo quando judgment_engine è impostato su jev. In entrambi i casi un giudice inutilizzabile produce verification_error, mai un successo.
Cosa possono fare gli hook
PreVerify può solo rendere il verdetto più severo, PostVerify non può far superare un candidato fallito, e Stop può chiedere una continuazione solo quando non si escala.
In attesa di revisione
L’attesa di revisione registra che serve una decisione esterna. Non notifica nessuno e non significa che il risultato sia stato approvato.