plano/demos/use_cases/multi_agent_with_crewai_langchain
Adil Hafeez 1df43872a6
Fix code scanning and dependabot security alerts (#756)
* Fix code scanning and dependabot security alerts

Code scanning fixes (14 alerts):
- Fix XSS in OG image route by validating request origin against allowlist
- Fix incomplete URL sanitization in blog layout using exact hostname matching
- Bind port-check socket to 127.0.0.1 instead of 0.0.0.0
- Add explicit permissions to 7 GitHub Actions workflows

Dependabot fixes:
- Update @isaacs/brace-expansion 5.0.0 -> 5.0.1 (CVE-2026-25547)
- Update bytes 1.10.1 -> 1.11.1 (CVE-2026-25541)
- Update time 0.3.41 -> 0.3.47 (CVE-2026-25727)
- Update cryptography 45.0.7 -> 46.0.5 (CVE-2026-26007)
- Update python-multipart 0.0.20 -> 0.0.22 (CVE-2026-24486)
- Update urllib3 2.6.2 -> 2.6.3 in test lockfiles (CVE-2026-21441)
- Update Werkzeug 3.1.4 -> 3.1.5 (CVE-2026-21860)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Address PR review feedback

- Replace plano.katanemo.com with planoai.dev in allowed hosts
- Add planoai.dev to OG route and blog layout allowlists
- Revert socket bind to 0.0.0.0 (intentional for port-in-use check)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 12:27:07 -08:00
..
crewai demo: add multi-framework agent demo (#688) 2026-01-17 15:39:06 -08:00
langchain demo: add multi-framework agent demo (#688) 2026-01-17 15:39:06 -08:00
config.yaml Introduce brand new CLI experience with tracing and quickstart (#724) 2026-02-10 13:17:43 -08:00
docker-compose.yaml Rename all arch references to plano (#745) 2026-02-13 15:16:56 -08:00
Dockerfile Upgrade Python base images to 3.13.11 to fix CVE-2025-13836 (#751) 2026-02-13 14:44:16 -08:00
openai_protocol.py demo: add multi-framework agent demo (#688) 2026-01-17 15:39:06 -08:00
pyproject.toml demo: add multi-framework agent demo (#688) 2026-01-17 15:39:06 -08:00
README.md use standard tracing and logging in brightstaff (#721) 2026-02-09 13:33:27 -08:00
traces.png demo: add multi-framework agent demo (#688) 2026-01-17 15:39:06 -08:00
uv.lock Fix code scanning and dependabot security alerts (#756) 2026-02-14 12:27:07 -08:00

Travel Agents in CrewAI and LangChain - with Plano

What you'll see: A travel assistant that seamlessly combines flight booking (CrewAI) and weather forecasts (LangChain) in a single conversation - with unified routing, orchestration, moderation, and observability across both frameworks.

The Problem

Building multi-agent systems today forces developers to:

  • Pick one framework - can't mix CrewAI, LangChain, or custom agents easily
  • Write plumbing code - authentication, request routing, error handling
  • Rebuild for changes - want to swap frameworks? Start over
  • Limited observability - no unified view across different agent frameworks

Plano's Solution

Plano acts as a framework-agnostic proxy and data plane that:

  • Routes requests to the right agent(s), in the right order (CrewAI, LangChain, or custom)
  • Normalizes requests/responses across frameworks automatically
  • Provides unified authentication, tracing, and logs
  • Lets you mix and match frameworks without coupling, so that you can continue to innovate easily

How To Run

Prerequisites

  1. Install Plano CLI

    uv tool install planoai
    
  2. Set Environment Variables

    export OPENAI_API_KEY=your_key_here
    export AEROAPI_KEY=your_key_here  # Get your free API key at https://flightaware.com/aeroapi/
    

Start the Demo

# From the demo directory
cd demos/use_cases/multi_agent_with_crewai_langchain

# Build and start all services
docker-compose up -d

This starts:

  • Plano (ports 12000, 8001) - routing and orchestration
  • CrewAI Flight Agent (port 10520) - flight search
  • LangChain Weather Agent (port 10510) - weather forecasts
  • AnythingLLM (port 3001) - chat interface
  • Jaeger (port 16686) - distributed tracing

Try It Out

  1. Open the Chat Interface

  2. Ask Multi-Agent Questions

    "What's the weather in San Francisco and can you find flights from Seattle to San Francisco?"
    

    Plano automatically:

    • Routes the weather part to the LangChain agent
    • Routes the flight part to the CrewAI agent
    • Combines responses seamlessly
  3. View Distributed Traces

    Tracing Example

Architecture

┌──────────────┐
│ AnythingLLM  │ (Chat Interface)
└──────┬───────┘
       │
       v
┌─────────────┐
│    Plano    │ (Orchestration & DataPlane)
└──────┬──────┘
       │
       ├──────────────┬──────────────┐
       v              v              v
┌────────────┐ ┌────────────┐ ┌──────────┐
│  CrewAI    │ │ LangChain  │ │  Jaeger  │
│   Flight   │ │  Weather   │ │ (Traces) │
│   Agent    │ │   Agent    │ └──────────┘
└────────────┘ └────────────┘
       ├──────────────├
       v              v
┌─────────────┐
│    Plano    │ (Proxy LLM calls)
└──────┬──────┘

Travel Agents

Flight Agent

  • Framework: CrewAI
  • Capabilities: Flight search, itinerary planning
  • Tools: resolve_airport_code, search_flights
  • Data Source: FlightAware AeroAPI

Weather Agent

  • Framework: LangChain
  • Capabilities: Weather forecasts, conditions
  • Tools: get_weather_forecast
  • Data Source: Open-Meteo API

Cleanup

docker-compose down

Next Steps

  • Add your own agent - any framework, just expose the OpenAI-compatible endpoint
  • Custom routing - modify config.yaml to change agent selection logic
  • Production deployment - see Plano docs for scaling guidance

Learn More