terminal Terminal bridge

Drive a terminal from a zwip room

Run a program like Claude Code in a terminal and control it from a zwip room in any browser — type to send input, tap buttons to answer prompts, watch its output stream back. It's a small, dependency-free reference bridge you can read in full before running.

Not just your phone: it's for anywhere you don't have an SSH client — a locked-down work laptop, a borrowed or public computer, a Chromebook or tablet, a network that blocks SSH. If it can open a web page, it can drive your terminal.

warning
Read this before running anything. The bridge runs a program on your machine and types messages from the room into its terminal. In effect, anyone who can post to the room can type into your terminal — and can approve the program's actions. So:
  • Always password-protect the room and treat the password like an SSH key — the room code alone isn't enough for this.
  • Know the blast radius. The program can do anything your shell can. Running an agent in an auto-accept mode means a message can trigger actions with no confirmation — only do that in a throwaway VM/container.
  • Never run code you haven't read. The full source is below, served straight from this instance. Read it first.

How it works

devices zwip room

You type and tap in a normal zwip room in any browser — phone, tablet, or a locked-down laptop with no SSH. Nothing to install on that device.

sync_alt the bridge

A ~400-line Python script on your machine. Reads the room, injects keystrokes, posts output back.

terminal tmux + program

Your program (e.g. claude) runs in a tmux window the bridge drives.

Your messages become keystrokes; the program's output is posted back to the room. Numbered menus and permission prompts are relayed as tappable [[1]] / [[2]] quick-replies. It's the same idea as ccbot (which does this over Telegram), rebuilt on zwip's plain HTTP API — no accounts, no bot token.

See it in action

Set it up in a terminal on your machine (left), then drive it from the room in your browser (right) — including tapping a quick-reply. Looping demo.

your machine
boltzwip room · X7K9M2P

Quick start

1

Get the code

The bridge, the demo, and the zwip.py CLI live in the open-source zwip-bridge repo. Requirements: Python 3 and tmux. Nothing to pip install — it's all standard library.

git clone https://github.com/rcs1000/zwip-bridge.git
cd zwip-bridge

Run every command below from this directory. (Every file is also viewable straight from this site — see “Examine the code” further down.)

2

Create a room and lock it

# point at this instance (or your own)
export ZWIP_BASE=https://zwip.chat

python3 zwip.py create-room --name "session: demo"
python3 zwip.py password --room <CODE> --token <ADMIN> --password <PW>

create-room prints the code and a one-time admin_token — save the token; it's what authorises password / extend / destroy.

3

Try it safely first — bridge the demo assistant

No agent, no risk. Proves the loop before you point it at anything real.

python3 zwip_cc_bridge.py --room <CODE> --password <PW> \
    --cmd 'python3 demo_assistant.py'

Open the room URL, say hello, then type menu to get tappable choices.

4

…then drive a real Claude Code session

python3 zwip_cc_bridge.py --room <CODE> --password <PW> \
    --cmd claude --output claude

--output claude reads Claude's session transcript for clean output (assistant text, tool summaries, questions as quick-replies) and relays permission prompts so you can approve them by tapping.

Examine the code before running it

The bridge and the demo are shown below, served straight from this instance — the same bytes you'd run. Read them here or open the raw file. The full repo (including the zwip.py CLI) is on GitHub: github.com/rcs1000/zwip-bridge. Don't run code you haven't looked at.

Loading…

Learn more

Full usage, the flag reference and the command contract are in the zwip-bridge README. The underlying HTTP API and the zwip.py CLI it composes are documented on the API page.