Module 4 of 6
Agents as your specialists
A skill runs in your chat, under your eyes. An agent works in its own room and brings you the finished thing. Today you learn what that room actually is, what the agent knows when it wakes up there, and then you ship the specialist you have been designing since Module 1.
- Explain what an agent’s own context window buys you, and why that is the reason agents can take whole jobs
- Know what an agent actually knows when it wakes up: the three layers of memory, and why all of them are files
- Design the spec with the agent, in your Hub: the M3 meta-prompting loop, pointed at a bigger artifact
- Ship one specialist agent to
.claude/agents/in your Hub and dispatch it on a real job
You have been designing toward this since M1. The spec you wrote there, and the job you flagged in the M3 pre-work, graduate today into a working specialist on your bench.
Watch
The two videos
The clean room: what an agent’s own context window buys you, the three layers of memory, the tools line as an employment contract, and the bench.
scripts/M4-agents-concept-script.mdThe annotated daily-brew walk-through, recorded from Linda’s workspace, then a live dispatch against the notes scribe filed.
scripts/M4-agents-build-with-me-script.mdConcept
A specialist in its own room
The decision rule, one more time, now from the agent’s side: if you would rather hand the job off and check back, it is an agent. Today is about what “handing off” actually means.
First, the term that makes this concrete, because today it starts doing real work: a context window is the model’s working memory for one conversation — everything it can see at once. When a conversation ends, that memory clears; nothing carries over on its own.
When you dispatch an agent, the system opens a separate context window: a clean room. The agent wakes up there with its spec, your dispatch message, and nothing else. It reads the files its spec names, does the whole job, and returns a finished result to your chat. Then the room is torn down.
That isolation is not a technicality. It is the feature:
- The agent works from a clean desk. It sees its instructions and its sources, not the forty messages of unrelated conversation in your chat. Less noise in, sharper work out.
- Your chat stays yours. The agent can read ten files and chew through a long transcript without flooding the conversation you are working in. You get the report, not the research.
- Specialists can multiply. Because each agent runs in its own room, you can dispatch several at once.
This is why the hire analogy from M1 is exact, not cute. A skill is an SOP you follow yourself, in your own office. An agent is a specialist who works in another room and brings you the finished thing.
What the agent knows: multi-layer memory
Here is the question that separates builders from prompt-writers: when your agent wakes up in that clean room, what does it know? Three layers, and every one of them is markdown in your Hub:
| Layer | What it is | When it loads | Example |
|---|---|---|---|
| The spec | The agent’s standing identity and procedure | Every dispatch, automatically | .claude/agents/daily-brew.md |
| The dispatch message | What you say when you send it to work | This run only | "Brief me. I pasted yesterday’s transcript below" |
| The Hub | The files its Context section tells it to read | When the spec says so | notes/<yesterday>.md, CLAUDE.md |
Notice what is missing: the agent remembers nothing on its own. Context is assembled at dispatch, not remembered between runs. The reason daily-brew can brief you every morning is not that it remembers yesterday; it is that scribe filed yesterday into notes/, and daily-brew’s spec says to read it. The memory is the files. The agents are how the files get written and read.
The system insight of the whole curriculum: your agents get smarter only when your Hub does. Every note scribe files, every line you add to CLAUDE.md, is memory every future specialist inherits.
The limit you will eventually hit: a context window is finite. Hand an agent far more than it can hold (a quarter’s worth of transcripts in one paste) and it will skim, skip, or summarize — not because it is lazy, but because it literally cannot see it all at once. The fix is the design you are already learning: keep dispatch inputs focused, and let the spec point at files instead of pasting everything in. The agent reads what it needs, when the spec says so.
The frontmatter is the employment contract
A skill’s frontmatter was two fields, because a skill runs in your chat, under your eyes, with your permissions. An agent works alone in another room, so its frontmatter carries more: name and description work exactly as they did for skills, and then comes the field that matters.
toolsis least privilege, decided in advance: what this specialist can touch when nobody is watching. daily-brew getsRead, Grep, Glob: it can read your notes and find files, and it cannot write, delete, or reach the web. Scribe getsWriteandEditbecause filing is its job. (The plain-English table of what each tool name grants is in M1’s worked example. One name is new here:Grepsearches inside files, whereGlobfinds files by name.) The tools line is where you practice saying no.modelis an optional pin. Reasonable to leave out; your Hub’s default is usually right. Worth knowing the knob exists: smaller, faster models handle routine summarization well and cost less when a job runs on a schedule; the bigger model earns its place on synthesis and judgment calls. You don’t need to change it today.
The tools line is also where this curriculum quietly becomes an operations lesson. One agent with the wrong permissions is a typo. A bench of them is a question you want answered in a file you can read.
Drafting the spec: the M3 loop, one level up
The mistake from M3 applies double here: do not write the spec cold. An agent spec carries more decisions than a skill (an identity, a tools line, a fallback), which means more decisions you do not know you are making until something asks. So you design it the way M3 taught you, in your Hub, with the agent drafting:
- 1.Tell Claude Code what you are building: “I want to build an agent that [job]. Read
.claude/agents/scribe.mdanddaily-brew.mdas reference specs. Ask me five sharpening questions, then draft the full spec (Identity, Job, Context, Tools, Output) as an agent file with frontmatter: name, description, tools.” - 2.Answer the questions. They are the design.
- 3.Critique pass: “Where would this agent get confused working alone? What is it allowed to touch that it shouldn’t be?”
- 4.Iterate until the spec reads like instructions to a competent new hire.
- 5.Say “File it at
.claude/agents/<name>.md” and the agent ships it, same as it filed your skill in M3.
Notice what you did not do: leave your Hub. The reference specs are already in the repo, so nothing gets uploaded. The draft becomes the real file with no copy-paste seam. And the whole design conversation happens where the agent will live.
If you do like drafting away from the repo (on the couch, in the Claude app), a Claude Project works fine as a drafting room: the M1 sandbox, revisited. Upload the reference specs, iterate, then have Claude Code file the result. Just remember the spec is not real until it lives at .claude/agents/.
The bench
One more thing isolation buys you, and it is the ceiling of this whole practice: because each agent runs in its own room, you can dispatch several at once. Linda’s competitive sweeps work this way: one agent researches Langfuse, one researches LangSmith, one researches gateways, dispatched together in a single message. Twenty minutes later, three reports; her job is synthesis. The bound on her output stopped being “how fast can I do research” and became “how fast can I read it.”
You will not need parallel dispatch this week. But you should know the shape of the ceiling, because it reframes what you build today: not an automation, the first hire on a bench. And “subagent,” from M1, now resolves completely: when an agent dispatches another agent to its own room, the second one is a subagent. Relationship word, not a thing word.
Worked example
Reading daily-brew line by line
The artifact is daily-brew: scribe’s partner, the start-of-day briefer that ships in the BlueRock plugin. You have been running this agent for two weeks. Today you read the plugin’s version and learn why it works — then build your own in .claude/agents/, which overrides the plugin’s when they share a name.
Unlike M1, where scribe taught you the anatomy’s vocabulary, today’s annotations are about specialist design: what a spec looks like when it is built to work alone.
--- name: daily-brew description: My start-of-day briefer. Reads yesterday's notes (which scribe files for me at end of day) in notes/<yesterday>.md plus my CLAUDE.md, produces the brief I'd write for myself if I had 15 quiet minutes every morning. Use first thing — before email, before Slack. In M5 we'll schedule this to run at 7am. tools: Read, Grep, Glob model: sonnet ---
1Read-only is a design decision, not a default.
tools: Read, Grep, Glob. This agent synthesizes; it does not file, edit, or fetch. Compare scribe, whose whole job is writing, and who therefore gets Write and Edit. The two specs were scoped as a pair: one writes the memory, one reads it, and neither can do the other’s job by accident. When you write your own tools line, this is the question: what does the job need, and what should this specialist never be able to touch?## Identity You sound like a clear-eyed chief of staff who's been in every meeting I was in yesterday. Frank, specific, no padding. You don't recap — you orient. The recap is yesterday's job; your job is today.
2The Identity earns its keep in one opposition.
## Context Inputs you should look for, in order: 1. Yesterday's notes file in the Hub: notes/<yesterday>.md, filed by scribe. 2. Granola transcripts or bullets pasted into the chat — if I paste raw content at dispatch time, use it as primary source. 3. CLAUDE.md at the Hub root. Always read this. The "What I'm working on this quarter" section is how you decide what counts as "focus" today vs. noise.
3The Context section is the memory map.
**Fallback — no inputs found:** - Ad hoc dispatch (the default in M2-M4): mention that I probably forgot to dispatch scribe last night, then ask me ONE question: "What did you spend the most time on yesterday?" Brief from my answer + CLAUDE.md. - Scheduled dispatch (M5 onward): no human is present at dispatch time. Do NOT ask a question. Produce a stub brief from CLAUDE.md alone ... A short empty brief beats a fabricated one.
4The spec plans for the bad morning.
## Output - Markdown, paste-ready. No greeting. Start at the first heading. - Under 250 words on a normal day. Up to 350 if yesterday was huge — but cut, don't pad. - Names over abstractions: "Tuesday's Northwind call with Alex" beats "the customer call." - If two notes from yesterday contradict each other, surface it in Heads-up — never bury it. - If a section has nothing real, skip the section. Empty sections are more useful than padded ones.
5The Output section budgets attention, not just format.
The takeaway, same as every module: nothing in this file is clever. It is a specialist scoped to one job, told where its knowledge lives, given the smallest sufficient toolset, and specced for the morning things go wrong. That is what you ship today.
You build
Graduate your spec into a specialist
- 1Pick the job and re-test it. One sentence: why is this an agent and not a skill? If the honest answer is “I could finish it in my chat,” pick the other candidate.
- 2Start the design conversation. In Claude Code, in your Hub:
I want to build an agent that [job]. Read .claude/agents/scribe.md and daily-brew.md as reference specs, and here is my M1 sketch: [paste it, or name the file if it already lives in your Hub]. Ask me five sharpening questions, then draft the full spec (Identity, Job, Context, Tools, Output) as an agent file with frontmatter: name, description, tools.(Filed your M1 spec in M2? It’s at.claude/agents/<name>.md; name it. Didn’t? Paste it from wherever you drafted it, or take five minutes to re-sketch the five parts; the sharpening questions will fill the gaps.) - 3Iterate like M3 taught you. Answer the questions, then:
Critique this draft. Where would the agent get confused working alone? What is it allowed to touch that it shouldn’t be?Push hardest on Context (where does its knowledge live, in priority order?) and Tools (what did it get that the job doesn’t need?). - 4Spec the bad morning. Ask:
What happens when the inputs this spec assumes don’t exist? Add the fallback.Steal daily-brew’s floor: a short honest result beats a fabricated one. - 5Ship it. Say
File it at .claude/agents/<name>.md. The agent ships it, same as it filed your skill in M3. Then Source Control: commit (“Add <name> agent”), sync. - 6Dispatch it on a real job. In Claude Code:
Use <name> to <the actual job, with today’s real input>.Watch what comes back. Read it like an editor, then refine the spec with what you learned, and push the refinement.
You are done when
Checkmarks save in this browser onlyIf you finish early: dispatch two specialists in one message, your new agent and daily-brew each on its own job, and watch the bench work in parallel.
Use it for real
Between now and M5
Before the next module
Checkmarks save in this browser onlyThe meta-layer
How Linda does this
Patterns from How I work with AI that show up in M4:
The bench is the ceiling of today’s build. Linda’s competitive sweeps dispatch researcher specialists side by side; the bound becomes synthesis capacity, not response time.
Multi-layer memory is this pattern made architectural. The agent remembers nothing; the Hub remembers everything. Scribe writes the memory, daily-brew reads it, and your new specialist inherits whatever the files know.
An agent returning a confident result is not the same as the job being done. Reading the dispatch result like an editor, then refining the spec, is the personal-scale version of Linda’s rule.