Paseo+OpenCode+OpenViking
This is the agent setup I use every day. Paseo is the shell, OpenCode does the work, OpenViking remembers things. I’ve written a few posts about it over time; read separately they don’t quite hang together, so here’s the thread through them.
Paseo is a shell for local agents. It doesn’t bundle models and doesn’t call inference APIs itself — it only launches and hosts the CLIs you already have installed: Claude Code, Codex, OpenCode, and pi are natively supported, plus twenty-odd others in the ACP directory like Cursor, Gemini, GitHub Copilot, Kimi, and Qwen Code, ready to use with one click. Your subscriptions, skills, and MCP config stay exactly as they are; from the provider’s side, it’s no different from you typing commands in a terminal.
Four things make it worth using heavily:
- Agents across providers can be orchestrated. An agent can dispatch sub-agents, even across providers: one plans, one implements, one reviews, and the whole run is visible in the app.
- Scheduled tasks. heartbeat uses cron to fire the same prompt back at the same agent over and over, letting it watch CI or a deployment and stop when it’s done; Schedules are standalone cron jobs, like a round of triage every morning.
- Phone control — and the other way round. Start a task on your computer, then check progress and diffs from your phone while you’re out; the interface is the same as desktop, not a cut-down version. Conversely, if something occurs to you while you’re away, just dispatch it from your phone to the machine at home.
- Data never leaves the machine. The daemon runs on your own computer; code, files, and journals stay put. Remote connections go either through an end-to-end encrypted relay (Paseo itself can’t see the traffic) or your own Tailscale / Cloudflare Tunnel; speech STT/TTS also runs locally.
One more thing: parallel multi-project, multi-worktree work, split-screen diffs, and committing straight to a PR — all in a single interface.
As for OpenCode and OpenViking, each has its own post:
OpenCode does the work; it’s compatible with Claude Code’s config and skills, and supports just about every MaaS provider, so you can switch anytime. OpenViking handles memory — tasks are archived automatically, and with one sentence in the evening you can have it recap what you did today.
Giving Paseo a new theme
Paseo ships with 6 themes — the white one’s too white, the black one’s too black, and staring at them all day hurts my eyes. So I built my own Solarized Light.
At first I thought about patching Paseo’s bundle to inject colors, but that means re-patching on every upgrade. In 0.5.0 the official release added plugin.addTheme, so a plugin can add themes without touching any Paseo files, and upgrades don’t wipe them out. Then 0.8 split plugins into separate client and server entry points; I reorganized the project to the new spec, added a dark variant, renamed it paseo-solarized, and open-sourced it properly.
Now there are two in one package, Solarized Light and Solarized Dark, switchable under Settings → Appearance → Theme. The dark side doesn’t follow the original exactly: body text uses base0 rather than base00 — the latter is only 3.4:1 against #002b36; and the accent color is cyan, since orange is only 3.3:1 on that background.
The process of building the theme is written up in this post.
The community directory paseo.cafe
I only found this site after open-sourcing. It’s run by an independent community, and the footer says it plainly:
An independent, community-run directory of paseo.sh plugins, generated straight from each plugin’s own GitHub repo.
Listing doesn’t require filling out a form: submit a registry/<id>.json with the repo, an optional subdirectory, category, and platform, and everything else is scraped from the repo — manifest, README, LICENSE, screenshots, GitHub metadata. So each entry is basically a mirror of its repo.
What I wanted originally was simple: somewhere people could see what the theme looks like. It does that, and puts the npm package, version, compatible Paseo version, health score, and security scan all on one page.

Health is six checks: manifest, README, LICENSE, tests, a typecheck script, and whether it’s been updated recently.
It also has a /themes page that lays out 171 palettes side by side, drawn from 101 theme plugins. Each card is a mock Paseo interface rendered with the 8 color values the plugin declares — you can tell at a glance which ones share a mood.

The directory has 246 entries now. For a theme to get drawn, its palette has to be literal hex; dynamically computed ones just get a line saying “No static palette preview is available”.
The official directory paseo.sh/plugins
Later the official team built one too. 0.11.0 shipped on October 7, and the first line of the release notes is “Paseo 0.11 adds support for the plugin registry”. From this version on, paseo plugin add owner/slug goes through the registry; to hit GitHub directly you write github:owner/repo, and for a local directory ./path.
The site is at paseo.sh/plugins, now with 298 plugins and 117 authors. The homepage has three blocks — Featured with four hand-picked entries, What’s new, and Recently updated — followed by categories with counts (themes 107, tools 98, workspaces 67) and install leaderboards for this week, this month, and all time.

It’s not a separate parallel thing from cafe. The official solarized entry has a small line in its footer: This plugin entry was imported from paseo.cafe. The official team imported a copy of cafe’s records and then rewrote each description.
The rewriting matters. The official registry repo puts it bluntly: READMEs aren’t used as descriptions — the wording is that many READMEs are AI-generated, long and watery. Reviewers explain, in a fixed order, what this is, how it works, what you need to configure, and what switches and limitations there are; install commands, badges, and changelogs are never included. So every official entry reads about the same length, and you can compare them at a glance.
The Solarized theme
Official listing: paseo.sh/plugins/mousebomb/solarized
paseo plugin add mousebomb/solarized

Community listing: paseo.cafe/plugins/solarized
paseo plugin add npm:@mousebomb/paseo-solarized@0.1.0
Paseo’s growing plugin ecosystem
Plugins cover more than you’d think: themes, sidebar panels, slash commands, agent hooks, workspace panels, and bridges that pull other services in. Paseo itself only starts, stops, and hosts; the extra capabilities basically all live in plugins.
Browse both; here’s the order I’d suggest:
- Start with the official paseo.sh/plugins. Clean entries, categories and leaderboards, install commands ready to copy.
- Then head to paseo.cafe. The theme gallery lets you compare palettes side by side, and smaller plugins not yet picked up by the official registry live here too.
All the entry points:
- Official plugin directory: paseo.sh/plugins
- Official plugin docs: paseo.sh/docs/plugins
- Official registry repo: github.com/getpaseo/plugins
- Community directory: paseo.cafe
- My theme: github.com/mousebomb/paseo-solarized
It’s all free — one pass through and you’ll know what you’re missing.