Plano is an AI-native proxy and data plane for agentic apps — with built-in orchestration, safety, observability, and smart LLM routing so you stay focused on your agents core logic. https://planoai.dev
Find a file
Syed A. Hashmi c8079ac971
signals: feature parity with the latest Signals paper. Porting logic from python repo (#903)
* signals: port to layered taxonomy with dual-emit OTel

Made-with: Cursor

* fix: silence collapsible_match clippy lint (rustc 1.95)

Made-with: Cursor

* test: parity harness for rust vs python signals analyzer

Validates the brightstaff signals port against the katanemo/signals Python
reference on lmsys/lmsys-chat-1m. Adds a signals_replay bin emitting python-
compatible JSON, a pyarrow-based driver (bypasses the datasets loader pickle
bug on python 3.14), a 3-tier comparator, and an on-demand workflow_dispatch
CI job.

Made-with: Cursor

* Remove signals test from the gitops flow

* style: format parity harness with black

Made-with: Cursor

* signals: group summary by taxonomy, factor misalignment_ratio

Addresses #903 review feedback from @nehcgs:

- generate_summary() now renders explicit Interaction / Execution /
  Environment headers so the paper taxonomy is visible at a glance,
  even when no signals fired in a given layer. Quality-driving callouts
  (high misalignment rate, looping detected, escalation requested) are
  appended after the layer summary as an alerts tail.

- repair_ratio (legacy taxonomy name) renamed to misalignment_ratio
  and factored into a single InteractionSignals::misalignment_ratio()
  helper so assess_quality and generate_summary share one source of
  truth instead of recomputing the same divide twice.

Two new unit tests pin the layer headers and the (sev N) severity
suffix. Parity with the python reference is preserved at the Tier-A
level (per-type counts + overall_quality); only the human-readable
summary string diverges, which the parity comparator already classifies
as Tier-C.

Made-with: Cursor
2026-04-23 12:02:30 -07:00
.claude/skills release 0.4.12 (#830) 2026-03-15 13:03:32 -07:00
.github/workflows release: bump version to 0.4.20 (#897) 2026-04-17 21:16:12 -07:00
apps release: bump version to 0.4.20 (#897) 2026-04-17 21:16:12 -07:00
cli Improve obs model name matching, latency metrics, and error reporting (#900) 2026-04-18 21:21:15 -07:00
config add overrides.disable_signals to skip CPU-heavy signal analysis (#906) 2026-04-23 11:38:29 -07:00
crates signals: feature parity with the latest Signals paper. Porting logic from python repo (#903) 2026-04-23 12:02:30 -07:00
demos release: bump version to 0.4.20 (#897) 2026-04-17 21:16:12 -07:00
docs add overrides.disable_signals to skip CPU-heavy signal analysis (#906) 2026-04-23 11:38:29 -07:00
packages feat(web): merge DigitalOcean release announcement updates (#860) 2026-04-02 06:03:52 -07:00
skills add Plano agent skills framework and rule set (#797) 2026-04-16 13:16:51 -07:00
tests signals: feature parity with the latest Signals paper. Porting logic from python repo (#903) 2026-04-23 12:02:30 -07:00
.dockerignore Rename all arch references to plano (#745) 2026-02-13 15:16:56 -08:00
.gitignore release 0.4.12 (#830) 2026-03-15 13:03:32 -07:00
.gitmodules Remove OMF (#78) 2024-09-24 15:18:20 -07:00
.pre-commit-config.yaml Update black hook for Python 3.14 (#857) 2026-03-31 13:18:45 -07:00
archgw.code-workspace update workspace to exclude build artifact path 2026-02-10 13:37:31 -08:00
build_filter_image.sh release: bump version to 0.4.20 (#897) 2026-04-17 21:16:12 -07:00
bun.lock feat(web): merge DigitalOcean release announcement updates (#860) 2026-04-02 06:03:52 -07:00
CLAUDE.md Add Claude Code skills and streamline CLAUDE.md (#823) 2026-03-13 00:18:41 -07:00
CONTRIBUTING.md Removing duplicate lines and $ sign before the bash commands to make quick copy/paste possible of these commands possible. (#719) 2026-02-01 09:55:56 -08:00
Dockerfile separate config generation from process startup in supervisord (#838) 2026-03-19 22:37:56 -07:00
LICENSE Create LICENSE 2024-10-10 06:30:23 -07:00
package-lock.json fix: resolve all open Dependabot security alerts (#866) 2026-04-02 18:00:28 -07:00
package.json fix: resolve all open Dependabot security alerts (#866) 2026-04-02 18:00:28 -07:00
README.md use plano-orchestrator for LLM routing, remove arch-router (#886) 2026-04-15 16:41:42 -07:00
turbo.json feat: redesign archgw -> plano + website in Next.js (#613) 2025-12-18 15:55:15 -08:00

Plano Logo

The AI-native proxy server and data plane for agentic apps.

Plano pulls out the rote plumbing work and decouples you from brittle framework abstractions, centralizing what shouldnt be bespoke in every codebase - like agent routing and orchestration, rich agentic signals and traces for continuous improvement, guardrail filters for safety and moderation, and smart LLM routing APIs for model agility. Use any language or AI framework, and deliver agents faster to production.

Quickstart GuideBuild Agentic Apps with PlanoDocumentationContact

CI Docker Image Build and Deploy Documentation

Star the repo if you found Plano useful — new releases and updates land here first.

Overview

Building agentic demos is easy. Shipping agentic applications safely, reliably, and repeatably to production is hard. After the thrill of a quick hack, you end up building the “hidden middleware” to reach production: routing logic to reach the right agent, guardrail hooks for safety and moderation, evaluation and observability glue for continuous learning, and model/provider quirks scattered across frameworks and application code.

Plano solves this by moving core delivery concerns into a unified, out-of-process dataplane.

Plano pulls rote plumbing out of your framework so you can stay focused on what matters most: the core product logic of your agentic applications. Plano is backed by industry-leading LLM research and built on Envoy by its core contributors, who built critical infrastructure at scale for modern worklaods.

High-Level Network Sequence Diagram: high-level network plano arcitecture for Plano

Jump to our docs to learn how you can use Plano to improve the speed, safety and obervability of your agentic applications.

Important

Plano and the Plano family of LLMs (like Plano-Orchestrator) are hosted free of charge in the US-central region to give you a great first-run developer experience of Plano. To scale and run in production, you can either run these LLMs locally or contact us on Discord for API keys.


Build Agentic Apps with Plano

Plano handles orchestration, model management, and observability as modular building blocks - letting you configure only what you need (edge proxying for agentic orchestration and guardrails, or LLM routing from your services, or both together) to fit cleanly into existing architectures. Below is a simple multi-agent travel agent built with Plano that showcases all three core capabilities

📁 Full working code: See demos/agent_orchestration/travel_agents/ for complete weather and flight agents you can run locally.

1. Define Your Agents in YAML

# config.yaml
version: v0.3.0

# What you declare: Agent URLs and natural language descriptions
# What you don't write: Intent classifiers, routing logic, model fallbacks, provider adapters, or tracing instrumentation

agents:
  - id: weather_agent
    url: http://localhost:10510
  - id: flight_agent
    url: http://localhost:10520

model_providers:
  - model: openai/gpt-4o
    access_key: $OPENAI_API_KEY
    default: true
  - model: anthropic/claude-3-5-sonnet
    access_key: $ANTHROPIC_API_KEY

listeners:
  - type: agent
    name: travel_assistant
    port: 8001
    router: plano_orchestrator_v1  # Powered by our 4B-parameter routing model. You can change this to different models
    agents:
      - id: weather_agent
        description: |
          Gets real-time weather and forecasts for any city worldwide.
          Handles: "What's the weather in Paris?", "Will it rain in Tokyo?"

      - id: flight_agent
        description: |
          Searches flights between airports with live status and schedules.
          Handles: "Flights from NYC to LA", "Show me flights to Seattle"

tracing:
  random_sampling: 100  # Auto-capture traces for evaluation

2. Write Simple Agent Code

Your agents are just HTTP servers that implement the OpenAI-compatible chat completions endpoint. Use any language or framework:

# weather_agent.py
from fastapi import FastAPI, Request
from fastapi.responses import StreamingResponse
from openai import AsyncOpenAI

app = FastAPI()

# Point to Plano's LLM gateway - it handles model routing for you
llm = AsyncOpenAI(base_url="http://localhost:12001/v1", api_key="EMPTY")

@app.post("/v1/chat/completions")
async def chat(request: Request):
    body = await request.json()
    messages = body.get("messages", [])
    days = 7

    # Your agent logic: fetch data, call APIs, run tools
    # See demos/agent_orchestration/travel_agents/ for the full implementation
    weather_data = await get_weather_data(request, messages, days)

    # Stream the response back through Plano
    async def generate():
        stream = await llm.chat.completions.create(
            model="openai/gpt-4o",
            messages=[{"role": "system", "content": f"Weather: {weather_data}"}, *messages],
            stream=True
        )
        async for chunk in stream:
            yield f"data: {chunk.model_dump_json()}\n\n"

    return StreamingResponse(generate(), media_type="text/event-stream")

3. Start Plano & Query Your Agents

Prerequisites: Follow the prerequisites guide to install Plano and set up your environment.

# Start Plano
planoai up config.yaml
...

# Query - Plano intelligently routes to both agents in a single conversation
curl http://localhost:8001/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4o",
    "messages": [
      {"role": "user", "content": "I want to travel from NYC to Paris next week. What is the weather like there, and can you find me some flights?"}
    ]
  }'
# → Plano routes to weather_agent for Paris weather ✓
# → Then routes to flight_agent for NYC → Paris flights ✓
# → Returns a complete travel plan with both weather info and flight options

4. Get Observability and Model Agility for Free

Every request is traced end-to-end with OpenTelemetry - no instrumentation code needed.

Atomatic Tracing

What You Didn't Have to Build

Infrastructure Concern Without Plano With Plano
Agent Orchestration Write intent classifier + routing logic Declare agent descriptions in YAML
Model Management Handle each provider's API quirks Unified LLM APIs with state management
Rich Tracing Instrument every service with OTEL Automatic end-to-end traces and logs
Learning Signals Build pipeline to capture/export spans Zero-code agentic signals
Adding Agents Update routing code, test, redeploy Add to config, restart

Why it's efficient: Plano uses purpose-built, lightweight LLMs (like our 4B-parameter orchestrator) instead of heavyweight frameworks or GPT-4 for routing - giving you production-grade routing at a fraction of the cost and latency.


Contact

To get in touch with us, please join our discord server. We actively monitor that and offer support there.

Getting Started

Ready to try Plano? Check out our comprehensive documentation:

Contribution

We would love feedback on our Roadmap and we welcome contributions to Plano! Whether you're fixing bugs, adding new features, improving documentation, or creating tutorials, your help is much appreciated. Please visit our Contribution Guide for more details

Star the repo if you found Plano useful — new releases and updates land here first.