> ## Documentation Index
> Fetch the complete documentation index at: https://agentcontrol-abhi-agent-control-auth-contract-docs.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Steer Action Demo

> Banking transfer agent showcasing observe, deny, and steer actions.

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

## What This Demonstrates

This example shows the three Agent Control action types in a real-world banking scenario:

* Deny: Hard-block compliance violations (OFAC sanctions, high fraud)
* Steer: Guide agent through approval workflows (2FA, manager approval)
* Observe: Record suspicious activity for audit without blocking (new recipients)

## 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

```text theme={null}
Request Transfer → Steer Triggered → Correct Issue → Retry Transfer → Success
```

## Quick Start

### Prerequisites

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

### Run the Demo

```bash theme={null}
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 steer vs observe 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 → correct → retry lifecycle

## How It Works

The agent uses AgentControl to gate wire transfers through five controls:

| Control          | Type    | Triggers When                     |
| ---------------- | ------- | --------------------------------- |
| OFAC Sanctions   | Deny    | Destination is sanctioned country |
| High Fraud       | Deny    | Fraud score > 0.8                 |
| New Recipient    | Observe | Recipient not in known list       |
| 2FA Required     | Steer   | Amount >= 10,000 without 2FA      |
| Manager Approval | Steer   | Amount >= 10,000 without approval |

### Structured Steering Context

Steer controls provide structured JSON guidance for deterministic workflows:

```json theme={null}
{
  "required_actions": ["request_2fa", "verify_2fa"],
  "retry_flags": {
    "verified_2fa": true
  },
  "reason": "Large transfer requires identity verification via 2FA"
}
```

For multi-step workflows:

```json theme={null}
{
  "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, steer, observe)
* `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`](https://github.com/agentcontrol/agent-control/tree/main/examples/steer_action_demo)
