@mikegsaunders/yarrow
An opinionated harness for the Pi coding agent: permission modes, web search, OpenRouter credits, and a custom header.
Package details
Install @mikegsaunders/yarrow from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:@mikegsaunders/yarrow- Package
@mikegsaunders/yarrow- Version
0.5.0- Published
- Sep 1, 2026
- Downloads
- 124/mo · 124/wk
- Author
- mikegsaunders
- License
- MIT
- Types
- extension, skill
- Size
- 80.4 KB
- Dependencies
- 0 dependencies · 4 peers
Pi manifest JSON
{
"extensions": [
"extensions/*.ts",
"extensions/*/index.ts"
],
"skills": [
"skills"
],
"image": "https://raw.githubusercontent.com/mikegsaunders/yarrow/main/yarrow.png"
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
Yarrow
An opinionated harness for Pi. Pi is still the engine — Yarrow is a package layered on top, so pi keeps updating itself underneath you.
Install
curl -fsSL https://raw.githubusercontent.com/mikegsaunders/yarrow/main/install.sh | bash
Installs pi if you don't have it. If you already have pi and want the extensions without the config opinions: pi install npm:@mikegsaunders/yarrow.
Use
yarrow # the TUI
yo remind me of the command for nginx # one-shot answer, in the terminal
One-shots go to a fast model (openrouter/@preset/flash, or set YARROW_QUICK_MODEL). Nothing that would need your approval runs unattended. pi on its own works too — the package is global. pi -ne skips it.
zsh eats
?, so either quote the question oralias yo='noglob yo'.
What you get
| Permissions | No modes to pick. Catastrophic commands and secret paths are denied outright; destructive ones ask you; reads, everyday commands and edits in your working directory just run; everything else is judged by a fast model, which blocks with a reason the agent can work around. Details |
| Web search | web_search tool, Exa → Brave → OpenRouter, staying inside the free tiers. /search-stats |
| Footer | OpenRouter balance and session spend |
| Header | The dog. /yarrow toggles him |
| Personal wiki | Skill for a knowledge base at ~/wiki |
The last tier means a background model call: calls that reach it are sent to
@preset/flash— the command, your last message, and your git remote URLs — costing a fraction of a cent and a few seconds. Reads, everyday commands, and edits in your working directory never reach it.
Defaults: OpenRouter, kimi-k2.6, medium thinking, quiet startup. Yarrow merges these into settings.json and leaves anything you have already set — pi owns that file, so your changes always win. --force-config overrides that.
Update, uninstall
pi update --extensions # or: cd ~/.yarrow && git pull
~/.yarrow/install.sh --uninstall
Hacking on it
git clone https://github.com/mikegsaunders/yarrow.git ~/.yarrow && ~/.yarrow/install.sh
Installed from a checkout, pi loads the extensions out of your working copy — edit, restart, done.
npm install && npm run typecheck && bun test
Extensions are typechecked against the pi version in devDependencies, so API drift shows up in CI rather than at someone's next startup.
