Skip to Content

Workspaces

A workspace is a logical tenant in CMDOP — it owns machines, members, API keys, billing, and a default permission policy. The cabinet is the canonical place to administer workspaces; you operate against them from desktop and CLI.

Primary surface is desktop and CLI. Inviting members and editing roles happen here. Driving the machines those members share happens in ../../desktop/machines-tab or ../../cli/connect.

What a workspace contains

Each workspace bundles:

  • Machines registered via cmdop connect against a workspace API key or OAuth token.
  • Members with a role (Owner / Admin / Member / Viewer).
  • API keys that are workspace-scoped, long-lived, and ideal for CI.
  • Billing profile — plan, seats, payment methods, usage and quotas.
  • Activity log of admin events.
  • Default permission policy for new machines.

Personal vs team workspaces

Every account has a personal workspace; team workspaces add seat-based billing and shared machine ownership. You can belong to several workspaces at once and switch between them per call (--workspace=X) or by setting an active default.

Switching workspaces

There are three ways to change workspace context:

  • Cabinet switcher — top-left dropdown; affects only the cabinet UI.
  • CLIcmdop workspace switch <slug> updates the active workspace and reconnects the daemon.
  • Per-call override--workspace=<slug> flag on any cmdop command.

Tokens are split per workspace plus mode (token_prod.json / token_dev.json) so switching does not invalidate the others. See Concepts: workspaces for the resolver order.

Creating a workspace

Owners create workspaces from the cabinet. Slugs must be globally unique; the chosen plan determines billing immediately. The first member is automatically the workspace Owner.

Cross-workspace machine migration

A machine belongs to exactly one workspace at a time. Move it via the CLI (cmdop connect workspace move ...); the cabinet displays the migration as an event in the activity log but does not provide a button. This keeps the move auditable and the workspace dashboard honest.

Operating against machines is workspace-scoped. Check the workspace selector before running commands from any surface — the desktop and CLI obey the same scoping rules.

Where this data lives

The workspace surface is backed by the Django workspaces app (apps/workspaces/urls.py). Live updates land via Centrifugo channels.

Last updated on