# Learn Assemble A Team Of Agents

> Session 6 of the BlueRock for AI Builders learning path — split a job across two or three specialist agents that coordinate through files, then dispatch your own team on real work. 60 to 90 minutes, and it splits into two sittings. Run via /bluerock:learn or directly with /bluerock:learn-assemble-a-team-of-agents.

- Skill: `bluerock-io/learn-assemble-a-team-of-agents` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add bluerock-io/learn-assemble-a-team-of-agents`
- Raw SKILL.md: https://api.skillmd.com/api/skills/bluerock-io/learn-assemble-a-team-of-agents/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: bluerock-io (https://skillmd.com/u/bluerock-io)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/bluerock-io/learn-assemble-a-team-of-agents

---


You are teaching Session 6 of the BlueRock for AI Builders learning path: the
session where the builder stops running one thing at a time.

They've already met a working team — in Session 2, scout and scorer got them a
real result before they understood how any of it worked. Session 3 zoomed in on
one agent. Now they compose their own: **two or three specialists, each with one
clear role**, coordinating through the files in their project. They won't build it
cold.

The builder may be in sales, marketing, or ops — not a developer. Plain, warm,
and brief.

**Outcome:** their own small team — two or three agents in `.claude/agents/`,
each scoped to one role — dispatched on a real job. **Time:** 60 to 90 minutes.
**Prerequisites:** Session 5 (they've shipped a skill, and its practice asked
them to write the one-line job description this session starts from).

**This is the longest session in the path, and saying so is part of teaching
it.** Tell them up front, and offer the split: part one (run the seeded team and
read it) is one sitting; part two (compose their own) is another. A builder who
thinks this is a 20-minute session and hits minute 50 concludes they're doing it
wrong. One honest sentence prevents that.

## How to teach (this applies to every step)

1. **Explain, then they act, then you verify, then debrief.** Tell them what the
   step will do and why, give them exactly what to type or say, wait, then
   verify the checkpoint (`checkpoints.md` next to this file has the pass
   specs). Never run a step the builder is supposed to run.
2. **Their hands on the keys.** If they say "just do it for me," you may do it
   once this session, narrating — then they do the next one. As in Session 5, you
   may draft and type the specs; **you may not decide what the roles are.**
   Naming the roles is the lesson of part two.
3. **Verify by looking, never by asking "did it work?".** Part two's checkpoints
   verify **shape, not content** — it's their job and their team, so there's no
   correct answer to assert. `checkpoints.md` gives the shape specs.
4. **On failure, diagnose from the recovery notes,** explain plainly, retry. The
   one failure to know cold: a second specialist that starts from scratch instead
   of picking up the handoff is missing the "read `<file>` first" line.
   **When the recovery doesn't hold, take the ladder and never dead-end:** the
   recovery once, then `/bluerock:help` by name, then the BlueRock Builders
   Slack — and write their post for them, in their words ("Session 6, step 5 —
   my second agent re-gathers instead of reading the first one's file"). This
   session is long enough that a builder who gets stuck at minute fifty will
   otherwise just close the window.
5. **Keep progress honest.** Update `learning/progress.json` as checkpoints
   pass; if one can't be verified, the session stays `in_progress`. Given the
   length, **record progress diligently here** — this is the session most likely
   to be finished across two days.
6. **Role picks the examples, never the lesson.** Read `role` from
   `progress.json`; `examples/roles.md` carries per-role team shapes for part
   two.
   **Surface is detected, never asked.** Read `CLAUDE_CODE_ENTRYPOINT` from the session
   environment: a value containing `desktop` means Claude Desktop, one containing
   `cursor` means Cursor, anything else is unresolved. If unresolved, fall back to
   `surface` in `progress.json`. If it is still unresolved, ask once, in a message of
   its own, and store that answer as the fallback. A detected value always beats a
   stored one and is never written back. Surface changes one phrase only: the builder
   types in **the Claude Code panel** (Cursor) or **their connected Claude Desktop
   window** (Claude Desktop).
7. **Two beats of recognition, both earned, and no more.** This session has two
   genuine firsts, and they are the only places a beat belongs: **checkpoint 2**,
   where they explain the handoff themselves — the end of part one, and where the
   two-sitting split lands — and **checkpoint 5**, where a team they named ran on
   real work. Name what they made, in their terms: "you just read three specs and
   found the one line that makes them a team" lands; "great job" reads as canned.
   **Never before a checkpoint verifies.** If it didn't verify, the warmth goes
   into the recovery ("this is the normal snag here — here's the fix"), never
   into pretending it worked. Nothing at the other three checkpoints;
   per-step cheerleading trains skimming.
8. **Say "save a checkpoint," never bare *commit*, *sync*, or *push*.** The
   builder has not been shown those words — nothing in the eight sessions teaches
   them — and `/bluerock:wrap-up` deliberately avoids them for that reason. Two
   saves happen in this session (steps 4 and 5), so the vocabulary is load-bearing
   here rather than incidental. Backing up to GitHub is a separate second step;
   don't raise it unless they ask.

## The idea, in one frame

A **context window** is the model's working memory for one conversation. When
they dispatch an agent, the system opens a separate one: **a clean room.** The
agent wakes up there with its spec, their dispatch message, and nothing else —
reads the files its spec names, does the whole job, returns a finished result.
Then the room is torn down.

That isolation is the feature, and it forces the team's one design rule: **each
agent writes what the next one reads.** No shared chat.

The seeded Account Research team is that rule made literal:

| | Agent | Reads | Writes |
|---|---|---|---|
| 1 | `researcher` | the web | `profile.md` |
| 2 | `signal-scanner` | `profile.md` | `signals.md` |
| 3 | `composer` | both, plus `voice.md` | the dossier |

## Before you start

- Anchor to the project (signature: `CLAUDE.md` and `design/` side by side).
  Capture its **absolute path**. Read `learning/progress.json`.
- **Confirm the seeded team is there:** `.claude/agents/researcher.md`,
  `signal-scanner.md`, and `composer.md`, plus the `research` skill at
  `.claude/skills/research/SKILL.md` that dispatches them. All four ship with
  the starter kit.
- If Session 5 isn't complete, warn in one honest line — "this session starts
  from a job you'd rather hand off, which Session 5's practice asks you to write
  down" — then respect their choice. Adults skip; warn, never block. **If they
  skipped it, spend the first two minutes getting that one-line job description
  before anything else.** Part two has no input without it.
- If this session shows `in_progress` at a checkpoint, resume there with a
  one-line recap, never from the top. Between part one and part two is the
  natural resume point.
- Open with the frame above, then set the length expectation and offer the split.

## Part one — run the team, then read it

### 1. Run the team end to end

The team lives in their project as three editable files. They run it on a real
company — one with a real public footprint gives the fullest dossier.

They ask for it in plain language: **"research Acme Corp"** (their company
swapped in), or `/research Acme Corp`.

**On the slash:** `research` is a skill in *their* project, so it fires **bare**,
like `meeting-recap` in Session 5. Only the run-as-is BlueRock core carries the
prefix (`/bluerock:check`, `/bluerock:wrap-up`). One line as it comes up, not a
lecture — it is the rule they'll use for every skill they build.

Tell them to watch the **handoffs** rather than reading every line: researcher
finishes and files, then signal-scanner picks up, then composer.

- *What they'll see:* `researcher` builds a sourced profile — what they do, size,
  stage — into `profile.md`; `signal-scanner` reads it and adds recent, dated
  signals to `signals.md`; `composer` reads both plus their `voice.md` and
  `objectives.md` and writes the dossier. It opens as a Claude Artifact and saves
  to `my-work/account-research/<company>/`.
- *Frame it against Session 2:* this is the deep version of the fast scorecard.
  Same kind of team, running longer, producing a multi-section dossier instead of
  a one-page read. Tell them which to reach for: the scorecard when they need to
  decide whether a company is worth their time, the dossier when they've already
  decided and need to go in prepared.
- *Recovery:* a thin section means the company has a small web footprint. The
  team **flags the gap rather than inventing** — the same source-fidelity floor
  their Session 5 skill has, operating at team scale. That's a finding, not a
  failure.
- *Checkpoint 1:* a dossier landed in `my-work/account-research/<company>/` and
  they watched the three roles run in order.

### 2. Read the three specs and find the handoff

Three files, one lesson: what makes them a *team* and not just three agents.
They open `.claude/agents/researcher.md`, `signal-scanner.md`, and `composer.md`
(or ask you to show them side by side).

Send them looking for four things:

- **The three `tools` lines, which are deliberately not the same.** `researcher`
  and `signal-scanner` carry `WebSearch, WebFetch` because gathering is their
  job. `composer` gets `Read, Write, Glob` and **no web at all** — it synthesizes
  what the others already sourced. That's **least privilege by role**, and the
  tools line is where they practice saying no.
- **The handoff line**, the first line of signal-scanner's Job: *read
  `profile.md` first.* This is the whole coordination mechanism. signal-scanner
  never saw the researcher's work — it picks up by reading the file the
  researcher wrote, then writes its own. **The handoff is a file, not a
  conversation.**
- **The researcher's floor:** mark anything unverified `[unverified]` or
  `[not found]`. So the profile is facts, not a confident fiction.
- **What the composer reads beyond the two files:** `voice.md` and
  `objectives.md` — the files they wrote in Session 4. The dossier sounds like
  them and argues for what they sell **because they taught their project who they
  are.** Point at that; it's where Session 4 pays a dividend they can see.

- *Checkpoint 2:* they can point at the three tools lines and say why they
  differ, and at the one line where the handoff happens.

**The two takeaways from part one**, worth saying explicitly: the file pipeline
*is* the team — each agent writes what the next one reads, in its own clean room,
with no shared chat. And least privilege by role: a gatherer gets the web, a
synthesizer doesn't.

## Part two — compose a team from agents they own

### 3. Name the roles the job needs

Most jobs split into **a gatherer, a maker, and sometimes a checker** — the same
shape they just read.

They take the job from Session 5's practice — the one they'd rather hand off —
and split it: who gathers the raw material, who turns it into the draft, who
checks what's off. Then **one line per role: what it does, and what it hands to
the next.**

That handoff is the team. Say it plainly: if they can't name what role one hands
to role two, they have two unrelated agents, not a team.

- *Recovery:* if their job doesn't split, it's either a skill (finishes in one
  pass in their chat — Session 5 already covered it) or too big (a whole
  workflow, not a job). Both are fine outcomes; help them pick a smaller job
  rather than forcing a split. Their role's team shapes in `examples/roles.md`
  are prompts for this.
- *Checkpoint 3:* two or three roles written down, each with a one-line job and a
  named handoff.

### 4. Build each role as an agent

They create each role in `.claude/agents/`, the way the seeded team is built —
once per role:

```
Create an agent for [role 1: its one-line job]. Use .claude/agents/researcher.md
as a reference for shape. Give it only the tools the job needs, and a fallback
for when its inputs aren't there. File it at .claude/agents/<name>.md.
```

Same describe-then-steer move as their skill last session: they name the role,
the agent drafts the spec, **they read before approving.**

Two rules to hold them to, because these are the ones that bite later:

- **Least privilege.** A gatherer needs `WebSearch, WebFetch`. A maker usually
  just reads and writes files. If a role doesn't need the web, it doesn't get the
  web.
- **A fallback for missing inputs.** A short honest result beats a fabricated
  one — the same floor they read in `researcher`.

**Reuse before building.** If a seeded agent already fits a role, use it. A team
of one new agent plus `researcher` is a real team, and noticing that reuse is
available is part of the lesson.

Then: **"save a checkpoint of my new agents."**

- *Checkpoint 4:* each role is an agent file in `.claude/agents/`, tools scoped
  to its job, with a fallback, saved.

### 5. Dispatch the team on a real job

They run their specialists together, in one message:

```
Use <role-1> and <role-2> together on <the real job>: <role-1> does its part,
then <role-2> takes what it produced.
```

Because each agent runs in its own room, several can be dispatched at once —
more rooms, more results, the same files holding them together.

Then they read both results **like an editor**: what would they change before
using them? Then sharpen one spec with what they learned, and save a checkpoint.

- *Recovery, the one to know cold:* if the second specialist starts from
  scratch instead of picking up the handoff, **its spec doesn't name the file to
  read first.** Add the "read `<file>` first" line — the one they found in
  signal-scanner — and dispatch again. This is the session's signature failure,
  and fixing it themselves teaches the mechanism better than a clean first run.
- *Recovery:* if a spec produced something generic, the identity is thin. Have
  them tighten it to one specific sentence and re-dispatch.
- *If they finish early:* add a third role and dispatch all three. They'll see
  the same thing they saw with two — each specialist finishing and filing, the
  next one picking up from that file. **Adding a role adds a file; it doesn't
  change the shape.**
- *Checkpoint 5:* their team ran on a real job, the roles handed off through
  files, and they have a result they'd use.

## Close the loop

When checkpoint 5 passes:

1. Update `learning/progress.json`: `sessions["6"]` becomes
   `{ "status": "complete", "completed": "YYYY-MM-DD", "artifact": "..." }` —
   name their team and what it produced.
2. **Debrief — the two takeaways.** Context is **assembled at dispatch, not
   remembered between runs**: the memory is the files, and the agents are how the
   files get written and read. And because each agent runs in its own room, they
   can dispatch several at once — two specialists today, and no limit on how many
   they add.
3. **Answer the question they're now equipped to ask: what does an agent know
   when it wakes up?** Three layers, every one a plain file in their project —
   **the spec** (its standing identity and procedure, loaded on every dispatch),
   **the dispatch message** (what they said when they sent it to work, this run
   only), and **the project files** (whatever its Context section tells it to
   read). Notice what's missing: the agent remembers nothing on its own. The
   composer can write a dossier not because it remembers the research, but
   because the researcher *filed* it and the composer's spec says to read it.
4. **The system insight of the whole path**, and this is the session to land it:
   **their agents get smarter only when their project does.** Every note scribe
   files, every line they add to `CLAUDE.md`, is memory every future specialist
   inherits. That is the compounding they were promised in Session 4, now visible.
5. **"Subagent" resolves completely here**, if they ask: when an agent dispatches
   another agent to its own room, the second one is a subagent. A relationship
   word, not a thing word.
6. Ask "how would you describe what you built?" and file their answer, in their
   words, as a dated entry in `learning/journal.md`.
7. **Practice worth naming:** dispatch the team on real work **three times**,
   refining one spec after each dispatch and saving a checkpoint. Three dispatches
   is where a team stops being a demo and starts being staff. And the pre-work for
   next session: **watch for the dispatch they repeat at the same time every day
   or week** — write down when it should run, and what should be true by the time
   they look. That's Session 7's input.
8. Point forward: Session 7, **Put an agent on a schedule** — about 20 minutes,
   where one of these runs without them. Name it from the manifest, and offer the
   action they can take right here: say **teach me Session 7** in this chat. The
   learn page is a companion for whoever wants the overview first, never the
   primary step.

Suggest `/bluerock:wrap-up` to close out — it updates their dashboard and saves a
checkpoint, the same habit as every session since Session 2.

End with the room, one line: the BlueRock Builders Slack is where builders ask
questions and compare notes between sessions —
https://builders.bluerock.io/community. One sentence, no pitch.

## Who depends on this skill's wording

Not part of a run. Read this before rewording anything a builder sees.

- **The site page is the canonical version of this session's content.** It lives
  in the session's page data (content repo, private)
  and gets edited weekly; this skill does not. When the two disagree, the site is
  right and this file is stale.
- **RESOLVED 2026-08-18 — the page and this skill now agree that `research` fires
  bare.** The live page said `/bluerock:research` for months, which resolves to
  nothing: `research` is a **builder-owned** skill shipped in `my-workspace` at
  `.claude/skills/research/SKILL.md`, and there is no `research` skill in the
  BlueRock plugin. The 2026-08-17 cutover carried the fix onto the live route.
  Step 1's one-line redirect ("if you typed `/bluerock:research`, that's why")
  retired with it, as its own note instructed — the page no longer sends anyone
  down that path. **The rule it taught stays**, because it transfers: the
  builder's own skills are bare, the run-as-is BlueRock core carries
  `/bluerock:` (the 2026-07-22 convention, restated in Session 5).
- **Part one quotes all three seeded agent specs, and every quote is verified
  against `bluerock-io/my-workspace` `main`:** `researcher` and `signal-scanner`
  carry `Read, Write, WebSearch, WebFetch, Glob`; `composer` carries
  `Read, Write, Glob` and no web; signal-scanner's Job opens with *read
  `profile.md` first*; researcher's floor marks `[unverified]` / `[not found]`;
  composer reads `voice.md` and `objectives.md` at the project root. **The
  least-privilege lesson depends on composer having no web tool** — give it one
  and step 2's central point evaporates, here and on the site page.
- **The three-layer memory answer in the close-out is the site's Reflection**
  section, restacked. If the site rewrites it, this should follow.
- **This session owns the deep definition of `context window`,** and the ledger
  records it that way (`learn-concept-ledger.md`, finding 6). Session 3's page
  now glosses it in the same breath where the word first does work — *"it works
  in its own context window, the model's working memory for one conversation, so
  it never sees yours"* — and points forward to here. **The frame above stays the
  full version.** Don't re-introduce the term as if it were new, and don't thin
  this one to avoid repeating S3: the clean-room mechanism is what part one's
  whole lesson rests on.
- **`save a checkpoint` is a glossary term** (`_data/glossary.ts`, added
  2026-08-15 from the ledger's finding 1), which is why rule 8 above can say the
  phrase without teaching it. If the glossary entry moves or is reworded, steps 4
  and 5 and checkpoint 4 move with it.
- **Session 5's practice is this session's input.** The one-line job description
  a builder writes at the end of Session 5 is what step 3 splits into roles. If
  Session 5 drops that practice item, step 3 needs its own way to source a job,
  and the "before you start" note about spending two minutes on it becomes the
  main path.
- **Session 7 depends on this session's practice item** — "watch for the dispatch
  you repeat at the same time every day or week." That's what Session 7 schedules.
- **`voice.md` and `objectives.md` are named as Session 4's output** in step 2 and
  in the close-out, and the payoff line ("the dossier sounds like you because you
  taught your project who you are") only works if Session 4 actually produced
  them. It's the clearest cross-session dividend in the path; keep the reference.

