← All projects

npm packages

pi extensions

Four extensions for the pi coding agent: search across all sessions, a skill palette, a message queue and reminders that live in the session.

View
Status
On npm, in daily use
First commit
6 February 2026
queue picker extension for pi
Stack
TypeScript, SQLite FTS5, pi Extension API, OpenRouter

Why I built it

I’ve used pi by Mario Zechner every day since January 2026. Until August almost all my client work ran through it, and since then it shares the load with Amp. pi is deliberately lean and can be reshaped with extensions. Whenever something bugged me several times a day, I built the extension for it myself.

That turned into four packages, all under @kaiserlich-dev on npm and installable with one command.

What they do

pi-session-search. Full-text search across all sessions, with an overlay on Ctrl+Shift+F. You see hits with highlighted passages and jump straight into the old session. Or you have a model summarize the session, optionally with a focus like “only the auth decisions”, and get the summary into your current context.

pi-skill-picker. I have over 100 custom skills. Without some order you find nothing. The palette on Alt+K groups skills by their category folder, for example marketing or infra, and ranks by relevance as you type: exact match before prefix before substring before fuzzy. You don’t have to touch the SKILL.md files for it.

pi-queue-picker. Writing to a working agent in pi always meant interrupting it. Sometimes I just want to note something for later. The picker asks with every message: steer, meaning redirect right now, or follow-up for afterwards? You can edit, reorder and toggle the queue before anything gets delivered.

pi-session-reminders. /remind every 30m for 4h Check production chat health. One-off and recurring reminders that are stored in the session and keep running after a restart. The agent can also create them itself when you ask in plain language.

Technical decisions

SQLite FTS5 instead of vector search. When I search sessions I’m usually looking for concrete terms: a ticket, a file name, an error message. A full-text index is faster and more precise for that. There are two levels, one index per session for finding and one per section for the preview. Indexing runs incrementally in the background.

Reminders without a daemon. Reminders only fire while pi is running, and they land in exactly the session where they were created. That’s on purpose. A background service pushing prompts into some session would be harder to reason about than a reminder that just waits.

From the sessions

By May 2026 I had piled up so many sessions that I wrote: “the search is starting to feel a little slow”. I had considered switching to a different search library. The agent pushed back, said FTS5 was exactly right for this case, and it was right. The problem was the query, which searched the index again for every hit. After the rewrite there’s a single pass, and search across all sessions answers in about 30 milliseconds. A performance test now guards that, so we optimize against numbers instead of feel.

I use the reminders as a babysitter. When I moved the DNS for AskTNT to Cloudflare in August, a reminder later checked on its own whether the nameservers had switched and the site answered over HTTPS. I didn’t have to think about it.