ANSWERED

Q-13: Viable Remote Monitoring GUI

Status: ANSWERED Agent: codex/ext-agent Timestamp UTC: 2026-05-11T03:00:00Z Claim: CLAIMED 2026-05-11T02:55:00Z

Prior Answers Checked

Short Answer

Use Tailscale Serve + Python HTTP server as the immediate zero-install GUI. Generate a static HTML status page from agent state/wiki files. Add Forgejo (native) as Tier 2 when ready.

Tier Tool Install Resource Shows
1 (now) Tailscale Serve + Python HTTP + static status page 0 (already installed) ~20MB RAM Agent state, claims, research queue, logs
2 (later) Tailscale Serve + Forgejo native Extract binary from Docker ~50MB RAM Full repo browser, issues, commits, PRs
3 (optional) ttyd + tmux apt install tmux + ttyd binary ~30MB RAM Live agent panes in browser

All served over tailnet HTTPS — no port forwarding, no Docker, no public exposure.

Evidence

Environment Check (relik-pi4, 2026-05-11)

Tailscale Serve

Syntax: tailscale serve --bg <port> — serves any local HTTP server over tailnet HTTPS with a *.ts.net domain.

Example:

# Start Python HTTP server serving the LLM-wiki
cd /mnt/kitchen/from-house/workspace/d3-tui-pi-teams-proto/llm-wiki
python3 -m http.server 8080 --bind 127.0.0.1 &
tailscale serve --bg 8080
# Now accessible at https://relik-pi4.<tailnet>.ts.net/

No certificates to manage. No Docker needed. Built-in Tailscale auth controls who can access.

Python HTTP Server

Built-in. Zero install. Can serve: - Static HTML files (status dashboard) - Directory listings (browse wiki, logs, state files) - CGI scripts if needed

Single command: python3 -m http.server 8080

Static HTML Status Page

A simple Python script can generate index.html from: - /mnt/kitchen/from-house/state/agents/*/pi/ — agent state - /mnt/kitchen/from-house/workspace/d3-tui-pi-teams-proto/llm-wiki/wiki/research/research-queue.md — research progress - /mnt/kitchen/from-house/workspace/d3-tui-pi-teams-proto/llm-wiki/wiki/tasks/claim-board.md — active claims - /mnt/kitchen/from-house/hq/bus/ — inter-agent messages - docker ps output — container status - /mnt/kitchen/from-house/repos/d3-tui/ — git log

One script. Scheduled via cron or run on-demand. Output is a single HTML file.

Forgejo Native

Forgejo binary exists inside Docker image (codeberg.org/forgejo/forgejo:14.0.3), not on host. Can be extracted:

CID=$(docker create codeberg.org/forgejo/forgejo:14.0.3)
docker cp $CID:/usr/local/bin/forgejo /usr/local/bin/forgejo
docker rm $CID

Then run: forgejo web --config /mnt/kitchen/from-house/forgejo/app.ini Expose via: tailscale serve --bg 3001

Resource cost: ~50MB RAM for the Go process (estimate based on similar Go web servers).

ttyd

Single Go binary (~8MB). Shares any command's terminal in browser via WebSocket.

ttyd -p 7681 tmux attach
tailscale serve --bg 7681

Shows live agent panes, terminal output, interactive shell. Needs tmux installed first. More resource-intensive because each browser connection spawns a WebSocket.

Fit For This Pi Workcell

Risks / Failure Modes

  1. Tailscale service dependency: If Tailscale goes down, GUI is unreachable. But SSH would also be down in that case (tailnet-based).
  2. Python HTTP server is single-threaded: Fine for 1-2 concurrent viewers. Not for production scale. Acceptable for MVP.
  3. Static page staleness: Generated page shows snapshot, not live data. Mitigation: regenerate on cron (every 5 min) or on page load (CGI).
  4. Forgejo binary extraction: Docker must be running to create a container for extraction. One-time operation.
  5. Port conflicts: Must avoid ports already in use (22, 139, 445, 8642, 3000-3002 when Docker runs).

Decision Needed From Mehdi

  1. Deploy Tier 1 (Tailscale Serve + Python HTTP + static status page) now?
  2. Generate the static HTML generator script, or just serve the wiki directory as-is for browsing?
  3. Extract Forgejo binary for native running (Tier 2)?
  4. Install tmux for ttyd option (Tier 3)?

Next Probe

Deploy Tier 1: write a status page generator script, serve it with python3 -m http.server + tailscale serve --bg, verify the ts.net URL works from Mac browser.