8 ms·
Zerostack – A Unix-inspired coding agent written in pure Rust
- throwa356262 5mo ago"RAM footprint: ~8MB on an empty session, ~12MB when working" I like this, Claude Code is using multiple gigabytes, which is really annoying on lowend laptops
- tecoholic 5mo agoYes. Just this fact is going to make a lot of people try it out.
- marknutter 5mo agoIsn't that because of the context window size?
- SatvikBeri 5mo agoThe context window has nothing to do with RAM usage and even if it did, a million tokens of context is maybe 5mb.
- vlovich123 5mo agoIt has nothing to do with local RAM usage. But a million tokens of LLM context is decidedly not 5mb. The rough estimate is 2 * L * H_kv * D * bytes per element Where: * L = number of layers * H_kv = # of KV heads * D = head dimension * factor of 2 = keys + values The dominant factor here is typically 2 * H_kv * D since it’s usually at least 2048 bytes. Per token. For Llama3 7B youre looking at 128gib if you’re context is really 1M (not that that particular model supports a context so big). DeepSeek4 uses something called sparse attention so the above calculus is improved - 1M of context would use 5-10GiB. But regardless of the details, you’re off by several orders of magnitude.
- tujux 5mo agoPretty sure we're talking about the output text, not the tensors.
- m00x 5mo agoThese LLM replies are really getting annoying.
- vlovich123 5mo agoMine? I literally wrote what I wrote because “context window” as a term of art refers to the LLM’s context window. I guess get better at detecting LLMs instead of accusing everything of being an LLM reply?
- bluegatty 5mo ago'A million tokens of context' is literally Terrabytes of KV cache VRAM on very expensive Nvidia silicon - on the model. On the Agent, yes, the context window does relate to RAM, because the 'entire conversational history' is generally kept in memory. So ballpark 1M 'words' across a bunch of strings. It's not that-that much. Claude Code is not inneficient because 'it's not Rust' - it's just probably not very efficiently designed. Rust does not bestow magical properties that make memory more efficient really. A bit more, but it's not going to change this situation. 'Dong it in Rust' might yield amazing returns just because the very nature of the activity is 'optimization'.
- rixed 5mo agoRust "denialism" is as annoying as rust evangelism. Of course any seemingly idiomatic rust is going to run circles around TS transpiled into JIT-compiled JS.
- bluegatty 5mo agoLamenting any 'not even criticism' of Rust as 'denialism' is just evidence of the insane cult that is Rust. Rebuilding Claude Code in Rust will make almost no difference in terms of real world performance. V8 is 'relatively fast', and there wouldn't be any noticeable improvements there, and probably not memory footprint either. The source for Claude Code was leaked and it's a vibe-coded mess, there's not much thought given to clean architecture, it's unlikely they've just cleaned up a bit and given thought to memory consumption etc, if they did, they'd get by far most of the way there and likely abnegate and real want to 'do it in rust', unless there are other architectural considerations.
- imtringued 5mo agoYou're the delusional one for bringing up the memory usage of the inference server that clearly isn't running inside the coding agent. The problem with your comments is that you're showing off a fundamental lack of understanding between managed languages and unmanaged languages. The vast majority of GCs are optimized for throughput and allocate big chunks of memory. They also tend to never release it if there was a temporary memory spike. The most advanced GCs also tend to have either read or write barriers, which slow down basic object accesses. Just in time compilation and managed languages in general need to retain a runtime representation of the source code to perform JIT compilation and then they have to store the compiled code in memory as well. JavaScript uses references against dynamic objects, which means you have to pay the indirection cost of a pointer but you also need to store type information as well to monomorphize the object literals and classes at runtime and fall back to a regular hashmap when fields are added dynamically. All of these things will add up and increase the amount of memory the application uses and how slow it runs. Sure Claude Code has severe architectural issues causing it to leak hundreds of gigabytes of RAM, but if those were not there you could easily build a C++ based alternative that runs circles around a hypothetical JavaScript based Claude Code that got its act together.
- gidellav 5mo agoHi, I'm the developer of zerostack! No, the memory footprint is not beacuse of the context window size: on my benchmarks, with a 128k context loaded, and it jumped from 8MB (without any chat/context loaded) to 11MB. The reasons why the memory footprint of zerostack are: - Rust, and not JS/Python, so no interpreters/VMs on top - Load-as-needed, so we only allocate things like LLM connectors when needed - `smallvec` used for most of the array usage of the tool (up to N items are stored in stack) - `compactstring` used for most of the string usage of the tool (up to N chars are stored in stack) - `opt-level=z` to force LLVM to optimize for binary size and not for performance (even tho we still beat both in TTFT and in tool use time opencode) - heavy usage of [LTO](https://en.wikipedia.org/wiki/Interprocedural_optimization#WPO_and_LTO https://en.wikipedia.org/wiki/Interprocedural_optimization#W...)
- SwellJoe 5mo agoThe context window is not on your system. It's on the server with the model. There may be some local prompt caching, of some sort, but you're not locally hosting the context unless you're also locally hosting the model.
- bluegatty 5mo agoChat history is kept locally, generally you have to send the 'whole history' to the model 'each turn'.
- rixed 5mo agoOnly "generally"? I'm curious what API has moved away from this protocol that seems mode adapted to conversaions with humans than agentic loops.
- bluegatty 5mo agoSo the standard API you pass it all along but I think there are some odd open ai apis that are different.
- _flux 5mo agoTo me it would certainly make sense if the protocol just said "append this text to context window id/sha256", in particular as the data is cached in tensor level in the provider side, so they need to first do that lookup anyway. So I would be surprised if they don't have that. In addition, this protocol could make it more transparent to say "oh we cannot proceed as we dropped the this cache, are you sure you want to proceed and consume a whole lot of expensive uncached tokens?". Oh, maybe that's a reason not to do it..
- SwellJoe 5mo agoThat's just the plain text (or whatever files), that's not the context the model is directly working with on the server, which is tokenized, embedded, vectorized and has attention run against those vectors. The local history is generally quite small, the context generally quite a bit larger. A text conversation of a few hundred kilobytes in plain text will be gigabytes in context.
- messh 5mo agoThe memory footprint is great, it allows finally running these coding agents in extra small instances -- say x1 on shellbox.dev
- chrisweekly 5mo agoHmm, if they're this small something like smolmachines (like shellbox, but free and local) might be a great fit.
- all2 5mo agoI'm building an agent framework in golang and it is extremely light weight. Startup time is under 1/2 second, and RAM usage is really low. I have a 12 year old laptop and it happily runs without slowing down. There's no reason what is essentially a string concat engine should be slow on any hardware, including old hardware.
- gidellav 5mo agoIsn't 2 second startup time a lot? With zerostack, I managed to get it down to ~90ms
- NewJazz 5mo agoThey said 1/2 as in 0.5 seconds as in 500 ms.
- throwa356262 5mo agoSounds interesting, would you like to share any more information about your project?
- all2 5mo agoLink is here [0]. The idea is to model cognitive states (how to think), and workflows (what to think about) as statecharts. The charts will be defined in YAML (version-able, hot-reloading). Context payloads are defined in an agent YAML file. Think of it as a map, like a drive map for a computer's HDD/SSD. You spec the order of context chunks, what goes into them, and then when the inference payload is built, it uses the context map definition (comprised of the chunks you defined), the agent definition (including model params like context length, temp, etc), cognitive state, and workflow state to build out the inference payload. Agent cognitive states may add chunks to the system prompt. Workflows may add chunks to the system prompt. Tool access may vary by agent/workflow state (policy is last-defined-wins overlays to keep it simple to reason about). Agents may run by themselves or be 'bound' to a workflow. Agents can detach from a workflow before it is finished, and either re-bind, or another agent may bind to the workflow (one implements, another reviews, for example). Conceptually, this is all very simple, which is why I'm hand rolling it. The goal is a minimal runtime that can support long-running agents in a 'zero human company' setting. On top of the runtime will be a minimal change control workflow (if you've spent time in hardware engineering, these are standard processes governed by a company's quality system). I've yet to wire in the economic pieces (token spend, power consumption, rollups that show performance of various agents based on inputs and outputs). It is a bit far fetched, but I'd like to get this thing ISO9001 certified, and maybe AS9100 certified. This is all to scratch my own itch, tbh. Most agentic systems are hard to reason about, bloated, lack visibility in the appropriate places, lack economic data of sufficient granularity, and so on. So I'm building this. [0] https://github.com/zerohumancompany2/maelstrom-code https://github.com/zerohumancompany2/maelstrom-code
- rel 5mo agoI've been trying to migrate over the zed and think they're Agent Client Protocol[1] is pretty neat, I wonder how much memory pressure Claude Code exerts if it is going through that mechanism instead 1: https://zed.dev/acp https://zed.dev/acp
- threecheese 5mo agoNot answering your question, but I just realized the new Anthropic billing changes are affecting ACP clients like Zed :( https://zed.dev/blog/anthropic-subscription-changes https://zed.dev/blog/anthropic-subscription-changes
- johntash 5mo agoMy understanding is that zed wrote a wrapper around 'claude -p' for ACP support so I imagine there isn't too much of a memory savings there since it's still actually running claude code.
- esperent 5mo agoAre you sure you don't have an LSP plugin or something running?
- rane 5mo agoI have 29 Claude Codes open, using 6.3 GiB RSS total
- hparadiz 5mo agothis is what I've been waiting for a low level language. please no more scripting language TUIs!
- iknowstuff 5mo agoIsn’t codex in rust?
- rvz 5mo agoyes.
- cyberpunk 5mo agoHow come the official codex install instructions say use npm install? (I just rebuilt my sandbox vm a few days ago….) Or are there two separate codex clients? https://developers.openai.com/codex/cli https://developers.openai.com/codex/cli
- krzyk 5mo agoBecause people are crazy, usage of npm for installing binaries is quite common unfortunately.
- cyberpunk 5mo agoSo …. do I understand it right? openai, one of the hottest companies on the planet right now, with very deep pockets, distribute their official rust cli via the … public npm repo?
- sergiotapia 5mo agoGiven agent harnesses affect so much of the performance of models, it would be great to see some kind of benchmark on how this tool performs compared to claude/codex/opencode/pi etc.
- gidellav 5mo agoHi! While I didn't try any agent benchmark, I already though of this possible issue, and I tried to approach it on two different levels: 1. The tools that are given to the agent are almost the same to the one defined in Opencode, except for Skills and Subagents (both features not implemented in zerostack) 2. Zerostack is prompt-based, so that it ships with a set of .md files, stored in ~/.config/zerostack/prompt, and that can be selected from the TUI in order to activate different 'agents': as you can see from the README, it is designed to contain the most important feautres of superpower + Claude's front-end design + git worktree support and Ralph Wiggum loops (both as integrated features)
- deleted 5mo ago[deleted]
- esafak 5mo agoIt's been said before, but it is important to prospective users, so it bears repeating: screenshots and benchmarks, please; it helps users decide whether to invest time in it. The ability to transfer settings from other agents would be great too.
- gidellav 5mo ago1. I will add some screenshots tomorrow 2. As said before, there are no benchmarks right now, but it is good enough for me, so I hope it's good enough for y'all :) 3. Transfering settings from other agents is out-of-scope for a minimalstic coding agent, but the idea is that, apart from MCP server, the rest might just force you to learn how zerostack works, because of design choices such as not having Skills or having certain specialized tools integrated (worktrees and loops).
- hiAndrewQuinn 5mo agoThe codebase was small enough that I handed it over to DeepSeek v4 Flash in Pi to skim through for any risky business, and I didn't find anything concerning. Nice work.
- gidellav 5mo agoThanks! Funny enough, a good chunk of the coding was done by Deepseek v4 Flash, while I hand-wrote a couple of the TUI logic, as deepseek kept failing on certain cursor-moving logic, and I fully managed the memory optimization process (as you can read on another comment I left, it both a set of compiler optimizations and usage of certain Rust crates in order to leverage more efficient data structures).
- hiAndrewQuinn 5mo agoTaking notes and comparing this against my own (non coding agent) Rust TUI project, thank you! I'm new to Rust so this is a helpful baseline.
- gidellav 5mo agoNo problem, happy to help!
- kadoban 5mo ago> I handed it over to DeepSeek v4 Flash in Pi to skim through for any risky business Doesn't prompt injection make that a rather flimsy investigation?
- koito17 5mo agoSince the OP stated they used DeepSeek V4 Flash for generating a lot of the code, I decided to check whether there were any outdated dependencies. In my experience, with Rust projects, if you do not instruct models (even Claude 4.7 Opus) to use `cargo add` instead of manually editing the Cargo.toml, you will almost certainly get out-of-date dependencies added to your project. Manually checking the dependencies used by this project, I was pleased to see they are all the latest version. That doesn't mean there are no issues lurking in transitive dependencies, of course. As for getting an LLM to review the code, I think we can get all opinionated very fast. For instance, when I was eyeballing the code, some of the enum methods converting to/from strings made me think "this could've been a single #[derive] with strum." That would make the code in provider.rs a lot more concise, at the cost of importing one crate (with no dependencies!) Lastly, for fun, I decided to get DeepSeek V4 Pro (with Max thinking) to "audit" the codebase. The output mentioned no obvious signs of hidden telemetry, but it did note that the project sets the panic handler to "abort", which I have strong opinions on... Presumably the OP wanted to avoid linking against libunwind to save a few kilobytes of binary size, but now you have a binary that immediately aborts and doesn't give the user a stacktrace of what just crashed. I would rather have a ~50 KiB larger binary if it means getting useful debug info during a panic. Additionally, if there are async tasks that panic, they can't be recovered to display a generic error message; instead the whole process just aborts.
- 360MustangScope 5mo agoFunny this comes out today. I was just about to start to write one in rust. It's amazing having opencode slowly leak memory and end up becoming 6gbs on a large project and then get slower and slower. Will check this out! Seems cool!
- gidellav 5mo agoYes! This project derived from an OOM killer activation that happened on my old laptop beacuse i had more than 2 opencode instances open together with Firefox...
- khimaros 5mo agoi built something with a similar philosophy here: https://github.com/khimaros/airun https://github.com/khimaros/airun -- it is intended to be piped and redirected. it discovers skills, AGENTS and prompt templates from Claude Code, Pi.dev, OpenCode and others. no TUI, but does have a basic tool calling loop $ airun -q -p 'output a shell command for linux to display the current time. output only the command with no other code fencing or prose' | airun -q -s 'review the provided shell command, determine if it is safe, run it only if it is safe, and then summarize the output from the command' --permissions-allow='bash:date *'
- gidellav 5mo agoWhile I think that the core philosohpy is the same, i'd like to ask: why adding features like Skills and prompt templates? I personally decided to not implement Skills and instead using a prompt library approach, where certain .md are used to fully replace the system prompt, in order to allow for an approach similar to Skills with ~100 LoC dedicated to this system.
- c-hendricks 5mo agoAren't skills fairly easy to share, and can contain more than one file?
- desireco42 5mo agoPrompts as well... he might be on to something here, can't say as I didn't try it yet Skills are just prompts
- hedgehog 5mo agoMost of mine have code in them. That's most of the value.
- cobolcomesback 5mo agoSkills are not just prompts.. the entire problem that skills solve is runtime discoverability via a skill description. Agents can self-recognize that a skill would be useful in a situation, and then load+use. Prompts are just text templates entered by the user, and the user must specifically know when to and remember to invoke them. If you’re just using skills as if they are the same as prompts, you’re totally missing out on the entire benefit that skills provide!
- frio 5mo agoThanks, I've been tooling away in my spare time on my own version of this -- both to get a deeper understanding of agents (everyone suggests writing your own) and to help learn Rust. I'd like to retain `pi`'s configurability though, the ability to self-mutate and generate new tools is incredibly useful, particularly because I don't think any of these things should have access to arbitrary code execution through `bash` (of course, if they have access to, say, `edit` and `cargo run` they still have arbitrary code exec, but...) (so I tend to generate tools on the fly when I encounter something the no-bash agent needs to do).
- gidellav 5mo agoI actually though about this issue, but while Pi can have this script-like environment thanks to the fact that it's based on an interpreted language (TypeScript), Rust has its own limitation as a compiled language. I decided to allow for customization in a different way: 1. The prompt library (~/.config/hypernova/prompts/) acts as a simpler alternative to Skills, with the built-in prompts that should replace superpowers + Claude's frontend-design 2. Compile-time features; things that might make the agent more bloated can be disabled when you decide to compile zerostack 3. Clean code; code that's short and easy to read, you can just throw zerostack on its own source code in order to build a custom fork if your necessity can't be satisfied. Good features could also be adopted by the main version. 4. Permission mode; as you can see in the README, there was lots of concern around the permission model, and I landed on a 4-mode system that goes from "Restrictive" (no commands) to "YOLO" (whatever the agent wants to do" + custom regex patterns for allow/ask/deny permission on 'bash' calls. In your case, you just need to run `zerostack -R` to force all tools to ask for permission. (Also, there is a work-in-progress features for programmable agents, but that's yet to be announced)
- frio 5mo agoI've been trying to use `Deno` underneath `Rust` so that the tools can still be written in Typescript and thus self-mutated without the compilation step (but I can still try to do clever things with V8 Isolates or similar). It's been an ugly experiment so far; I'm vaguely thinking a simpler model would be to just define a binary "API" and run tools by exec-ing binaries.
- nimchimpsky 5mo ago[dead]
- artem_am 5mo ago[flagged]
- inciampati 5mo ago> Integrated Ralph Wiggum loops: looping capabilities for long-horizon tasks Imo, this shouldn't be embedded in the executor layer. Orchestration should handle this.
- gidellav 5mo agoI get you, but when I decided to follow a no-skills approach (as in, no agent's Skills used), I had to decide what: 1. Couldn't be built only using prompts 2. Couldn't be built only using MCP servers 3. Would have improved my UX experience (as i hope, your UX experience). From those three conditions, I chose integrated git worktrees and loops
- qsera 5mo agoIs AI is the new Waterfall/Agile methodology with all the lingo/terminology/names that make no damn sense? Appears so, because I am so turned off by it...
- deleted 5mo ago[deleted]
- brcmthrowaway 5mo ago!RemindMe 6 months
- andrew_kwak 5mo ago[flagged]
- usernametaken29 5mo agoNow make it into an IntelliJ plugin which has proper access to the search index. I’ll pay for it. For Christs sake it’s insane JetBrains hasn’t figured this out yet
- nullorempty 5mo agoI think this is such an opportunity for JetBrains. I talked to them about this at AWS Re-Invent, strangely, they could really see how strong of a position they are in if only they paid attention to the right thing!
- usernametaken29 5mo agoThey even have this already, Junie, but of course the plugin version cannot use BYOK….
- kirtivr 5mo agoJetbrains does not have their own IDE-integrated coding agent? What do Jetbrains users use then? Amp?
- sgarman 5mo agohttps://www.jetbrains.com/junie/ https://www.jetbrains.com/junie/
- usernametaken29 5mo agoJunie does not support BYOK inside the IDE
- Mashimo 5mo agoWhat does the k stand for? Key? You can add any open Ai api endpoint you want, no?
- 5mo ago
- parhamn 5mo agoI (somewhat jokingly) wrote one recently too... https://github.com/pnegahdar/nano https://github.com/pnegahdar/nano in under 200 lines. Repl, sessions, non-interactive, approvals, etc The smarter the models get the less the harnesses matter (outside of devx). Maybe one day I'll run it through swebech.
- mgfist 5mo agoI like it
- freakynit 5mo agoSo freaking cool..in just 200 (190 actually) lines. I also wrote one by myself last week (just for fun and learning). It works, including integration with configured mcpServers (like you do in most coding agents). Wrote about the whole step-by-step process and what is needed at what step and why: https://nb1t.sh/building-a-real-agent-step-by-step/ https://nb1t.sh/building-a-real-agent-step-by-step/
- tasuki 5mo agoOk, I know it's a joke. And also, are you daily-driving it?
- parhamn 5mo agoNot daily driver, but have used it as a utility a few times. For my daily work I like letting different harnesses compete and look over each others work (while subsidized with the subscriptions) so I use OpenADE.
- edgardurand 5mo ago[flagged]
- phoebe_builds 5mo ago[flagged]
- slopinthebag 5mo agoI love these. Coding agents aren't very difficult to build, it's a TUI + tools + getting a nice agent loop working. The hardest part seems to be supporting all of the different providers and model quirks. What is interesting is seeing the experimentation: some provide tons of tools, others provide a single python interpreter and have the agent use tools via sandboxed python scripts, others use minimal tools and lean on bash. Personally I want a harness that gives a ton of control to the user to let them steer the LLM, less agent and more augmentation. Maybe I'll have to build it myself. If anyone has ideas, let me know.
- afzalive 5mo agoPi.dev is pretty good in giving tons of control to the use and has extensions that you can easily build. Although people are complaining about its RAM usage in this thread, I haven't bothered to check how much RAM it uses.
- slopinthebag 5mo agoI refuse to run npm slop on my hardware
- inhumantsar 5mo agoI'm working on one right now where nearly everything can be expressed as a combination of workflows. There will be some built-in agent types out of the box but all the Lego pieces are there if you want to put together something different.
- michalsustr 5mo agoWhat language are you building this in? I’m interested but trying to stay away from js world for security reasons.
- inhumantsar 5mo agoThe system and plugins are Rust. Workflows can be defined in a plugin with Rust or externally with YAML. Might add support for custom WASM plugins down the road, but everything shipped with the system will be Rust.
- theusus 5mo agoI absolutely like this. Pi becomes sluggish after installing a couple of extensions. I myself was trying to port Pi to Rust but it was consuming too much tokens. Is there any API like Pi so that I can create extensions.
- esperent 5mo agoIt absolutely doesn't. It must be the extensions you're using. I've found is that nearly every extension on the official pi.dev/packages is vibe coded trash, like for example the most popular subagents extension. Instead of just giving you a basic subagent, it's a whole kitchen sink of recursion, teams, chains, confusingly named agents like "oracle" etc. Basically feels like someone kept prompting "what else could we add here?". They're all like that. It's no wonder these slow down pi. What I've done is just have the agent write my own. Get a local copy of e.g. that kitchen sink subagents extension. Have the agent list all the features, then I give back a much smaller list of the features I want and say "write me a new extension with just these new features" and every time it one shots it (using GPT 5.3 usually), then 20-30 minutes later I have a working, lightweight extension tuned to my exact workflow. I've done this for I guess about 8 extensions now (subagents, a lightweight typescript LSP, web search, background processes, Claude style hooks, plan mode are the main ones) and it's very fast and snappy.
- choopachups 5mo agodude, im actually in disbelief how long we put up with the pile of shit that is claude code.
- noodletheworld 5mo agoAre agent harnesses the new web framework? Everyone wants to write one, building a new one is easy to start with, but tough to get to “prod ready” and the landscape is littered with failed attempts? Certainly feels like it. This is really good though; works well and at least has a clearly articulated raison d'être.
- deagle50 5mo agoLooks promising, is OpenAI subscription support planned?
- joeyguerra 5mo agothe war of the coding agents has begun.
- rvz 5mo agoAs you can see, writing a coding agent in a compiled language makes a ton of sense and gives the benefits of running multiple agents efficiently instead of running into leaks and tools consuming gigabytes of RAM.
- _user_account 5mo agoThat makes no sense, coding harness are just subprocess wrappers + http calls. What is the benefit if at the end of the day it will spawn make,cmake,python,node.js, or whatever the developer is working on? With the enormous downside of loosing native/easy extensibility, JavaScript Object Notation (JSON) is derived from JavaScript, it seamlessly parses and dumps.
- sarim 5mo ago[flagged]
- mohsen1 5mo agoThis is much needed! Compared to Codex CLI, Claude Code is insanely slow. $ time claude --version 2.1.143 (Claude Code) ________________________________________________________ Executed in 4.39 secs fish external usr time 29.68 millis 0.26 millis 29.41 millis sys time 71.30 millis 1.30 millis 70.00 millis 5 seconds to show me the version number! I'm guessing Claude Code also needs a rewrite in Rust. But from what I saw in the leaked TypeScript code, a line-to-line port will be pretty bad. It requires a new architecture that matches Rust idioms
- nomel 5mo agoNote that includes network requests to check latest version. I suspect we'll soon see someone make a persistent Claude shell mode, with the reverse of a !, where you work in shell and send a message to Claude, and Claude sees all the context.
- marcosscriven 5mo agoWhat version of time is giving you that kind of output?
- pramodbiligiri 5mo agoLooks like that time command was invoked from "fish" shell: https://fishshell.com/docs/current/cmds/time.html https://fishshell.com/docs/current/cmds/time.html
- tencentshill 5mo agoThis may be the most HN post I have ever seen.
- wkcheng 5mo agoThis is nice! I tried it for a bit and it was indeed quite fast. Are you looking for contributors, or are you building this as a personal tool? I ran into some issues when attempting to use different models, though: gpt-5.5 on Azure doesn't work, even with the OpenAI compatible endpoint, because "max_tokens" has been replaced with "max_completion_tokens". And it doesn't appear possible to pass through custom headers, so I wasn't able to specify reasoning_effort for deepseek models.
- gidellav 5mo agoYes, I am open for PRs. What you showed is a clear bug in my codebase, if you can, open a Github issue with each of your bugs. Thanks!
- phplovesong 5mo agoDoes anyone use claude with custom agents? IIRC they banned the use, and only allow claudes own agent.
- shepherdjerred 5mo agoYou can use Claude with other harnesses at API costs, but you cannot use it with your Claude Code sub. That's changing next month though, I guess https://support.claude.com/en/articles/15036540-use-the-claude-agent-sdk-with-your-claude-plan https://support.claude.com/en/articles/15036540-use-the-clau...
- DeathArrow 5mo agoI use Claude Code with GLM 5.1, MiniMax M2.7, Kimi K2.6 and Xiaomi MiMo V2.5 Pro.
- spectaclepiece 5mo agoThe key thing with pi is that it can extend itself. How does that work when it’s written in rust?
- adastra22 5mo agoThat's a bit like saying "the key thing with Lisp is that it can extend itself." Yes, that is a core feature and a lot of people use it for that reason. But not everyone. Other use pi just because it is a small agent harness, but don't need (or don't want) the self-extensibility.
- nextaccountic 5mo agoThe usual way to make a Rust program extensible is to embed a wasm interpreter. Then the agent can extend it by writing an extension in Rust or any other language that compiles to wasm. Zed does it for example
- Phlogi 5mo agoLooks interesting, how would you use skills with that? Would I need to migrate them into prompts? Which I think is not the same. E.g. how to use official, vendor provided skills with zerostack? https://github.com/elestio/elestio-skill https://github.com/elestio/elestio-skill
- ffsm8 5mo agoTechnically, a skill is equivalent to adding '"The skill description": if this applies, read /path/to/skill/definition.md' To your agents.md At least currently skills don't let you set the model (to my knowledge), so that's not a distinction either here (it would be with agent definitions)
- obaid 5mo agoWorth noting the "Unix-inspired" framing is the HN title, not the README — the project itself pitches "minimalistic" and "optimized for memory footprint." Curious what the author means by Unix-inspired specifically, since a single-binary TUI running a multi-tool agent loop doesn't immediately read as do-one-thing-well-and-compose.
- arjie 5mo agoI had Claude Code build me one of these as well, though I added Dirac's line hashing for edits etc. Also used Rust, and I had this idea that I should use plugins so it can self-edit by implementing in hooks but in the end, I just have it create exhaust information about improvements into a separate file and just update the source code and recompile. The source code is in a fixed place so it can just rewrite and build the agent itself. I use it with DeepSeek 4 Flash running on 2x RTX 6000 Pros which I get some 138 tok/s on. To be honest, I just plagiarized Pi, Dirac, OpenCode. Any new tricks in this one that I can steal?
- gidellav 5mo agoSome interesting features I add on top of being lightweight are the prompts library, Git worktrees integration and Ralph Wiggum loops integrations.
- arjie 5mo agoVery cool. Thank you! I will look.
- teo-mateo 5mo agoIs it public on github?
- normie3000 5mo agoYes.
- arjie 5mo agoMine? No. It’s super idiosyncratic and I haven’t validated that it has not leaked secrets into the codebase.
- joshka 5mo agoTake a look at OpenAI blogs about codex: https://openai.com/index/unrolling-the-codex-agent-loop/ https://openai.com/index/unrolling-the-codex-agent-loop/ https://openai.com/index/harness-engineering/ https://openai.com/index/harness-engineering/ https://openai.com/index/unlocking-the-codex-harness/ https://openai.com/index/unlocking-the-codex-harness/
- born-jre 5mo agoSorry, it looks like we were not able to load the page. Please make sure your network connection works and you are using an up-to-date browser. If the issue persists, please visit our issue tracker to report the problem Got this on iPhone firefox
- gidellav 5mo agoRetry from Safari, sometimes it works better
- 2001zhaozhao 5mo agoHmm, Claude Code and Opencode work fine for me. It's a bit amusing that coding agents rely on drawing 1000W+ and using 2TB+ of memory in a datacenter to run, yet people really focus on the last few watts and few hundred megabytes of memory on their laptop (which get dwarfed by the energy cost of compiling their code anyways). But I suppose making them a bit faster and lighter wouldn't hurt.
- huflungdung 5mo ago[dead]
- kvdveer 5mo agoThe data centre runs on a dedicated power line. My laptop runs on battery. Using coding agents currently drains battery quite fast, which is surprising, given that the vast majority of the work does not take place on my laptop. Making the client side coding agent more efficient isn't about saving the climate. It is about extending the workday (which might actually make the climate worse)
- 2001zhaozhao 5mo ago[dead]
- remus 5mo agoI think this is overly reductive. For sure the models are behemoths and consume a lot of resources, but the harness can have a big impact on how much the model is used. For example, having a strong set of tools available in the harness means the model can work much more efficiently.
- NewJazz 5mo agoIt is also just an indicator of the planning and polish that a particular harness may have.
- deleted 5mo ago[deleted]
- goyozi 5mo agoReally neat, I’ll have to try it when I’m at home. Lean, fast tools really make a difference in the coding experience. I’m curious how the prompts idea performs in practice compared to typical skills and subagents. I frequently combine the two to get otherwise tricky workflows done. Say I have a failing build. I invoke my /fix-ci skill (sometimes in the same context I made the code change in), it launches a subagent to extract an error message / stack traces / relevant logs, and works through the problem. Say an integration test ran into a db query issue. Sometimes the agent itself, sometimes with a slight nudge from me, will load the readonly db access skill and start investigating. If I expect long, deep shenanigans, I’ll often say something like „use a sonnet subagent and instruct it to use the db query skill to debug the behavior we’re seeing”. And it can keep going like that: skills give extra capabilities on the fly, subagents isolate context to prevent bloat. Intuitively, it seems that by the agent running itself via bash with different prompts _might_ come close but a bit less streamlined? I’d have to check and see.
- gidellav 5mo agoWell... for the most part, you use it like skills, but instead of "commands" you can think of "environments": so '/prompt debug', which is one of the integrated prompts, allows for a debug-focused agent, you can then talk to it as a normal agent, and then '/prompt code' to go back to the standard coding agent. About subagents: as of right now, the entire agent runs on one context buffer, so it doesn't support subagents in order to keep it lean; but there is a great chance that subagents will be added, as explore-heavy tasks often bloat the context window
- post_below 5mo agoIt sounds like you're saying that /prompt changes the system message part of the session. Doesn't that cause a cache break and result in higher usage/cost?
- post_below 5mo agoI took a quick look at the source code and it looks like, yes, using /prompt during a session will rebuild the session with a new preamble/system prompt, causing a full cache miss on the next turn. So in that way it's not like skills at all, neither of those result in paying full read price on the entire session, just the skill prompt itself. Something else I noticed... In the Anthropic implementation it doesn't seem to be using 'cache_control' in the body. Assuming my understanding is current, without that the Anthropic API won't do any caching at all (unlike most other APIs that do some level of automatic caching without it being requested). So that would result in paying full read price on every turn. Of course I could be missing something, it was a quick look. Can you clarify?
- DeathArrow 5mo agoHow does this do in SWE-Bench Pro and Terminal Bench?
- DeathArrow 5mo agoIMO, the problem with Claude Code, OpenCode, Pi is the harness quality and convincing the agents to do the exact things you need, to define workflows and make the agents stick to it. I didn't experience performance issues. For example I have an agent in Claude Code that has strict rules to do something before implementing every phase in the plan. Sometimes it decides not to do it. "But, wait the feature is simple enough so I can proceed straight to implementation..." Just because this is written in Rust won't solve the biggest issues most users have with coding agents.
- bhaak 5mo agoBut that‘s not an issue with the coding agent. It’s the model that doesn’t follow the instructions. Given how an LLM works, you can never be sure it will always work. LLMs are not deterministic.
- DeathArrow 5mo agoIsn't a harness supposed to guide and steer yhe coding agent?
- bhaak 5mo agoWhile the harness can block certain actions (e.g., tool usage), it can’t enforce perfect adherence to instructions because the model itself is probabilistic. The harness can reduce deviations, but it can’t eliminate the fundamental unpredictability of LLMs. The rules that are fed into the AI are not unbreakable laws to the AI. We should always remember that.
- tedshark 5mo agoNew to this. but whats the benefit over models like Claude code ?
- frabcus 5mo agoMake harness independent of model, so when pricing or quality changes you can switch. Avoid lock in to stack from one provider (things like a harness that only works with models from one provider and so on). Use local models (a couple of them do work a bit now, if you have 20Gb video RAM), which saves money and is more private, and works offline. Can improve the harness, fix bugs in it, make it compatible with different systems and techniques. This game happens every time in new cycles of developer technology. The good bet historically has always been to use open source - there's a reason most developer tooling just pre-AI revolution was open source (even things like Java and .NET which used to be proprietary).
- DeathArrow 5mo ago>Make harness independent of model You can use Claude Code with almost any model. >Use local models (a couple of them do work a bit now, if you have 20Gb video RAM), which saves money and is more private, and works offline. You can do that with Claude Code.
- timwis 5mo agoDifferent harness (pi), but this blog post may partially answer your question: https://mariozechner.at/posts/2025-11-30-pi-coding-agent/ https://mariozechner.at/posts/2025-11-30-pi-coding-agent/
- zbyforgotp 5mo agoWe don’t trust llm execution- so we add user approvals. But task decomposition calls for co-recursion between code and prompts. This means that the approvals should be evocable at any depth. I think we need some kind of protocol for that (à la the Cubes OS protocols for cut and paste between vms). Maybe a workaround could be to use bubblewrap of the scripts ther recursively call the llm (and run the agent in yolo inside the wrap).
- agumonkey 5mo agoTransactional recursive agents ? Nothing is committed until the final top-level transaction is accepted.
- frabcus 5mo agoWell, or not spawn any external commands, and actually have tools made of code written by someone who thought about what the agents at each level should be limited to doing.
- zbyforgotp 5mo agoIn the limit we want the llm to write the code (like in RLMs).
- alfiedotwtf 5mo agoOr just run agents in a container…
- hashmal 5mo agoCurrently, having LLM feeding on its own output repeatedly is the fastest way to get it hallucinate.
- gidellav 5mo agozerostack contains --sandbox flags that forces bwrap usage on all shell tool usage
- zbyforgotp 5mo agoToo late for fixing it - but of course I meant https://www.qubes-os.org/ https://www.qubes-os.org/
- sinansaka 5mo agoLove it! I think the minimal approach you took is the right path forward. As others mentioned, small harnesses make it possible to run many agents in parallel and in small cloud instances. working on a minimal agent in Go myself for this use case.
- kuanghs 5mo ago[dead]
- 0xAstro 5mo agoThese simple harnesses perform the best in my day to day experience but I sitll can't figure out why that's the case.
- jwpapi 5mo agoBecause they don’t have an incentive to maximize your usage, but rather focus on solving probabilistic solvable problems for you. Bigger harnesses need to balance upping your token usage and being helpful.
- tsiao1999 5mo agoI’m also playing around with Rust for building agents—my setup ends up looking a lot like ZeroStack’s approach. If anyone’s curious, my project is here: https://github.com/7df-lab/devo https://github.com/7df-lab/devo
- Fuzzwah 5mo agoThe screenshots in your readme all 404
- zby 5mo agoThere is also https://github.com/Dicklesworthstone/pi_agent_rust https://github.com/Dicklesworthstone/pi_agent_rust I vibed a comparison/review of these two systems using my llm wiki: https://zby.github.io/commonplace/work/pi-agent-zerostack-comparison/pi-agent-rust-vs-zerostack/ https://zby.github.io/commonplace/work/pi-agent-zerostack-co... (the prompt is in https://zby.github.io/commonplace/work/pi-agent-zerostack-comparison/review-instruction/ https://zby.github.io/commonplace/work/pi-agent-zerostack-co...)
- cassianoleal 5mo agoYour bot seems to think that `pi_agent_rust` is the same as upstream Pi.
- zby 5mo agoI think I fixed this in a later revision. Does that persist?
- rw_panic0_0 5mo agowhat "unix-inspired" here means?
- Sim-In-Silico 5mo ago[flagged]
- teiferer 5mo agoCould we finally put the whole "written in pure Rust" thing as if it is a certificate of quality to rest? You can write crap in Rust, you can write excellent software in Rust, and both goes for all other languages too. I don't care what language you used for a project from the quality POV. Slop is slop, no matter Rust or JS or C.
- rullopat 5mo agoI understand the need for memory footprint in some situations, but what's the point of seeking performance for a software that mostly calls LLMs and waits?
- iddan 5mo agoRunning many of those in scale.
- tornikeo 5mo agoSimplest explanation I could come up with: Just for hype and fun. Rewriting things in rust is "cool". Bun did it, other projects did it. Therefore, writing a coding agent in one should be cool too. And apparently enough HN crowd agrees with it to take the #1 spot on the board.
- GodelNumbering 5mo agoFor the most part, doing things right in the given language matters more than change of language. A lot of refactors in Rust (in the coding agent space) I see jump straight to Rust without considering what inefficiencies can be addressed before changing the language. Having said that, I considered a Go/Rust rewrite of Dirac (https://github.com/dirac-run/dirac https://github.com/dirac-run/dirac) for some modules to support cases when someone wants to run like 30 agents, but it quickly became obvious that, a) while the node event loop is a bottleneck, it is not the sole bottleneck and b) if you have a VSCode extension, you can't totally get rid of TypeScript, so it just becomes the case of bi-lingual project and the maintenance burden that comes with it
- flossly 5mo agoRust is just another language. Sure it's cooler than some langs, to some ppl. Sure. The author made the choice. Open sourced it (thanks!). So now we all enjoy more options. Saying author did so because "cool" does not sit well with me. It's feels like you get a no-strings attached gift of significant value and then going saying the giver gave it to be seen as cool.
- wint3rmute 5mo ago
- martingxx 5mo agoI wonder how this compares to tau https://tau-agent.dev/ https://tau-agent.dev/ ? Both are in Rust and both mention Unix in their descriptions.
- coalstartprob 5mo ago[dead]
- kapija 5mo agowoo hoo, more ai slop...
- kuberwastaken 5mo agoThis is awesome! can't wait to see where it goes as it continues development Always funny how Hacker News works with traction, posted about a rust based TUI agent I'm working on a couple days ago too :P https://github.com/Kuberwastaken/claurst https://github.com/Kuberwastaken/claurst
- amys94fr 5mo ago[flagged]
- GTonehour 5mo agoI tried to list the competing open-source AI coding agents to compare their popularity over time — opencode wins for now. https://www.star-history.com/?repos=anthropics%2Fclaude-code%2CAider-AI%2Faider%2Ccline%2Fcline%2CRooCodeInc%2FRoo-Code%2Csst%2Fopencode%2Cgoogle-gemini%2Fgemini-cli%2Copenai%2Fcodex%2CAI-App%2FOpenDevin.OpenDevin%2Cwarpdotdev%2FWarp%2Cantinomyhq%2Fforge%2Cbadlogic%2Fpi-mono%2COpenHands%2FOpenHands%2CKilo-Org%2Fkilocode%2Cgi-dellav%2Fzerostack%2Cpnegahdar%2Fnano https://www.star-history.com/?repos=anthropics%2Fclaude-code...
- whazor 5mo agoIt says inspired by Pi, but I don't see any extension/plugin possibilities. The best feature of Pi is that an extension can hook anywhere and completely change the behavior. It also allows two extensions to stack on the same hook where there are no conflicts. I believe Pi extensibility is the most important feature, exactly as how it was important for WordPress. WordPress won because anyone could install it and add the plugins they needed. WordPress also has the same hook system where multiple plugins can build on the same hook. Companies will want to completely customize their agent harness so it optimally works for their situation.
- zrg 5mo agoI'm actually very close to being ready to release exactly that also in rust. I completely agree with your statement, extensibility is the most importnat feature. https://x.com/PandelisZ/status/2055633346831548902 https://x.com/PandelisZ/status/2055633346831548902 The two things I want to get right before actually releasing it is properly eval it againt other harnesses and make sure its better. And the licence. I don't think a GPL licence will yield addoption so I would like to MIT Roder or figure out the right licence
- krzyk 5mo agoThe most important feature of Pi is that it is small, and has small system prompt, making it great for locall LLMs.
- gidellav 5mo agoCheck https://news.ycombinator.com/item?id=48164948 https://news.ycombinator.com/item?id=48164948
- icase 5mo agoomfg stop nobody actually cares about rust, let alone likes it
- nextaccountic 5mo ago> Bash execution ... optional sandboxing for isolation Sandboxing should be the default. Rather than routinely allowing unsandboxed access, one should be able to configure the sandbox to allow exactly what is needed That's hard. For example, I've been unable to give wayland access to agents inside the sandbox (there's a special flag in bubblewrap to mount /dev/dri in a way you can make use of it, but you also must give access to the wayland socket, and maybe other things). So I think that maybe harnesses should invest in more sandboxing resources
- gidellav 5mo agoThis is actually a topic of current interest, and I think that I will switch to a sandbox-by-default once the bwrap implementation inside of zerostack is well tested and highly configurable.
- eddy-sekorti 5mo agoHow is it any faster than something written in anyother programming languages?
- zoobab 5mo agoI tried to install opencode on my x200 laptop, it would segfault as Bun wants some specific intel processor extensions (SIMD). Now I tried to install zerostack, but the compilation freezes at a certain package. Is there a static binary available for linux?
- zoobab 5mo agoI finally managed to compile it, quite happy with the usage. Will try to rebuild it with static flag.
- shrmarahul 5mo ago[flagged]
- anuis258 5mo agohmm
- nopurpose 5mo agoHow would one create custom tools for it? opencode offers TS SDK for it, but with rust it will be something more heavyweight like gRPC bridge (similar to how terrafoem providers work).
- LuminaNAO 5mo ago[dead]
- perlgeek 5mo agoAre there any pre-built Linux binaries for this? I tried to install it with cargo, but got "feature `edition2024` is required" (which is the newest cargo available from my current Ubuntu distro). Also, can I configure zerostack to always require a sandbox? I don't want to accidentally forget to call it with --sandbox.
- tontinton 5mo agoYo that's really similar to my very own https://github.com/tontinton/maki https://github.com/tontinton/maki only I'm MIT and you're GPL, cool
- ianberdin 5mo agoDon’t get me wrong, but 7K LoCs means it is still an early attempt to make a coding agent. It starts easy “ah it can edit and read files!”, but it requires a lot of extra effort to make properly for many edge cases, especially caching, price optimizations, etc. I’ve been implementing custom coding agent in https://playcode.io https://playcode.io for 3 years already. Far beyond of 7K LoCs. So when you compare to “shitty slow” Claude code - I don’t agree.
- gidellav 5mo agoCheck what tools we already implemented, check your "slow" accusation, check the prompt system, check the provider integration (via Rig, so caching is already enabled), check the MCP support and other integrations that you don't even find on some major agents (git worktrees + loops). For 3 years, your Lovable clone is something that Claude Code could make in a couple of days, but good luck shitting on other project I guess.
- wolttam 5mo agoThe way I see this going is there will be 10s of thousands of model harness projects out there, because the tools make it so easy to make a harness that suites your workflows exactly the way you like (as someone who made their own harness) I also used bwrap for sandboxing. I'm looking at layering slirp4netns, because I found out that models will happily break out of the sandbox via the the host network interface.
- halcyonblue 5mo agohttps://forgecode.dev/ https://forgecode.dev/ https://github.com/tailcallhq/forgecode https://github.com/tailcallhq/forgecode is written in Rust too and seems surprisingly capable. How does Zerostack compare to forgecode?
- IndianAISupport 5mo ago[flagged]
- NamlchakKhandro 5mo agoNo extensions? I think you've missed the point
- gartheuncle 5mo agoA friend of mine developed zot.sh. I'm currently using it extensively. I'll definitely check out zerostack.
- gartheuncle 5mo agohttps://github.com/patriceckhart/zot https://github.com/patriceckhart/zot but it's Go
- kcarriedo 5mo ago[flagged]