default, at ~/.oneshot-gtm, on port 3030. A second product needs a second workspace with its own profile, keys, identities and dashboard port:
How a command picks its workspace
The most explicit choice wins.--workspace wins, then ONESHOT_GTM_WORKSPACE, then the registry default. An explicit ONESHOT_GTM_HOME overrides all three as an escape hatch. workspace path <name> prints a workspace’s home for scripts: ONESHOT_GTM_HOME=$(oneshot-gtm workspace path acme) ….
What stays shared
Workspaces share one database,~/.oneshot-gtm-shared/shared.sqlite, so two products do not trip over the same person. It holds people, paid lookups, contact history, and the LinkedIn account with its invite share and suppression list. A person researched for one product is not bought again for another, and a profile one workspace invited is not invited by another.
A workspace does not first-touch someone another workspace emailed in the last 7 days. The draft is flagged contacted-elsewhere, Cadences shows the step as held, and a batch skips it. You can override on a single manual send.
A reject is permanent inside its workspace. To hand a person to another product, use move → on the queue row: the research travels, and the destination derives its own edge and verdict.
doctor warns when two workspaces share a sending domain (caps are counted per workspace, so the domain’s real daily volume doubles) or a Gmail account (each workspace would see both products’ replies).
In the dashboard
A masthead chip shows the workspace name and port; each name gets a stable colour. Clicking the chip, or⌘K → Workspaces, lists every registered workspace with a live status dot. Running workspaces open in a new tab; stopped ones start and then open. The status dots show what is running. If a launch doesn’t come up within 15s, the dashboard shows a copyable --workspace <name> ui command instead.