7 ms·
Lots of praise for Pi in this thread, so I'll offer up a diverging opinion. Given all the hype, I was a bit underwhelmed by Pi. It definitely has some good idea
by paldepind2 2mo ago
Lots of praise for Pi in this thread, so I'll offer up a diverging opinion. Given all the hype, I was a bit underwhelmed by Pi. It definitely has some good ideas around customization, but it annoyed me in many little ways.
For a program that's minimal it sure takes a long time to start up, the standard C-p and C-n bindings don't work, it doesn't follow the XDG Base Directory Specification and just pollutes my $HOME directory.
I think there's still space for another harness that's 1/ open-source, 2/ written in a fast compiled language (Rust, Go, etc.) and scriptable in a simple (aka non-JS) scripting language (Lua, etc.), 3/ less opinionated and more sensible so things like XDG isn't a WONTFIX.
- intothemild 2mo agoI really really like pi. But I agree with you, it's biggest weakness is that for a real long time the tagline of it was "there are many harnesses, this one is MINE" (That being Mario's) I have a lot of respect for Mario and his team, but there's things like you've pointed out that deviate from standards, and other issues that I've seen get posted, only to get knocked down by the team as WON'T FIX because, even though the new owners changed the tagline from MINE to YOURS... It's still very much Mario's. I do like opinionated things. Truly. But I'm also of the opinion that standards exist for a reason. That said. I like Pi so much that it's my daily driver, and I've created an ecosystem of plugins to do everything I want, having them all tie together and communicate through the shared bus. Pi is really a good harness. It's just, well. I don't agree with some of the opinions. If I'm going to add another thing here... Whilst you cannot get everything you need from the openAI API spec, you can get a surprising amount to get a model config. That said. Versions of Pi are still shipping with model configs for certain inference providers. I do hope that gets decoupled at some stage. I see the groundwork being laid. So the work is being done in the right direction. I applaud the team but I do get the feeling that a lot of this is because people want to contribute, but the team really wants to hand craft this. And that's great
- bacteria 2mo agoCould you share some of the ecosystem/plugins/workflows you're using with Pi?
- intothemild 2mo agoSure, I use this, as pretty much my only plugin, I also have one for web-search on top of this. https://github.com/danielcherubini/pi-archimedes https://github.com/danielcherubini/pi-archimedes as for workflows, its all skills/agents based, here's my dotagents folder https://github.com/danielcherubini/dotagents https://github.com/danielcherubini/dotagents
- stephen_cagle 2mo agoI might be misreading this, but I thought it was a reference to "Full Metal Jacket" => https://www.youtube.com/watch?v=YoU2hlDJmFE https://www.youtube.com/watch?v=YoU2hlDJmFE ? Ignoring the military stuff, I feel like it is saying that this harness, although stamped from a mass produced part, is mine once I take possession of it. An extension of me?
- zdp7 2mo agoMy read sees pi as a starter kit. It's job is to build personal workflows and not to dictate a workflow. Copy on the site calls it minimal and tells us to 'adapt pi to your workflow, not the other way around.' In other words a fleshed out pi is unique to you.
- stasomatic 2mo agoFMJ references this, I believe - https://en.wikipedia.org/wiki/Rifleman%27s_Creed https://en.wikipedia.org/wiki/Rifleman%27s_Creed
- NoboruWataya 2mo ago> For a program that's minimal it sure takes a long time to start up, the standard C-p and C-n bindings don't work, it doesn't follow the XDG Base Directory Specification and just pollutes my $HOME directory. This drives me mad, I believe Ollama and Claude Code also do this. Seems to be rife in the LLM world. IMO there's no excuse for new software sticking dotfiles in my homedir in 2026.
- msdz 2mo ago> IMO there's no excuse for new software sticking dotfiles in my homedir in 2026. Agreed, and also, tinfoil hat time: I believe they opt for this so that state and config files don’t need to be distinguished (it all goes into ~/.appname the same). It’s still not an excuse, but maybe laziness is the reason?
- Defletter 2mo agoI'd also add that convenient recursive folder creation was only added relatively recent for many languages (eg: "std::filesystem::create_directories" was only added in C++17). And since "~/" is pretty much guaranteed to exist, the fewer folders you needed to create, the less code you had to write.
- gwerbin 2mo agoI think underuse/under-marketing of XDG_STATE_HOME is a contributing factor. Developers see XDG_DATA_HOME and XDG_CONFIG_HOME and, following the spec, don't feel like their app's files conform to either definition. It's easier to just not bother. Neovim now uses all 3 and it's very nice IMO.
- mr_mitm 2mo agoMy impression is that it's the NodeJS, Go and Rust communities that don't care about XDG. This 11 year old, open issue is very symptomatic of this IMHO: https://github.com/rust-lang/cargo/issues/1734 https://github.com/rust-lang/cargo/issues/1734
- Philpax 2mo ago
- stbenjam 2mo agoPi is ok, but I dislike needing plugins to do anything useful. Subagents, MCP, /goal ... none of these things should be plugins.
- OleksandrC 2mo agoI am working on an agent implementation that you might like: https://github.com/OleksandrChekhovskyi/hax https://github.com/OleksandrChekhovskyi/hax Written in C, tiny footprint, minimalist approach to system prompt and tools (yet essential batteries are included, for example - it has subagents with presets, and background bash tasks out of the box), high quality polished presentation, inspectable (usable transcript view), does not mess with terminal scrollback, respects XDG directory spec, etc. Open source, MIT-licensed, no commercial agenda. A tool that I myself wanted, so I built it.
- deleted 2mo ago[deleted]
- jsw97 2mo agoThe minimal harness is the one you build yourself. Use pi to do it if you want. Getting something barebones takes less than an hour. Then you can extend it exactly how you want.
- tosh 2mo agosmol is ~20 lines of Go, uses only stdlib but also highly opinionated (no mcps, no agents.md, no system prompt, …) so not sure it checks all of your boxes that said: because smol is so smol you can adapt it easily and agents (including smol) can work well with it because the whole implementation fits comfortabliy into the context window https://github.com/smol-env/smol https://github.com/smol-env/smol
- tosh 2mo agoi guess what i'm saying is: it's not so hard to start with a minimal, well working agent and then only add exactly what you need instead of taking a more complex agent and then trimming it down or configuring it (and staying compatible with its continued development and deps) diy ftw
- imtringued 2mo agoIt's not 20 lines of Go because you decided to merge multiple lines of code into one. Why not advertise it as one line of code if you don't care about readability? Here is my fork of smol, by the way: https://pastebin.com/imdWVrQ2 https://pastebin.com/imdWVrQ2 Edit: after reading my fork of smol, I realized it literally just feeds everything into bash, making it completely pointless. Edit 2: I decided to read the readme instead and it raised a question "Compare smol with Pi, OpenCode, Codex, Hermes, Claude Code and highlight key pros and cons. Audit the code of all of them and tell me how confident you are that you found all potential issues of smol vs the other agent implementations?" After thinking about the difference between the original and my fork, I'm confident that smol has more problems than all of the agent harnesses combined and my fork has made an important step towards fixing one of those issues. Edit 3: I hope the community can fork my version and add sensible variable names. Edit 4: I can't decide whether this is the best satire of coding agents I've ever seen and I just ruined it or it is horrifying that someone even entertains the idea of publishing it.
- m4ns0ur 2mo agoI love Pi and right now I'm developing a project like Pi, focused only on local inferences. https://github.com/m4ns0ur/iris https://github.com/m4ns0ur/iris
- tosh 2mo agonice, very minimal!
- ghm2199 2mo agoThe fact that you can easily change the key bindings and $HOME and tons of other stuff by telling pi itself to go write an extension in 20 seconds(or just go customize one after forking it) is awesome, not because you can do it YOLO but because I could on-board faster with these and get to work ASAP. I've been able to get near exactly the workflow I want: Navigate and search sessions, Delegated extensions that allow you to run deterministic code for sensitive operations like read, write and search-result inference, I have an extension to prune tool calls in batch mode: saves tons of context space on GPT-5.x trading off prompt prefix performance. And another one very similar to auto search mentioned in the blog. And the Tmux integration allows you to spin work trees in separate windows/panes. I've never had a perf issue simply because harness interaction being a human in the loop process you(thinking and writing) are the bottleneck.
- hn8726 2mo agoI'll take any scripting language over Lua any day. Every time I had to extend a tool that used Lua as a scripting language, I abandoned that tool because Lua was such a pain. I genuinely don't understand the praise it gets
- btschaegg 2mo agoI'd agree with you based on the language itself; Lua has some annoying idiosyncrasies like e.g. (my main pet peeve) 1-based indexing. But I suspect the positive opinion on Lua stem more from the standardized environment the language is built around (i.e. how it is embedded into applications): If you don't explicitly pass capabilities like file handling etc. into the script, it CANNOT use them. Sooo many scripting languages get this wrong, it's actually embarassing.
- MomsAVoxell 2mo ago1-based indexing is really a lame duck argument - if you can't get past that, you're simply being stubborn. You absolutely can have tables indexed at 0 - what you cannot do, is fail to take responsibility for the use-patterns you apply to those tables, if you do so - and more specifically you have to take responsibility for the requirement that you use 0-based tables, instead of more optimal methods. The table is an extraordinarily flexible type. You will gain immensely from using it properly - whether its the newbie dilemma over pairs()/ipairs(), or whether its the professional metatable manipulations - the power of this type is undeniable. However, if you cannot get past the fact that you must learn it, and that it is applicable to your requirements in every single case, then you are for sure going to have a hard time. Too much power + too little attention to important details = burnt fingers = endless whining. This is my personal stance having used Lua for decades now, professionally and personally, to do amazing things.
- MomsAVoxell 2mo agoI have used Lua for years and love it, I don't have any issues with its features, and I've shipped many products with it, across a variety of use cases. I genuinely understand however, that some people just don't get Lua, and have little energy for it. However, I think it is awesome and every good software developer should have some experience with it. Whether it is a positive or negative one, you will learn a lot that will help you stay relevant in today's crazy software world.
- rullopat 2mo agoI don't get the XDG appeal of having all the data of an app scattered all over the home dir when I can just have a .dir of an app with everything inside.
- deadbunny 2mo agoBackups. If a program properly follows the spec I can just `rsync ~/.config/foo` or store it in a repo and not have to worry about it. If a program doesn't follow the spec I now have to write program specific filters for rsync/custom .gitignore entries to avoid backing up state and cache. Now multiply that across dozens of programs written by lazy devs who don't want to write 12 lines of code to determine the correct location for their files.
- Tmpod 2mo agoThis exactly. My rsync patterns file is littered with dozens of edge cases to capture the configs and ignore state/caches of stuff that doesn't follow XDG. Really dislike the chore of double checking everything and adding new stuff to the list every time I take a backup. Even worse are those that seemingly follow XDG but not really, like a lot of Electron apps, that just shove config, state and cache in ~/.config.... sigh
- deleted 2mo ago[deleted]
- the_mitsuhiko 2mo agoI don’t know what the standard C-p and C-n bindings are. Could you share? The startup time is a known issue and scales badly with extensions. We’re aware of it but fixing it is tricky.
- alt219 2mo agoC-p and C-n (aka Ctrl-P and Ctrl-N) are the Emacs-style keybindings for previous (line) and next (line), very commonly encountered on the command line and in terminal applications. For example, most shells can use this in addition to up-arrow and down-arrow to cycle thru command history. Many, many more examples exist of applications (not just terminal-based, there are plenty of GUI apps too) that use this convention, as well as other Emacs-style keybindings (e.g. C-a for beginning of line, C-e for end of line).
- the_mitsuhiko 2mo agoCtrl+P in most coding agents is bound to bringing up a command bar. You should be able to bind both hotkeys to the functionality you want already.
- johnhamlin 2mo ago> standard C-p and C-n bindings don't work I know it's little, but this was the first thing I noticed and it made me think, "Maybe this app isn't for me." EDIT: FWIW, I just complained to pi and it added the keybinds for me in 10 seconds.
- newtwilly 2mo agoThere is a keybindings file. Here's how to configure the "emacs" keybindings https://pi.dev/docs/latest/keybindings#emacs-example https://pi.dev/docs/latest/keybindings#emacs-example It starts up for me in under a second on my M4 mac. (Obviously could be faster, but doesn't bother me personally on my hardware) My one main "issue" is with using the pi-sandbox extension. It's based on a forked claude code sandbox runtime. Not exactly sure why a fork was needed, and the fork is a bit behind now. I also wish the sandbox feature worked a bit more like how Cursor's sandboxing worked. Not familiar with Claude Code sandboxing, so can't compare that. I describe the issue and a (slightly hacky, but productive enough) workaround here: https://github.com/carderne/pi-sandbox/issues/50 https://github.com/carderne/pi-sandbox/issues/50 Obviously the fact that I can fork a plugin for pi and customize it as needed is quite a plus too. Really all the other features work quite well for me!
- TacticalCoder 2mo agopi is in YOLO mode by default. What the heck do you care if it's respecting XDG or not: this thing is not meant to be run in your main user directory with access to your secrets, bank accounts, emails, etc. I couldn't care less about something that's meant to be run/discarded/re-created in a VM (or microVM or container) at will respecting XDG or not. Why could you care less?
- vinhnx 2mo agoI'm building roughly this in Rust: single binary, XDG-native, with Landlock/seccomp, scoped filesystem access, default-deny egress, and policy-based approvals. https://github.com/vinhnx/VTCode https://github.com/vinhnx/VTCode
- Systemerror7A69 2mo agoI've absolutely had the same experience. Pi has been praised a lot, people speaking so highly of it's code quality. And then I installed it and found all the problems you mention. Not only that but I read Github Issues about the XDG problem and was a bit taken aback by the reaction of the developer. It's one of the best agents I have used so far but I'm still looking for a very lightweight, token efficient agent NOT written in a JS framework and which respects XDG
- rescbr 2mo agoI'm using maki (https://maki.sh https://maki.sh), it has 1, 2 and 3.
- coffinbirth 2mo agoMe too, maki in --yolo mode within an incus NixOS container, giving maki rootless (nested) podman and nix flakes powers (so it can install and run whatever tools it needs), with 100% ds4-flash it's extremely powerful and super cheap.
- Systemerror7A69 2mo agoI just wish it wouldn't ask me to pipe an install script directly to shell to install. Yes, I can probably inspect that but I do think installing through package managers is the best practice. It looks better than pi with XDG and not being JS but that is it's own red flag for me.
- rescbr 2mo agoI personally also don't like this, so use cargo to install it, it's in the readme. Takes a reasonable time to build on my X220, but on a modern computer it is plenty fast. cargo install --locked --git https://github.com/tontinton/maki.git maki
- lantry 2mo agoIs there a meaningful security difference between curl-pipe-bash and cargo install --git? Couldn't the cargo install include a buildscript that jumps right into a shell?
- rescbr 2mo agoSure, but you can review the git repo's content/commits in plain text, while curl-pipe-bash would require you to reverse engineer the binary that's downloaded. If somebody hacks the project's home page and switches the download location to a hacked binary, you'd be none the wiser. Of course, somebody could hack the repo and add a deliberate vulnerability as well, but at least you would have a trail of it.
- ChaseRensberger 2mo agoNot exactly what youre looking for but im working on a lot of these ideas with https://wingman.actor https://wingman.actor
- throw10920 2mo ago> Lots of praise for Pi in this thread, so I'll offer up a diverging opinion. Being reflexively contarian is not what HN is for. https://news.ycombinator.com/item?id=45530593 https://news.ycombinator.com/item?id=45530593 > For a program that's minimal it sure takes a long time to start up It took the same amount of time (3 seconds) as cursor-agent and codex on my machine, which isn't particularly high-spec. > the standard C-p and C-n bindings don't work It has programmable keybindings and you can ask the agent to remap them in five minutes, if not 30 seconds. > it doesn't follow the XDG Base Directory Specification and just pollutes my $HOME directory You can make it put .pi/agent anywhere with $PI_CODING_AGENT_DIR in 10 seconds. > scriptable in a simple (aka non-JS) scripting language This doesn't make any sense. The very point of Pi is that instead of implementing all of your features directly in the harness, you make the harness minimal and then implement the functionality you want as extensions, which necessarily means that you have some powerful and expressive extension language, ideally the one the harness was written in. I suspect that if the harness was written in Lua (which I love and is probably the least bad choice of "scripting" language), you would have far more issues with it. If these are your complaints, then this is one of the strongest endorsements of Pi that I've ever seen. I think I'm bookmarking this comment.
- throwuxiytayq 2mo ago> Being contrarian for the sake of it is not good form. Why would you say that? Is it good form to post that someone is being contrarian for the sake of it? OP’s comment looks like constructive criticism with plenty of good points. > It took the same amount of time (3.5 seconds) as cursor-agent and codex on my machine. So what? Nobody is pretending that these are minimalist. Codex is 1.2M of Rust LOC. > which necessarily means that you have some powerful and expressive extension language, ideally the one the harness was written in. Don’t be silly, JS is a joke. I was going to check Pi out, but now that I know it’s based on a shitty stack, I’m staying the fuck away from it. I don’t have the RAM to spare. > If these are your complaints, then this is one of the strongest endorsements of Pi that I've ever seen. I think I'm bookmarking this comment. > good form
- r_lee 2mo ago
- avenger123 2mo agoI have similar sentiment but still haven't spent time to give it due process to come to good conclusion. I tried the bare pi and now I am using oh my pi. At this point I feel that unless I am really concerned with maximizing token usage the Claude, Codex and Cursor cli are good enough. I think if you're looking for a reason to use pi versus you have a problem and pi is the solution than it's probably not a good fit. I do think using it with open weight models may be worthwhile. I can see value with using it with a open router subscription. I have used opencode but I would rather standardize on it pi.
- rsyring 2mo agoPi but in Rust: https://github.com/Dicklesworthstone/pi_agent_rust https://github.com/Dicklesworthstone/pi_agent_rust
- bamischijf 2mo agoOne look at that project and I'm already losing my mind
- bakugo 2mo agoHere's some annoyances of my own that honestly baffle me: - The command to exit the program is /quit, not /exit like literally everything else. If you type /exit, it'll get sent as a message to the AI. Apparently, /exit was an alias of /quit at some point, but was removed because it was simply too intuitive. - It has terminal subcommands, such as `pi install` to install an extension. Any reasonable person would expect that `pi help` would give you a list of such commands. Nope! That actually starts it up and sends the message "help" to the AI. Amazing. It's a common theme that most AI-generated or AI-adjacent software is full of nonsensical little decisions like this, that almost make it feel like it's not intended to be used by sane humans.
- buckle8017 2mo agoYou gave an agent access to your really home directory? lol
- Gormo 2mo ago> I think there's still space for another harness that's 1/ open-source, 2/ written in a fast compiled language (Rust, Go, etc.) and scriptable in a simple (aka non-JS) scripting language (Lua, etc.), 3/ less opinionated and more sensible so things like XDG isn't a WONTFIX. Have you looked at Crush (https://github.com/charmbracelet/crush https://github.com/charmbracelet/crush)? Written in Go, compiled binary, respects XDG (e.g. uses ~/.config/crush to store config), etc. No Lua scripting, but it includes a skill to manage its own configuration.