> For the complete documentation index, see [llms.txt](https://docs.fritesai.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.fritesai.com/concepts/fan-out-policy.md).

# Fan-out policy

`fanOutPolicy` controls **how aggressively** frites fans a turn out to the full council. Because every council call is metered (children run on your subscriptions programmatically, which bills), fanning out on every turn is the dominant cost lever. The policy decides whether a given turn is worth the spend at all.

It has four settings:

| Value       | Behavior                                                                       |
| ----------- | ------------------------------------------------------------------------------ |
| `always`    | Always fan out. Maximum cross-checking, maximum metered spend.                 |
| `auto`      | The coordinator judges per-prompt whether fanning out is worth it (see below). |
| `necessary` | Fan out only on hard or contested prompts; otherwise run a single agent.       |
| `never`     | Never fan out. Always run a single agent.                                      |

## The LLM classifier in `auto`

`auto` is the cost-aware default. It decides fan-out per request in two stages:

1. **Heuristic short-circuit.** frites first applies a cheap heuristic. On trivially simple prompts it skips fan-out outright, with no extra model call.
2. **LLM fan-out judge.** When the heuristic says fan-out *might* be worth it, frites asks a small LLM classifier to make the final call for the current request: fan out, or run a single agent.

This LLM fan-out judge is a separate role from the council synthesizer. The synthesizer (`defaultAgents[0]`) merges the children's outputs *after* fan-out; the fan-out judge is the cheap classifier that decides **whether** to fan out in the first place. See [Council of agents](/concepts/council-of-agents.md) for the synthesizer.

## Cost implications

Fan-out worthiness is a property of the **current request**, not the whole transcript, so the policy re-decides on each new request. Spend scales with how often the policy says "yes":

* `always` pays for the full N-child council on every allowed turn, the most expensive setting.
* `auto` spends only when the heuristic plus the LLM judge agree a turn benefits from cross-checking, avoiding council cost on simple prompts.
* `necessary` is more conservative still, reserving the council for hard or contested prompts.
* `never` collapses to a single agent: no council premium, no cross-checking.

`fanOutPolicy` decides *whether* a turn fans out; [`fanOutScope`](/concepts/fan-out-scope.md) decides *which* turns of a multi-turn agentic task even get asked. Together they bound a long task to a small, predictable number of councils. See [Configuration](/reference/configuration.md) for the full key list and defaults.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.fritesai.com/concepts/fan-out-policy.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
