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 LangGraph, 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_DSNpoints at the control plane's Postgres database; otherwise via the HTTP checkpoint proxy when an HTTP address is configured.MemorySaveris the ephemeral fallback when neither is available. An explicitly blankRUNKITE_HTTP_URLselects that local fallback. - 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 from a checkout
The published Python package and its CLI run LangGraph. CrewAI, LlamaIndex,
AutoGen and plain LangChain adapters live under python/adapters/ in the source
tree and share runkite_runner.generic_worker. They are not included by
pip install runkite-runner and are not separate PyPI packages. Install the
chosen adapter from a clone with its isolated dependencies. See
docs/runners.md.
The managed Vercel AI SDK runner in the working tree is a TypeScript backend,
not a Python CLI mode, and requires an updated checkout build until released.
Microsoft Agent Framework currently has checkout-only function governance
middleware in python/runkite_governance, not a managed runner. That helper
keeps the model loop and pending continuation in the app and creates no Runkite
thread or run. See the
SDK integration guide.
Configuration
| Flag / env | Purpose |
|---|---|
--config |
Path to langgraph.json |
--grpc-address |
Control plane gRPC (default from env / localhost) |
--http-address / RUNKITE_HTTP_URL |
Control plane HTTP for checkpoint/store/connector 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.8
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.8.tar.gz | 150.3 kB | Without provenance | Details for runkite_runner-0.5.8.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| runkite_runner-0.5.8-py3-none-any.whl | Python 3 | none | any | Details for runkite_runner-0.5.8-py3-none-any.whl |
Total release size: 243.5 kB
Release files / runkite_runner-0.5.8.tar.gz
| Download URL | runkite_runner-0.5.8.tar.gz |
|---|---|
| Size | 150.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0e2193749b5aada4483cfe9da1aa322dd471c33b5408f76bc40d1fae27b51167
|
|
BLAKE2b-256 checksum How to use checksums |
f6a35f8f3b04cfe06d02178f5e08134f94a8c226e7dfdff1fde1659b5e1fb8bd
|
| 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.8-py3-none-any.whl
| Download URL | runkite_runner-0.5.8-py3-none-any.whl |
|---|---|
| Size | 93.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d508226288f58b0ccd7ae1895e403545c41a5a15d559e15ec50b7a9e917f887a
|
|
BLAKE2b-256 checksum How to use checksums |
28b3a63da50bb03cd9e982d0ef347fec848f67221d16042db4448ddd021b0405
|
| 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.8
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.