paseo plugin add dorasto/sayr --ref main --path packages/paseo-pluginSecurity status covers commit 8710e7df54b0. This command tracks main. Refresh the listing before installing if the branch changed.
From the plugin's README
paseo plugin add dorasto/sayr --ref main --path packages/paseo-plugin
Then work through Requirements below — the plugin is a thin shell over the sayr
CLI, so it can't do anything until that's installed and logged in on the daemon machine.
README
Project management right from your coding agent. View, comment, and manage your Sayr tasks, or click a button and pass it off to an agent. Define a default prompt when passing it along, or customize it when passing off.
Board — multi-org, status columns, filters
Task detail — inline editing, rich rendering, AI summary
For reference — the real Sayr web app the plugin's board mirrors
paseo plugin add dorasto/sayr --ref main --path packages/paseo-plugin
Then work through Requirements below — the plugin is a thin shell over the sayr
CLI, so it can't do anything until that's installed and logged in on the daemon machine.
The plugin doesn't call the Sayr API directly. Every RPC handler shells out to an installed sayr
CLI binary (@sayrio/cli, see packages/cli/README.md) on the daemon machine and
parses its --json output. That means:
sayr login already has stored in ~/.sayr/config.json on the daemon — the
plugin never sees or stores a token itself.>=0.8.0.sayr CLI installed and logged in on the daemon machine (not just wherever the Paseo app
itself is running):
npm install -g @sayrio/cli
sayr login --token api_xxxxxxxx
Settings → Plugins → Sayr lets you point the plugin at a different installed binary — e.g.
sayr-local to work against a local dev backend instead of production (see the CLI README's
SAYR_PROFILE section). Stored server-side at $PASEO_HOME/plugins/sayr/settings.json, defaulting
to sayr.
client/prosekit-view.tsx renders the real node/mark tree
(headings, bold/italic/strike/underline/code, lists, blockquotes, code blocks) as actual styled
React Native elements, plus @user/#task/!category mention pills — not a flattened,
unformatted dump of the text. See that file's header comment for exactly what is and isn't
covered (no live task-title lookup in task mentions, no avatar image inside a mention pill, no
table grids, no code block syntax highlighting).client/agent-prompt.ts), via a real workspace + agent
creation call, not just a copy-paste.Standard Paseo plugin layout — client/ (React Native, no Node/DOM APIs except the one
platform-gated client/web.ts), server/ (the daemon subprocess, shells out to the CLI, can use
Node freely), shared/ (Zod RPC contracts and plain types, importable from both). Every write and
every non-trivial read goes through a defineRpc contract in shared/task.ts/shared/settings.ts,
handled in server/task-handlers.ts/server/settings-handlers.ts, called from client/ via
useRpc(). See AGENTS.md's row for this package and the individual file header comments for the
reasoning behind specific choices (why the sheet isn't a host Modal, why colors are priority-based
rather than per-org, why shared/ has small local copies of a couple of @repo/util helpers instead
of importing them, etc.).
cd packages/paseo-plugin
pnpm typecheck # tsc --noEmit
pnpm lint # biome check .
pnpm lint:fix # biome check . --write
No build step — Paseo loads plugin source directly. The loop after editing anything under
client/, server/, or shared/:
paseo plugin reload sayr
paseo plugin logs sayr # confirm "Plugin ready" with no error
Only run pnpm install at the repo root if you add a new dependency to package.json. Every RN
client file should stay free of DOM/Node APIs (rg -n "document\.|window\.|className=|onClick=" client/
should only ever match client/web.ts), and no async arrow functions in client code (a Hermes
bug) — worth a quick grep before reloading if you touched anything under client/.
GET/POST /me/labels and the labels picker
cover listing, selecting, and creating a label (with a public/private toggle), but there's no way
to rename, recolor, or delete an existing one from the plugin — that still needs the web app.Inspiration of the layout & UI comes from gpambrozio's github-board plugin. Great resource for learning how to build Paseo plugins. <3
Scanned 14 Sep 2026, 07:43 UTC from dorasto/sayr/packages/paseo-plugin.