Some Plugins To Get Started With Pi
Overview
I see the Pi coding agent a lot like emacs & vim. It’s filled with possibilities, but the bare bones version is only technically usable. To really get the kind of interactions you want you need to add some useful packages.
What follows is the collection of extensions I’ve ended up with.
Agentic Functionality
⚠️ pi-subagents & pi-agent-flow are likely incompatible with each other. pi-subagents is the most popular one, and has other extensions specifically designed to work with it. I’ve been using it without any problems.
pi-subagents
pi-subagents lets Pi delegate work to focused child agents. Use it for code review, scouting, implementation, parallel audits, saved workflows, background jobs, and anything else that benefits from a second or third set of model eyes.
- Install with
pi install npm:pi-subagents - Package Details
pi-agent-flow
Long conversations can get messy—context bloats, tool calls get duplicated, and the real signal gets lost in the noise. Pi Agent Flow solves this by forking each task into a focused, isolated child process with only the context it actually needs.
See configuration details in README.
- Install with
pi install npm:pi-agent-flow - Package Details
Search
Pi can’t search the web by default, because that isn’t just a matter of scraping search results from web pages. Ultimately you need to connect to a server that has an API that you can invoke to do web search stuff.
I’ve listed two options below.
pi-web-access
Web search, content extraction, and video understanding for Pi agent. Zero-config Exa search, optional browser-cookie Gemini Web, or bring your own API keys.
⚠️ WARNING: defaults to using Exa for web search, which is free for ≤ 1,000 searches per month, and has a complex pricing system that isn’t obvious how it’ll play out. I think the Exa integration also needs the Exa MCP server. Instead of trying to figure all that out I gave it an API key for my Google Gemini account.
Zero Config — Works out of the box with Exa MCP (no API key needed). Add API keys for Exa, Perplexity, or Gemini API for more control, or opt into browser-cookie access for Gemini Web.
Video Understanding — Point it at a YouTube video or local screen recording and ask questions about what’s on screen. Full transcripts, visual descriptions, and frame extraction at exact timestamps.
Smart Fallbacks — Every capability has a fallback chain. Search tries Exa, then Perplexity, then Gemini API, then Gemini Web when browser cookies are enabled. YouTube tries Gemini Web when enabled, then API, then Perplexity. Blocked pages retry through Jina Reader and Gemini extraction. Something always works.
GitHub Cloning — GitHub URLs are cloned locally instead of scraped. The agent gets real file contents and a local path to explore, not rendered HTML.
- install with
pi install npm:pi-web-access - Package Details
pi-kagi-api
Already have a Kagi account? This is less functional than pi-web-access but… 🤷♀️
API pricing is currently $0.012/request for “search” and $0.004/request for “extract” to get clean content from any URL.
⚠️ There are multiple packages with this name. You want this one by mjakl
- Install with
pi install npm:@mjakl/pi-kagi-api- Follow the instructions in the repo’s README to generate an API key and save it so that this packaeg can use it.
- Package Details
Integrations
pi-mcp-adapter
Let’s you use MCP servers
- Install with
pi install npm:pi-mcp-adapter - Package Details
rpiv-args
Enables you to create skills that take arguments.
Pass arguments to your skills like a shell command. rpiv-args adds $1, $ARGUMENTS, $@, ${@:N}, and ${@:N:L} placeholders to Pi Agent skills - write /skill:deploy api production and your skill body sees $1 = api, $2 = production. Skills without placeholders are untouched, so installing rpiv-args is safe for any existing skill collection.
- Install with
pi install npm:@juicesharp/rpiv-args - Package Details
pi-chrome
Enables Pi to use your existing signed-in Chrome profile after explicit authorization.
pi-chrome is backed by a small MIT-licensed Chrome extension that runs inside the Chrome profile you already use — including every site you’re already signed into. Agents can inspect or control Chrome only after you run /chrome authorize in the current Pi session.
Note: installing the required extension in chrome is a little weird. Read the docs in the repo’s README carefully.
- Install with
pi install npm:pi-chrome - Package Details
Observability
pi-kanban
Click around a fully interactive dashboard with synthesized sessions, tasks, and subagents — no install.
- Install with
pi install npm:pi-kanban - Package Details
pi-bar
A wee status bar extension at the bottom that tells you model, effort level, % of context used, and more. Not as fancy as pi-powerline-footer but also won’t require as many resources for things you don’t really info on.
See the README for a screenshot, and instructions on how to configure the colors.
- Install with
pi install npm:@npm-ken/pi-bar - Package Details
Human Interaction
rpiv-ask-user-question
Let the model ask you structured clarifying questions instead of guessing. rpiv-ask-user-question adds the ask_user_question tool to Pi Agent - a tabbed dialog with single- and multi-select questions, side-by-side previews, per-option notes, and a Submit tab that reviews answers before they go back to the model.
- Install with
pi install npm:@juicesharp/rpiv-ask-user-question - Package Details
plannotator
(Plan + Annotator) Provides an interactive way to annotate the agent’s plans via a nice web UI instead of it just spewing uneditable text to you in chat. The results are SO much better than trying to read plan details in the terminal. This tool is available for most agentic platforms.
Check out the demo videos linked in the GitHub readme
- Install With
pi install npm:@plannotator/pi-extension - Package Details
rpiv-btw
Ask a side question without polluting the main conversation. rpiv-btw adds /btw <question> to Pi Agent - a lightweight side agent picks up a read-only clone of your current conversation and answers in a panel at the bottom of the terminal. The side agent remembers its own /btw thread for follow-ups, while your main chat keeps going - its transcript is never polluted.
- Install with
pi install npm:@juicesharp/rpiv-btw - Package Details
pi-permission-system
-
Hides disallowed tools before the agent starts — no wasted turns probing for blocked tools
-
Enforces allow / ask / deny at tool-call time with UI confirmation dialogs
-
Controls bash commands with wildcard pattern matching (
git *: ask,rm -rf *: deny) -
Gates MCP and skill access at server, tool, and skill-name granularity
-
Protects sensitive file patterns — cross-cutting
pathrules deny.env,~/.ssh/*, etc. across all tools and bash at once -
Guards external paths — prompts before file tools or bash commands reach outside
cwd -
Forwards prompts from subagents —
askpolicies work even in non-UI execution contexts -
Broadcasts UI prompt events —
permissions:ui_promptfires only when the permission system is about to invoke the active user-facing permission UI -
Native
@gotgenes/pi-subagentsintegration — in-process child sessions register with the permission system automatically, enabling per-agent policy enforcement andask\-state forwarding to the parent UI without configuration -
Install with
pi install npm:@gotgenes/pi-permission-system
pi-markdown-preview
Preview assistant responses and local Markdown, LaTeX, code, diff, and other text-based files from pi in the terminal, browser, or as PDF, with math rendering, syntax highlighting, Mermaid, and theme-aware styling.
Mostly I think this is going to be useful when it gives you big complicated responses and some syntax highlighting would help.
See Usage Instructions in the repo’s README.
- Install With
pi install npm:pi-markdown-preview- ⚠️ Requires pandoc to be installed
- Package Details
Resource Minimizization
pi-lean-ctx
Pi Coding Agent extension that provides ctx_-prefixed tools backed by lean-ctx for 60–90% token savings.
Whenever it’s invoked it outputs how many tokens were saved. I’ve everything from no savings up to about 90%. Regardless if it meets that advertised 60+, it’s still saving tokens.
- Install with
pi install npm:pi-lean-ctx-
⚠️ Requires lean-ctx to be installed. Follow the instructions for installing it as an MCP After installing
lean-ctxandpi-lean-ctxrunlean-ctx onboard, then follow the instructions.If
lean-ctx doctorshows a conflict on the Dashboard Port you can theoretically set it with theLEAN_CTX_PROXY_PORTenvironment variable. However I haven’t made this work. Instead if i want to see the dashboard I runlean-ctx dashboard --port=3334(or whatever port you want to use if the default (3333) is being used by something else.
-
- Package Details
Code Helpers
pi-simplify
When invoked, /simplify detects changed files (via git diff ) and instructs the agent to review them with these principles:
-
Preserve functionality : never change what the code does
-
Apply project standards : follow conventions from CLAUDE.md / AGENTS.md
-
Enhance clarity : reduce complexity, eliminate redundancy, improve naming
-
Maintain balance : avoid over-simplification
-
Install with
pi install npm:pi-simplify
Potentially Cool things
These look cool, but I haven’t tried them.
pi-hermes
I like the idea of Hermes, but I’m not convinced it’s worth using because I haven’t seen any answers to the question of how works without bloating the context window. Only install this if you’re willing to take that risk.
Your Pi agent normally forgets everything when you close a session. This extension fixes that.
-
🔍 Search every conversation — “what did we discuss about auth?” finds it instantly
-
🧠 Persistent memory — facts, preferences, corrections survive across sessions
-
⚠️ Learns from failures — remembers what didn’t work so you don’t repeat mistakes
-
🏷️ Categorized memories — failures, corrections, insights, conventions, and tool quirks organized for fast retrieval
-
🛡️ Secret scanning — API keys and tokens are blocked from being saved
-
📚 Procedural skills — the agent saves how it solved problems, not just what
-
⚡ Background learning — reviews every 10 turns, saves what matters
-
🔄 Auto-consolidation — merges entries when full, never loses data
-
Install with
pi install npm:pi-hermes-memory
pi-studio
Extension for pi that opens a local two-pane browser workspace for working with prompts, responses, live working details, Markdown and LaTeX documents, interactive HTML previews, code files, REPL sessions, and other common text-based files side by side. Annotate responses and files, add local comments, write, edit, run prompts, send code to a REPL, browse prompt and response history, request critiques, and use live preview for code, Markdown, LaTeX, and interactive HTML.
There’s a video in the repo’s README.
- Install with
pi install npm:pi-studio - Package Details
pi-actors
pi-actors turns trusted local programs, scripts, recipes, services, pipelines, and sub-agents into addressable actors that agents can spawn, message, inspect, and compose.
It is not just a command registry. A tool is a verb. An actor is a noun with time: address, lifecycle, state, logs, mailbox, artifacts, and an interaction contract.
program / process / service
→ command template
→ actor recipe
→ spawn
→ run:<id>
→ message / inspect / artifacts
- Install with
pi install npm:@llblab/pi-actors - Package Details
gentle-engram
How It Works
- Agent completes significant work (bugfix, architecture decision, etc.)
- Agent calls mem_save → title, type, What/Why/Where/Learned
- Engram persists to SQLite with FTS5 indexing
- Next session: agent searches memory, gets relevant context
Full details on session lifecycle, topic keys, and memory hygiene → docs/ARCHITECTURE.md
- Install With
pi install npm:gentle-engram- ⚠️ requires the go binary to be installed. See the repo’s README for instructions.
- You may also need to run
engram setup piafter installing the binary. It’s not clear.
- Package Details
pi-smart-fetch
Better web fetching for agents. I really want to try this, I’m just unsure how it’ll interact with pi-web-access
The “Defuddle extraction” uses defuddle which appears to be a variant on the readability algorithm to download just the contents of the web pages.
*Features
- 🔐 Browser-like TLS/SSL + HTTP fingerprints — better success on bot-defended pages
- 🧹 Defuddle extraction — clean readable content instead of noisy HTML
- 🧠 Useful metadata — title, author, site, language, published date when available
- 📦 Downloads + large file support — stream attachments and binaries to temp files
- 🔁 Client-side
<meta>redirects — follows sane meta refresh redirects with loop limits - 🔗 Alternate content fallback — when extraction produces no/thin content, follows qualified
<link rel="alternate" type="...">entries in<head>that match the requested output format - ⚡ Batch fetch — fetch many URLs with bounded concurrency
- 📝 Multiple output formats —
markdown,html,text,json,raw
- Install with
pi install npm:pi-smart-fetch - Package Details
pi-tldr
During a prompt, pi displays a TLDR box like:
╭ tldr ─────────────────────────────────────────────╮
│ Inspecting the extension package structure │
╰───────────────────────────────────────────────────╯
The TLDR updates as pi works, including during tool calls and final responses.
- Install with
pi install npm:pi-tldr - Package Details
pi-agent-browser-native
Allows pi to drive Chrome & maybe other browsers. Not sure. There’s a lot in the docs. One thing it does do is allow you to take screenshots of the browser.
- Install with
pi install npm:pi-agent-browser-native - Package Details
Something Custom
One of the key features of pi is its knowledge and ability to modify itself, and invoking this is surprisingly easy to do.
For example, macOS ships with a positively ancient version of Ruby. I - like many others - use the rbenv Ruby version manager. pi was attempting to run some ruby commands to test things and they all kept failing because the version of ruby was too old. So, I started a new session, and told pi to create an extension that used whatever ruby version was specified in the .ruby-version file or the default supplied by rbenv. A little later I realized I needed to make sure it invoked bundle and gem via the current rbenv specified version of ruby too.
Now, it just uses the right versions all the time.
So, don’t be afraid to just tell it to make you what you need if someone else hasn’t already created it.