Last issue pinned down the things that must happen every time. One step further upstream sits the more expensive question: should this job be an agent at all? Anthropic's Building Effective AI Agents (2024-12-19) answers it in two definitions — a workflow runs through predefined code paths, an agent directs its own. This issue opens the essay together with its companion notebook repo, then audits it against three later official posts.
The essay is cited so often that most people remember only the five diagrams. Its real value sits in two places: it draws a decidable line, turning "should we build an agent" from a matter of taste into a matter of fact; and it keeps revising itself — open it today and the list of frameworks it names is not the one it shipped with. Same order as always here: runnable code first, mechanism second, real material to audit against third, criteria in the back half.
Verbatim (Erik Schluntz / Barry Zhang, 2024-12-19):
Workflows are systems where LLMs and tools are orchestrated
through predefined code paths.
Agents are systems where LLMs dynamically direct their own
processes and tool usage, maintaining control over how they
accomplish tasks.
The line lands on a question you can answer on the spot: who decides which tool gets called next — your code, or the model? Code decides it, and it is a workflow no matter how many layers it wears. The model decides it, and it is an agent even at twenty lines. An elaborate diagram can still be a workflow; a single while-loop can be an agent.
Reading alone leaves you feeling like you understood it. The reference implementation lives in the official cookbook — note that the repo was renamed from anthropic-cookbook to claude-cookbooks (old links redirect; the directory path is unchanged):
git clone https://github.com/anthropics/claude-cookbooks
cd claude-cookbooks/patterns/agents
basic_workflows.ipynb # chaining / routing / parallel
evaluator_optimizer.ipynb # the evaluate-refine loop
orchestrator_workers.ipynb # orchestrator and workers
async_multi_agent_orchestration.ipynb
latency_multi_agent.ipynb # multi-agent under latency/budget
util.py prompts/ # shared helpers and prompts
Every notebook is a bare implementation with no framework underneath, which is exactly the essay's stance: many patterns can be implemented in a few lines of code. When not to bother: if what you need is production-grade retries, observability and persistence, none of that is here — these are teaching aids, not a foundation. (Per the GitHub repo page, 53.1k stars, 2026-09.)
Only the last of the five patterns needs a real agent loop, and that rung now ships officially:
npm install @anthropic-ai/claude-agent-sdk # Node 18+
pip install claude-agent-sdk # or Python 3.10+
export ANTHROPIC_API_KEY=your-api-key
from claude_agent_sdk import query, ClaudeAgentOptions
async for m in query(
prompt="Review utils.py for bugs that would crash. Fix them.",
options=ClaudeAgentOptions(
allowed_tools=["Read", "Edit", "Glob"],
permission_mode="acceptEdits")):
print(m)
Lifted from the official quickstart. What it takes off your plate is writing the agent loop yourself: tool calls, context management, retries and the permission gate all live in the library. When not to install it: your task is three fixed steps, each one predictable — by the essay's own criteria that is prompt chaining, so call the API three times and skip dragging in a whole harness. Also note that since v0.1.0 the SDK no longer loads Claude Code's system prompt by default; for the old behavior you pass {"type":"preset","preset":"claude_code"} explicitly.
The ladder stands on what the essay calls the augmented LLM: an LLM enhanced with augmentations such as retrieval, tools, and memory. All five patterns are built on it; they differ only in who orchestrates it.
The rungs map one-to-one onto claude-cookbooks/patterns/agents/: (1)(2)(3) all live in basic_workflows.ipynb, (4) in orchestrator_workers.ipynb, (5) in evaluator_optimizer.ipynb, and (6) has no notebook of its own — because it is the query() loop inside claude-agent-sdk. The essay gives each rung a fitness test short enough to quote in a design review:
The essay closes on three principles worth pinning above the desk: simplicity in the design, transparency about the agent's planning steps, and a carefully crafted ACI — tool documentation and testing polished the way you would polish an API reference. The third is the most underrated, and the next section is its manual.
Anthropic's How we built our multi-agent research system (2025-06-13) opens the books on rung (6): a multi-agent system with Opus 4 as lead and Sonnet 4 subagents beat single-agent Opus 4 by 90.2% on their internal research eval. The bill: agents burn roughly 4x the tokens of chat, and multi-agent systems about 15x; parallel tool calling cut research time by up to 90% on complex queries. The same post draws the border: domains that need every agent to share one context, or where subtasks depend heavily on each other, are a bad fit — it names most coding tasks involve fewer truly parallelizable tasks than research. When not to reach for it: when the task isn't worth 15x the tokens.
The essay's second appendix is called "Prompt Engineering your Tools"; Writing effective tools for AI agents (2025-09-11) is what it became, and the only operating manual for the ACI principle: consolidate tools (one schedule_event instead of list_users/list_events/create_event), namespace them (asana_search vs jira_search to mark boundaries), return token-efficient responses (Claude Code caps tool responses at 25,000 tokens by default — do your own pagination, filtering, truncation), return high-signal fields only (name and file_type, not uuid and mime_type), and write the eval before tuning descriptions.
Effective context engineering for AI agents (2025-09-29) fills the blind spot: context is not free. Four techniques — compaction (summarize history near the limit), structured note-taking (persist progress to external memory such as a NOTES.md), sub-agent architectures (work in a clean window, return only a condensed summary), and just-in-time retrieval (keep lightweight identifiers, load on demand). One governing line: find the smallest possible set of high-signal tokens.
Open the essay today and "When and how to use frameworks" names the Claude Agent SDK, Strands Agents SDK by AWS, Rivet and Vellum — and the Claude Agent SDK is a rename of claude-code-sdk, a name that did not exist on publication day in 2024-12. Don't mistake old notes for the present state. Two you can install:
pip install strands-harness # or npm i @strands-agents/harness
pip install -U langgraph
strands-agents/harness-sdk sells end-to-end harness control, "any model, any cloud" (per the GitHub repo page, 8.5k stars, 2026-09); langchain-ai/langgraph is a low-level orchestration framework for stateful agents (per the GitHub repo page, 42.5k stars, 2026-09). When to install neither: the essay says start with the LLM API directly, because frameworks create extra layers of abstraction that can obscure the underlying prompts and responses, making them harder to debug — and when you cannot see the prompt you actually sent, every tuning decision is superstition.
Read/install these three first: (1) the Building Effective AI Agents essay — read the two definitions and each rung's "when to use"; the diagrams are skippable. (2) git clone https://github.com/anthropics/claude-cookbooks, then run basic_workflows.ipynb in patterns/agents/ — ten minutes, worth more than ten readings of the diagrams. (3) pip install claude-agent-sdk (or npm install @anthropic-ai/claude-agent-sdk) — only once you've confirmed you're genuinely on rung (6).
Read next, as needed: How we built our multi-agent research system (where the 15x and the 90.2% come from) · Writing effective tools for AI agents (appendix 2, grown up) · Effective context engineering (compaction / notes / sub-agents / just-in-time retrieval) · claude-agent-sdk-demos (its research-agent is orchestrator-workers you can run; per the GitHub repo page, 2.8k stars, 2026-09) · strands-harness · langgraph.
Explicitly don't: use orchestrator-workers where the subtask list was always hardcodeable · run an evaluator-optimizer loop with no objective yardstick · read 90.2% as "multi-agent is generally better" · pick a framework before knowing which rung you're on · copy package and framework names straight out of a 2024 essay · build a long-horizon agent on this essay alone.
uuid and mime_type is completeness hurting signal). A sharper version might be: polish it like an error message — say what to do next, in as few words as possible.basic_workflows.ipynb (chaining/routing/parallel), evaluator_optimizer.ipynb, orchestrator_workers.ipynb, async_multi_agent_orchestration.ipynb, latency_multi_agent.ipynb, plus util.py and prompts/; all framework-free (repo formerly anthropic-cookbook; per the GitHub repo page, 53.1k stars, 2026-09)ANTHROPIC_API_KEY, the values for allowed_tools and permission_mode, and the capability tiers by tool combination@anthropic-ai/claude-code → @anthropic-ai/claude-agent-sdk, claude-code-sdk → claude-agent-sdk), the v0.1.0 breaking changes (no default system prompt, ClaudeCodeOptions renamed) and the current settingSources behaviorresearch-agent (a runnable orchestrator-workers research system), email-agent, simple-chatapp, hello-world and more; the repo states they are for local development only (per the GitHub repo page, 2.8k stars, 2026-09)pip install strands-harness / npm install @strands-agents/harness, describing itself as end-to-end harness control for "any model, any cloud" (per the GitHub repo page, 8.5k stars, 2026-09)pip install -U langgraph; the best thing to hold against the essay's line about frameworks obscuring the underlying prompts (per the GitHub repo page, 42.5k stars, 2026-09)