From Zero to AI Agents
The MBA skill is not “I use AI.” It is redesigning work when parts of the workflow can reason, call tools, and hand work to other agents.
Class 3 gave you one agent. Class 4 is about the management layer around it: staffing the workflow, setting the rules, watching the handoffs, and knowing when the team is worth the cost.
If you can redesign a business process, you already have the right mental model. The new question is: which boxes in the workflow should be code, which should be agents, and who checks the work?
The MBA who can design an agent team — pick patterns, budget tokens, know the failure modes — is already doing what most engineers will need to do in two years. Get there first.

In class 3 we built up to a single agent. Remember the loop:
That is one employee. A smart one — but still one.
Observe → Reason → Act → repeat. That was the whole thing.
The loop ends when the model decides it’s done — or when the harness hits a stop condition (max steps, timeout, human override).
Tool use is what separated ChatGPT from Claude Code. The agent can:
The model never touches your filesystem, database, or APIs directly. The harness does. The model only speaks JSON — “please run read_file with {path: ...}” — and reads what comes back.
Around every agent is a small, unglamorous loop (Python, Node, Go, Bash — doesn’t matter) that does the real work:
The model is the star. The harness is where all the engineering lives — retries, auth, audit trails, cost caps. Class 4 is mostly about the harness growing up to coordinate many models instead of one.
An agent is a loop: a model observes state, picks a tool, the harness runs it, the result feeds back — until the task is done.


Every real agent framework — Claude Code, LangGraph, OpenAI Agents SDK, a hand-rolled Python while loop — wraps the same four parts into that loop. The only thing that changes is how much of the harness you write yourself.
| Component | What it does | Analogy |
|---|---|---|
| Memory | Context window + external store | Notebook of recipes |
| Planning | Decides next action given state | Reasoning through the steps to plate the dish |
| Tools | Executes actions in the world | Knife, pot, stove |
| Loop | The harness that runs it all | The shift — order in, plate out, repeat |
Inside the loop, something has to pick the next tool. There are two ways to decide — and the choice is a governance decision, not just a technical one.
Plain Python: if / elif on the input.
Let the model choose the tool itself.
Important
Rule of thumb: code-based when routing is stable and you need an audit trail (finance, healthcare, anything regulated). LLM-based when the input surface is open-ended (assistants, agents-as-products).
The Routing pattern coming up in a few slides is exactly this tradeoff — applied to whole agents instead of individual tool calls.
Tools fail. A lot. Every production agent needs a story for each class of failure:
read_file(path="../../etc/passwd")slack_search or geocode(...) with perfect JSON — tools you never registered. It was trained on millions of APIs; it remembers ones you didn’t give it.What the harness must do:
"tool_not_found: <name>. Available: [list]". Never silently execute a “close match.”Warning
Silent failures are the worst kind. If a tool crashes and you return empty string, the model happily invents an answer on the non-result. Always return a structured error — never nothing.
Three places to put information:
Three decisions to make:
Memory is a harness decision, not a model decision. The model doesn’t remember between calls — you decide what to carry forward. Every token you re-send costs money and crowds the window.
The system prompt defines what an agent is allowed to think about. The tool list defines what it’s allowed to do. Both are doors you can lock.
Prompt isolation
Tool allowlist
.claude/agents/researcher.md lists exactly [WebSearch, WebFetch, ingest_source]These two mechanisms — prompt isolation and tool allowlists — are why subagents are safe to spin up in the multi-agent patterns later. Without them, every agent is a liability. With them, each is a contained box.
Everything above — error handling, hallucination, retries, allowlists — traces back to one truth:
Same input, different output. The same prompt twice does not produce the same tool calls. Sometimes trivial (phrasing). Sometimes catastrophic (skips a step, picks the wrong tool, exfiltrates data).
Evals don’t make it deterministic. An eval says “passes 94% of the time on our test set” — a probability threshold, not a guarantee. The 6% still ships. Guardrails (schemas, allowlists, retries, humans) live around the LLM, not inside it.
Which drives the rest of this class: which steps should be stochastic agents, which should be deterministic code?

Every agent system you’ll design is a mix of two kinds of steps. Naming them is the most important decision you’ll make.
In production, the scaffolding is always code. The LLM is inserted only at the spark points where judgment is actually needed. Get this wrong and you’re either brittle (all code, no flexibility) or broke (all LLM, no predictability).
Prefer code. It’s cheaper, deterministic, testable. Only reach for an LLM when code genuinely can’t do the job.
If the answer is “both” — split the step. One code step (the deterministic part) calling one LLM step (the judgment part), then code again to validate and persist.
Every real agent system has the same shape. The skeleton is code: retries, ordering, routing table, persistence, state machine, auth, error handling, validation. The spark is the LLM step, dropped in only where judgment is actually needed.
Pink = LLM. Blue = code. Seven steps, two LLM calls. That ratio — mostly code, sparingly LLM — is what a production pipeline actually looks like.
Task: a customer email lands in support — classify it, draft a reply, send it. The production design wraps deterministic code around two narrow LLM calls — each one guarded by code before it’s trusted.
Two LLM calls, five code steps, every LLM output checked before it hits the customer. The LLM is where the judgment is; the code is everything else — and the code is what keeps you out of the headlines.
Code and LLM steps fail in completely different ways. This is why the split matters.
| Dimension | 💻 Code step | 🧠 LLM step |
|---|---|---|
| Failure | Reproducible (same input → same crash) | Probabilistic (fails 1 in 20 runs, nobody knows why) |
| Fix | Add a test, patch the bug, done forever | Prompt eng, evals, retries, fallback model |
| Observability | print, logs, debugger |
Traces + evals + sampled human review |
| Cost | CPU cycles, ~free | Tokens, measurable per-call |
| Latency | ms | seconds |
| Auditability | Source code is the spec | The prompt is a spec; outputs still vary |
Warning
The lens for the rest of class 4: on every pattern diagram that follows, ask which boxes are code and which are LLM? That’s the real architecture.
Note
~60 days → 250,000+ ⭐ — fastest-growing agent project in OSS history, built by one developer (Peter Steinberger). Twice renamed after an Anthropic trademark complaint (Clawd ≈ Claude).
SOUL.md file describing the agent’s personality, tools, memory, channels. Run one command. No Python. No chains. No graphs.Important
The loop we just drew — observe → plan → act → update — is OpenClaw. It’s also Claude Code, Cursor, Cline, OpenDevin. The anatomy is shared; what’s now commoditizing is the harness around it.
Zoom in on what’s actually inside. The four components you just learned are right in the middle. Everything else is plumbing.
Tip
SOUL.md configures the agent. Messaging channels are the new “user interface.” Tools + Memory are still the same two boxes. The Runtime is just the generic loop running in a container somewhere.
Apply the lens from the last section. Which parts of OpenClaw are deterministic code, and which are the stochastic LLM step?
OpenClaw is >95% code and a sliver of LLM at the center. That’s the commoditization story — the harness is the same everywhere; the only thing left to vary is the prompt and the tools.
This is true of every agent framework — Claude Agent SDK, LangGraph, OpenAI Agents SDK. The code skeleton is nearly identical. The LLM is the spark.
A useful agent framework is mostly this: code around the ReAct loop, plus prompts, tools, memory, and guardrails.
Before we add more agents, notice this: three of the classic workflow patterns work with a single agent. Chaining, routing, evaluator — all run in one process, with one model (or a couple), one context window per call. Your class-3 agent can already do these.
The lens from two sections ago: on each diagram, ask which boxes are code, which are LLM? The answer is often surprising — most of the “orchestration” is code. The LLM is inserted at the judgment points.
The assembly line. Output of step N is the input of step N+1.
Example: Draft → Translate → Format for brand voice → Publish
Best for: fixed, ordered steps where accuracy per step matters more than flexibility.
Trade-off: errors cascade. If step 2 garbles, steps 3 and 4 polish the garbage.
Note
Reading every pattern diagram in this class: arrows = code, boxes = LLM. The code is the scaffolding; the LLM sits only where judgment is needed.
Schema-check between each step so a bad output doesn’t cascade.
The triage desk. Classify first, dispatch to the right specialist.
Example: support — billing → cheap + SQL; legal → strong + policy docs; chit-chat → fast, no tools.
Best for: inputs with distinct categories where a generic prompt would be mediocre on every one.
Why the same product feels smart on some questions, dumb on others — it’s silently routing underneath.
The classifier itself can be code or LLM — default to the cheapest that works.
Editor + writer. One role generates. Another critiques. Loop.
Example: code writer + code reviewer; translator + fluency judge; draft writer + editor.
Best for: tasks with a clear quality rubric — one-shot isn’t good enough but iteration is cheap.
Trade-off: needs a stop condition — a rubric the evaluator can grade, plus a max-iteration cap.
Prefer a code rubric (tests, schema) over an LLM judge whenever you can write one.
These three patterns do not require a team. You can run all of them with your class-3 single agent — they’re just different ways to structure one workflow.
| Pattern | What it adds | Still one agent? |
|---|---|---|
| Chaining | Sequence with a schema between steps | ✅ yes |
| Routing | A classifier picks which branch to take | ✅ yes |
| Evaluator | A critic loop that tightens the output | ✅ yes |
So what’s next? The patterns that do need a team — parallel fan-out, orchestrator-workers, advisor, managed agents. Those are where coordination cost starts to pay for itself. First: let’s be precise about what a team buys you that one agent never can.
You’ve now seen the single agent up close — its anatomy, its stochastic nature, the code-vs-LLM split inside it, the three orchestration patterns it can already do. Here’s where it stops:
Four things a single agent simply cannot do, no matter how hard you prompt it:
Every MBA has seen this movie. The generalist hits the wall — the answer isn’t “prompt harder.” It’s hire a team.

The four walls aren’t intuition. They’re measurable — and the fix (specialize + split) is measurable too.
| Wall | What the research shows | Source |
|---|---|---|
| Breadth | Models recall the start and end of context; the middle gets forgotten. | Liu et al., 2023 — Lost in the Middle |
| Breadth / Duration | Only half of models claiming 32K context maintain satisfactory performance at 32K. | Hsieh et al., 2024 — RULER |
| Specialization | Decomposing a complex task into focused sub-prompts outperforms one monolithic prompt. | Khot et al., 2022 — Decomposed Prompting |
| Parallelism | Six open-source models collaborating beat GPT-4o on AlpacaEval 2.0 (65.1% vs 57.5%). | Wang et al., 2024 — Mixture-of-Agents |
| All four, empirically | Anthropic’s own split: single-agent Opus → Opus lead + Sonnet subagents gave +90.2% on research tasks. Token usage alone explained ~80% of performance variance. | Anthropic, 2025 — Multi-agent research system |
The walls aren’t opinion — they’re measurable. And so is the lift from splitting into focused agents. Every design decision in the rest of this class is an exercise in which split, for which task, at what cost.
Every multi-agent system you’ll see in the wild varies along three axes:
Specialization
Different agents, different roles.
Researcher vs writer vs reviewer.
Parallelism
Multiple agents at the same time.
4 junior analysts, 4 drafts, pick the best.
Hierarchy
A manager and workers.
Partner scopes, associates execute.
The rest of this class mixes these three in different ways. Every “pattern” we’ll cover is a recipe for combining them.
Multi-agent systems aren’t new. There are two histories converging right now:
Classic multi-agent RL (1990s–today)
Patterns figured out the hard way.
Modern LLM multi-agent (2023–today)
…often rediscovering what MARL figured out years ago.
We’ll do 5 slides of the MARL intuitions first — the timeless part — then show how the modern LLM patterns map onto them. You’ll recognize old friends.
Nature solved multi-agent systems long before we did:

An Anthropic engineer built a working C compiler — 100,000 lines of Rust, compiles Linux 6.9 on x86, ARM, and RISC-V — with a swarm of agents running almost entirely on their own. It’s parallel fan-out, pushed to production scale.
The numbers
How they coordinated
“Most of my effort went into designing the environment.”
The lesson isn’t “use 16 agents.” It’s that the environment does the coordinating. High-quality tests, informative feedback, progress tracking, a shared repo — the agents are interchangeable, the arena is what makes the swarm work. Every pattern from this class — parallel fan-out, managed agents, stigmergy, code skeleton around LLM sparks — pushed to the limit, on one real project.
Unofficial pattern: swarms are less standardized than orchestrator-workers or advisor, but useful for reasoning about environment-mediated coordination.
Not all multi-agent systems have the same goal. Three flavors:
Cooperative
An orchestra. Everyone wins together or nobody does.
→ Research teams, code teams.
Competitive
Chess. One wins, one loses. Zero-sum.
→ Red-team vs blue-team, adversarial debate.
Mixed-motive
A market. Some shared goals, some private.
→ Negotiation agents, auction bidders.
Which flavor you’re building changes everything — how agents communicate, what they hide, how you score them. Most LLM systems today are cooperative. The interesting frontier is mixed.
One MARL idea is worth borrowing, but only as a preview:
MARL calls this family of ideas centralized training, decentralized execution. Don’t learn it as a separate pattern here — just remember the shape: broad planner, narrow executors. We’ll turn that into the practical orchestrator-worker pattern in a few minutes.
Give a team information. How do they share it?
Central: company wiki. Consistent, auditable, a coordination bottleneck.
Individual: personal notes. Fast, specialized, duplicative.
This is stigmergy again. The central store IS the pheromone trail. In Claude Code: the filesystem. In LangGraph: the shared state object. In a research team: the shared vault. Get this layer wrong and your agents duplicate work, contradict each other, and miss connections.
The team shipped. Who gets promoted?
This is the hardest unsolved problem in multi-agent research:
In LLM multi-agent systems, it shows up as:
Keep this in mind when you build multi-agent systems: blame is harder than credit. The agent that looks like it did the work isn’t always the one that did.
Craig Reynolds’ boids (1987) simulated flocks of birds with three rules per bird:
Three rules. No leader. No global plan. Output: indistinguishable from real flocks of birds.
You’re MBAs. You’ve done this.
Back to the agents.
Almost every multi-agent system you’ll see in the wild is a variant of one of two patterns. We’ll cover both and show you the decision tree for picking between them.
| Pattern | Who leads | When to pick |
|---|---|---|
| Orchestrator-workers | Strong model decomposes, delegates down to cheap workers | Big problem that decomposes into subtasks up front |
| Advisor | Cheap model executes, escalates up to strong model for hard calls | Long execution with occasional hard decisions |
Then we’ll layer the supporting machinery on top: subagents (context isolation), parallel fan-out (multiple attempts), managed agents (durable sessions), recurring loops (cron-triggered).
This is where the central/local split from the MARL detour becomes a buildable agent pattern. Anthropic’s own research system uses it — and they measured the before/after: their single-agent Opus plateaued on breadth-heavy research, so they split it into an Opus lead + Sonnet subagents. The team outperformed the solo Opus by +90.2%.

Analogy: McKinsey partner + associates. Partner scopes, associates go deep in parallel, partner synthesizes the deck.
Real numbers from Anthropic’s production research system: +90.2% performance vs single-agent Opus, ~15× more tokens than a normal chat, and token usage alone explains 80% of the performance variance.
Interactive 3D view: the lead agent owns decomposition and synthesis; workers get focused slices.
Inside one session, the main agent spins up helpers with their own context windows. You only see the summary.

“Context is the most expensive thing in the room.”
A subagent is the intern you send to read the 2,000-page filing — you never read the filing, you just get the one-paragraph summary back.
In Claude Code: .claude/agents/researcher.md defines one; the main agent delegates to it when the description matches.
What makes a subagent safe is code, not the LLM: the prompt isolation and the tool allowlist are both enforced before reasoning ever starts.
Same task, many agents, many branches, pick the winner.

Analogy: 4 junior analysts each trying a different market-sizing approach. You look at the four decks and pick the one that landed.
OpenAI’s Codex cloud is this pattern at scale — you assign 5 tasks, walk away for an hour, come back to 5 finished PRs in parallel sandboxes. Claude Code does it locally with git worktree + multiple claude -p processes.
Interactive 3D view: isolated agents explore in parallel, then a selector chooses the best result.
Orchestrator-worker has the strong model leading: plan up top, delegate down.
The Advisor Strategy (Anthropic, 2026) flips the defaults: cheap model drives the work; strong model gets called up only for the hard judgment calls. Same family — different choice about where the expensive thinking lives.

Analogy: junior associate does the grind, calls the senior partner only on the hard judgment calls. Partner bills by the hour — don’t waste them on typing.
Interactive 3D view: the executor drives the run; code decides when advisor escalation is worth the cost.
The numbers, straight from the Anthropic post:
| Config | Task | Score | Cost |
|---|---|---|---|
| Haiku solo | BrowseComp | 19.7% | baseline |
| Haiku + Opus advisor | BrowseComp | 41.2% | 85% cheaper than Sonnet |
| Sonnet solo | SWE-bench Multilingual | — | baseline |
| Sonnet + Opus advisor | SWE-bench Multilingual | +2.7 pts | 11.9% cheaper |
The key insight: frontier-level reasoning is only needed on the hard decisions. The rest of the run stays at executor-level cost. You’re paying for Opus exactly when you need it.
Tip
💻 Code vs 🧠 LLM in the advisor pattern: the executor loop is still LLM (you need flexibility in the main task). The escalation trigger — when do we call the advisor? — can be code (always after N steps, always on schema-validation failure) or LLM (the executor decides). The advisor max-uses cap, the budget enforcement, the fallback if the advisor is unavailable — code.
Two patterns, opposite defaults. Pick by decision density — how evenly the hard thinking is spread across the task.
Long-running agents break. Containers die. Sessions expire. Anthropic’s Managed Agents addresses this.

Pet: a container you tend by hand. It dies → you lose the session.
Cattle: three independent pieces, all replaceable:
Container crashes? Spin up a new one. The session survives.
Analogy: a real company doesn’t lose institutional memory when one employee quits. The filing cabinet outlives the person.
The whole idea in one line:
The session is not the context window.
The session log is a durable, queryable event store. The context window is the model’s working memory — volatile, compacted, discarded. Keep them separate and your agents survive crashes, compaction, and model upgrades.
Real numbers from decoupling the two: time-to-first-token P50 ↓ ~60%, P95 ↓ >90%.
Corollary — harnesses encode stale assumptions that go out of date as models improve. Every workaround you add for today’s model weakness is dead weight tomorrow. Build the harness thin.
Around every recurring agent there’s a timer that decides when to fire it, and plumbing that moves data in and out (fetch the emails, send the Slack message, save the result). Two common timers:
The timer and the plumbing are the code skeleton. The agent (the LLM) is the one thing inside that skeleton that makes judgment calls.

| System | Fired by | Decides | Acts |
|---|---|---|---|
| Morning briefing | cron, 7am | what matters today? | 5-bullet email |
| Inbox triage | webhook on new email | urgent, reply, ignore? | draft, flag boss |
| Competitor watch | cron, hourly | worth reacting? | Slack 2-line note |
So the timer fires, the plumbing fetches the new emails, the LLM answers “does any of this actually matter?”, and the plumbing sends the Slack message. One tick — three roles — only the middle one is stochastic.
You’ve seen the patterns. The question is how you actually build them. A spectrum, not a winner.
| Tool | Approach | Best for | Who owns it |
|---|---|---|---|
| LangGraph | Code-first (Python) — State, nodes, edges |
Complex orchestration, branches, human-in-the-loop, persistence | Engineering |
| Claude Agent SDK / OpenAI Agents SDK | Code-first — tool calling + managed loop | Vendor-native agents with MCP / tools | Engineering |
| Vercel AgentKit | Code-first (TypeScript) on Vercel infra | Production agents tight to the Next/Vercel stack | Engineering |
| n8n | Visual, open-source, 900+ integrations | Ops/BizOps automations, cron-style agent workflows | Ops / BizOps |
| Zapier AI Actions / Make.com | No-code, SaaS | Citizen-developer glue between SaaS apps | Anyone |
The decision isn’t “which is best.” It’s “who owns this workflow, and how complex does it need to be?”
Important
Rule of thumb: the more branches, retries, and approvals a workflow needs, the more you want code-first. The more integrations and ownership by non-engineers, the more you want visual/no-code.
The LangGraph-vs-n8n line isn’t technical superiority — it’s who maintains this thing six months from now.
“A production agent is only as good as the trace it leaves behind.”
A chatbot’s output is one string. An agent’s output is a sequence of decisions. Every exec who lets an agent touch real data will ask: how do I know what it actually did?
The answer is a structured trace — one row per step:
| ts | step | turn | tool | args | output | status |
|---|---|---|---|---|---|---|
| 21:12:33 | reason | 0 | — | — | “I need the weather” | — |
| 21:12:33 | act | 0 | WeatherSearch |
{airport: "SFO"} |
"sunny, 23°C" |
ok |
| 21:12:38 | reason | 1 | — | — | final answer | final |
This is what LangSmith, LangFuse, Arize, and Braintrust sell. Same shape: one row per reason | act | observe, searchable, replayable, exportable for audit.
The MBA lens. Tools fail and LLMs hallucinate tool names — agents need error handling at the tool boundary. A trace is the agent’s bank statement: if you can’t produce one, you can’t let the agent near anything that matters.
Deterministic code has deterministic logs — same error, every time. LLM steps don’t. A failure rate of 1-in-20 means your error logs alone are worthless — you can’t reproduce the bug, and even if you could, patching it takes different tools.
The unit of debugging is no longer “this line crashed” — it’s “this step passes 87% of the time; we need to get it to 95%.” That’s a different skill, and it needs different tooling. Eval infrastructure is as important for an agent team as unit tests were for the service before it.
Multi-agent isn’t free. Each step up the capability ladder is roughly an order of magnitude more expensive:

The ~4× and ~15× numbers come from Anthropic’s production research system — a plain chat is one round-trip, a single agent adds tool-call loops, and a multi-agent team fans out across parallel subagents, each with their own context window. A managed 24/7 fleet scales with session length and how many are running at once, so it’s not a single number.
Important
The question isn’t “should I use multi-agent?” It’s “is this task worth 15× the tokens?” Token usage explains 80% of multi-agent performance variance (Anthropic, 2025) — you’re paying for capability, not overhead. But it is real money.
The counter-slide everyone skips.
Most tasks don’t need multi-agent. Start single-agent. Escalate only when:
Anthropic’s own guidance, from class 3: “Start simple. Add agentic systems only when simpler solutions fall short.”
You can’t ship a team of agents without naming how they fail. Three failure modes, three real-world case studies:
| Failure mode | What breaks | Real incident |
|---|---|---|
| Alignment | Agent optimizes the wrong thing | Moffatt v. Air Canada (2024) — chatbot promised a refund; court made the airline pay |
| Security | Attacker hijacks the agent | Replit AI wiped a production database mid-task (2025) |
| Ethics | Someone gets hurt, no one is accountable | NYC MyCity chatbot told small businesses to break the law (2024) |
Important
Multi-agent amplifies all three. More agents = more tool access, more delegation, more places to inject a prompt, more ways one compromised agent poisons the whole team.
The concepts:
The incidents:
Important
Your agent’s incentive is the prompt + the tools + the reward signal. All three are your fingerprints. Alignment is a design decision, not an afterthought.
Claude, ChatGPT, Grok, Pi — they all have deliberate personalities. Not side effects of training. Products.
Why philosophers? Aligning a model isn’t just a technical problem — it’s a values problem: what should the model say when asked about abortion? Legal advice? A user in distress? Those are philosophical questions, not engineering ones.
Multi-agent angle: every agent on your team needs its own character and consistent behavior across the team. That’s a design discipline — and increasingly a business function, not a tech function.
Your agent’s personality is a product decision. Treat it like one. Hire for it.
Context windows keep growing — 100k → 200k → 1M+ tokens. The pitch is that you can stuff everything in. The reality is subtler.
Multi-agent implication: every subagent you dispatch must return a short summary, not the raw filing. That isn’t an optimization — it’s the reason subagents work at all. The main agent stays lean; the subagent’s context is discarded.
Important
Just because the context window can hold it doesn’t mean the model will use it. Budget your tokens like you’d budget attention spans.
The attack patterns:
The incidents:
Warning
The MCP server, the git branch, the PDF the agent was asked to summarize, the Slack thread it reads — each one is now an untrusted input. Treat them like you’d treat SQL input.
Important
When the agent is wrong, you’re the one in court. Design for that day — not the day the demo shipped.
Five practices. None are new. All are skipped. Do them.
Important
Notice the pattern: every one of those five is code wrapped around the LLM, not LLM judgment. Tool allowlists, input validators, output schemas, audit logs, eval harnesses — all code. The first line of defense is always deterministic. The LLM’s judgment is layered on top — never in place of. Prompts alone will not save you.
None of this replaces good judgment about whether a task should be autonomous at all. Some workflows shouldn’t be agents. That’s also a defense.
Extend the Karpathy knowledge hub you built in class 3. Don’t start from scratch — layer a team on top of what you already have.

The hub already gives you: auth, Supabase storage, 6 MCP tools, a vault of markdown files. That’s your pheromone trail. Now add agents that read and write to it in coordinated ways.
Important
Four additions on top of your class 3 hub:
researcher — takes a sub-question, searches, returns bullet findingssummarizer — takes raw source text, returns a source-summary pagelinker — scans the wiki, finds missing [[wikilinks]], proposes fixesPaste into Claude Code in your class-3 hub directory.
/plan Extend my knowledge hub with a multi-agent team. The vault, MCP tools, and auth are already built (class 3 project). === GOAL === Layer an orchestrator + subagents + a scheduled loop on top of the existing hub, so I can say "research X" and wake up to a filed, cross-linked wiki page. === ORCHESTRATOR === File: .claude/agents/orchestrator.md Role: decompose a research question into 3-5 sub-questions, dispatch each to the researcher subagent, collect findings, hand final synthesis to the summarizer subagent, then commit the result via the existing create_note MCP tool. Never does research itself. Never writes prose. === SUBAGENTS === File: .claude/agents/researcher.md Tools: WebSearch, WebFetch, ingest_source Role: answer ONE sub-question with 3-7 bullet findings. Cites sources. Never summarizes. Never creates wiki pages. File: .claude/agents/summarizer.md Tools: get_note, create_note, update_note Role: take orchestrator output, produce a single wiki page with YAML frontmatter, [[wikilinks]], and a sources section. Follows the source-summary template from the class 3 vault. File: .claude/agents/linker.md Tools: search_notes, lint_wiki, update_note Role: scan for orphan pages and missing [[wikilinks]]. Propose additions as a diff; never auto-apply. === RECURRING LOOP === A cron-triggered morning briefing: 1. Pull RSS feeds from feeds.yml (a new file at repo root) 2. For each new item, call ingest_source 3. Call the linker subagent to weave new pages into the existing graph 4. Append a diff summary to log.md Use the /schedule skill or a GitHub Actions cron. Runs at 7am local time. === ADVISOR (STRETCH) === Configure the summarizer to run as Haiku+Opus advisor: executor: claude-haiku-4-5 advisor: claude-opus-4-7 (max_uses: 3) Cheap for the 90% of summarization that's mechanical, escalate to Opus for synthesis calls that need judgment. === TESTS === - orchestrator_spawns_subagents_test: ask a sample question, verify 3-5 researcher spawns and 1 summarizer spawn - context_isolation_test: subagent cannot see main-session variables; only gets its own prompt - wiki_contract_test: final page has valid frontmatter, at least 2 [[wikilinks]], and a sources section === DELIVERABLES === Working locally AND via the scheduled morning briefing. README section on how to add new subagents. One end-to-end demo: "research the advisor strategy" → fully filed, linked, dated wiki page with sources.
| Pattern from class | Where it shows up in the build |
|---|---|
| Orchestrator-worker | orchestrator.md + researchers + summarizer |
| Subagents (context isolation) | each role has its own narrow system prompt + tool allowlist |
| Parallel fan-out | orchestrator dispatches N researchers at once |
| Advisor strategy | stretch config on the summarizer |
| Central knowledge | the class-3 vault IS the pheromone trail |
| Stigmergy | agents coordinate via files, not messages |
| Recurring loop | morning-briefing cron |
| Credit assignment | the tests watch which agent did what |
If this builds — you’ve shipped a real multi-agent system. Not a toy. It runs overnight, writes to a durable store, and uses every canonical pattern we covered — orchestrator-worker, subagents, parallel fan-out, advisor, recurring loop.
Before you implement, take your build plan and mark every node as code or LLM. This is the same lens we’ve been using all class — now applied to your own system.
Important
On paper (or in a comment at the top of your orchestrator file), answer:
Tip
Rule of thumb: if your architecture is >30% LLM boxes, you’re burning tokens on things a schema check or an if-statement would do cheaper. If it’s 0% LLM boxes, you don’t need an agent — you need a script. The production answer lives between.
Zooming out from agent teams to where the frontier labs say this is headed. Definitions first, then positions.
Note
The labs disagree on timelines, definitions, and what “counts.” What they agree on: capability is still scaling, and the thing you’re building today is narrow. Plan for a range of outcomes — not a single forecast.
Four classes. One journey.
| Class | Core idea |
|---|---|
| Class 1 | How software works — code, servers, databases, git |
| Class 2 | How AI got here — from decision trees to transformers |
| Class 3 | How to use an LLM — prompting, context, RAG, tools, one agent |
| Class 4 | How to build a team of agents — orchestrator, subagents, parallel, advisor, managed |
You now have the full stack. You understand what’s underneath the AI product you use, and you can architect your own. The field moves fast. The fundamentals you learned here don’t.
Thank you for choosing to spend your valuable free time during your MBA on these classes with me.
MBA programs already ask a lot of you. Your time is scarce. The fact that you chose to use some of it here, on this topic, matters to me.
And thank you for trusting me to build and teach this. That trust is not something I take lightly.
I hope this course gave you a real edge, a clearer mental model for what is happening in AI, and enough confidence to go build something that would have felt out of reach a few weeks ago.
Tip

Clean Code
Robert C. Martin

Designing Data-Intensive Applications
Martin Kleppmann & Chris Riccomini

Artificial Intelligence:
A Modern Approach
Stuart Russell & Peter Norvig

AI Engineering
Chip Huyen
Thank you for being here. Now go build.
Help me improve — 1 minute, anonymous.
