Skip to main content
Define allow/deny rules so agents cannot run dangerous tools — attach a PolicyEngine before the agent starts.
The user requests a risky action; policy rules allow or deny tools before execution.

Quick Start

1

Simple Usage

Block delete tools on a file-management agent:
2

With Configuration

Use strict mode and custom deny lists:
3

Denial in action

Attach a deny policy and watch the tool call get blocked before it runs:
Policy denials return an error to the model before the tool executes — the same pre-dispatch check applies to native and MCP tools alike. Guardrails run at this same hook: GuardrailChain.validate_tool_call / LLMGuardrail.validate_tool_call can veto a tool call before dispatch (see the Guardrails card below).

Read-only preset — what it blocks

create_read_only_policy() returns a Policy at priority 100 with 11 deny rules — 2 file-resource rules and 9 tool-name rules — covering the SDK’s built-in mutating tools.
The preset matches by both prefix (tool:write_*) and suffix (tool:*_write*), so custom-named tools like atomic_write and file_write are caught too. An explicit ALLOW rule at higher priority still wins — a deny does not silently override it. Add ALLOW rules for any specific tool you need to permit.
Upgrade note (PraisonAI PR #3632): earlier releases shipped create_read_only_policy() with glob patterns that never matched the SDK’s real tool names. If you relied on the preset as a safety net before this release, your agent could still call write_file / delete_file / edit_file / etc. Upgrade to the fixed release and re-run your safety tests.

How It Works

Pattern examples: tool:read_file, tool:delete_*, tool:*.

Configuration Options


Best Practices

Set agent.policy = engine immediately after creating the agent.
create_read_only_policy() blocks the SDK’s built-in mutating tools — write_*, delete_*, edit_*, apply_patch*, copy_*, move_*, append_*, and the *_write* / *_delete* suffix forms. Attach it, then add explicit ALLOW rules at higher priority for any specific tool you need to permit.
Prefer tool:delete_* over tool:* deny rules so read tools keep working.
PolicyConfig(strict_mode=True) blocks unknown tool names by default.

Guardrails

Validate agent output before returning to users

Approval

Require human confirmation for sensitive actions