Skip to main content
A realistic AI banking agent that processes wire transfers with compliance controls, fraud detection, and approval workflows.

What This Demonstrates

This example shows all three AgentControl action types in a real-world banking scenario:
  • Allow: Auto-approve simple, low-risk transfers
  • Deny: Hard-block compliance violations (OFAC sanctions, high fraud)
  • Warn: Log suspicious activity without blocking (new recipients)
  • Steer: Guide agent through approval workflows (2FA, manager approval)

Understanding Steer Actions

Steer is a non-fatal control signal. Unlike deny, steer provides corrective guidance so the agent can fix the issue and retry. Key difference from deny:
  • Deny = You cannot do this (permanent block)
  • Steer = You need to do X first (correctable)

Demo Flow

Request Transfer → Steer Triggered → Correct Issue → Retry Transfer → Allow Success

Quick Start

Prerequisites

  1. Start the AgentControl server
  2. Set your OpenAI API key: export OPENAI_API_KEY="your-key"

Run the Demo

cd examples/steer_action_demo

# 1. Create the controls (one-time setup)
uv run setup_controls.py

# 2. Run the interactive banking agent
uv run autonomous_agent_demo.py

Try These Scenarios

1. Simple Transfer (Auto-Approved)

“Send $500 to Jane Smith” Expected: Automatically approved - no controls triggered

2. Sanctioned Country (Blocked)

“Wire $5,000 to North Korea” Expected: Hard blocked - OFAC compliance violation

3. Large Transfer (Requires Approval)

“Transfer $15,000 to contractor in UK” Expected:
  1. Agent requests 2FA code
  2. Agent asks for business justification
  3. Agent requests manager approval
  4. Transfer completes after approvals

What You Will Learn

  • When to use deny vs warn vs steer actions
  • How to integrate human feedback (2FA, approvals) into agent workflows
  • How structured steering context enables deterministic agent workflows
  • Real-world compliance patterns (OFAC, AML, fraud prevention)
  • The steer to correct to retry to allow lifecycle

How It Works

The agent uses AgentControl to gate wire transfers through five controls:
ControlTypeTriggers When
OFAC SanctionsDenyDestination is sanctioned country
High FraudDenyFraud score > 0.8
New RecipientWarnRecipient not in known list
2FA RequiredSteerAmount >= 10,000 without 2FA
Manager ApprovalSteerAmount >= 10,000 without approval

Structured Steering Context

Steer controls provide structured JSON guidance for deterministic workflows:
{
  "required_actions": ["request_2fa", "verify_2fa"],
  "retry_flags": {
    "verified_2fa": true
  },
  "reason": "Large transfer requires identity verification via 2FA"
}
For multi-step workflows:
{
  "required_actions": ["justification", "approval"],
  "steps": [
    {
      "step": 1,
      "action": "justification",
      "description": "Request business justification from user"
    },
    {
      "step": 2,
      "action": "approval",
      "description": "Submit to manager for approval"
    }
  ],
  "retry_flags": {
    "manager_approved": true,
    "justification": "<collected_from_user>"
  },
  "reason": "Transfer exceeds daily limit - requires approval"
}
Key fields:
  • required_actions: list of actions the agent must complete
  • retry_flags: flags to set when retrying after correction
  • reason: human-readable explanation
  • steps: optional sequential workflow steps with descriptions

Files

  • setup_controls.py - Creates the five banking controls (deny, warn, steer)
  • autonomous_agent_demo.py - Interactive agent with deterministic steer handling

Source Code

View the complete example with all scripts and setup instructions: Steer Action Demo Example