Defer messages to Paseo coding agents until a chosen time or usage-window reset.
Requires Paseo: >=0.8.0 — from this plugin's own paseo-plugin.json.

Manifest JSON
{
"id": "paseo-defer",
"requirements": {
"paseo": ">=0.8.0"
}
}paseo plugin add tomgrin10/paseo-deferFrom the plugin's README
Requires Paseo 0.8.0 or newer with plugins enabled — enable them in Settings → Plugins first if they are off.
paseo plugin add tomgrin10/paseo-defer --ref v2.1.0
Omit --ref to track main.
Then open a session and press the Defer pill above the composer, or press ⌘K (Ctrl+K on Windows/Linux) and choose Defer a message.
paseo plugin ls # confirm it is running
paseo plugin update paseo-defer # later, pull the newest version
paseo plugin remove paseo-defer
git clone https://github.com/tomgrin10/paseo-defer.git
cd paseo-defer
npm ci
npm run verify
paseo plugin install "$PWD"
After editing the source, npm run verify && paseo plugin reload paseo-defer.
Paseo only offers agent-context commands while the focused tab is a live session, so a new tab that has not started its agent yet shows Defer a message to a session instead — it opens the Deferred surface, where the target session is picked explicitly.
README
A trusted local Paseo plugin for queuing a message to an agent and delivering it later.
Messages can be deferred until:
15m/1h/3h preset, or In… for any wait you type: 3, 45m, 2h, 1h 30m, up to 30 days (a bare number is minutes);21:30) or with a half of the day (9:30 pm); orBoth typed fields say out loud what they resolved to — Sends today at 9:30 PM · in 4h 12m — before anything is queued. Times are shown and read in whichever clock your device uses, so on an AM/PM device a bare 9:30 in the afternoon means tonight rather than tomorrow morning, and AM/PM controls are there to pin it.
When a message becomes due, paseo-defer waits for the target agent to become idle so it arrives as a new message instead of steering an active turn. The queue lives on the daemon, so it persists across plugin reloads, Paseo restarts, and every client you connect — nothing is lost when you close the app.
Defer while the session has nothing waiting; pressing it opens a popover anchored right above it, with the message box, every timing option, and anything already waiting for this session — no tab, no leaving the transcript. Once something is queued the pill becomes the status (in 12m, or 2 deferred), and pressing it again reopens the same popover to add, edit, or cancel. The label turns amber once a message is overdue because the session is mid-turn.
Under Composer pill in either Defer view you can switch it to Only when waiting, which keeps the composer clear until something is actually queued./defer 2h ship the release notes, typed straight into the composer. The timing comes first and the message follows: 45m, 1h 30m, in 20m, 21:30, 9:30 pm, at 9:30 pm, or reset for the usage window. Only a leading word that can only be a time is read as one, so /defer 3 more tests waits three minutes and /defer ship it in the morning is left alone — a line that names no time opens the panel holding what you wrote rather than picking a delivery time for you. Paseo clears the composer itself, so this is the one route where the message really does move.Requires Paseo 0.8.0 or newer with plugins enabled — enable them in Settings → Plugins first if they are off.
paseo plugin add tomgrin10/paseo-defer --ref v2.1.0
Omit --ref to track main.
Then open a session and press the Defer pill above the composer, or press ⌘K (Ctrl+K on Windows/Linux) and choose Defer a message.
paseo plugin ls # confirm it is running
paseo plugin update paseo-defer # later, pull the newest version
paseo plugin remove paseo-defer
git clone https://github.com/tomgrin10/paseo-defer.git
cd paseo-defer
npm ci
npm run verify
paseo plugin install "$PWD"
After editing the source, npm run verify && paseo plugin reload paseo-defer.
Paseo only offers agent-context commands while the focused tab is a live session, so a new tab that has not started its agent yet shows Defer a message to a session instead — it opens the Deferred surface, where the target session is picked explicitly.
Paseo plugins are trusted, unsandboxed code. This plugin runs on the daemon machine, connects to the local Paseo daemon, and stores queued message text in:
$PASEO_HOME/plugin-data/defer/queue.json
$PASEO_HOME/plugin-data/defer/settings.json
If PASEO_HOME is unset, it defaults to ~/.paseo. Install only after reviewing the source.
For a password-protected daemon, set the standard PASEO_PASSWORD environment variable before the daemon starts. The plugin also accepts PASEO_PASSWORD_FILE pointing to a file that contains only the plaintext password, and automatically recognizes the paseo-vm secret at ~/paseo-hub/secrets/daemon-password. PASEO_PASSWORD takes precedence, followed by the explicit file and then the VM convention. The password is passed directly to each short-lived daemon connection and is never logged or stored in the plugin data files.
Carrying the prompt box across — into the panel, or onto the card's chips — reads the app's own composer-draft storage in the client, for the one session whose Defer you pressed and only at that moment. Nothing about it is written, stored, or sent anywhere: the text goes into the message box in front of you, and reaches the daemon only if you queue it.
Delivery and the Claude usage-window read both go through Paseo's own daemon client, which the plugin borrows from the host at runtime rather than bundling. That is what lets paseo plugin add work without a package manager, and it keeps the plugin's protocol version identical to the daemon's. Paseo's public plugin SDK does not expose provider.usage.list, so this is the only route to the rolling usage window.
MIT © 2026 Tom Gringauz.
Scanned 10 Sep 2026, 13:41 UTC at commit 9c8c7ac6819a00e175be2f351ed1ea713b603038.
Scanned 10 Sep 2026, 13:42 UTC from tomgrin10/paseo-defer.