AI agents hallucinate on open-ended requests because they don't know what they must not do. ae makes every boundary explicit — and machine-checkable. Measured result: 68 of 70 modules implemented clean by low-cost agents.
Lifecycle
Spec-first state machine
Every module moves through draft → in_review → approved → frozen → implementing → implemented. No implementation task exists until the spec is frozen, and freezing requires non-empty completion criteria. Every transition is an audited history event.
No hallucinations
Bounded contracts, not vibes
An implementation task is a closed world: allowed scope, forbidden scope, invariants turned into validation checks, dependency contracts inlined, completion criteria spelled out. The agent has nothing to guess — so a qwen-class model implements it as reliably as a frontier one. And when a task genuinely can't be done, the agent files a structured cross_module_blockage report naming the contract change it needs — it doesn't invent an API.
# implementation task — bounded execution contract
allowed_scope: internal/deliverystatustracking/
forbidden_scope: other modules, public contracts, deps' internals
invariants: INV-001 only email|sms channels reach providers
validation_checks: derived from invariants + public operations
completion_criteria: unit tests cover every public operation
The core trick
Validate-and-fix loop: rules instead of model IQ
Each AI call runs generate → extract YAML → validate → fix-prompt retry until the artifact passes. The validator enforces 40+ deterministic rules — unique operations, acyclic dependency graphs, invariant ownership, scope/forbidden overlap checks. The schema does the thinking, so neither the spec writer nor the implementer has to be expensive.
call AI → extract YAML → write file → ae validate
PASS → done
FAIL → build fix prompt (errors inlined) → retry
repeat up to max_retries
Decomposition
Knows when to split
The decomposition engine scores each module and rules DECOMPOSABLE, ATOMIC, or NOT_BENEFICIAL — then generates child stubs with lineage, and orders work in dependency-safe waves: providers before consumers.
Impact analysis
Blast radius without AI
When an implementation is blocked on another module's contract, ae implementation impact traverses the dependency graph and tells you exactly which modules need lifecycle actions, task regeneration, or a staleness check. Pure graph analysis — zero tokens.
Portable
Works with your agent
Export self-contained implementation bundles — task, rendered prompt, frozen spec, dependency contracts, result template — and feed them to Claude Code, Codex, or any agent. Import the result report back for analysis and retry bundles.
Local-first
Your specs are files
All state is human-readable YAML on your filesystem, tracked in your repo. Bring any OpenAI-compatible endpoint: OpenRouter, Groq, OpenAI, or a local Ollama — per-profile, per-task-type.