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.
GEODE runtime vocabulary
- reasoning
- action
- observation
- plan
- memory
- tools
- hook
- reflexion
- rollouts
- data curation
- data governance
- evaluation
- scaffold search
- promotion
Reasoning: SYSTEM PROMPT · CONVERSATION · RUNTIME HINTS · MODEL · ADAPTER CALL · NEXT ACTION · TOOL SCHEMA · TEXT-ONLY TURN · CURRENT STEP · PROJECT MEMORY · RUNTIME RULES · EFFORT · thinking_budget · reasoning_effort · adaptive_thinking · effort_values · default_effort · binds_thinking · none · minimal · low · medium · high · xhigh · max · MODEL ROUTEAction: ACT · TOOL_USE · TOOLCALLPROCESSOR · DISPATCH · RESEARCH · BASH · COMPUTER USE · FILE · GIT · PROCESS · EFFECT RECEIPT · TOOLEXECUTORObservation: NEXT ACTION · RESEARCH · OBSERVE · TOOL_RESULT · RESULT · ERROR · CODE · DOCUMENT · SOURCE · EVIDENCE · EXCERPTPlan: CURRENT STEP · OBJECTIVE · PLANSTEP · EXPECTED OUTCOME · REMAINING STEPS · COMPLETED · ABANDONED · REVISION · UPDATE_PLAN · /PLAN · REPLAN · VERIFY FAILED · LOW CONFIDENCEMemory: SYSTEM PROMPT · CONVERSATION · PROJECT MEMORY · RUNTIME RULES · TOOL_RESULT · CONVERSATIONCONTEXT · MESSAGES · CONTEXT WINDOW · COMPACTION · CHECKPOINT · SESSION · RECOVERY · SQLITE · STATE.JSON · PreCompact · PostCompact · SessionStart · SessionEndTools: TOOL SCHEMA · TOOL_USE · TOOLCALLPROCESSOR · DISPATCH · BASH · COMPUTER USE · EFFECT RECEIPT · TOOL_RESULT · BOUNDTOOLPLAN · GENERATION · HASH · TOOLEXECUTOR · SCOPE · POLICY · HOOK · APPROVAL · HITL · PreToolUse · PostToolUse · MCP CLIENT · PermissionRequestHook: DISPATCH · HOOK · PreToolUse · PostToolUse · UserPromptSubmit · PermissionRequest · PreCompact · PostCompact · SessionStart · SessionEnd · SubagentStart · SubagentStop · PreVerify · tool_request · tool_execution · llm_request · llm_execution · REQUEST TRANSFORM · next_call · WRAPPER · REGISTRY · PostVerify · StopReflexion: NEXT ACTION · EVIDENCE · REPLAN · VERIFY FAILED · LOW CONFIDENCE · HOOK · PreVerify · HYPOTHESES · CONFIDENCE · NEXT_ACTION_HINT · RECORD_REFLECTION · CONTRADICTION · REPAIR · VERIFY · PostVerify · Stop · COMPLETION · CONTINUE · TIME · TOKEN BUDGET · CANCELLATIONRollouts: SESSION · ROLLOUT · EXAMPLE · SEED · REPETITION · ATTEMPT · TRAJECTORY · REWARD · OUTCOME · TRACE · RUN IDData Curation: TASK SYNTHESIS · SEED GENERATION · PROXIMITY · RANKING · META-REVIEW · ELO TOURNAMENT · PILOT · DEDUPLICATION · SURVIVOR SELECTION · FROZEN POOLData Governance: PROVENANCE · LINEAGE · SCHEMA VERSION · SOURCE DIGEST · PRIVACY REVIEW · ALLOWLIST · IMMUTABLE RELEASE · SPLIT ISOLATION · SEALED HOLDOUTEvaluation: TRAJECTORY · OUTCOME · TRACE · EVALUATION HARNESS · TASK · RUBRIC · GRADER · VERIFIER · VALIDITY · FITNESS · REPLICATION · TASK COVERAGEScaffold Search: RECOVERY · FITNESS · CANDIDATE · HYPOTHESIS · MUTATION POLICY · BASELINE · FROZEN EVALUATOR · POLICY INJECTION · SEARCH SPACE · PROMOTION GATEPromotion: SEALED HOLDOUT · PROMOTION GATE · CRUCIBLE · PAIRED TRIALS · BOOTSTRAP BOUND · FROZEN CONTRACT · TASK-PACK HASH · TRAIN · SEALED TEST · SAFETY VETO · KEEP · REJECT · INVALID
Recorded evaluation · MCPMark PostgreSQL · 2026-07-04
Prima di cambiare qualcosa, ha trovato ciò che c’era già.
Il compito: sicurezza a livello di riga per un social network con cinque tabelle.
- IndagineHa letto le cinque tabelle, le quattro funzioni di supporto già presenti, la RLS disattivata su tutte e cinque, e policy, privilegi e ruoli.
- EsecuzioneUna sola transazione: 20 policy e RLS attiva, riusando 3 funzioni di supporto esistenti e aggiungendone 3.
- Verifica18 superati, 0 falliti. Tutte le 13 risposte degli strumenti in 9 turni sono tornate senza errori.
Output del verificatore, 18 righe (testuale)
- RLS enabled on users
- RLS enabled on channels
- RLS enabled on channel_moderators
- RLS enabled on posts
- RLS enabled on comments
- Users can update their own profile
- Users blocked from updating other users' profiles
- Channel owners can update their channels
- Non-owners blocked from updating channels
- Post authors can update their posts
- Channel moderators can update posts in their channels
- Unauthorized users blocked from updating posts
- Comment authors can update their comments
- Post authors can moderate comments on their posts
- Channel owners can add moderators
- Non-owners blocked from adding moderators
- Content visibility varies correctly based on user context
- Anonymous users can see 3 public user profiles (correct)
Un’esecuzione passata in una sandbox di valutazione configurata, non un database in produzione né un vero incidente di sicurezza. Il numero di righe prima delle policy non è nel registro, quindi non viene mostrato. Registro pubblico dell’esecuzione (meta.json, commit 23e3428)
Rivedere un risultato e ripararlo (sul modello di Reflexion, all’interno dello stesso compito) è una capacità dell’attuale runtime di GEODE. In questo registro non compare alcuna riparazione: ogni risposta degli strumenti è tornata senza errori. Documentazione del runtime (hook-system.md)
Il modello sceglie l’azione successiva; l’host custodisce il confine di esecuzione.
Il runtime dall’ingresso di una richiesta in una sessione, attraverso la chiamata al modello e i controlli di autorità su ogni chiamata a strumento proposta, fino a esecuzione, risultati e registri. Scegliendo un flusso se ne evidenzia solo il percorso, con passi numerati.
Il modello sceglie l’azione successiva; il runtime controlla i permessi degli strumenti e stabilisce quando il lavoro è completato.
Gli esperimenti esterni Scaffold Search / SIL sono iniziati il May 15, 2026
Il pacchetto geode-agent si installa da PyPI o dal repository pubblico e si esegue dal proprio terminale. È raggiungibile anche come server MCP.
Richiesta → chiamata al modello
Una richiesta dal terminale arriva via IPC, si compone una sessione e il ciclo chiama il modello con prompt di sistema, conversazione e schemi degli strumenti.
Utente del terminaleflusso di dati: prompt · cli.sockCLIPoller · socket IPC
core/serverLa thin CLI invia la richiesta al socket IPC del daemon serve (~/.geode/cli.sock). La REPL esegue la stessa composizione della sessione nel processo.
CLIPoller · socket IPC
core/serverautorità · composizione: create_session(IPC)SharedServices.create_sessionsupervised/services.pyOgni connessione compone una sessione. La modalità stabilisce il livello HITL, il budget di tempo e gli strumenti negati, e proietta il BoundToolPlan sul provider scelto.
CLIPoller · socket IPC
core/serverautorità · composizione: lane per richiestaLaneQueue · session · globalsupervised/services.pyPrima di eseguire una richiesta vengono occupate sia la lane della sessione sia quella globale, il che limita le esecuzioni concorrenti.
SharedServices.create_session
supervised/services.pyautorità · composizione: ToolExecutor · AgenticLoopAgenticLoop · sei fasicore/agent/loopCostruisce l’esecutore e il ciclo come un’unica coppia che condivide hook, MCP, skill e lock delle risorse.
LaneQueue · session · global
supervised/services.pyflusso di dati: arun(prompt)AgenticLoop · sei fasicore/agent/loopEsegue un turno utente in sei fasi: preparare l’input, preparare la chiamata, chiamare il provider, elaborare gli strumenti, osservare e compattare, terminare.
prompt di sistema · fonti dichiarate
core/agent/loopflusso di dati: prompt di sistemaadapter.acomplete · classi di errorecore/llm/adaptersCostruito a ogni turno da fonti dichiarate, come sezioni e regole selezionate di GEODE.md. La facade a cinque livelli di ContextAssembler si usa solo quando viene chiamata esplicitamente; non è l’input del ciclo predefinito.
messaggi · ConversationContext
core/agent/loopflusso di dati: messaggiadapter.acomplete · classi di errorecore/llm/adaptersLa conversazione e i risultati precedenti degli strumenti viaggiano separati dal prompt di sistema.
BoundToolPlan · immutabile
core/tools/plan.pyautorità · composizione: schemi degli strumentiadapter.acomplete · classi di errorecore/llm/adaptersSolo gli strumenti del BoundToolPlan legato a questo passo sono visibili al modello. È uno snapshot immutabile con una generazione e un hash del contenuto.
AgenticLoop · sei fasi
core/agent/loopflusso di dati: StepSnapshot · richiestaadapter.acomplete · classi di errorecore/llm/adaptersLo StepSnapshot fissa modello, strumenti e ID di correlazione di questa chiamata. Il middleware LLM non può sostituire un adapter vincolato.
adapter.acomplete · classi di errore
core/llm/adaptersflusso di dati: HTTPSProvider LLMUn adapter per provider esegue la chiamata. I fallimenti vengono classificati e ritentati solo entro un tetto fissato, oppure chiudono il turno con un motivo di terminazione.
adapter.acomplete · classi di errore
core/llm/adaptersflusso di dati: risposta · tool_useAgenticLoop · sei fasicore/agent/loopIl solo testo va alla terminazione; tool_use va all’elaborazione degli strumenti.
Autorità sugli strumenti → effetto → risultato
Una proposta tool_use viene eseguita solo dopo che ogni controllo è superato; rifiuti, risultati ed errori tornano tutti dall’esecutore e diventano il successivo input del modello.
AgenticLoop · sei fasi
core/agent/loopflusso di dati: batch in attesa · salvataggio del roundSQLite messages · state.jsonmemory/session_checkpoint.pyIn una sessione con checkpointing configurato (un checkpoint e un session id), il batch proposto viene salvato prima che qualsiasi strumento venga eseguito, e il batch non viene eseguito se non può essere salvato. Il batch completato viene salvato di nuovo. I chiamanti senza checkpoint non hanno questa garanzia.
AgenticLoop · sei fasi
core/agent/loopflusso di dati: blocchi tool_useToolCallProcessortool_executor/processor.pyUna proposta del modello non è un permesso. Ogni chiamata riceve un ToolContext con l’identità del modello e dell’adapter del ciclo.
ToolCallProcessor
tool_executor/processor.pyflusso di dati: aexecuteambito · policy · schematool_executor/executor.pyControlla in ordine l’ambito della sessione, le riscritture del middleware delle richieste, la policy e lo schema. Una riscrittura che abbassa il livello di sicurezza o la classe dei dati personali viene negata.
BoundToolPlan · immutabile
core/tools/plan.pyautorità · composizione: consentito · livello di sicurezzaambito · policy · schematool_executor/executor.pyGli handler eseguibili e i livelli di sicurezza provengono dal BoundToolPlan proiettato per la sessione.
PreToolUse · PostToolUse
tool_executor/executor.pyautorità · composizione: PreToolUse · PostToolUseHookRegistry · decisionicore/hooksGli hook pubblici decidono blocco, riscrittura degli argomenti o richiesta di permesso, e a una riscrittura seguono di nuovo i controlli di ambito, policy e schema. Dopo l’esecuzione, un hook può aggiungere contesto o trattenere il risultato.
approvazione · HITL
tool_executor/executor.pyautorità · composizione: richiesta di approvazioneUtente del terminaleIn una sessione IPC la richiesta di approvazione viene inoltrata alla thin CLI. Le modalità senza una persona applicano per impostazione predefinita la policy di rifiuto; l’unica eccezione è il computer use di DAEMON, quando un operatore lo abilita separatamente (altrimenti bloccato).
tool_executor/executor.pyrifiuto prima dell’esecuzione: negato prima dell’esecuzioneToolCallProcessor
tool_executor/processor.pyUn rifiuto per ambito, policy o schema, un blocco PreToolUse o un’approvazione negata tornano come risultato d’errore senza dispatch. In quel caso nessun effetto di questa chiamata è iniziato.
effect receipt
tool_executor/executor.pyflusso di dati: ammissione · conferma dell’effettoEffectReceiptStorememory/effect_receipts.pyEffetti come modifiche ai file, messaggi in uscita o azioni amministrative vengono ammessi prima dell’esecuzione. Un esito incerto non viene rieseguito; richiede una riconciliazione.
lock delle risorse · dispatch
tool_executor/executor.pyflusso di dati: chiamata all’handlerhandler degli strumenti · bash · computercore/toolsInoltra all’handler vincolato dopo aver bloccato le sue chiavi di risorsa. Una chiamata interrotta alla scadenza può essere ancora in corso all’esterno.
lock delle risorse · dispatch
tool_executor/executor.pyflusso di dati: chiamata MCPMCPServerManagercore/mcp/manager.pyVengono chiamati solo gli strumenti MCP con una policy delle risorse dichiarata.
MCPServerManager
core/mcp/manager.pyflusso di dati: tools/callServer MCPIl catalogo dei server proviene dalle impostazioni globali e dalle impostazioni di progetto che hanno superato il controllo di attendibilità; tale controllo vale solo per le voci di progetto. Il gestore MCP applica la propria policy di estensioni e risorse.
handler degli strumenti · bash · computer
core/toolsflusso di dati: modifiche a file · git · processiFile · git · processiLe modifiche eseguite restano come stato esterno. Il checkpoint ripristina solo la conversazione e non le annulla.
tool_executor/executor.pyflusso di dati: risultato · errore dopo il dispatchToolCallProcessor
tool_executor/processor.pyDopo il dispatch, risultati normali ed errori (inclusi timeout ed esiti incerti) tornano tramite PostToolUse. Un errore o un timeout non significa che il lavoro esterno si sia fermato o sia stato annullato.
ToolCallProcessor
tool_executor/processor.pyflusso di dati: tool_resultmessaggi · ConversationContextcore/agent/loopRisultati, rifiuti ed errori vengono tutti serializzati come tool_result e diventano messaggi nel successivo input del modello.
ToolCallProcessor
tool_executor/processor.pyregistro · osservazione: chiamata · osservazione del risultatoSessionTimeline · append-onlyobservability/session_timeline.pyScrive la chiamata e il suo risultato (ok o errore) nella timeline, comprese le chiamate negate prima dell’esecuzione. Il registro è osservazione; non prova che un effetto esterno sia iniziato o riuscito.
Registri · ripristino · completamento
Il checkpoint, la timeline e le righe delle prove vengono scritti separatamente. Non c’è una transazione condivisa e il checkpoint ripristina solo la conversazione.
AgenticLoop · sei fasi
core/agent/loopflusso di dati: batch in attesa · salvataggio del roundSQLite messages · state.jsonmemory/session_checkpoint.pyIn una sessione con checkpointing configurato (un checkpoint e un session id), il batch proposto viene salvato prima che qualsiasi strumento venga eseguito, e il batch non viene eseguito se non può essere salvato. Il batch completato viene salvato di nuovo. I chiamanti senza checkpoint non hanno questa garanzia.
SQLite messages · state.json
memory/session_checkpoint.pyflusso di dati: ripristino alla ripresaAgenticLoop · sei fasicore/agent/loopUn unico percorso di ripristino riporta messaggi, stato cognitivo e contatori delle guard. Il TaskGraph locale al processo non viene recuperato.
AgenticLoop · sei fasi
core/agent/loopregistro · osservazione: registro del turnoSessionTimeline · append-onlyobservability/session_timeline.pyUna cronologia di esecuzione append-only, mai riprodotta come stato.
AgenticLoop · sei fasi
core/agent/loopautorità · composizione: controllo di completamentoverify_turn_asynccore/agent/verify.pyLa proposta del modello di fermarsi diventa completamento solo attraverso Verify.
verify_turn_async
core/agent/verify.pyautorità · composizione: PostVerify · StopHookRegistry · decisionicore/hooksLe decisioni degli hook pubblici stabiliscono se proseguire con una riparazione, e le riparazioni avvengono solo entro un budget fissato (due per impostazione predefinita).
AgenticLoop · sei fasi
core/agent/loopregistro · osservazione: righe delle prove · best-effortEvidenceLedger · JSONLagent/evidence_ledger.pyRighe diagnostiche oscurate. Gli hash servono alla correlazione; una riga non prova che un effetto sia avvenuto, e non viene scritta in un’unica transazione con la timeline o il checkpoint.
AgenticLoop · sei fasi
core/agent/loopregistro · osservazione: eventi cognitivi · del ciclo di vitaHookSystem · osservazionecore/hooksGli hook di osservazione ricevono e registrano eventi; non decidono l’esecuzione.
Altri percorsi di ingresso
I messenger entrano come sessioni DAEMON del daemon serve; il run_agent di un host MCP esterno entra in un ciclo headless a esecuzione singola costruito a parte.
Canale di messaggisticaflusso di dati: messaggio di canalepoller dei messenger
core/serverI poller del daemon serve gestiscono solo i messaggi dei canali vincolati.
poller dei messenger
core/serverautorità · composizione: create_session(DAEMON)SharedServices.create_sessionsupervised/services.pyUna modalità senza una persona che approvi: si applicano la policy di rifiuto predefinita e un budget di tempo. Solo il computer use può essere abilitato separatamente da un operatore; altrimenti resta bloccato.
poller dei messenger
core/serverflusso di dati: arun(message)AgenticLoop · sei fasicore/agent/loopUn thread mantiene un session id fisso e prosegue un’unica catena di checkpoint.
Host MCP esternoflusso di dati: run_agent(prompt)run_agent · esecuzione singola
core/mcp_server.pyUn host MCP esterno chiama GEODE come strumento.
run_agent · esecuzione singola
core/mcp_server.pyflusso di dati: ciclo headless a esecuzione singolaAgenticLoop · sei fasicore/agent/loopUn esecutore e un ciclo headless costruiti a parte che aggirano SharedServices. La denylist predefinita si applica così com’è, quindi strumenti come run_bash, delegate_task e computer vengono rimossi; l’eccezione di computer use di DAEMON qui non esiste.
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, messaggi e risultati degli strumenti
- Tratteggiata · composizione della sessione, autorità o verdetto; non un percorso di dati
- Tratto lungo e punto · registri e osservazione; mai riprodotti come stato
- Tratteggio corto · rifiuto prima dell’esecuzione, nessun effetto
- Linea nera spessa · il flusso scelto; i numeri danno l’ordine
- Riquadro · un confine che possiede codice, con il percorso sorgente nell’intestazione
- Chip interno · un componente dentro quel confine
- Riquadro tratteggiato · fuori dal processo runtime
- Contorno arancione · dove decide un modello
- Ciclo di esecuzione
- Autorità · verdetti
- Archivi dei registri
- Ingresso · connessione · esecuzione
Sono disegnate solo le connessioni le cui chiamate sono state confermate. La facade a cinque livelli di ContextAssembler, il TaskGraph ed esperimenti di ricerca come Jev, SIL e Crucible non sono su questo percorso del runtime. L’annullamento asincrono non ferma il lavoro sincrono già avviato né annulla gli effetti avvenuti.
Modelli supportati · per provider
Le scelte di catalogo del codice e i valori predefiniti distribuiti, non un elenco in cui ogni modello ha superato una chiamata API reale. Le catene di fallback configurate sono vuote per impostazione predefinita e gli ID esatti non vengono mai aggiornati automaticamente a versioni più recenti.
Anthropic
API
- PrincipaleClaude Opus 5.5
claude-opus-5-5Predefinito - SecondarioClaude Sonnet 5
claude-sonnet-5Predefinito - EconomicoClaude Haiku 4.5
claude-haiku-4-5-20251001Predefinito
Mostra tutti i 12 ID del catalogo
API
claude-fable-5-1claude-opus-5-5predefinitoclaude-opus-5claude-sonnet-5predefinitoclaude-haiku-4-5-20251001predefinitoclaude-fable-5claude-opus-4-8claude-opus-4-7claude-opus-4-6claude-opus-4-5claude-sonnet-4-6claude-sonnet-4-5-20250929
Il codice rifiuta il percorso OAuth dell’abbonamento.
- PrincipaleClaude Opus 5.5
OpenAI
API · abbonamento Codex
- Predefinito per API e CodexGPT-6 Sol
gpt-6-solPredefinito
Mostra tutti i 11 ID del catalogo
API · abbonamento Codex
gpt-6-astragpt-6-solpredefinitogpt-6-lunagpt-5.6-solgpt-5.6-terragpt-5.6-luna
Solo API
gpt-5.5gpt-5.3-codexgpt-5.4gpt-5.4-minigpt-5.4-nano
Due vie di accesso a un unico provider; il catalogo stabilisce quali vie ammette ciascun modello.
- Predefinito per API e CodexGPT-6 Sol
Z.ai / GLM
PAYG
- PredefinitoGLM-5.3
glm-5.3Predefinito
Mostra tutti i 9 ID del catalogo
PAYG
glm-5.3predefinitoglm-5.3-flashglm-5.3-flashxglm-5.2glm-5.1glm-5glm-4.7glm-4.7-flashxglm-4.7-flash
Il codice non ammette il percorso GLM Coding Plan.
- PredefinitoGLM-5.3
OpenRouter
Servizio di routing
- SelettoreFree (smoke)
openrouter/openrouter/freeRouter - SelettoreAuto (variable)
openrouter/openrouter/autoRouter
Selezioni del router, non un unico modello fisso. Si possono anche mantenere ID configurati esplicitamente.
- SelettoreFree (smoke)
TypeSafe / Jev
Solo decisioni · separato dalla generazione di testo
- Diretto
jev-1.13.0Solo decisione - Tramite OpenRouter
typesafe/jev-1.13Solo decisione
Un adapter opzionale che formula solo giudizi; non è un modello radice di generazione del testo. Il motore di giudizio predefinito è llm, e Jev va selezionato. Le configurazioni proprie dello studio Jev seguono i registri della vista Jev.
- Diretto
FonteGEODE main 373d420Commit pubblico: October 7, 2026 · controllato: October 8, 2026
Esperimenti
Modelli e vie come registrati all’epoca, non i valori predefiniti attuali né un elenco completo di compatibilità.
Rapporto di benchmark GEODE
July 31, 2026
- GEODEGPT-5.6 Sol
gpt-5.6-solAbbonamento OpenAI · high
- GEODEGPT-5.6 Sol
Terminal-Bench 2.1 · specifica appaiata per Harbor 0.22.0
August 27, 2026
- GEODE · native CodexGPT-5.6 Sol
gpt-5.6-solabbonamento · max
Una specifica congelata; non ogni tentativo pianificato è diventato un risultato valido.
- GEODE · native CodexGPT-5.6 Sol
Esecuzione SIL archiviata run-2606-broken-tool-use
- Scaffold di destinazioneGPT-5.5
gpt-5.5openai-codex - Auditor · giudiceClaude Opus 4.8
claude-opus-4-8PAYG
Un registro di ruoli separati, non due valori predefiniti intercambiabili.
- Scaffold di destinazioneGPT-5.5