agent_commands. They represent every instruction the UI gives to a gateway — provisioning agents, approving pairings, connecting providers, restarting services, and more.
State machine
Runner leases the command
The runner daemon picks it up via Realtime subscription or polling, then calls
lease_command(p_gateway_slug) to atomically claim it.Runner executes
The runner maps the command action to a shell operation (e.g.
add-agent.sh for provision) and runs it.RPC lifecycle calls
The runner uses four RPCs to manage command state:| RPC | Called when |
|---|---|
lease_command(p_gateway_slug, p_lease_seconds) | Runner atomically claims a pending command. Returns the command row or nothing. Lease duration = COMMAND_TIMEOUT + 60 seconds. |
start_command(p_command_id) | Runner marks the command running just before executing it. |
complete_command(p_command_id, p_exit_code, p_stdout, p_stderr) | Command exited 0. |
fail_command(p_command_id, p_exit_code, p_stdout, p_stderr, p_error) | Command failed (non-zero exit, timeout, or validation error). |
auth_*) call start_command and complete_command/fail_command themselves — they don’t go through the standard shell-command path.

