@mikegsaunders/yarrow

An opinionated harness for the Pi coding agent: permission modes, web search, OpenRouter credits, and a custom header.

Packages

Package details

extensionskill

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 or alias 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.