Skip to content

Archon Architecture

Archon is a session-based AI engineering governance framework that runs inside pair-programming IDEs (e.g., Cursor). It is not an AI assistant enhancement plugin — it elevates the AI agent from "tool that follows instructions" to "engineering owner with full project accountability."

Audience: contributors and adopters who want the full system design. For a 10-minute tour, read concepts/overview.md first; for installation steps, read setup.md; for a walk-through of the real pain points Archon addresses, read user-journeys.md.

Design Philosophy: Five Identity Axioms

Comic explainer: Archon identity axioms

Every design decision in Archon derives from these five axioms. Any external practice must pass through them before adoption.

#AxiomMeaningDesign Impact
1Ownership > AssistanceAgent is the project owner, not an assistant. Decisions, quality, consequences are yours.Agent makes engineering decisions autonomously — never asks the user to pick A or B
2Constraints > DocumentationType system > linter > editor rules > docsIf a machine can enforce it, don't write prose
3Inference > ConfigurationDerive behavior from project state, not mode flagsNo mode=harden config switches
4Lean > BloatFewer, stronger knowledge assetsMust justify "why can't an existing file carry this?" before creating a new one
5Separation > Self-ReviewThe executor must not judge its own workKnowledge capture and full review delegated to independent sub-agents

System Architecture Overview

Comic explainer: Archon system map

At a glance, Archon has six ownership lanes: Soul defines identity, Wake/Commands route work, DOMAIN LENS focuses one demand and routes reusable capability needs, Lifecycle enforces gates, RUN-STATE v2 proves commit readiness, and Knowledge Assets preserve promoted learning.

Delivery lifecycle summary: Decision Gate → Self-directed Execute → Validation Gate → Close-Out(9) (incl. Blink Dispatch) → Git.

Domain Lenses vs Extensions

Domain Lenses sit inside demand reasoning; Extensions sit on lifecycle edges.

MechanismScopeUse For
.archon/domain-lenses/One delivery's professional focus or reusable capability routingPM, QA, development, design, planning, architecture, creative, art, best-practice capability selection, or other domain toolkits
.archon/extensions/Project-local lifecycle hookspre-scan, close-out, review, dashboard, demand-pool, or workflow automation

If the capability changes how Archon thinks about one demand, add a Domain Lens. If it changes when Archon runs extra lifecycle behavior, add an Extension.

Mechanism Boundaries

Archon avoids architectural muddiness by assigning one ownership lane to each mechanism:

MechanismPrimary QuestionBoundary
soul.md + soul/What kind of owner is Archon?Identity and discipline only; project facts live in project-state files such as manifest.md, debt.md, memos.md, and .archon/decisions.md.
.archon/domain-lenses/Which professional lens or reusable capability route should one demand use?One lens per delivery; no lifecycle hooks, persona changes, provider-specific manuals, or selector ownership in universal cards.
.archon/extensions/When should project-local lifecycle behavior run?Hooks around pre-scan, close-out, review, or dashboard; no domain reasoning pack.
blink-dispatchIs independent sub-agent review worth launching?Dispatch decision only; the main agent still owns the delivery.
Run-State v2Is this delivery complete enough to commit?Ephemeral proof and staged-path ownership; not long-term memory.
drift.md + .archon/drift/archive/What was delivered, what was learned, and is review pressure high enough?Hot delivery index, post-delivery review, archive recall, and review pressure; not a planning backlog or process wish list.
governance-contract.yaml + checkersWhat baseline contracts must travel with Archon?Portable framework checks only; project-specific policy belongs in project-state files or local overlays.

Layered Operating Model

Comic explainer: Archon layered operating model

Archon is easiest to reason about as a cognitive operating system: each layer receives a narrower signal, produces a stronger artifact, and must not steal responsibility from adjacent layers.

LayerVehicleOwnsInputsOutputsBoundary
Thinking constitutionsoul.md + soul/Identity, axioms, autonomy, review discipline, and evolution principlesUser intent, loaded mode, project state summariesJudgment frame and non-negotiable constraintsMust not store project facts, delivery logs, or domain toolkits
World modelmanifest.md + .archon/manifest/archive/Durable project facts, user language aliases, current state, validation command, knowledge asset index, latest-review summaryCompleted deliveries, project changes, verified numeric facts, stakeholder phrasing, review conclusionsHot project context plus cold review detailMust not become a process log or framework rulebook
Memory statedrift.md, memos.md, debt.md (hot summaries) backed by .archon/{drift,memos}/records/ + .archon/debt/items/ (per-event source of truth, ADR-22)Delivery experience, stakeholder conclusions, unresolved responsibility, review pressureClose-Out, auditor/reviewer findings, stakeholder decisionsExperience records, review triggers, debt gatesDrift is not a backlog; memos are not routine delivery logs; debt hot index must retain gate fields. Hot summaries are auto-regenerated from records — concurrent PRs no longer conflict on these files.
Professional organization.archon/domain-lenses/One demand's professional focus, reusable capability routing, bounded atomic tools, and per-tool load-line cost so the selector can stay within max_total_load_linesDemand text, registry signals, manifest/skill metadata candidates, tool descriptions, lens contracts, declared load_lines budgetdomain_lens:, selected tool IDs, and optional capability_selection asset packet (must include total_load_lines)A lens is not a persona, lifecycle hook, exported sub-agent, provider manual, or soul override; tool count and load-line ceilings are AND-conjoined
Delivery actionCommands, code, docs, tests, scriptsConcrete changes to the repositoryJudgment frame, project facts, selected lens/tools, validation targetChanged files and Close-Out evidenceExecution must not self-approve or bypass validation
Reality proofL0/L1 checks, manifest-declared validation command, portable checkersMechanical evidence that the change is safeChanged files and governance contractsGreen/failing validation resultsA prose claim is weaker than a runnable guard
Evolution filterClose-Out review + evolution_triage / evolution_evidenceDistinguishing noise, statistical signal, and first-principles signalDelivery record, validation result, auditor/reviewer signalstats-pass, first-principles-pass, or stay-in-drift with matching evidenceMust not promote one-off preference through the statistical channel
CrystallizationL0 type, L1 test, L2 rule, L3 skill/domain tool, L4 ADR, L5 manifest/debtConverting learned signal into the strongest fitting vehicleTriage result and self-test matrixStronger reusable constraint or durable recordMust not create a parallel runtime, daemon, or new state lane

The flow is directional but not a waterfall: user intent is narrowed by the thinking constitution, grounded in world model + memory state, focused by professional organization, proven by reality checks, filtered for evolution, and crystallized into stronger context for the next delivery.

Boundary checks:

  • If a fact or user phrase mapping must be known at boot, put it in manifest.md; if it only explains what happened, keep it in drift.md.
  • If a capability changes how one demand is reasoned about, use a Domain Lens; if it runs at a lifecycle point, use an Extension.
  • If a learning can be checked mechanically, promote it to L0/L1/L2 before writing more prose.
  • If a learning has one weak sample, leave it in drift unless it falsifies a core assumption and names the smallest validation experiment.
  • If a mechanism needs a daemon, external protocol schema, or extra state lane, it is not Archon-native evolution.

Layer handoff contracts:

HandoffRequired OutputFails If
Thinking constitution → World modelA judgment frame that can be grounded in current project statesoul.md tries to remember project facts, or manifest.md is skipped
World model + Memory state → Professional organizationCurrent facts plus relevant prior decisions, debt, and drift pressureThe selected lens ignores known project state, debt, or stakeholder memory
Professional organization → Delivery actionOne domain_lens: decision and a bounded set of selected tool IDs or selected capability assetsMultiple lenses are blended, a lens behaves like a persona, tools create lifecycle gates, or a selector packet replaces main-agent ownership
Delivery action → Reality proofChanged files plus the intended validation targetExecution self-approves, skips validation, or treats unverified prose as proof
Reality proof → Evolution filterGreen/failing validation result plus delivery evidenceClose-Out records learning without validation evidence or auditor/reviewer context
Evolution filter → CrystallizationA matching evolution_triage + evolution_evidence pairWeak samples are promoted as statistics, first-principles claims omit the broken assumption, or drift becomes a backlog
Crystallization → Next deliveryA stronger reusable vehicle at the lowest sufficient layerA machine-checkable rule remains only prose, or a one-off note becomes permanent machinery

Cognitive Loop

Comic explainer: Archon wake mechanism and cognitive loop

The agent's behavioral model is a loop with backtracking at any stage, not a waterfall: Perceive → Model → Act → Verify → Perceive.

  • Perceive: Hot-path read the required soul/manifest sections, then load cold reference sections only when the demand touches them
  • Model: Decompose the problem, form a plan
  • Act: Execute the plan (write code, change config, update docs)
  • Verify: Run validation command, confirm results meet the goal
  • If verification fails → loop back to Perceive

Wake Mechanism

One of Archon's design goals is a zero-cognitive-burden entry point — the user need not remember any command names; saying "hi archon" activates the engineering persona. This requires two layers working in concert:

Dual-Channel Entry

Three entry paths are supported: natural wake (hi archon ...), explicit routing (/archon demand: ...), and direct command (/archon-demand ...). The wake route hot-path reads required sections before routing; all paths converge on the same mode command.

Architectural Decision: Rule Layer + Command Layer

LayerFileMechanismResponsibility
Triggerarchon-wake.mdcalways-applied ruleDetect natural language wake words, guide to routing layer
Routerarchon.mdcommandAnalyze intent or parse explicit prefix, route to target mode
Executorarchon-{plan,demand,review}.mdcommandComplete workflow for each mode

Why not pure Commands? Commands require the user to type the / prefix. If the unified entry point were only a Command, "hi archon" style natural language could never activate it — that's designing from system capabilities (command mechanism) instead of user workflow, an "inside-out" blindspot. The always-applied rule adds ~15 lines to every conversation but only does pattern matching and routing — the actual routing logic lives in the command layer, loaded on demand.

Drift Precheck

The /archon router's Step 0 reads drift.md §Current Value and compares against tiered thresholds BEFORE any routing. This is a mechanical gate (L1 test: governance.test.ts §Drift gate fails red if drift crosses emergency without a trailing review reset row), not a documentation convention. Three outcomes:

StateAction
drift ≥ emergencyDemand intake halted · force route to review · output 🔴 DRIFT EMERGENCY
drift ≥ fullSTOP routing unless input prefix is review · output 🟠 DRIFT GATE
drift ≥ lightContinue routing silently · insert light review before next medium/large demand · output 🟡 DRIFT NOTICE
drift < lightSilent pass-through

Rationale: documentation-only drift precheck was empirically bypassed (history: drift reached 108% of full threshold while demands kept executing — resolved by ADR-9).

Delivery Lifecycle

Comic explainer: Archon delivery lifecycle

The complete /archon-demand flow is: Boot → Pre-Scan → Fast-Path? → Decision Gate → Verdict → Self-directed Execute → Validation Gate → 9-Step Close-Out → Version Control.

The 9-Step Close-Out is intentionally summarized here; the command file owns the exact checklist. In architecture terms, the important split is simple: the execution interior is flexible, while Verdict, validation, Run-State, Blink Dispatch, drift, memory, and git remain hard boundaries.

Boundary-Hard, Process-Soft Execution

Archon does not hard-code how the agent must execute a delivery after Verdict=proceed. The fixed lifecycle nodes are engineering boundaries, not a recipe for the agent's inner loop.

Inside execution, the agent owns the plan: choose tools, order steps, add temporary helpers, revise approach after evidence, and use the selected Domain Lens/tools as guidance rather than a scripted procedure. This is the Browser Harness lesson translated into Archon terms: give the model a broad action space and strong feedback surfaces, then constrain only the boundaries that protect project integrity.

The hard boundaries remain non-negotiable: Verdict before writes, selected project facts and memory before judgment, manifest-declared validation before delivery, Run-State/commit proof before version control, independent review when risk or drift requires it, and durable knowledge capture only when the evolution filter justifies promotion.

Fast-Path (collapsed ceremony)

Qualified trivial deliveries (≤2 files · no new pattern/module/dep · no governance file · no infra/auth/schema change · no user-facing behavior change) collapse the structured gates and skip the judgment-heavy close-out steps (auditor, memos, extensions). Drift is fixed at +1 and tracked; fast-path share > 60% in a cycle flags evasion risk. See soul/delivery.md §Delivery Fast-Path.

Structured Gate Outputs (Verdict / Close-Out)

The Verdict (decision gate exit) and the Close-Out statement (closeout-phase compliance checklist) produce machine-checkable output that the capture-auditor verifies as a lifecycle-compliance dimension. Missing or malformed gate output is a blocking finding, not a soft warning. These outputs were previously labeled GATE-1 / GATE-2; historical log entries retain the old labels.

Run-State Gate

Run-State v2 stores active delivery state in .archon/runs/<run_id>/state.json, with events.ndjson as an append-only trace. This replaces the singleton-state bottleneck of legacy .archon/run.md: multiple deliveries can have distinct run directories, while commit-time resolution fails closed if more than one run is commit-ready unless ARCHON_RUN_ID is explicit. The resolver also checks staged path ownership: staged files must be listed in the selected run's changedPaths, otherwise the commit is blocked. Legacy .archon/run.md remains only as a migration fallback for adopter projects that have not shipped the helper yet.

Delivery State Dataflow

Each delivery moves through several state vehicles. They are deliberately separate so no file carries both in-flight proof and long-term memory:

PhaseState VehiclePurposeLifetime
Boot → Close-Out.archon/runs/<run_id>/state.jsonTracks SOP completion, changed paths, and commit permissionEphemeral; removed after commit
Close-Out step ⑤.archon/drift.md + .archon/drift/archive/*.mdRecords delivery summary, post-delivery review, complexity score, and review pressureHot index under line budget; older complete rows move to keyword-indexed cold archives
Manifest sync.archon/manifest.md + .archon/manifest/archive/*.mdRecords durable project facts, latest validation, current milestone, indexed knowledge assets, and archived latest-review detailHot project context; long review/history detail moves to cold archive
Promotion threshold metdebt.md + .archon/debt/archive/*.md / rules / tests / skills / .archon/decisions.md / docs/archon/decisions.mdCarries repeated failures, enforceable constraints, reusable practices, or architectural rationaleProject ADRs stay in .archon/decisions.md; reusable framework ADRs stay in docs/archon/decisions.md

Rule of thumb: Run-State proves the delivery can commit; drift hot index records recent events, current pressure, and archive pointers; drift archives preserve older rows for on-demand recall; manifest records durable project state; debt hot index keeps active gate fields visible while debt archives preserve rationale; rules/tests/skills/ADRs receive only promoted findings.

Plan-mode binding (ADR-11, since 2026-04-19): the Verdict MUST be output before any write-side tool invocation. Cursor's native Plan mode (read-only + write tools denied by the platform) is the platform-enforced realization of this rule — the "decide before acting" discipline is promoted from L3 prose convention to L2 platform capability. When a session already started in Agent mode, the rule degrades to L3 self-discipline and Close-Out records Plan mode not used: <reason> for long-tail auditing.

Convergence Gate (Milestone-Scoped Demand Filter)

When the current milestone is under forced convergence, manifest §Current State declares a Convergence scope: [<DEBT-IDs>] list that enumerates the debt items the next non-exempt delivery MUST advance. The Verdict step classifies each incoming demand as in-scope or out-of-scope; out-of-scope demands receive Verdict=reject with rationale "out of convergence scope" — unless one of four exits applies:

  • Emergency-review remediation (tail fixes within an emergency-reset loop)
  • L0/L1 gate regression fix (a broken type/lint/test gate blocks everything, so fixing it is always in-scope)
  • Tooling unblocking the declared scope (e.g., a codegen script that the scope debt depends on)
  • User override — the demand text contains an explicit override phrase ("override convergence" / "framework priority" / similar); the phrase is quoted verbatim in the Verdict rationale and an override record (≥ +1 drift) is created via node scripts/archon-records.mjs new drift --type delivery --delta +N --summary "..." (per ADR-22; the hot summary auto-regenerates and the override record IS the audit trail)

The gate is L2-enforced by governance.test.ts §Convergence gate — if the manifest declares a Convergence scope, the archon-demand command file must carry the **Convergence gate** clause and the out of convergence scope rejection phrase, otherwise validation fails. This promotes milestone-level forced convergence from L3 manifest prose to a mechanical filter. Recorded in ADR-12.

Scope lifecycle: populated when a milestone enters its convergence phase, cleared when the milestone closes. scope=[] = "open period" — gate is inert.

Drift Mechanical Floors

Self-assessed complexity in close-out step ⑤ is bounded below by file-count floors: ≥3 files = small (+2); ≥6 files = medium (+3); ≥10 files OR new module/pattern/dep = large (+5). Applied as max(self, floor). When the floor raises by ≥2, an adjustment note is logged. See drift.md §Rules.

Decision Gate

Three questions must be answered before acting:

QuestionJudgment Criteria
Should it be doneReal problem or hypothetical? Is there a no-code solution?
How bigBlast radius (files affected) + reversibility (rollback cost)
Who decidesEngineering decisions are yours; product direction goes to the user

When the assessment is "don't do it" — reject the demand with rationale and alternative. This is the agent's responsibility.

Comic explainer: Source Modularity Probe — foresight-style axis check at the Decision Gate

The Decision Gate accepts three mechanical probes as input before the Verdict; each probe is a deterministic match against a manifest-declared map plus the changed-paths candidate set, surfaced one line above the Verdict block:

ProbeADRWhat It SurfacesMap SourceOutput Token
RadiusADR-23How many files / modules a delivery touches; which boundaries it crossesmanifest §Module Boundary Mapradius_probe: files=N|modules=N|crosses=[...]
Soul-headroomADR-23 extensionWhen changed-paths intersect soul, surface cap-pressure (<current>/<cap> = <pct>%); ≥95% forces compress-first or explicit-cap-widening ADRsoul cap declared in manifest §Context Budgetsoul_headroom: <current>/<cap> = <pct>% (<remaining> lines)
ModularityADR-29When changed-paths create a new file or match a declared modularity glob, surface whether the change folds a second concept-axis into a file already responsible for one (fan-out-needed → prior split commit OR map-update Verdict)manifest §Source Modularity Mapmodularity_probe: target=<path>|axes=<axis-cell,...>|status=aligned|fan-out-needed|undeclared

All three probes share one contract: machinery checks the boundary, the owner decides. Probes never block a Verdict — they make the structural fact visible at the decision point so an override carries explicit rationale rather than silent omission. Modularity in particular is foresight pressure: it asks "if I add this content, does it fold a second axis into a file already responsible for one?" before the file accumulates concept-axis debt, rather than after a stakeholder asks "isn't this getting hard to manage?".

Validation Gate

After delivery, the manifest-declared validation command (typically lint + typecheck + test) must be run. Red means fix to green — "pass now, fix later" does not exist.

Sub-Agent Delegation in Close-Out

Step ② is Blink Dispatch: the main agent performs deterministic thin-slice triage before any close-out sub-agent is launched. High-risk slices dispatch to an independent sub-agent; low-risk slices record subagent_dispatch: skip:<reason>. This preserves Archon's separation principle without paying sub-agent latency for mechanical low-risk deliveries. See Sub-Agent Delegation Model.

Constraint Pyramid

Comic explainer: Archon constraint pyramid

Archon's quality assurance does not rely on documentation — documentation is the weakest constraint. Every rule worth following gets pushed to the strongest possible level:

LayerVehicleEnforcement Strength
L0Type systemWon't compile = doesn't exist
L1Linter / testsViolation = won't commit
L2Editor rulesPrompted during editing
L3Skill documentsLoaded on demand
L4ADRsHistorical traceability
L5ManifestContext synchronization

Golden rule: If a machine can enforce it, don't write prose. Documentation carries only "why" and design intent that machines cannot express.

Constraint Maturity & Lint-Rule Bridge

Every constraint has an upgrade path: Discovered → SHOULD (docs) → MUST (lint/test). A constraint staying at documentation level when it could be mechanically verified = a reliability gap.

The Lint-Rule Bridge closes L2's passivity gap: lint error messages contain → Read <rule-file-path>, forcing the AI to load the full spec on violation. L1 actively triggers L2. See soul.md §Guardrail System for the complete specification.

Knowledge Evolution System

Comic explainer: Archon knowledge evolution and forecast

Archon is not a static framework — it accumulates and strengthens its knowledge with every delivery.

Delivery Evolution Loop

Archon translates external self-evolution ideas into its own constraint pyramid. It does not copy external protocol formats or run a daemon; it promotes delivery experience into stronger local vehicles:

Delivery experience moves through Delivery Event → Evolution Signal → Promotion Decision → Stronger Vehicle.

StageArchon VehicleRule
Delivery Eventdrift.md entryEvery completed demand leaves an auditable delivery record
Evolution Signalpost-delivery review + auditor/reviewer findings + validation failuresOne-off observations stay in drift
Promotion DecisionClose-Out judgmentPromote only repeated, enforceable, reusable, or architectural findings
Stronger Vehicletest / rule / skill / domain tool / ADR / debt / manifestUse the strongest fitting layer; do not create a parallel evolution system

Translate, do not copy: Archon may borrow the concepts of compact lessons, auditable events, signal de-duplication, and promotion thresholds. It must not copy external GEP/Gene/Capsule/Event schemas, install a self-evolution daemon, depend on a Hub/worker network, or turn drift.md into a backlog.

Preservation Axis (Dual to Crystallization)

Comic explainer: Archon preservation axis — evolution dual motion (crystallize + preserve)

Per ADR-28, evolution is a two-motion discipline. Crystallization captures what should change (new knowledge → stronger vehicle). Preservation captures what should be kept (load-bearing knowledge → pinned anchor) so a later edit cannot silently drain it. Treating only the first motion as "evolution" produces a framework that drifts toward whatever was last broken — losing the rules that explain why nothing else broke.

MotionQuestionVehicleWhere it runs
Crystallization"What did this delivery teach that should change Archon?"New / updated test, rule, skill, domain tool, ADR, debt, manifest entryTrigger table + Close-Out post-delivery review (a)(b)(c) + capture-auditor §Knowledge Capture
Preservation"What did this delivery rely on that must not silently drain?"Pin in critical-rule registry + body-shape test + portable contract entrySoul §Preservation Axis + soul/review.md §Preservation Signals + Close-Out post-delivery review (d) + capture-auditor §Preservation Scan + plan §Proactive Scrutiny preservation probe

A preservation pin is a tripwire, not a wall: the pinned item is still removable, but removal must be an explicit, auditable edit (delete the pin, the test, and the contract entry together) rather than a silent body-drain. Saying "this rule is important" in prose is not preservation — that is exactly the failure mode preservation guards against.

Preservation hardening — mechanical guards (DEBT-074..077 closure)

Four mechanical guards keep Preservation from degrading into ceremony, registered as L1 lint after the introducing delivery's Full review surfaced the gaps:

GuardWhat it catchesImplementation
Substance gate for none-this-cycle(<evidence>)Frictionless escape valve — empty or hand-wave evidence on the Close-Out checklistarchon-claim-verifier.mjs --mode=preservation requires evidence ≥40 chars + verb-of-scanning + scan-target
First-pass degeneracy guardIntroducing delivery self-classifying its own additions as pin-worthy-now (cycle has not started)Same --mode=preservation requires explicit "first pass / introducing delivery / pinned-bootstrap" framing when pinned anchors appear in the same diff
Header-anchor body-shape declarationAnchor pinned at header level while body is silently drainable (DEBT-077 rule-of-3 3/3 stagnation)Every header-shape entry in the critical-rule registry MUST declare body_shape: 'has-body-shape-test' | 'header-only' | 'token-only'; absent declaration fails L1
Capture-auditor protocol step alignmentInserting a new step without renumbering (e.g., two step "4"s)L1 test asserts numbered protocol steps == declared jobs + 2 setup steps, contiguous numbering 1..N

These guards do not prevent preservation from staying simple — they prevent the simple form from quietly degrading. The cumulative-frequency surface (multiple none-this-cycle Close-Outs across cycles) becomes a Full review signal once the substance gate is in place; without the gate, all evidence looks identical and the signal collapses.

Evolution Self-Test Matrix

Before promoting a delivery observation into a stronger vehicle, Archon self-tests the promotion:

Self-Test QuestionRequired EvidencePromotion Fails If
Is the signal real?Source named in drift: post-delivery review, auditor/reviewer finding, validation failure, or repeated patternThe observation is only a preference, hunch, or one-off inconvenience
Is the target the strongest fitting vehicle?Chosen vehicle matches the constraint pyramid: test/rule for enforceable constraints, skill/domain tool for reusable practice, ADR for architecture, debt for unresolved risk, manifest for durable project factA machine-enforceable rule remains prose, or a one-off note becomes a permanent asset
Is the Archon-native boundary intact?No external schema, daemon, Hub/worker dependency, or new state vehicle is introducedThe change copies an external protocol or turns drift.md into a backlog
Is regression guarded?L1 test/rule exists, or drift explicitly records why a guard is not applicable yetA promoted claim has no mechanical guard and no stated reason

Evolution Signal Triage Matrix

Archon filters delivery experience through two gates: statistics suppress routine noise; first principles preserve rare structural signals.

Triage ResultPromotion RuleRequired EvidenceDefault Vehicle
stats-passPromote when the signal is repeated, reproducible, costly, cross-context, and mechanically enforceableAt least 2-3 related drift/auditor/validation samples; no one-sample exceptiontest / rule / skill / debt
first-principles-passPromote a one-off signal only when it falsifies a core assumption or exposes a constraint-pyramid gapThe broken assumption, the principle it touches, and the smallest validation experiment are namedADR / test / skill
stay-in-driftKeep observations that are preferences, hunches, local inconvenience, or weakly evidenced process noiseDrift entry records why the signal is not yet strong enoughdrift only

Close-Out promotion decisions must record one of these labels as evolution_triage=<stats-pass|first-principles-pass|stay-in-drift>. A promoted finding without one of these labels is considered untriaged.

Triage labels are not enough by themselves. Close-Out must also record one compact evidence shape:

Triage ResultEvidence Shape
stats-pass`evolution_evidence=stats(samples=<n>, source=<drift
first-principles-passevolution_evidence=first-principles(assumption=&lt;broken assumption&gt;, experiment=&lt;smallest validation&gt;)
stay-in-driftevolution_evidence=drift(reason=&lt;why not promoted yet&gt;)

The triage label and evidence kind must match: stats-pass pairs only with stats(...), first-principles-pass pairs only with first-principles(...), and stay-in-drift pairs only with drift(...).

Architecture Forecast Loop

Archon also forecasts the next likely architecture pressure after each non-fast-path delivery. The forecast is compact and written in the delivery record, not a separate planning system:

The forecast names three things: the most likely next risk, the next useful optimization if that risk materializes, and confidence (low|medium|high). It is not a backlog, roadmap, or permission to bypass the next Decision Gate. A future demand still starts from fresh project state and must pass Verdict before any work begins.

Dynamic Acceptance Criteria

Acceptance criteria are not static paperwork. When a delivery introduces a new technology, architecture layer, module, pattern, or optimization that changes validation needs, Archon treats that as an acceptance-contract delta. The same delivery must either update the manifest's milestone criteria, extend the validation command, add or update a test/rule/skill guard, or explicitly record Acceptance criteria delta: no-change.

This keeps the contract dynamic without making it informal: the acceptance standard can evolve, but the evolution must land in manifest.md, tests, rules, skills, or validation rather than prose-only intent.

Trigger → Capture → Crystallize

Trigger signals include hit-a-wall pivots, repeated patterns, external feedback, new technology, business insight, discovered concepts, and conventions. Each signal is assessed against the constraint pyramid and promoted only when a stronger vehicle is justified.

Reasoning Capsules & Anti-Rationalization

On a hit-a-wall pivot, the successful debug path (Symptom → Root Cause → Fix) is embedded in the relevant skill document — not a standalone file. Anti-rationalization tables (Red Flags) embedded in each skill provide immediate correction when the agent rationalizes cutting corners. See soul/delivery.md §Reasoning Capsules for details.

Sub-Agent Delegation Model

Comic explainer: Archon sub-agent delegation

One of Archon's core architectural principles: Execution and judgment must be separated.

The main agent remains the project owner. Blink Dispatch decides whether close-out needs capture-auditor; drift/manual review launches archon-reviewer; broad capability/toolset requests may launch a read-only selector subagent to return a compact asset-selection packet before the main agent loads full skills or tool cards. Sub-agents advise, audit, or summarize selection; they do not take ownership of the delivery.

Delegation Threshold & Cost Awareness

See soul/delivery.md §Lifecycle Hooks for the complete delegation criteria and cost awareness principle. Key rule: mechanical checks stay as self-audit; judgmental assessments (knowledge value, bias correction) warrant delegation.

Capability selection is a context-budget delegation, not a lifecycle gate or exported agent file. Use a generic read-only subagent only after Verdict=proceed when Level 1 domain-tool metadata plus manifest/platform skill metadata point to multiple plausible candidate assets, or when reading full candidate assets would crowd the main agent's working context. The selector's output is advisory; the main agent still performs the Verdict, loads the chosen assets, executes the delivery, validates the result, and closes out.

State Management

Comic explainer: Archon state and memory model

Archon manages project state through three living files, auto-updated after each delivery.

Comic explainer: One file per event, never collide — records-folder

Per ADR-22 records-folder, the three event-stream state files (drift.md / memos.md / debt.md) are hot summaries auto-generated from per-event records under:

Hot summaryRecords source of truthSentinel sectionsHelper command
.archon/drift.md.archon/drift/records/&lt;ISO8601&gt;-&lt;slug&gt;.mdcurrent-value, lognode scripts/archon-records.mjs new drift --type delivery --delta +N --summary "..." then regen drift
.archon/memos.md.archon/memos/records/&lt;ISO8601&gt;-&lt;slug&gt;.mdhot-memos... new memos --topic "..." --conclusion "..." --source "..." then regen memos
.archon/debt.md.archon/debt/items/DEBT-NNN-&lt;slug&gt;.mdactive-debt... new debt --id DEBT-NNN --severity ... --status pending --deadline ... --source "..." --summary "..." then regen debt

Hot rows between sentinels are never hand-edited: a new record file is created, then npm run archon:records:regen &lt;kind&gt; rewrites the hot summary deterministically. npm run validate fails red if a hot summary disagrees with its records folder.

This solves the concurrent-PR conflict that single-file append-only governance state hits as soon as multiple cloud agents work in parallel: different branches write different filenames (no textual conflict); after merge the regenerator computes a unique hot summary (no integer-counter ambiguity, no Threshold: X→Y non-commutative narrative).

The single-file representation below remains the conceptual model of state; the records-folder is its physical implementation:

manifest.md — Project Hot Context

SectionContent
ProductProduct definition, core flow, business model
Concept GlossaryProduct-specific terminology (term + project meaning + ≠ common meaning)
User Language IndexStakeholder phrases, aliases, and nicknames mapped to canonical project artifacts. Row format: User Phrase(s) ·-separated · Canonical Target = artifact class + identifier · Lookup = route · file · anchor pointers. Disambiguation rule: when phrases resolve to different targets, create separate rows rather than merging. /archon-demand Pre-Scan consults this section on every demand (see §Stakeholder Memory)
Tech StackFrameworks, versions, dependencies
Validation CommandConcrete lint + typecheck + test command
Git StrategyCommit mode (auto/prompt/off) + branch model
Directory StructureComplete file tree
Knowledge Asset IndexIndex of all rules/skills/ADR
Milestones & AcceptanceHard acceptance criteria — all checked = complete
Current StateActive milestone + known issues + compact latest review pointer
Stakeholder MemosPointer to .archon/memos.md hot index

Long latest-review detail belongs in .archon/manifest/archive/&lt;year&gt;-Q&lt;N&gt;.md; keep the hot manifest line concise and retain the latest validation target in Current State. Keep the User Language Index compact: it is a lookup table for repeated stakeholder wording, not a conversation transcript.

Role: Section-scoped current-state source read on the hot path only when the route needs project context. The only archon file allowed to contain project specifics.

drift.md — Cognitive Drift Counter

Tracks the rate at which the agent's cognitive model diverges from project reality. Each delivery scores +1 to +5 based on cognitive complexity, bounded below by mechanical floors (see §Drift Mechanical Floors above). Three-tier triggering replaces the original binary gate:

TierThresholdScope
Lightdrift ≥ 6Mechanical health audit only (no reviewer sub-agent) · releases 2-4 points · in-session
Fulldrift ≥ 12Original complete flow · reviewer sub-agent · resets to 0-3
Emergencydrift ≥ 20Demand intake halted · full + blindspot root-cause + forced remediation plan

Dynamic thresholds: shift by project phase (build-intensive = higher tolerance; quality convergence = tighter) inferred from manifest Current State without config flags.

See mechanisms/drift-mechanism.md for the complete design rationale.

debt.md — Technical Debt Registry

Deferral = register + deadline. Unregistered = nonexistent = unmanaged. Each item has ID, source, severity, deadline, and status. Before milestone closure, all milestone-close deadline items must be resolved.

debt.md is a hot gate index, not a prose archive. It keeps ID, Severity, Deadline, and Status visible for milestone/review gates; full source, trigger details, and disposition rationale live in .archon/debt/archive/&lt;year&gt;-Q&lt;N&gt;.md.

Stakeholder Memory

Problem solved: session-based frameworks' inherent flaw — every boot starts from a blank slate. A project owner should remember what was discussed with the stakeholder. The same question asked twice = the first conclusion was lost = a failure of ownership.

Memory Architecture

Example: if a stakeholder asks about a large architecture migration and Archon rejects it with rationale, close-out stores the conclusion as a memo. A later session pre-scans memos, recalls the prior decision, and avoids making the user repeat the same context.

Three-Layer Implementation

LayerLocationResponsibility
Principlesoul.md §Ownership"The user should never repeat themselves — repetition = lost context = failure"
Entryarchon-demand §Pre-ScanAfter receiving demand, search memos, decision records, and the manifest User Language Index for stakeholder aliases; hit → silently resolve (optionally bridge "We call this X in our project.") and proactively cite history; near-miss → record uli_candidate: &lt;phrase&gt; → &lt;target&gt; for Close-Out promotion
Exitarchon-demand §Close-Out step 7Write conclusions with decision value to memos (rejection/deferral/direction confirmed/priority change)
Storage.archon/memos.md + memos-archive/Hot index: compact pointers; archive: full rationale with Archived On

Memory Classification

Different memory types have different persistence vehicles. Stakeholder memos are a lightweight hot index backed by cold archives; heavyweight decisions are promoted to stronger vehicles:

TypeVehicleLifecycleLoaded at Boot?Example
Delivery recorddrift.mdCompressed by cycleYes"Quality gate passed; release pressure reduced"
Project architecture decision (positive).archon/decisions.md (ADR)PermanentOn demand"Use managed database platform for first milestone"
Project architecture decision (negative).archon/decisions.md (Negative ADR)Permanent (with re-evaluation conditions)On demand"Reject full framework migration until evidence changes"
Framework architecture decisiondocs/archon/decisions.mdPermanentOn demandADR-20 Archon-native Evolution Loop
Stakeholder conclusion (hot)memos.md≤5 compact pointersSection-scoped"Migration rejected", "localization deferred"
Stakeholder conclusion (cold)memos-archive/&lt;year&gt;-Q&lt;N&gt;.mdQuarterly partition · archived foreverNo — keyword-matched, on-demandOlder auth-boundary decisions

Trimming, Cold Archive & Promotion

Memo hot cap: 5 compact entries. Full rationale migrates to memos-archive/&lt;year&gt;-Q&lt;N&gt;.md (NOT deleted). Each archive file carries a keyword index at the top; demand pre-scan scans the keyword index (NOT full body) and loads the archive file in full only on keyword hit.

Before migration, check:

  • Conclusion has durable long-term value across projects? → Promote to a stronger vehicle (ADR / skill / manifest section), then archive
  • Conclusion is stale or superseded? → Archive with a superseded by &lt;target&gt; note

Memory Layer Consolidation (Reverse Crystallization)

Crystallization moves new knowledge into assets (trigger table). Consolidation moves accumulated knowledge into stronger vehicles; runs during full review as Phase 4 and the reviewer sub-agent's §Framework Completeness step.

Source SignalConsolidation Target
Resolved debt with generalizable fix pathNew or updated skill
Drift log pattern recurring ≥3 times in cycleADR or editor rule
Stable memos referenced by ≥3 deliveriesManifest section or ADR
Archive memos recalled ≥2 times in quarterPromote back to hot memos or to manifest

Design Boundaries

  • Is: Conclusion-level memory — what was discussed, when, what was decided, why
  • Is not: Conversation-level memory — does not store conversation flow (that's the agent transcript's job, retrievable on demand)
  • Is not: Full history — routine delivery records are carried by drift; memos record only conclusions with decision value
  • Enforcement: Process-level (demand step), not mechanical (cannot lint-detect omissions). Consistent with L3-L5 constraint pyramid levels — relies on the executor reading and following

Anti-Bloat Mechanisms

Comic explainer: Archon extensibility and hygiene

Archon's governance files can bloat too. Four lines of defense:

DefenseMechanismTiming
Pre-emptiveJustify creation: must answer "can an existing file carry this?" before creatingOn creation
Pre-emptiveGovernance ratio bounds: governance files / source files within [0.1, 0.5] · asserted in governance.test.tsOngoing (ratio lower bound catches tribal knowledge)
Pre-emptiveContext budget table: per-file hard line caps declared in manifest.md §Context Budget · asserted in governance.test.tsOngoing
RetroactiveBloated → split; redundant → merge; stale → deleteDuring review
AutomatedDrift log compression: move old complete rows to archive when hot file exceeds 70 linesDuring review
AutomatedMemos cold archive: full rationale migrated to memos-archive/&lt;year&gt;-Q&lt;N&gt;.md rather than deletedOn hot cap breach

Claim Verification — "said vs truth" family (ADR-27)

Comic explainer: Archon claim verifier — mechanical fact-checker at the commit gate

Governance prose can quietly drift from the repo: a test count cited from memory, a borrowed concept without lineage, a soul edit that cites itself, a trigger that fires silently. Per ADR-27, a single verifier scripts/archon-claim-verifier.mjs carries four modes under one unified [claim-verifier:&lt;mode&gt;] &lt;FAIL|WARN&gt;: &lt;file&gt; — &lt;msg&gt; report format:

ModeCatches
numericNumeric claims in governance docs or skill prose that disagree with the repo (e.g., test count, file count, bundle size)
borrowedBorrowed-concept statements in ADRs or drift rows missing the lineage line (which external sample, which commit)
self-citeEdits to soul.md / soul/*.md that cite themselves as authority without an independent source
missed-trigClose-Out claims a trigger fired without the corresponding evidence in drift or records
preservationnone-this-cycle(&lt;evidence&gt;) on the Close-Out Preservation row without a substantive scanning verb + scan target (≥40 chars), and first-pass-degeneracy bootstraps that pin same-delivery anchors without explicit "first pass / introducing delivery" framing

The verifier is wired into npm run validate (errors fail closed, warnings surface) and the pre-commit hook. The portable archon-check.py remains the adopter-side contract checker; the verifier is the per-delivery scan at authoring time — the two do not duplicate each other.

Self-Reflection Mechanisms

Archon governs not just code, but itself. See soul/review.md §Reflection & Proactive Scrutiny for the full mechanism: recursive principle application, four mandatory proactive questions, known blindspot patterns table.

Modular Soul Loading

The cognitive core is split into one section-scoped core + two mode-specific extensions to keep the perpetual context tax low while preserving full specification depth per mode.

FileContent ScopeLoaded ByBudget
soul.mdOwnership · Core Axioms · Guardrail System · Knowledge Hygiene · Evolution (incl. Preservation Axis per ADR-28) · Persona · Sub-Agent Independence (universal principles)Boot and mode hot paths by required section310 lines
soul/delivery.mdReasoning Capsules · Lifecycle Hooks · When to Escalate · Delivery Fast-Path · Debt Tracking · Product Quality/archon-demand only150 lines
soul/review.mdReflection & Proactive Scrutiny · Review Tiering · Memory Layer Consolidation/archon-plan and /archon-review150 lines

Why split: soul.md carries universal judgment, but the hot path should read only the sections needed for the current route. Chapters only used by one mode (delivery lifecycle · review reflection) become per-mode extensions. Measured impact from the original split: boot path cut ~40% · demand path ~12% · plan/review path ~23%; section-scoped hot reads reduce the steady-state tax further without weakening the specification.

Anchor integrity: governance.test.ts § Soul anchor consistency scans every soul[/delivery|review].md §X reference in commands, agents, and extensions, asserting each anchor resolves to a real heading. Refactoring the core or extensions automatically fails this check until cross-references are updated.

See ADR-10 in the decisions log for the full rationale.

Decoupling Model

Archon's universal files can be copied directly into any new project:

Portable FileRoleContains Project Specifics?
soul.mdCognitive core (section-scoped hot path)
soul/delivery.mdDelivery-mode extension (loaded by demand)
soul/review.mdReview-mode extension (loaded by plan + review)
archon.md (command)Unified entry + intent routing
archon-wake.mdc (rule)Wake trigger
archon-demand/plan/review.mdWorkflows
archon-reviewer/capture-auditor.mdSub-agents
archon.mdcDecoupling rules
drift.md rules sectionDrift mechanism
manifest.mdProject context✅ The only one
drift.md log sectionDelivery records
debt.md registryTech debt

Rule: Universal files must not contain concrete technology names, file paths, shell commands, package names, or metric numbers. See the archon decoupling rules in the platform rules directory.

Extension Points

Archon's core lifecycle exposes fixed extension points — project-specific capabilities hook into these points without modifying core files. This is the plug-in mechanism: install by creating a directory, uninstall by deleting it.

Architecture

The universal core exposes fixed sockets; project-specific extensions plug into those sockets without changing core files. Extension names stay outside the universal core.

Lifecycle Points

Commands scan .archon/extensions/ at these fixed points. Each extension declares which points it subscribes to:

Point IDCommandWhenAvailable Context
demand.pre-scanarchon-demandAfter loading memos, before decision gateDemand text, memos, manifest
demand.close-outarchon-demandAfter stakeholder memos, before gitDelivery summary, verdict, changed files
plan.perceptionarchon-planDuring state perception phaseManifest, debt, drift
plan.outputarchon-planAfter priority ranking, before final outputRanked work items
review.healtharchon-reviewDuring knowledge health auditAll project files

Presence = active. Absence = not installed. Max 3 active extensions, ≤15 lines per hook. See soul.md §Extension Points for the complete specification: discovery protocol, file format, budget rules, and design rationale.

Other Extension Patterns

Adding a Workflow Mode

Create archon-&lt;mode&gt;.md in the commands directory:

  • Open by declaring the required soul/manifest hot-path sections
  • Define mode responsibilities
  • Close with manifest + drift updates

New modes are automatically covered by the wake layer — archon.md routing logic and archon-wake.mdc trigger can extend their intent mapping tables to recognize new modes.

Adding a Sub-Agent

Create an agent file in the agents directory. Follow:

  • Pass delegation threshold + cost awareness evaluation
  • Sub-agent advises; main agent executes
  • Output is structured and auditable via drift log

Adding Knowledge Assets

  • Rules (platform rules directory): Conventions enforced during editing
  • Skills (platform skills directory): Domain knowledge indexed on demand
  • Follow the constraint pyramid: push to the strongest possible level

Adding Tools

Create a tool subdirectory in the archon directory. Tools are read-only observability extensions or utility scripts — they do not alter the core Archon workflow.

Current tools:

  • Dashboard (.archon/dashboard/): Schema-first governance state dashboard. schema.js defines file structure and drives parsing + validation; server.js renders workflow-driven visualization pages. Session heartbeats are injected via the heartbeat rule — dashboard directory exists = activated, removed = deactivated. Structural validation integrated into governance.test.ts; file format drift = red test.

Feature Overview

CategoryFeatureSummary
IdentityOwnership modelAgent = Owner, not Assistant
Identity5 Identity AxiomsOwnership · Constraints · Inference · Lean · Separation
CognitiveCognitive loopPerceive → Model → Act → Verify (backtrack at any stage)
EntryWake mechanismRule trigger layer + Command routing layer + Executor layer (three-tier separation)
EntryDual channel"hi archon" (natural language) / /archon (explicit command) / /archon-* (direct)
EntryIntent routingAuto-dispatch plan/demand/review + drift pre-check
GovernanceDelivery lifecycle9 close-out steps + extension hooks + version control + threshold events
GovernanceFast-pathQualified trivial deliveries collapse ceremony; abuse detected via share>60% check
GovernanceDecision gateShould it be done / how big / who decides (structured as Verdict output, previously GATE-1)
GovernancePlan-mode bindingVerdict precedes any write-side tool; Cursor Plan mode is the platform realization (ADR-11)
GovernanceConvergence gateMilestone-scoped demand filter — out-of-scope demands rejected unless exempted or user-overridden (ADR-12)
GovernanceValidation gatelint + typecheck + test — red means fix to green
GovernanceClose-out gateClose-Out structured checklist (previously GATE-2) — auditor verifies compliance
GovernanceDrift counterQuantify cognitive debt + mechanical floors + dynamic thresholds (convergence phase tightens emergency to 14)
GovernanceTiered reviewLight (≥6) / Full (≥12) / Emergency (≥20; convergence phase ≥14) — releases pressure continuously
GovernanceDebt registryStructured debt tracking + milestone gate
QualityConstraint pyramidL0-L5 six-level constraints — push to strongest
QualityConstraint maturitySHOULD → MUST upgrade path
QualityLint-Rule bridgeL1 actively triggers L2
QualityAnti-rationalization tableRed Flags embedded in skills for immediate correction
QualitySystematic debuggingFour-phase root cause analysis + reasoning capsules
EvolutionKnowledge captureTrigger table + crystallization path
EvolutionPreservation axisPin load-bearing rules so edits-elsewhere cannot drain them (ADR-28)
EvolutionReasoning capsulesSymptom → root cause → fix, embedded in skills
EvolutionRecursive applicationSoul principles constrain Archon itself
EvolutionProactive scrutinyFive mandatory questions in plan/review
EvolutionKnown blindspot patternsPattern recognition + bound countermeasures
MemoryPre-scanSearch memos and decisions before acting; hit → proactively cite
MemoryConcept Glossary + User Language IndexProduct-specific vocabulary and stakeholder aliases included in current-state hot paths; prevents semantic drift on domain terms and artifact lookup
MemoryStakeholder memos (hot)≤5 compact pointers to stakeholder conclusions
MemoryCold archiveTrimmed memos migrated to memos-archive/&lt;year&gt;-Q&lt;N&gt;.md · keyword-matched on-demand recall
MemoryNegative ADRRejected architecture proposals persisted (with mechanical re-evaluation triggers)
MemoryTrimming & promotionOldest entries archived or promoted to stronger vehicles
MemoryLayer consolidationReviewer Phase 4: promote accumulated knowledge (resolved debt → skill; recurring drift → ADR/rule; stable memos → manifest)
DelegationExecution-judgment separationSub-agent advises, main agent executes
DelegationCost awarenessMechanical checks self-audit; judgmental checks delegated
DelegationModel-family separationSub-agents declare model_family: different-from-main · manifest assigns per role
DecouplingUniversal coresoul/commands/agents portable to any project
DecouplingProject-state bindingProject specifics belong in project-state files such as manifest, drift logs, debt, memos, and project ADRs
ExtensibilityExtension Points5 lifecycle hooks in core; project-specific extensions plug in without modifying commands
ExtensibilityPluggable installmkdir = install, rmdir = uninstall, Status: disabled = pause
ExtensibilityBudget constraintsMax 3 active extensions, ≤15 lines per hook, not exported with core
ExtensibilityExtension lifecyclePromotion (≥2 projects OR 15-line hook budget hit → core via ADR) · Deprecation (3 idle cycles → removal logged in drift)
HygieneAnti-bloat defensesCreation justification + budgets + automated gates
ObservabilityDashboardSchema-first parsing + workflow-driven layout + SSE live updates
ObservabilityHeartbeat protocolRule-injected session state; dashboard presence = activated
ObservabilityStructural guardsGovernance file schema validation integrated into governance.test.ts
DocumentContent
README.mdQuick start navigation
setup.mdFull setup steps for new projects
mechanisms/drift-mechanism.mdDeep dive into drift mechanism design
decisions.mdArchon framework ADRs (portable mechanism rationale)
user-journeys.md15 real-world pitfalls of AI-assisted coding → Archon mechanism mapping
concepts/model-vs-harness.mdThe "Model vs. Harness" debate: why stronger models still need engineering environments
concepts/superpowers-comparison.mdComparative analysis with Superpowers

Released under the Apache-2.0 License.