- Browser can record entries (e.g. meter readings) into session.md/jsonl;
broadcast to other open clients. Log feed renders as text, not HTML.
- Page loads state.json on open instead of only localStorage, so a new
device (or one that missed the WS push) shows current content.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The LAN-bound HTTP server joined the raw URL path onto the project dir,
so /../../.ssh/id_ed25519 (and %2e%2e variants) served any file the
user could read. Resolve and require the path stay inside the project.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Add src/workbench/cli.py with subcommands: mcp (stdio transport), serve
(standalone project serving), list (show all projects). Remove legacy
server.py and scaffold.html from project root.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
MCP server (Python/aiohttp) that lets any AI CLI spin up interactive
hardware diagnostic web pages served over LAN with WebSocket live updates
and dual-format session logging (markdown + JSONL).
6 tools: scaffold, state, log, read_log, list, stop
Split-pane scaffold: diagnostic content + sethmux terminal iframe
CLI wrapper: ~/bin/workbench (serve, list, mcp, help)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>