What problem does it solve? LLM refusals are probabilistic, so agents processing untrusted input or calling sensitive tools (file writes, shell exec, network egress) need deterministic policy enforcement that can halt a run before damage occurs. ## Core Features & Use Cases - Input/Output Guardrails: Async checks that run in parallel against agent input and output, returning a tripwire result with an optional refusal message. - Per-Tool Guardrails: A registry for gating sensitive tool invocations with configurable behavior: reject_content (continue with refusal) or raise_exception (throw GuardrailTripped). - Use Case: An agent accepts free-form user text that may contain prompt injection or PII. Register a guardrail, run it via runAll(guardrails, ctx, input), and short-circuit the run with a refusal payload when the tripwire fires. ## Quick Start Add a guardrail that checks incoming user input for prompt injection and short-circuits the agent run with a refusal if the tripwire triggers.