---
title: The fleet
description: Five subagents, what each returns, and why it is a pointer.
---

# The fleet

Five standing roles. Each is one file in `.claude/agents/`.

| Agent | Model | Effort | Hands back |
|---|---|---|---|
| Researcher | Opus | xhigh | findings + reasoning on an open question |
| Historian | Haiku | low | URLs only — commits, PRs, threads |
| Librarian | Sonnet | high | a local `.md` path, pulled via context7 |
| Designer | Opus | medium | an `.md` of ASCII diagrams + captions |
| Writer | Opus | high | a finished page under `docs/` — path only |

## The rule that makes it work

```text
  Researcher ─┐
  Historian  ─┤
  Librarian  ─┼──▶  a POINTER  ──▶  lead agent
  Designer   ─┤     not prose       context stays clean
  Writer     ─┘
```

A subagent that returns three paragraphs has spent your lead's context. One
that returns a URL or a file path costs almost nothing, and the lead opens it
only if it needs to. Cheap models can hold the expensive roles because
fetching is not thinking.

## A real definition

```yaml
---
name: historian
description: Returns URLs to relevant git and web history. Never summarizes.
model: haiku
effort: low
tools: [Bash, Read, Grep, WebFetch, SendMessage]
---
```

`name` `description` `model` `effort` `tools` are all real frontmatter keys.
`SendMessage` is the one that matters as a teammate: without it in `tools`, a
tmux pane can spawn, work, and go idle with nowhere to put its answer.

## "Persistent" means resumed

Subagents spawn fresh per invocation — there is no always-on daemon.
`SendMessage` to an agent's name reattaches the *same* agent with its full
history, tool calls and results intact. Persistence is a habit, not a setting:
resume the Historian instead of spawning a second one.
