Geodi, GEODE's official pixel character
Back to the hall

GEODE

Autonomous Agent Harness

From observation to the next action.

A local autonomous-agent harness you can hand research, file work and scheduled tasks.

2026.02.21 — present

Design, judgment, verification: Author · implementation: Claude · review: Codex

  • CLIPublished · PyPI
  • MCP serverImplemented

Change one policy at a time; keep the measurement fixed.

A separate loop that runs outside the harness. From the baseline it applies one typed policy change, and the same Petri audit and gate decide between KEEP and restore.

SIL map · drawn from the evolve paths at pinned commit 9e2c041 and the June 2026 run record
GEODE policy search (SIL) mapA policy-search loop that runs outside the runtime. An approved run contract fixes budget, seeds, rubric and models, and the mutator changes one policy among seven allowed surfaces. measure.py audits GEODE with the same apparatus through Petri; fitness.py and gate.py decide KEEP or revert with critical-regression and promotion rules; ledger.py writes the baseline and result rows. The June 2026 run separated audit noise from mutation effect with a no-change never arm, a K=5 baseline and replicate measurement.Operator approvallive calls · budgetPetri auditauditor · GEODE target · judgeprogram.mdrun contract · models · budgetstop rules · run after approvaltrain.pyfixed-budget loop--replicate K · re-measureloop/mutatemutator · one candidate7 surfaces · no hyperparamsstate/policiesfile-backed policyprepare.pyseed pool · rubric fixedmeasure.pyaudit subprocess · fixed timeoutper-policy OVERRIDE · STRICTfitness.pycritical regression · penaltiesledger.pybaseline · provenanceresults · mutation rowsgate.py_should_promote · KEEP_reject_and_revertcore · policy loadersprompt branch · system_prompt.py6 policy loaders · tool, skill…run-2606-broken-tool-usegen-0 baseline · mean of 5 auditsnever arm · no-change controlrandom · gate armsreplicate · re-measure a single KEEPevolve/scaffold_searchexternal search loop · outside the runtimecandidate changeone per runmeasurement apparatusfixed during a comparisonrun-2606 · June 3–4, 2026broken_tool_useGEODE under auditonly allowed policies change1 approval · Operator approval → run contract · models · budget12 run contract · run contract · models · budget → fixed-budget loop23 ask for one candidate · fixed-budget loop → mutator · one candidate34policy change · mutation ID5 seeds · rubric fixed · seed pool · rubric fixed → audit subprocess · fixed timeout56selected policy7per-policy override paths8audit subprocess9audit dialogue1dimension scores2 baseline · provenance · baseline · provenance → critical regression · penalties23 fitness · regression reasons · critical regression · penalties → _should_promote · KEEP34KEEP · next baseline5REJECT · restore prior6result · verdict row1three arms2K=5 mean baseline3measure without change4--replicate K5re-measure → revert

One change → audit

With the run contract fixed, one allowed policy changes and GEODE is audited with the same apparatus. This is not the running product rewriting itself.

  1. Operator approvalrun · decide: approvalrun contract · models · budgetprogram.md

    A run starts only after live calls and the fixed budget are approved. Without approval, only the contract is prepared and checked offline.

  2. run contract · models · budgetprogram.mdrun · decide: run contractfixed-budget looptrain.py

    Seed and rubric revisions, role models and credential sources, measurement settings, iteration, time and cost budgets, the promotion policy and stop conditions are fixed before the run.

  3. fixed-budget looptrain.pyrun · decide: ask for one candidatemutator · one candidateloop/mutate

    One evidence-backed hypothesis changes one allowed policy surface.

  4. 7 surfaces · no hyperparamsloop/mutatedata: policy change · mutation IDfile-backed policystate/policies

    Only seven surfaces may change: wrapper prompt, tool policy, decomposition advice, reflection, skill-catalogue metadata, agent contract (role, system_prompt, tools), and tool descriptions and hints. Hyperparameter changes are rejected at both parsing and apply. Applying a policy, re-measuring and an optional commit are separate steps, so an application is not itself an audit.

  5. seed pool · rubric fixedprepare.pyrun · decide: seeds · rubric fixedaudit subprocess · fixed timeoutmeasure.py

    prepare.py is the fixed reference for the seed pool and rubric; candidates do not change it. Changing a measurement module changes the measurement, not the system under test.

  6. file-backed policystate/policiesdata: selected policyper-policy OVERRIDE · STRICTmeasure.py

    measure.py reads the currently selected policy file and passes it into the audit environment.

  7. per-policy OVERRIDE · STRICTmeasure.pyrun · decide: per-policy override pathscore · policy loaders

    measure.py passes the wrapper and per-policy override and strict paths to the audit subprocess, and the runtime’s matching policy loader reads each. The wrapper (GEODE_WRAPPER_OVERRIDE → system_prompt) is one branch; extra environment keys do not widen the seven mutable surfaces. An edited file alone does not prove the candidate reached the target; the audit evidence’s diagnostic confirms it.

  8. audit subprocess · fixed timeoutmeasure.pyrun · decide: audit subprocessPetri audit

    The audit runs with a fixed timeout and budget, never changed mid-comparison. Missing output is a diagnostic gap, not a score of zero.

  9. Petri auditdata: audit dialoguecore · policy loaders

    The auditor talks to GEODE through the seed scenario, and the judge scores the transcript.

Verdict → keep · restore

Compared with the same-contract baseline, critical regressions and the promotion rule decide KEEP; a rejected change is restored to its recorded prior value.

  1. Petri auditdata: dimension scorescritical regression · penaltiesfitness.py

    Scores come with missing dimensions and sample counts. An unmeasured dimension is not read as an observation.

  2. baseline · provenanceledger.pydata: baseline · provenancecritical regression · penaltiesfitness.py

    Comparison uses only a baseline with the same recorded contract and epoch. A new Git branch does not isolate baseline state.

  3. critical regression · penaltiesfitness.pydata: fitness · regression reasons_should_promote · KEEPgate.py

    Critical-dimension regressions and auxiliary penalties are checked first, then the margin or target-dimension test. A positive scalar alone never promotes.

  4. _should_promote · KEEPgate.pydata: KEEP · next baselinebaseline · provenanceledger.py

    A kept candidate becomes the next baseline. A candidate kept locally is not a repository merge or a release.

  5. _reject_and_revertgate.pyrun · decide: REJECT · restore priorfile-backed policystate/policies

    For a runner-made candidate, the policy section recorded under its mutation ID is restored, and a failed restore is flagged. Manual changes are not restored automatically, and an uncertain restore stops the next candidate.

  6. _should_promote · KEEPgate.pyrecord · observe: result · verdict rowresults · mutation rowsledger.py

    The measurement, verdict and provenance are written once as result rows; historical rows are never rewritten.

Controls · replicate measurement

June 2026 run: a no-change never arm and a K=5 baseline measured audit noise separately, and a single-audit KEEP was rechecked with replicates.

  1. run-2606-broken-tool-userun · decide: three armsfixed-budget looptrain.py

    The June 3–4, 2026 run separated drift from mutation effect with three arms: never (no change), random (random acceptance) and gate (accepted by the verdict). The target was GPT-5.5; the auditor and judge were Claude Opus 4.8.

  2. gen-0 baseline · mean of 5 auditsrun-2606-broken-tool-usedata: K=5 mean baselinebaseline · provenanceledger.py

    The gen-0 baseline was the mean of five audits (Petri broken_tool_use, lower is better, mean 2.667).

  3. never arm · no-change controlrun-2606-broken-tool-userun · decide: measure without changeaudit subprocess · fixed timeoutmeasure.py

    The never arm drifted to a mean of 3.38 without any policy change (10 audits, lower is better): direct evidence that audit noise exceeded the mutation effect.

  4. --replicate K · re-measuretrain.pyrun · decide: --replicate Kaudit subprocess · fixed timeoutmeasure.py

    The same candidate is measured K more times under the same conditions to filter out a lucky single audit.

  5. replicate · re-measure a single KEEPrun-2606-broken-tool-userun · decide: re-measure → revert_reject_and_revertgate.py

    A candidate kept on a single gate audit (1.6) measured 3.0–3.8 on replicates, worse than the baseline, so the champion 2.667 was restored. The run concluded no clear improvement.

Every connection at the same weight. Pick a flow to highlight only its path, with numbered steps.

  • Solid · the direction requests, candidates and results flow
  • Dashed · run, decide, authorize, configure
  • Long dash-dot · records and observation, separate from the verdict
  • Heavy black line · the selected flow; numbers give the order
  • Box · a code or record boundary, its path in the header
  • Inner chip · a component in that boundary
  • Dashed box · outside that boundary
  • loop · measurement run
  • contract · verdict
  • policy · records
  • change · audited target · run record

GEODE’s SIL driver is named autoresearch; its prepare/train/program shape and fixed budget take after Karpathy’s autoresearch. No model weights change, and the apparatus and budget stay fixed during a comparison.

What may change
Seven surfaces: wrapper prompt, tool policy, decomposition advice, reflection, skill-catalogue metadata, agent contract, and tool descriptions and hints. Evaluator, budget, seeds and rubric stay fixed during a comparison.
Scope of the run record
run-2606 values are that run’s Petri broken_tool_use means (lower is better). They are not evidence of cumulative SIL improvement or generalization.