Skip to main contentWe began with a claim: agentic systems are information systems built from familiar programming primitives. Software engineers already use the necessary mental models: state machines, information flow, feedback loops, and coordination. The frameworks that dominate the space have obscured these fundamentals behind unnecessary vocabulary.
After fifteen chapters, we can re-examine that claim.
Lessons Learned
Context is working memory—the complete universe of information for a single reasoning step. Token budgets force prioritization. Grounding prevents hallucination. Context is ephemeral, reconstructed every call, which motivates everything about memory.
Memory persists what context cannot hold. Arrays for sequences, maps for keyed access, vectors for semantic retrieval. Accumulation patterns shape what systems can remember. Compression strategies determine what survives when memory grows.
Agency is causality—the transition from producing text to causing effects. Tool calling is one pattern among several; code execution, opcode systems, and direct integration offer alternatives. The action loop—observe, decide, act, repeat—is the heartbeat of agents.
Reasoning handles problems too complex for single calls. The key insight: split generation and evaluation into separate passes. Same-context evaluation is tainted; the model grades its own exam while writing it. Breaking the reasoning chain into distinct calls creates fresh context, amplifies signal, and enables genuine self-correction.
Coordination manages multiple components. Routing directs work. Delegation assigns it. Handoffs transfer context. Humans are components too, integrated through approval gates, review flows, and escalation patterns. Design handoffs like API contracts.
Artifacts are semantic objects with structure and operations. Documents, codebases, plans, task boards—these aren’t raw data but typed structures with meaningful operations. Artifacts provide shared state that coordinates implicitly.
Autonomy is self-directed operation. Triggers initiate action: schedules, events, goals. Boundaries prevent runaway behavior: time limits, iteration limits, scope limits. Observability ensures you can see what autonomous systems do.
Evaluation measures whether things work. Correctness, quality, efficiency, reliability—each requires different metrics. Automated evaluation (deterministic checks, LLM-as-judge) handles volume; human evaluation catches what automation misses. Run evals continuously, not once.
Feedback drives immediate improvement. Generate, verify, improve, repeat. Good feedback signals are specific and actionable—test failures, type errors, validation results. Iteration beats single-shot for reliability.
Learning accumulates improvement over time. Systems can learn knowledge, patterns, preferences, skills. Analyze successes and failures. Refine prompts through A/B testing and error-driven updates. Maintain knowledge bases. Design boundaries to prevent harmful adaptation.
These ten elements compose into complete systems. The virtual office coordinates specialized workers through a shared task board. The research system accumulates knowledge that compounds across tasks. The code agent uses verification as feedback to iterate toward correctness. The customer system balances automation with appropriate escalation. The content pipeline automates process while preserving human judgment.
The Patterns That Recur
Across applications, certain patterns appear repeatedly:
Separate concerns by phase. Planning before execution. Generation before evaluation. Gathering before synthesis. Each phase has different requirements and benefits from focused attention.
Use artifacts as coordination. Instead of explicit message passing, components operate on shared artifacts. State changes propagate naturally. The artifact becomes the coordination mechanism.
Make confidence explicit. Systems should know what they don’t know. Confidence scores trigger different behaviors: high confidence proceeds automatically, low confidence escalates or requests clarification.
Design for human integration. Humans aren’t external to the system—they’re components with specific interfaces. Approval gates, review flows, escalation paths. Make intervention easy and natural.
Let performance guide learning. Outcomes provide signal. Track what works and what doesn’t. Feed that signal back into future decisions. Systems should improve with use.
Maintain observability. Autonomous systems must be inspectable. Logs, dashboards, audit trails. If you can’t see what the system does, you can’t trust or debug it.
What The Frameworks Got Wrong
The dominant frameworks approach agentic systems as if they were entirely novel. They invent vocabulary—chains, retrievers, splitters, routers—that obscures rather than illuminates. A “retriever” is just a function that searches. A “chain” is just sequential function composition. A “router” is a conditional.
This vocabulary makes straightforward concepts harder to understand and reason about. It obscures simple concepts, making basic behaviors harder to reason about and more complex behavior difficult to debug. It disconnects agentic systems from the broader software engineering discipline, preventing practitioners from applying patterns they already know.
In addition, the resulting complexity can make behavior feel opaque or “magical,” which hinders debugging and optimization. When you don’t understand what’s happening, you can’t debug it, can’t optimize it, can’t predict its behavior. You become dependent on framework authors who understand the mechanisms you rely on.
A more transparent approach focuses on familiar information-system concepts. Agentic systems are information systems. They store data, transform it, route it, present it. They loop, branch, retry. They persist state and retrieve it later. These are programming primitives, not novel concepts requiring new vocabulary.
Framing agentic systems this way clarifies how to improve them. Want to improve reliability? Add feedback loops—the same pattern you’d use for any iterative process. Want to handle more complexity? Decompose—break the problem into phases with clear interfaces. Want better quality? Evaluate—measure outputs and iterate on what produces them.
Software engineering has spent decades developing patterns for exactly these challenges. Agentic systems don’t transcend that wisdom; they apply it.
Next Steps
This book has covered fundamentals. Real systems require more:
Scale. The examples here process tasks one at a time. Production systems handle thousands concurrently. That requires infrastructure for parallelism, queue management, resource allocation, and failure handling.
Integration. Real systems connect to real services—databases, APIs, authentication systems, monitoring tools. Integration introduces complexity that simplified examples avoid.
Operations. Deploying and running agentic systems requires monitoring, alerting, incident response, capacity planning. The systems must be operable, not just functional.
Safety. As systems become more autonomous and capable, safety becomes critical. Preventing harmful outputs, detecting adversarial inputs, maintaining alignment with human values—these are active areas of research and engineering.
User experience. Humans interact with agentic systems through interfaces. Good UX makes systems usable, trustworthy, and controllable. Bad UX makes powerful capabilities inaccessible or dangerous.
These challenges don’t require new primitives. They require applying the fundamentals at scale, with discipline, in production environments.
A Practical Path Forward
Agentic systems are already altering how some software tasks are automated, such as research assistance, code generation, and customer support workflows. Not because they replace human judgment—the best systems enhance it. Not because they automate everything—the best systems automate what benefits from automation and preserve human oversight where it matters. Instead, they enable software to handle tasks that previously required human attention for every step.
Successful systems treat these as information systems built from familiar primitives and apply standard software engineering discipline. Framework abstractions and marketing can obscure this perspective, but the underlying engineering fundamentals do not change.
Context is working memory. Memory persists across calls. Agency is causality. Reasoning requires splitting. Coordination manages flow. Artifacts provide structure. Autonomy enables independent operation. Evaluation measures quality. Feedback drives improvement. Learning accumulates capability.
Build from these elements. Apply the patterns. Maintain engineering discipline. The systems you create will be more understandable, more reliable, and more maintainable than those built on abstraction and opaque behavior.
That is the path forward: apply these fundamentals with discipline in real systems.