Skip to main content
Get TealTiger running in under 5 minutes. By the end of this guide, your AI agent will have deterministic governance — every action evaluated against policy before execution, every decision producing auditable evidence.

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


Step 1: Create Your First Governance Engine


Step 2: Evaluate Before Every Action

Call engine.evaluate() before your agent executes any action. The engine returns a decision — your code must respect it.

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

Check that mode is set to 'ENFORCE' (not 'MONITOR' or 'REPORT_ONLY'). In monitor mode, violations are logged but not enforced.
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.
Ensure you’re using tealtiger@^1.3.0. The v1.3 API uses evaluate() (not evaluateV12()). Check that your tsconfig.json targets ES2020+.
TealEngine methods are async. Use await engine.evaluate(...) inside an async def function, or wrap with asyncio.run() for scripts.