Compose → echo → HITL

Public Admin first. Your agents run on your infra (Compose, Helm, Kubernetes).

Live sandbox: getrunkite.com/admin is a running Runkite process (Postgres, Redis, runners), not a mock. Shared key is on the product page. Fake agents only. Compose below is a local replica, not the production shape. Production: Install.

01

Compose is up

Plane on :2026. Runner waiting. Admin opens with no login (auth off).

02

Echo agent

POST a run. Wait. See the echoed message.

03

HITL interrupt

approval_agent pauses — status interrupted.

04

You approve

Resume with {"command":{"resume":true}}. Run completes.

What you’ll see in Admin — Overview after Try compose is up
Runkite Admin Overview during local Try

1. Bring the plane up

git clone https://github.com/getrunkite/runkite && cd runkite
docker compose -f docker-compose.dev.yml up -d --build
curl -sf http://localhost:2026/readyz && echo OK
# Admin → http://localhost:2026/admin/

Dev compose is SQLite + in-memory transport — no Postgres/Redis required. First build takes a few minutes.

2. Echo

BASE=http://localhost:2026
THREAD=$(curl -sf -X POST "$BASE/threads" -H 'Content-Type: application/json' -d '{}' \
  | python3 -c 'import json,sys; print(json.load(sys.stdin)["thread_id"])')
curl -sf -X POST "$BASE/threads/$THREAD/runs/wait" \
  -H 'Content-Type: application/json' \
  -d '{"agent_id":"echo_agent","input":{"messages":[{"role":"user","content":"Hello, Runkite!"}]}}' \
  | python3 -m json.tool

Expect status: success and an AI message that echoes your string.

3. HITL interrupt + resume

Use a new thread — do not reuse the echo thread id.

THREAD=$(curl -sf -X POST "$BASE/threads" -H 'Content-Type: application/json' -d '{}' \
  | python3 -c 'import json,sys; print(json.load(sys.stdin)["thread_id"])')
# Stream until you see interrupted, then Ctrl-C
curl -sf -N -X POST "$BASE/threads/$THREAD/runs/stream" \
  -H 'Content-Type: application/json' \
  -d '{"agent_id":"approval_agent","input":{"messages":[{"role":"user","content":"send the email"}]}}'

# Resume
curl -sf -X POST "$BASE/threads/$THREAD/runs/wait" \
  -H 'Content-Type: application/json' \
  -d '{"agent_id":"approval_agent","command":{"resume":true}}' \
  | python3 -m json.tool

What you should have seen

Next steps

Longer walkthrough: docs/quickstart.md · Product: landing