The permission layer for AI agents.
Veto gives you control over what AI agents can and cannot do. Whether you're building agentic applications or using AI coding assistants, Veto ensures they operate within boundaries you define.
| Package | Language | Description | Documentation |
|---|---|---|---|
| veto-sdk | TypeScript | SDK for building guarded agentic apps | Read the docs |
| veto | Python | SDK for building guarded agentic apps | Read the docs |
| veto-cli | TypeScript | CLI for AI coding assistants | Read the docs |
# TypeScript SDK
npm install veto-sdk
# Python SDK
pip install veto
# CLI for AI coding assistants
npm install -g veto-cli┌─────────────┐ ┌─────────┐ ┌──────────────┐
│ AI Agent │────▶│ Veto │────▶│ Your Tools │
│ (LLM) │ │ (Guard) │ │ (Handlers) │
└─────────────┘ └─────────┘ └──────────────┘
│
▼
┌─────────┐
│ Rules │
│ (YAML) │
└─────────┘
- AI agent requests a tool call
- Veto intercepts and validates against your rules
- Allowed → execute. Blocked → deny. Ask → prompt user.
- Result returned to agent (unaware of guardrail)
- Zero-config defaults — Sensible security rules out of the box
- Multi-language — TypeScript and Python SDKs
- Provider agnostic — OpenAI, Anthropic, Google, LangChain
- Local-first — No cloud required, optional custom LLM validation
- Real-time monitoring — TUI dashboard for coding assistants
Veto is set up for external contributions with explicit CI guardrails.
Build & Test(TypeScript packages)Python SDK(ruff + mypy + pytest)Dependency Review(blocks high-severity dependency risk)Changeset Required(for package changes unless maintainer-exempt)PR Title(conventional title format)
Auto Labellabels PRs by changed paths (area:sdk,area:python, etc.)Sync Labelskeeps repository labels aligned with.github/labels.ymlActionlintvalidates all workflow filesFirst Interactionwelcomes first-time contributors on issues and PRs
Releases are automated from master via .github/workflows/release.yml:
- Changesets create/maintain a Version Packages PR
- Merge the release PR to publish to npm
- Python package is built and uploaded to PyPI
- GitHub releases/tags are created
For package-impacting PRs, run:
pnpm changesetMaintainers can exempt non-release PRs with the release-exempt or no-changeset label.
See CONTRIBUTING.md for branch naming, local development, and release rules.
Apache-2.0