A guardrail system that intercepts and validates AI agent tool calls
Project description
Veto
A guardrail system for AI agent tool calls. Veto intercepts and validates tool calls made by AI models before execution.
How It Works
- Initialize Veto.
- Wrap your tools using
veto.wrap(). - Pass the wrapped tools to your AI agent/model.
When the AI model calls a tool, Veto automatically:
- Intercepts the call.
- Validates arguments against your rules (via YAML & LLM).
- Blocks or Allows execution based on the result.
The AI model remains unaware of the guardrail - the tool interface is preserved.
Installation
pip install veto
For a complete bank transfer escalation example, see the HITL guide.
For LLM provider support:
pip install veto[openai] # OpenAI support
pip install veto[anthropic] # Anthropic support
pip install veto[gemini] # Google Gemini support
pip install veto[all] # All providers
Quick Start
1. Initialize Veto
Run the CLI to create configuration:
veto init
This creates a veto/ directory with veto.config.yaml and default rules.
2. Wrap Your Tools
from veto import Veto
# 1. Define your tools normally
my_tools = [
{"name": "my_tool", "handler": my_handler, ...},
# ...
]
# 2. Initialize Veto
veto = await Veto.init()
# 3. Wrap tools (Validation logic is injected)
wrapped_tools = veto.wrap(my_tools)
# 4. Pass to your Agent/LLM
agent = create_agent(
tools=wrapped_tools,
# ...
)
3. Configure Rules
Edit veto/rules/financial.yaml (example):
rules:
- id: limit-transfers
name: Limit large transfers
action: block
tools:
- transfer_funds
conditions:
- field: arguments.amount
operator: greater_than
value: 1000
Configuration
veto.config.yaml
version: "1.0"
# Operating mode
mode: "strict" # "strict" blocks calls, "log" only logs them
# Validation Backend
validation:
mode: "custom" # "api" or "custom"
# Custom Provider (if mode is custom)
custom:
provider: "gemini" # or openai, anthropic
model: "gemini-3-flash-preview"
# Logging
logging:
level: "info"
# Rules
rules:
directory: "./rules"
recursive: true
API Reference
Veto.init(options?)
Initialize Veto. Loads configuration from ./veto by default.
veto = await Veto.init()
veto.wrap(tools)
Wraps an array of tools. The returned tools have Veto validation injected into their execution handler.
wrapped_tools = veto.wrap(my_tools)
veto.wrap_tool(tool)
Wraps a single tool instance.
safe_tool = veto.wrap_tool(my_tool)
veto.get_history_stats()
Returns statistics about allowed vs blocked calls.
stats = veto.get_history_stats()
print(stats)
# {"total_calls": 5, "allowed_calls": 4, "denied_calls": 1, ...}
veto.clear_history()
Resets the history statistics.
veto.clear_history()
veto.export_decisions(format)
Exports decision history as JSON or CSV.
json_audit = veto.export_decisions("json")
csv_audit = veto.export_decisions("csv")
CLI Commands
| Command | Description |
|---|---|
veto init |
Initialize Veto in current directory |
veto version |
Show version |
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file veto-0.12.0.tar.gz.
File metadata
- Download URL: veto-0.12.0.tar.gz
- Upload date:
- Size: 109.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b5972a056ed290646a9022c1b89534052d76b7e8e64ef3d6ed93538596dbf706
|
|
| MD5 |
bf7845cbda39c5e8e477ddbfe969d379
|
|
| BLAKE2b-256 |
c4b61475ba1139159f22be09ecf42433bd0c9fd901c94012f958374cdaad72bf
|
File details
Details for the file veto-0.12.0-py3-none-any.whl.
File metadata
- Download URL: veto-0.12.0-py3-none-any.whl
- Upload date:
- Size: 87.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5141f80fa5c184e35d6f664825fff72d196c6c7b0b295e842fb0c7e2a935d938
|
|
| MD5 |
2f059d79975567ff1b02a4062ff005ef
|
|
| BLAKE2b-256 |
c0abc4127d01ca56f18e3f36e45b69feca592fab79c95be411a32e83e1a4ea0b
|