sam-4screen-desktop 2026-7-31:7:44:15
This commit is contained in:
@@ -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/<session>.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/<session>.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 <session>` (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 + 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`.
|
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`.
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ id: 1778553013-ARYX
|
|||||||
- **n8n_data** — Workflow automation (n8n)
|
- **n8n_data** — Workflow automation (n8n)
|
||||||
- **t3_stack_react** — T3 stack React app
|
- **t3_stack_react** — T3 stack React app
|
||||||
- **sams-home-network** — Home network management 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/`
|
### `/home/sam/deployment/ai-resume/`
|
||||||
- **knowledge-service** — AI knowledge service (ChromaDB-backed)
|
- **knowledge-service** — AI knowledge service (ChromaDB-backed)
|
||||||
|
|||||||
@@ -1,10 +1,174 @@
|
|||||||
---
|
---
|
||||||
created: 2026-07-31 07:26
|
created: 2026-07-30
|
||||||
modified: 2026-07-31 07:26
|
modified: 2026-07-30
|
||||||
type: note
|
type: note
|
||||||
tags: []
|
tags:
|
||||||
|
- network
|
||||||
|
- dev-ops
|
||||||
aliases: []
|
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 |
|
||||||
|
|||||||
Reference in New Issue
Block a user