Pi 1.0
earendil.com
earendil.com
Like Pi, it's plugins all the way down, provider-agnostic, minimal system prompts, threaded sub-agents, code-mode, multi-client remote sessions, worktrees, a context window you can actually see and edit, etc etc
Where Pi is way ahead is the plugin ecosystem, and that takes people, which is hard to get amid the current deluge of agent action. So if there's any spare oxygen trailing off this thread, I'd love any Pi-heads who fancy a bit of GUI action to come and kick the tyres..
It’s great that’s plugins all the way down the issue I find is I haven’t missed anything enough to need a plugin.
I hardly use anything aside from neovim and a browser. (okay corporate Mattermost fork and video terminal too).
For me switching between different cli\tui tools feels like a continuation of whatever I was doing, while going to something GUIsh is not.
And to be honest: what do you even need from a harness\agent for it to have a gui?
Oh, it's just so much nicer! Personally I'm a graphics/typography nerd, so just having nice fonts, smooth movement, use of sizes, colours and graphics to differentiate and display types of information... Some people obviously don't care about this kind of look and feel nicety, but even so a GUI has so many more opportunities for displaying information in a clear but dense way.
They can even show images these days.
Some of the elements can't be recreated 1 to 1 ofc, like borders with delicate margin\padding adjustment, but this is about it I think.
To each his own, yeah. From my experiment GUIs tend to overcomplicate things and display too much info you didn't need in the first place.
experience
The native format of LLM interactions is markdown, and showing that in a terminal is a poor imitation of what it looks like rendered properly.
An interesting thing you can do in juggler is ask the LLM to reply in HTML instead of markdown, and they can then do things like illustrate points visually for you. LLMs are actually great at being able to express things visually to the user, but being stuck in terminals so much, people haven't really leaned on that very much
Nothing absolute that I couldn't live without. But TUI is essentially a design written for the lowest common denominator. It doesn't matter that I have had high resolution displays for years, average TUI is designed as if I'm using computer older than me.
I love the terminal for terminal things. I'm not convinced agenetic coding is best implemented in a terminal - for it to work well, you're basically reinventing a toolkit wheel. Why not just use a nice graphical toolkit? It feels a bit like the current trend for pixelated graphics - both retro and worse.
You run it on some headless machine, and point your browser at the HTTP server it creates to see the full GUI. It uses Yjs to make that connection as efficent as possible, and it works great.
The desktop app is literally doing the same thing internally - it runs a headless server process and serves the GUI to its own window. But you can stretch that over a network and it's the same experience.
I can even connect to it via a TURN server, from my phone on a cell signal, and although it's not as snappy as running locally, it works pretty well.
My opinion is that TUI is just a GUI with less fidelity. Being composed of text characters provides no additional benefit other than a retro style. The benefits of the terminal are outside of TUIs - composing scripts, piping data, bash etc.
I do a fair amount of CAD so I'll use that example. Nobody who uses CAD professionally is clicking all the little buttons for tools. They're using commands, shortcuts, scripts, etc.
A GUI is slow and clunky. A textual interface, once learned, has way more degrees of freedom.
My two cents is that having all of your text be monospaced is not really ideal for agentic workflows where you do in fact read a lot of prose and in the future may want diagrams, rendered from a full browser's capabilities, etc.
I think I like the aesthetic of using a TUI because it makes me feel more like whatever 'real programmer' means to me... but I recognize its also cope.
(Also TUIs made a lot more sense when code was more expensive, because the monospacing constraint made it faster to build UI, etc.)
Yes, power users often use shortcuts and automation, but how is that an argument against GUIs?
It simply depends a lot on the actual task. Certain things absolutely require a (high fidelity) graphical interface. Other things can be done just as well (and with less distraction) in a simple TUI. You can't generalize.
TUIs compose with tmux. Pi's homepage says "use tmux" twice on it. It fits right into an already-mature ecosystem including a clipboard (powered by Vim visual / line / block mode) and easy integration with shells, editors, and other tools. GUIs generally have to re-invent all those wheels (tabs, splits, sessions, etc.) and it never integrates as well with other tools in a totally cross-platform way.
GUI scripting is still not a thing today. That's the biggest issue with GUIs.
Plus the mouse is genuinely bad for ergonomics.
Plus if you type _fast_ then TUIs are a great starting point.
Plus what's the equivalent of scrollback for a bunch of mouse clicks?
Plus TUIs are much more I/O efficient, which means running them over ssh/mosh/whatever is a great option.
Plus the shell is a programming language -- the GUI isn't just hard to macro-record/script: it doesn't even have a programming language you'd use for that.
It has been 40+ years of graphical interfaces (58 if you include that Stanford Research Institute "mother of all demos" video). It's been about 10-20 years more for ttys, and TUIs in the form of screen editors go back to the mid-60s IIUC. Shells w/ tty interfaces go back to the mid-60s also.
So TUIs don't have that big a lead over GUIs, and clearly people take well to GUIs.
So maybe -just maybe- there is something about GUIs that makes them difficult to script.
IMO the bandwidth point is important, but not essential. Windows has had a high bandwidth local GUI since ~1990, and we've had RDP and such things be practical for remote access for about 20 years (i.e., since we started getting high-bandwidth networking to homes). In that entire time Microsoft and its developer ecosystem failed utterly to produce any sort of realistically useful and used GUI scripting or even just macro environment -- that stuff never materialized. There have been _attempts_, but none successful.
I believe the issue is a lot like web scraping vs. APIs. If you provide APIs, you can script those, no browser or GUI needed. But APIs are in short supply because:
- GUIs come first
- APIs require backwards-compatibility
(which is a pain for the vendor)
- [web-specific] APIs steal engagement
(which is a problem for sites that
depend on advertising)
That is a perennial problem for GUIs and BUIs, and it seems like it might be inherent to them, for how else to explain that this problem is never fixed? And yeah, scraping is not a good answer.That's my 5-minute thesis. Expect the TUI to remain king for a while now that it's been reinvigorated.
For an example, see my MSPaint drawings in the README (scroll near the bottom) for this tiny little project: https://github.com/rspeele/meshorient
I redrew those for the README but IIRC, I drew something similar when explaining how the feature would work to the agent.
And in reverse, after describing an architecture or an algorithm to it, I'll sometimes ask it to draw a diagram for me to demonstrate its understanding. If it draws the picture in line with what I intended, I conclude that it has gained the necessary context to proceed. If not, I know I explained something wrong or at least insufficiently and need to provide clarification. There are some domains where a picture is worth a thousand words.
It also helps cut through the Claudese. "Your decision is needed for one edge case, found by the gate. When a T-joint meets an endcap that the mesher solves by a fan, should this bisect a fan slice or raise a warning?" I'm sorry Claude, I am not from Missouri but you are going to have to Show Me this one with a picture.
Of course you can save pictures to files and open them with external tools, but it's nicer to have them inlined into the chat history when that's exactly what they are: part of the conversation.
And in juggler (and probably other harnesses too) the LLM can reply in HTML. So if I'm planning e.g. some UI changes, I might ask it "show me what this button will look like" and it'll reply with a picture of that thing in its response. No temp files to open or clean up, and fewer tokens burned
And, of course, most of the tools have created their own GUIs anyway, which are far worse than VS Code (even when they've forked VSCode itself!)
I think the "borderline psychotic" phrasing is apt.
Pi is a great project, and people love it for good reason, I have nothing negative to say about it or its fans. I'm just trying to do something that appeals to the more GUI-oriented folks. And yes, I'd really love to know if there's something that's making people bounce off the product, because it may be trivial to fix!
I love good GUI apps. They are hard to do well.
Juggler, for example, already collides with a Keyboard Shortcut I use across the desktop, so CMD + J can't be used. It also uses CMD + / for keyboard shortcuts? Tha's a choice. It doesn't respect Mac's preferences/settings shortcut (CMD + ,)
You can be on a chat window, and there is no way without using the mouse that I see where you can start typing into the chat box. Juggler tells me to type / and I can run a command. I type / and nothing happens. What that really means is I have to use my mouse to put the cursor in the small chat box down below.
This isn't to say Juggler is bad. Rather, it's got a long way to go for the GUI to be something that has the fluency of something like vim.
TUIs generally have to solve for that. You have to offer up those features. You can't rely on laziness. So at the very least, there generally are keyboard shortcuts and they need to be obvious.
Feel free to think that people don't have a rational reason for TUIs, but it buys you a lot for free. And this isn't an indictment on Juggler. It works. It's functional. It doesn't feel natural, nor does it respect conventions.
I've never felt that urge, I've always been happier using Visual Studio / Xcode / VScode with default key bindings, and focused on other things. I'd rather click things inefficiently with a mouse than invest effort learning keypresses. Neither of us are wrong or right, but I think I'm trying to cater for my tribe on this project!
> I totally get it. Lots of people, like you, love to set up their perfect custom, key-driven environment, and tune everything just how they want it.
No, you don't "get it." Like me? I don't want to set things up. I don't want to customize. I thrive off convention. And there are apps that follow these conventions. They do this out of respect for people who enjoy the defaults they enjoy elsewhere in other applications.
> I've always been happier using Visual Studio / Xcode / VScode with default key bindings
That's not true though, because you don't even use the same default/convention key bindings they use. By doing things your own way, you are making it so it's harder for your users to adopt your application.
> "mine does that too, but with lovely graphics.",
But it doesn't. You don't care about the little things, so how are you going to get the bigger things correct?
Listen, it's great that you built a tool that you love. I love doing that, too. But if you want users, you have to respect them. And that means making it easier for them to use your app.
And if our app just doesn't work because / doesn't do what it says it's going to do, that's an issue. And if your app doesn't allow for customizing keyboard shortcuts, it's disrespecting users who have those set for something else.
> but I think I'm trying to cater for my tribe on this project!
Just realize that tribe is juggler-ai users, or people who don't use defaults. People who are fine with default key bindings, can't effectively use your app.
I wish that was true!
I'm not a cowboy arbitrarily making up random shortcuts. A major goal here is for a user to get near-as-dammit the same UI in a desktop app and in a remote browser. So all these shortcut choices have been a compromise between:
- what different people might expect the default to be (on mac/windows/linux/all kinds of apps)
- what a browser already uses (on mac/windows/linux/chrome/firefox/safari/etc)
- what people might have overridden random window managers and custom OS shortcuts
- what tasks are common enough that they deserve an easy-to-reach/remember key in spite of other factors
- choosing groups of shortcuts where you want the keys to be related (e.g. navigation) despite some being taken on some platforms
I obviously want the least surprising UX, and if this was just an app on one platform, it'd be easier. I've had to build a multi-platform shortcut manager that changes depending on the client, while trying to also keep as many as possible constant.
And yes, allowing users to customise the shortcuts is obviously on my list, but a) I wanted to let the app settle in and make sure I've got the right data model for storing key shortcuts first, and b) other more urgent features..
BTW `cmd+/` is the default "show the key shortcuts" in most chat environments like discord, slack, teams, google docs etc. These are much more relevant to juggler's UX when it comes to default shortcuts than things like VScode!
(...but yes, I had forgotten to add a desktop-app-only binding for `cmd+,`, so thanks for mentioning that - I've sorted that out now..)
How can a GUI replicate this workflow? I know it could, technically, but not as easily.
Cursor has this, and there are others that can attach to ssh or open their UI via a tunnel or web interface.
SSH is mighty convenient though, so I am not necessarily saying your point is incorrect.
Wut?
But maybe this will be good as a meta harness. For my whole disk. I will take a look
LLM error: failed to start claude CLI: claude executable not found. Searched $PATH, the login shell, and known install locations (~/.local/bin, ~/.claude/local, ~/.npm-global/bin, /opt/homebrew/bin, /usr/local/bin). Set JUGGLER_CLAUDE_PATH to its absolute path if it lives elsewhere
I think any tool that needs claude CLI is a no-go in my list. Claude is a closed source binary with idk what it does in there, IIUC. Maybe I am not the target market for this.
But it's GUI, so a no go by default. TUI > GUI
This project looks great, well done, BUT it seems very odd to be "grumbling" about Pi when you're explicitly targeting a separate audience (GUI users).
There are other GUI tools like Juggler that are quite popular, like cmux, that it seems better placed as an alternative to.
The reason there is so much noise in is area is because these tools are a dime a dozen and trivial to create with AI. I don’t think it realistic anymore to expect a rush of users and make money off of these. The supply is going to far outstrip the demand.
Last Saturday I asked Claude to create a Claude Code clone for me with a few customizations that I personally prefer. It did so in less than an hour, and works just as well as Claude Code. I’m not looking for attention on it - I’m happy I made it, and just myself as a user is gratification enough. I think this is the future of software development, and I think having expectations of attention from others just because you made another tool is setting yourself up for disappointment.
Like many things I've made, this started as a scratch-an-itch project, but now feels like it's unique and useful to enough people that it's worth a shot at turning it into a business. Exactly how to monetise it, not sure, but regardless of that step, step 1 is definitely just getting it out there!
There's a lot of "What's the point in making an app, one day we'll just ask claude for the tools we want and it'll write them in a weekend" but I think: a) For things like this you're going to get a better result by taking an app that's roughly the right shape, but customisable, and asking claude to customise it b) If we do end up in a world where nobody sells software apart from openAI and Anthropic, then that's a bad, bad place to be
It looks like a good system, great if it works for you - but we now live in a period where I could build a similar tool to handle MY preferences in a weekend if I wanted to.
And, it would almost be EASIER than learning to use a new tool. I prefer PI because I didn't want batteries included in the terminal. Any decisions about what a user might want is a decision made on the user's behalf that dilute that core.
Juggler looks good - not personally for me. But that's OK, it's got 675 stars and a bunch of forks. That's attention, no?
It's true: with proper planning, thought, and focus, you might be able to generate enough code in one weekend to create a tool that is at parity with something like Pi - but chances are the amount of focus, planning, and thought is going to be greater than one weekend worth. And I don't know about you - but I don't really want to spend my weekend building a coding harness, I have other ideas and projects I'd rather execute.
I’m not exaggerating when I say all I had to do was prompt “build me an LLM coding harness like Claude code, but make it so that I can resume sessions from OpenCode and Pi as well” and that’s it, and it was done within an hour.
Did it have warts? It’s been working nearly flawlessly, but there have been a couple of really minor things. One of the things I realized quickly was that it didn’t have a WebFetch tool built in, so I prompted “add a webfetch tool” and it did it within 5 minutes. Warts are trivially fixed.
The things that really differentiate software now are the ideas behind them, not the implementation. So if (like the OP) you’re looking at a tool and going “well mine does that too…”, so what? If it’s just a re-implementation of the same ideas, anyone can recreate it (and add on their own customizations to boot).
Personally, I am getting frustrated with the amount of people trying to pitch me their tool they made. Tools are a dime a dozen. Share with me your ideas, and I’ll share with you mine, but I’m not gonna adopt your tool.
Sure, and then tomorrow it's compaction, then worktrees, then an annoying buffer scrolling bug, image clipboard handling, etc etc. I don't buy for a minute that a one-liner prompt creates a perfect program because I know from experience it doesn't. You are inheriting the maintenance of a non-trivial program. That's perfectly fine if you want to tinker and spend time on that but I would rather offload that to someone who wants to spend more time thinking about those problems than I do.
> Personally, I am getting frustrated with the amount of people trying to pitch me their tool they made. Tools are a dime a dozen. Share with me your ideas, and I’ll share with you mine, but I’m not gonna adopt your tool.
I'm not sure I follow this line of thinking. Obviously, juggler is the result of an author who has spent a great deal amount of time thinking about an idea. It is the manifestation of the author's ideas. I agree that the amount of vibe coded slop out there that people think is marketable is ridiculous, but Juggler doesn't really look like that. It's still worthwhile to evaluate well thought out tools IMO.
Every thing you listed works out of the box. Believe it or not, it’s true! And creating tools like this is only going to get easier as LLM models progress.
Your comment very much reminds me of comments from 2023 saying that LLMs would never be able to write working code, or be able to generate lifelike pictures, or be able to find security issues… but look around you, they’re doing all of those things already!
> I'm not sure I follow this line of thinking. Obviously, juggler is the result of an author who has spent a great deal amount of time thinking about an idea.
Awesome! That’s why I asked the author why they wanted attention. I want to hear more about those ideas behind juggler. What makes it special? Why does the author (who has tons of experience in software) think juggler is different? What were the obstacles that the author overcame while building it? That’s what I want to know, but these comments share none of that. Instead they just say “I also built a tool that does the same thing, I wish people would use my tool instead.” Why in the world would I?
- a multi-client, state-machine based architecture rather than a naive LLM loop
- a bunch of UX features that I wasn't seeing in other harnesses (although of course they're all churning away in terms of UX so this changes all the time)
The difficult bits were:
- getting the data model right. This was a lot harder than it looks!
- getting an automated UI test framework in place that was robust enough to trust that incoming changes wouldn't break something. Originally I hoped to get away without this (I've never worked on a project before where we had automated UI tests!) but it was just a shitshow. I spent a couple of months getting this right, but it turned the whole project around and it's now incredibly quick and safe to make changes.
Fwiw, as a terminal-dweller I have trialled cmux - it didn't hit the spot for me obviously, but I filed as away as a tool to recommend to my wife/siblings who are pretty technical but don't code, but want to dip their toes in this age of llms. That's a growing demographic I haven't really seen many tools trying to serve - Juggler's not explicitly aimed at that market but it looks much much better suited than cmux or other guis I've seen, so I'll probably be giving it a go.
Sorry if this question is condescending, I just want to understand what is your vision for this tool :)
What I'm trying to do here is offer a tool where everything you do is provider agnostic, so you can use claude for some tasks, GPT for others, local models for others, without having to switch environments.
And also, when you run out of tokens in your claude 5 hour window, you can just flip over to Sol and finish the task..
`brew install --cask juggler-ai/tap/juggler`
We need to pay attention to the new Cambrian explosion of software. The attitude of "everyone already uses VSCode" should disappear, and people should be open to try more niche products.
After all, being a developer is no longer a moat, and smaller ecosystems can thrive now.
However, I likely wouldnt suggest Pi (or even opencode) to someone who I would also suggest Juggler. They just dont feel like the same type of user, in my opinion.
I do think you could take a look at ChatWise, Kelivo, Rikkahub, Jan, and Waku if you wanted to see who your real competitors are. Again, in my opinion.
Those are full standalone GUIs with workspaces and built in tools that help you get things done without requiring any terminal commands.
Marketing really matters here. Sometimes a tool can take off on its own with just a little bit of prodding (hn/reddit announcements and the like), but in this era where there is just way too much choice that is difficult to differentiate, the S/N is just too opaque.
Think about Matt Pocock for a moment - the guy is literally famous for 'his' grill-me skill. A skill. And something he really did not come up with, as the core tenant has been a a prior-art prompt template going back to 2023, but no one seems to question or point that out as he has been so pervasive online promoting this as his invention that it just drowns out any dissent.
Best of luck!
There are so many ways to visually manage your agents sessions with a terminal app.
Unrelated, I found that when an open model (qwen3-coder:30b) drives an mcp tool (chrome-devtools-mcp@latest), it hallucinates the tool calls, and the docs say they never promised that tool calls would make sense or be valid. To me, this is a blocker and is the reason I've stopped looking at harnesses like pi. The tool calls are just fine if a closed LLM, gpt-5.* drives them, but I need a free and open LLM. Have you run into this issue, have you addressed it?
> Can it also be used with pi and other tools?
You might use it instead of pi, or in addition to it. Juggler and pi are both harnesses, not things that work toghet.
But, seriously, I'll fire this up!
An iOS app is on my roadmap, and pretty easy to do, because the whole GUI (including the desktop app) is just HTML being served, so shoving that into a mobile app is pretty trivial.
I have not revisited VSTs post LLMs or even stayed close to music since I lost my collection and rock climbing has consumed most of my last decade, but kudos to putting such unique tooling out there when the rest of the ecosystem looked so byzantine. It's wild how people built so many incredible virtual instruments back in the day.
Going through those memories I'm now curious how the scene is like today where wild idea projects are more within reach.
Been running it almost barebones vanilla for a couple of months. Just a bunch of basic extensions and some skills.
Now, if only they could fix the very annoying bug of the history jumping back at the beginning if I am not a the end while the model is reasoning that would great.
I am also using pi exclusively after having had decent success with openhands but begrudging all of the docker infrastructure ... and all of the emojis.
My only pain point is that in my extremely common and boring workflow, which is pi inside of gnu screen inside of OSX terminal.app ... all reasoning/thinking text is blinking ... like old fashioned ANSI blink on a BBS.
I cannot figure out how to disable the blinking thought/reasoning text ...
If I remember correctly, the reasoning text was being output using the italic ANSI code, which was being formatted funny on my terminal. I fixed it by adding a font that supports italics. I recommend taking a look at the ansi codes.
This seems like an obvious configuration option - I can imagine someone disliking the italics as well…
Perhaps Pi should ask after x days of installation; is there anything I can do to make the interaction better?
That line is in the startup message everytime...
Came from iTerm2, and Ghostty is much faster and minimal.
Tangentially I also kind of feel like there is some level of deification of Mitchell's products but that's a diff topic.
Couple skills to integrate with an obsidian MD task tracker, small chat interface on the phone made public via tailscale, and bam, a reminder bot you can text from the grocery store.
This is what I did and then just wrote small skills so now pi can read and send messages for me.
Nothing, really. Might be coming soon, but no.
You probably want to try bonsai, I guess, but don't expect good results.
Running smaller 4B-7B models entirely on the GPU VRAM will get you fast inference, but you will need to scope and define the tasks well. eg, using it the model as a classifier and just feeding it from a queue.
The best performing "agent"-like model to plug into a harness that I have found so far has been Qwen3.6-35B-A3B (mixture of experts) model as I can park most of it in system RAM and CPU, while the VRAM holds the attention/shared weights.
It's definitely workable as a local AI homelab. But expect homelab levels of tuning/fiddling with it.
With the improved support for AMD GPUs I'm finally considering getting a modern 16GB card (and maybe a second one in a few years assuming prices come down)
You could install this yourself for free? I get $0.50 isn’t all that much, but still?
But AI for installing tricky opensource software is indeed a good use case. I do that too.
Even if you spend just 10 minutes of it, I would say $0.50 it's not a bad deal.
One of the dumbest sayings ever. Unless you spend all of your time doing something that makes money, the time is worth $0. You could say that you prefer to do something else during that time and would happily pay to free it up.
I agree, as my time is much more valuable than money.
"You could say that you prefer to do something else during that time and would happily pay to free it up."
Correct, it is applicable to just about everything you pay money for.
Also, I’d love to use Deepseek directly (or any of the Chinese providers, at that). Seems only fair to pay the lab that built the model. Unfortunately, any requests to Chinese servers is deeply frowned upon here (Belgium, EU). For personal use: sure. As a token intelligence strategy for the company: absolutely fucking not.
Not in my experience. I need to explicitly set my preferred provider(s) for each model, otherwise it bounces me around even within a single session.
Using llama.cpp with Qwen3.6-35B-A3B or gemma4-26B-A4B gets me 200-300 tokens/s on prompt processing and 20-40 t/s output, which is good enough for me. Of course it gets slower with larger context. Interestingly gemma is faster, even though it has more active parameters.
It took a lot of parameter fiddling to get it to that speed. If you are interested I can give you some guidance on it, but I guess there are more qualified people around here.
The intelligence is good enough for simple questions and tasks (e.g. bash command howtos, asking about compiler errors, summarize something, document a code function/file, etc), but not good enough for complex things.
What quantization are you running for these? Like, you cant just run the "real" ones on your laptop right?
Wouldn't the performance of Qwen3.6-35B-A3B be drastically different if its quantized to 2b, 4b, 5b, etc? And also be effected by who did the quantization?
The computation is partially on the CPU (--cpu-moe) with the corresponding weights in main memory, so I could run at least gemma in 16bit precision, but I guess there's no reason to go beyond 8bit and 4 bit is deemed to be the sweet spot.
Yes. There are graphs showing the faithfulness of the logit distributions for the original and quantized versions. I think unsloth includes them in their model cards on huggingface. Usually the degradation starts small with 8b and becomes drastic for 2b. I am not sure how representative of actual quality that is though, but my guess is that it's about right, because of diminishing returns. Like, when you go from 16b to 8b you save 26GB and sacrifice (if well done) the least important information. But with every step you gain less and need to shave of more important things.
> And also be effected by who did the quantization?
My uninformed guess is that it makes a difference, but not as much as those who do it want you to believe.
- https://huggingface.co/unsloth/Qwen3.5-9B-GGUF - https://huggingface.co/empero-ai/Qwen3.8-9B-Distill-GGUF (unofficial Qwen 3.8-9B) - https://huggingface.co/ornith-ai/Ornith-1.5-9B-GGUF (my personnal favorite)
You should go to huggingface and maybe create an a/c with a throwaway email and enter your hardware details and that will filter the models for you.
I use agy and codex, and don't see strong difference in ui quality.
But I agree, it's definitely a matter of workflow, because I can see omp doing untold damage in the hands of the uninitiated.
However, they have now set full-screen mode as the default.
We launched Pi support in Wasmer a few days ago and reception has been great (so you can run pi in your iPhone or browser, or even embedded)
We have set up this demo, if you want to try Pi 1.0 online: https://wasmer.sh/?example=pi
(for an easter egg click on the Pi logo on the top left!)
Oh and that will be the new default 'Full-screen mode by default'
How do I know? I implemented my own terminal harness and faced the same issue.
It's so interesting because Claude Code used to have this bug a long time ago, but it was eventually fixed. Strange that they both had/have the same issue.
Or is it a non-trivial bug that requires a lot of refactoring, and could introduce a lot of new bugs? That would require careful review from a human.
The latter may well be a reason why I don't see extreme productivity gains in larger brown-field projects.
(Disclaimer: I see enormous benefits in one-off greenfield projects.)
You can use llm to optimize some of this, I condensed the tool descriptions of some larger LM Studio plugins to shrink prefill by almost 10k tokens. But there's a soft limit to this, if you don't want to under-document available tools and let the model guess (/behave unsafely).
One optimization around this is called "smart tool selection", which only sends tool descriptions when the model indicates need for a certain tool (suite), not all of them upfront.
Since January I use Pi professionally as well as personally and I can only recommend to start small and grow your harness over time. For example, for an agent in production it was so helpful for me to use Pi in interactive mode via tmux to get a feel of the agentic flow, tool calls and reasoning traces for a certain use case while only the stylized responses are rendered in Telegram via an extension to the user. As a Developer, I have full technical observability and control while providing and incrementally improving a service to a user at the same time.
Excited how Pi Durable will fit in and can support more. Congrats and thank you!
The second case, more recent, is one where I use actively now is linking pi sessions to some artifact like a code change(PR or diff) or a collection of document and then continuing the session in that context.
What was your main power case with it.
In the past I used this abstraction conveniently to setup different agents for different purposes. I kinda like having this abstraction on my filesystem to inspect instead of it being hidden away in a opaque harness or, even worse, the weights of the model.
EDIT: then a Pi Extension that swaps .pi directories out, maybe via git worktrees, is just the low-hanging fruit to establish your profiles pattern I think.
I think they mean that most companies that use these Tolkien names, are on the dark side.
Are you sure about that? All llm use is like this?
> When I'm old I want people to remember Tolkien named companies for things other than weapon and surveillance systems.
Though I find it funny that they put “Bearer of Light” as a description, at least on their GitHub page. AFAIK Tolkien did not used the phrase, it is maybe a bit too close to the Latin version, Lucifer. Talk about a thing corrupted by darkness.
Or maybe from the 9th century poem Christ I [2], which translated to modern English starts off with the words
Hail Earendel, brightest of angels,
Sent to men over middle-earth,
And true radiance of the sun,
Fine beyond stars, you always illuminate,
From your self, every season!
IKEA catalogs using Swedish names, and Swedish being a Germanic language that stayed truer to its Germanic roots than English did, it's not that far off. In a weird wayPi is great overall. I ended up deploying a GUI wrapper because TUI isn't as friendly to new adopters.
https://github.com/hardbeat920/monocode
But yes, the TUIs are supposed to be lightweight yet it is overall a horrible experience.
It kind of just gets with how you creative you want to be about it.
It's kinda a tinkerer hobby IMO. I like the freedom, but at the end of the day, it's still just a harness.
Oh My Pi comes preloaded with most stuff you need, so there's not much need to add extensions. https://github.com/can1357/oh-my-pi
For example, I started using it, wanted a plan mode, downloaded an extension for it. Wanted to be able to analyze token usage for turn in a session, I had an agent create an extension for that. Then I wanted a custom status bar, so I had an agent implement an extension for that.
I love open source. I love the terminal. I spent the last 20+ years in a terminal w/vim every single day, and then claude/codex TUIs, and yet I care more about my own productivity so I don't use any of that now.
For research, planning, figuring out bugs, etc I usually don’t bother creating the worktree until I’ve decided on the implementation.
I’m sure there’s better workflows and software, but all I’ve got for work is gh copilot and Claude enterprise. I like copilot better than Claude for the most part.
cursor.com
conductor.build
code.visualstudio.com w/ Claude Plugin or equivalent plugin
zed.dev
there are dozens tbh
I usually start a codex or claude session on the remote host, close my mac, even restart Orca desktop on mac, but when I start Orca, I can watch the Orca on my remote host working through.
It's similar to Claude remote session, but just easier to manage, easier to create worktree, easier to navigate, open multiple tabs etc.
Tossed all my weekly usage for each provider at the top with their 5hour windows and such. its been great so far.
I usually recommend Conductor to most people. Personally, I use the one I built, but it's got a few ergonomic issues for most people which I still need to fix.
No affiliation, just arrived at Paseo after a bunch of research.
I've eventually settled on a CLI agent multiplexer that essentially run in the background while the frontend is a GUI gateway agent to that backend system with a goal middle layer so I no longer need to interject directly into the prompts and forces the CC and Codexes to communicate to me in a structured format relevant to my purpose.
Even if taking pride in your tools was a productivity killer (I have my doubts), maybe there's mental value to be gained.
In Oct 2026, if you're optimizing for productivity, then yes, you probably should just use both Claude and Codex in a GUI agent multiplexer and forget about everything else.
If you care about other things, then have fun, no one is stopping you. I'd disagree with you that using alternatives mean you take more "care" and have more "pride" in your tools, but it's hardly worth arguing over.
Hell, some extensions could theoretically lower your token burn. (Like rtk, if it actually worked.)
But you want to forbid those people from driving.
Do you work for Anthropic?
I have another one that allows you to edit the items in your Pi /tree history.
Some permission manager extensions also sit between the model and the harness, and don't actively change the tool or prompt info.
I probably have more, but you get the idea.
I'm so use to the command keys in Pi that having to type something out in OMP slows me down. I'll stick with Pi, I've built it to my needs and having WSL finally working. I still have to run 2 CLIs, one for LLama.ccp and the other for Pi, not sure if this is normal.
omp offers some nice tools, like /shake, to manage context efficiently and offset some of that consumption.
Not sure about your point with command keys. OMP has all kinds of shortcuts and is highly configurable. It seems very unlikely that you cannot achieve what you're looking for in OMP in terms of shortcuts. Specifics would be immensely helpful here.
And yeah, you'll need to run your inference engine separately from your harness, for the same reason the web server and the web browser are different applications.
One example here is that it added MCP extensions to make the harness usable with MCP servers long before Pi figured out that that was the right move. A lot can be said about development of MCP over that timeframe, but I appreciated the bias towards adoption, since progress is driven by empirical experimentation rather than theory in this domain right now.
I've long championed assembling developer tools yourself from scratch and I've been an advocate of vanilla Emacs and customizing it yourself as an ideal developer experience (I realize this opinion is controversial). But OMP is essentially the VSCode to pi's Emacs.
I ended up choosing omp as my daily driver, mostly because I see the velocity of change in AI development being far too fast for me to make a worthwhile investment into customizing the environment myself, since that investment will have a relatively short half-life. With Linux, which I learned more than 30 years ago and still believe to be a fantastic investment, I can largely use the same knowledge I gained then to administer systems today. I fear that much investment in the specific tools that I add to my pi harness will expire before 2027. So I'm sort of drafting OMP until things settle down.
It automates a lot of the babysitting of agents, and lets me use a couple of smaller models with safeguards instead of burning tokens on a galaxy brain just because it listens to instructions in AGENTS.md.
/omfg automatically adds new rules, so I have plenty of project-specific enforcement (e.g. disallowing making certain fields public, which agents love to do to take a shortcut that ruins the architecture).
There's definitely a class of folks who like to "polish their tools" per se vs tools just being as a means to an end.
It's fine and cool, sort of like the desktop ricers do with Hyperland, Niri, etc showing off desktops, but never seem to do anything with this cool tech.
The only thing I've configured is the default model.
then i use pi in a terminal like a caveman to try the open models like deepseek etc.
I also have pi running on a VPS. I have a custom Django app that calls out to it for a bunch of stuff. I don't know how the full system works because the agents built it but basically I think one pi uses a whatsapp wrapper to constantly listen to a whatsapp group and find bills. Then those get added to the Django Database which triggers a second pi + deepseek to OCR them, parse out the data like amount, due date, reference etc, and update the database with that. I have a trigger to 'merge duplicate', which is also just a prompt and pi.
Yes you can do all this without a harness and just the model APIs directly but the harness means it can use linux tools to crop the PDFs etc, so when I also wanted a new feature that crops out the bank details and lets me hover over and see the original before making the payment for a bill that's just another tweak to pi's prompt (or more meta, me prompting my agent to update pi's prompt).
i haven't gotten around to it yet, but i'd also like to change how `Bash` functions on a basic level (and subagents), where rather than the agent picking a fixed timeout, it just gets notified with exponential backoff about commands that aren't done and then gets a turn to decide what to do with it.
having said that, i find it annoying and not empowering that basic things like subagents and web search aren't built in. the ideal to me seems to be an agent with polished extensions for all the common use cases that can be disabled if you do want to rewrite them. but i put up with the pain because i really want my pet feature ¯\_(ツ)_/¯
Just keep using Claude or Codex.
It's all window dressing and some delta in token usage, but again who cares really?
This really only matters when you're productizing "AI" for your end users, that's when you need to see which agent uses tools better, has more support for MCPs, headless mode, sessions, etc. \
But what I do use Pi a lot for is as a base for agents. I much prefer it to using an agent SDK. I find its minimalism and extensibility to be a really nice substrate for new projects.
I could easily imagine someone getting to a really productive personal setup with it as well, for the same reasons as above.
I've tried Oh-my-pi but it's too heavy for me and eats up 6% of my context on start. Also I find Pi's keyboard shortcuts easier to use.
I use WSL, one tab is GitBash running llama.ccp and the other is normal terminal running pi. Winning combo for me.
Also started using Pi as my search engine, which I've refine and does what I need it to do, can also ask it to create a html doc with links or markdown. Fun stuff.
You don’t need extensions or fancy setups.
Like, is this thread full of astroturfing bots? What am I reading
Did you write your own XMPP plugin, or did you use pi-xmpp package?
- Ask it to accomplish some coding task
- If it fell short, and I determined that was due to the harness, ask it to patch
- Otherwise proceed to next task
- Rinse + repeat
I run it within a sandbox, so I've been comfortable with the lack of native "approvals". So far my personal usage hasn't really needed subagents, but I think this is one thing I'd need to sort out were I using it professionally[1]. I'm aware of oh-my-pi, but I think half the fun is hacking from the base.The light weight prompt and simple harness design are a lot of fun. I don't mind Claude Code, and I think its well designed for the problem domain, but Pi is a lot of fun to hack with.
Hope that helps!
[1]: https://mariozechner.at/posts/2025-11-30-pi-coding-agent/#to...
I started using Pi because it has a small system prompt and local models were too slow to start. Then I started adding custom skills and extensions when I hit little corner cases. It's been so easy to bend into what I need.
I have eight or nine custom extensions at varying levels of maturity, some nearing the point where sharing them becomes useful.
One is a simple but obvious Eoka extension for Pi.
I modified my terminal (Alacritty) to support the Kitty image protocol (it already spoke sixel; Pi understandably uses the superior Kitty protocol). And a toolcall that lets the LLM put an image in the transcript (upstream Pi lets only image-modality LLMs do this). "Deepseek, do XYZ in a headful Chromium using Xvfb and show me a screenshot before each step".
Once you see the immense power you get from being able to modify both ends of the terminal connection (and having LLMs write the tests and tedious parts for you) it's addictive. I've added a custom terminal extension for negative-row-number cursor positioning, and support for it on both sides of the connection (Pi and Alacritty). End result: all the performance of native scrollback with no compromises -- Pi can modify rows above the top of the visible part of the screen, like collapsing/expanding toolcalls, without forcing a full-terminal refresh.
Also: click-to-expand/collapse toolcalls/replies individually. Really helpful.
Disappointed that Pi is abandoning the minimality philosophy.
ChatGPT Desktop seems to intentionally hide what they are doing and where they are storing state, sessions, config, I never had any idea what is in context or what "archiving" even means. I got sick of OpenAI hiding how ChatGPT Desktop was working. I opened pi and the default behavior shows me how much context I am using, how much that costs and tells me where it stores my session data.
Suddenly it was all demystified and that is why I use pi. It has nothing to do with a functional gap, it was the joy a using a harness that was transparent about how it worked.
Manual tests in my minikube and has skills to deploy the right service there. It updates the jira ticket with test proof.
For debugging flows I build skills to use my local minikube that has our full dev environment and all services running. Can debug there. It has grafana skills for gcx can grab logs and through grafana even accesss dev/staging db for quering.
I wrote all the extensions with these custom integrations. It works just like I would work... I don't like adapting myself to another opinionated harness. I prefer my own opinionated workflows.
Developers just love to spent considerably amount of time and effort into building tooling. Way more than working on the actual products.
But I must admit it is really fun to build your own harness and tweak it to your liking, even if it is never used for professional work ;-)
For one thing I've re-built my personal website with it (mostly via GH issues from GH iOS app) and also added a section to talk about how I use AI in general: https://a.l3x.in/ai
I also maintain a couple of other Pi-related projects:
- https://awesome-pi.site/ - https://github.com/shaftoe/pi-coding-agent-action
So yeah, I still love the tool and use it pretty much every day, either as TUI sessions or inside CI/CD workflows.
Long live Pi!
But I do love it - super customizable, and my token usage seems way more efficient (this is purely vibe based ofc) compared to codex/cc.
I basically just install pi-fabric, pi-blackhole, grill-me and that's it. Tell my AGENTS.md to prefer subagent workflows. Herdr to manage all the terminals. I spend 99% of my professional work in this environment, I can't even remember the last time I had to open vscode/nvim.
Herdr is OK - but the actual interface / layout is nice. I previously would have like 6 terminals open and would lose track of which was which. I'm not super into the subagent workflows, but it's been helpful a time or two.
The only reason Herdr is just OK is because using agents to collaborate will sometimes just hijack my prompt input field. Maybe I'm using it incorrectly but I would have thought they might have a more elegant solution than that.
This might've made a better argument ca. 2005 wrt a 20-something Austrian's minimalist wsgi framework. Heck, I'll bet you could even find said argument somewhere in the Archive :)
That goes against the philosophy of pi. Nearly Everything is a Plugin. Need to set the reasoning effort? Install pi-reasoning. Need subagents? Install pi-subagents. Need permission gating? Install one of the permission extensions (otherwise the agent can do everything).
A feature like cache warming on Anthrophic feels very strange in this environment. NOT saying that it is not useful. It just should be a plugin.
Good thing I can remove another package.
They also say so on their website ( https://pi.dev/ ): "Pi ships with powerful defaults but skips features like sub-agents and plan mode. Ask Pi to build what you want, or install a package that does it your way."
I fully agree on the quality of the packages. Can vary quite a bit. I stick to very popular ones.
i guess you could blame the api, if you wanted.
On a more serious note: pi-agent shouldn't know about such arbitrary limits imposed by a company that gets paranoid when people use thrid-party agents to consume their Claude subscriptions.
A feature like cache warming on Anthrophic feels very strange in this environment. NOT saying that it is not useful. It just should be a plugin.
In general, though, some kind of API ping on a timeout does not support my personal workflow, which involves dozens of active or stagnant agent sessions that stay open for weeks.
I'm just running it now in its own source with Qwen 3.8 27B and llama-server and asked it to analyze the code itself. I'm mainly curious to see how it handles context compaction during tasks (what Pi does is almost seamless and AFAICT it isn't anything particularly fancy so i'd expect Hax to do something similar) and i guess asking it to analyze a whole C codebase would help trigger that with a 131,072 context. Unfortunately it seems to be missing some "context usage" indicator while it does stuff (it shows context usage in the prompt but not while working), but i guess if it does manage to analyze the C code properly, i can ask it to add that :-P and see how it fares (from my use of Pi i'm positive Qwen 3.8 27B can do all that stuff, so it'd mainly be up to the harness).
EDIT: also i wonder if it works nicely if it is possible to convert Pi transcripts to Hax - i have a few "in progress" and i'd like to continue where i left from, though while both seem to use JSONL for the transcripts i'm not sure if they're compatible
EDIT2: hrm, it tried to use more than available tokens during a compaction and stopped there expecting me to increase the limit (i can, but what if i couldn't?) and restart the llama-server. Pi sometimes does hit it but it manages to recover by itself without requiring any input by me (or to increase llama-server's limit).
Pi ended up hitting a compaction during a tool call and finished without issues, which is what i expected - in fact after giving the instruction i left to visit a relative since i expected it wouldn't need me to babysit it.
FWIW after it finished, i asked it the following:
---
Can you answer me the following questions about how Hax manages the context?
1. How does Hax handle running out of tokens? It does have some form of compaction, but if the compaction fails for some reason (e.g. the summary ends up needing more tokens) what does it do?
2. Can it handle cases where the context runs out of tokens during tool calls and if so, can it recover? How?
3. What happens with compaction if an LLM produces a few large responses or the LLM reads a few large files? Does the process ends up summarizing the entire (or all but one) conversation? Or is the entire conversation lost?
4. Are there any safeguards in place to avoid overwhelming the LLM? For example any file and tool output limits? If there is and any limits are reached, how does it handle them?
---
It went on and checked the code and, briefly the response (it was bigger but i don't want to repeat the entire thing):
1. It doesn't update the session on failure (last "good" session is kept), running out of context is treated like any other error without any automatic recovery and you're expected to fix it by hand (personally i'm not a fan of this).
2. Multiple tool calls are fine (there is a 85% threshold check to trigger compaction and a 50k tool result limit) but if a response and results jumps from below 85% to over 100% despite being under the 50k limit, it doesn't trigger any compaction and the next request is denied by the provider (i.e. llama-server). I have a feeling this is what i hit when i tried Hax with its own code.
3. There is no recovery from a user turn (prompt + response + tool result) that exceeds the window. FWIW this also seems to be the case with Pi.
4. It found a bunch of safeguards (tool output cap, caps in bytes and lines for the read tool, bash writes to a temp file and only a part of it is sent to the LLM, edit size cap, etc). AFAICT it is the same as Pi with one neat addition in that there is a default 2 minute timeout for bash calls (i've seen the LLM more than once run a command in Pi and end up stopping for 30+ minutes because the command wouldn't end).
For 3 i asked it a followup question: "About 3: AFAIK Pi (the harness you're on right now) does a "spit" summarization where the old messages are summarized up to a cutoff/split point and replaced with the summary while the newer messages after the cutoff/split point remain intact, which allow a mostly seamless transition between compactions. Does Hax do the same or something similar?"
The response was that, no, it doesn't, it summarizes the entire context. Which TBH is a bit of a dealbreaker for me since i often rely on this "seamless" continuity in my prompts and feels like the main reason why compactions feel like a non-issue with Pi.
Take the above with a grain of salt, i only checked the code for the compaction not using a split/cutoff point between older and recent messages, the rest are whatever Qwen 3.8 27B understood, but they do match my short empirical test. Also if my own understanding of the code is correct, it seems to be using the same system prompt for the summary as for regular/interactive use while AFAIK Pi uses a dedicated "you're an expert summarizer" (or something like that :-P) prompt. Not sure if it makes much or any difference, with LLMs being what they are, but TBH whatever Pi does works great IME.
On the other hand the idea of a self-contained native AI harness in C/C++ is enticing, especially one that doesn't have any network traffic outside of LLM-related stuff[0] and explicit user requests (Pi does try to autoupdate and has a separate opt-out telemetry beacon - both of which are disabled in different means, one via environment variable and another via a setting, which smells a bit like an dark pattern to me).
Anyway, this is the result of my findings about Hax. It is neat, but TBH the context handling is the main dealbreaker for me, especially since i'm often having the agent do something in the background (using a local LLM isn't exactly the speediest workflow) and do other stuff or leave the computer alone, so the last thing i want is to babysit the agent for errors. Pi's split summarization and context overflow handling seem to work much better.
For now i'll probably stick with Pi (i have autoupdates and telemetry disabled and i hope there isn't any other hidden snitch in place) and perhaps at some point i'll do the NIH thing and make yet another agent myself :-P
[0] well, it does attempt to autoconnect to a potentially running llama-server in localhost without being explicitly told to do so (Pi wants explicit configuration) but meh
you can use /slots on the llama-server if you want to get more up-to-date details on session token use.
I always run models in their default context, which is 262144 for Qwen3.8 27B. I've run sessions in hax where it hit that cap multiple times and compressed the context down to 15% and continued with no problem.
I’ll sometimes ask the new agent to look at the previous transcript file.
Pi's selling point used to be: no MCP, native scrollback.
Now Pi is a fullscreen TUI with built-in MCP.
Yes- I plan to make a a full web app, as well as a web-and-terminal orchestrator app. Still planning the details.
Can you elaborate?
What are the decisions that lead to this difference and what are their pros and cons?
I noticed Pi being chatty, but I assumes this was a model issue (DS4.1F).
https://github.com/richardgill/pi-extensions/blob/main/PI_SE...
It's still pretty minimal and brings back just enough stuff that I don't miss Claude Code.
Pi's plugins are its strength, but also its weakness, because most feel more like personal vibe-coding projects than seriously maintained tools.
Adding MCP support is lovely, codemode sounds super interesting, and I'm super excited to take advantage of it. Now it's 1.0 I'm hoping I can convince IT to let us use it officially.
Still, the halogen version only occupies < 40GB RAM on my machine (which is surprising... the Q4 takes over 100GB), so perhaps a 64GB version is on the table.
I have a half finished repo that sets it all up for production (using systemd, not hacky scripts and one-off docker commands), if someone is interested in this, tell me, and it might give me the push to actually finish up the latest threads and publish it!
Maybe spend $100,000 in tokens to fix that.
Although if you want to compare sloc, a quick Google returns that OpenCode is ~670k sloc, so it's smaller there, too. But the real advantage is the prior one.
The harness is built on top of the Pi SDK. I initially used Codex, but Pi seems more hackable, and I like that it’s vendor-agnostic by default.
Running it on Kubernetes works, but dealing with the JSONL session files and making sure sessions survive pod interruptions adds some complexity. I’m using DBOS for that right now, which works well, although it still feels like overkill.
The 1.0 release came at just the right time. I’m looking forward to removing the pieces I no longer need and simplifying the architecture!
It's really not all that bad anymore. I'll take going to any client and having roughly the same storage setup anyday over the hell that was the mix of enterprise sans we used to have to deal with.
Now I just write a prompt and OMP just hammers away at it. There might very well be some OpenCode plugin for this but it just works out of the box with OMP.
omp is feature rich, and it's very actively developed. I don't have the time or interest to pick and choose among the thousands of pi extensions, so the fact that omp already has a lot of useful things built it is a good match for me.
OMP spawns agents asynchronously, letting the main agent check on them periodically and even chat back and forth with the subagents to coordinate dynamically instead of losing control after initial prompt (it's also very amusing, like watching Sims play office).
OMP also has /tan tangential prompt which spawns subagents that reuse entire conversation prefix (cached), so you don't waste tokens on sending them a recap of the situation and them re-discovering the codebase themselves. OpenCode kinda does it with fork + switch of sessions, but a command inside one session is quicker.
Haven't used omp web yet.
I don't mind though, because I think either way it leads to a better design under the hood when things are built to be modular.
Minimalism is a difficult subject. In art, minimalists tried to strive for something that is universally minimal. But if you look in nature for straight lines or perfect circles, you end up disappointed. Turns out minimalism found things that were minimal with respect to how some humans think about minimalism. For all we know, pure chaos may be more universally minimal than an empty vacuum.
And I ask LLMs to do so without installing naything or running any post install/clone scripts. Also ask them to scan the entire codebase of the plugin for malware or security issues.
This is how I made my own MCP plugin before pi supported it. "Clone this MCP plugin, simplify it and scan for security issues."
I used to have a MCP extension but recently pi added builtin support for MCP so my stack is simpler now.
Thank you for keeping things simple! Simple is beautiful.
Pi felt nice when I used it, and I do value keeping things minimal, but I just find the criteria very uneven.
I don't know if you were aware, but not shipping with MCP was one of its "features":
https://mariozechner.at/posts/2025-11-02-what-if-you-dont-ne...
They let you have it via a plugin/extension.
Codex in particular is using responses lite internally and relies on codemode for parallel tool calling. So codemode was a given.
Jev on the other hand is new but it's not the first type of model we had troubles with supporting in Pi and we looked at how to make that make sense. The internal pi-ai SDK supports image generation and classifier models, but without building an extension it was never possible for you to utilize it.
So there was a while functionality of Pi that few people used, because there were no obvious ways to hook it up with the coding agent. Codemode also allows us to close that gap.
And once you have codemode, modern MCP can work quite well if the servers cooperate.
That is totally disappointing.
The only thing that makes Jev and the likes particularly interesting is that it is a general purpose classifier. In the past, classification tasks meant training a new model to solve your problem. Now you can just use an off the shelf general purpose model and hit the ground running.
Codemode as a mechanism can expose non LLM functionality to the coding agent. In that sense, Pi does not have a tool for Jev or other classifiers. It just now makes it easier for the agent to utilize it in the same way as it's otherwise quite creative in using bash.
The point of Pi is that the user can tell the agent to improve itself and give it the tools it does need. The minimalism comes from the user creating what they need instead of the maintainers trying to support everything for the users. The fact that it doesn't have everything the user needs out of the box is intentional.
The point of Pi is to be minimal but also follow what the models need. We were pretty outspoken that models need code execution, and that's why Pi to this day has a very small set of tools available. However as more and more training with these models abstracts even over toolcalls themselves with code mode and similar things, it requires changes to Pi.
Mario and I talked about this last week if you want to know our thinking: https://x.com/pidotdev/status/2104510506627121451
And yes, that's why there is no Jev tool in Pi either.
General purpose classifiers have existed and proven useful for quite a while now. We used these last year. for vision and text both.
Or Fisher in the 1930s with data driven linear didcriminants.
If there's anything that I can conclude about Anthropics idea of how a LLM should speak. Vibes would have been an euphemism
Some tools used to be 0.x for ages and, in this case, the 1.0 signals they're happy enough and allows them to promote things in a better way.
This (edit the durable part) is I guess the natural evolution of playing around building temporal like things for a need that many have.
I wrote my own minimal coding harness last year because I hate software bloat, but Pi scratches that itch for me now.
Is that part of opencode v2?
Minimal alone isn’t a driving force for me. Coding intelligence and output is. I know Pete mostly codes with OC but farms hard jobs out to Codex. Teknium says he only codes in Hermes. I do iOS apps in Claude but everything else in deepseek or opus. I suspect things are about as good as they can be in terms of actual code.. across all levels.
Out of curiosity, have you come across Axiom (https://charleswiltgen.github.io/Axiom/) in your quest for more effective AI-assisted iOS coding?
- It has 3.6 million weekly NPM downloads.
- 110k GH stars.
- It's 5th (and its fork is 6th and a dependent is 8th) in monthly Openrouter tokens. Add them all together and they get close to Claude Code numbers.
There are maybe 30-60 million software developers and software developer adjacent people on this planet. Out of those probably 30% are late AI adopters, laggards, that haven't even used a terminal client and some don't even use AI.
Also a lot of people - developers included, just don't like command line tools.
Then pi is a secondary harness after Claude, Codex, OpenCode. I imagine the likelihood of pi having more than a few hundreds of thousands of users is remote. It's basically the Emacs or Vim of harnesses.
I've been working for 20 years and I've met exactly 1 person daily driving Emacs (at least for a while), probably 10 people daily driving Vim and maybe low hundreds side arming Vim (maybe 5 for Emacs). And I've met or worked with low thousands of people at this point.
If I had to guess, probably 100 000 Vim daily drivers and maybe 20 000 Emacs daily drivers, both for extended periods of time. Dabblers probably 2-3x that at any time.
You'd see a lot more Emacs users (comparatively) in academic jobs than, let's say, web development.
As an anecdote, I worked for a network monitoring company, 90%+ of the devs were on vim. Later, I worked in a run-of-the-mill SaaS, 90%+ of the devs were on VSCode.
I'd think that (neo)vim is quite popular. Emacs, less so, that's true.
But according to the Lindy's effect, I wouldn't be surprised if VSCode disappears before Emacs and Vim. Especially as heavy LLM users are opening their text editor less and less.
Though, I realize now the "hundreds of thousands" claim I was responding to is per week, while my guess is all time.
True, but I think even OpenClaw usage has falled off a cliff, plus that makes it implicit usage, most OpenClaw users probably don't care either way, it was chosen for them and they probably don't think much about it.
Not a proof, but that makes it sound more plausible, no?
Is it worthwhile to spend time and effort into setting up and switching to Pi? I always see people praising Pi online but I am curious to know from people who switched over from OpenCode why they did so and what I am missing.
What's great with Pi is that it's very easy to extend, because it knows its own doc. So you tell it "implement a plugin that does this" and it does it directly in its own folder.
That means I have a plan mode that works exactly the way I want, I have a hook that cleans up added comments after each change, I can ask "pull this github PR and assess the comments", etc.
Same with opencode, no? It has a default skill just for that.
I've been avoiding investing in these kinds of tools and workflows partially because I don't understand the UX (and partially because I worry UX and tooling will change so fast that I won't get a positive ROI). Your hook sounds like a script, but your plan mode sounds like an interactive TUI, and "pull this PR and assess" sounds like a reverse proxy tool or something?
I can definitely see why the custom plan mode is useful vs just calling a script or asking the model to do something, but what's the draw to building comment cleanup and github API access into the harness vs running the comment cleanup as part of CI, or just asking the model to pull a PR and review it using gh/the web UI/the github api (with no special harness handling)? Does the model get updated with changes you make to files it already read or recently wrote?
The way I normally use coding agents is by giving them a very large task specification in a fresh session with some kind of verifiable exit criteria, and sending them off + staying out of their way. Normally I would just use other sessions or run scripts to do these things because the coding agents I've used queue any /command I give them (very frustrating when you have to wait 30+m just to check usage!) while the model is working, and in my sessions the model is working >90% of the time, so I usually have other terminal windows or applications open anyway.
I actually built my own tool that maintains a work graph (DAG-like) with task leases. It allows me to copy and paste pre-written prompts into Claude Code, Codex, or OpenCode and all the agents self-coordinate through MCP calls.
I built this after trying hermes and Openclaw but not liking the lack of human-in-the-loop judgement. So I'm wondering if I should keep refining my tool, or evaluate something like pi?
I love alternatives to the big players but why is everything written in TypeScript or Python and takes up a gigabyte of ram.
I don't want to `npm install -g` something, just give me a single statically compiled binary that does the thing.
AI lowers the barrier of entry to Rust to virtually 0. As a side experiment, I have been rewriting Codex Desktop in Rust using native desktop APIs (gpui) and have made a cross platform copy that works on Windows, Linux, and MacOS. It runs at 120+fps and uses 40mb of ram. It's not that hard.
In a previous life, before the layoff times, I was working on a FaaS platform. If you need plugins, embed v8, quickjs or wasmtime/wasmer/etc.
People are acting like AI didn't eat up all the RAM on Earth. I had to sell my left kidney for the 8gb ram upgrade in my MacBook
I find Typescript more approachable in many ways like compilation speed, extensibility, disk space used by cargo, LLM knowledge, and most devs I know already have node or bun installed anyway but not cargo, including me.
The speed in which pi can modify and extend itself is part of the appeal to me.
This is more about demanding more of the big software vendors than it is about making an argument for the general software developer to write programs in Rust or Go.
We are talking about trillion dollar companies with highly paid engineers and unlimited token budgets.
As someone who has been writing TypeScript since the beta and started writing Rust professionally only 5 years ago, I'm about as productive in Rust as I am in TypeScript - so if I were distributing software, I'd want to ensure the end user has the best possible experience and that's hard to achieve with the node/python ecosystem.
"Run this bash script to install my CLI tool" behind the scenes it downloads a full copy of Node.js, installs the npm dependencies, add executable scripts for the entry points, updates PATH. It takes almost a second to start up, has no threads and uses way more memory than is necessary. Extend that to Electron applications which not only bundle Chromium, but also bundle Node.js - that's two v8 engines running and a process that starts with a memory footprint of almost a gigabyte.
Compare that to just downloading a portable self-contained single executable and running it. No package manager, no install scripts - just double click.
The end user is not installing cargo, compiling, or anything - they just run the binary.
It's minimal and intended to be modified.
When was the last time you patched Pi / OpenCode / Claude dist or source code before running it?
Most people use plugins, and native apps have no issues with that.
> When was the last time you patched Pi / OpenCode / Claude dist or source code before running it?
Funny you ask. Yesterday I patched opencode to replace \ paths with / depending on some heuristics. Couldn't get a plugin to fix in all cases I needed. Solved in one minute :)
And plugins for executables suck compared to "just create a .ts file in this directory and edit/test it in a few seconds until satisfied".
There's a target audience for rust harnesses but their overlap with pi audience is quite small.
You could write them in Go, TypeScript, Python, whatever. If you wanted to write your plugin in Rust, you'd need the Rust toolchain though, yes.
Plugins don't need to be in the host language. It's up to the harness writer to ensure the plugin engine makes sense for the patterns of plugin writers.
Then it's up to plugin writers to ensure their plugins are performant so people enjoy using them.
> And plugins for executables suck compared to "just create a .ts file in this directory and edit/test it in a few seconds until satisfied".
Not really? Deno, Node.js are both embeddable within a native application, so plugins can be written in TypeScript without any change in expectations from the plugin dev's perspective. There's also QuickJS and LLRT which use like 1000x less resources than v8 (faster for plugins, slower for servers).
No one is asking plugin devs to change, just that the harness writers provide better platforms to build on top of
You get the worst of both worlds and that's probably why the most harnesses tools don't do that.
What you're describin already exist but the target audience for such is small. I invite you to try and watch the adoption :) It's just a prompt away.
Why? If you embed Node.js then the developer can develop against Node.js if they want to. It's the same as writing Cloudflare or AWS Lambda functions.
> Not to mention that it's much easier to reason about contracts and behavious within a single language.
That's arguable and depends on the way plugins are supported. MCP is a good example. It's IPC with a well documented JSON API. You can write your MCP server in any language you want and practically every language has bindings for it (it's also trivial to point an agent at the spec and have bindings generated).
> You get the worst of both worlds and that's probably why the most harnesses tools don't do that.
Almost all harnesses support ACP (pretty much a cross language plugin system) and that has enabled harness integration into VSCode, Zed and a plethora of "software factory" tooling. The same goes for MCP (also a cross platform plugin system). We do it all the time.
First mover was a huge part of developing low-effort MVPs but we are passed that point now. You're not going to be the first to market now, so you have to be the best in market.
> What you're describin already exist but the target audience for such is small
I'm not sure what you're arguing for? Are you saying that you think it's acceptable that that multi-billion dollar companies with strong engineers and unlimited token budgets ship low effort products that waste the limited resources available on consumer devices?
Like, if Pi/Claude/Codex/etc used a fraction of the resources and your experience as a developer or plugin developer was unchanged - you're opposed to that?
Are you okay with Microsoft shipping a broken operating system because it's good enough compared to the competitors?
Haha sorry, it's hard for me to comprehend not challenging those with the money and capability to ship great products... not shipping great products.
> I invite you to try and watch the adoption :) It's just a prompt away.
I am actually writing a native harness that is a pixel perfect clone of the Codex Desktop harness haha. I expect no one to use it because adoption is not about quality, it's about marketing and that is dominated by a handful of players.
That's not going to stop me because I'm doing it for fun, but if I can do it with a handful of DeepSeek tokens and a few weekends - there's no excuse for the big players not to.
Alright if you believe this then we are wasting our time arguing pros and cons of using different technologies.
I'm happy you're creating your own harness. I plan to do that too if pi gets in my way but it is so small and flexible that this has not been the case yet.
I am really hoping a combination of the RAM-pocalypse and AI coding will result in less bloat. At some point ...
Same reason everything's an electron app now. First mover matters to the makers and to the consumers more than performance and attention to those details.
Not really. It lowers it, sure. By a lot even. But you still have the system requirement for compilation and ecosystem to deal with.
And when a Linux distro bumps a dependency that Node requires on without updating Node to use the updated dependency, then Pi doesn't start.
Written in Nim. Unixy scrollback but cross plaform. Tested for token efficiency.
Here's my minimal set up: https://github.com/richardgill/pi-extensions/blob/main/PI_SE...
When I was first getting started and didn't realize that ollama defaults to incredibly tiny amounts of context, Pi was the only harness that actually worked because the rest of them used up all of the context and then some with the system prompt. However, these days I've figure out llama.cpp and proper context sizes.
OpenChamber has been the real game-changer that caused me to switch back to OpenCode, though. I love being able to check in on it from my phone, a browser, etc. instead of having to be at my computer to get anything done.
But loved the minimalism, extensibility! It's a very capable harness.
Have my own extensions for MCP, subagents, ui, history management etc. overall i feel my workflow has got a lot better.
Love pi!
I run it like `sbh --net pi` or `sbh --net --docker pi` depending if I want the agent to have docker access. The result is that ~/src/my-project gets mounted as `/w/home/lion/src/my-project` and any LLM I've tried understands that this is a sandbox implicitly.
I strongly suggest everyone who uses a harness, of any kind, to copy it and edit it to better suit one's setup.
Slopsite here: https://piproxy.latchlabs.dev
It addresses is a lot of pain points were built as internal tooling I maintained before this e.g. the need for a daemon for a number of good reasons e.g. executing/resuming a session from any machine, following conversations on my phone, having agents respond to comments on my CRM or asking interfacing it my homegrown PR review system. I can now have the harness run on that system and a durable pi session on a central server.
A framework/harness to develop capabilities such as OpenAI dot/Grok Bot. Can handle parallel conversations/forked conversations. But it doesn’t have to be user-facing at all.
It could be used to create an agent that sits inside your infrastructure - say constantly monitoring the firewall, taking actions autonomously (within hard guardrails I hope) and leaving an audit trail.
To be clear, they say nothing about guardrails or audit trails, it’s just how I would do build something like this.
Pi without extensions, with a decent model that allows thinking to be disabled works really well, and is faster than multiple subagents.
- cost saving when using lower-tier models to index information
- routing between models from different providers
I've been assuming a harness is basically a set of tools and a TUI for passing text to the model and the model coming back with tool calls and user responses.
Are the tools really that complex and different between harnesses?
- read - write - edit - bash
Seems to support my skepticism.
Each family gets their own system prompt, based on the original harness one, but compacted and includes instructions for more brevity.
They explicitly said no MCP and no fullscreen TUI, which makes it minimal and attracts many people.
The rationale for MCP and codemode I can swallow, Armin's writing on that makes a lot of sense, and meeting models where they are seems critical to me based on my own experience.
But for me, fullscreen mode is a huge turn-off. I already have a backbuffer that I strongly prefer to use, it's called my terminal, and it's important to me. If the backbuffer-based version disappears, I'll be forced to migrate to something else (seems there are a few options here) or make my own tool, but that involves abandoning or porting my extensions, which turned out to be a huge superpower with Pi. Perhaps Pi Durable helps with that and lets me keep my extensions, but I'd rather this was not necessary in the first place.
If switching to full-blown TUI has anything to do with how slow the "expand thinking" and "expand tool output" features get as the session gets longer, could that be mitigated by only expanding the n most recent behind the default shortcut, and the slower "nah, I really do want you to expand them all thanks" can be a different shortcut?
If it's to add more fancy features that require fullscreen rendering and a dyed-in-the-wool terminal user like me might reasonably tolerate as a dismissable modal, make those bits TUI, but keep the backbuffer in the terminal (for e.g. the session tree or the settings, those don't need to be in the terminal's scrollback).
And if it's for any other, richer interactions... can we just... not, instead, and let the terminal be the terminal rather than a single page web app?
I also like Autolith. The freedom of having a lisp machine is, to me, much more enjoyable than trying to maintain Typescript. But I'm not a typescript guy.
I do largely stick with Pi because it's very bulletproofed
I'm working with Claude's workflow, but I haven't yet felt any demand for customization.
For those who use this well, could you share examples of how you use it?
EDIT: forgot to mention local models
What harnesses do you recommend?
TL;DR: Pi is amazing.
Man, first MCP then this? The main reason I use Pi is because it didn't try to reinvent my terminal's buttery-smooth native scrolling -- something no terminal client can ever match.
Did you all get acquired by private equity or something? The enshittification is coming at us fast.
How do people read these famous books and deliberately get them wrong again, and again, and again?
https://www.youtube.com/watch?v=pBbDxDOV6J4 (relevant comedy skit)
Everything points to Thiel not understanding a thing about Tolkien. Tolkien was an old-fashioned conservative. He was all about protecting the environment and the old way of life (both things Thiel and modern self-styled "conservatives" strive to destroy). His role models were great because they made great sacrifices and showed strength of will, not because they used power for power’s sake and as a weapon for domination.
Thiel just does not understand the "humanity" aspect. I’d rather have them stick to Ayn Rand references. It made ignoring them or laughing at them easier.
Adding insult to injury, Pi apparently considers low Tolkien usage to be beneficial.
I did not read this when I added support for AGENTS.md, skills, llama.cpp, extensions, alt TUI mode, mid-convo system messages and tool set changes to preserve KV cache, image model support, and everything else I added since November last year.
Codemode and MCP support are the latest additions. We follow what the models are trained on. E.g. the GPT family of models is actually trained on codemode for parallel tool calls now. The MCP spec has gotten a major update recently that makes it much less bad than it used to be in the past 24 months. Combined with codemode, it is now passable, so it got added to pi.
All of these features are still entirely optional and the only thing I could think of that could be considered "bloat" is the additional few megabytes for the QuickJS WASM blob.
So, I mean this in earenst and absolutely not combative: could you explain what exactly flips the switch between "pi is minimal" and "pi is not minimal"?
That said I also dislike many of those other changes and would prefer a hypothetical version of Pi which didn't have them, so this is in some sense just me looking up at the sound of a v1.0 release and realizing "oh hey, I don't really like the direction this has been trending for a while"
The codemode stuff/mcp has been explained to death at this point but I haven't seen anything around fullscreen.
(I don't have strong feelings either way, just curious)
I wanted the out of the box experience to be smoother for more people, so made it the default. Scrollback mode will stay though for users who prefer it.
If only there was some way to... ah no time to be snarky. It's open source and MIT licensed and you're in a thread discussing AI coding agents.
Sounds to me like things people say just to have something to say. True, it is good to listen to feedback but feedback without evidence is only going to waste your time.
Thanks for all your hard work and keep going in the direction that makes sense to you!
I can't for the life of me figure out why people would think pi is bloated.
it's still there and won't get removed.
I believe software can be done- with incremental improvement and keeping the foundation, like vim. That's the 3code trajectory.
New fun ideas go into seperate tools, possibly ones 3code (or other minimal agents) can call, but the core stays lean.
Languages with less opensource footprint or too verbose are at the losing side in a llm-driven world.
> most of their time waiting for the models response and tool calling rather than running their code.
You’d think that! Yet claude-code spends a very surprising amount of CPU just doing text layout work and other mysterious things, likely due to their decision to use React to build a TUI for some reason.
And yes, API must be maintained for compatibility, but that is needed anyway.
On the other hand, I don't think there's anything Pi does that another language would do noticeably better from a user's perspective. Any performance complaints I have using Pi come from twiddling my thumbs waiting for Sam Altman's servers to bestow tokens upon me.
At any rate, they'll probably have Opus 6.5 and GPT-7 Galactica rewrite it in rust in a couple months...
TS probably has the most expressive type system of any language that I have used, and you can develop at lightning speed without fighting the borrow checker or anything else. The ability to share the exact same code across the front and back end, and encode API contracts in the type system, is a superpower for webapps built with node.
Whether an LLM writes the code or not is besides the point. What matters is that the code should be testable, and understandable. TS wins on both counts, like most sane alternatives.
I personally do not program using any language that does not have the ability to specify types.
Out of curiosity, which language do you think would have been better for the web? Visual Basic, TCL, and Python were the other main contenders in the mid '90s. Would you rather be working with one of those nearly every day?
Beyond that, if you could pick any language as the lingua franca for the web, what would you choose?