Compose → refund → Pending

Public Admin first. Cause a hold, approve it, screenshot the audit row.

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. Fake bank MCP. Admin opens with no login (auth off).

02

Refund $500

Try agent → pending_agent. The plane holds the call.

03

Pending

Admin → Pending. Approve. Same arguments only; a different amount is a new row.

04

Audit

The audit row is the screenshot. Send the same amount again to finish the fake refund.

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 plus a fake bank MCP. First build takes a few minutes. SQLite is enough for Pending.

2. Refund that needs a human

Fastest: Admin → Try agent → pending_agent → send Refund $500 to the vendor. Then Admin → Pending → approve. Or curl:

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":"pending_agent","input":{"messages":[{"role":"user","content":"Refund $500 to the vendor"}]}}' \
  | python3 -m json.tool
# Admin → Pending → approve, then send the same amount on a new run.

Expect a message that the plane held the refund, and a row in Pending. This is connector policy, not command.resume. Echo still works as a smoke test: agent_id echo_agent.

What you should have seen

Next steps

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