Capture stack · promptly + promptlyd

Set up in five minutes.

Ranked runs are measured by a small local daemon, not the browser. Install the promptly CLI once, pair this machine, and every level after that is three commands in your terminal.

100% local capturemacOS · Linux · WindowsSource on GitHub ↗

What you're installing

promptlythe CLI

The command you actually type. It pulls level workspaces, runs the public tests, streams live token usage, and submits ranked runs — and it starts and stops the daemon for you, so you never need a second terminal.

promptlydthe daemon

A localhost-only background process that meters your AI harness while a session is live — every prompt, every token, per turn. It binds to 127.0.0.1 and is never reachable from off your machine.

Everything is captured locally. The only thing that ever leaves your machine is a redacted, device-signed run that you explicitly submit.

Your devices

Approve, rename, or revoke a pairing.

The control panel for every machine on your account — confirm a promptly pair code, see each device's last-seen time, and cut off any machine in one click.

Open your devices

The path

Five steps, once.

  1. Install the CLI

    One line drops both binaries onto your PATH. Pick your platform — the command is identical on every machine you'll ever pair.
    curl -fsSL https://raw.githubusercontent.com/AidanHT/promptly-daemon/main/install.sh | sh

    Downloads the prebuilt promptly + promptlyd binaries for your platform and puts them on your PATH. No Rust toolchain needed.

    Already installed? promptly update upgrades both binaries in place whenever a new release ships.

  2. Pair this machine

    Pairing links the machine to your Promptly account with a 90-day device token, so ranked submissions are signed by hardware you've approved. You'll confirm a short code in the browser — then you're done here for three months.

    Run once per machine

    Prints a code and opens the approval page — or approve it manually under your devices. Revoke a pairing there any time.
    promptly pair
    Open your devices
  3. Start a level

    Pick any level from the catalog — its page shows these commands with the right slug filled in. One command fetches the starter workspace, launches the daemon, and starts the capture clock.

    The fast path

    Fetch + launch + capture in one step, then cd into the new folder and start solving.
    promptly play stage-1-01-lru-eviction-debug
    Prefer it step by step?
    promptly init stage-1-01-lru-eviction-debug
    cd stage-1-01-lru-eviction-debug
    promptly start

    init downloads the kit and starts the solve clock; start begins the captured session (the daemon launches automatically). stop pauses it, and a later start resumes without resetting your work.

  4. Solve with your harness

    Work exactly how you normally do — Claude Code, Cursor, Codex CLI, Copilot Chat. The daemon meters the session in the background while these three show you exactly where your score stands.
    promptly watch

    Live per-turn token usage and your projected score, as you prompt.

    promptly test

    Run the level's public tests locally before you spend a submission.

    promptly score

    The projected ranked score — same math as the server.

  5. Submit for ranking

    When the public tests pass, send it. The run is scored on tokens, turns, model cost, and execution speed against the hidden suite — results land on the level page and the leaderboards.

    End the attempt

    Redacts your transcript, packages the run, signs it with your device key, and uploads — after showing you the projected verification tier and asking you to confirm.
    promptly submit

Under the hood

How capture works.

Capture only counts between an explicit start and stop, and only inside the bound workspace — unrelated AI usage never inflates an attempt. Every run ranks; the verified badge is reserved for the one path that is authenticated and tamper-evident end to end.

  • Claude Code — OpenTelemetry

    The daemon runs a loopback OTLP receiver; Claude Code streams token counts, cost, and timing to it natively.

    Verified-eligible
  • Claude Code — session logs

    A watcher tails the local session JSONL as a fallback and cross-check for the OTEL stream.

    Ranks unverified
  • Cursor · Codex CLI · Copilot Chat

    Best-effort adapters read each tool's local logs, read-only. Counts are marked estimated.

    Ranks unverified

Verified needs OTEL-backed Claude Code capture, an online session, and your consent to a one-line telemetry bootstrap — promptly submit always shows the projected tier before you confirm.

If something's off

Troubleshooting.

Something feels off — where do I start?

promptly doctor diagnoses the whole chain: daemon reachability, OTEL wiring, the web app connection, the workspace manifest, and the language runtime. It prints exactly what's broken and how to fix it — run it before anything else.

Pairing fails or the code expires

Codes are single-use and short-lived — re-run promptly pair for a fresh one, and make sure you're signed in to the same account in the browser that approves it. Existing pairings are listed (and revocable) under your devices.

The HUD shows no tokens while I'm prompting

Capture only runs between promptly start and stop, inside the level's folder. Check promptlyd status says capturing, and that your harness is one of the captured sources above. Claude Code users: if you declined the telemetry bootstrap, the daemon falls back to session-log capture, which can lag a few seconds.

Keeping it up to date

promptly update swaps both binaries for the latest release (--check just reports). The CLI also prints a one-line notice when a newer version exists.

Removing everything

Revoke the pairing under your devices, run promptlyd uninstall if you registered it as a background service, and delete the two binaries plus ~/.promptly. Nothing else is touched.

Reference

Every command, one card each.

Play

promptly pair
link this device to your account (once)
promptly play <level>
fetch + launch + capture, in one step
promptly start / stop
begin or pause the captured session
promptly submit
device-signed ranked upload

Insight

promptly watch
live per-turn token usage
promptly test
run the public tests locally
promptly score
projected score, server parity
promptly doctor
diagnose the whole chain

Workspace

promptly init <level>
download the starter kit only
promptly restart
discard the attempt; re-fetch fresh
promptly reset
restore the canonical starter

Daemon & upkeep

promptly up / down
start / stop the daemon yourself
promptlyd status
connected · capturing · idle
promptly update
upgrade both binaries in place

promptly help prints the same overview in your terminal · full documentation ↗

Ready

You're all set.

Twenty levels across four stages, scored on how efficiently you prompt.