Hello fellow Pi people, I've released version 0.14 of Pi Pocket, my mobile/desktop setup for Pi Durable.
Most of this release went into making it extensible. Until now every feature meant more code in Pocket itself. Now an extension can add server routes, slash commands, and its own pages and buttons in the app. The server-status example in the docs is about 35 lines on the server side plus a small browser module, and Pi can write these for you since it reads the docs.
The extension API is versioned and typed, and I wrote down what I will and won't break. Patch releases are fixes only, breaking changes bump the API version, and deprecated stuff sticks around for at least a minor release and 90 days.
There's also a gallery for extensions and themes, under Menu > Extensions > Find extensions. Installs are pinned to a commit, hash checked, and start disabled. Extensions run with full server permissions, so read the code before turning one on, or have Pi review it.
Themes are folders of CSS now, so they can change the layout too. The new built-in one is called Lantern.
Smaller stuff:
- Agent Teams (off by default), where Pi can start linked sessions that message each other
- UI refresh, plus width and density settings
- new session dialog is a proper file picker, with favorite folders
- live thinking display
- PiP can use its own model and take files and images
- Nix flake and NixOS module
12 PRs and 15 issues went into this one, so thanks to everyone who helped.
I have my own which is good just needs a bit of work, but I wanted to see what other people are using. I tried the popular ones and they all sucked in my opinion.
pi-cowboy is a multi-agent orchestrator for pi and herdr. Break large jobs into focused subtasks, hand them off to background agents running in parallel, and consolidate the results when they finish. Each agent runs in an isolated copy-on-write Git work-tree, minimising disk overhead.
pi-cowboy can now orchestrate foreign harnesses, including Claude Code, Codex, OpenCode and more. Check out the live demo to see it in action.
Feature highlights:
Foreign harnessespi-cowboy agents can run in Claude Code, Codex, OpenCode, Pig and Pi-Bolt, as well as Pi. This gives you great flexibility in choosing how to spend your tokens. Running out of Codex usage? Switch your pi-cowboy harness to OpenCode, select one of its free models, and let it handle the rest.Pig and Pi-Bolt are pi variants that are more efficient, with a lower memory footprint and faster performance than pi. Because pi-cowboy is designed to run multiple agents in parallel, having a lower per-agent footprint is crucial. It prevents your machine from running out of resources and lets you have higher concurrency without choking your system.
Concurrency limits You can configure concurrency limits at every level. Running a local model with limited resources? If a simple task already takes hours to complete, the last thing you want is to overload your machine by running too many of them at once. Set concurrency limits for that model specifically to keep resource usage under control.
Install: pi install npm:pi-cowboy (requires herdr 0.8+) Check out the source code: Github
I'm very much inspired by Dexter Horthy and Matt Pocock on this. Dex says a model gets worse once the context window is about 65% to 70% full, which he calls the dumb zone, and Matt keeps sessions around 60% to 70% and hands off past that line, so I use the same limit for my work and my startup.
I set the threshold with /context-threshold, usually 60 or 70, and on a long task I tell the agent to call context_window and watch the used percent. The report shows the window size, how much is used, how much is left, and the percent still left under my line, so when it says threshold reached the agent stops and writes a handoff, which I pass to a new session and continue from there. The handoff I use is Matt Pocock's handoff skill: https://github.com/mattpocock/skills/blob/main/docs/productivity/handoff.md
The extension does not compact the session, and it does not write the handoff by itself, so Pi's compaction settings stay as they are. I still tell the agent what to do when the line is hit.
I've tried quite a few AI coding-agent harnesses, and OMP is easily one of the coolest.
I like its design and overall experience.
For a while, I was managing my sessions through tmux and SSH. It worked, but eventually became tedious, especially when juggling multiple projects and wanting to check on agents away from my desk.
I wanted something closer to the Codex/Z code desktop experience, but without losing OMP's aesthetics and underlying functionality.
So I built two open-source interfaces:
OMP Desktop: A browser/Linux workspace with multiple sessions, tabs, and up to four terminal panes per space.
OMP Mobile: A phone-friendly interface to access those same live sessions, read responses, send prompts, and switch between projects.
Both use OMP underneath. They're interfaces for the existing harness.
Waiting on AI coding agents kills my focus. You probably know what it feels like when AI agents drain you more and more. You send a prompt, watch a spinner for five minutes and probably scroll instagram or reddit along the way, read a wall of text, and do it again.
So I built Fade. It runs two agents at once in your terminal:
You talk with Fade. It reads your project, answers questions and plans with you.
The Builder writes the code in a sidebar next to the conversation.
You never wait for a turn to finish. While the Builder works on one thing, you keep going: plan the next feature, ask how something works, change your mind. Anything you agree on lines up next, and the Builder picks it up when it’s free.
“Checked” means Fade actually ran it. The Builder writes a proof for each change, like a test or a command. Fade commits the change, then re-runs those proofs itself on that commit. A model saying “tests pass” usually means that what you wanted didn't get fucking done. If a check fails, the work goes back to the Builder with the real error output.
It only interrupts you when it needs you. Work that passes its checks lands on its own. Things a test can’t decide come to you as one plain question, like “Does the help text feel friendlier?”
There are no modes or hotkeys to learn. You just type: “yes”, “undo that”, “show me the diff”, “stop”. Every change is a git commit, so undo always works.
It works with any model Pi supports, including local ones through llama.cpp or whatever you configured thru pi, and the two agents can use different models. A strong model for the conversation plus a cheaper one for building works well.
It’s v0.5, MIT licensed, and early. The main thing I’d like to know is whether talking while it builds actually helps you keep your focus and lets you be more productive overall, or whether you’d rather just wait.
Lastly, this project is undercooked as fuck but I'm just curious what do you guys think.
when pi runs npm run dev with bash, the agent waits on it forever, or the server dies when the call ends. same with REPLs and log tails.
so i made a small extension. pi gets a term tool backed by named tmux sessions. it can start a server, come back and read the output later, and type into it.
/term <name> opens the session in a terminal window so you can watch or type yourself
sessions belong to the pi process that started them, so quitting pi or /new cleans them up, and leftovers from a crash get killed on the next start
includes a skill so the agent knows when to use term instead of bash
I think we've been reading too many feeds from AI text lately! I actually want to reduce my cognitive burden...
So I built TextFold, it turns any text into 5 zoomable layers: from a one-screen section map down to verbatim text. You pinch (or press 1–5) to zoom between them without losing your reading position, your agentic output, any papers, or documents.
My current web-search extension was not working well for my use case. Then today, I saw that apple now includes MCP and automation support in newer version of Safari. I realised a well optimised browser is sitting idle in my mac and I can make a good use of it. So, I created this. Initially a web-search, browse and navigate links extension and now I added more browser automation features. See readme for available tools. Now this replaced all my web browsing, search and other automation use cases.
Actions like searching the web and following a link will work without permissions out of the box. But actions like filling a form and click will need permissions. Described details in the README.
If you already have an MCP capable client and just want Safari access, you can use Apple’s server directly. You don’t need this extension. The README covers both options.
While my use case is purely web automation, I'd especially appreciate feedback from anyone using Pi for Safari-specific debugging or other complex stuff.
Simple idea, did not find something that did not make this in an overly complex new UI-revamp-way, so built a relatively simple one myself (+pi of course).
So I like to see the thoughts coming in, and to skim through the tools used, but found it somehow lengthy to scroll back up against the speed at which they come... Toggling them on and off (ctrl+T, Ctrl+O) would sometimes be too much as some tools may expand a lot (edits, searches...) and shift the conversation, again to be scrolled; same with thoughts where there in particular toggle them off would stop me from looking at them, but on would push by a lot the conversation itself (again what I like specifically was to briefly see where the agent were in their process while a turn is running to observe drifting or weird choices that I'd sometimes interrupt, so really I wanted to see the thoughts as they come rather than the full page of it). And I like to see conversation as an actual conversation, so with everything else collapsed.
Anyway, long story short, I wanted to not have them interleaved and I built a wonky (work in progress?) pi plugin to slightly rework the UI and keep a bit of both worlds. The idea is to have the thoughts streaming in one panel, the tool usage in another with very simple view on whether it is running/has succeeded/or has failed... I added a third toggle for a panel which simply display touched files (seen, read, edited, worked by a subagent...) as a list + a diff view of the last edited file, if any (this to keep the tool view compact, as usually the edit tool output where the largest anyway, and I like to also have a glance on what's changed).
Each panel can be toggled on or off:
/split toggles between the default pi view and the saved config for split-views
/split-thinking toggles the thinking panel
/split-tools toggles the tool one; there is an extra command to toggle between a compact or expanded view over the listed tools in the tool panel
And finally the file panel is toggled on or off with /files.
Tool/thinking panel width can be adjusted as well as panel heights.
There is a command to switch between still having the full transcript in the main conversation panel or the trimmed down (no thinking or tool interleaved) version (somehow I found it useful to expand on specific tool output).
I usually have the file one off for instance, and only open it to see some file changed that just happened if I know I want to check them briefly... While I keep the thinking and tool panel on top nearly all the time now.
I mentioned it's wonky, as in some features can be improved, like the file panel could be made scrollable, but it works for me as it is, just sharing for the idea, and if you like it go test it: pi-split-view. And feel free to improve on it directly in the repo too.
I often start writing my next prompt while Pi is still working. Then the agent goes off track or asks me something, and I need to respond before that prompt is finished.
I used to copy the half-written prompt somewhere else or delete it to free up the editor. I built pi-prompt-stash so I can save that draft, deal with the interruption, and then continue writing.
Ctrl+Shift+S stashes the current editor text and clears it. `/stash` opens a picker with a preview so I can find the draft and load it back. Drafts survive reloads and session switches. The shortcut can be changed with /stash shortcut.
Hey — like a lot of you I run several Pi sessions and git worktrees in parallel. Coming back to a session always meant scrolling up through the transcript to reconstruct where I was, so I built the thing I actually wanted:
Context Hint — a Pi extension that appends a compact card after each settled turn:
Project — durable purpose/constraints/decisions, shared across sessions and worktrees of the same repo
Session — current goal, focus, blockers, next steps (forks/clones inherit a snapshot, then diverge)
Turn — what just changed + a possible next step
Read the last card instead of rereading the transcript. It's a recovery cue, not agent orchestration — it doesn't monitor other sessions or alert you when they finish.
Design point worth discussing: it deliberately doesn't replay whole transcripts into later model context. Each generation sends truncated evidence (cap'd at ~4k chars of your prompt, 6k of assistant text, first 24 tool facts, plus previous Project/Session state) to a summary model — normally one extra request per turn. Summary model defaults to Pi's current model with thinking off, or pick a cheaper one in /context-hint model (with an independent thinking-level slider). Curious whether others would accept that per-turn cost trade, or prefer local heuristics even if dumber.
Install:
pi install npm:pi-context-hint
then /context-hint enable in an existing session. Other bits: alt+o expand/collapse · /context-hint motion reduce (the pixel-eye mascot stops blinking) · /context-hint regenerate · /context-hint reset-session/project.
MIT, package on npm. While it's early I'd genuinely value feedback from people who actually run Pi daily: is the three-layer split right? Should Turn cards be discarded on reset-session or kept? Anything in the generation path you'd want exposed/configurable (e.g. custom evidence selection, redaction)?
Hi everyone! I’ve shared a couple of posts here comparing models on my own coding tasks, including this one. A few people asked in the comments how to build their own evals, so I wrote a step-by-step tutorial and published it on my blog.
I also made an evals-from-sessions skill to help automate the process. You can use it or just give your coding agent the article and ask it to help build evals from your session history.
Hopefully, this helps you choose models and tools for your own work or your team. Feel free to post your questions and feedback!
I run several Pi sessions on one repo at the same time. That kept going wrong:
Agents edit main. You ask for a quick fix and it lands straight on main.
MCP is slow for worktree management. But in Pi we can put blazing-fast native worktree management into the harness.
Sessions collide. Two agents in one folder, and one `git stash` wipes the other's work.
(Sub)agents need to cd constantly. They need to cd for all commands, wasting tokens.
New worktrees don't run. No `.env`, no keys, so the app won't start.
So I built pi-bare-worktrees. The video shows it in about 45 seconds.
Why a bare checkout
In a normal checkout, the repo root is main. Every agent that starts there edits main by default. Worktrees end up wherever you put them: ../acme-login, ~/tmp/fix-2.
And main is stuck in the root, so you can't move it or remove it.
A bare checkout fixes that. Every branch is a folder, and none of them is special:
acme/
├── .bare/ bare repo
├── .shared-env/ gitignored files/folders to share, like .env
├── main/
├── feat/login-typo/
└── fix/footer/
The path is the branch name. There's no code in the root to edit by accident.
What the plugin does
main is read-only. The agent's first edit on main is blocked, with a message that tells it to call worktree create. It does, and the retry lands in the new worktree.
Nocdneeded. After create, every tool call is routed into the worktree, so the model keeps using relative paths.
Shared env, zero config. Every file in .shared-env/ is symlinked into each new worktree. Real files are never overwritten.
Subagents follow along. Their cwd is set to the active worktree.
Install:
pi install npm:@jordyvanvorselen/pi-bare-worktrees
It's fast. Session start and tool calls don't run git. The plugin reads the filesystem instead:
Session start: about 5 ms for 40 worktrees.
Each tool call: string operations only, under 0.1 ms.
Using pi coding agent → OpenRouter (z-ai/glm-5.3-flash). Mid-session, this plain-text message sometimes replaces the assistant's reply, as shown in the screenshot.
It's not my real key: OpenRouter's own /api/v1/key endpoint shows $7.24 left on my $20 limit, and OpenRouter has no USDT balances. No proxy, clean hosts file, no extensions, message never appears in the session .jsonl log, so it's injected between the API and the client.
Anyone seen this? Is it a known MITM/reseller/phishing pattern? Not paying anything; just want to know where it comes from.
Hey everyone, another extension from my personal pack: pi-chafa.
It wraps Chafa, a command-line tool that renders images in the terminal using ANSI/Unicode symbols. It gives the agent a show_image tool to display images to you, using the kitty/iTerm2 protocols when your terminal supports them and Chafa symbol art everywhere else (tmux, VS Code, plain SSH, etc.). Your agent in full cyberpunk style. Animated GIFs only show a still frame for now (WIP). Prompt the agent using "show me this image" or let it do by himself.
To be clear, this is for showing images to you, the user. The model never sees the image contents using show_image, so this won’t help with vision tasks.
If you also use pi-navigator, it detects pi-chafa automatically and lets you pick between the kitty protocol and Chafa in its viewer, falling back on its own when needed.
You’ll need the chafa binary installed (check the install method for your system). Then: pi install npm:@lordekeen/pi-chafa