Build

Framework matrix

Same control plane, many runners. The plane never assumes LangGraph, adapters share a generic worker loop and speak Runner Protocol.

What it is

Python LangGraph + TypeScript LangGraph.js are first-class. CrewAI, LlamaIndex, AutoGen, and plain LangChain ship as thin adapters under python/adapters/.

Why it is here

“Framework-agnostic” only counts if dispatch, cancel, HITL, and connectors work the same way for every runner kind, with honest gaps called out.

Support matrix

Capability LangGraph (Py) LangGraph.js CrewAI LlamaIndex AutoGen LangChain
Dispatch via planeYesYesYesYesYesYes
Cancel (WatchCancels)YesYes*YesYesYesYes
HITL interrupt / resumeYesYes*LimitedLimitedLimitedLimited
Opaque checkpoint proxyYesYesYes†YesYes†Yes†
Direct Postgres saverYesYes, , , ,
True --concurrency NYesYesSerialized per graphYesSerialized per graphYes
Isolated adapter venv, , YesYesYesShared
E2E in CI matrixYesHappy pathHappy pathHappy pathHappy pathYes

* TypeScript cancel/HITL verified live; matrix CI scenarios today lean on LangGraph-Python example agents. † CrewAI / AutoGen / LangChain restore a message transcript on the plane and fold prior turns into the next invoke (not a full framework-native memory graph). LlamaIndex restores chat_history natively. LangGraph keeps its own saver (direct Postgres or HTTP proxy). checkpoint_ref time-travel remains LangGraph-only.

How to implement

  1. LangGraph. runkite-runner (Py) or TS runner with langgraph.json.
  2. Adapters, install each adapter’s deps (isolated venv for CrewAI / LI / AutoGen), then PYTHONPATH=python:python/adapters and python -m crewai_adapter (etc.).
  3. Clients keep the same Agent Protocol shape: last human message in, AI message out.
  4. See Agents for register/run; Checkpoints for durable state (LangGraph + adapters).

In the product

Admin → Agents: registered ids across runner kinds
Runkite Admin Agents list

What to expect

Reference: docs/runners.md · Protocols