singularity-forge/docs/dev/building-coding-agents/03-state-machine-context-management.md
Jeremy 872b0adb48 docs: reorganize into user-docs/ and dev/ subdirectories
Split flat docs/ into user-docs/ (guides, config, troubleshooting) and
dev/ (ADRs, architecture, extension guides, proposals). Updated
docs/README.md index to reflect new paths.
2026-04-10 09:25:31 -05:00

2.2 KiB
Raw Blame History

State Machine & Context Management

The Fundamental Tension

The agent needs to understand the whole project to make good decisions, but any single context window degrades with too much information — not just from token limits but from attention dilution.

Layered Memory Architecture (Universal Agreement)

Project Manifest (always loaded, <1000 tokens)
        ↓
Task Context (per-task, relevant files + specs)
        ↓
Retrieval Layer (pull-based, on-demand)
        ↓
Ground Truth (filesystem, git, actual code)
Layer Content Access Pattern Token Impact
Working Context (L1) Current task + 35 relevant files Dynamically assembled per LLM call 8k25k tokens
Session/Episodic (L2) Compressed history + recent decisions Auto-summarized at transitions Summary only
Project Semantic (L3) Full codebase summaries, dependency graph, ADRs Vector + Graph retrieval Pointers only
Ground Truth (L4) Actual files, git history, test results Agent reads via tools Zero in prompt

The State Machine

The agent should always be in one explicit state:

PLAN → IMPLEMENT → TEST → DEBUG → VERIFY → DOCUMENT

Critical transitions that matter:

  • Task completion: Defined by automated tests passing + acceptance criteria met
  • Stuck detection: Triggered by repeated failed attempts or missing information
  • Plan revision: Triggered when completed tasks reveal wrong assumptions

Key Principles

  • Summarize aggressively between phases. Don't carry full implementation context forward — carry compressed summaries: what was built, what decisions were made, what interfaces were created.
  • Pull-based, not push-based context. Don't preload everything the agent might need. Let it ask for what it discovers it needs.
  • Use structured state for reliability. Natural language summaries drift. Use JSON/typed configs for anything the system needs to track. Reserve natural language for reasoning.
  • The filesystem is external memory. The codebase itself is the most detailed representation of current state. Hold understanding about code in context, not the code itself.