PRD: .pan/drafts/pan-658.md (rev 3), section Clients & join paths → CLI
Part of PAN-658 Shared Sessions v0, slice 9. PAN-658 itself delivers slice 1: the Cloudflare share service (services/share/, a Worker plus one Durable Object per room) and the signaling protocol types in @overdeck/contracts. This slice builds on it.
What
pan share <conversationId> prints the link and the join code.
pan join <link-or-code> signs in through the PAN-4330 device flow if needed, starts the local dashboard if it is not running, posts the join intent, and opens the shared route.
- Zero-install join (operator requirement, 2026-10-02):
npx @overdeck/core join <link-or-code> works on a machine that has never installed Overdeck (Node 22+, empty OVERDECK_HOME). npx already runs the published CLI without a global install (verified: npx -y @overdeck/core --version prints 0.64.0), so the work is making join succeed cold from the npx cache: first-run setup without projects, the dashboard started from the npx package directory, and no Herdr or tmux needed for a viewer.
- The share Worker invite page (
services/share/src/pages.ts invitePage) shows npx @overdeck/core join <CODE> as the no-install command, next to pan join <CODE> for installed users.
- Wrapper skills
pan-share and pan-join land in the same commit as the verbs (scripts/lint-skills.sh).
Depends on
PAN-4475 (viewer surface) and PAN-4330.
Acceptance (sketch)
- The device-code poll respects
slow_down (fake timers).
pan join starts the dashboard when it is down.
- The user lands in the lobby.
- Given a machine with Node 22 and no Overdeck (no global
pan, empty OVERDECK_HOME), when the user runs npx @overdeck/core join <code>, then the local dashboard starts and the user lands in the lobby.
GET /s/:code for an active room shows both pan join <CODE> and npx @overdeck/core join <CODE>.
PRD: .pan/drafts/pan-658.md (rev 3), section Clients & join paths → CLI
Part of PAN-658 Shared Sessions v0, slice 9. PAN-658 itself delivers slice 1: the Cloudflare share service (
services/share/, a Worker plus one Durable Object per room) and the signaling protocol types in@overdeck/contracts. This slice builds on it.What
pan share <conversationId>prints the link and the join code.pan join <link-or-code>signs in through the PAN-4330 device flow if needed, starts the local dashboard if it is not running, posts the join intent, and opens the shared route.npx @overdeck/core join <link-or-code>works on a machine that has never installed Overdeck (Node 22+, emptyOVERDECK_HOME). npx already runs the published CLI without a global install (verified:npx -y @overdeck/core --versionprints0.64.0), so the work is makingjoinsucceed cold from the npx cache: first-run setup without projects, the dashboard started from the npx package directory, and no Herdr or tmux needed for a viewer.services/share/src/pages.tsinvitePage) showsnpx @overdeck/core join <CODE>as the no-install command, next topan join <CODE>for installed users.pan-shareandpan-joinland in the same commit as the verbs (scripts/lint-skills.sh).Depends on
PAN-4475 (viewer surface) and PAN-4330.
Acceptance (sketch)
slow_down(fake timers).pan joinstarts the dashboard when it is down.pan, emptyOVERDECK_HOME), when the user runsnpx @overdeck/core join <code>, then the local dashboard starts and the user lands in the lobby.GET /s/:codefor an active room shows bothpan join <CODE>andnpx @overdeck/core join <CODE>.