runkite-runner
Python runner for Runkite — a self-hosted Agent Protocol control plane.
This package is the process that does the work: it connects to a Runkite
control plane over gRPC, claims jobs, loads your agent from langgraph.json,
executes it (LangGraph by default), and streams events, heartbeats, and terminal
status back so clients see live SSE / WebSocket progress in the Admin UI.
Client / SDK ──HTTP/SSE──► Runkite control plane (Go)
│ gRPC Runner Protocol
▼
runkite-runner (this package)
│
your LangGraph agent
| PyPI | pip install runkite-runner |
| CLI | runkite-runner · python -m runkite_runner |
| Companion (TS) | runkite-runner on npm |
| Control plane | GitHub Releases · ghcr.io/getrunkite/runkite |
| Docs | Runners · Quick start · Site |
| License | BUSL-1.1 |
Why a separate runner?
Runkite keeps the control plane framework-agnostic (auth, threads, runs, queues, Admin UI). Framework-specific execution lives in a runner so you can scale workers independently, mix Python and TypeScript agents on one plane, and upgrade LangGraph without redeploying the Go binary.
Install
pip install runkite-runner
Requires Python 3.11+. Pulls in LangGraph, gRPC, checkpoint Postgres support,
httpx, uvicorn, and OpenTelemetry exporters (see pyproject.toml).
Quick start
1. Control plane (pick one):
# Docker
docker pull ghcr.io/getrunkite/runkite:latest
docker run --rm -p 2026:2026 -p 50051:50051 \
-e RUNKITE_ALLOW_INSECURE_SERVE=1 \
ghcr.io/getrunkite/runkite:latest \
dev --config /app/examples/echo_agent/langgraph.json
# or binary from https://github.com/getrunkite/runkite/releases
2. Runner (this package):
runkite-runner \
--config path/to/langgraph.json \
--grpc-address 127.0.0.1:50051 \
--http-address http://127.0.0.1:2026
3. Admin UI: http://127.0.0.1:2026/admin/
Minimal langgraph.json:
{
"graphs": {
"echo_agent": "./graph.py:graph"
},
"dependencies": ["."]
}
Examples live in the Runkite repo
(echo_agent, react_agent, approval_agent, …).
Features
- LangGraph graphs with streaming chunks, cancel, and HITL interrupt/resume
- Durable checkpoints via
AsyncPostgresSaverwhenPOSTGRES_DSNis set; otherwise in-processMemorySaver(fine for local demos) - Store / vector dual-mode against the control plane’s APIs
- Concurrency —
--concurrency N/RUNKITE_CONCURRENCYfor overlapping I/O-bound jobs - OpenTelemetry —
runkite.runspan under the control planetraceparent, plus thinrunkite.llm/runkite.toolchildren when OTLP env is set - Production auth — runner kind tokens (
RUNNER_TOKEN/RUNNER_TOKEN_*) matching control-plane config
Framework adapters (same repo, not separate PyPI packages yet)
CrewAI, LlamaIndex, AutoGen, and plain LangChain runners live under
python/adapters/ in the Runkite source tree and share
runkite_runner.generic_worker. Install those from a clone with an isolated venv
when you need them — see docs/runners.md.
Configuration
| Flag / env | Purpose |
|---|---|
--config |
Path to langgraph.json |
--grpc-address |
Control plane gRPC (default from env / localhost) |
--http-address |
Control plane HTTP for store/proxy helpers |
--concurrency / RUNKITE_CONCURRENCY |
Max in-flight jobs (default 1) |
POSTGRES_DSN |
Direct-mode checkpoints + store pool |
RUNNER_TOKEN |
Shared secret presented on gRPC / /internal/* |
OTEL_EXPORTER_OTLP_* |
Enable tracing export (same contract as the control plane) |
LOG_LEVEL / LOG_FORMAT |
Logging (info, debug, … · text / json) |
Related artifacts
| Artifact | Install |
|---|---|
| Control plane binary | GitHub Releases |
| Control plane image | docker pull ghcr.io/getrunkite/runkite:latest |
| Python runner image | docker pull ghcr.io/getrunkite/runkite-runner:latest |
| TypeScript runner | npm install -g runkite-runner |
| Helm | deploy/helm/runkite |
Links
- Homepage: https://getrunkite.github.io/runkite/
- Source: https://github.com/getrunkite/runkite/tree/main/python
- Issues: https://github.com/getrunkite/runkite/issues
- Changelog: https://github.com/getrunkite/runkite/blob/main/CHANGELOG.md
- Known limitations: https://github.com/getrunkite/runkite/blob/main/docs/limitations.md
- Security: https://github.com/getrunkite/runkite/blob/main/SECURITY.md
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file runkite_runner-0.2.0.tar.gz.
File metadata
- Download URL: runkite_runner-0.2.0.tar.gz
- Upload date:
- Size: 107.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
300f2ea04a4da0a3c16af12eb699959e71861b7a2d10b5a3bd1237ea2f618a85
|
|
| MD5 |
3285494fcf606e1e6b8c9f0e1c8da060
|
|
| BLAKE2b-256 |
83cce0c387a8e50574b4b561481a1e3738ace282b499c6ae705c097e1cbf3ab5
|
File details
Details for the file runkite_runner-0.2.0-py3-none-any.whl.
File metadata
- Download URL: runkite_runner-0.2.0-py3-none-any.whl
- Upload date:
- Size: 74.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5af1d374ff5b3005e9d8ef49d0801620a0fd908b82dc0e7f5b4d41002272d659
|
|
| MD5 |
9cce71d1550318374ca60075d9ceda43
|
|
| BLAKE2b-256 |
e628311a61f48e58f6f3dd5035494ca20f084b50187212a85a6f497b40307fe5
|