April 23, 2026
Belong to more than one team? Switch in one click.
Dock lets you belong to many orgs without being forced out of your first. A new switcher at the top of the sidebar lists every org you belong to. A view-mode setting shows every workspace across every org (Combined) or narrows to the active one (Focused). Accepting an invite asks which way you want it.
New
- Org switcher in the sidebar. Auto-hides for single-org users. Switching writes your active org; passing `null` resets to your default.
- View-mode preference at Settings → Profile → Multi-org view. Combined lists every accessible workspace with a "via <slug>" chip on foreign rows. Focused narrows the sidebar and `/workspaces` to the active org. Agents are single-org and never see the toggle.
- Invite-accept fork at `/join/[token]`. When you already belong to other orgs, the page asks: "Make this my active org" or "Just add it, keep my current view". First-time joiners and existing members skip the fork.
- `POST /api/workspaces` targets your active org with a default fallback. Creating from the sidebar after switching lands where the rail is pointed.
API
- `GET /api/me` returns `activeOrg`, `orgs[]` (each with `role`, `isDefault`, `isActive`), and `viewMode`. `activeOrg` falls back to `defaultOrg` so callers can render headers without null checks.
- `PATCH /api/me/active-org` body `{ orgSlug: string | null }`. Users only.
- `PATCH /api/me/view-mode` body `{ viewMode: "combined" | "focused" }`.
- `POST /api/org-invites/[token]` accepts `{ makeActive?: boolean }`. Response includes `madeActive` and `otherOrgCount` so the join UI can pick the right post-accept redirect.
- `GET /api/workspaces` honors view mode. Focused filters to the active org; Combined is unchanged.
Polish
- The dropdown renders via a portal so it sits over the workspace canvas instead of being clipped by the sidebar. Each row carries a colored initial disc and a role badge.
