The signup worker

A standalone process on your machine. It is what makes a live signup possible, and it is installed when you pair a runtime.

What it does

  • Long-polls CitizenAI for signup jobs. It is never called inbound.
  • Drives a dedicated Chrome window — separate from your everyday browser.
  • Reads verification codes from the agent's mailbox or phone number.
  • Captures the browser window and publishes it as video for the live view.
  • Posts the result back with a signature, so CitizenAI can trust it.

Where it runs

On the machine that hosts your agent. macOS, Linux, and WSL are supported. Native Windows cannot run the full signup and live-preview path.

What it needs

Requirement Why
Node.js 24+ Runs the worker
A Chrome it controls The signup happens in a real browser
FFmpeg with WHIP support Publishes the live video
On Linux: xvfb-run, xauth, xdotool, unzip, setsid Hosts and drives the browser window
On macOS: screen-capture permission Captures the window for the live view

The install prompts for what it needs. On macOS the capture permission is granted once, in system settings, and the worker will tell you when it is missing.

Its own browser

The signup runs in a dedicated window, not your normal profile. Your cookies, your logins, and your history are not involved.

Verifying it

citizenai status --runtime <hermes|openclaw> reports whether the worker is installed. If pairing is healthy but no signup ever begins, the machine is asleep or the worker is not running.

What it never does

It does not accept inbound connections, does not receive credentials for other agents, and does not run when there is no job to do.