docs: README + CLAUDE.md updated for v0.2/v0.3 (cockpit, tmux, hooks, toolbar)
This commit is contained in:
27
README.md
27
README.md
@@ -6,6 +6,15 @@ Sessions survive disconnects: the shell (and whatever's running in it) keeps goi
|
||||
|
||||
> ⚠️ **This hands a full shell to anyone who can reach the port.** LAN-only, no authentication. **Never** port-forward or tunnel it to the public internet. See [Security](#security).
|
||||
|
||||
## Features
|
||||
|
||||
- **Multi-tab** — each tab is an independent shell session. Tabs auto-name to the current folder (double-click to rename), show a connection dot (🟢/🟡/🔴) and an unread-output dot, and can be drag-reordered. `+` opens a new tab in the active tab's directory.
|
||||
- **Claude Code cockpit** (with hooks, see below) — each tab shows Claude's status (⚙ working / ⏳ needs approval / ✓ idle), sends a browser notification when it needs you, and lets you **tap Approve / Reject** on a tool request with no typing.
|
||||
- **tmux keepalive** (optional) — run the shell inside tmux so sessions survive a server/host restart, not just a disconnect.
|
||||
- **Mobile + desktop shortcut bar** — one-tap Esc / Esc·Esc / ⇧Tab / arrows / Enter / ^C / ^O / ^T / ^B / Tab / `/` (the Claude Code keys a phone keyboard can't produce).
|
||||
- **Session keepalive + replay** — the PTY keeps running across disconnects; reconnect replays a ~2 MB scrollback ring buffer.
|
||||
- **Toolbar** — 🔍 scrollback search · ⚙ themes & font size · ▦ all-sessions dashboard · 📱 QR connect (scan to open on another device). Clickable links. Installable as a PWA.
|
||||
|
||||
## Requirements
|
||||
|
||||
- Node.js ≥ 18 (developed on v24)
|
||||
@@ -34,6 +43,23 @@ ipconfig getifaddr en0
|
||||
|
||||
For frontend development, run `npm run dev:web` (esbuild --watch) alongside `npm start`.
|
||||
|
||||
## Claude Code cockpit (optional)
|
||||
|
||||
To see Claude's status per tab and approve/reject tool calls from your phone, install the hooks once:
|
||||
|
||||
```bash
|
||||
npm run setup-hooks # adds http hooks to ~/.claude/settings.json (backs it up)
|
||||
# npm run setup-hooks -- --remove # to uninstall
|
||||
```
|
||||
|
||||
Then run `claude` inside a tab. The hooks POST to the server (loopback only) when Claude starts/stops/needs permission; the tab badge updates live, and a `PermissionRequest` shows an **Approve / Reject** bar. The hooks are a no-op outside web-terminal (they curl `$WEBTERM_HOOK_URL`, which is only set in spawned shells), so they're safe to leave installed.
|
||||
|
||||
**tmux keepalive** — run with `USE_TMUX=1` (or just have `tmux` on PATH; it auto-detects) to keep sessions alive across a server restart:
|
||||
|
||||
```bash
|
||||
USE_TMUX=1 npm start
|
||||
```
|
||||
|
||||
## Configuration
|
||||
|
||||
All via environment variables (no hardcoding):
|
||||
@@ -46,6 +72,7 @@ All via environment variables (no hardcoding):
|
||||
| `IDLE_TTL` | `86400` (s) | reclaim a detached session after this idle time |
|
||||
| `SCROLLBACK_BYTES` | `2097152` | per-session replay ring buffer (bytes) |
|
||||
| `MAX_PAYLOAD_BYTES` | `1048576` | max single WS frame |
|
||||
| `USE_TMUX` | `auto` | `1`/`0`/`auto` — run the shell inside tmux (keepalive across restart); `auto` = on if `tmux` is on PATH |
|
||||
| `ALLOWED_ORIGINS` | (derived) | extra allowed WS origins, comma-separated |
|
||||
|
||||
`allowedOrigins` is **derived from the host's network-interface IPs** (plus `localhost` and anything in `ALLOWED_ORIGINS`) — never from `BIND_HOST`, since `0.0.0.0` is never a real browser Origin.
|
||||
|
||||
Reference in New Issue
Block a user