Guardrails are not a content filter bolted on at the end. They are the structure the agent runs inside, and in our builds they operate at five levels.
First, the action space. The agent can only invoke tools we have explicitly registered, with scoped credentials, and each tool declares whether it is read-only or state-changing. There is no general shell, no arbitrary HTTP client, no ability to write to systems it was not commissioned for. This single constraint eliminates the majority of catastrophic-failure scenarios.
Second, approval gates. Every state-changing action carries a threshold: refunds above a value, communications to external parties, anything touching a regulated record. Below the threshold the agent proceeds; above it, the action queues for a named human with the full reasoning trace attached. Thresholds are configuration, not code, so they can be tightened the day something feels wrong.
Third, budget and rate limits. Each task has a token budget and a wall-clock ceiling. Agents that loop — and untuned agents do loop — hit the ceiling, halt, and escalate rather than burning through a month of inference spend overnight.
Fourth, input defence. Documents, emails and web content that enter the agent’s context are treated as untrusted: instructions found inside retrieved content are stripped or neutralised, and tool-calling decisions are validated against the original objective. Prompt injection through an incoming PDF is a real attack against document-processing agents, and it is defended at the architecture level rather than by asking the model politely.
Fifth, the audit log. Every step — the plan, the tool called, the arguments, the result, the confidence, the final action — is recorded immutably. When a decision is questioned three months later, the answer is a record, not a reconstruction.