I use claude code and codex in a terminal like a caveman too.
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).
the main thing i use it for that seems like a pain with other coding agents is my sandboxing workflow: i have a custom extension which allows the pi process to run on my laptop, keeping all my transcripts in one searchable place, while delegating all the bash and file system commands to a VM.
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 ¯\_(ツ)_/¯
Frankly you are not losing much. I've used everything under the sun, for work and fun. I just use Claude now again for work, and I use Pi for any openrouter model I'm using.
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. \
I don't use Pi very much for actual writing code. I have some specific use-cases where I do, but I'm admittedly just not a person who can reasonably juggle a lot of tools or a super personalized setup. I mostly just use Codex or CC from the terminal, though I've recently dabbled with some GUIs. Basically, once I find something that works, I'm pretty reticent to spend any time tinkering unless I feel a real need.
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.
They are not, Pi is the vim or mechanical keyboard of the pre-AI era. Didn't matter then, doesn't matter now. Will generate infinite discourse regardless.
Pi vs opencode for example is like gentoo vs macos, if you want to spend your time customizing and dealing with harness itself rather than doing the work, then go for it, it will be fun, like gentoo. I think the best productive setup is herdr+opencode or zed and opencode, unless you need CC for anthropic models. The only thing however, is how the same model works with different harnesses, positive or negative, is where you might need to shuffle between to maximize the results.
I use my Pi to organize my graphic design assets as well as update documentation for client projects. It also is my daily driver for a story I'm working on and thanks to a ton of great skills created it has become more powerful.
Local model is Qwen3.6 35B-A3B and Qwen3.8 27B UD. I love the compressing function, keeps on pushing.
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.
I use Pi in the terminal and with Zed (with its "right hand side" terminal bar you can make its agent panel do), and I use it with Pendant in VSCode at home: Pendant is really quite impressive, I'll be honest.
I use pi with a ChatGPT subscription. I find that it does better than the native codex harness:
- it's very token efficient. I've had whole profiling + refactoring sessions finish in <20k tokens, whereas in codex you can get close to that with just all the cruft OpenAI loads by default before you even send your own messages
- the token efficiency means turns are a lot snappier
- fine-grained context control by default - I have to disable a bunch of stuff in codex so it doesn't pollute my context with generated memories
- I find that OpenAI model sometimes struggle to navigate codex' sandboxing, and burn a bunch of tool calls retrying outside the sandbox when the sandboxed command fails
Codex generally lets you use the subscription with 3rd party agents / harnesses.
ON the PI 1.0 you can directly use the openAI log in to hook up your account, so it should be pretty straight forward. I haven't tried myself yet.
Absolutely. Fellow caveman here, and a fan of Pi. I often use it with Astra instead of Codex, because its extensions allow you to connect it to the world. And it works very well.
I use Pi with only a couple of extensions and using less and less of CC and Codex everyday. It feels light and nimble. Codemode from yesterday's release made it even better. I wish I could use my Claude subscription via Pi.
I've put it into an XMPP wrapper for all communications so I can talk to my agents from any device supporting XMPP (all devices). This also means agents can talk to each other using group chats. I'm building apps from my phone on the bus, and handing off server admin tasks to the agents since they run in their own NixOS account with limited permissions.
I've only used it at home a little on personal projects. My usage is probably odd -- I connected it with Bedrock, but otherwise used it the same as I do Claude Code (mostly). My basic flow was simple:
- 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.
I built and “ide” around it in obsidian. Works great. And I don’t need to jump between apps to change models. Astra and opus in same chat works just fine
I use PI WEB (https://pi-web.dev, there's more than one with that name) to orchestrate remotely. Pi lets me run local models (currently Qwen 3.8 Flash Next on Strix Halo 128GB) and flagship models (with subscription auth, not API pricing) side by side. I typically ask GPT 6.1 Sol to review requirements and then spawn a subsession with Qwen, review Qwen's work, ask Qwen to fix. About 95% success with a single pass like that, achieving flagship quality without the price tag (albeit slower).
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.
I am using pi the same way everyone uses Codex and Claude, but pi makes it very simple to make folders to make the agent behave a certain way and that was easy for me to understand.
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.
Everything is stored locally (expect cloud runs) in ~/.codex
It lists down everything: conversations, skills, prompt plugins, mcp, conversation history.
Writing my own harness with the workflow I prefer. I pull jira tasks in local task manager(aven). My harness will oneshot it or create a spec plan with multiple linked tasks. Implement it with creating git worktree, task by task, codereview with 2 different reviewers, PRs it, reviews peoples comments replies or fixes and check sonarqube and fix if needed.
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.
I use Pi because I fundamentally believe that inference providers are not the correct providers of harnesses. Their incentives are not aligned, and inevitably Claude and codex will continue trying to lock you in to get your inference spend.
A lot of us aren't actually using enough tokens to reach the value add of a $20USD/month subscription versus just paying for the API. Without even mentioning the chinese competitors, you can get a lot of tokens for $10 of ChatGPT Luna, which is more than capable of solving the kinds of problems I have at home (where I use hermes harness).
I'm running it on a docker container that only has mounted a folder from the host os. been playing around with godot and blender. still looking for a good workflow, but pi is lovely.
I've been using Pi almost exclusively as coding agent in various forms since more or less January this year (I think). I settled quickly for a short list of extensions (which I wrote and I maintain) and a few skills/shared AGENTS.md, also installable as extension: https://forge.l3x.in/alex/pi-shared
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:
I built https://rcarmo.github.io/projects/piclaw atop it. It's pi, but with a web UI I use every day, across dozens of agents, and has pi-based add-ons. I do use the TUI on occasion, but need a remote web UI for 99% of my stuff.
I mostly use Pi, with the small exception of using Claude for some more intense coding projects. But for everything else - homelab playgrounds, data stuff, really almost anything else - it's Pi, and I'll probably move my code work there, too. I have a handful of extensions that I like and make it more useful for me, and really like the simplicity of the TUI over some of its competitors.
I'm using Pi with Herdr as well right now. It's been quite nice. (I use the organization similar to projects for the Claude / Codex GUIs).
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.
I don't really understand the criteria for when something is 'proven' to the Pi team. Jev and the like took off less than a month ago, but MCP has been growing for nearly 2 years, and it only gets support now?
Pi felt nice when I used it, and I do value keeping things minimal, but I just find the criteria very uneven.
Classification models have been around for literally almost a century at this point. I think it's safe to say they are a proven technology.
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.
I agree. I don't necessarily "trust" Anthropic and OpenAI when it comes to CC/Codex respectively, but I respect that they have immense internal resources and telemetry to be able to understand what features move the needle and nudge traces in the right direction. I don't understand how non-labs judge feature inclusion? Just vibes?
This is hitting at the right time. Codex is already in the enshitification phase. They just broke their CLI version with some new thing that no one likes.
You should strongly consider changing your name! I genuinely thought that Pi had been acquired by Anduril when I first read this blog post. I'm sure many people will make the same mistake.
Pi is really good. I use it for a majority of my work.
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
Woah, this is my first time hearing about Autolith. Definitely looks cool, I might have to play around with it. How do you find models do with Lisp? I have had some trouble with my models getting tripped up pairing parenthesis in my GNU Guix configuration.
I use the open weight models and they kind of suck lol. I have a lot of paren helpers. I think Autolith ships with one also. The boys in the Autolith zulip say that Openai and Anthropic models are all totally fine with parens. Come say hi in the chat
I found oh-my-pi with Paseo to be my personal sweet spot. Checks all of the boxes I want and is the most consistent set of AI tools I've used thus far.
I know this is going to get downvoted but what drives people to use javascript of all languages to build these fundamental pieces of tooling? We have so many better options, especially now since humans aren’t writing most of the code. It’s hard to take seriously anyone that wants to make a primarily CLI tool with heavy interactivity and parallelism requirements and decides to use a joke language that happened to luck its way into prominence because of web browsers.
What would be a better language? Most of the harness apps will be spending most of their time waiting for the models response and tool calling rather than running their code.
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.
You either need to rebuild the harness every time you want to make a change, or a lot of deliberate effort is required to maintain an API surface for extensions, distinct from internal implementations, or you can embed an interpreter like Lua, Python, or... JavaScript. Or you could instead go the Pi route and use an interpreted language, and just load extensions into the interpreter, alongside the program itself. When one of the main goals is extensibility, the latter seems like the obvious choice.
I feel like people have forgot how extensions used to work long time ago with compiled languages. Extensions can be just dynamically loaded, (e.g. DLL from Windows world, .so from Linux). There is no need to compile the whole harness. This is also possible when using Rust, but people are just lazy.
And yes, API must be maintained for compatibility, but that is needed anyway.
Pi is extensible, and to iterate new extensions, install them, create your own, even if the agents needs to, it is much faster and easier to manage that than a compiled language I would suppose. Most of the time it's really the waiting time than anything else. If any, the "resource intensive" parts of the app could be turned into low-level extensions such as writing or reading files, maybe, but the main part of the app makes total sense. The language and ecosystem is fairly accessible as well, which serves as a further argument. Interesting choice of words when it comes to calling it "joke language" really.
I wouldn't go as far as calling it a joke language (in some ways, it's incredible), but I did come here wondering if other people felt this way. The language choice has always confused me.
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...
One reason: it's really easy to have a lightning-fast dev loop when the entire running process can hot-swap almost every piece of code, when then also extends to all extensions written against the core functionality.
Which I believe is what the developer was looking to do. I personally enjoy it being JavaScript. I've had it redo some functions on the fly which to me is perfect.
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?
I like that Pi is holding the line on minimalism instead of absorbing every new trend. Curious how Pi Durable differs from existing durable-execution setups for agents
I've been full time building on pi since January and its been incredible. I'm not sure what they did to make it so easy to vibe code against but agents really just "get it".
Can you explain your workflow a bit please? Do any of these tools work with Claude/Codex subscriptions or are they API only?
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?
Why full screen mode by default? That seems to go against the minimalist theme. I could never get acceptable inertial scrolling behaviour dialled in with other full screen implementations I tried (claude, codex, opencode).
Full screen hides distractions from other applications. Seems reasonable as something minimal.
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.
Pi is a minimal agent harness, so lots of functionality is provided through packages. Here's the one that exposes Claude models for people to use with their Pro subscription, for example: https://pi.dev/packages/pi-claude-bridge
Sigh, looks like Pi's days as a nice minimal agent TUI are numbered. I guess no third-party offering can fight that entropy for long and I'll just have to polish up one of my toy projects for personal use.
I've read this a bunch of times around socials now these past days and I'd really like to understand what exactly indicates that the minimal agent TUI days are numbered for Pi?
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"?
Fullscreen mode as the default is a big one, I prefer my agent harness to be a CLI rather than a TUI and in fact my personal one doesn't even try to wrap text. Pure CLI output model.
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"
Multiple answers. Windows Terminal users constantly had problems because WT is ... not great. Fullscreen mode fixes that. This also applies to some other lesser used terminals.
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.
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!
Well, I'm happy. Thanks for the new harness, ripping out the guts of piclaw to use it, and also flipped a few other small tools to pi-durable, which is nicely streamlined.
I can't for the life of me figure out why people would think pi is bloated.
Fullscreen mode is my only real gripe. That kind of terminal behaviour is exactly what I was trying to get away from. My work's agent (that I use Pi to replace) does this and it is annoying as all get out... but I haven't tried yours yet, so we will see. Hopefully your implementation is better!
Love pi. I tried to run some local models and pi was the only one that actually worked decently because it didn’t have a gargantuan system prompt that would take minutes to prefill on my scrawny ass laptop.
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.
"Been running it almost barebones vanilla for a couple of months. Just a bunch of basic extensions and some skills."
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 ...
I was running into similar issues where italics text was blinking. I traced it back to a bug in screen, which I patched in my own screen fork. Not sure if exactly the same bug but could be? https://github.com/Sothatsit/screen
Have you tried a different terminal app, such as Ghostty? https://ghostty.org/ has a Mac build, and handles italics properly. That might solve your issue without having to edit any configuration files. Plus, as a side benefit, Ghostty ignores the ANSI color codes for blinking text, so you won't ever see blinking text again.
I am wondering why people are so hyped about Ghostty? I gave it recently a try coming from kitty. And I had to configure stuff that worked out of the box with kitty, like Ctrl-Enter support and other key combos for agent harnesses. I like the development model of ghostt. And the developer really cares about creating great building blocks, e.g libghostty. But I am a bit underwhelmed.
I feel like the ghostty hype make more sense as excitement around the direction of terminal infra than a claim it is the one true terminal. Kitty's fine and if you are happy with it there's probably no good reason to switch.
Tangentially I also kind of feel like there is some level of deification of Mitchell's products but that's a diff topic.
Apart from a different terminal app, try `/settings`, find the "TUI mode" or whatever, and set it to fullscreen. It fixed all my flickering and other issues.
Couldn't agree more. The vanilla openclaw install was this byzantine mess of MD files talking about souls and identities and such, it really put me off. Stripping back to a bare install of the underlying pi, it was delightfully minimal and easy to reason about. Excellent starting point for building an assistant agent without having to read or fight with a bunch of cruft on top.
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.
Are you using Windows Terminal by any chance? I'm building a personal fork [0] with a patch for this exact bug (plus a few other open PRs from the upstream repo that seemed cool). Haven't tried contributing it upstream, since the patch is fully vibe-coded and I've spent almost no time trying to understand how it works, but the bug hasn't recurred since I've been using it.
You inspired me to try Pi out - so far it's worked flawlessly. Plugged it into OpenRouter and ~$.50 of Deepseek later I've installed llama.cpp and Llama 3.1. The local model doesn't work with Pi yet (and I know it will be bad and slow even if it does) but I'm curious to see what you can do on an 8GB consumer GPU these days...
> I'm curious to see what you can do on an 8GB consumer GPU these days
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)
Sure, but I'm not interested in learning about running cpp, installing CUDA, finding the right URLs for downloading llama weights. It's the best 50 cents I've spent in 20 years.
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.
If you paid DeepSeek directly, that would have been 1 to 10 cents. OpenRouter has a huge overhead due to their cache logic, I'm surprised they keep business coming in the door for tasks other than system prompt - output pairs.
I thought openrouter just routes you to the same provider for the rest of the session, so that you keep hitting the same cache. Is that not the case?
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.
> I thought openrouter just routes you to the same provider for the rest of the session, so that you keep hitting the same cache. Is that not the case?
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.
I'd chime in with @rablackburn: mixture of experts is the way to go. I have a laptop with 6GB VRAM and I'm running KDE with a 4k display on the same machine, so there's only about 4 to 4.5GB actually available.
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?
I am using the unsloth 4bit quants for both, with quantization aware training for gemma. I haven't tried other quants with these models. I also use a q4 quantized KV cache.
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.
> Wouldn't the performance of Qwen3.6-35B-A3B be drastically different if its quantized to 2b, 4b, 5b, etc?
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.
Pardon me, but authorizing ls, grep, ps, find... doesn't seem like corner cases to me. And codex and agy are close to the kind of mainstream audience that they aim for.
But I agree, it's definitely a matter of workflow, because I can see omp doing untold damage in the hands of the uninitiated.
That bug is inherent to how terminal scrollback works and can’t be fixed as long as you use it. Your only choice is that jump or stale backscroll. Or you use Pi new fullscreen mode which gives up on terminal and use alternate screens and implement own scrolling without terminal scrollback.
How do I know? I implemented my own terminal harness and faced the same issue.
> 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.
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.
I don't think it's necessarily a bug per se, but a central tradeoff in system prompt length between well-documenting the environment (harness specifics, exposed tools, tool use instructions etc) to the llm, vs the initial prompt stage ("prefill") growing so large that it results in an unpleasant lag to first response, and reduced available context, which is most noticeable with open models on resource-constrained consumer hardware.
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.
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.
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.
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.
The thing I don't like about minimal plugin-based harnesses is that I don't always have the time to figure out which plugins and safe and sensible, and at least one of those is false more often than not when it comes to AI tools. Sorting by popular does not solve the problem.
What I did is to tell LLM to extract the functionality of the plugin I wanted into my own, simplified plugin (ditch settings I don't use, simplify dependencies).
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."
476 comments
[ 0.23 ms ] story [ 56.2 ms ] threadthen 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?
https://pi.dev/packages/pi-xmpp
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.
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!
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.
Pi felt nice when I used it, and I do value keeping things minimal, but I just find the criteria very uneven.
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.
General purpose classifiers have existed and proven useful for quite a while now. We used these last year. for vision and text both.
https://github.com/vinhnx/vtcode
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 is I guess the natural evolution of playing around building temporal like things for a need that many have.
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.
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
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?
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?
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.
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.
https://3code.capocasa.dev
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.
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 ...
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.
[0] https://github.com/wilt00/windows-terminal/releases
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)
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.
- 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.
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.
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?
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."