Paseo — Agent Orchestration, Native on .13
Multi-agent orchestration (Paseo 0.7.2) running as a native daemon on .13 — driving the host's
pi (0.82.1) with full filesystem access, LLM via OmniRoute.
Maintained by Sam · Gitea — sam/paseo · interactive map: maps.lab → Paseo
What it is
Paseo is a client-server orchestration layer for AI coding agents: one daemon manages agent processes and streams output to CLI, web and mobile clients.
On this lab it runs natively on the always-on NixOS host .13 (no container): the daemon spawns
the host's own pi 0.82.1 (pi --mode rpc) as user sam, giving agents direct access to the
real filesystem — projects, the Obsidian vault, photos — with the user's real permissions. LLM
traffic routes through the existing OmniRoute proxy on .13:20129.
- Local-first — no telemetry, no cloud dependency (Tailscale/LAN only).
- No sandbox — this is deliberate: the daemon is
sam. Guardrails come from pi's own protections (filechanges, approvals), not a container boundary. - One console —
paseo ls/attach/logsfrom .27, .51, and mobile web UI.
Architecture
flowchart LR
subgraph CLIENTS["Clients"]
D27[".27 desktop<br/>paseo CLI"]
D51[".51 laptop<br/>paseo CLI"]
M["Mobile / web UI<br/>browser / Tailscale"]
end
subgraph N13["Native daemon on .13 (NixOS, always-on)"]
D["Paseo daemon 0.7.2<br/>systemd user service<br/>0.0.0.0:6767"]
PI["pi 0.82.1 (Nix)<br/>pi --mode rpc<br/>host ~/.pi + ~/.agents"]
FS[("Host filesystem as `sam`<br/>projects: ~/paseo/projects/<br/>obsidian vault, photos, /mnt/*")]
FW["NixOS firewall<br/>port 6767 open"]
end
subgraph LLM["LLM routing"]
OR["OmniRoute .13:20129"]
OP["OpenRouter / DeepSeek /<br/>OpenCode-Go (deferred)"]
end
D27 -->|"PASEO_HOST + password"| D
D51 -->|"PASEO_HOST + password"| D
M -->|"Tailscale / LAN :6767"| D
D -->|"spawns / manages (no sandbox)"| PI
PI -->|"direct access, real permissions"| FS
D -.->|"listen allowed"| FW
PI -->|"omni provider /v1"| OR
OR -->|"combo routing"| OP
Directory map
paseo/
├── README.md ← this file
└── docs/
├── system.mmd ← Mermaid source (single source of truth)
├── system.architecture.json ← Archify source
├── system-map.html ← interactive Archify map
└── diagrams/
├── system.png
└── system.svg
Quick start (client)
npm install -g @getpaseo/cli@0.7.2 # one-time, per machine
export PASEO_HOST=192.168.20.13:6767 # or in ~/.config/environment.d/10-secrets.conf
export PASEO_PASSWORD=<PASEO_PASSWORD> # on .13's secrets file
paseo status # daemon reachable?
paseo ls # running agents
paseo run --provider pi "your task" # defaults to combo model, cwd = your folder
paseo logs <agent-id> # full activity timeline
Web UI: http://192.168.20.13:6767 (LAN) · http://100.114.62.46:6767 (Tailscale/mobile).
Deployment (server, .13)
| Item | Value |
|---|---|
| Daemon | Paseo 0.7.2 · native · systemd user service paseo.service · 0.0.0.0:6767, enabled |
| pi | Host Nix pi 0.82.1 (/etc/profiles/per-user/sam/bin/pi) — used directly via --mode rpc |
| Config | ~/.paseo/ (daemon) · ~/.pi/ + ~/.agents/ (host pi, Gitea pi-config clone) |
| Projects | ~/paseo/projects/<name>/ — real paths, direct FS access |
| LLM | pi → omni provider → http://192.168.20.13:20129/v1 (OmniRoute) |
| Firewall | networking.firewall.allowedTCPPorts includes 6767 (NixOS configuration.nix) |
| Secrets | PASEO_PASSWORD in .13 ~/.config/environment.d/10-secrets.conf (chmod 600) |
Start/stop/status: systemctl --user {start,stop,status} paseo · logs: journalctl --user -u paseo.
Verified end-to-end (2026-09-16)
$ paseo run --provider pi "…" # bare run — model defaults to combo
Model omni/default-opencode-go-ds-flash # healthy combo (OpenRouter → DeepSeek → OpenCode-Go)
Cwd /home/sam/paseo/projects/obsidian_cleanup_tool
Status idle ✅ (agent replied NATIVE_OK / NEWPATH_OK)
- Clients: .27 CLI · .51 CLI · mobile web UI all reach the daemon (LAN + Tailscale). ✅
- Migration from the earlier Docker deployment completed; Docker removed (legacy backup in
~/paseo/docker-legacy-backup-…).
Known notes
- Model default: the pi model catalog was reordered so
default-opencode-go-ds-flashis first (barepaseo runpicks it instead of a flaky free leg). If the combo's OpenCode-Go leg is sub-rate-limited, the combo still falls back OpenRouter → DeepSeek. - Skills: the host pi (
~/.agents) carries the full skill set (nixos-workflow, system-architect, project-ops, obsidian-cli, etc.). Per-project `.pi/settings.json selects which are loaded. - Security model: native = full user permissions. Do not expose the daemon publicly; keep LAN/Tailscale + password (no public Caddy vhost; use Paseo relay only if internet access is ever required).
Why it matters
- **Full-control autonomy: the daemon is
sam, so agents manage real files (photos, vault, projects) with no mount plumbing. - One always-on control plane for pi across all devices — the "phone control plane" use case.
- n8n/Prefect email→agent workflows, scheduled runs, and browser tasks (pi-browser-harness) can be layered on top.
Documentation project — no proprietary code. Secrets never appear in this repo.