paseo.cafe
All plugins

paseo-defer

by tomgrin10

Defer messages to Paseo coding agents until a chosen time or usage-window reset.

Requires Paseo >=0.8.0automationproductivity
2 starsLicense: MITLast updated 10 Sep 2026 tomgrin10/paseo-defer Report plugin

Gallery

paseo-defer screenshotpaseo-defer screenshotpaseo-defer screenshotpaseo-defer screenshot
Paseo manifestPretty-printed JSONExpand

Manifest JSON

{
  "id": "paseo-defer",
  "requirements": {
    "paseo": ">=0.8.0"
  }
}

Install

paseo plugin add tomgrin10/paseo-defer

From 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

paseo-defer

A trusted local Paseo plugin for queuing a message to an agent and delivering it later.

Messages can be deferred until:

  • a delay has elapsed — a 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);
  • a local time you type into At…, in 24-hour form (21:30) or with a half of the day (9:30 pm); or
  • the Claude rolling usage window resets.

Both 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.

Where it shows up

  • A composer pill, on every session, beside Paseo's own task and subagent pills. It reads 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.
  • Whatever you had already typed, carried across. Press Defer — the pill, or ⌘K — with a half-written prompt in the box and the popover's message box opens already holding it, so a prompt that turns out to be for later is never typed twice: pick a timing and it queues right there, with no tab and no navigation. It is copied rather than moved, because Paseo gives a plugin no way to clear its own composer, so the popover says the prompt box still holds it — clear it there unless you also meant to send it now. (The desktop and web apps keep drafts where a plugin can read them; on iOS the box opens empty.)
  • /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.
  • The Defer panel, as a workspace tab or in Explorer. It names the session it is queueing for — title, workspace, provider, status, and session id — and a waiting message can still be edited (text, timing, or both) until delivery starts. Pressing Defer returns you to the session and confirms the delivery time in a toast, so queueing something never costs you your place.
  • The Deferred sidebar surface, which does the same across every session, with a picker for choosing the target and an Open session action that jumps to the session a message will land in.
  • ⌘K / Ctrl+K, as Defer a message.

Install

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.

Security and data

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.

License

MIT © 2026 Tom Gringauz.

Health checks

  • Manifest ID matches registry
  • Has a README
  • Has a license
  • Has tests
  • Has a typecheck script
  • Updated in the last 6 months

Security scan

Scanned 10 Sep 2026, 13:42 UTC from tomgrin10/paseo-defer.