GEODE
Autonomous Agent Harness
De l’observation à l’action suivante.
Un harnais local d’agent autonome auquel confier recherche, travail sur fichiers et tâches planifiées.
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
Avant de modifier quoi que ce soit, il a trouvé ce qui existait déjà.
La tâche : la sécurité au niveau des lignes pour un service social à cinq tables.
- RechercheA lu les cinq tables, quatre fonctions d’aide déjà en place, RLS désactivé sur les cinq, ainsi que les politiques, privilèges et rôles.
- ActionUne seule transaction : 20 politiques et RLS activé, en réutilisant 3 fonctions d’aide existantes et en ajoutant 3 fonctions.
- Vérification18 réussis, 0 échec. Les 13 réponses d’outils sur 9 tours sont toutes revenues sans erreur.
Sortie du vérificateur, 18 lignes (texte exact)
- 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)
Une exécution passée dans un bac à sable d’évaluation configuré, pas une base de données en production ni un véritable incident de sécurité. Le nombre de lignes avant les politiques ne figure pas dans l’enregistrement ; aucun n’est donc affiché. Enregistrement public de l’exécution (meta.json, commit 23e3428)
Examiner un résultat et le réparer (inspiré de Reflexion, au sein de la même tâche) est une capacité du runtime GEODE actuel. Aucune réparation de ce type n’apparaît dans cet enregistrement : toutes les réponses d’outils sont revenues sans erreur. Documentation du runtime (hook-system.md)
Le modèle choisit l’action suivante ; l’hôte tient la frontière d’exécution.
Le runtime, de l’entrée d’une requête dans une session jusqu’à l’exécution, aux résultats et aux enregistrements, en passant par l’appel du modèle et les contrôles d’autorité sur chaque appel d’outil proposé. Choisir un flux met en évidence son seul chemin, avec des étapes numérotées.
Le modèle choisit l’action suivante ; le runtime vérifie les permissions des outils et décide quand le travail est achevé.
Expériences externes Scaffold Search / SIL lancées le May 15, 2026
S’installe à partir du paquet geode-agent sur PyPI ou du dépôt public et s’exécute dans un terminal local. Également accessible comme serveur MCP.
Requête → appel du modèle
Une requête du terminal arrive par IPC, une session est composée, et la boucle appelle le modèle avec le prompt système, la conversation et les schémas d’outils.
Utilisateur du terminalflux de données: prompt · cli.sockCLIPoller · socket IPC
core/serverLa CLI légère envoie la requête au socket IPC du démon serve (~/.geode/cli.sock). Le REPL exécute la même composition de session dans le processus.
CLIPoller · socket IPC
core/serverautorité · composition: create_session(IPC)SharedServices.create_sessionsupervised/services.pyChaque connexion compose une session. Le mode fixe le niveau HITL, le budget de temps et les outils refusés, et projette le BoundToolPlan sur le fournisseur choisi.
CLIPoller · socket IPC
core/serverautorité · composition: couloir par requêteLaneQueue · session · globalsupervised/services.pyAvant d’exécuter une requête, le couloir de session et le couloir global sont tous deux réservés, ce qui limite les exécutions concurrentes.
SharedServices.create_session
supervised/services.pyautorité · composition: ToolExecutor · AgenticLoopAgenticLoop · 6 phasescore/agent/loopConstruit l’exécuteur et la boucle comme une paire qui partage les hooks, le MCP, les skills et les verrous de ressources.
LaneQueue · session · global
supervised/services.pyflux de données: arun(prompt)AgenticLoop · 6 phasescore/agent/loopExécute un tour utilisateur en six phases : préparer l’entrée, préparer l’appel, appeler le fournisseur, traiter les outils, observer et compacter, terminer.
prompt système · sources déclarées
core/agent/loopflux de données: prompt systèmeadapter.acomplete · classes d’erreurscore/llm/adaptersConstruit à chaque tour à partir de sources déclarées, comme des sections choisies de GEODE.md et des règles. La façade à cinq niveaux de ContextAssembler n’est utilisée que sur appel explicite ; ce n’est pas l’entrée de la boucle par défaut.
messages de conversation · ConversationContext
core/agent/loopflux de données: messages de conversationadapter.acomplete · classes d’erreurscore/llm/adaptersLa conversation et les résultats d’outils antérieurs circulent séparément du prompt système.
BoundToolPlan · immuable
core/tools/plan.pyautorité · composition: schémas d’outilsadapter.acomplete · classes d’erreurscore/llm/adaptersSeuls les outils du BoundToolPlan lié à cette étape sont visibles par le modèle. C’est un instantané immuable doté d’une génération et d’un hash de contenu.
AgenticLoop · 6 phases
core/agent/loopflux de données: StepSnapshot · requêteadapter.acomplete · classes d’erreurscore/llm/adaptersLe StepSnapshot fige le modèle, les outils et les identifiants de corrélation de cet appel. Un middleware LLM ne peut pas remplacer un adaptateur lié.
adapter.acomplete · classes d’erreurs
core/llm/adaptersflux de données: HTTPSFournisseurs LLMUn adaptateur propre à chaque fournisseur effectue l’appel. Les échecs sont classés et retentés seulement dans une limite fixée, ou terminent le tour avec un motif d’arrêt.
adapter.acomplete · classes d’erreurs
core/llm/adaptersflux de données: réponse · tool_useAgenticLoop · 6 phasescore/agent/loopUn texte seul va vers l’arrêt ; tool_use va vers le traitement des outils.
Autorité de l’outil → effet → résultat
Une proposition tool_use ne s’exécute qu’une fois tous les contrôles passés ; refus, résultats et erreurs reviennent tous de l’exécuteur et deviennent l’entrée suivante du modèle.
AgenticLoop · 6 phases
core/agent/loopflux de données: lot en attente · sauvegarde par roundSQLite messages · state.jsonmemory/session_checkpoint.pyDans une session où le checkpointing est configuré (un checkpoint et un session id), le lot proposé est sauvegardé avant l’exécution de tout outil, et le lot ne s’exécute pas s’il ne peut pas être sauvegardé. Le lot achevé est sauvegardé à nouveau. Les appelants sans checkpoint n’ont pas cette garantie.
AgenticLoop · 6 phases
core/agent/loopflux de données: blocs tool_useToolCallProcessortool_executor/processor.pyUne proposition du modèle n’est pas une permission. Chaque appel reçoit un ToolContext portant l’identité du modèle et de l’adaptateur de la boucle.
ToolCallProcessor
tool_executor/processor.pyflux de données: aexecutepérimètre · politique · schématool_executor/executor.pyContrôle tour à tour le périmètre de session, les réécritures du middleware de requête, la politique et le schéma. Une réécriture qui abaisse le niveau de sûreté ou la classe de données personnelles est refusée.
BoundToolPlan · immuable
core/tools/plan.pyautorité · composition: autorisé · niveau de sûretépérimètre · politique · schématool_executor/executor.pyLes handlers exécutables et les niveaux de sûreté viennent du BoundToolPlan projeté pour la session.
PreToolUse · PostToolUse
tool_executor/executor.pyautorité · composition: PreToolUse · PostToolUseHookRegistry · décisionscore/hooksLes hooks publics décident d’un blocage, d’une réécriture d’arguments ou d’une demande de permission, et une réécriture est suivie de nouveaux contrôles de périmètre, de politique et de schéma. Après l’exécution, un hook peut ajouter du contexte ou retenir le résultat.
approbation · HITL
tool_executor/executor.pyautorité · composition: demande d’approbationUtilisateur du terminalDans une session IPC, la demande d’approbation est relayée à la CLI légère. Les modes sans personne appliquent par défaut la politique de refus ; la seule exception est le computer use en DAEMON, lorsqu’un opérateur l’active séparément (bloqué sinon).
tool_executor/executor.pyrefus avant exécution: refusé avant exécutionToolCallProcessor
tool_executor/processor.pyUn rejet de périmètre, de politique ou de schéma, un blocage PreToolUse ou une approbation refusée revient comme résultat d’erreur sans dispatch. Dans ce cas, aucun effet de cet appel n’a commencé.
effect receipt
tool_executor/executor.pyflux de données: admission de l’effet · validationEffectReceiptStorememory/effect_receipts.pyLes effets tels que modifications de fichiers, messages sortants ou actions d’administration sont admis avant leur exécution. Un résultat incertain n’est pas réexécuté ; il appelle un rapprochement.
verrou de ressource · dispatch
tool_executor/executor.pyflux de données: appel du handlerhandlers d’outils · bash · computercore/toolsTransmet au handler lié après avoir verrouillé ses clés de ressource. Un appel interrompu à son échéance peut encore s’exécuter à l’extérieur.
verrou de ressource · dispatch
tool_executor/executor.pyflux de données: appel MCPMCPServerManagercore/mcp/manager.pySeuls les outils MCP dotés d’une politique de ressources déclarée sont appelés.
MCPServerManager
core/mcp/manager.pyflux de données: tools/callServeurs MCPLe catalogue de serveurs provient des paramètres globaux et des paramètres de projet qui ont passé le contrôle de confiance ; ce contrôle ne s’applique qu’aux entrées de projet. Le gestionnaire MCP applique sa politique d’extensions et de ressources.
handlers d’outils · bash · computer
core/toolsflux de données: modifications de fichiers · git · processusFichiers · git · processusLes modifications exécutées restent un état extérieur. Le checkpoint ne restaure que la conversation et ne les annule pas.
tool_executor/executor.pyflux de données: résultat · erreur après dispatchToolCallProcessor
tool_executor/processor.pyAprès le dispatch, résultats normaux et erreurs (délais dépassés et résultats incertains compris) reviennent par PostToolUse. Une erreur ou un délai dépassé ne signifie pas que le travail extérieur s’est arrêté ou a été annulé.
ToolCallProcessor
tool_executor/processor.pyflux de données: tool_resultmessages de conversation · ConversationContextcore/agent/loopRésultats, refus et erreurs sont tous sérialisés en tool_result et deviennent des messages de l’entrée suivante du modèle.
ToolCallProcessor
tool_executor/processor.pyenregistrement · observation: observation appel · résultatSessionTimeline · append-onlyobservability/session_timeline.pyInscrit l’appel et son résultat (ok ou erreur) dans la timeline, y compris les appels refusés avant exécution. L’enregistrement est une observation ; il ne prouve pas qu’un effet extérieur a commencé ou réussi.
Enregistrements · reprise · achèvement
Le checkpoint, la timeline et les lignes de preuve sont écrits séparément. Il n’y a pas de transaction commune, et le checkpoint ne restaure que la conversation.
AgenticLoop · 6 phases
core/agent/loopflux de données: lot en attente · sauvegarde par roundSQLite messages · state.jsonmemory/session_checkpoint.pyDans une session où le checkpointing est configuré (un checkpoint et un session id), le lot proposé est sauvegardé avant l’exécution de tout outil, et le lot ne s’exécute pas s’il ne peut pas être sauvegardé. Le lot achevé est sauvegardé à nouveau. Les appelants sans checkpoint n’ont pas cette garantie.
SQLite messages · state.json
memory/session_checkpoint.pyflux de données: restauration à la repriseAgenticLoop · 6 phasescore/agent/loopUn seul chemin de restauration ramène les messages, l’état cognitif et les compteurs de garde. Le TaskGraph local au processus n’est pas restauré.
AgenticLoop · 6 phases
core/agent/loopenregistrement · observation: enregistrement du tourSessionTimeline · append-onlyobservability/session_timeline.pyUn historique d’exécution en ajout seul, jamais rejoué comme état.
AgenticLoop · 6 phases
core/agent/loopautorité · composition: contrôle d’achèvementverify_turn_asynccore/agent/verify.pyLa proposition d’arrêt du modèle ne devient un achèvement qu’en passant par Verify.
verify_turn_async
core/agent/verify.pyautorité · composition: PostVerify · StopHookRegistry · décisionscore/hooksLes décisions des hooks publics indiquent s’il faut poursuivre par une réparation, et les réparations n’ont lieu que dans un budget fixé (deux par défaut).
AgenticLoop · 6 phases
core/agent/loopenregistrement · observation: lignes de preuve · best-effortEvidenceLedger · JSONLagent/evidence_ledger.pyLignes de diagnostic caviardées. Les hashes servent à la corrélation ; une ligne ne prouve pas qu’un effet a eu lieu, et elle n’est pas écrite dans la même transaction que la timeline ou le checkpoint.
AgenticLoop · 6 phases
core/agent/loopenregistrement · observation: événements cognitifs · de cycle de vieHookSystem · observationcore/hooksLes hooks d’observation reçoivent et enregistrent les événements ; ils ne décident pas de l’exécution.
Autres chemins d’entrée
Les messageries entrent comme sessions DAEMON du démon serve ; le run_agent d’un hôte MCP externe entre dans une boucle sans interface à exécution unique construite à part.
Canal de messagerieflux de données: message de canalpollers de messagerie
core/serverLes pollers du démon serve ne traitent que les messages des canaux liés.
pollers de messagerie
core/serverautorité · composition: create_session(DAEMON)SharedServices.create_sessionsupervised/services.pyMode sans personne pour approuver : la politique de refus par défaut et un budget de temps s’appliquent. Seul le computer use peut être activé séparément par un opérateur ; sinon il reste bloqué.
pollers de messagerie
core/serverflux de données: arun(message)AgenticLoop · 6 phasescore/agent/loopUn fil garde un session id fixe et prolonge une seule chaîne de checkpoints.
Hôte MCP externeflux de données: run_agent(prompt)run_agent · exécution unique
core/mcp_server.pyUn hôte MCP externe appelle GEODE comme outil.
run_agent · exécution unique
core/mcp_server.pyflux de données: boucle sans interface à exécution uniqueAgenticLoop · 6 phasescore/agent/loopUn exécuteur et une boucle sans interface construits à part, qui contournent SharedServices. La liste de refus par défaut s’applique telle quelle : des outils comme run_bash, delegate_task et computer sont retirés ; l’exception de computer use du DAEMON n’existe pas ici.
Toutes les connexions avec la même épaisseur. Choisissez un flux pour ne mettre en évidence que son chemin, avec des étapes numérotées.
- Trait plein · sens de circulation des requêtes, messages et résultats d’outils
- Tirets · composition de session, autorité ou verdict ; pas un chemin de données
- Trait mixte long · enregistrements et observation ; jamais rejoués comme état
- Tiret court · refus avant exécution, sans effet
- Trait noir épais · le flux sélectionné ; les numéros donnent l’ordre
- Cadre · frontière propriétaire du code, chemin source dans l’en-tête
- Pastille intérieure · composant de cette frontière
- Cadre en tirets · hors du processus runtime
- Contour orange · là où un modèle décide
- Boucle d’exécution
- Autorité · verdicts
- Stockages d’enregistrements
- Entrée · connexion · exécution
Seules les connexions dont les appels ont été confirmés sont tracées. La façade à cinq niveaux de ContextAssembler, le TaskGraph et les expériences de recherche comme Jev, SIL et Crucible ne sont pas sur ce chemin du runtime. Une annulation asynchrone n’arrête pas un travail synchrone déjà lancé et n’annule pas les effets survenus.
Modèles pris en charge · par fournisseur
Les choix du catalogue du code et les valeurs par défaut livrées, pas une liste où chaque modèle aurait passé un appel d’API réel. Les chaînes de repli configurées sont vides par défaut, et les identifiants exacts ne sont jamais mis à niveau automatiquement vers des versions plus récentes.
Anthropic
API
- PrincipalClaude Opus 5.5
claude-opus-5-5Par défaut - SecondaireClaude Sonnet 5
claude-sonnet-5Par défaut - ÉconomiqueClaude Haiku 4.5
claude-haiku-4-5-20251001Par défaut
Afficher les 12 ID du catalogue
API
claude-fable-5-1claude-opus-5-5par défautclaude-opus-5claude-sonnet-5par défautclaude-haiku-4-5-20251001par défautclaude-fable-5claude-opus-4-8claude-opus-4-7claude-opus-4-6claude-opus-4-5claude-sonnet-4-6claude-sonnet-4-5-20250929
Le code rejette la voie OAuth par abonnement.
- PrincipalClaude Opus 5.5
OpenAI
API · abonnement Codex
- Défaut API et CodexGPT-6 Sol
gpt-6-solPar défaut
Afficher les 11 ID du catalogue
API · abonnement Codex
gpt-6-astragpt-6-solpar défautgpt-6-lunagpt-5.6-solgpt-5.6-terragpt-5.6-luna
API uniquement
gpt-5.5gpt-5.3-codexgpt-5.4gpt-5.4-minigpt-5.4-nano
Deux voies d’accès à un même fournisseur ; le catalogue fixe les voies autorisées pour chaque modèle.
- Défaut API et CodexGPT-6 Sol
Z.ai / GLM
PAYG
- Par défautGLM-5.3
glm-5.3Par défaut
Afficher les 9 ID du catalogue
PAYG
glm-5.3par défautglm-5.3-flashglm-5.3-flashxglm-5.2glm-5.1glm-5glm-4.7glm-4.7-flashxglm-4.7-flash
Le code n’admet pas la voie GLM Coding Plan.
- Par défautGLM-5.3
OpenRouter
Service de routage
- SélecteurFree (smoke)
openrouter/openrouter/freeRouteur - SélecteurAuto (variable)
openrouter/openrouter/autoRouteur
Des sélections du routeur, pas un modèle fixe. Les identifiants configurés explicitement peuvent aussi être conservés.
- SélecteurFree (smoke)
TypeSafe / Jev
Décision seulement · distinct de la génération de texte
- En direct
jev-1.13.0Décision uniquement - Via OpenRouter
typesafe/jev-1.13Décision uniquement
Un adaptateur optionnel qui ne fait que juger ; ce n’est pas un modèle racine de génération de texte. Le moteur de jugement par défaut est llm, et Jev doit être sélectionné. Les configurations propres à l’étude Jev suivent les enregistrements de la vue Jev.
- En direct
SourceGEODE main 373d420Commit public du October 7, 2026 · vérifié le October 8, 2026
Expériences
Modèles et voies tels qu’enregistrés à l’époque, et non valeurs par défaut actuelles ni liste complète de compatibilité.
Rapport de benchmark GEODE
July 31, 2026
- GEODEGPT-5.6 Sol
gpt-5.6-solAbonnement OpenAI · high
- GEODEGPT-5.6 Sol
Terminal-Bench 2.1 · spécification appariée Harbor 0.22.0
August 27, 2026
- GEODE · native CodexGPT-5.6 Sol
gpt-5.6-solabonnement · max
Une spécification figée ; tous les essais prévus ne sont pas devenus des résultats valides.
- GEODE · native CodexGPT-5.6 Sol
Exécution SIL archivée run-2606-broken-tool-use
- Échafaudage cibleGPT-5.5
gpt-5.5openai-codex - Auditeur · jugeClaude Opus 4.8
claude-opus-4-8PAYG
Un enregistrement de rôles distincts, et non deux valeurs par défaut interchangeables.
- Échafaudage cibleGPT-5.5