--- created: 2026-09-09 modified: 2026-09-09 type: project tags: - ai - ai-agents - ai-resume - dev-ops - pi - showcase - tools aliases: - Tools Software WebUI - Tool System --- # Tools Software WebUI A self-hosted **tool system** on the home network: Web UIs, automation, an AI-agent console, and LLM routing, all wrapped around **pi** (the coding agent). This note is the master overview and user manual — and a resume showcase of how the pieces fit together. **Interactive architecture map:** [maps.lab → Tools Software WebUI](https://maps.lab.audasmedia.com.au/tools-software-webui/docs/system-map.html) ## What it is One coherent tool ecosystem that lets me **drive pi coding agents from anywhere**, watch what they are doing across every machine, and automate around them — with a clean per-folder model that keeps context lean. The four layers: 1. **Console — Pi Dashboard**: live view of *every* pi session on every machine (what's running, where, status). The "what's working / running where" answer. 2. **LLM routing — OmniRoute**: one proxy on .13 that all machines' pi requests flow through, with prioritized "combo" fallback chains. 3. **Automation — n8n + Prefect (+ LangChain)**: visual workflows, code pipelines, and the Python glue that powers the portal, chat, and tool services. 4. **AI toolkit — pi + extensions + MCP**: sub-agent orchestration, tasks, memory, LSP, dashboards, and a per-folder `.pi` model to control context bloat. ```mermaid flowchart LR subgraph CLIENTS["Clients"] D27[".27 main dev"] D51[".51 laptop"] M[Mobile: Termux / Tailscale / KDE Connect] end subgraph LAB["Home lab (.lab.audasmedia.com.au)"] C[Caddy proxy :35] G[Gitea :35] P[Pi-hole DNS :35] end subgraph WEB["Web-facing + Docker host (.13)"] N[n8n :5678] PR[Prefect :4200] OR[OmniRoute :20129] OW[Open WebUI :3000] PORTAL[Console portal :8500] DSH[dsh chat :3081-3084] end subgraph AGENTS["pi agents (per machine)"] EXT[dashboard.ts ext] SUB[@tintinweb/pi-subagents] TASKS[pi-tasks] MCP[MCP servers] end D27 -->|pi| AGENTS D51 -->|pi| AGENTS M -->|Tailscale/SSH| D27 M -->|NTFY| AGENTS AGENTS -->|state JSON| EXT EXT -->|~/.pi/agent/dashboard| PORTAL EXT -->|notify| M AGENTS -->|LLM| OR OR --> C C --> G N -.->|webhooks/triggers| AGENTS PR -.->|pipelines| AGENTS ``` ## Access — how to reach things | Target | How | Route | |---|---|---| | Any pi session | SSH from .27 / .51 / Termux | `ssh ` then `tmux attach` | | Console (see agents everywhere) | Go TUI on .27/.13 | `pi-dashboard` | | Live Pi-dashboard (web) | Portal Admin | `console.lab.audasmedia.com.au` (Caddy → .13:8500) | | n8n | Browser | `n8n.home.lab` (LAN + auth) / Tailscale `100.114.62.46:5678` | | Prefect | CLI/API from .27/.51 | `http://nixos-desktop:4200` | | OmniRoute | API (OpenAI-compatible) | `http://192.168.20.13:20129/v1` · `https://omniroute.lab…/v1` | | Open WebUI | Browser | `http://192.168.20.13:3000` | | Gitea | Browser | `gitea.lab.audasmedia.com.au` (:3001) · SSH :2222 | | Docs/Tasks | Browser | Outline :3000 · Vikunja | | Phone | Tailscale app + KDE Connect + NTFY | notifications/files/remote | **Backbone:** Tailscale (mesh VPN) + Caddy (reverse proxy on .35) + Pi-hole (DNS). Phone channel = Termux (SSH client) + KDE Connect (pairing/files/notifications) + NTFY (agent-complete alerts). ## Where things live | Area | Location | |---|---| | Project source & Gitea | `home_network/custom_tools/…` → Gitea `sam/*` | | Tool docs (Obsidian) | `200 projects/Tools Software WebUI/` + `300 areas/350 AI/` | | Pi assets (source of truth) | `~/.agents` → Gitea `sam/pi-config` (per-machine clones) | | Console portal + services | `.13` Docker (`/home/sam/Docker/Containers/…`) | | Data | `/mnt/data/…` on .13 | | Maps | `maps.lab.audasmedia.com.au` (Archify) | | LLM routing | OmniRoute `.13:20129` | ## Core components ### Pi Dashboard — the console Every pi session runs the **`dashboard.ts`** extension → writes `~/.pi/agent/dashboard/.json` (heartbeat, cwd/folder, agent status, model, terminal, attach target). That state is **pulled/collected on .13** and shown two ways: the **Go TUI** (`pi-dashboard`, Bubble Tea — attach / hunk / tuxedo from one table) and the **Python portal** Admin view. Notifications via NTFY/Apprise. Tasks flow to per-project `todo.txt` (shown by Tuxedo). *Full detail:* [[Pi Dashboard]]. ### OmniRoute — LLM router Docker proxy on `.13:20129` (Caddy-exposed). pi registers it as the `omni` provider; default model `default-opencode-go-ds-flash` is a **combo** that falls back OpenCode-Go → OpenRouter → DeepSeek → Gemini. 484 models. Extension: `omniroute-pi-ext-integration`; config `~/.pi/agent/models.json`. ### Automation - **n8n** (.13:5678) — visual workflows, 400+ integrations, webhooks/triggers. - **Prefect 3** (.13:4200) — code-defined pipelines, scheduling, durability. - **LangChain** — library embedded in the Python services (portal, dsh, agents); no separate server. ### AI toolkit (pi + extensions) Global packages: `pi-memctx` (memory), `pi-mcp-adapter` (MCP proxy), `@tintinweb/pi-subagents` (18 agents, worktrees, scheduling), `@tintinweb/pi-tasks` (dependency-tracked tasks + subagents), `pi-prompt-template-model`, `omniroute-pi-ext-integration`. Skills: `nixos-workflow`, `system-architect`, `project-diagramming-mermaid`, `project-diagramming-archify`, `obsidian-cli`, `npm-security`, `openspec-*`, `ste-writing`, `graphify`. MCP: `codebase-memory`, `code-review-graph`. **Per-folder `.pi/settings.json`** keeps each project's context minimal (arrays replace, not merge). ### Services on .13 (web-facing Docker host) n8n · Prefect · OmniRoute · Outline (:3000) · family-home-lab portal (:8500) · dsh chat (:3081–3084) · kontra (:8600) · worldmonitor (:3002) · garage S3 · media tools (GIMP/KdenLive/Audacity/LMMS) · Jervis voice agent (:8501) · engram memory (:7437, SSH tunnel) · headroom compression (:8787). ### Infrastructure NixOS on .27/.13/.51 (pi is Nix-managed `pi-coding-agent` 0.82.1) · Ubuntu Docker host .35 (Gitea/Caddy/Pi-hole) · Proxmox .28 · Tailscale mesh. ## Config notes for future maintenance (no secrets) - **LLM routing:** pi → `omni` provider → OmniRoute on `.13:20129`; default model is the combo `default-opencode-go-ds-flash`. Secrets only in `.env` / secrets store — never commit. - **Pi assets:** edit in `~/.agents` → push to Gitea `pi-config` → **pull per machine** (`.27/.13/.51`); a push does not auto-update the others. Activate per project via `/config-add`. - **Pi is Nix-managed:** update = nixpkgs flake bump + `nixos-rebuild switch`; close sessions after. - **Console:** dashboard state is collected on .13; the Go TUI + portal Admin render it. - **Diagrams:** Mermaid source + Archify HTML live in the Gitea repo `docs/`; publish via `publish-maps.sh` → maps.lab. - **Gitea Actions** (roadmap): auto-sync `~/.agents` clones across machines on push to `pi-config`. ## Evaluated & not selected (roadmap / decisions) | Tool | Decision | Why | |---|---|---| | **Paseo** | ⏸ defer (roadmap) | Cross-machine orchestration layer; current dashboard + portal already answer "what's running where" | | **Pi Web UI** | ⏸ defer | Needs Pi ≥ 0.84 (Nix upgrade); current console suffices for now | | **Windmill** | ❌ not needed | n8n covers the visual canvas; Prefect covers code pipelines | | **Gitea Actions** | 🆕 recommended | First win: auto-sync pi-config clones; repo-event CI for deploys | ## Related - [[Pi Dashboard]] · [[Paseo Pi GUI Tool]] · [[Family Home Lab]] - `300 areas/350 AI/Pi Agent Extensions & Skills.md` (full extension/skill/MCP inventory) - `300 areas/360 Dev-Ops Network Computers/Dev-Ops Tooling — Mermaid, Archify, Vikunja & Outline.md` - [[Home Network Map Overview]] · [[Docker Containers]] · [[Websites on Nixos-Dekstop 13]] - Gitea: `sam/tools-software-webui` (public, resume showcase) · Outline project `Tools Software WebUI` · Vikunja project `Tools Software WebUI`