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.com/
- 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
Metadata
Release files for runkite-runner 0.5.6
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| runkite_runner-0.5.6.tar.gz | 144.6 kB | Without provenance | Details for runkite_runner-0.5.6.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| runkite_runner-0.5.6-py3-none-any.whl | Python 3 | none | any | Details for runkite_runner-0.5.6-py3-none-any.whl |
Total release size: 237.0 kB
Release files / runkite_runner-0.5.6.tar.gz
| Download URL | runkite_runner-0.5.6.tar.gz |
|---|---|
| Size | 144.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ea053c8ac148879d57472d93f7fd480312e3de9870070a4b56d9adffc400e102
|
|
BLAKE2b-256 checksum How to use checksums |
953ec5549e56f8d91d24cbf6083aab254497a065df68b05e004e19c373cdfbe1
|
| 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.5.6-py3-none-any.whl
| Download URL | runkite_runner-0.5.6-py3-none-any.whl |
|---|---|
| Size | 92.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
963c82cf6cdc53352fd562cfcd0b866f1a210d4aed87bcf63c4a252f28b52694
|
|
BLAKE2b-256 checksum How to use checksums |
b6e1490ba9071fbce78bb673166e9bc5b086a015b13e24a84296c629a66f5ffe
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Security for runkite-runner 0.5.6
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.