sam-4screen-desktop 2026-9-16:11:18:7
This commit is contained in:
@@ -17,8 +17,8 @@ aliases:
|
|||||||
|
|
||||||
# Paseo Pi GUI Tool
|
# Paseo Pi GUI Tool
|
||||||
|
|
||||||
**Paseo 0.7.2 — multi-agent orchestration GUI**, self-hosted in **Docker on .13**, driving real
|
**Paseo 0.7.2 — multi-agent orchestration GUI**, running **natively on .13** (no Docker), driving the host's
|
||||||
**pi agents (0.82.1)** through **OmniRoute**. Built 2026-09-09/10.
|
**pi (0.82.1)** with full filesystem access, LLM through **OmniRoute**. Native migration 2026-09-16.
|
||||||
|
|
||||||
**Interactive map:** [maps.lab → Paseo](https://maps.lab.audasmedia.com.au/paseo/docs/system-map.html) ·
|
**Interactive map:** [maps.lab → Paseo](https://maps.lab.audasmedia.com.au/paseo/docs/system-map.html) ·
|
||||||
**Repo:** [sam/paseo](https://gitea.lab.audasmedia.com.au/sam/paseo) (public, README + diagram)
|
**Repo:** [sam/paseo](https://gitea.lab.audasmedia.com.au/sam/paseo) (public, README + diagram)
|
||||||
@@ -26,10 +26,11 @@ aliases:
|
|||||||
## What it is
|
## What it is
|
||||||
|
|
||||||
A client-server **orchestration layer for AI coding agents**:
|
A client-server **orchestration layer for AI coding agents**:
|
||||||
- **Daemon** (Node.js) runs on .13, spawns and manages agent processes, streams output over WebSocket.
|
- **Daemon** runs natively on .13 (systemd user service), spawns and manages agent processes, streams output over WebSocket.
|
||||||
- **Clients** — CLI (`paseo` on .27/.51), web UI (:6767), mobile — attach locally or over LAN/Tailscale.
|
- **Clients** — CLI (`paseo` on .27/.51), web UI (:6767), mobile — attach over LAN/Tailscale.
|
||||||
- **Pi is a first-class provider**: the daemon spawns `pi --mode rpc` (pi 0.82.1 baked into the image — no Nix changes to any host pi).
|
- **Pi is a first-class provider**: the daemon spawns the **host's own pi 0.82.1** via `pi --mode rpc` (Nix-managed, no image bake-in).
|
||||||
- **Local-first**: agents run in our environment; no telemetry.
|
- **No sandbox — full control**: the daemon runs as user `sam`, so agents reach the real filesystem directly (projects, vault, photos). This is the autonomy model: pi's own guardrails (filechanges, approvals) protect the work, not a container boundary.
|
||||||
|
- **Local-first**: no telemetry.
|
||||||
|
|
||||||
```mermaid
|
```mermaid
|
||||||
flowchart LR
|
flowchart LR
|
||||||
@@ -38,7 +39,7 @@ flowchart LR
|
|||||||
D51[".51 laptop<br/>paseo CLI"]
|
D51[".51 laptop<br/>paseo CLI"]
|
||||||
M["Mobile / web UI<br/>browser"]
|
M["Mobile / web UI<br/>browser"]
|
||||||
end
|
end
|
||||||
subgraph S13["Paseo daemon (.13 — Docker, always-on)"]
|
subgraph S13["Paseo daemon (.13 — native, always-on)"]
|
||||||
D["Paseo daemon 0.7.2<br/>:6767 · auth"]
|
D["Paseo daemon 0.7.2<br/>:6767 · auth"]
|
||||||
PI["pi agent 0.82.1<br/>pi --mode rpc"]
|
PI["pi agent 0.82.1<br/>pi --mode rpc"]
|
||||||
CFG["pi config<br/>/home/paseo/.pi"]
|
CFG["pi config<br/>/home/paseo/.pi"]
|
||||||
@@ -64,7 +65,7 @@ flowchart LR
|
|||||||
# client (on .27/.51 once)
|
# client (on .27/.51 once)
|
||||||
npm install -g @getpaseo/cli@0.7.2
|
npm install -g @getpaseo/cli@0.7.2
|
||||||
export PASEO_HOST=192.168.20.13:6767
|
export PASEO_HOST=192.168.20.13:6767
|
||||||
export PASEO_PASSWORD=<from .13: /home/sam/Docker/Containers/paseo/.env>
|
export PASEO_PASSWORD=<from .13: ~/.config/environment.d/10-secrets.conf>
|
||||||
|
|
||||||
paseo status # daemon reachable
|
paseo status # daemon reachable
|
||||||
paseo ls # running agents
|
paseo ls # running agents
|
||||||
@@ -80,24 +81,25 @@ Web UI: `http://192.168.20.13:6767` (password) · mobile: browser over LAN/Tails
|
|||||||
|
|
||||||
| Area | Location |
|
| Area | Location |
|
||||||
|---|---|
|
|---|---|
|
||||||
| Compose + config + secrets | `.13` `/home/sam/Docker/Containers/paseo/` (`docker-compose.yml`, `Dockerfile`, `.env` chmod 600) |
|
| Native daemon | `.13` systemd user service `paseo.service` (enabled) — `0.0.0.0:6767` |
|
||||||
| pi config (persisted) | `.13` `…/paseo/paseo-home/.pi/` (settings.json, models.json, auth.json) |
|
| pi (host Nix 0.82.1) | `.13` `/etc/profiles/per-user/sam/bin/pi` — used directly |
|
||||||
| Demo workspace | `.13` `…/paseo/workspace/demo/` |
|
| Paseo config | `.13` `~/.paseo/` |
|
||||||
|
| **Real projects** | `.13` **`~/paseo/projects/<name>/`** — direct FS access, no mounts |
|
||||||
|
| Obsidian vault / photos | directly accessible (agent runs as `sam`) |
|
||||||
| Docs + diagram + map | Gitea `sam/paseo` → `docs/` → maps.lab (`/paseo/docs/`) |
|
| Docs + diagram + map | Gitea `sam/paseo` → `docs/` → maps.lab (`/paseo/docs/`) |
|
||||||
| Client CLI | `.27` `~/.local/share/npm-global` (`paseo` 0.7.2) |
|
| Client CLIs | `.27`/`.51` `~/.local/share/npm-global` (`paseo` 0.7.2) |
|
||||||
|
| Legacy Docker backup | `.13` `~/paseo/docker-legacy-backup-20260916104024/` (delete when confident) |
|
||||||
|
|
||||||
## Config notes (no secrets)
|
## Config notes (no secrets)
|
||||||
|
|
||||||
- **Image**: `ghcr.io/getpaseo/paseo:latest` base + `USER root` stage installing
|
- **Daemon**: native, `systemctl --user {start,stop,status} paseo`; logs `journalctl --user -u paseo`. Start cmd:
|
||||||
`@earendil-works/pi-coding-agent@0.82.1` + `omniroute-pi-ext-integration`, drops to `USER paseo`.
|
`paseo start --listen 0.0.0.0:6767 --web-ui` (daemonized; `--foreground` is buggy with PID lock).
|
||||||
Reason: base image runs as `paseo` (uid 1000); `/usr/local` is root-owned → npm -g must run at build time.
|
- **pi**: host Nix pi 0.82.1 with the host `~/.pi/` + `~/.agents` (Gitea `pi-config` clone) — full skill set, per-project `.pi/settings.json` selects which load.
|
||||||
- **LLM**: container pi → `omni` provider → `http://192.168.20.13:20129/v1` (OmniRoute, LAN IP reachable
|
- **LLM**: pi → `omni` provider → `http://192.168.20.13:20129/v1` (OmniRoute). Default model = combo
|
||||||
from the bridge net; `host.docker.internal` also mapped). Default model set to the fixed combo:
|
`default-opencode-go-ds-flash` (OpenRouter → DeepSeek → OpenCode-Go) — models.json reordered so it's first.
|
||||||
`default-opencode-go-ds-flash` (OpenRouter → DeepSeek → OpenCode-Go).
|
- **Secrets**: `PASEO_PASSWORD`/`PASEO_HOST` in `.13` `~/.config/environment.d/10-secrets.conf` (600); mirrored to .27/.51 secrets. Never in docs/repos.
|
||||||
- **Secrets** live only in `.env` (600) — `PASEO_PASSWORD`, `OMNIROUTE_API_KEY`; never in docs/repos.
|
- **Firewall**: port 6767 added to `networking.firewall.allowedTCPPorts` in `.13` `/etc/nixos/configuration.nix` (backup `configuration.nix.bak-paseo-…`).
|
||||||
Also mirrored into `~/.config/environment.d/10-secrets.conf` on .27 (and .51 later) as `PASEO_HOST` + `PASEO_PASSWORD` for zero-config CLI.
|
- **Access** is LAN/Tailscale-only; password auth enforced. No public Caddy subdomain (use Paseo relay only if internet access ever needed).
|
||||||
- **Access** is LAN/Tailscale-only; password auth enforced. No public Caddy subdomain yet.
|
|
||||||
- **Restart/rebuild**: `cd /home/sam/Docker/Containers/paseo && docker compose up -d --build`.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -157,7 +159,7 @@ all agents.
|
|||||||
|
|
||||||
### Passwords — what to do
|
### Passwords — what to do
|
||||||
|
|
||||||
- One password protects the web UI + CLI: `PASEO_PASSWORD` in `.13` `/home/sam/Docker/Containers/paseo/.env`.
|
- One password protects the web UI + CLI: `PASEO_PASSWORD` in `.13` `~/.config/environment.d/10-secrets.conf`.
|
||||||
- Mirrored to `~/.config/environment.d/10-secrets.conf` on .27 (and .51) so the CLI just works after login.
|
- Mirrored to `~/.config/environment.d/10-secrets.conf` on .27 (and .51) so the CLI just works after login.
|
||||||
- **Rule:** never paste into chat, git-committed files, or public docs. It's a secret.
|
- **Rule:** never paste into chat, git-committed files, or public docs. It's a secret.
|
||||||
- You don't type it day-to-day — it's wired up. Just don't share it or put it in code.
|
- You don't type it day-to-day — it's wired up. Just don't share it or put it in code.
|
||||||
@@ -186,15 +188,14 @@ Requirements: the machine must be on **Tailscale** or the home LAN to reach .13.
|
|||||||
do not install/update it; it's part of the image.
|
do not install/update it; it's part of the image.
|
||||||
- **Your normal pi** on each machine (.27/.13/.51) — Nix-managed, used in a terminal. Untouched.
|
- **Your normal pi** on each machine (.27/.13/.51) — Nix-managed, used in a terminal. Untouched.
|
||||||
|
|
||||||
### Skills & extensions (IMPORTANT)
|
### Skills & extensions (native = full toolbox)
|
||||||
|
|
||||||
- Paseo's container pi starts with a **minimal config** (~/.pi in the paseo-home volume): providers +
|
- Native daemon uses the **host pi** (`~/.pi` + `~/.agents` on .13, Gitea `pi-config` clone) — so Paseo
|
||||||
omni extension only.
|
agents have the **same skills as your terminal pi** (nixos-workflow, system-architect, project-ops,
|
||||||
- It does **NOT** automatically get your `~/.agents` skills/extensions (nixos-workflow,
|
obsidian-cli, etc.). No bake-in needed.
|
||||||
system-architect, obsidian-cli, tavily-search, etc.) from Gitea `pi-config`.
|
- Per-project `.pi/settings.json` **selects** which skills load (project settings replace global).
|
||||||
- To give Paseo agents those, we add them to the container (bake into image or mount `~/.agents`).
|
- To give a specific project skills: create `<project>/.pi/settings.json` with a package entry
|
||||||
**Follow-up task — not done yet.** Until then: Paseo agents handle general coding tasks with the
|
`{ "source": "/home/sam/.agents", "skills": ["skills/<name>"...] }`.
|
||||||
base config; for your specialized skills, use your normal terminal pi.
|
|
||||||
|
|
||||||
### Mobile
|
### Mobile
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user