Skip to content
Roy Padina edited this page Aug 30, 2026 · 7 revisions

claude-jam

Share one real, interactive Claude Code session with other humans on other machines.

The host keeps the native claude TUI — their own plugins, skills, MCP servers, CLAUDE.md, hooks and account. Everyone, host included, joins from a terminal client whose default view is that TUI, streamed live. The agent is told the session is shared and sees who wrote each message. Humans also get a side channel the agent never sees.

        Roy (host)            Dana                 Eli
        client  ─────┐        client ────┐         client ────┐
                     └──────── WS ───────┴─────────────┘
                                  │
                     host.mjs daemon ── types into ──▶ the real `claude` TUI
                                  └── capture-pane ──▶ the live view everyone watches

60 seconds

brew install roypadina/tap/claude-jam

# host: start a jam in this directory
claude-jam host --name Roy --cwd .

# host: mint a link for one person, and send it to them privately
claude-jam invite Dana

# Dana, on her machine: the link is her whole command
claude-jam join cjam1_eyJ2IjoxLCJqYW0i…

claude-jam with no arguments opens a launcher menu instead: Host a jam · Join a jam · My jams · End a jam. It prints the exact command line before it runs it, so the menu teaches the CLI rather than replacing it.

The command is claude-jam. jam is still installed as a deprecated alias of it.

Pages

page what it answers
Install brew and from-source, what has to be on PATH, and how to check the install worked
Agent-Install point an agent here. Numbered, non-interactive commands, what to verify after each, what needs a human, what must never be done, and a self-test
Hosting a Jam starting one, every flag, letting people in, ending it
Joining a Jam the guest's whole world: joining, the two views, every command, the keys
Remote Access LAN, Tailscale, --tunnel, --funnel, and what breaks over a long session
Files and Export /send, /paste, /get, /export, and resuming a transcript on your own machine
Security Model which gates are real, which are only instructions to the model, and what to assume
Peer Tasks the host's agent dispatching work to a guest's own Claude Code: the two switches, what a guest is agreeing to, how to say no, and the open compliance question
Architecture tmux + WebSocket + JSONL tail, the frame pipeline, the approval ladders, the hooks
Troubleshooting the failures people actually hit

Not built yet

If a page here does not describe something, assume it is not there:

  • Windows. Hosting is macOS and Linux only (through WSL2 on Windows). The platform seam exists — platform.mjs is the one module allowed to spawn a platform binary, and a test enforces that — and since v0.32 W1 the Windows client is implemented and CI-tested, though no human has run it.
  • Linux is built, and thinly proven — but less thinly than it was. A ubuntu-latest CI leg runs the unit suite and three real-entry-point checks on every push, including the state-directory privacy gate that only Linux can actually attack — and all of it has been run on real Linux (2026-08-30), green, with the takeover attempted as two genuinely different user accounts and correctly refused. What is still unproven there: hosting — the tmux, claude and terminal half got one attempt and reached about a third of it, so nobody has pressed F3 or watched claude's screen mirror on Linux — and whether the join/knock sounds are audibly distinguishable, since the choice of player and file is tested but nobody has heard one.
  • LAN discovery is macOS-only, and that is a decision rather than a gap. It needs Apple's dns-sd, which ships in /usr/bin on macOS and is not packaged for Linux or Windows. Do not install avahi-utils expecting it to help: measured 2026-08-30, it provides avahi-browse and avahi-publish-service and no dns-sd. The avahi-native path was deliberately not built (different output format, and no avahi anywhere on this project to verify a parser against), and Bonjour-for-Windows was deliberately not wired up (cheap to add, but it would be a claim nobody has ever seen work). Off macOS, hosting is unaffected — the jam simply does not announce — and claude-jam find refuses with the reason instead of reporting an empty network. Ask the host for an invite link, or join their ws:// address directly.

Five things that used to be on this list have since shipped, and each has a page: LAN discovery and named jams (claude-jam find, --jam-name), join/knock sounds (--no-sound, /sound), /nudge, auto-allowing uploads from an already-admitted guest (--uploads auto), and guest-side scrollback past the replayed history (PgUp, against the host's real pane).

Repo

https://github.com/roypadina/claude-jamREADME.md is the tour, MANUAL.md is what claude itself is given, AGENTS.md is for an agent changing the code, SPEC.md is the design record.

Clone this wiki locally