> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ziro-agent.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Guardrails

> Policy-driven input and output guards that can block a turn before any LLM call is made.

Guardrails are two **conditional graph nodes**. `input_guard` sits at the front
of the turn, before compaction and before the agent node; `output_guard` sits at
the end, after the final assistant message and before it reaches you. Both are
governed by the agent's `guardrails_policy.yaml`: when the policy disables a
guard, the node is not in the graph at all, so there is no per-turn cost. When a
guard blocks, the graph routes straight to `END` with a refusal message; on the
input side this means **no LLM call is made at all**. Guardrails are per agent,
like every other policy, so the `researcher` can run lighter checks than the
default Generalist, and the `safe` flavour can force them on for its members
through the flavour policy overlay.

<Note>
  This page is in progress. It will cover the `guardrails_policy.yaml` schema, the
  available backends (including the local Llama Guard models pre-cached by
  `python -m app.cli.startup`), the evaluator and its verdicts, and how to check a
  policy from the command line with `python -m app.cli.guard_check`.
</Note>

<Columns cols={3}>
  <Card title="Architecture" icon="layers" href="/concepts/architecture">
    Where the guard nodes sit in the agent loop.
  </Card>

  <Card title="Permissions" icon="key" href="/guides/permissions">
    The other gate: per tool call, not per turn.
  </Card>

  <Card title="Flavours" icon="git-branch" href="/concepts/flavours">
    The `safe` flavour forces guardrails on.
  </Card>
</Columns>
