diff --git a/.agents/plugins/marketplace.json b/.agents/plugins/marketplace.json index d0e3d40..7e0d72d 100644 --- a/.agents/plugins/marketplace.json +++ b/.agents/plugins/marketplace.json @@ -489,7 +489,7 @@ ], "defaultPrompt": [ "Use Plexus to inspect example-host before changing it.", - "Load live remote context for dookie.", + "Load live remote context for devhost.", "Summarize recent host activity." ], "brandColor": "#2563EB" @@ -1041,7 +1041,7 @@ "defaultPrompt": [ "Use Unraid to check array and disk health.", "List Docker containers on the Unraid box.", - "Show share usage on tootie." + "Show share usage on nashost." ], "brandColor": "#F15A2C" } @@ -2190,7 +2190,7 @@ }, { "name": "aurora", - "description": "Aurora design system \u2014 dark-first navy/cyan/rose/Axon-orange operator and agent control-plane UI across web (the @aurora shadcn registry, var(--aurora-*) plus --axon-* tokens), Android (the tv.tootie.aurora Jetpack Compose library), and CLI/editor themes.", + "description": "Aurora design system \u2014 dark-first navy/cyan/rose/Axon-orange operator and agent control-plane UI across web (the @aurora shadcn registry, var(--aurora-*) plus --axon-* tokens), Android (the tv.nashost.aurora Jetpack Compose library), and CLI/editor themes.", "source": { "source": "git-subdir", "url": "https://github.com/jmagar/aurora.git", diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 1fcba06..05c20a5 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -574,7 +574,7 @@ "url": "https://github.com/jmagar/aurora.git", "path": "plugin" }, - "description": "Aurora design system \u2014 dark-first navy/cyan/rose/Axon-orange operator and agent control-plane UI across web (the @aurora shadcn registry, var(--aurora-*) plus --axon-* tokens), Android (the tv.tootie.aurora Jetpack Compose library), and CLI/editor themes." + "description": "Aurora design system \u2014 dark-first navy/cyan/rose/Axon-orange operator and agent control-plane UI across web (the @aurora shadcn registry, var(--aurora-*) plus --axon-* tokens), Android (the tv.nashost.aurora Jetpack Compose library), and CLI/editor themes." }, { "name": "zsnoop-mcp", diff --git a/README.md b/README.md index 596e1c6..7312371 100644 --- a/README.md +++ b/README.md @@ -173,7 +173,7 @@ plugin source directories in this repo. | `mcp-tunnels` | `https://github.com/anthropics/claude-plugins-official.git`, `plugins/mcp-tunnels` | Connect Claude to a private MCP server through an Anthropic-managed tunnel. | | `ytdl-mcp` | `github:jmagar/ytdl-mcp` | Download audio/video from any yt-dlp-supported site, embed metadata and cover art, organize by artist, and rsync to an SSH remote with separate audio/video destinations. | | `labby` | `https://github.com/dinglebear-ai/labby.git`, `plugins/labby` | Skills and gateway-oriented guidance for the Lab homelab control plane. | -| `aurora` | `https://github.com/jmagar/aurora.git`, `plugin` | Aurora design system — dark-first navy/cyan/rose/Axon-orange operator and agent control-plane UI across web (the @aurora shadcn registry, var(--aurora-*) plus --axon-* tokens), Android (the tv.tootie.aurora Jetpack Compose library), and CLI/editor themes. | +| `aurora` | `https://github.com/jmagar/aurora.git`, `plugin` | Aurora design system — dark-first navy/cyan/rose/Axon-orange operator and agent control-plane UI across web (the @aurora shadcn registry, var(--aurora-*) plus --axon-* tokens), Android (the tv.nashost.aurora Jetpack Compose library), and CLI/editor themes. | | `project-artifact` | `https://github.com/anthropics/claude-plugins-official.git`, `plugins/project-artifact` | Generate and publish a living project status page — overview & success criteria, the workstream sequence, and next steps — as a shareable claude.ai artifact backed by a per-project config, so refreshes re-gather live state, redeploy the same URL, and report only the delta. | | `code-modernization` | `https://github.com/anthropics/claude-plugins-official.git`, `plugins/code-modernization` | Modernize legacy codebases (COBOL, legacy Java/C++, monolith web apps) with a structured preflight / assess / map / extract-rules / brief / reimagine / transform / harden workflow, an interactive topology viewer, and specialist review agents | | `security-guidance` | `https://github.com/anthropics/claude-plugins-official.git`, `plugins/security-guidance` | Security review for Claude-generated code. Pattern-based warnings on edits, LLM-powered diff review on Stop, and an agentic commit reviewer that catches injection, XSS, SSRF, hardcoded secrets, and 25+ other vulnerability classes. | diff --git a/docs/configuration-matrix.md b/docs/configuration-matrix.md index e5977e6..b45f1f5 100644 --- a/docs/configuration-matrix.md +++ b/docs/configuration-matrix.md @@ -17,12 +17,12 @@ updated: 2026-07-30 | `agent-os` | `agent_os_compose_file` | `AGENT_OS_COMPOSE_FILE` | docker-compose.yml path | no | `plugins/agent-os/commands/agent-os.md`, `plugins/agent-os/scripts/setup.sh`, `plugins/agent-os/skills/agent-os/SKILL.md`, `plugins/agent-os/skills/agent-os/references/troubleshooting.md` | Absolute path to the agent-os compose file ON the Docker host, used to bring the VM back up. Example: /mnt/cache/compose/windows/docker-compose.yml. | | `agent-os` | `agent_os_container_name` | `AGENT_OS_CONTAINER_NAME` | Container name | no | `plugins/agent-os/commands/agent-os.md`, `plugins/agent-os/scripts/setup.sh`, `plugins/agent-os/skills/agent-os/SKILL.md`, `plugins/agent-os/skills/agent-os/references/troubleshooting.md` | Name of the dockur/windows container running the VM. Example: agent-os-win11. | | `agent-os` | `agent_os_host_forward_port` | `AGENT_OS_HOST_FORWARD_PORT` | Host-forward SSH port | no | `plugins/agent-os/commands/agent-os.md`, `plugins/agent-os/skills/agent-os/references/tailscale.md`, `plugins/agent-os/skills/agent-os/references/troubleshooting.md` | Port the Docker host forwards to the guest's sshd (host:PORT -> guest:22). Example: 2222. | -| `agent-os` | `agent_os_host_forward_ssh` | `AGENT_OS_HOST_FORWARD_SSH` | Host-forward SSH target | no | `plugins/agent-os/commands/agent-os.md`, `plugins/agent-os/skills/agent-os/SKILL.md`, `plugins/agent-os/skills/agent-os/references/tailscale.md`, `plugins/agent-os/skills/agent-os/references/troubleshooting.md` | SSH user@host of the Docker host's port-forward into the guest (user@). Use this path — NOT `ssh agent-os` — for Tailscale maintenance inside the guest, since it survives `tailscale down`. Example: docker@100.120.242.29. | +| `agent-os` | `agent_os_host_forward_ssh` | `AGENT_OS_HOST_FORWARD_SSH` | Host-forward SSH target | no | `plugins/agent-os/commands/agent-os.md`, `plugins/agent-os/skills/agent-os/SKILL.md`, `plugins/agent-os/skills/agent-os/references/tailscale.md`, `plugins/agent-os/skills/agent-os/references/troubleshooting.md` | SSH user@host of the Docker host's port-forward into the guest (user@). Use this path — NOT `ssh agent-os` — for Tailscale maintenance inside the guest, since it survives `tailscale down`. Example: docker@198.51.100.20. | | `agent-os` | `agent_os_mcp_token` | `AGENT_OS_MCP_TOKEN` | Windows-MCP bearer token | yes | `plugins/agent-os/.mcp.json`, `plugins/agent-os/commands/agent-os.md`, `plugins/agent-os/scripts/setup.sh`, `plugins/agent-os/skills/agent-os/SKILL.md` | Bearer token the Windows-MCP server expects (sent as 'Authorization: Bearer '). Stored in secure OS storage, not settings.json. Without it the windows-mcp server will return 401 and no tools will load. | | `agent-os` | `agent_os_mcp_url` | `AGENT_OS_MCP_URL` | Windows-MCP URL | no | `plugins/agent-os/.mcp.json`, `plugins/agent-os/commands/agent-os.md`, `plugins/agent-os/scripts/setup.sh`, `plugins/agent-os/skills/agent-os/SKILL.md` | Full HTTP(S) URL of the Windows-MCP endpoint inside the agent-os VM, including the /mcp path. This is what the plugin registers as the windows-mcp MCP server. Example: https://agent-os.example.ts.net/mcp. Prefer the VM's own stable Tailscale/MagicDNS name so it follows the VM across Docker hosts. | -| `agent-os` | `agent_os_novnc_url` | `AGENT_OS_NOVNC_URL` | noVNC URL | no | `plugins/agent-os/commands/agent-os.md`, `plugins/agent-os/skills/agent-os/SKILL.md` | Base URL of the dockur/windows web (noVNC) UI on the Docker host, for visual debugging. Example: http://tootie:8006. | -| `agent-os` | `agent_os_vm_host` | `AGENT_OS_VM_HOST` | Docker host running the VM | no | `plugins/agent-os/commands/agent-os.md`, `plugins/agent-os/scripts/setup.sh`, `plugins/agent-os/skills/agent-os/SKILL.md`, `plugins/agent-os/skills/agent-os/references/troubleshooting.md` | SSH alias/host of the Docker host that runs the agent-os-win11 container (for `docker ps`, compose up, etc.). Example: tootie. | -| `agent-os` | `agent_os_vm_tailscale_ip` | `AGENT_OS_VM_TAILSCALE_IP` | VM Tailscale IP / SSH host | no | `plugins/agent-os/commands/agent-os.md`, `plugins/agent-os/skills/agent-os/SKILL.md` | The agent-os guest's own Tailscale IP (or MagicDNS name) used by `ssh agent-os` for in-guest commands on port 22. Example: 100.109.125.128. | +| `agent-os` | `agent_os_novnc_url` | `AGENT_OS_NOVNC_URL` | noVNC URL | no | `plugins/agent-os/commands/agent-os.md`, `plugins/agent-os/skills/agent-os/SKILL.md` | Base URL of the dockur/windows web (noVNC) UI on the Docker host, for visual debugging. Example: http://nashost:8006. | +| `agent-os` | `agent_os_vm_host` | `AGENT_OS_VM_HOST` | Docker host running the VM | no | `plugins/agent-os/commands/agent-os.md`, `plugins/agent-os/scripts/setup.sh`, `plugins/agent-os/skills/agent-os/SKILL.md`, `plugins/agent-os/skills/agent-os/references/troubleshooting.md` | SSH alias/host of the Docker host that runs the agent-os-win11 container (for `docker ps`, compose up, etc.). Example: nashost. | +| `agent-os` | `agent_os_vm_tailscale_ip` | `AGENT_OS_VM_TAILSCALE_IP` | VM Tailscale IP / SSH host | no | `plugins/agent-os/commands/agent-os.md`, `plugins/agent-os/skills/agent-os/SKILL.md` | The agent-os guest's own Tailscale IP (or MagicDNS name) used by `ssh agent-os` for in-guest commands on port 22. Example: 198.51.100.10. | | `bytestash` | `bytestash_api_key` | `BYTESTASH_API_KEY` | API Key | yes | `plugins/bytestash/scripts/setup.sh` | Optional ByteStash API key for public/read-only endpoints. Snippet writes still require JWT on current ByteStash. | | `bytestash` | `bytestash_password` | `BYTESTASH_PASSWORD` | Password | yes | `plugins/bytestash/scripts/setup.sh` | ByteStash password used by the hook to mint a JWT for snippet API calls. | | `bytestash` | `bytestash_token` | `BYTESTASH_TOKEN` | JWT Token | yes | `plugins/bytestash/scripts/setup.sh` | Optional pre-minted ByteStash JWT. Used when username/password are not configured. | diff --git a/plugins/agent-os/.claude-plugin/plugin.json b/plugins/agent-os/.claude-plugin/plugin.json index ab1a73a..1998245 100644 --- a/plugins/agent-os/.claude-plugin/plugin.json +++ b/plugins/agent-os/.claude-plugin/plugin.json @@ -25,7 +25,7 @@ "title": "Windows-MCP URL", "description": "Full HTTP(S) URL of the Windows-MCP endpoint inside the agent-os VM, including the /mcp path. This is what the plugin registers as the windows-mcp MCP server. Example: https://agent-os.example.ts.net/mcp. Prefer the VM's own stable Tailscale/MagicDNS name so it follows the VM across Docker hosts.", "required": true, - "default": "https://agent-os.manatee-triceratops.ts.net/mcp" + "default": "https://agent-os.example.ts.net/mcp" }, "agent_os_mcp_token": { "type": "string", @@ -37,23 +37,23 @@ "agent_os_vm_tailscale_ip": { "type": "string", "title": "VM Tailscale IP / SSH host", - "description": "The agent-os guest's own Tailscale IP (or MagicDNS name) used by `ssh agent-os` for in-guest commands on port 22. Example: 100.109.125.128.", + "description": "The agent-os guest's own Tailscale IP (or MagicDNS name) used by `ssh agent-os` for in-guest commands on port 22. Example: 198.51.100.10.", "required": false, - "default": "100.109.125.128" + "default": "198.51.100.10" }, "agent_os_vm_host": { "type": "string", "title": "Docker host running the VM", - "description": "SSH alias/host of the Docker host that runs the agent-os-win11 container (for `docker ps`, compose up, etc.). Example: tootie.", + "description": "SSH alias/host of the Docker host that runs the agent-os-win11 container (for `docker ps`, compose up, etc.). Example: nashost.", "required": false, - "default": "tootie" + "default": "nashost" }, "agent_os_host_forward_ssh": { "type": "string", "title": "Host-forward SSH target", - "description": "SSH user@host of the Docker host's port-forward into the guest (user@). Use this path — NOT `ssh agent-os` — for Tailscale maintenance inside the guest, since it survives `tailscale down`. Example: docker@100.120.242.29.", + "description": "SSH user@host of the Docker host's port-forward into the guest (user@). Use this path — NOT `ssh agent-os` — for Tailscale maintenance inside the guest, since it survives `tailscale down`. Example: docker@198.51.100.20.", "required": false, - "default": "docker@100.120.242.29" + "default": "docker@198.51.100.20" }, "agent_os_host_forward_port": { "type": "string", @@ -79,9 +79,9 @@ "agent_os_novnc_url": { "type": "string", "title": "noVNC URL", - "description": "Base URL of the dockur/windows web (noVNC) UI on the Docker host, for visual debugging. Example: http://tootie:8006.", + "description": "Base URL of the dockur/windows web (noVNC) UI on the Docker host, for visual debugging. Example: http://nashost:8006.", "required": false, - "default": "http://tootie:8006" + "default": "http://nashost:8006" }, "agent_os_autostart": { "type": "string", diff --git a/plugins/agent-os/README.md b/plugins/agent-os/README.md index 232233f..dd0f518 100644 --- a/plugins/agent-os/README.md +++ b/plugins/agent-os/README.md @@ -20,15 +20,15 @@ Set these in the plugin's settings (Claude Code prompts on enable). Values reach | Key | Required | Default | What it is | |---|---|---|---| -| `agent_os_mcp_url` | ✅ | `https://agent-os.manatee-triceratops.ts.net/mcp` | Windows-MCP `/mcp` endpoint (prefer the VM's own Tailscale/MagicDNS name). | +| `agent_os_mcp_url` | ✅ | `https://agent-os.example.ts.net/mcp` | Windows-MCP `/mcp` endpoint (prefer the VM's own Tailscale/MagicDNS name). | | `agent_os_mcp_token` | ✅ (sensitive) | — | Bearer token Windows-MCP expects. | -| `agent_os_vm_tailscale_ip` | | `100.109.125.128` | Guest's own Tailscale IP for `ssh agent-os` (port 22). | -| `agent_os_vm_host` | | `tootie` | Docker host running the container. | -| `agent_os_host_forward_ssh` | | `docker@100.120.242.29` | Host-forward SSH target (Tailscale maintenance — survives `tailscale down`). | +| `agent_os_vm_tailscale_ip` | | `198.51.100.10` | Guest's own Tailscale IP for `ssh agent-os` (port 22). | +| `agent_os_vm_host` | | `nashost` | Docker host running the container. | +| `agent_os_host_forward_ssh` | | `docker@198.51.100.20` | Host-forward SSH target (Tailscale maintenance — survives `tailscale down`). | | `agent_os_host_forward_port` | | `2222` | Host-forward port → guest `:22`. | | `agent_os_compose_file` | | `/mnt/cache/compose/windows/docker-compose.yml` | Compose file on the Docker host to bring the VM up. | | `agent_os_container_name` | | `agent-os-win11` | dockur/windows container name. | -| `agent_os_novnc_url` | | `http://tootie:8006` | dockur/windows web (noVNC) UI for visual debugging. | +| `agent_os_novnc_url` | | `http://nashost:8006` | dockur/windows web (noVNC) UI for visual debugging. | | `agent_os_autostart` | | `false` | `"true"` lets the SessionStart hook SSH to the Docker host and `docker compose up -d` the VM when the MCP endpoint is unreachable (requires `agent_os_vm_host` + `agent_os_compose_file`). Starts only, never stops; doesn't block on Windows boot. | ### Auto-recovery (opt-in) @@ -50,4 +50,4 @@ If `windows-mcp` doesn't appear in `/mcp`, the most likely cause is the URL/toke ## Notes - This skill was moved out of the `vibin` plugin into its own plugin so it can carry userConfig and self-register the MCP. -- It does **not** fire on the user's personal Windows (steamy-wsl) — that's the `nircmd` skill. +- It does **not** fire on the user's personal Windows (winhost-wsl) — that's the `nircmd` skill. diff --git a/plugins/agent-os/gemini-extension.json b/plugins/agent-os/gemini-extension.json index 5585ac0..e84cf7e 100644 --- a/plugins/agent-os/gemini-extension.json +++ b/plugins/agent-os/gemini-extension.json @@ -38,7 +38,7 @@ }, { "name": "Host-forward SSH target", - "description": "SSH user@host of the Docker host's port-forward into the guest (user@). Use this path \u2014 NOT `ssh agent-os` \u2014 for Tailscale maintenance inside the guest, since it survives `tailscale down`. Example: docker@100.120.242.29. Default: 'docker@100.120.242.29'.", + "description": "SSH user@host of the Docker host's port-forward into the guest (user@). Use this path \u2014 NOT `ssh agent-os` \u2014 for Tailscale maintenance inside the guest, since it survives `tailscale down`. Example: docker@198.51.100.20. Default: 'docker@198.51.100.20'.", "envVar": "AGENT_OS_HOST_FORWARD_SSH", "sensitive": false }, @@ -50,25 +50,25 @@ }, { "name": "Windows-MCP URL", - "description": "Full HTTP(S) URL of the Windows-MCP endpoint inside the agent-os VM, including the /mcp path. This is what the plugin registers as the windows-mcp MCP server. Example: https://agent-os.example.ts.net/mcp. Prefer the VM's own stable Tailscale/MagicDNS name so it follows the VM across Docker hosts. Default: 'https://agent-os.manatee-triceratops.ts.net/mcp'.", + "description": "Full HTTP(S) URL of the Windows-MCP endpoint inside the agent-os VM, including the /mcp path. This is what the plugin registers as the windows-mcp MCP server. Example: https://agent-os.example.ts.net/mcp. Prefer the VM's own stable Tailscale/MagicDNS name so it follows the VM across Docker hosts. Default: 'https://agent-os.example.ts.net/mcp'.", "envVar": "AGENT_OS_MCP_URL", "sensitive": false }, { "name": "noVNC URL", - "description": "Base URL of the dockur/windows web (noVNC) UI on the Docker host, for visual debugging. Example: http://tootie:8006. Default: 'http://tootie:8006'.", + "description": "Base URL of the dockur/windows web (noVNC) UI on the Docker host, for visual debugging. Example: http://nashost:8006. Default: 'http://nashost:8006'.", "envVar": "AGENT_OS_NOVNC_URL", "sensitive": false }, { "name": "Docker host running the VM", - "description": "SSH alias/host of the Docker host that runs the agent-os-win11 container (for `docker ps`, compose up, etc.). Example: tootie. Default: 'tootie'.", + "description": "SSH alias/host of the Docker host that runs the agent-os-win11 container (for `docker ps`, compose up, etc.). Example: nashost. Default: 'nashost'.", "envVar": "AGENT_OS_VM_HOST", "sensitive": false }, { "name": "VM Tailscale IP / SSH host", - "description": "The agent-os guest's own Tailscale IP (or MagicDNS name) used by `ssh agent-os` for in-guest commands on port 22. Example: 100.109.125.128. Default: '100.109.125.128'.", + "description": "The agent-os guest's own Tailscale IP (or MagicDNS name) used by `ssh agent-os` for in-guest commands on port 22. Example: 198.51.100.10. Default: '198.51.100.10'.", "envVar": "AGENT_OS_VM_TAILSCALE_IP", "sensitive": false } diff --git a/plugins/agent-os/skills/agent-os/CHANGELOG.md b/plugins/agent-os/skills/agent-os/CHANGELOG.md index 6296947..9b6b546 100644 --- a/plugins/agent-os/skills/agent-os/CHANGELOG.md +++ b/plugins/agent-os/skills/agent-os/CHANGELOG.md @@ -7,17 +7,17 @@ All notable changes to this skill are recorded here. Format roughly follows [Kee ### Changed - Renamed the skill from `winbox` to `agent-os`; `winbox` remains a legacy trigger phrase only. -- Added the shared web-dev priority ladder: CDP on agent-os, agent-browser, claude-in-chrome on agent-os, agent-os Windows-MCP, then claude-in-chrome on steamy. +- Added the shared web-dev priority ladder: CDP on agent-os, agent-browser, claude-in-chrome on agent-os, agent-os Windows-MCP, then claude-in-chrome on winhost. - Updated docs and examples to use `agent-os` as the primary name. -- Updated current operational host references to `tootie`; older `dookie` references below are historical migration notes. +- Updated current operational host references to `nashost`; older `devhost` references below are historical migration notes. ## 2026-05-17 (later — naming + side-channel correction) ### Changed -- **Clarified the VM's official name.** The sandbox is officially the **`agent-os`** VM (container `agent-os-win11`, image `dockur/windows`). At the time it ran on host `dookie`; it later moved to `tootie`. At the time, `winbox` remained the skill name; on 2026-05-23 the skill was renamed to `agent-os` and `winbox` became a legacy trigger phrase only. +- **Clarified the VM's official name.** The sandbox is officially the **`agent-os`** VM (container `agent-os-win11`, image `dockur/windows`). At the time it ran on host `devhost`; it later moved to `nashost`. At the time, `winbox` remained the skill name; on 2026-05-23 the skill was renamed to `agent-os` and `winbox` became a legacy trigger phrase only. - Replaced all `docker ps | grep windows` / `docker inspect windows` references with the correct container name, `agent-os-win11`. -- Promoted host-forwarded SSH (then `dookie:2222`, now `tootie:2222`) from "not verified" to "confirmed exposed by the container" in the side-channel list. Whether sshd is actually answering inside the guest depends on first-boot provisioning, but the port forward is real. +- Promoted host-forwarded SSH (then `devhost:2222`, now `nashost:2222`) from "not verified" to "confirmed exposed by the container" in the side-channel list. Whether sshd is actually answering inside the guest depends on first-boot provisioning, but the port forward is real. ## 2026-05-17 diff --git a/plugins/agent-os/skills/agent-os/README.md b/plugins/agent-os/skills/agent-os/README.md index c97a58d..1504989 100644 --- a/plugins/agent-os/skills/agent-os/README.md +++ b/plugins/agent-os/skills/agent-os/README.md @@ -1,10 +1,10 @@ # agent-os (Windows sandbox VM) -Drive Claude's dedicated sandboxed Windows 11 VM, the **`agent-os`** VM (container name `agent-os-win11`, image `dockur/windows`) on host `tootie`, historically nicknamed "winbox", through the **Windows-MCP** server installed inside it. The skill name is now `agent-os`; both `agent-os` and legacy `winbox` work as trigger phrases. +Drive Claude's dedicated sandboxed Windows 11 VM, the **`agent-os`** VM (container name `agent-os-win11`, image `dockur/windows`) on host `nashost`, historically nicknamed "winbox", through the **Windows-MCP** server installed inside it. The skill name is now `agent-os`; both `agent-os` and legacy `winbox` work as trigger phrases. ## What changed -This skill used to drive the VM over noVNC at `http://tootie:8006` via `agent-browser`, dispatching `MouseEvent`s on the canvas and typing one keystroke at a time. That path worked but was slow and had a known `Shift+` bug. +This skill used to drive the VM over noVNC at `http://nashost:8006` via `agent-browser`, dispatching `MouseEvent`s on the canvas and typing one keystroke at a time. That path worked but was slow and had a known `Shift+` bug. Windows-MCP ([CursorTouch/Windows-MCP](https://github.com/CursorTouch/Windows-MCP)) replaces it. The MCP server runs inside the agent-os VM and exposes native Windows automation as `mcp__windows-mcp__*` tools. You get a real keyboard, a real accessibility tree (`Snapshot`), and direct PowerShell (`PowerShell`). @@ -18,7 +18,7 @@ Windows-MCP ([CursorTouch/Windows-MCP](https://github.com/CursorTouch/Windows-MC ## When to invoke -Sandbox-specific triggers only: `agent-os`, `the agent-os VM`, `winbox`, `the windows sandbox`, `the tootie windows`, `drive the windows VM`, `spin up agent-os`, `open the noVNC`, or any "run X / screenshot agent-os" prompt. Does **not** fire on the user's personal Windows machine (steamy-wsl) - that target uses the `nircmd` skill. +Sandbox-specific triggers only: `agent-os`, `the agent-os VM`, `winbox`, `the windows sandbox`, `the nashost windows`, `drive the windows VM`, `spin up agent-os`, `open the noVNC`, or any "run X / screenshot agent-os" prompt. Does **not** fire on the user's personal Windows machine (winhost-wsl) - that target uses the `nircmd` skill. ## Web-dev browser priority @@ -31,7 +31,7 @@ For web dev verification, prefer: **webwright** (generic web tasks) → CDP on a 3. agent-browser 4. claude-in-chrome on agent-os 5. agent-os Windows-MCP -6. claude-in-chrome on steamy +6. claude-in-chrome on winhost Use Windows-MCP for desktop/OS state, native dialogs, installed Windows software, and browser work that must happen inside the sandbox desktop. Use `agent-browser` before Windows-MCP for generic fresh-browser checks. @@ -39,12 +39,12 @@ Use Windows-MCP for desktop/OS state, native dialogs, installed Windows software Configuration is handled automatically via the agent-os plugin userConfig — there is nothing to edit in `~/.claude.json`. Set credentials in plugin settings when installing. Claude Code reaches the Windows-MCP server automatically. Nothing to start. -If unreachable: `ssh tootie "docker ps --format '{{.Names}}' | grep agent-os"` to confirm the container (`agent-os-win11`) is up. +If unreachable: `ssh nashost "docker ps --format '{{.Names}}' | grep agent-os"` to confirm the container (`agent-os-win11`) is up. Side-channels exposed by the container, in case Windows-MCP is wedged: -- noVNC at `http://tootie:8006` (visual debug) -- RDP at `tootie:33890` (needs an agent-side RDP client) -- SSH at `tootie:2222` → guest port 22 (sshd inside the guest must be running; if it is, this is the cleanest scripted bypass) +- noVNC at `http://nashost:8006` (visual debug) +- RDP at `nashost:33890` (needs an agent-side RDP client) +- SSH at `nashost:2222` → guest port 22 (sshd inside the guest must be running; if it is, this is the cleanest scripted bypass) ## Key advantages over the legacy noVNC path @@ -55,7 +55,7 @@ Side-channels exposed by the container, in case Windows-MCP is wedged: ## Visual debugging fallback -noVNC at `http://tootie:8006/vnc.html?autoconnect=1&resize=remote` still works for eyeballing the desktop visually, but isn't the primary interaction surface anymore. See git history of `SKILL.md` for the legacy `agent-browser` helpers if you ever need them. +noVNC at `http://nashost:8006/vnc.html?autoconnect=1&resize=remote` still works for eyeballing the desktop visually, but isn't the primary interaction surface anymore. See git history of `SKILL.md` for the legacy `agent-browser` helpers if you ever need them. ## Files @@ -64,8 +64,8 @@ noVNC at `http://tootie:8006/vnc.html?autoconnect=1&resize=remote` still works f ## Related skills -- `nircmd` — drives the user's *personal* Windows machine on `steamy-wsl` via NirCmd + NirSoft over SSH +- `nircmd` — drives the user's *personal* Windows machine on `winhost-wsl` via NirCmd + NirSoft over SSH - `chrome` - CDP against real Chrome sessions; for web-dev work, try CDP on agent-os before other browser tools. - `agent-browser` - fresh Chromium automation and the preferred fallback after CDP on agent-os. - `screenshots` - Mode 2 captures the user's own desktop, not agent-os. -- `homelab-map` — full inventory of `dookie` and the other homelab hosts +- `homelab-map` — full inventory of `devhost` and the other homelab hosts diff --git a/plugins/agent-os/skills/agent-os/SKILL.md b/plugins/agent-os/skills/agent-os/SKILL.md index 9a2eb97..cadeab6 100644 --- a/plugins/agent-os/skills/agent-os/SKILL.md +++ b/plugins/agent-os/skills/agent-os/SKILL.md @@ -1,11 +1,11 @@ --- name: agent-os -description: Use when the user asks to drive or test Claude's reserved agent-os Windows 11 sandbox VM via Windows-MCP, PowerShell, screenshots, desktop apps, installers, registry, filesystem, or noVNC. Triggers include agent-os, the agent-os VM or desktop, windows sandbox, winbox, run on agent-os, screenshot agent-os, or PowerShell on agent-os. Prefer webwright for generic web verification; use agent-os only when the task depends on the Windows sandbox or desktop. Do not use for the user's personal Windows machines such as steamy or steamy-wsl. +description: Use when the user asks to drive or test Claude's reserved agent-os Windows 11 sandbox VM via Windows-MCP, PowerShell, screenshots, desktop apps, installers, registry, filesystem, or noVNC. Triggers include agent-os, the agent-os VM or desktop, windows sandbox, winbox, run on agent-os, screenshot agent-os, or PowerShell on agent-os. Prefer webwright for generic web verification; use agent-os only when the task depends on the Windows sandbox or desktop. Do not use for the user's personal Windows machines such as winhost or winhost-wsl. --- # agent-os (Windows sandbox VM) -A real Windows 11 desktop reserved for Claude, running on host `tootie` as the **`agent-os`** VM (container name `agent-os-win11`, image `dockur/windows`). "Winbox" is only the historical nickname; the skill name and official name are **agent-os**. Both `agent-os` and `winbox` remain trigger phrases for compatibility. +A real Windows 11 desktop reserved for Claude, running on host `nashost` as the **`agent-os`** VM (container name `agent-os-win11`, image `dockur/windows`). "Winbox" is only the historical nickname; the skill name and official name are **agent-os**. Both `agent-os` and `winbox` remain trigger phrases for compatibility. Drive it through **Windows-MCP** ([CursorTouch/Windows-MCP](https://github.com/CursorTouch/Windows-MCP)) — an MCP server installed inside the VM that exposes native click/type/shell/clipboard/filesystem/registry tools. In Claude Code these usually surface as `mcp__plugin_agent-os_windows-mcp__*`, while older installs may show `mcp__windows-mcp__*`. @@ -36,14 +36,14 @@ Sensitive values (the token) substitute in configs and reach subprocesses as env ## Why Windows-MCP, not noVNC -The previous version of this skill drove the VM through `agent-browser` against `http://tootie:8006`'s noVNC canvas. That path still works as a visual fallback, but Windows-MCP is the new primary surface because: +The previous version of this skill drove the VM through `agent-browser` against `http://nashost:8006`'s noVNC canvas. That path still works as a visual fallback, but Windows-MCP is the new primary surface because: - **Real keyboard.** `Type` reliably handles full strings including shifted symbols (`!@#$%^&*()`, `:`, `"`, etc.). The noVNC `Shift+` bug is gone. - **Real accessibility tree.** `Snapshot` returns interactive elements with ids — Claude can target controls by name, not by reasoning about pixels. - **Native shell.** `PowerShell` runs commands directly; no `Win+R`, no canvas focus juggling. - **Faster.** No browser, no canvas event dispatch, no per-character `press` loop. -Reach for noVNC at `http://tootie:8006` only when you need to *see* the desktop visually for debugging (e.g. confirming a screenshot that Windows-MCP returned), or if Windows-MCP is unreachable. +Reach for noVNC at `http://nashost:8006` only when you need to *see* the desktop visually for debugging (e.g. confirming a screenshot that Windows-MCP returned), or if Windows-MCP is unreachable. ## Browser/web-dev priority @@ -54,7 +54,7 @@ When the task is web development, browser verification, screenshots, or page int 3. **agent-browser** - fresh browser automation when the task does not need the agent-os desktop/session. 4. **claude-in-chrome on agent-os** - when the workflow specifically needs Claude-in-Chrome inside the sandbox VM. 5. **agent-os Windows-MCP** - OS-level control, desktop apps, PowerShell, installer flows, or browser tasks that require the actual desktop. -6. **claude-in-chrome on steamy** - last choice; the user's personal desktop/session. +6. **claude-in-chrome on winhost** - last choice; the user's personal desktop/session. Do not reach for Windows-MCP (or the agent-os desktop browser) just because it's available when `webwright` can do the web task more directly — webwright is the default for generic web work. Do use Windows-MCP / the agent-os browser when the task depends on installed Windows software, the sandbox desktop, the filesystem, registry, native dialogs, or a browser profile inside agent-os. @@ -63,7 +63,7 @@ Do not reach for Windows-MCP (or the agent-os desktop browser) just because it's Already wired — Claude Code reaches it automatically, nothing to start per session. The link has four layers, inner → outer; understand them so you can repair whichever one breaks: 1. **Server (inside the VM).** Windows-MCP (CursorTouch/Windows-MCP, a Python HTTP MCP server) runs in the guest on `localhost:8000`, bearer-token protected. It's installed and starts with the VM. -2. **Exposure (inside the VM).** `tailscale serve` publishes it over the tailnet with HTTPS and a stable MagicDNS name — `https://agent-os.manatee-triceratops.ts.net/ → http://localhost:8000`. This is what keeps the URL stable as the VM moves hosts. Recreate with `tailscale serve --bg http://localhost:8000` if the mapping is ever lost (`tailscale serve status` to check). +2. **Exposure (inside the VM).** `tailscale serve` publishes it over the tailnet with HTTPS and a stable MagicDNS name — `https://agent-os.example.ts.net/ → http://localhost:8000`. This is what keeps the URL stable as the VM moves hosts. Recreate with `tailscale serve --bg http://localhost:8000` if the mapping is ever lost (`tailscale serve status` to check). 3. **Client (this plugin).** The `agent-os` plugin's `.mcp.json` registers the `windows-mcp` server from your userConfig via `${user_config.*}` substitution. Set the URL + token in plugin settings; there's nothing to edit in `~/.claude.json`. The registration: ```jsonc "windows-mcp": { @@ -131,7 +131,7 @@ Task patterns — open an app and act on it, run PowerShell headless, drive nati When something looks wrong and you need eyeballs, the old path still works: -- URL: `http://tootie:8006/vnc.html?autoconnect=1&resize=remote` +- URL: `http://nashost:8006/vnc.html?autoconnect=1&resize=remote` - Drive with `agent-browser` (see git history of this file for the canvas/dispatch helpers). Treat this strictly as a visual debugger. Once you've identified the problem, fix it through Windows-MCP — don't fall back into the per-char `press` loop just because noVNC is open. @@ -140,9 +140,9 @@ Treat this strictly as a visual debugger. Once you've identified the problem, fi These predate Windows-MCP but remain useful where the MCP path is awkward: -- **`/oem` install-time drop folder.** Host path `/mnt/cache/compose/windows/oem` **on tootie** is mounted as `\\host.lan\Data` *only during initial Windows install/OOBE*. Once setup completes, the SMB share is gone. Use only for first-boot provisioning. (Note: the VM moved hosts on 2026-05-31 — the old `/home/jmagar/compose/windows/oem` path on dookie no longer exists.) -- **RDP on `tootie:33890`.** Exposed by the `agent-os-win11` container in addition to noVNC. No agent-side RDP client installed today; install `freerdp` if a real interactive session is ever needed (now that Windows-MCP exists, the case for this is weaker). -- **SSH to the guest on `tootie:2222`.** The container forwards host port `2222` → guest port `22`. Confirmed exposed on the running container; whether sshd is actually running and configured inside the guest depends on first-boot provisioning. If it answers, this is the cleanest scripted side-channel — no `PowerShell` round-trip through the MCP server. +- **`/oem` install-time drop folder.** Host path `/mnt/cache/compose/windows/oem` **on nashost** is mounted as `\\host.lan\Data` *only during initial Windows install/OOBE*. Once setup completes, the SMB share is gone. Use only for first-boot provisioning. (Note: the VM moved hosts on 2026-05-31 — the old `/home/jmagar/compose/windows/oem` path on devhost no longer exists.) +- **RDP on `nashost:33890`.** Exposed by the `agent-os-win11` container in addition to noVNC. No agent-side RDP client installed today; install `freerdp` if a real interactive session is ever needed (now that Windows-MCP exists, the case for this is weaker). +- **SSH to the guest on `nashost:2222`.** The container forwards host port `2222` → guest port `22`. Confirmed exposed on the running container; whether sshd is actually running and configured inside the guest depends on first-boot provisioning. If it answers, this is the cleanest scripted side-channel — no `PowerShell` round-trip through the MCP server. ## Operating notes diff --git a/plugins/agent-os/skills/agent-os/references/tailscale.md b/plugins/agent-os/skills/agent-os/references/tailscale.md index 1f17935..4b3d841 100644 --- a/plugins/agent-os/skills/agent-os/references/tailscale.md +++ b/plugins/agent-os/skills/agent-os/references/tailscale.md @@ -2,10 +2,10 @@ Read this before bouncing the guest's Tailscale. -The guest runs its own `tailscaled`, and `ssh agent-os` connects **over that same Tailscale IP** (`100.109.125.128`). That creates a footgun: +The guest runs its own `tailscaled`, and `ssh agent-os` connects **over that same Tailscale IP** (`198.51.100.10`). That creates a footgun: - **Never run `tailscale down` (or restart the Tailscale service) over `ssh agent-os`.** The moment Tailscale drops, your SSH session is severed mid-command — so the follow-up `tailscale up` never executes and the node is left **stopped** (no Tailscale, MCP/gateway unreachable). - **Do Tailscale maintenance via the host port-forward instead:** `ssh -p "${CLAUDE_PLUGIN_OPTION_AGENT_OS_HOST_FORWARD_PORT:-2222}" "${CLAUDE_PLUGIN_OPTION_AGENT_OS_HOST_FORWARD_SSH:?set agent_os_host_forward_ssh in plugin settings}"`. This path goes through Docker/host forwarding, not the guest's Tailscale, so it survives `tailscale down/up`. - **Windows `tailscale up` won't run bare** when non-default prefs are set (this VM uses `--exit-node-allow-lan-access --unattended`). It errors and tells you to either re-list every non-default flag or use `tailscale up --reset`. Easiest reliable bounce: `Restart-Service Tailscale -Force` then `tailscale up --reset` (or re-list the flags). -- **"offline but reachable" is expected here.** The control plane can show the node `offline / not in map poll` while it's still reachable via a direct LAN route (`10.1.0.2`) — fine on-LAN (SSH/MCP work), but unreliable from a remote network. A clean `tailscale up` after a service restart re-establishes the map poll and clears it. +- **"offline but reachable" is expected here.** The control plane can show the node `offline / not in map poll` while it's still reachable via a direct LAN route (`192.0.2.2`) — fine on-LAN (SSH/MCP work), but unreliable from a remote network. A clean `tailscale up` after a service restart re-establishes the map poll and clears it. - If the gateway shows `agent-os_windows-mcp` as upstream discovery timed out, first check the guest's Tailscale is actually up with the configured host-forward SSH target, then reload the gateway. diff --git a/plugins/agent-os/skills/agent-os/references/troubleshooting.md b/plugins/agent-os/skills/agent-os/references/troubleshooting.md index 764ea75..acd92e3 100644 --- a/plugins/agent-os/skills/agent-os/references/troubleshooting.md +++ b/plugins/agent-os/skills/agent-os/references/troubleshooting.md @@ -13,5 +13,5 @@ Work top to bottom — most failures are "the VM/MCP isn't reachable," and the c | GUI app launches but synthetic input/focus unreliable (esp. GPUI windows) | `Start-Process` / non-interactive SSH not desktop-attached | Drive through Windows-MCP `PowerShell` with `WScript.Shell` `Run` + `AppActivate` + `SendKeys` (see "Driving native / GPUI desktop apps" in `references/recipes.md`). | | Downloaded `.exe`/`.ps1` blocked, SmartScreen/publisher prompt | Mark-of-the-Web on copied files | `Unblock-File` the file; set `SEE_MASK_NOZONECHECKS=1` before launching child exes. | | First run of an app raises a Windows Firewall prompt | new listener needs an allow rule | Pre-create a firewall rule, or accept once from the desktop (via noVNC) before expecting unattended runs. | -| Need to *see* the desktop to debug | — | noVNC at `http://tootie:8006/vnc.html?autoconnect=1&resize=remote` (visual only — fix through Windows-MCP). | +| Need to *see* the desktop to debug | — | noVNC at `http://nashost:8006/vnc.html?autoconnect=1&resize=remote` (visual only — fix through Windows-MCP). | | Installed software/files vanished after reboot | something written outside `/storage` | Only `/storage` (the VM disk) persists; the container is reachable again after `docker compose up -d`. Re-install if it landed on an ephemeral layer. | diff --git a/plugins/plexus/.codex-plugin/plugin.json b/plugins/plexus/.codex-plugin/plugin.json index 817f602..ef4f296 100644 --- a/plugins/plexus/.codex-plugin/plugin.json +++ b/plugins/plexus/.codex-plugin/plugin.json @@ -26,8 +26,8 @@ "Automation" ], "defaultPrompt": [ - "Use Plexus to inspect squirts before changing it.", - "Load live remote context for dookie.", + "Use Plexus to inspect edgehost before changing it.", + "Load live remote context for devhost.", "Summarize recent host activity." ], "brandColor": "#2563EB" diff --git a/plugins/plexus/CHANGELOG.md b/plugins/plexus/CHANGELOG.md index 1f68ee8..b059cd5 100644 --- a/plugins/plexus/CHANGELOG.md +++ b/plugins/plexus/CHANGELOG.md @@ -5,5 +5,5 @@ - Scaffolded Plexus as a remote-device memory plugin. - Added dual Claude Code and Codex plugin manifests. - Added `operating-remote` skill, `remote-context` command, helper script, and - first `squirts` REMOTE.md profile. + first `edgehost` REMOTE.md profile. - Added `bootstrap-plexus` skill for explicit persistent data initialization. diff --git a/plugins/plexus/README.md b/plugins/plexus/README.md index 9d441d9..53e3f45 100644 --- a/plugins/plexus/README.md +++ b/plugins/plexus/README.md @@ -15,7 +15,7 @@ touches the machine. host's context. - `scripts/remote-context.py` - helper that reads host memory and gathers live SSH/Tailscale/syslog context. -- `templates/remotes/squirts/REMOTE.md` - sample host memory draft. +- `templates/remotes/edgehost/REMOTE.md` - sample host memory draft. - `.claude-plugin/plugin.json` - Claude Code plugin manifest. - `.codex-plugin/plugin.json` - Codex plugin manifest. diff --git a/plugins/swag/README.md b/plugins/swag/README.md index 76434a3..503bf0a 100644 --- a/plugins/swag/README.md +++ b/plugins/swag/README.md @@ -1,6 +1,6 @@ # SWAG MCP - + [![PyPI](https://img.shields.io/pypi/v/swag-mcp)](https://pypi.org/project/swag-mcp/) [![ghcr.io](https://img.shields.io/badge/ghcr.io-jmagar%2Fswag--mcp-blue?logo=docker)](https://github.com/jmagar/swag-mcp/pkgs/container/swag-mcp) diff --git a/plugins/testing/skills/desktop-app-testing/README.md b/plugins/testing/skills/desktop-app-testing/README.md index d70d5ea..0830e7e 100644 --- a/plugins/testing/skills/desktop-app-testing/README.md +++ b/plugins/testing/skills/desktop-app-testing/README.md @@ -7,11 +7,11 @@ works/doesn't-work + UI/UX report. One of three sibling testing skills (`web-app ## When to invoke - "test my Windows app", "QA this .exe", "run my desktop build on agent-os and tell me what breaks", "click through the app", "review the desktop app's UX", "does my exe work". -- NOT for building/coding a desktop app, the user's personal Windows on steamy (`nircmd`), or +- NOT for building/coding a desktop app, the user's personal Windows on winhost (`nircmd`), or general agent-os VM driving (`agent-os`). ## How it works -Drives the agent-os VM (`agent-os-win11`, dockur/windows on tootie) through the +Drives the agent-os VM (`agent-os-win11`, dockur/windows on nashost) through the `agent-os_windows-mcp` gateway: transfer the build in → launch (`PowerShell Start-Process`) → enumerate controls from the UI Automation tree (`Snapshot`) → drive by element label (`Click`/`Type`) → detect crashes/hangs/error dialogs (`Process`, `Get-WinEvent`, `WaitFor`) → @@ -24,7 +24,7 @@ capture screenshots + tree dumps → structured report. - `references/report-format.md` — shared cross-platform report spec, run-dir layout, verdict words. ## Prerequisites -- agent-os VM running on tootie (preflight starts it if absent; ~5 min cold boot). +- agent-os VM running on nashost (preflight starts it if absent; ~5 min cold boot). - Lab gateway reachable with an execute-capable scope (`lab`/`lab:admin`) for drive actions. - The `.exe`/installer on this host or a URL the guest can fetch. @@ -37,4 +37,4 @@ work, so a UI/UX review is possible even before the gate is lifted. ## Companion skills - `agent-os` — general agent-os VM driver (this skill builds on it for testing). - `web-app-testing`, `android-app-testing` — same testing job, other targets, same report. -- `nircmd` — the user's personal Windows on steamy (different target; never used here). +- `nircmd` — the user's personal Windows on winhost (different target; never used here). diff --git a/plugins/testing/skills/desktop-app-testing/SKILL.md b/plugins/testing/skills/desktop-app-testing/SKILL.md index 922357f..129af35 100644 --- a/plugins/testing/skills/desktop-app-testing/SKILL.md +++ b/plugins/testing/skills/desktop-app-testing/SKILL.md @@ -1,6 +1,6 @@ --- name: desktop-app-testing -description: 'Use when the user wants to live-test a built Windows desktop application (.exe) end-to-end inside the agent-os Windows 11 VM and get a works/doesn''t-work + UI/UX report — launching the real binary and driving it, not writing test code. Triggers: "test my Windows app", "QA this .exe", "run my desktop build on agent-os and tell me what breaks", "click through the app", "review the desktop app''s UX", "does my exe work", "test the built binary in the Windows VM". Gets the .exe into the VM, launches it, enumerates controls from the UI Automation tree, drives every feature (click/type by element), watches for crashes/hangs/error dialogs, captures screenshots + control-tree dumps, and emits a structured report. Drives the agent-os VM via the Windows-MCP gateway. Sibling of web-app-testing and android-app-testing (shared report format). Does NOT fire for: building/coding a desktop app, the user''s personal Windows on steamy (use nircmd), or general agent-os VM driving (use agent-os).' +description: 'Use when the user wants to live-test a built Windows desktop application (.exe) end-to-end inside the agent-os Windows 11 VM and get a works/doesn''t-work + UI/UX report — launching the real binary and driving it, not writing test code. Triggers: "test my Windows app", "QA this .exe", "run my desktop build on agent-os and tell me what breaks", "click through the app", "review the desktop app''s UX", "does my exe work", "test the built binary in the Windows VM". Gets the .exe into the VM, launches it, enumerates controls from the UI Automation tree, drives every feature (click/type by element), watches for crashes/hangs/error dialogs, captures screenshots + control-tree dumps, and emits a structured report. Drives the agent-os VM via the Windows-MCP gateway. Sibling of web-app-testing and android-app-testing (shared report format). Does NOT fire for: building/coding a desktop app, the user''s personal Windows on winhost (use nircmd), or general agent-os VM driving (use agent-os).' --- # desktop-app-testing @@ -10,7 +10,7 @@ the build in, launch it, drive every feature, watch for crashes/hangs/error dial and emit a structured works/doesn't-work report. Companion to `web-app-testing` and `android-app-testing` — all three share one report format (`references/report-format.md`). -Drives the **agent-os** VM (container `agent-os-win11`, `dockur/windows` on `tootie`) through the +Drives the **agent-os** VM (container `agent-os-win11`, `dockur/windows` on `nashost`) through the `agent-os_windows-mcp` upstream on the Lab gateway. Builds on the `agent-os` skill (which is the general VM driver) but adds the testing harness: build transfer, feature enumeration, failure taxonomy, evidence pipeline, and the report. @@ -18,7 +18,7 @@ taxonomy, evidence pipeline, and the report. ## When to use vs. neighbors - **This skill** — a *test pass + report* over a desktop app's features and UX. - `agent-os` — general driving of the Windows VM (install software, run PowerShell, one-off tasks). -- `nircmd` — the user's PERSONAL Windows on steamy, not the sandbox. Never target steamy here. +- `nircmd` — the user's PERSONAL Windows on winhost, not the sandbox. Never target winhost here. ## ⚠️ Destructive-action gate — read first Every drive action (`PowerShell`, `Click`, `Type`, `App`, `Process`, …) is `destructive=true` and @@ -37,15 +37,15 @@ a GUI there crashes with `os error 1459` and screenshots come back blank), and i in a browser without rebuilding. Full recipe: `references/ssh-fallback-capture.md`. ## Prerequisites -- The **agent-os VM running** on tootie (the skill's preflight starts it if absent). +- The **agent-os VM running** on nashost (the skill's preflight starts it if absent). - The Lab gateway reachable with an execute-capable scope (for drive actions). - The built `.exe`/installer on this host (or a URL the guest can fetch). ## Workflow 1. **Preflight.** - - VM up? `ssh tootie 'docker ps --format "{{.Names}}" | grep agent-os-win11'`. If absent: - `ssh tootie 'cd /home/jmagar/compose/windows && docker compose up -d'` (boots existing install, + - VM up? `ssh nashost 'docker ps --format "{{.Names}}" | grep agent-os-win11'`. If absent: + `ssh nashost 'cd /home/jmagar/compose/windows && docker compose up -d'` (boots existing install, ~5 min cold; Windows-MCP auto-starts via an in-guest scheduled task). - MCP ready? Call `Screenshot {}` — an image back means ready. (Do NOT TCP-probe :8765, false negative.) @@ -53,7 +53,7 @@ in a browser without rebuilding. Full recipe: `references/ssh-fallback-capture.m gate is open; if `confirmation_required`, fix the gateway first. - Create run dir `~/.agents/docs/sessions/-desktop-test/run_/`. 2. **Transfer the build** into the VM (see `references/windows-mcp-calls.md`): HTTP-pull via - PowerShell `Invoke-WebRequest` (verified reachable) or SCP to the agent-os guest (`scp ... agent-os:` / host forward `tootie:2222`). `Unblock-File` the + PowerShell `Invoke-WebRequest` (verified reachable) or SCP to the agent-os guest (`scp ... agent-os:` / host forward `nashost:2222`). `Unblock-File` the copied binary; pre-create a firewall allow rule if it binds a port. 3. **Launch.** Prefer `PowerShell {command:"Start-Process 'C:\\...\\app.exe'; ...return PID"}` (Start-menu `App {name}` is unreliable for arbitrary binaries). Confirm a PID came back. diff --git a/plugins/testing/skills/desktop-app-testing/agents/openai.yaml b/plugins/testing/skills/desktop-app-testing/agents/openai.yaml index 3b9ffff..b108a76 100644 --- a/plugins/testing/skills/desktop-app-testing/agents/openai.yaml +++ b/plugins/testing/skills/desktop-app-testing/agents/openai.yaml @@ -1,4 +1,4 @@ interface: display_name: "Desktop App Testing" short_description: "Live-test a built Windows .exe inside the agent-os Windows 11 VM and produce a works/doesn't-work plus UI/UX report." - default_prompt: "Use $desktop-app-testing when the user asks to QA, click through, or review the UX of a built Windows .exe in the agent-os VM. Do not use it for coding/building desktop apps, the user's steamy desktop, or general agent-os administration." + default_prompt: "Use $desktop-app-testing when the user asks to QA, click through, or review the UX of a built Windows .exe in the agent-os VM. Do not use it for coding/building desktop apps, the user's winhost desktop, or general agent-os administration." diff --git a/plugins/testing/skills/desktop-app-testing/references/windows-mcp-calls.md b/plugins/testing/skills/desktop-app-testing/references/windows-mcp-calls.md index 9ce7643..cf9572c 100644 --- a/plugins/testing/skills/desktop-app-testing/references/windows-mcp-calls.md +++ b/plugins/testing/skills/desktop-app-testing/references/windows-mcp-calls.md @@ -1,7 +1,7 @@ # Windows-MCP call patterns (agent-os VM via the Lab gateway) Verified live 2026-05-29 after the destructive-gate fix. The desktop target is the **agent-os** -Windows 11 VM (container `agent-os-win11`, `dockur/windows` on host `tootie`), driven through the +Windows 11 VM (container `agent-os-win11`, `dockur/windows` on host `nashost`), driven through the `agent-os_windows-mcp` upstream on the Lab gateway. ## Invocation surface @@ -15,7 +15,7 @@ async () => { ``` Outside Code Mode the same server may appear as direct `mcp__windows-mcp__*` tools, via a gateway `execute` wrapper, or as OpenAI/Codex app tools. **Canonical upstream tool names + params are below** -— adapt only the wrapper to whatever surface is live. Do NOT target `steamy-windows-mcp` (that's the +— adapt only the wrapper to whatever surface is live. Do NOT target `winhost-windows-mcp` (that's the user's personal desktop). ## ⚠️ Destructive-action gate (critical) @@ -35,11 +35,11 @@ docker-compose.yml restart` (the dev container bind-mounts `./bin/labby`). Read-only tools (`Screenshot`, `Snapshot`) are never gated. ## Preflight / readiness -1. VM up? `ssh tootie 'docker ps --format "{{.Names}}" | grep agent-os-win11'`. If absent: - `ssh tootie 'cd /home/jmagar/compose/windows && docker compose up -d'` (storage is +1. VM up? `ssh nashost 'docker ps --format "{{.Names}}" | grep agent-os-win11'`. If absent: + `ssh nashost 'cd /home/jmagar/compose/windows && docker compose up -d'` (storage is pre-provisioned → boots existing install, ~5 min cold). Windows-MCP starts via a **scheduled task** inside the guest — it comes up on its own after boot. -2. MCP reachable? **Do NOT** TCP-probe `agent-os.tootie.tv:8765` from the host (false-negative — wrong +2. MCP reachable? **Do NOT** TCP-probe `agent-os.example.internal:8765` from the host (false-negative — wrong interface). The real readiness check is a `Screenshot {}` call returning an image. ## Tool reference (canonical names + params) @@ -89,7 +89,7 @@ The `\\host.lan\Data` SMB share is install-time only. Post-OOBE, transfer by eit - **HTTP-pull via PowerShell** (verified reachable — guest→host `True`): serve the build on a host (`python -m http.server`) and `PowerShell {command:"Invoke-WebRequest -Uri 'http://:PORT/app.exe' -OutFile \"$env:USERPROFILE\\Desktop\\app.exe\"; Unblock-File \"$env:USERPROFILE\\Desktop\\app.exe\""}`. -- **SCP** to the guest: `scp -P 2222 app.exe docker@:` (port 2222 forwards to guest sshd). +- **SCP** to the guest: `scp -P 2222 app.exe docker@:` (port 2222 forwards to guest sshd). Always `Unblock-File` copied binaries (MOTW/SmartScreen), and pre-create a firewall allow rule if the app binds a port (first-bind raises a desktop prompt that stalls unattended runs). diff --git a/plugins/vibin/skills/chrome/README.md b/plugins/vibin/skills/chrome/README.md index e33762e..985aeae 100644 --- a/plugins/vibin/skills/chrome/README.md +++ b/plugins/vibin/skills/chrome/README.md @@ -18,4 +18,4 @@ The user asks about "my chrome", "my tabs", a tab they have open, etc. — anyth - `scripts/cdp-shot.ps1` — tab screenshot ## Setup -Remote Chrome needs `chrome.exe --remote-debugging-port=9222 --user-data-dir=C:\\chrome-debug`. On the default host (`steamy-wsl`) there's a "Chrome (debug)" desktop shortcut wired up for this. +Remote Chrome needs `chrome.exe --remote-debugging-port=9222 --user-data-dir=C:\\chrome-debug`. On the default host (`winhost-wsl`) there's a "Chrome (debug)" desktop shortcut wired up for this. diff --git a/plugins/vibin/skills/chrome/SKILL.md b/plugins/vibin/skills/chrome/SKILL.md index 2db7f6f..753ea86 100644 --- a/plugins/vibin/skills/chrome/SKILL.md +++ b/plugins/vibin/skills/chrome/SKILL.md @@ -10,7 +10,7 @@ Talk to a real, running Chrome instance on a remote machine via CDP (Chrome DevT ## Defaults (override via env vars) ```bash -SSH_TARGET="${CHROME_HOST:-steamy-wsl}" +SSH_TARGET="${CHROME_HOST:-winhost-wsl}" CHROME_PORT="${CHROME_PORT:-9222}" POWERSHELL="${CHROME_POWERSHELL:-/mnt/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe}" REMOTE_DIR="${CHROME_REMOTE_DIR:-/mnt/c/screens}" @@ -32,7 +32,7 @@ ssh "$SSH_TARGET" "$POWERSHELL -NoProfile -Command \"try { Invoke-RestMethod -Ur If you see `CDP_DOWN`, keep the scope narrow: -- For explicit "my Chrome", "my tabs", cookies, or steamy personal-session tasks, ask the user to start the debug Chrome and open the target page in that window. +- For explicit "my Chrome", "my tabs", cookies, or winhost personal-session tasks, ask the user to start the debug Chrome and open the target page in that window. - For generic web automation or sandbox browser work, switch to the appropriate skill instead of stretching this one. Everything below assumes the selected CDP endpoint is live. diff --git a/plugins/vibin/skills/clipboard/README.md b/plugins/vibin/skills/clipboard/README.md index 68faf4c..f20f5d0 100644 --- a/plugins/vibin/skills/clipboard/README.md +++ b/plugins/vibin/skills/clipboard/README.md @@ -9,7 +9,7 @@ Push text to / pull text from Jacob's Windows clipboard over SSH. - Hardened against shell injection in the NirCmd branch (any `$`, backtick, quote, or backslash forces the temp-file path) ## When to invoke -"copy this to my clipboard", "push X to my clipboard", "what's on my clipboard", "read my clipboard". Always targets `steamy-wsl` regardless of which host this Claude session is running on. +"copy this to my clipboard", "push X to my clipboard", "what's on my clipboard", "read my clipboard". Always targets `winhost-wsl` regardless of which host this Claude session is running on. ## Why it matters You can't paste images *into* this Claude session over SSH, but you can shove any text out onto the user's clipboard for them to Ctrl+V wherever. diff --git a/plugins/vibin/skills/homelab-map/SKILL.md b/plugins/vibin/skills/homelab-map/SKILL.md index 0d97ab7..cb2fdab 100644 --- a/plugins/vibin/skills/homelab-map/SKILL.md +++ b/plugins/vibin/skills/homelab-map/SKILL.md @@ -1,6 +1,6 @@ --- name: homelab-map -description: Load or refresh the authoritative personal homelab context layer whenever a prompt concerns named hosts, service placement, topology, storage, networking, proxies, MCP services, backups, or current infrastructure drift. Use for TOOTIE, DOOKIE, Squirts, Shart, Steamy, Vivobook, WillyNet, "where does this service run", "map the homelab", "refresh inventory", or "check declared versus observed state". Prefer version-controlled configuration for desired state, the ~/docs generators for observed domain inventories, and ~/.homelab for the compiled overview. +description: Load or refresh the authoritative personal homelab context layer whenever a prompt concerns named hosts, service placement, topology, storage, networking, proxies, MCP services, backups, or current infrastructure drift. Use for NASHOST, DEVHOST, Edgehost, Backuphost, Winhost, Laptophost, HomeLAN, "where does this service run", "map the homelab", "refresh inventory", or "check declared versus observed state". Prefer version-controlled configuration for desired state, the ~/docs generators for observed domain inventories, and ~/.homelab for the compiled overview. allowed-tools: Read, Bash --- @@ -10,12 +10,12 @@ Use the homelab knowledge system as a layered context source, not a static list ## Stable host roles -- **TOOTIE**: primary Unraid storage and application host; also owns the DOOKIE VM. -- **DOOKIE**: development, AI, MCP, indexing, and automation hub. -- **Squirts**: edge and utility services, including SWAG and authentication-adjacent services. -- **Shart**: backup and replication target. -- **Steamy / steamy-wsl**: Windows and WSL GPU workstation surfaces. -- **Vivobook / vivobook-wsl**: mobile development workstation surfaces. +- **NASHOST**: primary Unraid storage and application host; also owns the DEVHOST VM. +- **DEVHOST**: development, AI, MCP, indexing, and automation hub. +- **Edgehost**: edge and utility services, including SWAG and authentication-adjacent services. +- **Backuphost**: backup and replication target. +- **Winhost / winhost-wsl**: Windows and WSL GPU workstation surfaces. +- **Laptophost / laptophost-wsl**: mobile development workstation surfaces. Treat exact versions, counts, IPs, ports, health, and service placement as point-in-time facts that require current evidence. @@ -78,7 +78,7 @@ Report the two conflicting sources, their observation times, and which source ow ## Operating rules -- `*.tootie.tv` identifies a SWAG route, not necessarily a service running on TOOTIE. +- `*.nashost.tv` identifies a SWAG route, not necessarily a service running on NASHOST. - Use host names exactly as configured. - Public SSH is not assumed; prefer the configured Tailscale and LABBY paths. - Do not expose secrets from generated JSON, environment files, or live commands. diff --git a/plugins/vibin/skills/homelab-map/scripts/generate-homelab-report.py b/plugins/vibin/skills/homelab-map/scripts/generate-homelab-report.py index 57fa12d..e6884d7 100755 --- a/plugins/vibin/skills/homelab-map/scripts/generate-homelab-report.py +++ b/plugins/vibin/skills/homelab-map/scripts/generate-homelab-report.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -"""Generate the WillyNet homelab report from live host checks. +"""Generate the HomeLAN homelab report from live host checks. The script intentionally uses only stdlib Python plus non-interactive SSH so it can run outside an agent session. It avoids secrets and records collection @@ -71,45 +71,45 @@ class HostSnapshot: HOSTS = [ - HostSpec("tootie", "tootie", "tootie", "Primary NAS / app server", "Unraid", ssh_port=29229, zfs=True, unraid=True), - HostSpec("dookie", "dookie", "dookie", "Dev / AI / MCP hub", "Linux KVM guest on tootie", zfs=False), - HostSpec("squirts", "squirts", "squirts", "Edge services", "Ubuntu", zfs=True), - HostSpec("shart", "shart", "shart", "ZFS backup target", "Unraid", zfs=True, unraid=True), - HostSpec("steamy", "steamy / steamy-wsl", "steamy-wsl", "GPU workloads", "Windows 11 + WSL2"), - HostSpec("vivobook", "vivobook / vivobook-wsl", "vivobook-wsl", "Mobile dev laptop", "Windows 11 + WSL2"), + HostSpec("nashost", "nashost", "nashost", "Primary NAS / app server", "Unraid", ssh_port=29229, zfs=True, unraid=True), + HostSpec("devhost", "devhost", "devhost", "Dev / AI / MCP hub", "Linux KVM guest on nashost", zfs=False), + HostSpec("edgehost", "edgehost", "edgehost", "Edge services", "Ubuntu", zfs=True), + HostSpec("backuphost", "backuphost", "backuphost", "ZFS backup target", "Unraid", zfs=True, unraid=True), + HostSpec("winhost", "winhost / winhost-wsl", "winhost-wsl", "GPU workloads", "Windows 11 + WSL2"), + HostSpec("laptophost", "laptophost / laptophost-wsl", "laptophost-wsl", "Mobile dev laptop", "Windows 11 + WSL2"), ] SERVICE_HINTS = { - "tootie": [ + "nashost": [ "plex", "sonarr", "radarr", "bazarr", "prowlarr", "qbittorrent", "sabnzbd", "tautulli", "immich", "audiobookshelf", "kavita", "navidrome", "minio", "loggifly", "notifiarr", "apprise-api", "olivetin", "zipline", "agent-os-win11", ], - "dookie": [ + "devhost": [ "axon", "axon-qdrant", "axon-tei", "axon-chrome", "syslog-mcp", "arcane-mcp", "unraid-mcp", "gotify-mcp", "unifi-mcp", "tailscale-mcp", "apprise-mcp", "labby", ], - "squirts": [ + "edgehost": [ "swag", "authelia", "adguard", "gotify", "vaultwarden", "paperless", "linkding", "karakeep", "bytestash", "memos", "radicale", "searxng", "dockge", "dozzle", "rustdesk", "multi-scrobbler", "maloja", ], - "shart": ["arcane-agent", "portainer_agent", "dockersocket"], - "steamy": ["crawl4r-qdrant", "arcane-agent"], - "vivobook": ["arcane-agent"], + "backuphost": ["arcane-agent", "portainer_agent", "dockersocket"], + "winhost": ["crawl4r-qdrant", "arcane-agent"], + "laptophost": ["arcane-agent"], } MCP_HINTS = [ - ("syslog-mcp", "dookie", "1514 TCP/UDP, 3100 HTTP"), - ("arcane-mcp", "dookie", "44332"), - ("unraid-mcp", "dookie", "40010"), - ("gotify-mcp", "dookie", "40020"), - ("unifi-mcp", "dookie", "40030"), - ("tailscale-mcp", "dookie", "40040"), - ("apprise-mcp", "dookie", "40050"), - ("example-mcp", "dookie", "40060"), - ("swag-mcp", "squirts", "8012 localhost binding"), + ("syslog-mcp", "devhost", "1514 TCP/UDP, 3100 HTTP"), + ("arcane-mcp", "devhost", "44332"), + ("unraid-mcp", "devhost", "40010"), + ("gotify-mcp", "devhost", "40020"), + ("unifi-mcp", "devhost", "40030"), + ("tailscale-mcp", "devhost", "40040"), + ("apprise-mcp", "devhost", "40050"), + ("example-mcp", "devhost", "40060"), + ("swag-mcp", "edgehost", "8012 localhost binding"), ] @@ -208,7 +208,7 @@ def collect_host(spec: HostSpec) -> HostSnapshot: df = ssh_command(spec, "df -h /mnt/user /mnt/cache 2>/dev/null || df -h /mnt/user 2>/dev/null || true") if df.ok and df.stdout: snap.df = df.stdout.splitlines() - if spec.key == "tootie": + if spec.key == "nashost": parity = ssh_command( spec, "mdcmd status 2>/dev/null | egrep 'mdNumDisabled|diskName\\.0|rdevName\\.0|diskSize\\.0' || true", @@ -217,7 +217,7 @@ def collect_host(spec: HostSpec) -> HostSnapshot: lsblk = ssh_command(spec, "lsblk -d -o NAME,SIZE,MODEL,TYPE 2>/dev/null | sed -n '1,40p' || true") snap.extras["lsblk"] = lsblk.stdout if lsblk.ok else "" - if spec.key == "squirts": + if spec.key == "edgehost": swag = ssh_command( spec, "d=/mnt/appdata/swag/nginx/proxy-confs; " @@ -235,7 +235,7 @@ def collect_host(spec: HostSpec) -> HostSnapshot: def lan_ip(snapshot: HostSnapshot) -> str: for line in snapshot.ipv4: for token in line.split(): - if token.startswith("10.1.0."): + if token.startswith("192.0.2."): return token.split("/")[0] return "" @@ -332,7 +332,7 @@ def snapshot_to_dict(snapshot: HostSnapshot) -> dict[str, object]: def report_payload(snapshots: dict[str, HostSnapshot], generated_at: dt.datetime) -> dict[str, object]: - swag_configs = snapshots["squirts"].extras.get("swag_configs", "") + swag_configs = snapshots["edgehost"].extras.get("swag_configs", "") swag_names = [line for line in swag_configs.splitlines() if line.strip()] total_containers = sum(len(s.containers) for s in snapshots.values()) @@ -373,46 +373,46 @@ def report_payload(snapshots: dict[str, HostSnapshot], generated_at: dt.datetime "generated_at_display": generated_at.strftime("%Y-%m-%d %H:%M:%S %Z"), "generator": "skills/homelab-map/scripts/generate-homelab-report.py", "collection_method": "non-interactive SSH, Docker CLI, ZFS CLI, Unraid shell commands, and SWAG config files", - "network": "WillyNet / 10.1.0.0/24 plus Tailscale mesh", - "primary_public_domain": "*.tootie.tv via SWAG on squirts", + "network": "HomeLAN / 192.0.2.0/24 plus Tailscale mesh", + "primary_public_domain": "*.example.internal via SWAG on edgehost", "overview": { "total_nodes": len(snapshots), "total_containers_running": total_containers, "active_swag_proxy_configs": len(swag_names) if swag_names else None, }, - "nodes": [snapshot_to_dict(snapshots[key]) for key in ["tootie", "dookie", "squirts", "shart", "steamy", "vivobook"]], + "nodes": [snapshot_to_dict(snapshots[key]) for key in ["nashost", "devhost", "edgehost", "backuphost", "winhost", "laptophost"]], "service_summary": service_summary, "mcp_servers": mcp_servers, "swag_proxy_configs": swag_names, "collection_errors": collection_errors, "known_follow_up_checks": [ - "If tootie parity excerpt shows diskName.0= or diskSize.0=0, parity is not assigned.", + "If nashost parity excerpt shows diskName.0= or diskSize.0=0, parity is not assigned.", "If Arcane marks a host offline but SSH works, reconcile Arcane environment registration.", "If an expected service appears under missing, check whether it moved, stopped, or changed container name.", "Confirm backup freshness from Sanoid/Syncoid logs; this report does not prove backup success.", ], "key_urls": [ - {"service": "Unraid Web UI", "url": "http://10.1.0.2:6969"}, - {"service": "Syslog MCP", "url": "http://dookie:3100"}, - {"service": "Arcane UI", "url": "https://arcane.tootie.tv"}, - {"service": "Arcane MCP", "url": "http://dookie:44332"}, - {"service": "Unraid MCP", "url": "http://dookie:40010"}, - {"service": "Plex", "url": "http://10.1.0.2:32400"}, - {"service": "Windows sandbox noVNC", "url": "http://tootie:8006"}, - {"service": "Windows sandbox RDP", "url": "tootie:33890"}, + {"service": "Unraid Web UI", "url": "http://192.0.2.2:6969"}, + {"service": "Syslog MCP", "url": "http://devhost:3100"}, + {"service": "Arcane UI", "url": "https://arcane.example.internal"}, + {"service": "Arcane MCP", "url": "http://devhost:44332"}, + {"service": "Unraid MCP", "url": "http://devhost:40010"}, + {"service": "Plex", "url": "http://192.0.2.2:32400"}, + {"service": "Windows sandbox noVNC", "url": "http://nashost:8006"}, + {"service": "Windows sandbox RDP", "url": "nashost:33890"}, ], } def render_report(snapshots: dict[str, HostSnapshot], generated_at: dt.datetime) -> str: - swag_configs = snapshots["squirts"].extras.get("swag_configs", "") + swag_configs = snapshots["edgehost"].extras.get("swag_configs", "") swag_names = [line for line in swag_configs.splitlines() if line.strip()] total_containers = sum(len(s.containers) for s in snapshots.values()) - tootie_df = "\n".join(snapshots["tootie"].df) - tootie_parity = snapshots["tootie"].extras.get("parity", "").strip() + nashost_df = "\n".join(snapshots["nashost"].df) + nashost_parity = snapshots["nashost"].extras.get("parity", "").strip() node_rows = [] - for key in ["tootie", "dookie", "squirts", "shart", "steamy", "vivobook"]: + for key in ["nashost", "devhost", "edgehost", "backuphost", "winhost", "laptophost"]: snap = snapshots[key] node_rows.append([ snap.spec.label, @@ -444,7 +444,7 @@ def render_report(snapshots: dict[str, HostSnapshot], generated_at: dt.datetime) for error in snap.errors: collection_errors.append(f"{snap.spec.label}: {error}") - return f"""# WillyNet Homelab - Infrastructure Documentation + return f"""# HomeLAN Homelab - Infrastructure Documentation > Generated: {generated_at.strftime('%Y-%m-%d %H:%M:%S %Z')} > Generator: `skills/homelab-map/scripts/generate-homelab-report.py` @@ -458,8 +458,8 @@ def render_report(snapshots: dict[str, HostSnapshot], generated_at: dt.datetime) ["Total nodes", str(len(snapshots))], ["Total containers running", str(total_containers)], ["Active SWAG proxy configs", str(len(swag_names)) if swag_names else "not collected"], - ["Network", "WillyNet / 10.1.0.0/24 plus Tailscale mesh"], - ["Primary public domain", "*.tootie.tv via SWAG on squirts"], + ["Network", "HomeLAN / 192.0.2.0/24 plus Tailscale mesh"], + ["Primary public domain", "*.example.internal via SWAG on edgehost"], ])} ## Collection Notes @@ -492,41 +492,41 @@ def render_report(snapshots: dict[str, HostSnapshot], generated_at: dt.datetime) ## Storage Architecture -### tootie - Unraid Array and Cache +### nashost - Unraid Array and Cache ```text -{tootie_df or 'not collected'} +{nashost_df or 'not collected'} ``` Parity status excerpt: ```text -{tootie_parity or 'not collected'} +{nashost_parity or 'not collected'} ``` Block devices excerpt: ```text -{snapshots["tootie"].extras.get("lsblk", "not collected")} +{snapshots["nashost"].extras.get("lsblk", "not collected")} ``` ### ZFS Pools -#### tootie +#### nashost -{format_zpool(snapshots["tootie"])} +{format_zpool(snapshots["nashost"])} -#### squirts +#### edgehost -{format_zpool(snapshots["squirts"])} +{format_zpool(snapshots["edgehost"])} -#### shart +#### backuphost -{format_zpool(snapshots["shart"])} +{format_zpool(snapshots["backuphost"])} ## Reverse Proxy & Public Services -SWAG is expected on `squirts`. Active proxy config count is generated from `/mnt/appdata/swag/nginx/proxy-confs`. +SWAG is expected on `edgehost`. Active proxy config count is generated from `/mnt/appdata/swag/nginx/proxy-confs`. {table(["Metric", "Value"], [ ["Active config files", str(len(swag_names)) if swag_names else "not collected"], @@ -535,16 +535,16 @@ def render_report(snapshots: dict[str, HostSnapshot], generated_at: dt.datetime) ## AI / RAG / Agent Stack -### Axon on dookie +### Axon on devhost {format_container_table(HostSnapshot( - spec=snapshots["dookie"].spec, - containers=[c for c in snapshots["dookie"].containers if c["name"].startswith("axon") or c["name"] in {"labby", "agentmemory-iii-engine-1"}], + spec=snapshots["devhost"].spec, + containers=[c for c in snapshots["devhost"].containers if c["name"].startswith("axon") or c["name"] in {"labby", "agentmemory-iii-engine-1"}], ))} -### GPU Inference on steamy +### GPU Inference on winhost -{format_container_table(snapshots["steamy"])} +{format_container_table(snapshots["winhost"])} ## MCP Server Ecosystem @@ -552,33 +552,33 @@ def render_report(snapshots: dict[str, HostSnapshot], generated_at: dt.datetime) ## Backup Strategy -- `shart` is the ZFS receive target. +- `backuphost` is the ZFS receive target. - Backup job freshness is not inferred by this script. Check Sanoid/Syncoid logs or Gotify notifications before relying on current backup health. -- `shart` currently reports these ZFS pools: +- `backuphost` currently reports these ZFS pools: -{format_zpool(snapshots["shart"])} +{format_zpool(snapshots["backuphost"])} ## Monitoring & Notifications -- `syslog-mcp` is expected on dookie at ports 1514 and 3100. -- Gotify is expected on squirts. +- `syslog-mcp` is expected on devhost at ports 1514 and 3100. +- Gotify is expected on edgehost. - This generator does not query application APIs or notification contents; it records container and host state only. ## Virtual Machines -- `dookie` is treated as the active Linux KVM guest hosted on tootie. -- VM inventory is not inferred by this script yet. Add `virsh list --all` collection on tootie if VM state needs to be authoritative here. +- `devhost` is treated as the active Linux KVM guest hosted on nashost. +- VM inventory is not inferred by this script yet. Add `virsh list --all` collection on nashost if VM state needs to be authoritative here. ## Security Posture -- Public entrypoint: SWAG on squirts. +- Public entrypoint: SWAG on edgehost. - Inter-node access: Tailscale and LAN SSH aliases. - Vulnerability scan data is not generated here. Run Arcane/Trivy before acting on CVE status. -- tootie parity status is collected above; an empty parity slot remains a critical risk when observed. +- nashost parity status is collected above; an empty parity slot remains a critical risk when observed. ## Known Issues & Follow-Up Checks -- If tootie parity excerpt shows `diskName.0=` or `diskSize.0=0`, parity is not assigned. +- If nashost parity excerpt shows `diskName.0=` or `diskSize.0=0`, parity is not assigned. - If Arcane marks a host offline but SSH works, reconcile Arcane environment registration. - If an expected service appears under "not observed", check whether it moved, stopped, or changed container name. - Confirm backup freshness from Sanoid/Syncoid logs; this report does not prove backup success. @@ -586,14 +586,14 @@ def render_report(snapshots: dict[str, HostSnapshot], generated_at: dt.datetime) ## Appendix: Key URLs {table(["Service", "URL"], [ - ["Unraid Web UI", "http://10.1.0.2:6969"], - ["Syslog MCP", "http://dookie:3100"], - ["Arcane UI", "https://arcane.tootie.tv"], - ["Arcane MCP", "http://dookie:44332"], - ["Unraid MCP", "http://dookie:40010"], - ["Plex", "http://10.1.0.2:32400"], - ["Windows sandbox noVNC", "http://tootie:8006"], - ["Windows sandbox RDP", "tootie:33890"], + ["Unraid Web UI", "http://192.0.2.2:6969"], + ["Syslog MCP", "http://devhost:3100"], + ["Arcane UI", "https://arcane.example.internal"], + ["Arcane MCP", "http://devhost:44332"], + ["Unraid MCP", "http://devhost:40010"], + ["Plex", "http://192.0.2.2:32400"], + ["Windows sandbox noVNC", "http://nashost:8006"], + ["Windows sandbox RDP", "nashost:33890"], ])} """ @@ -615,7 +615,7 @@ def render_html_viewer(payload: dict[str, object]) -> str: - WillyNet Homelab + HomeLAN Homelab