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, and uvicorn (see pyproject.toml). Tracing is optional:
pip install 'runkite-runner[otel]'
Without the extra, the runner still starts; OTEL_* env vars log once and stay no-op until the packages are installed.
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
Release files for runkite-runner 0.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| runkite_runner-0.3.0.tar.gz | 138.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| runkite_runner-0.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 229.6 kB
Release files / runkite_runner-0.3.0.tar.gz
| Download URL | runkite_runner-0.3.0.tar.gz |
|---|---|
| Size | 138.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5690ff0db9df1a185fd4a6a642da9f91b4667b9d990fb7527d3f62ee9509bedf
|
|
BLAKE2b-256 checksum How to use checksums |
14778eea21031d538ec79eb663d729ff6d0f911213de1168587ef39a3b0c8c95
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / runkite_runner-0.3.0-py3-none-any.whl
| Download URL | runkite_runner-0.3.0-py3-none-any.whl |
|---|---|
| Size | 91.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a0a02a472b55dc6f2c4b80422c21e287ba6555f543bff454c34d054fc27a3d66
|
|
BLAKE2b-256 checksum How to use checksums |
7d732e256c6e4b31f12944c9e88e6b220e3fa8a13e92f96aff5579343817c464
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|