Repository navigation
Conversation
A source-agnostic agent status model (six agent states, urgency-ordered)
pushed as an `agents` snapshot frame, rendered in a client-local agents
chrome view. The bot chrome button appears once a source is live and
carries an amber count while any agent needs you.
First source: PaseoAgentSource subscribes to the Paseo daemon WebSocket
with the same-user local-credential (no polling, no config), mapping
Paseo snapshots via its own state-bucket precedence. Closed/archived
agents get no tile; permission details name the tool, never its input.
--agents {auto,paseo,off} (auto = on when ~/.paseo exists), --paseo-url.
Playground fixture with a cycling agent for backend-free demos.
Agent tiles now show when Paseo is focused, like any other app, instead of behind a dedicated chrome button. - decks/paseo.yaml: one full-surface `agents` widget; matches the desktop app identity, Paseo's static page title, and a new `agent:paseo` token. - `agent:SOURCE` match token: Paseo's web app sets document.title to the active agent's title and never names itself, so it's recognised by matching the window title against the live agent titles from the agent source (exact, or "<title> — <browser>" for browser windows only). Site-tier, like `title:`; focus re-resolves when titles change. - ADR-0010 `size: full` is now real on the client: the widget takes the whole deck area. - Removed the agents chrome button, /agents route and key 6. - Fix: closing PaseoAgentSource.watch() now closes the Paseo socket (inner generator wrapped in aclosing); it previously leaked until GC.
The Electron app reports "Paseo" as WM_CLASS under XWayland (StartupWMClass) and as app_id on native Wayland (desktopName), both covered by the case-insensitive `paseo` token. sh.paseo.desktop is the electron-builder bundle id, never reported on Linux.
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Proof of concept for #180: deckd shows your running AI coding agents as tiles you can look at but not act on. They appear whenever Paseo is focused, the same way any other app gets its own deck. There's no extra chrome button.
What
decks/paseo.yaml: contains a singleagentswidget set tosize: full. It shows one tile per live agent, most urgent first. Each tile has a state label (Needs you / Error / Working / Done / Idle), a coloured accent, the title, the project, a short detail such as "Approve Bash", and how long it has been in that state.document.titleto the active agent's title and never mentions "Paseo", so notitle:glob can claim it. The newagent:paseomatch token checks the window title against the live agent titles the daemon already has from its Paseo subscription.<title> — <browser name>. The separator form is only accepted for browser windows, so an agent titleddeckdcan't claim adeckd — fishterminal.title:tokens.deckctl deckpin isn't overridden by unrelated agent changes.title:Paseo…tokens, for pages that keep the static page title.paseoidentity token. The installed AppImage reportsPaseoas its WM_CLASS under XWayland (StartupWMClass) and as its app_id on native Wayland (desktopName); I checked this against the bundle.size: fullnow works on the client: the widget takes the whole deck area. ADR-0010 specified this, but nothing implemented it until now.CONTEXT.md.PaseoAgentSourcesubscribes to the Paseo daemon's WebSocket and receives a snapshot plusagent_updatepushes. No polling.local-credential, which it re-reads on reconnect.server_infobefore subscribing, to avoid close code 4002.agent_streamnoise.--agents {auto,paseo,off}(autoturns it on when~/.paseoexists) and--paseo-url./?playgroundand pick Paseo under running programs.Why the WebSocket rather than the CLI
Research is in
docs/research/agent-orchestrator-status.md. It covers Paseo, T3 Code, opencode, Claude Code hooks, Vibe Kanban, Nimbalyst, Claude Squad, Conductor, Crystal and tmux.paseo ls --jsonleaves out the permission and attention fields.Privacy
Verification
just test-allrun passes: pyright, pytest (836), focus-wire, tsc, vitest (410), Playwright e2e, smoke and eslint.firefox.yaml.agentswidget renders.Not yet verified on the real desktop (needs
human-verification)WorkspaceDocumentTitleEffectsets the title to the tab label. A terminal or file tab in Paseo won't match any agent title, so the browser deck shows instead.%WEB_TITLE%.Known gaps / follow-ups
idlewhile background subagents are still working.httphooks) would need a push endpoint.server_info.versionand shows no tiles if the shape drifts.This doesn't close #180 yet; it's a POC.
Screenshots
Paseo focused — tablet (Playground fixture)
Paseo focused — phone landscape