GEODE
Autonomous Agent Harness
From observation to the next action.
A local autonomous-agent harness you can hand research, file work and scheduled tasks.
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.
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.
Operator approvalrun · decide: approvalrun contract · models · budget
program.mdA run starts only after live calls and the fixed budget are approved. Without approval, only the contract is prepared and checked offline.
run contract · models · budget
program.mdrun · decide: run contractfixed-budget looptrain.pySeed 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.
fixed-budget loop
train.pyrun · decide: ask for one candidatemutator · one candidateloop/mutateOne evidence-backed hypothesis changes one allowed policy surface.
7 surfaces · no hyperparams
loop/mutatedata: policy change · mutation IDfile-backed policystate/policiesOnly 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.
seed pool · rubric fixed
prepare.pyrun · decide: seeds · rubric fixedaudit subprocess · fixed timeoutmeasure.pyprepare.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.
file-backed policy
state/policiesdata: selected policyper-policy OVERRIDE · STRICTmeasure.pymeasure.py reads the currently selected policy file and passes it into the audit environment.
per-policy OVERRIDE · STRICT
measure.pyrun · decide: per-policy override pathscore · policy loadersmeasure.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.
audit subprocess · fixed timeout
measure.pyrun · decide: audit subprocessPetri auditThe audit runs with a fixed timeout and budget, never changed mid-comparison. Missing output is a diagnostic gap, not a score of zero.
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.
Petri auditdata: dimension scorescritical regression · penalties
fitness.pyScores come with missing dimensions and sample counts. An unmeasured dimension is not read as an observation.
baseline · provenance
ledger.pydata: baseline · provenancecritical regression · penaltiesfitness.pyComparison uses only a baseline with the same recorded contract and epoch. A new Git branch does not isolate baseline state.
critical regression · penalties
fitness.pydata: fitness · regression reasons_should_promote · KEEPgate.pyCritical-dimension regressions and auxiliary penalties are checked first, then the margin or target-dimension test. A positive scalar alone never promotes.
_should_promote · KEEP
gate.pydata: KEEP · next baselinebaseline · provenanceledger.pyA kept candidate becomes the next baseline. A candidate kept locally is not a repository merge or a release.
_reject_and_revert
gate.pyrun · decide: REJECT · restore priorfile-backed policystate/policiesFor 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.
_should_promote · KEEP
gate.pyrecord · observe: result · verdict rowresults · mutation rowsledger.pyThe 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.
run-2606-broken-tool-userun · decide: three armsfixed-budget loop
train.pyThe 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.
gen-0 baseline · mean of 5 audits
run-2606-broken-tool-usedata: K=5 mean baselinebaseline · provenanceledger.pyThe gen-0 baseline was the mean of five audits (Petri broken_tool_use, lower is better, mean 2.667).
never arm · no-change control
run-2606-broken-tool-userun · decide: measure without changeaudit subprocess · fixed timeoutmeasure.pyThe 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.
--replicate K · re-measure
train.pyrun · decide: --replicate Kaudit subprocess · fixed timeoutmeasure.pyThe same candidate is measured K more times under the same conditions to filter out a lucky single audit.
replicate · re-measure a single KEEP
run-2606-broken-tool-userun · decide: re-measure → revert_reject_and_revertgate.pyA 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.