What You’ll Get
- Policy enforcement — ALLOW, DENY, or PENDING decisions on every agent action
- Cost governance — Per-request and daily budget limits that cannot be bypassed
- Security controls — Secret detection, prompt injection prevention, content classification
- Audit evidence — Structured decision logs with correlation IDs and reason codes
- Zero infrastructure — Everything runs inside your application boundary
Prerequisites
- Node.js 18+ (TypeScript) or Python 3.10+ (Python)
- An LLM API key (OpenAI, Anthropic, or any of the 12 supported providers)
Install
- TypeScript
- Python
Step 1: Create Your First Governance Engine
- TypeScript
- Python
Step 2: Evaluate Before Every Action
Callengine.evaluate() before your agent executes any action. The engine returns a decision — your code must respect it.
- TypeScript
- Python
Step 3: Check the Evidence
Every decision produces a structured evidence record:What Just Happened?
In under 5 minutes, you added:Next Steps
Write Your First Policy
Learn policy authoring with conditions, actions, and automation levels
OWASP Policy Pack
Deploy zero-config governance covering all 10 OWASP Agentic Security risks
Governance at Scale
Enterprise operating model — governance teams define policy, developers consume
API Reference
Full TealEngine v1.3 API documentation
Troubleshooting
Decision is always ALLOW
Decision is always ALLOW
Check that
mode is set to 'ENFORCE' (not 'MONITOR' or 'REPORT_ONLY'). In monitor mode, violations are logged but not enforced.FREEZE rule not blocking
FREEZE rule not blocking
FREEZE rules are checked first in the pre-evaluation pipeline. Verify the
condition matches your action string exactly. Use engine.getStatus() to confirm FREEZE rules are loaded.TypeScript type errors
TypeScript type errors
Ensure you’re using
tealtiger@^1.3.0. The v1.3 API uses evaluate() (not evaluateV12()). Check that your tsconfig.json targets ES2020+.Python async issues
Python async issues
TealEngine methods are async. Use
await engine.evaluate(...) inside an async def function, or wrap with asyncio.run() for scripts.
