Skip to main content

Python SDK for the IRL Engine — cryptographic pre-execution compliance rail

Project description

irl-sdk — Python SDK for the IRL Engine

Async Python client for the IRL Engine — the cryptographic pre-execution compliance gateway for autonomous AI trading agents.

  • Fetches a signed Layer 2 heartbeat from the MTA operator automatically
  • Constructs and signs the authorize request
  • Returns a sealed trace_id and reasoning_hash before any order reaches the exchange

Install

pip install irl-sdk

Requires Python 3.10+.

Quick Start

import asyncio
from irl_sdk import IRLClient, AuthorizeRequest, TradeAction, OrderType

IRL_URL   = "https://irl.macropulse.live"
MTA_URL   = "https://api.macropulse.live"
API_TOKEN = "your-irl-api-token"
AGENT_ID  = "your-agent-uuid"           # from POST /irl/agents
MODEL_HASH = "your-model-sha256-hex"    # 64-char hex

async def main():
    async with IRLClient(IRL_URL, API_TOKEN, MTA_URL) as client:
        req = AuthorizeRequest(
            agent_id=AGENT_ID,
            model_id="my-model-v1",
            model_hash_hex=MODEL_HASH,
            action=TradeAction.LONG,
            asset="BTC-USD",
            order_type=OrderType.MARKET,
            venue_id="coinbase",
            quantity=0.1,
            notional=6500.0,
            notional_currency="USD",
        )
        result = await client.authorize(req)

        if result.authorized:
            print(f"AUTHORIZED  trace_id={result.trace_id}")
            print(f"reasoning_hash={result.reasoning_hash[:24]}...")
            # embed trace_id in your exchange order metadata, then place the order
        else:
            print("HALTED — IRL blocked the trade")

asyncio.run(main())

End-to-End Demo

The demo registers nothing — it uses a pre-seeded demo agent in the public sandbox:

cd examples
pip install -e ..
python demo_e2e.py

Expected output:

IRL Engine : https://irl.macropulse.live
MTA        : https://api.macropulse.live
Agent ID   : 00000000-0000-4000-a000-000000000001

Fetching heartbeat and submitting authorize request...

AUTHORIZED
  trace_id      : <uuid>
  reasoning_hash: <first 24 chars>...
  shadow_blocked: False

API Reference

IRLClient(irl_url, api_token, mta_url)

Async context manager. All parameters are positional.

Parameter Description
irl_url IRL Engine base URL
api_token Bearer token (from IRL_API_TOKENS env on the engine)
mta_url MTA operator URL for heartbeat fetch. Pass empty string "" when LAYER2_ENABLED=false.

client.authorize(req: AuthorizeRequest) → AuthorizeResult

  1. Fetches a fresh signed heartbeat from {mta_url}/v1/irl/heartbeat
  2. POSTs to {irl_url}/irl/authorize with the heartbeat and request payload
  3. Returns AuthorizeResult

AuthorizeRequest fields

Field Type Required Notes
agent_id str yes UUID registered via POST /irl/agents
model_id str yes Human-readable model name
model_hash_hex str yes SHA-256 of model config (64 hex chars)
action TradeAction yes LONG / SHORT / NEUTRAL
asset str yes e.g. "BTC-USD", "SPY"
order_type OrderType yes MARKET / LIMIT / STOP / TWAP / VWAP
venue_id str yes Exchange identifier
quantity float yes Order size
notional float yes Notional value
notional_currency str yes e.g. "USD"
client_order_id str no Your internal order reference
agent_valid_time int no Model inference timestamp (ms). Defaults to now.

AuthorizeResult fields

Field Type Notes
trace_id str UUID — embed in exchange order metadata
reasoning_hash str SHA-256 seal of the full cognitive snapshot
authorized bool True = proceed; False = halted by policy
shadow_blocked bool True = would have been blocked; only set when SHADOW_MODE=true on the engine

TradeAction

from irl_sdk import TradeAction

TradeAction.LONG     # "Long"
TradeAction.SHORT    # "Short"
TradeAction.NEUTRAL  # "Neutral"

OrderType

from irl_sdk import OrderType

OrderType.MARKET  # "MARKET"
OrderType.LIMIT   # "LIMIT"
OrderType.STOP    # "STOP"
OrderType.TWAP    # "TWAP"
OrderType.VWAP    # "VWAP"

Error Handling

The SDK raises httpx.HTTPStatusError on non-2xx responses. The response body contains {"error": "ERROR_CODE", "message": "..."}. Common codes:

Code Meaning
HEARTBEAT_DRIFT_EXCEEDED Heartbeat too old — clock skew or slow network
HEARTBEAT_MTA_REF_MISMATCH MTA hash mismatch — regime changed between heartbeat and authorize
REGIME_VIOLATION Action not permitted in current regime
NOTIONAL_EXCEEDS_LIMIT Exceeds agent notional cap × regime scale
MODEL_HASH_MISMATCH Provided hash ≠ registered hash
AGENT_NOT_FOUND Register the agent first via POST /irl/agents

Layer 2 (Heartbeat) Details

When LAYER2_ENABLED=true on the engine (default), every authorize request must carry a SignedHeartbeat. The SDK fetches this automatically from {mta_url}/v1/irl/heartbeat.

The heartbeat binds each request to a specific MTA broadcast:

  • sequence_id — strictly monotone (anti-replay)
  • timestamp_ms — must be within MAX_HEARTBEAT_DRIFT_MS of txn_time
  • mta_ref — SHA-256 of the raw /v1/regime/current HTTP response body
  • signature — Ed25519 signature by the MTA operator

For local dev with LAYER2_ENABLED=false, pass mta_url="". The engine substitutes a zero heartbeat internally.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

irl_sdk-0.1.0.tar.gz (5.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

irl_sdk-0.1.0-py3-none-any.whl (6.4 kB view details)

Uploaded Python 3

File details

Details for the file irl_sdk-0.1.0.tar.gz.

File metadata

  • Download URL: irl_sdk-0.1.0.tar.gz
  • Upload date:
  • Size: 5.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for irl_sdk-0.1.0.tar.gz
Algorithm Hash digest
SHA256 be08050cc0067b611bd81e0fee76f2e85acdd27274708e5aaa2e1037cc882cee
MD5 8c37c0604550a9ac09a010a55d3df39b
BLAKE2b-256 359b3ce44b6a012da9ec9a083b5f07c756ec09e61f854ea3b531e0424e2779b1

See more details on using hashes here.

File details

Details for the file irl_sdk-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: irl_sdk-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 6.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for irl_sdk-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 aac77c05f1764a6d19cff12b80a740b06c604cd57fe71bfc981b1ff96fb04047
MD5 c3afd1a66945290d320a0e8c1254f709
BLAKE2b-256 cbb85f6fead4876e1111cd1d4256a267d9737910de8810e6c26499c520707527

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page