Runners & queues

Studio persists your workspaces and jobs in Firebase. A runner is a process that authenticates to our cloud API (https://cloud.xenonflare.com), calls leaseWorkspaceJob, loads context, runs your model, then posts results with completeWorkspaceJob or failWorkspaceJob. The dashboard never sends your OpenAI key to us — the worker holds provider credentials on your side.

Two job targets

  • Global pool — pending jobs with target: "global". Any runner credentials registered as kind: "global" (usually operated by us or trusted capacity) may lease them. Customers normally use this without creating their own keys.
  • Private (user) — pending jobs with target: "user" for your user id. Only runner instances you create under Settings → Runners (kind user) dequeue these. Use for workloads that must stay on hardware you control.

Plans & daily limits (UTC)

Queued workspace messages count against separate caps for jobs sent to the global pool vs jobs targeted to your private runners. Private-runner targets have higher caps because you bear model inference cost — see Pricing / Terms.

Typical worker loop

  1. POST .../leaseWorkspaceJob with header Authorization: Bearer <Runner API key> (format credentialId.secret) until leased: true or backoff when the queue is empty.
  2. POST .../getWorkspaceRunnerContext with the leased workspaceId.
  3. Optionally call heartbeatWorkspaceJob during long model runs so the lease does not expire.
  4. Optionally call updateWorkspaceRunnerSummary when compressing prior chat into a summary span.
  5. Call completeWorkspaceJob with files, charts, tables, lists, checklists, SVGs, and the final assistant message (see Deliverables), or failWorkspaceJob on error.

Default queue for new work

Accounts default to the global target unless you change default processing queue under Settings. Each workspace stores its own jobTarget; you can override in the composer or workspace settings.

Creating and rotating keys

In Settings → Runners, Add runner mints a new instance and shows a one-time runner API key (the same value as runnerToken in the API). Put it in your environment as configured in the open-source README. This key is only for the worker — not your Studio sign-in. Revoking removes the key immediately; create another instance for a replacement.

Global runner instances (operators)

Creating kind: "global" via the API requires an admins/<yourUid> document in Firestore. Normal customers only use user keys and the shared pool from the product UI.

Runner HTTP reference (paths + bodies) →