# Fan out cheap workers while your main agent leads

> Hand one session a task list and let it run a team: it spawns a worker per task, attends to them, and merges the finished work back.

**Goal:** stop babysitting five agents in five tabs. Talk to one manager that runs the other five.

## What you need

- Claude Code, in any shard. `/fanout` is installed for you at `~/.claude/commands/fanout.md`, so there's no setup.
- A **[Guild](/pricing/) membership**. Fanout spawns, merges, and approves on your behalf, so it leans on the CLI's control commands.
- Optionally an [open model](/docs/open-models/) if you want the mechanical work run on cheaper models.

## Steps

1. **Give it the list.** One line, freeform, semicolons are fine:

   ```
   /fanout fix the login bug in webapp; add tests to the api; update the changelog in docs
   ```

   The manager matches each task to an open gem by name, opens one if none is open, and asks you when it's genuinely ambiguous.

2. **Set the posture in plain language** if the default doesn't suit you. Workers run in **smart** approval mode by default, so safe read-only operations auto-approve and anything risky comes up to you. Say *"full auto"*, *"ask before anything destructive"*, or *"report only, don't merge"* in the same message.

3. **Point the cheap work somewhere cheap.** Workers don't all have to be on the frontier API. Tell the manager to run the mechanical tasks against a slot you configured, and keep the thinking with a stronger model. One self-hosted connection is one machine, so keep it to a worker or two there. A hosted open model doesn't have that limit.

4. **Check the room before a big fan-out.** `crystl status` reports the app's memory and system pressure plus each shard's resident memory. Keep noisy workers light with `crystl shard create --scrollback 500`, or free a buffer afterwards with `crystl scrollback clear`.

5. **Answer only what comes to you.** You hear from the manager when a worker asks a question it can't answer from your task list, or when something risky needs a human.

## What you'll see when it works

Workers appear as shards, each briefed with its task. Two or more tasks on the **same** project each run in their own isolated git worktree, so their live edits don't overwrite one another. When a worker finishes, the manager merges its branch back; if branches touched the same lines, it surfaces the conflict instead of shipping a broken file. At the end you get a per-worker summary: what got done, what merged, what was blocked, what's left for you.

**Quiet is not done.** A worker can stall on its agent's own in-terminal approval prompt. crystl flags that in `crystl shards` and `crystl status` as `⏸ awaiting input`, and the manager checks for it before calling a task finished.

## Go deeper

- [fanout](/docs/fanout/) for the full loop, the escalation rules, and how it's built.
- [isolated sessions](/docs/isolated-sessions/) for the worktree machinery underneath.
- [Fanning out onto your own hardware](/docs/open-models/#fanning-out-onto-your-own-hardware) for the local hardware arithmetic.
- [Review and merge a worker's branch safely](/docs/scenario-review-and-merge-a-branch/) when you'd rather integrate by hand.

---
Source: https://crystl.dev/docs/scenario-fan-out-cheap-workers/
