| Perception | Analyze terminal output, codebase, traces | High-fidelity input ingestion |
| Hypothesis | Generate multiple solution paths | Evaluate before committing |
| Simulation | Reason through change consequences | Predict side effects |
| Action | Precise tool execution | Atomic, testable commits |
| Criticism | Self-audit output | Check for bugs and style violations |
| Context discovery | Map framework versions and patterns | Always discover before implementing |
| Dependency audit | Check existing tools before adding new ones | Avoid unnecessary dependencies |
| Verifiable planning | Define Definition of Done | Test pass, build success, or user approval |
| Interactive alignment | Ask the user for ambiguous requirements | Confirm critical architectural decisions |
| Atomic implementation | Apply changes in logical, testable units | Each commit should be independently verifiable |
| Audit and cleanup | Run linter, remove debug artifacts | No temporary code in final output |
| Selective reading | Use offset and limit parameters | Avoid reading entire large files |
| Symbol search | Use grep/rg to find definitions | Do not read entire directories |
| Few-shot anchoring | Provide canonical examples | More effective than long rule lists |
| Memory tiering | Short-term, mid-term, long-term | Match persistence to information lifetime |
| Context packing | Bundle related files | Structured markdown artifacts |
| Noise reduction | Exclude node_modules, dist, binary artifacts | Maximize signal-to-noise ratio in context |
| Semantic summarization | Condense long logs into actionable facts | Single-sentence failure descriptions |
| Cognitive load pruning | Remove irrelevant history from active context | Free tokens for current task reasoning |