From d79b4ee07ac97374fd599af4e1a9d708f7aa378a Mon Sep 17 00:00:00 2001 From: Sam Rolfe Date: Fri, 31 Jul 2026 07:44:15 +1000 Subject: [PATCH] sam-4screen-desktop 2026-7-31:7:44:15 --- .../350 AI/Pi Agent Extensions & Skills.md | 85 +++++++++ .../Docker Containers.md | 1 + .../Home Network Map Overview.md | 172 +++++++++++++++++- 3 files changed, 254 insertions(+), 4 deletions(-) diff --git a/300 areas/350 AI/Pi Agent Extensions & Skills.md b/300 areas/350 AI/Pi Agent Extensions & Skills.md index cb387a0..bc28ac3 100644 --- a/300 areas/350 AI/Pi Agent Extensions & Skills.md +++ b/300 areas/350 AI/Pi Agent Extensions & Skills.md @@ -384,6 +384,91 @@ Paper: [arXiv:2603.27277](https://arxiv.org/abs/2603.27277) --- +## Pi Dashboard + +A multi-component system for live agent visibility across all machines. Built in this conversation (Jul 2026). + +### Architecture + +``` +pi sessions (each machine) + └─ dashboard.ts extension ── writes ──► ~/.pi/agent/dashboard/.json + │ + pi-dashboard (Go TUI) + reads all state files + │ + Enter → tmux attach d → Hunk diff + Tab → Tuxedo tasks q → quit +``` + +| Component | Type | Purpose | +|-----------|------|---------| +| **dashboard.ts** | pi extension (`~/.pi/agent/extensions/`) | Listens to `agent_start`/`agent_end`/`tool_call`, writes JSON state files, tracks tasks via todo.txt, sends NTFY/Apprise notifications | +| **pi-dashboard** | Go binary (`~/.local/bin/pi-dashboard`) | Bubble Tea TUI. Reads state files from all machines (local + SSH pull). Renders agent table with keyboard controls | +| **Tuxedo** | Companion TUI (Rust binary, `tuxedo`) | todo.txt task manager. The dashboard extension writes tasks to `~/.pi/agent/dashboard/tasks/todo.txt` in standard todo.txt format, Tuxedo reads it natively with vim keys, phone capture QR, project/context filters | +| **Hunk** | Companion TUI (Node CL | npx hunk) | Review-first terminal diff viewer for agent-authored changesets. Triggered from dashboard with `d` key. Supports split/stack/responsive layouts, inline AI annotations, watch mode, Git/jj/Sapling | + +### dashboard.ts extension + +- **Location:** `~/.pi/agent/extensions/dashboard.ts` +- **Events:** `agent_start` (status→running), `agent_end` (status→completed, send notification), `tool_call` (track last tool, count) +- **Tasks:** Registers tools `register_task`, `complete_task`, `list_tasks` — writes to todo.txt +- **Notifications:** Calls NTFY (`$PI_NTFY_TOPIC`) and Apprise on agent completion and blocked state +- **State files:** `~/.pi/agent/dashboard/.json` (atomic writes) +- **Session naming:** Derives from tmux session name when in tmux, otherwise working directory basename + +### pi-dashboard TUI viewer + +- **Location:** `~/src/pi-dashboard/` (Go module), `~/.local/bin/pi-dashboard` (binary) +- **Built with:** Go + Bubble Tea v2 +- **Reads:** Local `~/.pi/agent/dashboard/*.json` + SSH pull from remote machines +- **Config:** `~/.config/pi-dashboard.yaml` + +| Key | Action | +|-----|--------| +| `↑↓` | Select agent | +| `Enter` | `tmux attach -t ` (local) or `ssh -t user@host tmux attach` (remote) | +| `d` | Open Hunk diff in agent's worktree | +| `Tab` | Launch Tuxedo with task todo.txt | +| `r` | Force refresh | +| `q` | Quit | + +### Cross-machine config (`~/.config/pi-dashboard.yaml`) + +```yaml +poll_interval: 2s +local: + path: /home/sam/.pi/agent/dashboard/ +remote: + - host: 192.168.20.13 + user: sam + path: /home/sam/.pi/agent/dashboard/ + - host: 192.168.20.51 + user: sam + path: /home/sam/.pi/agent/dashboard/ +``` + +### Deployment + +The extension deploys via Gitea (in `pi-config`) or manually placed in `~/.pi/agent/extensions/`. The Go binary is built from source and scp'd to remote machines. + +### Tuxedo + +- **Site:** https://github.com/webstonehq/tuxedo +- **Install:** Built from source via nix +- **Format:** Standard todo.txt — `~/.pi/agent/dashboard/tasks/todo.txt` +- **Phone capture:** Press `s` for QR code pointing at LAN PWA — type tasks from phone +- **Vim keys:** `j/k`, `dd`, `gg/G`, `u` (undo, 50 levels) + +### Hunk + +- **Site:** https://github.com/modem-dev/hunk +- **Install:** `npm i -g hunkdiff` (also available in nixpkgs) +- **Usage:** `hunk diff --watch` (live review), `hunk show` (review last commit) +- **Features:** Multi-file review with sidebar, inline AI annotations, split/stack/responsive layouts, watch mode for auto-reloading + +--- + ## engram + gentle-engram engram v1.16.1 runs on nixos-desktop (.13) at `~/.local/bin/engram`. Systemd user service auto-starts. Binds `127.0.0.1:7437`, accessed via SSH tunnel: `ssh -fNL 7437:127.0.0.1:7437 192.168.20.13`. diff --git a/300 areas/360 Dev-Ops Network Computers/Docker Containers.md b/300 areas/360 Dev-Ops Network Computers/Docker Containers.md index 6ddf70e..a77ec2a 100644 --- a/300 areas/360 Dev-Ops Network Computers/Docker Containers.md +++ b/300 areas/360 Dev-Ops Network Computers/Docker Containers.md @@ -39,6 +39,7 @@ id: 1778553013-ARYX - **n8n_data** — Workflow automation (n8n) - **t3_stack_react** — T3 stack React app - **sams-home-network** — Home network management app +- **worldmonitor** — Geopolitical news & 3D globe dashboard. Next.js app, Redis cache, ais-relay. Port 3002. LLM features route through OmniRoute. ### `/home/sam/deployment/ai-resume/` - **knowledge-service** — AI knowledge service (ChromaDB-backed) diff --git a/300 areas/360 Dev-Ops Network Computers/Home Network Map Overview.md b/300 areas/360 Dev-Ops Network Computers/Home Network Map Overview.md index 7510d77..c3afb97 100644 --- a/300 areas/360 Dev-Ops Network Computers/Home Network Map Overview.md +++ b/300 areas/360 Dev-Ops Network Computers/Home Network Map Overview.md @@ -1,10 +1,174 @@ --- -created: 2026-07-31 07:26 -modified: 2026-07-31 07:26 +created: 2026-07-30 +modified: 2026-07-30 type: note -tags: [] +tags: + - network + - dev-ops aliases: [] --- -# [[Home Network Map Overview]] +# Home Network Map +## Overview + +| Network | Router/Gateway | +|---------|---------------| +| Subnet | `192.168.20.0/24` | +| Gateway | `192.168.20.1` | +| DNS | Pi-hole on .13 (primary) + .35 (secondary) | + +--- + +## Machines + +### .27 — sam-4screen-desktop (Main Desktop) + +| Property | Value | +|----------|-------| +| **IP** | `192.168.20.27` | +| **Hostname** | `sam-4screen-desktop` | +| **OS** | NixOS | +| **SSH** | ✅ `sam@192.168.20.27` | +| **Tailscale** | ✅ Installed, service enabled | +| **Role** | Daily driver. 4 monitors, 62GB RAM, Nvidia GPU. Zellij, Neovim, pi coding agent. | +| **Key services** | pi, pi-dashboard, Neovim, Zellij (with falcode + attention plugins), Home Manager managed | + +### .13 — nixos-desktop (Server) + +| Property | Value | +|----------|-------| +| **IP** | `192.168.20.13` | +| **Hostname** | `nixos-desktop` | +| **OS** | NixOS | +| **SSH** | ✅ `sam@192.168.20.13` | +| **Tailscale** | ✅ `services.tailscale.enable = true;` | +| **Role** | Docker host, OmniRoute LLM proxy, always-on server. 15.5GB RAM. | + +| Docker containers | | +|---|---| +| **OmniRoute** | LLM proxy with combo routing (port 20128/20129) | +| **worldmonitor** | Geopolitical news dashboard (port 3002) | +| **mosquitto** | MQTT broker | +| **pihole** | DNS ad-blocking (primary) | +| **nebula-sync** | Pi-hole Gravity sync | +| **headroom** | Context compression proxy (port 8787) | +| **engram** | Journaling service (port 7437) | +| **n8n** | Workflow automation | +| **voice_bridge + voice_whisper** | MQTT audio bridge | +| **piper_tts** | Text-to-speech | +| **Plus:** pocketbase, doorbell_media, litellm, langfuse, airflow, trigger_dev, garage, t3_stack_react, sams-home-network | | + +See [[Docker Containers]] for full container list. + +### .51 — sam-thinkpad (Laptop) + +| Property | Value | +|----------|-------| +| **IP** | `192.168.20.51` | +| **Hostname** | `sam-thinkpad` | +| **OS** | NixOS | +| **SSH** | ✅ `sam@192.168.20.51` | +| **Tailscale** | ✅ Installed, service enabled | +| **Role** | Portable laptop. Used on-the-go and at home. pi, Neovim, Home Manager managed. | + +### .35 — caddy-server (Reverse Proxy) + +| Property | Value | +|----------|-------| +| **IP** | `192.168.20.35` | +| **Hostname** | `caddy-server` | +| **OS** | Ubuntu Server | +| **SSH** | ✅ `sam@192.168.20.35` | +| **Tailscale** | Not installed | +| **Role** | Caddy reverse proxy. Runs ~50 Docker containers (apps, dashboards, media, monitoring). | + +**Proxied domains:** +| Domain | Proxied to | +|--------|-----------| +| `omniroute.lab.audasmedia.com.au` | `.13:20129` | +| `omniroute.home.lab` | `.13:20129` | +| `worldmonitor.lab.audasmedia.com.au` | `.13:3002` | +| `worldmonitor.home.lab` | `.13:3002` | + +See [[Docker Containers]] for full container list on .35. + +### .150 — Phone (Android) + +| Property | Value | +|----------|-------| +| **IP** | `192.168.20.150` (static) | +| **Device** | Android phone | +| **SSH** | ✅ Termux → `ssh` from/to other machines (port 8022, user: `uO_a499`) | +| **Tailscale** | Optional (install app for remote access) | +| **Role** | Mobile access. Termux for SSH, Tailscale for remote, NTFY for notifications. | + +--- + +## SSH Access Matrix + +| From ↓ / To → | .27 desktop | .13 server | .51 laptop | .35 caddy | .150 phone | +|--------------|-------------|------------|------------|-----------|------------| +| **.27 desktop** | — | `sam@192.168.20.13` | `sam@192.168.20.51` | `sam@192.168.20.35` | `uO_a499@192.168.20.150:8022` | +| **.13 server** | `sam@192.168.20.27` | — | `sam@192.168.20.51` | `sam@192.168.20.35` | `uO_a499@192.168.20.150:8022` | +| **.51 laptop** | `sam@192.168.20.27` | `sam@192.168.20.13` | — | `sam@192.168.20.35` | `uO_a499@192.168.20.150:8022` | +| **.150 phone** | `sam@192.168.20.27` | `sam@192.168.20.13` | `sam@192.168.20.51` | `sam@192.168.20.35` | — (Termux local) | + +**SSH config shortcut (`~/.ssh/config`):** +```text +Host phone + HostName 192.168.20.150 + Port 8022 + User uO_a499 +``` + +(Added to .27 and .51. .13 needs home.nix update — `~/.ssh/config` is a Nix store symlink.) + +--- + +## Key Apps & Ports + +| Port | Service | Machine | +|------|---------|---------| +| `22` | SSH | All | +| `53` | DNS (Pi-hole) | .13, .35 | +| `80/443` | Caddy reverse proxy | .35 | +| `1883` | MQTT (Mosquitto) | .13 | +| `3002` | worldmonitor | .13 | +| `8022` | SSH (Termux) | .150 phone | +| `8022` | SSH (Termux) | .150 phone | +| `20128/20129` | OmniRoute | .13 | +| `7437` | engram | .13 | +| `8787` | Headroom proxy | .13 | + +--- + +## Tailscale (Tailnet) + +| Machine | Status | Tailscale IP | +|---------|--------|-------------| +| .27 | ✅ Auth needed (`tailscale up --accept-routes`) | `100.x.x.x` | +| .13 | ✅ Auth needed (`tailscale up --accept-routes`) | `100.x.x.x` | +| .51 | ✅ Auth needed (`tailscale up --accept-routes`) | `100.x.x.x` | +| .150 phone | ❌ Not installed | — | +| .35 caddy | ❌ Not installed | — | + +Run `tailscale up --accept-routes` on each machine to authenticate. Install Tailscale app on phone and sign in to same account. + +--- + +## DNS + +| Server | IP | Role | +|--------|----|------| +| Pi-hole (primary) | `192.168.20.13` | DNS ad-blocking, local DNS for `.home.lab` domains | +| Pi-hole (secondary) | `192.168.20.35` | DNS ad-blocking, failover | + +### Local domains needing DNS records + +| Domain | Target | Status | +|--------|--------|--------| +| `omniroute.home.lab` | `.13:20128` | ✅ Created | +| `omniroute.lab.audasmedia.com.au` | `.35`→`.13:20129` | ✅ Caddy proxied | +| `worldmonitor.home.lab` | `.13:3002` | ❌ Needs Pi-hole record | +| `worldmonitor.lab.audasmedia.com.au` | `.35`→`.13:3002` | ❌ Needs DNS + Caddy done |