{"slug": "show-hn-steerplane-open-source-runtime-guardrails-for-ai-agents", "title": "Show HN: SteerPlane – open-source runtime guardrails for AI agents", "summary": "SteerPlane, an open-source runtime guardrails tool for AI agents, launched on Hacker News with features including cost limits, loop detection, and a policy engine to prevent infinite loops, runaway API costs, and destructive actions. The tool integrates with LangChain, OpenAI Agents SDK, CrewAI, and AutoGen, and offers a streaming gateway, CLI, Docker support, and a real-time dashboard.", "body_md": "**Runtime guardrails for autonomous AI agents.**\n\nCost limits · Loop detection · Dual enforcement (Kill/Alert) · Streaming gateway · Policy engine · Human-in-the-loop · CLI · Docker · 4 framework integrations\n\n`pip install steerplane`\n\n· `npm install steerplane`\n\n🌐 **steerplane.com**\n\nAI agents can call APIs, execute code, browse the web, and make real-world decisions. Without guardrails:\n\n- 🔄 A single misconfigured agent can\n**enter an infinite loop** - 💸 A runaway agent can\n**burn through $10,000+ in API credits overnight** - 💀 Agents can take\n**destructive actions** with**zero visibility**\n\nSteerPlane fixes this with **one line of code.**\n\n``` python\nfrom steerplane import guard\n\n@guard(\n    agent_name=\"support_bot\",\n    max_cost_usd=10.00,\n    max_steps=50,\n    denied_actions=[\"delete_*\", \"sudo_*\"],\n    enforcement=\"alert\",\n    alert_threshold=0.8,\n    alert_timeout_sec=1800,\n)\ndef run_agent():\n    # Your agent runs normally.\n    # SteerPlane silently monitors every step.\n    # Financial/runtime limits can pause for human approval.\n    # Loops and policy violations still terminate immediately.\n    agent.run()\n🚀 SteerPlane | Run Started\n   Run ID:  a3f8d2b1-...\n   Agent:   support_bot\n   Limits:  $10.00 cost / 50 steps\n   ─────────────────────────────────────────────\n   ✅ Step 1: query_database     | 380 tokens  | $0.0020 | 45ms\n   ✅ Step 2: call_llm_analyze   | 1240 tokens | $0.0080 | 320ms\n   ✅ Step 3: search_knowledge   | 560 tokens  | $0.0030 | 89ms\n   ✅ Step 4: generate_response  | 1800 tokens | $0.0120 | 450ms\n   ✅ Step 5: send_notification  | 120 tokens  | $0.0010 | 200ms\n   ─────────────────────────────────────────────\n\n✅ SteerPlane | Run COMPLETED\n   Steps:      5\n   Cost:       $0.0260\n   Tokens:     4,100\n   Duration:   1.1s\n```\n\n| Feature | What It Does | |\n|---|---|---|\n| 🔄 | Loop Detection |\nO(W²) sliding-window algorithm catches single-action, alternating, and multi-step repeating patterns in sub-millisecond time — no LLM calls |\n| 💰 | Cost Ceiling |\nPer-run (SDK) / per-session (gateway) USD limits, checked after each step so overshoot is bounded to a single step. Built-in pricing for 25+ models across OpenAI, Anthropic, Google, Meta, and Mistral |\n| 🌊 | Streaming Gateway |\nReal-time SSE chunk forwarding with mid-stream cost kill — if the budget is exceeded during a stream, SteerPlane injects a termination event and cuts the connection |\n| 🛡️ | Policy Engine |\nAllow/deny lists with glob patterns and sliding-window rate limits |\n| 🌐 | Gateway Proxy |\nOpenAI-compatible API proxy — change only `base_url` for zero-code enforcement. The agent passes its provider key through the gateway, which forces all traffic through enforcement before forwarding upstream |\n| 🖥️ | Real-Time Dashboard |\nNext.js dashboard with auto-refresh, animated timelines, cost breakdowns, and policy management |\n| 🔧 | CLI Tool |\n`steerplane runs list` , `steerplane status` , `steerplane keys create` — manage everything from your terminal |\n| 📄 | Config File |\n`.steerplane.yml` auto-discovery — set defaults without hardcoding limits in source code |\n| 🔗 | 4 Framework Integrations |\nLangChain, OpenAI Agents SDK, CrewAI, AutoGen — zero-config drop-in handlers |\n| 🐳 | Docker Compose |\nOne command brings up API + Dashboard + PostgreSQL |\n| 🔌 | Graceful Degradation |\nIf the API goes down, the SDK enforces all limits locally. Agents are never unprotected |\n| 🧪 | CI/CD |\nGitHub Actions pipeline — lint, test, build Docker on every push |\n\nHosted/Enterprise tier:alert-mode human-approval workflows (with email/webhook notifications), server-side provider-key vaulting, and Redis-backed multi-worker gateway state are available on SteerPlane's hosted plan. The open-source SDK still exposes the`enforcement=\"alert\"`\n\nclient options so it works out of the box against a hosted or enterprise deployment — self-hosting only the free tier here runs kill-mode enforcement.\n\n```\ngit clone https://github.com/vijaym2k6/SteerPlane.git\ncd SteerPlane\ncp .env.example .env\ndocker compose up -d\n```\n\nAPI at `localhost:8000`\n\n· Dashboard at `localhost:3000`\n\n· PostgreSQL auto-configured.\n\n```\n# Install the SDK\npip install steerplane\n\n# Start the API\ncd api && pip install -r requirements.txt\nuvicorn app.main:app --reload --port 8000\n\n# Start the Dashboard\ncd dashboard && npm install && npm run dev\npip install steerplane[cli]\nsteerplane status          # Check API health\nsteerplane runs list       # List recent runs\nsteerplane keys create -n prod  # Generate API key\npython examples/simple_agent/agent_example.py\n```\n\nOpen ** localhost:3000** → See your agent run in real time.\n\n``` python\nfrom steerplane import guard\n\n@guard(\n    agent_name=\"my_bot\",\n    max_cost_usd=10.00,\n    max_steps=50,\n    max_runtime_sec=300,\n    enforcement=\"alert\",\n    alert_threshold=0.8,\n    denied_actions=[\"delete_*\", \"sudo_*\"],\n    allowed_actions=[\"search_*\", \"read_*\", \"generate_*\"],\n    rate_limits=[{\"pattern\": \"call_llm*\", \"max_count\": 20, \"window_seconds\": 60}],\n)\ndef run_my_agent():\n    agent.run()\npython\nfrom steerplane import SteerPlane\n\nsp = SteerPlane(agent_id=\"my_bot\")\n\nwith sp.run(max_cost_usd=10.0, max_steps=50) as run:\n    run.log_step(\"query_db\", tokens=380, cost=0.002, latency_ms=45)\n    run.log_step(\"generate\", tokens=1240, cost=0.008, latency_ms=320)\njs\nimport { guard, GuardOptions } from 'steerplane';\n\nconst protectedAgent = guard(async (run) => {\n  await run.logStep({ action: 'query_db', tokens: 380, cost: 0.002 });\n  await run.logStep({ action: 'generate', tokens: 1240, cost: 0.008 });\n  return 'done';\n}, {\n  agentName: 'support_bot',\n  maxCostUsd: 10.0,\n  maxSteps: 50,\n  policy: {\n    deniedActions: ['delete_*', 'sudo_*'],\n  },\n});\n\nconst result = await protectedAgent();\nfrom steerplane.exceptions import (\n    CostLimitExceeded,\n    LoopDetectedError,\n    StepLimitExceeded,\n    PolicyViolationError,\n)\n\n@guard(max_cost_usd=5, denied_actions=[\"delete_*\"])\ndef run_agent():\n    try:\n        agent.run()\n    except CostLimitExceeded as e:\n        print(f\"Budget exceeded: {e}\")\n    except LoopDetectedError as e:\n        print(f\"Loop detected: {e}\")\n    except StepLimitExceeded as e:\n        print(f\"Step limit hit: {e}\")\n    except PolicyViolationError as e:\n        print(f\"Policy violation: {e.action} blocked by {e.rule}\")\n```\n\nSet defaults in a `.steerplane.yml`\n\nat your project root instead of hardcoding limits:\n\n```\napi_url: http://localhost:8000\nagent_name: my_bot\n\ndefaults:\n  max_cost_usd: 25.0\n  max_steps: 100\n  max_runtime_sec: 1800\n  enforcement: alert\n  loop_window_size: 10\n\npolicy:\n  denied_actions:\n    - \"delete_*\"\n    - \"drop_*\"\n  rate_limits:\n    - pattern: \"search_*\"\n      max_count: 10\n      window_seconds: 60\n\nalerts:\n  email: ops@company.com\n  webhook_url: https://hooks.slack.com/...\n  threshold: 0.8\n```\n\n**Merge order:** Explicit decorator params → `.steerplane.yml`\n\n→ hardcoded defaults. The config file is auto-discovered by walking up from the current directory.\n\n``` python\nfrom steerplane.integrations.langchain import SteerPlaneCallbackHandler\n\nhandler = SteerPlaneCallbackHandler(\n    agent_name=\"research_bot\",\n    max_cost_usd=5.0,\n    max_steps=30,\n)\n\nllm = ChatOpenAI(model=\"gpt-4o\", callbacks=[handler])\nagent.run(\"Analyze this data\", callbacks=[handler])\nhandler.finish()\npython\nfrom steerplane.integrations.openai_agents import SteerPlaneAgentHooks\n\nhooks = SteerPlaneAgentHooks(\n    agent_name=\"my_openai_agent\",\n    max_cost_usd=10.0,\n    max_steps=100,\n)\n\n# Convenience wrapper\nresult = await hooks.run(agent, \"Hello!\")\n\n# Or manual lifecycle\nhooks.start()\nresult = await Runner.run(agent, \"Hello!\")\nhooks.finish()\npython\nfrom steerplane.integrations.crewai import SteerPlaneCrewMonitor\n\nmonitor = SteerPlaneCrewMonitor(\n    agent_name=\"my_crew\",\n    max_cost_usd=25.0,\n    max_steps=200,\n)\n\ncrew = Crew(\n    agents=[researcher, writer],\n    tasks=[research_task, write_task],\n    step_callback=monitor.step_callback,\n)\n\nresult = monitor.kickoff(crew)\npython\nfrom steerplane.integrations.autogen import SteerPlaneAutoGenMonitor\n\nmonitor = SteerPlaneAutoGenMonitor(\n    agent_name=\"my_autogen_group\",\n    max_cost_usd=15.0,\n    max_steps=150,\n)\n\nresult = monitor.initiate_chat(user_proxy, assistant, message=\"Hello!\")\n```\n\nInstall only the integration you need:\n\n```\npip install steerplane[langchain]   # LangChain\npip install steerplane[cli]         # CLI tool\npip install steerplane[yaml]        # Config file support\npip install steerplane[all]         # Everything\n```\n\nFor agents you can't modify, SteerPlane provides an OpenAI-compatible gateway proxy with **real-time streaming** and **mid-stream cost enforcement**:\n\n``` python\nfrom openai import OpenAI\n\nclient = OpenAI(\n    base_url=\"http://localhost:8000/gateway/v1\",\n    api_key=\"sk_sp_your_steerplane_key\",\n    # The real provider key is sent to the gateway, which forwards it upstream.\n    default_headers={\"X-LLM-API-Key\": \"sk-your-real-provider-key\"},\n)\n\n# Streaming works — chunks forwarded in real-time\nfor chunk in client.chat.completions.create(\n    model=\"gpt-4o\",\n    messages=[{\"role\": \"user\", \"content\": \"Hello\"}],\n    stream=True,\n):\n    print(chunk.choices[0].delta.content, end=\"\")\n```\n\n**What the gateway enforces per request:**\n\n- Policy rules (deny/allow/rate limits)\n- Session cost vs. ceiling (including mid-stream kill)\n- SHA-256 prompt-hash loop detection\n- Monthly budget tracking\n- Anthropic + OpenAI streaming support\n\n**Security model:** The agent points its OpenAI client at the gateway and passes the real provider key in the `X-LLM-API-Key`\n\nheader. The gateway authenticates the SteerPlane key, runs every request through enforcement (policy → cost → loop), and only then forwards it upstream with that provider key — so the agent can't reach the provider directly or bypass the guardrails.\n\nServer-side provider-key vaulting (so the agent never sends\n\n`X-LLM-API-Key`\n\n) is available on the hosted/enterprise plan.\n\n```\npip install steerplane[cli]\n```\n\n| Command | Description |\n|---|---|\n`steerplane status` |\nCheck API server health |\n`steerplane runs list` |\nList recent runs (filter by `--status` ) |\n`steerplane runs inspect <id>` |\nFull run detail with step-by-step table |\n`steerplane runs kill <id>` |\nForce-terminate a live run |\n`steerplane keys list` |\nList all API keys |\n`steerplane keys create --name prod` |\nGenerate a new API key |\n`steerplane keys revoke <id>` |\nRevoke a key |\n`steerplane logs --tail` |\nLive polling of running agents |\n\nThe policy engine runs **before** any cost is incurred, enforcing rules in strict priority order:\n\n```\nDeny List → Allow List → Rate Limits\n```\n\n| Rule Type | How It Works |\n|---|---|\nDeny list |\nGlob patterns (e.g. `delete_*` ) — any match is blocked immediately |\nAllow list |\nIf set, action must match at least one pattern to proceed |\nRate limits |\nSliding-window counters per pattern — blocks when count exceeds threshold |\n\nAvailable in Python and TypeScript SDKs, the dashboard UI, REST API, and `.steerplane.yml`\n\nconfig file.\n\nThe self-hosted free tier runs **kill mode**: immediate, deterministic termination on any violation.\n\nThe SDK also exposes an `enforcement=\"alert\"`\n\noption (pause → notify a human → approve/deny/extend → auto-terminate on timeout) — this requires the human-approval workflow backend, which is part of the hosted/enterprise plan. Pointed at the free self-hosted API, alert mode fails closed: it safely terminates the run with a clear error rather than continuing unprotected.\n\nSafety invariant:Loop detection and policy violationsalwaystrigger immediate termination regardless of enforcement mode. These are non-overridable security constraints.\n\n```\ncp .env.example .env    # Edit with your values\ndocker compose up -d    # Starts all 3 services\n```\n\n| Service | Image | Port | Purpose |\n|---|---|---|---|\n`postgres` |\npostgres:16-alpine | 5432 | Primary database |\n`api` |\nsteerplane-api | 8000 | FastAPI backend |\n`dashboard` |\nsteerplane-dashboard | 3000 | Next.js UI |\n\nDatabase migrations via Alembic:\n\n```\ncd api\nalembic revision --autogenerate -m \"initial\"\nalembic upgrade head\n┌──────────────────────────────────────────────────────┐\n│                  Agent Application                   │\n│    (OpenAI SDK, LangChain, CrewAI, AutoGen, etc.)    │\n└──────────────┬────────────────────┬──────────────────┘\n               │                    │\n      SDK Mode │          Gateway Mode\n     (@guard)  │       (base_url change)\n               ▼                    ▼\n┌──────────────────────┐  ┌──────────────────────────┐\n│   SteerPlane SDK     │  │   Gateway Proxy          │\n│   (In-Process)       │  │   (Network Layer)        │\n│                      │  │                          │\n│   Guard Engine       │  │   Auth → Policy → Cost   │\n│   Policy Engine      │  │   → Loop → Stream Fwd    │\n│   Cost Tracker       │  │                          │\n│   Loop Detector      │  │   Mid-stream cost kill   │\n│   Run Manager        │  │   Provider key proxied   │\n│   Config File        │  │                          │\n└──────────┬───────────┘  └──────────┬───────────────┘\n           │                         │\n           ▼                         ▼\n┌────────────────────────────────────────────────────┐\n│              SteerPlane API Server                  │\n│      (FastAPI + SQLAlchemy + PostgreSQL/SQLite)     │\n│         Runs · Steps · Policies · API Keys          │\n└──────┬──────────────────────────┬──────────────────┘\n       │                          │\n  ┌────▼───┐                 ┌───▼──────┐\n  │ CLI    │                 │ Next.js  │\n  │ Tool   │                 │ Dashboard│\n  └────────┘                 └──────────┘\n```\n\n| Layer | Stack | Purpose |\n|---|---|---|\nSDK |\nPython 3.10+ / Node.js 18+ | `@guard` decorator, cost tracking, loop detection, policy engine, config file |\nGateway Proxy |\nFastAPI + HTTPX | OpenAI-compatible proxy with SSE streaming, mid-stream cost kill, and forced enforcement on every forwarded request |\nAPI |\nFastAPI + SQLAlchemy + Alembic | REST endpoints for runs, steps, policies, API keys, telemetry |\nDatabase |\nPostgreSQL (prod) / SQLite (dev) | Persistent storage with versioned migrations |\nDashboard |\nNext.js + React + Framer Motion | Real-time monitoring, run timelines, and policy management |\nCLI |\nClick | Terminal-based management — runs, keys, status, live logs |\nCI/CD |\nGitHub Actions | Lint → Test → Build Docker on every push |\n\n```\nSteerPlane/\n├── sdk/                         # Python SDK (pip install steerplane)\n│   └── steerplane/\n│       ├── guard.py             # @guard decorator + SteerPlane class\n│       ├── run_manager.py       # Run lifecycle + enforcement (kill; alert on hosted plan)\n│       ├── cost_tracker.py      # Cost calculation + model pricing\n│       ├── loop_detector.py     # O(W²) sliding-window loop detection\n│       ├── policy_engine.py     # Allow/deny, rate limits\n│       ├── client.py            # HTTP client with graceful degradation\n│       ├── cli.py               # CLI tool (steerplane command)         ← NEW\n│       ├── config_file.py       # .steerplane.yml auto-discovery       ← NEW\n│       ├── runtime_context.py   # Active run tracking for signal handling\n│       ├── telemetry.py         # Step event collection\n│       ├── exceptions.py        # 6 typed exception classes\n│       └── integrations/\n│           ├── langchain.py     # LangChain/LangGraph callback handler\n│           ├── openai_agents.py # OpenAI Agents SDK hooks              ← NEW\n│           ├── crewai.py        # CrewAI step/task callbacks            ← NEW\n│           └── autogen.py       # AutoGen reply hooks                   ← NEW\n├── sdk-ts/                      # TypeScript SDK (npm install steerplane)\n│   └── src/\n│       ├── guard.ts             # guard() HOF + SteerPlane class\n│       ├── run-manager.ts       # Run lifecycle + enforcement\n│       ├── cost-tracker.ts      # Cost tracking + limits\n│       ├── loop-detector.ts     # Loop detection\n│       ├── policy-engine.ts     # Policy engine + glob matching\n│       ├── client.ts            # HTTP client (native fetch)\n│       └── errors.ts            # 7 typed error classes\n├── api/                         # FastAPI backend\n│   ├── Dockerfile               # Production container                  ← NEW\n│   ├── alembic.ini              # Migration config                      ← NEW\n│   ├── alembic/                 # Versioned database migrations         ← NEW\n│   └── app/\n│       ├── main.py              # App entry point + CORS + startup\n│       ├── security.py          # Admin token auth middleware\n│       ├── routes/\n│       │   ├── runs.py          # Run lifecycle endpoints\n│       │   ├── policies.py      # Policy CRUD + evaluation\n│       │   ├── gateway.py       # Streaming proxy + mid-stream kill     ← UPDATED\n│       │   ├── api_keys.py      # API key management\n│       │   └── telemetry.py     # Batch telemetry ingestion\n│       ├── models/              # Run, Step, Policy, APIKey\n│       └── services/\n│           ├── run_service.py\n│           ├── policy_service.py\n│           └── gateway_service.py   # 25 model pricing\n├── dashboard/                   # Next.js real-time dashboard\n│   ├── Dockerfile               # Multi-stage production build          ← NEW\n│   └── src/\n│       └── app/\n│           ├── dashboard/       # Run list + run detail pages\n│           ├── policies/        # Policy management UI\n│           └── api-keys/        # API key management\n├── docker-compose.yml           # 3-service orchestration               ← NEW\n├── .env.example                 # All env vars documented               ← NEW\n├── .github/workflows/ci.yml    # CI/CD pipeline                         ← NEW\n└── examples/                    # Example agent integrations\n```\n\nThe FastAPI server exposes endpoints with auto-generated docs at `/docs`\n\n:\n\n**Runs**\n\n| Method | Endpoint | Description |\n|---|---|---|\n`POST` |\n`/runs/start` |\nStart a governed agent run |\n`POST` |\n`/runs/step` |\nLog an execution step |\n`POST` |\n`/runs/end` |\nFinalize a run |\n`GET` |\n`/runs/{run_id}` |\nGet run details with all steps |\n`GET` |\n`/runs` |\nList runs (paginated) |\n\n**Gateway Proxy**\n\n| Method | Endpoint | Description |\n|---|---|---|\n`POST` |\n`/gateway/v1/chat/completions` |\nOpenAI-compatible proxy (streaming + non-streaming) |\n`GET` |\n`/gateway/v1/models` |\nList available models |\n\n**Policies · API Keys · Telemetry · Health**\n\nSee full API docs at `http://localhost:8000/docs`\n\n| Provider | Models |\n|---|---|\nOpenAI |\nGPT-4o, GPT-4o-mini, GPT-4-Turbo, GPT-4, GPT-3.5-Turbo, o1, o1-mini, o3-mini |\nAnthropic |\nClaude 4 Opus/Sonnet, Claude 3.5 Sonnet/Haiku, Claude 3 Opus/Sonnet/Haiku |\nGoogle |\nGemini 2.0 Flash, Gemini 1.5 Pro/Flash, Gemini Pro |\nMeta |\nLlama 3 70B, Llama 3 8B |\nMistral |\nMistral Large, Mistral Small |\n\n- Python SDK with\n`@guard`\n\ndecorator and context manager API - TypeScript SDK with\n`guard()`\n\nHOF and class API - Cost tracking with built-in pricing for 25+ models (5 providers)\n- O(W²) sliding-window infinite loop detection\n- Policy engine — allow/deny lists, rate limits\n- Real-time Next.js dashboard\n- Kill-mode enforcement\n- OpenAI-compatible gateway proxy\n- LangChain/LangGraph callback handler integration\n- API key management\n- Graceful offline degradation\n-\n**SSE streaming in gateway with mid-stream cost kill**← v0.4.0 -\n**Docker Compose (API + Dashboard + PostgreSQL)**← v0.4.0 -\n**PostgreSQL support + Alembic migrations**← v0.4.0 -\n**GitHub Actions CI/CD pipeline**← v0.4.0 -\n**CLI tool (**← v0.4.0`steerplane runs`\n\n,`steerplane keys`\n\n,`steerplane status`\n\n) -\n**Config file support (**← v0.4.0`.steerplane.yml`\n\n) -\n**OpenAI Agents SDK integration**← v0.4.0 -\n**CrewAI integration**← v0.4.0 -\n**AutoGen integration**← v0.4.0 - WebSocket real-time dashboard (replace polling)\n- Webhook event system\n- Recommendation engine (auto-suggest limits)\n- Agent replay (flight recorder)\n- Cost projection (live burn rate widget)\n- Anomaly detection (deterministic thresholds)\n- OpenTelemetry export\n- Fleet monitoring dashboard\n- Policy-as-code (GitOps YAML)\n- Multi-tenant RBAC\n\n**Hosted / Enterprise plan:** human-in-the-loop alert-mode approval workflow, SMTP/webhook notification dispatch, server-side provider-key vaulting, and Redis-backed multi-worker gateway state.\n\nWe welcome contributions! See [CONTRIBUTING.md](/vijaym2k6/SteerPlane/blob/main/CONTRIBUTING.md) for guidelines.\n\n```\ngit clone https://github.com/vijaym2k6/SteerPlane.git\ncd SteerPlane\n\n# Option A: Docker\ncp .env.example .env && docker compose up -d\n\n# Option B: Manual\ncd api && pip install -r requirements.txt\ncd dashboard && npm install\ncd sdk && pip install -e \".[dev,cli,yaml]\"\n\n# Run tests\ncd sdk && pytest tests/\ncd api && pytest tests/\n```\n\nMIT — see [LICENSE](/vijaym2k6/SteerPlane/blob/main/LICENSE) for details.\n\n**SteerPlane v1.0.0**\n\n[steerplane.com](https://steerplane.com) · [Patent Pending — IN 202641071111 A1](/vijaym2k6/SteerPlane/blob/main/PATENTS.md)\n\n*\"Ship agents. Not incidents.\"*", "url": "https://wpnews.pro/news/show-hn-steerplane-open-source-runtime-guardrails-for-ai-agents", "canonical_source": "https://github.com/vijaym2k6/SteerPlane", "published_at": "2026-07-21 07:00:10+00:00", "updated_at": "2026-07-21 07:22:48.812479+00:00", "lang": "en", "topics": ["ai-agents", "ai-safety", "ai-tools", "developer-tools"], "entities": ["SteerPlane", "OpenAI", "Anthropic", "Google", "Meta", "Mistral", "LangChain", "CrewAI"], "alternates": {"html": "https://wpnews.pro/news/show-hn-steerplane-open-source-runtime-guardrails-for-ai-agents", "markdown": "https://wpnews.pro/news/show-hn-steerplane-open-source-runtime-guardrails-for-ai-agents.md", "text": "https://wpnews.pro/news/show-hn-steerplane-open-source-runtime-guardrails-for-ai-agents.txt", "jsonld": "https://wpnews.pro/news/show-hn-steerplane-open-source-runtime-guardrails-for-ai-agents.jsonld"}}