SteerPlane SDK
The safety layer for the AGI era. Runtime guardrails for autonomous AI agents.
Cost limits · Loop detection · Policy engine · Human approval callbacks · SSE streaming gateway · CLI · Docker · 4 framework integrations
Install
pip install steerplane # Core SDK
pip install steerplane[cli] # + CLI tool
pip install steerplane[all] # + CLI + YAML config + LangChain
Quick Start
Option 1: Gateway Mode (Zero Code Changes)
Point your existing OpenAI client to SteerPlane. Every LLM call is automatically monitored, rate-limited, and cost-tracked — including SSE streaming with mid-stream cost enforcement.
import openai
client = openai.OpenAI(
base_url="http://localhost:8000/gateway/v1",
api_key="sk_sp_...", # SteerPlane API key
default_headers={"X-LLM-API-Key": "sk-..."}
)
# All calls — including stream=True — are now guarded.
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "Hello"}],
stream=True # SSE streaming with real-time cost tracking
)
Option 2: Decorator Mode
from steerplane import guard
@guard(
agent_name="support_bot",
max_cost_usd=10.00,
max_steps=50,
denied_actions=["DROP TABLE*", "rm -rf *"],
rate_limits=[{"pattern": "send_email", "max_count": 5, "window_seconds": 60}],
require_approval=["execute_trade*"]
)
def run_agent():
agent.run()
Option 3: Context Manager
from steerplane import SteerPlane
sp = SteerPlane(agent_id="my_bot")
with sp.run(max_cost_usd=10.0, max_steps=50) as run:
run.log_step("query_db", tokens=380, cost=0.002, latency_ms=45)
run.log_step("generate_response", tokens=1240, cost=0.008, latency_ms=320)
What's New in v1.1.1
- Built-in pricing now covers 83 models, checked against the OpenAI, Anthropic and Google pricing pages on 21 Oct 2026 (current GPT, Claude and Gemini models, by their API ids).
- Dated model names such as
gpt-4o-2024-08-06are priced as their model instead of the default rate, andgpt-4.1is no longer priced asgpt-4. - For a model that is not in the table, pass your own cost per step:
run.log_step(..., cost=0.0042).
What's New in v1.1.0
detect_loopsnow works. The docs have shown@guard(detect_loops=True)for a long time, but the parameter did not exist. It is accepted by@guard,SteerPlane.run(),RunManagerand all four framework integrations, and in.steerplane.yml. Set it toFalseto stop loop detection from ending a run; cost, step, runtime and policy limits still apply.- Self-hosting for several teams: see
docs/hosted-deployment.mdin the repository.
What's New in v0.4.0
🌊 SSE Streaming Gateway
The AI Gateway now supports Server-Sent Events (SSE) streaming. It accumulates token costs per chunk in real time and can terminate a stream mid-response by injecting a steerplane_enforcement event when the cost ceiling is breached — without corrupting the SSE protocol.
🖥️ CLI Tool
steerplane status # Check API health
steerplane runs list # List recent runs
steerplane runs inspect <id> # Inspect a run
steerplane runs kill <id> # Mark a run as terminated
steerplane keys list # List API keys
steerplane keys create # Create new gateway key
steerplane logs --tail # Live log stream
🐳 Docker Compose
Full 3-service stack in one command (for one server shared by several teams, use docker-compose.hosted.yml):
docker compose up -d
# API (8000) + Dashboard (3000) + PostgreSQL (5432)
📄 Config File (.steerplane.yml)
Project-level defaults auto-discovered from your working directory:
api_url: http://localhost:8000
agent_name: my_bot
defaults:
max_cost_usd: 10.0
max_steps: 100
detect_loops: true
🔌 Framework Integrations
Native support for 4 frameworks — all use lazy imports, so framework dependencies are only required when used:
LangChain:
from steerplane.integrations import SteerPlaneLangChainHandler
handler = SteerPlaneLangChainHandler(agent_name="lc_bot", max_cost_usd=5.0)
llm = ChatOpenAI(model="gpt-4o-mini", callbacks=[handler])
OpenAI Agents SDK:
from steerplane.integrations import SteerPlaneAgentHooks
hooks = SteerPlaneAgentHooks(agent_name="openai_agent", max_cost_usd=10.0)
CrewAI:
from steerplane.integrations import SteerPlaneCrewMonitor
monitor = SteerPlaneCrewMonitor(agent_name="crew_bot", max_cost_usd=15.0)
AutoGen:
from steerplane.integrations import SteerPlaneAutoGenMonitor
monitor = SteerPlaneAutoGenMonitor(agent_name="autogen_bot", max_cost_usd=10.0)
All Features
| Feature | Description |
|---|---|
| 🌉 AI Gateway Proxy | OpenAI-compatible proxy. Point your client, get instant monitoring. |
| 🌊 SSE Streaming | Real-time chunk forwarding with mid-stream cost enforcement. |
| 🛡️ Policy Engine | Allow/deny rules, sliding-window rate limits, human-approval callbacks. |
| 🔄 Loop Detection | Sliding-window pattern detector catches infinite agent loops. |
| 💰 Hard Cost Ceiling | Per-run USD limits in the SDK, per-key monthly limits in the gateway. Built-in pricing for 83 models; for any other model, pass your own cost= to log_step. |
| 🚫 Step Limits | Cap maximum execution steps. |
| 📊 Deep Telemetry | Tokens, cost, latency per step — synced to the dashboard. |
| 🛡️ Graceful Degradation | API down? SDK still enforces guards locally. |
| 🖥️ CLI Tool | steerplane status, runs, keys, logs from terminal. |
| 🐳 Docker Compose | 3-service stack in one command. |
| 📄 Config File | .steerplane.yml for project-level defaults. |
| 🔌 4 Integrations | LangChain, OpenAI Agents SDK, CrewAI, AutoGen. |
Architecture
┌─────────────┐ ┌──────────────┐ ┌────────────┐ ┌───────────────┐
│ AI Agent │────▶│ SteerPlane │────▶│ FastAPI │────▶│ PostgreSQL │
│ (Your App) │ │ SDK / GW │ │ Server │ │ Database │
└─────────────┘ └──────────────┘ └────────────┘ └───────────────┘
│
▼
┌───────────────┐
│ Next.js │
│ Dashboard │
└───────────────┘
Tech Stack
| Component | Technology |
|---|---|
| Python SDK | Python 3.10+, Decorator/Context Manager API, CLI, Config files |
| TypeScript SDK | TypeScript, guard() wrapper, npm-ready |
| Gateway | FastAPI + httpx, SSE streaming, built-in pricing for 83 models |
| API | FastAPI, Alembic migrations, OpenAPI docs |
| Database | PostgreSQL 16 + SQLAlchemy ORM |
| Infrastructure | Docker Compose (API + Dashboard + PostgreSQL) |
| CI/CD | GitHub Actions (lint, test, Docker build) |
| Dashboard | Next.js 16, React 19, Framer Motion |
Links
- GitHub: github.com/vijaym2k6/SteerPlane
- npm: npmjs.com/package/steerplane
- Dashboard:
http://localhost:3000 - API Docs:
http://localhost:8000/docs
License
MIT — Patent Pending
Metadata
Release files for steerplane 1.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| steerplane-1.1.1.tar.gz | 47.3 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| steerplane-1.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 92.6 kB
Release files / steerplane-1.1.1.tar.gz
| Download URL | steerplane-1.1.1.tar.gz |
|---|---|
| Size | 47.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
51fd77eab4b7f0f3dd8b59e902d1b57270235ca04e6df161c5641b8d28caa080
|
|
BLAKE2b-256 checksum How to use checksums |
06baedc8af79ad5f8d9d52bb8e9d35033e82ad83c09740c91e2256c30d05d08d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.7
|
Release files / steerplane-1.1.1-py3-none-any.whl
| Download URL | steerplane-1.1.1-py3-none-any.whl |
|---|---|
| Size | 45.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5a15fdd3affe48ca0e0092f538920f0eee4b33fac3a25b2427f94b3e606b85bb
|
|
BLAKE2b-256 checksum How to use checksums |
e6c98e3f8d5ccf99925b8228d13f953f0096cf8b9d7a301ce7fe08923144a12c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.7
|
Security for steerplane 1.1.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.