Code

Notes, experiments, and snippets from things I’m building.

CODE

Pi is an incredibly flexible and customizable coding harness.

Here’s the set of extensions I use (some of which I wrote) and why each is neat:

Providers:

pi-claude-bridge – use claude code subscription from pi (note needs to be later in the list after things that modify prompt)
@czottmann/pi-zai-api – allow GLM api usage in addition to coding plan
@monroewilliams/pi-local – local models including llama.cpp

MCP

( pi-mcp-adapter – adds mcp support allowing pi to communicate with mcp servers (yes I do believe they’re useful over and above cli tools), its’ great, I use the version built in to mcp-combiner )

LSP

pi-lens – Ensure LSP and style conformance from agents

Subagents

@gotgenes/pi-subagents – subagents with permissions restrictions and agent invoked tools to run them
@gotgenes/pi-subagents-worktrees – worktree isolation for multiple concurrent subagents

Permissions

@gotgenes/pi-permission-system – flexible permissions gating for llm actions
@mzwing/pi-permission-auto-review – plugin for pi-permission-system that uses llm analysis to gate actions

Search

@tian.zuo/pi-find – find files fast using ripgrep and fd
@juicesharp/rpiv-web-tools – web search and llm-compatible content ingestion with searXNG and Jina support

User illicitation

@eko24ive/pi-ask – user input with multiple choice forms like claude code

UX

pi-zentui – nice TUI UX for pi
@wierdbytes/pi-tokyo-night – I generally use tokyo night everywhere, this one is for pi
pi-notify – notify when agent is done

Mine

@geohar/pi-sharedserver – run ephemeral services whilst pi is open
@geohar/pi-mcp-combiner – share mcps between processes, manage locally running ephemeral mcp processes, deal with OAUTH and token refresh
@geohar/pi-cribsheet – memory, plans, designs and semantic doc search
@geohar/pi-svg-mcp – semantic editing of svgs with user and llm previews
@geohar/pi-plan – surface cribsheet (or other compatible extension / mcps) plans in pi’s ux
@geohar/pi-acp – acp for pi with plan support
@geohar/pi-oh-my-posh – I use oh-my-posh in the terminal, this makes a nice footer which you can use with zentui by setting the footer to native
@geohar/pi-permissions-analyzer – Analyze pi-permissions-system settings
@geohar/un-bien – remote control for pi from your iOS device

Utility

pi-cache-graph – how much of your prompt is hitting the llm’s cache
pi-custom-system-prompt – customize system prompt
pi-extmgr – manage and update your pi extensions

Python

If you happen to run into issues whereby a home-brew installed pypy can’t find the homebrew libraries, this is because by default brew modifies python installations to search homebrew. But it doesn’t do it for pypy3.

If you look at the formulae for python3.10 here you will see:

    inreplace "./Lib/ctypes/macholib/dyld.py" do |f|
      f.gsub! "DEFAULT_LIBRARY_FALLBACK = [",
              "DEFAULT_LIBRARY_FALLBACK = [ '#{HOMEBREW_PREFIX}/lib', '#{Formula["openssl@1.1"].opt_lib}',"
      f.gsub! "DEFAULT_FRAMEWORK_FALLBACK = [", "DEFAULT_FRAMEWORK_FALLBACK = [ '#{HOMEBREW_PREFIX}/Frameworks',"
    end

This is not in the brew formulae for pypy3 (which is likely a bug). You can find the location of the file which needs patching like so

> pypy3
...
>>>> import ctypes.util
>>>> print(os.path.dirname(ctypes.util.__file__) + "/macholib/dyld.py")
/opt/homebrew/Cellar/pypy3.10/7.3.15/libexec/lib/pypy3.10/ctypes/macholib/dyld.py

Edit that file and perform the relevant substitutions, eg:

DEFAULT_FRAMEWORK_FALLBACK = [ '/opt/homebrew/Frameworks',
    os.path.expanduser("~/Library/Frameworks"),
    "/Library/Frameworks",
    "/Network/Library/Frameworks",
    "/System/Library/Frameworks",
]

DEFAULT_LIBRARY_FALLBACK = ['/opt/homebrew/lib', '/opt/homebrew/opt/openssl@3/lib',
    os.path.expanduser("~/lib"),
    "/usr/local/lib",
    "/lib",
    "/usr/lib",
]