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 connectagainst 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.
- CLI —
cmdop workspace switch <slug>updates the active workspace and reconnects the daemon. - Per-call override —
--workspace=<slug>flag on anycmdopcommand.
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.
Related
- Members — invite, remove, audit membership.
- Roles & permissions — what each role can do.
- Activity log — workspace audit trail.
- Workspace settings — policies, integrations, deletion.
- Concepts: workspaces
- Multi-workspace setup