-
Notifications
You must be signed in to change notification settings - Fork 0
Install
macOS and Linux. There is no Windows build — see Home.
Required. Without one of these nothing runs:
| what | why | check |
|---|---|---|
| node ≥ 22 | the daemon and both clients | node --version |
| tmux | the host's session is a tmux session | tmux -V |
| claude on PATH | the actual Claude Code CLI | claude --version |
Optional, each unlocking one thing:
| what | unlocks | without it |
|---|---|---|
ttyd |
--view, the read-only browser view |
the flag refuses at startup, with the reason |
cloudflared |
--tunnel |
the flag refuses at startup, with the reason |
tailscale |
--funnel (and the printed join line uses your tailnet IP) |
the flag refuses; LAN addresses are printed instead |
git |
/diff |
/diff says the cwd is not a git repository; /files still works |
pngpaste |
/paste is faster |
macOS falls back to osascript, which is built in |
A guest needs node, tmux is not required for them, and the claude CLI is not required
either — a guest only runs the client.
brew install roypadina/tap/claude-jamThat installs two commands: claude-jam (the real one) and jam (a deprecated alias
of it, kept so anything you already typed still works). Nothing in the tool prints jam.
Upgrading:
brew update && brew upgrade claude-jamgit clone https://github.com/roypadina/claude-jam
cd claude-jam
npm install
./claude-jam --helpThere is no build step. npm install pulls five runtime dependencies (ws, ink, react,
@inkjs/ui and ink-text-input) and nothing else. Run it as ./claude-jam … from the
checkout, or npm link to put both commands on your PATH.
claude-jam --helpExpected: a usage block whose first line is
usage: claude-jam (no arguments) the launcher menu: host, join,
and which lists claude-jam host, join, invite, invites, sessions, ls, end, kill,
clean and remote. It should never print a bare jam command — that is a lint in the
test suite.
claude-jam sessionsExpected on a machine with no jam running:
no jams — `claude-jam host` starts one, and this list only ever shows claude-jam's own sessions
That command is read-only and safe to run at any time; it enumerates only claude-jam's own
state directories ($TMPDIR/claude-jam-<port>), never tmux list-sessions.
The alias, if you want to confirm it:
jam --help # same output — it execs claude-jam| path | what | when it goes |
|---|---|---|
$TMPDIR/claude-jam-<port>/ |
the state dir, mode 0700: session.json, token.json, roster.json, the generated settings.json, system-prompt.txt, the outbox |
when the jam ends, or claude-jam clean
|
~/.config/claude-jam/history |
your own last 50 submissions per client (mode 0600) | never automatically — delete it yourself |
<cwd>/jam-uploads/ |
files guests uploaded (host side) | never automatically |
./jam-downloads/ |
files you took with /get (guest side) |
never automatically |
./jam-session-<id>.jsonl |
a transcript you took with /export
|
never automatically |
$XDG_CONFIG_HOME is honoured for the history file when it is set to an absolute path.
Nothing global is touched: the Claude Code hooks live in a generated settings.json passed with
--settings, and the tmux key binding lives on claude-jam's own tmux server (socket
claude-jam-<port>), not yours.
- Hosting a Jam · Joining a Jam
- Installing this from inside an agent: Agent-Install