There aren't any documented settings to disable this, but there is a feature flag it currently sits behind. You can flip it in your ~/.codex/config.toml[1]:
[features]
daemon_auto_start = false
There are also some files that it writes to in ~/.codex at startup: pid files, lock files, things like that. You can delete them and replace them with symlinks to /dev/null, then mark those unwritable with `chattr +i` or similar. Presumably then the background daemon will crash on startup, if the feature flag ever goes away.
What makes ACP deficient for headless uses of LLM agents? Maybe fixing that or standardizing on another protocol designed for pluggable LLM agents (I guess ACP is more oriented towards pair programming in an IDE, at least originally) is a better idea imo.
Yep, the real issue is that it was something they didn’t have before, and then with Codex 0.157.0 enabled, they installed this persistent nonsense [1] that survives after the last instance of Codex has exited on your machine, which is just gross.
For whatever reason, the daemon has been refusing to start and Codex has been grumbling to me. I was wondering where the daemon had come from, and thought maybe I missed something previously and that it had just broken.
It also fills up my HD with old versions.
I investigated and it took up something like 12 gigabytes in total on my system; which seems insane to me, it’s just a harness?
People moan about how badly made Claude code is but Codex seems much worse on every metric
Yes, my DEV VM tended to fill up with VSCode backups as well. I finally expanded the disk so it's less of an issue today, but for a while ENOSPC was resolved by cleaning up ~/.vscode-server/cli/servers.
Can't wait until we get really well designed harnesses written in a compiled language that doesn't bloat my computer. Will probably have to be written by a company other than OpenAI because codex is like the exact opposite of everything I just listed
It's because they statically linked it, and probably rely on a trillion pointless crates (as is standard in Rust development). A good statically linked harness can easily be ~5MB MAX
I suspect a lot of people wouldn't use AI if they had to pay per token at current rates. Yes, it's technically a different discussion, but "just write your own harness" isn't really an answer for the vast majority of us riding on the investor-subsidized subscription plans.
You can’t just use your Claude sub on a third party harness without getting blocked even if you use the Agent SDK. Apparently, Anthropic gives “credits” depending on your sub and you can use those _credits_ when you use third party harnesses or Claude -p mode. That usage is not the same Claude sub one would assume it is… It is all quite deceiving. Don’t get a Claude sub unless you’re okay with being locked into Claude Code…
I don't use Claude, but it appears it is permitted to use Claude as a stdin/stdout -communicated tool using JSON, or use Claude SDK, with the monthly plans. Monthly Max/Team plans also include credits that could be used directly via the API: https://support.claude.com/en/articles/17154008-monthly-api-... .
E.g. OpenCode can be used with all three methods. Looks like it needs a plugin for the two Claude methods, though.
I did, and the weird things you have to do to make work at least decent. I’ve been doing evals and I got some things better than opencode but not as good as pi. Though my goal is to optimize for a browser and browser based llm so it can create stuff in a web container or at least generate ui by requesting json schema (a2ui style).
it's minimal and somewhat opinionated, not integrated well with memory subsystems (although that's kind of the point)
my only real criticism is that last I played with it it deals with slow provider responses very poorly , so lots of locally hosted llms require a lot of tuning to get it to handle streaming/non-streaming/timers well.
way less minimal (but still pretty minimal) I prefer Pi; but different markets I think.
hax fit my openbsd laptop well, espescially since Pi and related derivatives are kind of un-spokenly incompatible with the BSDs.
(author passing by) Could you please report the issues you've experienced on the repo? I did quite a bit of testing myself on local models (Qwen, Ornith, Gemma, Muse Glimmer) with llama.cpp, and they all worked fine. Details would be helpful.
Also one brief note for Codex users specifically. hax can work out-of-the-box as codex-cli drop-in replacement (since it can use the already authenticated codex token), so it's super easy to try it - basically it will be a zero-config experience.
Firstly thanks for writing it and making it available. The problem I had when I tried it is it would consistently blow out the small context window of my local qwen and although there was seemingly a config knob I could use to prevent that, seemingly that didn’t do anything.
Yeah, using it a bunch with local LLMs. It's fast (small system prompt), focused on the basics, made around simple choices, and possibility to call it in scripts.
So far I have very positive experiences, the results are generally better (and not just faster) than in other harnesses with the same models. I've done the same (user) prompts for tasks in a range of them, and compare the outcome to eval between them. Simple (harness) beats complicated one many times. I do wish it could use MCP though, but not as often as I think, and CLI tool usage often compensates on this front with little extra effort)
That is now my usuall go-to harness for things usually. Still figuring out the edges though (when we get off the happy path, like models reaching their max context, or such...)
It's very light, recommed you try it out, and see if it fits your toolbox.
That landing page is hard to look at, let alone read. Have LLMs really not yet learned to write webpages that read the sytem theme and look that way? Must be hard.
Just tried. And wow!! I opened my mac's activity monitor to see how much load it was putting on my system, and i had to scroll all the way down ... unlike those current harnesses that sit right on top (sorted by used cpu, descending).
And it worked. I'm switching to this unless i find a reason not to.
does it achieve token efficiency? vs something like maki? It's not at all clear what the method of that "efficiency" is.
my main issues with maki are that the line editor (what you use to enter your prompts) is very barebones, copy-paste is broken (no middle-click paste, or copy to PRIMARY; implicit copying to CLIPBOARD that can only be used with a mouse), and scrollback is not native. So it's not a real cli, but some sort of weblike tui.
I tried 3code; it does not mess with selection, but code printed in the conversation has | markers in every line, and is thus uncopyable in practice. Don't know how to use that.
All of the harnesses I've used are terrible at cleaning up after themselves. They leave all kind of clutter behind, to the point where on my dev VM, I now have an LLM run once a day to just look through the disk and delete everything that looks like it's leftover garbage.
I assume auto-updates are handled by deterministic code that's far away from anything agents can touch (self-modifying harnesses like Autolith notwithstanding). With the same behavior showing up in multiple high-profile harnesses (Codex, Claude Code), it feels likely there must be some actual reason for doing it this way.
Installed "clor.com" and it got into a loop of downloading its docker image from ghcr them throwing it away immediately because it was supposedly out of date (iirc). 65mbps continuous transfers for a week until I looked at my network traffic and saw 500gb of rx per day.
Did not know this. Was looking at htop yesterday scratching my head as to why there was over a GB in swap with ram <0.25 capacity. Had been teeing logs there pretty heavily
Running an LLM to delete files seems like overkill to me. Couldn't a cron job do the same thing? Or is the clutter just put into random places, which, if true, seems like bad software, which then leads me to consider the output of LLMs in general, which then leads me to wonder why are we doing this?
You keep your source tree on a separate file system with version control, one hopes.
So you only snapshot the rest. (And since your source tree is under version control, finding stray garbage there is straightforward unless you checked it in)
Went down the same hole, seeing all the massive logs, in plain text and as json, but ever eventually found the real culprit: snap caches of insane sizes.
Why wouldn’t you just rebuild the VM every day? Then you don’t have to run around trying to catch and delete things, it’s set up with exactly what you want.
It's funny how differently people use LLMs. I have agents that run for weeks, building something from a detailed plan with clear goals that gate progress. I don't like to constantly baby LLMs and tell them what to do. It would be inconvenient to rebuild the VM every day, then restore it and start everything again.
When did you create that workflow? I ask because I used to have something with a lot of carefully designed stuff like that back in Spring, but as the Summer progressed I found that getting out of the agent's way more and more has worked really well. I've been coding for 17 years, so this year has been a real journey as I've let go of some of the control of "this is how each step must be done". Those years of experience do mean that problems jump out pretty readily after the fact and and once you point out the problems to the agent it's pretty good at correcting them.
Today, I generally spend a few hours on a spec, let the agent run for 4 to 6 hours and I'm 90% there, with maybe a couple of days of tweaks, then a couple of days of iterations coming from user feedback after that. I've stopped using skills almost entirely now, mainly using them just to keep discovery of MCP or API docs out of context until needed. I have a few bullet points on testing and style in AGENTS.md, but I'm pretty sure it would probably run pretty close to what I'm looking for even without those these days.
> People moan about how badly made Claude code is but Codex seems much worse on every metric
Also, it feels that chatgpt.com and aistudio.google.com are the buggiest websites I have seen for long time. Why it is always something related to LLMs?
Because LLMs are changing so fast that nobody wants to spend time carefully engineering an efficient setup for them which might just get thrown away in 6 months when the modality changes again.
for some reason I had 11 separate codex and codex-code-mode-host binaries in my ~/.bun/install/cache/@openai . each weighing about ~300 MB. might be worth a look to anyone running low on disk space.
I just asked Claude where all my disk space went and it gave me a really useful breakdown; turns out i had some unused local models in random folders ~200gb worth.
Plus aforementioned harness bloat plus 100gb of unused npm stuff etc
The daemon has many bugs. For example, when auto-updating, it would randomly ruin the permissions and block the goal as .git became read-only. Generally, it is extremely annoying how many bugs Codex has. I basically can't trust it to execute on any goal since it would often get blocked every few hours due to random bugs.
My complaint applies specifically to the CLI. I have never used the gui app. Here are the various goal-breaking bugs I've run into:
- Goals get blocked due to .git and other stuff becoming randomly read-only when daemon auto-updates in the background (the linked issue in my comment above)
- Goals get blocked due to transient "Selected model is at capacity"
- Goals get blocked due to bwrap randomly failing with `bwrap: loopback: Failed RTM_NEWADDR: Operation not permitted`. I traced this one to `apparmor` on Ubuntu 24.04 interfering with bwrap and found a local workaround.
I’ve been using GPT models via hax[1], a bare bones harness with minimal tools on my system and have the models rely on bash for the most part the last few months. It’s been a breath of fresh air amidst all these overengineered harnesses.
If I need special actions, I just make them CLI tools on my Mac and tell the AI model that such a tool exists(via a single line in its system prompt) and that’s it. It’s been very nice.
You seem to care, so I wanna point out a semantic nit; "such a tool exists" could be interpreted as a harness provided tool, rather than a command line tool. (Edit, on a re-read its pretty obvious you mean cli tool, but keeping this statment here as im sure it'll open someone's eyes to the difference)
I've gotta give hax a go, as a pi user who came on-board due to the no frills direction pi takes. I say takes rather than took, because regardless of the (heated) discussion surrounding mcp and code mode support, I cannot fight the numbers- augmenting the harness provided tools is a notable boost to execution round trip performance.
I may need to take a second look at Pi again if it has any niceties like that notable boost in round trip performance compared to hax.
I mostly stuck around with Hax because of a few design choices. The sessions are merely plain text files indexed by a dirpath slug. This means I can just start a hax session in that directory and expect sessions history to be available in any model.. (I occasionally dabble in GLM for security checks, Gemini for writing stuff, Deepseek for tightly scoped tests etc).
I swapped to hax after the atuhor talked about it here on Hackernews, it really is very much a huge recommendation. Most importantly for me, it has been the only harness who respects the XDG specification and does not ask me to install by curling into sh. From my previous to harnesses, pi and maki, neither did both.
On top of that, it also feels very much like a normal CLI tool, which is a big plus for me.
It does not support plugins or MCP, which could both be a big negative for many people, but for now I was able to find a good terminal alternative for everything I needed.
Just a huge recommendation from my side as well, not affiliated in any way myself.
This is the same operational model as Claude Code.
ls ~/.local/share/claude/versions/
ps auxww | grep "claude bg"
I see a few prior versions of the Claude Code binary and several running background tasks, without any copy of Claude Code in the foreground. I regularly get a "Update available" message in my Claude Code UI too.
This kind of stuff often breaks for applications packaged with Nix, so it's often removed from Nix packages for compatibility reasons. Both behaviors you mention are helpfully patched out of the Claude Code package I use: https://github.com/numtide/llm-agents.nix/blob/dc285bfd94ec7...
As a result, I never knew that Claude Code does a nasty thing like this, either. :-\
Fwiw, packages in that repo get version bumped each day, so if that's a fast enough pace for you it may be a good alternative.
If running systemd, wrap that crap into a cgroup and force kill the whole process tree on exit. I've been doing it for years with badly behaving applications. On phone, from memory, may not be exactly what is needed:
Off-topic: I think the front-end quality of ChatGPT/Codex Desktop and Android app is simply dreadful—hard to imagine how such a large number of frequent failures made it into production. Do they not use human testing at all?
probably not much, they're all using workflows where the agents pull issues and automatically merge code when the tests pass. so lots of stuff slips through and the overall experience is kinda shite.
yeah and it's not even about reading code in particular. i keep a close eye on architecture, project structure, data structures & data flow, etc. and then i do manual testing to make sure things feel right. i cannot imagine developing anything users interact with without doing this.
I have recently hit the point where I am struggling in a vibe coding experiment with the state management and control flow sequencing. It's a very complex scenario (detecting game mode change for Final Fantasy 1 in a NES harness where the game loop and agent loop need to run independently, yet interleave). I'm insanely impressed with how far the open models have brought the project, I would never have on my own, life is too short. It remains unclear if I can work with the agents through this challenge. Probably time I took a deeper look at the code I suppose.
i'm working on a complex project and i got it to a really good state as well without really looking at the code. i'm now digging into some of it to rework the architecture so i can tackle some even more complex things. it's fine, i've read maybe 5% of all the code, most of it doesn't really matter since it's isolated in their own crate, it's the interaction boundaries that matter.
Codex is very badly structured. I was an early user with codex. But it mixes state and configuration data; which is why I can't really declaratively manage it in my nix-darwin environment; so abandoned it a while ago. This issue being raised, and the way that the codex development responds back to it makes me not trust their harness ever again. I only use codex in opencode; which seems to be doing OK. At least openai doesn't gate their product to their harness like anthropic.
Not trying to sing praises; i think opencode is doing a bunch of weird stuff too but it's not codex level.
Antigravity's agy is the same. I suspect ACP and GUI too. It has no env var or parameter to set its config dir. You can set home but that also set's agent's home. How big of a piece of crap it is is literally hard to fathom.
It doesn't even have a place to check your remaining time or limits except for an in app /quota command that the CLI does not expose.
Firefox does not only not prompt me for updates (it only updates if I manually run an update), even if I do update with Firefox running, it does not stop me from continuing to use Firefox without restarting it. All I did was install Firefox from flathub (packaged by Mozilla (a default configuration provided by Mozilla)).
I am running Firefox Developer Edition on macOS, where it is the default option. Have to set "Check for updates, but choose when to install" to get the similar behavior.
I've never seen that behaviour, it downloads updates in the background and then gives me a little notification that I should restart it to update, but it's dismiss-able.
Being able to turn auto-updates off is okay, but that being the default would certainly not be okay in Codex, giving the reach, what it can do and how immature it is.
Software Engineering clearly is solved, that's why Google has a tiny animated banner on the AI Studio sidebar (advertising subscription upgrade), which shows a simple animated border around it and utilizing exactly 100% of the GPU to render just that banner. And there is a browser extension removing that styling element (without banner GPU load is obviously under 0.1% as it should be) released way back in May. So the almighty AI didn't manage to fix a major UI blocker for a flagship AI product in half a year now. :)
When I had a Claude account (cancelled ~May time) I vividly remember the web chat having broken editing for backtick-quoted monospace text. If you typed <space>`foobar`<space> the last space would move the cursor backward into the closing quote, and the space would be emitted inside the monospaced region. It was like this for several months (on Firefox). I always found this baffling for a product marketed to programmers.
Yeah this seems like a decision yielded by a model. One of countless examples of the model’s outputs careening into individually defensible but holistically nonsensical results
A human seems less likely to embark upon a path that most humans know leads to something a human is unlikely to want
LLMs produce amazing things, but only one token at a time. Anything beyond that is retrospectively emergent at best
Products moving fast doesn't mean that they're moving in the direction I want, or that I want them to move underneath me while I'm in the middle of a project.
Auto-update systems have value but are not a suitable default for professional tools.
Ordinary package managers are totally capable of updating thousands of programs without manual effort, including automatically and in the background if that's a thing you want. But they do it without violating users' sovereignty over their own computers or turning every app into a special snowflake that gets to install software (namely itself) in its own bespoke way.
Serious tools shouldn't do this. Sure, you can offer an opt-in rapid release beta update option, but if you can't go more than a month without forcing me into a "stable" update that changes the UI and behavior I'm getting used to, then I'm not going to consider your software stable and reliable enough to be worth developing expertise in using.
I don't see how that excuses anything. It certainly doesn't give harness developers an excuse to be disrespectful to their users. It shouldn't give harness developers any reason to not even try to produce a stable release with a well-designed UI instead of a janky mess that gains new bugs every time you try to use it.
There are contexts where "move fast and break things" can make sense, but usually not when it's other people's workflows that you're breaking.
Just how old do you think a category of software product needs to be before it's reasonable for users to start expecting professionalism from the developers?
Only if OSes have some easy and sanenly robust way of limiting app access in such a granular way that these apps might be as well forced to start behaving.
Like a simple:
- Dropbox:
- Asked Permissions: File Access [{~/Dropbox, rw}]; App Install/Exec [/Applications/Dropbox.app]; Internet Access [*.dropbox.com]
- They can have additional system defined accessible path inside ~/.cache, ~/.config etc and accessible only via their app package names (if they change their signature - not notarised or shit, user gets a notification and approves it) -> this is the tricky part. I'd rather have an app get a ~/.local/appdata/<app/package name> sort of blanket access for anciliary things and do whatever the shit you want do there.
- optional permissions: []
and so on…
(also: the example given above is not fair game for nitpicking :D)
The thing is: the Internet access part one can control with Lulu or other similar apps. But anything else is a user nightmare - next to impossible even for a cli/tweaking/etc comfortable user. And mac's TCC is a royal mess - even their UI part for this is utterly confusing. I think only the Linux world can achieve something sane+easy like this (if it doesn't have that already; though they have not been known for being "easy").
I have achieved a lot of these for harnesses using sandbox-exec (by basically doing: "deny *; then selectively allow") on mac but it was a pain and I can't even think of trying something like that for "normal" apps.
It's not necessarily hostility. We considered different updating approaches with our legal IDE where security, stability, etc. are paramount, and having a buggy application out in the wild is user-hostile. Sure, in a dream world we'd say "don't ship until it's perfect", but that's just not realistic.
We considered the daemon thing, but ended up with a hard-update check on every boot. It's thus a user choice: if you don't like the automatic updating, you can just not run the application anymore.
And even with all that, it's hard to stay on the right side of AV algorithms, etc.
> It's thus a user choice: if you don't like the automatic updating, you can just not run the application anymore.
That's not a choice. It s just what most apps do these days, but it's the first time I've seen anyone stating this so directly, or trying to frame it as a choice.
(And behaviorally, this makes your product just a SaaS website with extra steps.)
I guess I mean it's a choice in the sense that it's a transparent part of the product that one chooses how and when to use (or not). That's opposed to something running in the background on its own schedule, with its own agenda whether the user is running the application or not.
[Edit: yes, that is kind of the idea. Native version has better features because it can access them.]
It's right about now that having a operating system distro model is great - you get folks who will package the software & test it out, make generally sensible defaults, and generally keep shenanigans like this from going on
I think the quality of Codex CLI (and Claude Code) is an honest reflection of the status quo of LLM-driven development. The future doesn’t look really promising.
I've used the CLIs for Codex, Gemini and Claude and they all give off the feeling of being on an very rickety, very fast runaway train.
You install an update. Oops, they added a sandbox that doesn't work inside a docker container, it's stopped working.
You install an update. Oops, you can't log in inside a docker container any more, it's stopped working.
You install an update. Oops, they started catching the copy+paste shortcut and replaced it with one that doesn't work.
You revert a broken update. Oops, the update changed the format of your login details, the old version can't read them, gotta log in again.
You install an update. Oops, can't scroll with the mouse wheel any more.
Not showstopping bugs (if you're used to persuading broken oauth logins to work) but it certainly makes updating an "ugh, what have they broken this time?" experience.
You got further than I did. I checked them out and went back to manual prompting. Just don't have a need for codegen that much, and when I do I'd prefer to be in control.
It does some neat things that, ultimately, are super obnoxious. Background animations and "sparkle" effects that make my terminal indicate activity at all times. Just subtly broken behavior.
It has pretty rapidly reached the point where I do not think any acceptable LLM-harness is widely available. Every single one I've tried has broken in bizarre ways on even minor updates.
I used codex the first time yesterday and quickly decided I need to sandbox it and came up with a pretty easy and straightforward solution (I think).
I use nixos and use a little wrapper that wraps Codex CLI in Docker. Run codex-box /path/to/project and it starts or reuses a container with only that project bind-mounted, keeping login and history in a separate volume. It uses tmux for detaching and reattaching
I was delaying it but one day Codex+GLM went ahead and did things in my ~/.dotfiles folder which I had granted only READ access for. I asked and I was given a reason which I didn't understand and didn't really want to. Right then I used sandbox-exec/safehouse (macOS) and tightened every harness installed (and the one not even installed, lest I install it later and forget to add/track them in the sb zsh init script).
But I am not satisfied. I am trying to find a really lightweight container/VM for macOS that eats very less RAM on its own and expands as needed. Because I really don't want to run an agent outside a container on my mac.
Very much this... The utility of Claude has grown exponentially with the amount of work I've put into memory/context management, tooling, skills development and CLAUDE.md (and friends). I freely admit I may just be fortunate, but I've yet to hit a bug in a new release that rose above the level of minor annoyance.
The thing that really validated this point was when I recently tried Codex again. Out of the box it was OK, but not great. I swung over the memory apparatus and had it import directives from my existing Claude install and it was almost immediately quite useful in its own right and, especially, as a counterpoint to Claude when dealing with some fairly complex operational issues.
Pi went searching across my entire home directory unprompted... Idk to do that without some kind of sandboxing builtin is rough and chews through tokens on things I don't really want polluting my context.
A coworker of mine has a pretty neat script that uses bubblewrap to wrap any application. I'm using that one too for pi and it's pretty great since you don't have to trust the harness and can quite easily customize the sandbox to your needs, e.g. disallow reading to certain directories etc.
To be fair we've gone from barely capable at writing code to what we have today in barely 3 years. I wouldn't put money on the counter bet that they won't get beyond this hump.
I know this is an unpopular opinion, but it's actually good.
- pasting lots of content became [35 lines] and they added a tiny notification to show it as-is if you paste again
- interactive questions layout
- paste images
- the recap
- auto-updating session titles
And so many more. I tried codex and it was lacking in many UX aspects. Remember we got from a text-paragraph-only terminal to this at breakneck speed.
Half of what you're listing as features people should be impressed are stuff that causes as much frustration as it solves. The image pasting behavior is a super-annoying footgun, because sometimes I just want to tell the LLM the path to the image file without it trying to burn a ton of tokens on computer vision—and dragging and dropping a file into the terminal pastes the path in any normal context. The auto-updating session titles, recap, and notifications are token-burning distractions that are glitchy; I had to disable them when I found that having the agent launch an app would mean I'd get a random beep about a minute later when the agent had been waiting for further input in the background.
And they can't seem to go two whole months without scrolling breaking in some new way.
this 1000x. a lot of details in context compaction, editing, reverting ux, etc are all really centered on keeping the load and cost of subscription users as small as possible. its no always that nor is it necessarily correct, but its a huge driver of how those subscriptions and first party apps are designed
agreed. the thing i reach for most is its ability to coordinate my agent graph, e.g. seeing what sub-agents are doing, messaging agents, adding new capacity. claude code really is a delight to use here
Claude Code is better than Codex UX. But as per the sibling response it's more a developer tool made by developers for developers. It does have a lot of niceties. Codex/openai on the other hand is more clearly trying to reach mass-market and it's a UX shit show because of it. Consumer UX is its own thing. So the original point is that raw ability of the tool doesn't magically solve ergonomics.
Won't disagree with you because I haven't used codex/OAI a lot - but Claude's non CLI UX is great too.
Eg - I asked for a recipe and it says leave x for y time - there's actually deeplinks that link to your clock timer with the time preset! And to change quantities, there's input boxes in the response that update all quantities accordingly.
It is hands down the most user hostile UX I put up with. The fact that I put up with it speaks volumes about the value proposition that the underlying models bring to the table.
I’m in the process of dumping codex for more open harnesses that don’t add problematic new features every week. Because Anthropic insists that I have to use their harness with the subscription, eventually I’m either going to wrap `claude -p` to get away from the crappy TUI or else I’ll just unsubscribe and use other models. Their bad UX has alienated me as a paying customer.
I'm not who you're asking but for me I am right now going through the insanity of providing plugin/mcp/tool access across environments. This is in codex which as I mentioned is intentionally trying to provide mass-market ergonomics. But with that comes incomprehensible configuration that's also a moving target. chat/work/codex/remote/cloud are all different things. And each client exposes different abilities and hides others. And looks like only the web-ui is the most up to date because other targets need releases. As a developer I understand why it's in its current state, but that in no way excuses it as acceptable ux.
Like of course codex is the most powerful and "just" run `npx blah blah` but no, I'm not running randomly piped code on my personal computer and even if I didn't care about privacy it means I can only run this locally with my laptop on. "leave your laptop on and access from your phone" is not a good idea. It only adds to the surface area of confusion. Ux no good.
Try using the "rewind" feature to go back to a previous message.
Went too far? Oops, it's not accessible from the Claude Code UI anymore! You can get the agent to dredge up the info from the session logs, but you'd better hope they put the pieces together correctly.
Also, you can't rewind to a steering message. Want to make sure you can rewind to it? Wait for the agent to settle, or stop them, enter your message, and hope you don't throw them off their current train of thought.
To see a proper rewind UI, see how Pi does it: Every message is available, forked conversation history is preserved.
It has its own issues, but is miles ahead of Claude Code in this regard.
> The capital costs have also ballooned to the point where the rate has to level out
That's a pretty bold use of "has to". None of the financing behind AI seems sane, yet it continues to defy rational expectations. Reminds me of the comment "the market can remain irrational longer than you can stay solvent". It's not the exact meaning but has the same feeling. The circular financing going on does not help anything either
I wouldn’t assume that progress is linear. Maybe I’m wrong and it will be! But I’m reminded of early developments with self driving cars, it felt like manual driving would be a thing of the past within a decade. But progress has been much slower than that.
> But I’m reminded of early developments with self driving cars, it felt like manual driving would be a thing of the past within a decade. But progress has been much slower than that.
I think that's exactly the standpoint of Yann LeCun.
I dont think the quality has gotten that much better. Take claude 4.5, the probability of getting usable outputs was less likely than with opus 5.5, and the usuable outputs weren't great.
I think newer models are more likely to produce the usuable output, almost always, but its still not great. The frequency in which you get usable results leads one to believe that quality is improving.. No usability is improving but the result is still meh.
Also put an llm in an environment without an lsp or compiler to check against and let me know how capable you think they are on their own. The "loop" is doing a lot of heavy lifting here.
The current approach of the big companies is to keep increasing the number of parameters (there was a report that recent Claude models are on the 4T parameter scale). Even recent SOTA open weight models are in the 1T-2T range.
This is partly due to the multiplicative scaling factor -- the number of tokens; the number of transformer layers; the number of features; etc.
I suspect that for models to have a step upgrade either/both of 1) a new/improved architecture model; and 2) better training of smaller parameter models are needed. I say the latter as I think that with the larger weights there is a lot of unused/redundant parameters.
Seems like its just a bunch of young engineers making bad architecture decisions. Not sure I would blame the culture of vibe coding everything. It might just be bad taste.
in the last 2 weeks or so:
- scrolling stopped working
- subagents no longer work (main agent doesn't get notified when they finish)
- subagents don't work (a subagent can't make its own agent even if instructed to do so)
I believe it's all related. They keep adding new, badly thought out features because it's much easier than improving existing features built on low quality code.
The latter requires modifying existing, badly architectured and tightly coupled code that will almost definitely break something somewhere else if touched, so what do you do? Just keep adding new code on top and hope for the best.
This is not a new phenomenon by any means, but AI amplifies it by 100x.
There is actually even worse code quality written by humans, is that small sample also a reflection of human-driven development? And therefore, the future doesn't look promising that way either?
The difference is the source of the sample. This is a flagship product by a frontier lab. It should be reflective of the best that is possible. It should be biased in the most favorable possible way. It was designed by people without the normal limitations and quotas of outsiders in building it, as well as in learning experiences in driving it. This is not a random cherry-pick of bad code.
Again, the same parallel can be drawn by frontier tech companies. Case in point: Even before AI (and even till date), iOS has always been buggy, crappy. Apple was a trillion dollar company when they had some of the worst bugs in iOS launched to public.
The same story for Google's products - their products were always buggy even before AI. And so is the case for Microsoft.
I think the reasonable argument is that AI or not, software problems are hard problems to solve. And software is constantly evolving. AI isn't a magic wand. It also depends a lot on the humans using it, including prompting and context supplied to it.
Drawing a massive conclusion from a tiny, unrepresentative sample is just hasty generalization.
Solar power has become a real transformative technology and instead of trying to recreate a better world we tariffed them and the execs of this country spent all our coins on power hungry data-centers that write mid code.
I think the (lack of) quality of these tools shows that software engineering is maturing as an engineering discipline.
We were overbuilding trivial parts of the software like the Romans overbuilt small bridges.
Modern engineering is about making the thing that barely works. If you disagree, learn a little bit about bit narrow the tolerances of modern cars and bridges are.
I think there's a difference between something that's engineered and precise vs something that's rickety. Just because you built something that might fall apart at any moment doesn't mean it's been engineered with narrow tolerances.
A 100 percent of modern bridges are rickety. There has been dozens of high profile incidents because of this.
> Just because you built something that might fall apart at any moment doesn't mean it's been engineered with narrow tolerances.
Here the software they are building falls apart in ..say.. two days of use, but can be updated in 5 seconds at close to zero marginal cost. The software is useful enough that people keep updating and using it. This iteration gives them a competitive advantage over the safer choice of rigorously testing every new thing for several weeks.
I don't disagree but it's clearly a problem that already existed for decades in software and is just being 10x'ed. how many different frontend frameworks or AWS regurgitated and enshittified cloud services did we have to endure over the years.
> learn a little bit about bit narrow the tolerances of modern cars and bridges are
Buildings typically use a safety factor of 1.5 to 2.0, and cars typically use a safety factor of 2.0 to 3.0. These things are being built twice as strong as they need to be. I wouldn't call that narrow.
And with software, we're at a point where it can't even properly do what it needs to. If we were overbuilding it, damn software wouldn't crash so much.
I think all engineering has safety factors of 2 or more. Maybe with the exception of aerospace (mostly space) where materials might be at the limits of what's possible right now so the safety factors are much reduced.
> I think all engineering has safety factors of 2 or more.
Not even close.
For example, a BMW X5 weighs about 2200 Kgs without passengers, and it's GVWR is 2800 Kgs.
If you have five people and heavy bags, you can comfortably exceed the GVWR. You can absolutely break control arms and suspension components in that scenario if you go over a speed bump or hit a pothole (which are real things that exist in the real world, like people doing something unintended and crashing software).
If this needed a 2x safety factor, there would have been no way to build this car.
Even the toughest cars like land cruisers are limited in this way.
i'm personally quite perplexed how sloppy the harnesses are from the leading AI labs, you'd think these are their primary products and would have some human attention devoted to them
it's embarrassing when every claude code release has obvious bugs in it like telling you to upgrade when you're on the latest version or codex opening visible powershell windows for every command that pop up on your screen
like 5 minutes of human testing would catch this obvious shit but obviously they don't bother because vibes are the future and stuff? idk
The restraint, rigour and responsibility you showed prior to LLMs relates directly to how much of that you apply now that they’re here.
Given how rare it was previously, and how little it was cultivated by shortsighted management, I’m not surprised with all the slop we see today.
The truth is there’s nothing stopping someone from using these tools to remove dead code, simplify project structure, remove dependencies, etc. but I don’t see it happening very often. I have done it a bunch myself though so it’s absolutely possible, it’s all a matter of investment and prioritization.
So is OpenCode. More so. I use Claude Code and OpenCode almost equally and Codex slightly less and Pi the least of them (not that it's worse, but because I use it for "non coding" purposes). They are all bad. Even this newer breed of "agent orchrestrating" tools.
One goes to Github and one notices, the dev is done by LLMs, issue triage is done by bots, and the commenting is done by the bots. (btw, the triage mostly means closing them or playing the "this is dupe of that" game while noone gives a flying fuck about any of the issues). Another good one is "not planned". You report a breaking/critical change and "not planned". What demorlised me is attitude of OpenCode devs/maintainers. I think the Open in it more of the "Open" in OpenAI than in FOSS. That's when I started reducing my dependency on this harness whihc was slowly becoming my pretty much full time harness.
OpenCode is barely usable with local LLMs. Plan mode to build mode switch and lose all your prefix. Compaction throws away your prefix (just fixed in v2... I guess v1 gets to stuff it). Pi throws away your prefix during compaction too. I think all these tools' devs and users use it with hosted models. Pi doesn't come with basic permission capabilities--YOLO, write your own or hope the extension you find in the Pi extension store isn't an absolute dumpster fire.
Claude Code turned on the remote-control server by default with an update (no explanation or notification). BUT Claude Code didn't break the expectation that the hooks and the commands you run inherit your environment. So it was hard to notice.
Whereas when Codex App server became enabled by default, and as per OpenAI, it was never contractual that hooks run in the client's environment. Sure, let's break long-standing expectations of where code runs when you run a CLI--it was never contractual, you see. Now you have to figure out how to turn this crap off, just to UNBREAK your workflow!
This is why it's apples and oranges here, with Claude Code and Codex.
> hope the extension you find in the Pi extension store isn't an absolute dumpster fire
That's why I didn't mind it when Pi added native MCP capabilities. What dismayed me was they didn't other tools like subagents, and other stuff. I mean why do I have to scour the Interwebs to find something that doesn't possibly screw everything up for me.
I have a feeling harness usage will finally move to lots of harnesses with usage clusters - as in not X million harness for X million devs/users but a lot and people will use what suits them, and if not a more inclined coder will fork/make one just for them. In all their faults LLMs have made this a possibility.
You can just copy the executable then run it with --no-daemon, or edit the config equivalently. No autoupdates and no background process.
The recent terminal UI changes were more fastidious, but even those are easily disabled with CODEX_TUI_DISABLE_KEYBOARD_ENHANCEMENT=1 and the /tui command.
Is anyone using the vscode extension of Codex? Its insane how brittle it is.
Just a couple of days ago, it was completely broken for about a week before it got somewhat fixed again. When I say fixed, I mean basic functionality is working again but bugs and regressions are still left. There are multiple issues tracking the same problems. The community have even started to patch the extension themselves as a workaround until its adressed.
You know whats even crazier? There are like a new release every other day with lots of commits and changes, yet it still in a bad shape. I have turned off autoupdate for Codex extension for this reason. The only extension I’ve had to.
I mean, it doesn’t take that much work to have some tests in the pipeline to make sure the extension continue to work, it almost feels like they are purposely doing this.
I have now experienced the consequences of ”move fast and break things”. I realize how much software quality means to me. Its not fun being on the receiving end, especially when it affects my daily workflow.
If any of you, see anyone hype up LLMs again, please refer them to the state of Codex vscode extension.
My 2-cents: never install those things into your host. A locked down Docker container is the bare minimum. Pin your versions and never update them without checking the changelog.
Well, OpenAI at least is fine with you using whatever harness you like. Having a crappy first-party one is bad, but an escape hatch puts a floor on it.
I discovered this while benchmarking the tool I'm developing. I realized Codex was surprisingly fast after the initial run. Some other harnesses do similar things, so I decided to use bwrap around these tools for accurate benchmarking.
Cool thing is that I can just ask the llm to modify the harness to what I need.
I discovered this daemon thing about two weeks ago and had codex modify it's own custom launcher that I have to bypass the daemon thing. If as a recreational code farmer can do it then most "pros" should be able to handle this and other inconveniences. Cc has been pushing that no scrolling feature that codex recently introduced for a half a year now but again I had them put a stop to that. Software has never been this easy to configure.
I feel like so many of the new AI tooling is reinventing the wheel. We've figured out how to update software via package managers. Do we need a daemon to continually check for updates and do we need shell scripts to circumvent package managers?
Have a look at https://chatgpt.com/codex/install.sh. It's managing the installation by itself not using existing package managers. There's a good point to making it easy to install, but it leads to managing an installation when you shouldn't need to. Time would be better spent elsewhere and better solutions exist.
Refusal to adhere to the XDG specification is a big signal that the app is going to be a general bull in a china shop. It's not that hard to do OS- and distribution-appropriate package management.
A well-behaved application should not only use XDG on Linux, but it should use platform-native conventions on macOS as well: "~/Library/Application Support", etc.
Yes, and the Windows app-data equivalent. The point is that you have to be a good citizen of the platform on which you're running. curl | bash is kind of a selfish model.
I use it at work. On Windows it also launches a new console window every it executes (?) a command. You should definitely disabled this using --no-daemon.
I don't know how and why they ruined this CLI with needless "features". It was perfectly usable two weeks ago.
A bit off-topic, but on the rare occasions I help some acquaintance with Windows I always feel a bit upset that random split second console windows still pop up when installing everyday software, even that from Microsoft.
I remember them from way back on Windows 98 and no one seems to care to hide them (?).
not to mention the daemon mode breaks a bunch of assumptions one might have about about codex CLI e.g. that codex CLI inherits the env vars of the shell that invokes it.
—no-daemon is the way, but still feels like the noose is tightening …
Reminder that OpenAI allows you to use the Pi Coding Agent, which is a lot more lightweight, and in my experience much better than any of the proprietary harnesses.
I've been using Pi nearly every day for 4-5 months now, and even though it is still very much in development with new updates arriving nearly every week, it has to my mind never regressed. I've never lamented that a Pi update ever broke anything I depend on or made anything worse.
I immediately adopted the new tuiMode "fullscreen" feature the moment it landed, and it's been exceptional. I love the way it now manages the viewport -- this was also right about the time I migrated to Ghostty so that also made a big difference. Showing inline images with the Kitty graphics protocol has been a huge improvement too, I love it when a model calls `read` on an image file and I get to see the results in my terminal. The OSC-8 hyperlink support is super cool too. I love the way it auto hides/shows the scrollbar now too, and recently they've even made it so concurrent tool calls show different "themes" when pending/running vs success vs error.
100 years ago, if you had told people that everyone in the future would be summoning 'persistent daemons' inside black boxes using something called a 'Codex CLI', they'd have thought we went crazy and that the future is a horrifying place.
It's off topic, but this weekend I caught both Codex and Claude accidentally read some credentials in config files and not flag them. When confronted, they both went "oh yeah, that, I should have mentioned that".
Except in the past they both would automatically stop and fire an alarm almost. So something clearly changed and I think they just want us not to notice, to avoid damaging the trust in their tools.
I seriously feel at loss with this current AI situation: can't live without them anymore, hate their product still and feel taken advantage of. Local LLM still to expensive and hard to see any light in the tunnel.
Yeah, and for the contrary I spotted Claude app being ugly. When I turned off Claude, then put my computer to sleep and later woke it up, it made my fans spin loudly, and after I checked, there were like 2 dozen Claude processes and a lot of Python. What was it doing - I have no idea, but it was crazy. I'm setting up a VM with nothing but Claude and necessary tools. I feel Claude is not honest with everything it is doing.
Can you share some more detail of how you would implement this? Are you thinking something like VirtualBox (?), running a virtual machine, and you're using - for example, OpenCode terminal in the VM...?
Today I used Claude Desktop after not having used it for a while. It ran bash commands on my machine, like starting brew services etc. It did not have that capability before (I used to hook up some mcp to allow selective file editing), and nobody warned me that it currently has. Shady tactics, very invasive, freaked me out.
A brief story of these agentic harnesses, from the perspective of a dev that barely used them.
I remember when opencode was out, I installed it as a separate user and tried it and it was cool.
Then Copy.fail came out, and I worried that a separate user really wasn't enough, but I felt I was overworrying at this point.
Then it worked fine and I felt silly for going through the trouble of a separate user even.
Then the opencode guys started self developing the tool itself and it became slop, this was like 2 months into the fad, and it was clear the quality merited uninstalling the thing, even if it did some cool magic ( https://github.com/anomalyco/opencode/issues?q=is%3Aissue+au... )
Then Codex came out, and uninstalling opencode became the optimal move, if only because it removes a third party. It's one of those things where people will continue to use it out of inertia (either legacy code, or people reading/watching old tutorials), like using Axios in 2026 after Fetch was made standard, or using Mono after Microsoft released multiplatform dotnet.
Everything was good for some time, but then it quickly became obvious that OpenAI wasn't developing this tool, but rather letting it build itself, which results in a lot of slop (High RAM usage, inefficient looping that only works out of sheer GPU power and tight token limits, resulting in Skinner-box based development)
Then I uninstalled Codex, but this Pi thing came out, from the authorship of the dude from Flask, but I'm tapping out here, then Jev came out and I'm just not playing this game, good luck to everyone who is using these things.
It feels like this is an attrition game where we are waiting for the bubble to pop, but the bubble is made very long to tempt people into taking the bait. I'm betting the house on the day of reckoning, and hope that those that didn't take the AI bait, (or took the AI pill and repented) will be one of the few players left with a reputation.
I remember going in interviews and people asking me if I could use these tools, they wanted to see what projects I made, but I wasn't comfortable even showing a Chess Engine thing, like I didn't make this, this is not what I'm going to be delivering professionally, I'd rather be unemployed for a couple of months or years if that's what it takes, I'm not vibecoding for a salary sorry.
There aren't any documented settings to disable this, but there is a feature flag it currently sits behind. You can flip it in your ~/.codex/config.toml[1]:
There are also some files that it writes to in ~/.codex at startup: pid files, lock files, things like that. You can delete them and replace them with symlinks to /dev/null, then mark those unwritable with `chattr +i` or similar. Presumably then the background daemon will crash on startup, if the feature flag ever goes away.
--
1: https://github.com/openai/codex/blob/0c329ad2c9d5a2592128a1d...
Yes this should be turned off by default. The daemon is useful when building apps on top of the daemon server, e.g. pi or pi-durable custom harnesses.
What makes ACP deficient for headless uses of LLM agents? Maybe fixing that or standardizing on another protocol designed for pluggable LLM agents (I guess ACP is more oriented towards pair programming in an IDE, at least originally) is a better idea imo.
Yep, the real issue is that it was something they didn’t have before, and then with Codex 0.157.0 enabled, they installed this persistent nonsense [1] that survives after the last instance of Codex has exited on your machine, which is just gross.
[1] - https://github.com/openai/codex/issues/48195
For whatever reason, the daemon has been refusing to start and Codex has been grumbling to me. I was wondering where the daemon had come from, and thought maybe I missed something previously and that it had just broken.
Hope they don't remove this flag
And then it changes a month later. Then new (bad) defaults. And again and again. Good luck with that.
It also fills up my HD with old versions. I investigated and it took up something like 12 gigabytes in total on my system; which seems insane to me, it’s just a harness?
People moan about how badly made Claude code is but Codex seems much worse on every metric
Remember: VSCode runs a complete headless Eclipse instance as its Java LSP, so I don't expect quality code from any of the big companies anymore.
Are you referring to something built into VS Code, or an extension? It looks you're talking about https://github.com/redhat-developer/vscode-java, which is RedHat's doing.
Yes, my DEV VM tended to fill up with VSCode backups as well. I finally expanded the disk so it's less of an issue today, but for a while ENOSPC was resolved by cleaning up ~/.vscode-server/cli/servers.
Even if you installed codex with brew?
Not sure I installed it via some random install.sh which they promoted
Can't wait until we get really well designed harnesses written in a compiled language that doesn't bloat my computer. Will probably have to be written by a company other than OpenAI because codex is like the exact opposite of everything I just listed
Codex is written in rust, fyi... Not that I disagree.
Oh, I haven't been keeping up. I assumed it was still TS since it prompts me to run npm all the time.
They just use npm as a binary delivery mechanism, for whatever reason (I guess they expect all their users to have npm?)
It's pretty darn ubiquitous, yeah. Plus enterprises tend to run npm mirrors, so delivery integrates into existing IT compliance frameworks.
Which generates unnecessarily huge binaries.
It's because they statically linked it, and probably rely on a trillion pointless crates (as is standard in Rust development). A good statically linked harness can easily be ~5MB MAX
5MB is still huge.
Just write your own harness. Ironically Codex/Claude are both abysmal.
How do you even write a harness that can use a Claude subscription? I thought it was not allowed by Anthropic's ToS and can get you banned?
That’s a different discussion.
I suspect a lot of people wouldn't use AI if they had to pay per token at current rates. Yes, it's technically a different discussion, but "just write your own harness" isn't really an answer for the vast majority of us riding on the investor-subsidized subscription plans.
It's allowed, but you get bumped to per token pricing.
That defeats the purpose of using the Claude subscription.
Not true; They rolled back some of the changes you're thinking about IIRC.
If you're using the sub, only OpenAI (via the OAuth token) is viable. Claude is API_KEY only
It's trivial to bypass this by tweaking the system prompt in other harnesses. They use string matching and a blacklist.
https://x.com/FlorianKluge/status/2041855675295318039
(Whether that's against the ToS is not clear.)
Amp recently achieved it. Apparently it's permitted as long as you use the Claude Agent SDK. https://ampcode.com/news/use-your-claude-plan
This is bait and switch..
You can’t just use your Claude sub on a third party harness without getting blocked even if you use the Agent SDK. Apparently, Anthropic gives “credits” depending on your sub and you can use those _credits_ when you use third party harnesses or Claude -p mode. That usage is not the same Claude sub one would assume it is… It is all quite deceiving. Don’t get a Claude sub unless you’re okay with being locked into Claude Code…
I don't use Claude, but it appears it is permitted to use Claude as a stdin/stdout -communicated tool using JSON, or use Claude SDK, with the monthly plans. Monthly Max/Team plans also include credits that could be used directly via the API: https://support.claude.com/en/articles/17154008-monthly-api-... .
E.g. OpenCode can be used with all three methods. Looks like it needs a plugin for the two Claude methods, though.
I did, and the weird things you have to do to make work at least decent. I’ve been doing evals and I got some things better than opencode but not as good as pi. Though my goal is to optimize for a browser and browser based llm so it can create stuff in a web container or at least generate ui by requesting json schema (a2ui style).
Omp
Found this one: https://usehax.dev/
Anyone experiences with it?
it's okay.
it's minimal and somewhat opinionated, not integrated well with memory subsystems (although that's kind of the point)
my only real criticism is that last I played with it it deals with slow provider responses very poorly , so lots of locally hosted llms require a lot of tuning to get it to handle streaming/non-streaming/timers well.
way less minimal (but still pretty minimal) I prefer Pi; but different markets I think.
hax fit my openbsd laptop well, espescially since Pi and related derivatives are kind of un-spokenly incompatible with the BSDs.
(author passing by) Could you please report the issues you've experienced on the repo? I did quite a bit of testing myself on local models (Qwen, Ornith, Gemma, Muse Glimmer) with llama.cpp, and they all worked fine. Details would be helpful.
Also one brief note for Codex users specifically. hax can work out-of-the-box as codex-cli drop-in replacement (since it can use the already authenticated codex token), so it's super easy to try it - basically it will be a zero-config experience.
Thanks for making it :)
Firstly thanks for writing it and making it available. The problem I had when I tried it is it would consistently blow out the small context window of my local qwen and although there was seemingly a config knob I could use to prevent that, seemingly that didn’t do anything.
Yeah, using it a bunch with local LLMs. It's fast (small system prompt), focused on the basics, made around simple choices, and possibility to call it in scripts.
So far I have very positive experiences, the results are generally better (and not just faster) than in other harnesses with the same models. I've done the same (user) prompts for tasks in a range of them, and compare the outcome to eval between them. Simple (harness) beats complicated one many times. I do wish it could use MCP though, but not as often as I think, and CLI tool usage often compensates on this front with little extra effort)
That is now my usuall go-to harness for things usually. Still figuring out the edges though (when we get off the happy path, like models reaching their max context, or such...)
It's very light, recommed you try it out, and see if it fits your toolbox.
That landing page is hard to look at, let alone read. Have LLMs really not yet learned to write webpages that read the sytem theme and look that way? Must be hard.
Just tried. And wow!! I opened my mac's activity monitor to see how much load it was putting on my system, and i had to scroll all the way down ... unlike those current harnesses that sit right on top (sorted by used cpu, descending).
And it worked. I'm switching to this unless i find a reason not to.
They're not made of fairy dust; you can build your own.
There's https://3code.capocasa.dev/ which is written in Nim and focuses on token efficiency.
does it achieve token efficiency? vs something like maki? It's not at all clear what the method of that "efficiency" is.
my main issues with maki are that the line editor (what you use to enter your prompts) is very barebones, copy-paste is broken (no middle-click paste, or copy to PRIMARY; implicit copying to CLIPBOARD that can only be used with a mouse), and scrollback is not native. So it's not a real cli, but some sort of weblike tui.
I tried 3code; it does not mess with selection, but code printed in the conversation has | markers in every line, and is thus uncopyable in practice. Don't know how to use that.
Thanks for that. Looks like exactly the agent I might have been looking for.
All of the harnesses I've used are terrible at cleaning up after themselves. They leave all kind of clutter behind, to the point where on my dev VM, I now have an LLM run once a day to just look through the disk and delete everything that looks like it's leftover garbage.
It's like fighting fire by employing an arsonist.
I just erased 20GB of Cursor’s cruft.
Harness problem, or model problem?
Let's be real, what do you think wrote the harness?
Is that cruft or past conversation history / subagent history and observability logs?
Just garbage. Temp files, worktrees that weren't removed after subagents finished, build files... all kinds of things.
But that's agent behavior, and not harness responsibility...?
Harnesses should be responsible IMO for managing lifecycle stuff, including worktrees and temp files.
It’s simple, deterministic stuff. At least most of the time.
Hence my question.
I assume auto-updates are handled by deterministic code that's far away from anything agents can touch (self-modifying harnesses like Autolith notwithstanding). With the same behavior showing up in multiple high-profile harnesses (Codex, Claude Code), it feels likely there must be some actual reason for doing it this way.
> I now have an LLM run once a day to just look through the disk and delete everything that looks like it's leftover garbage
...are you sure it wouldn't consider your personal files garbage?
"In my dev VM". Everything of value in there is in a git repo.
Installed "clor.com" and it got into a loop of downloading its docker image from ghcr them throwing it away immediately because it was supposedly out of date (iirc). 65mbps continuous transfers for a week until I looked at my network traffic and saw 500gb of rx per day.
Sisyphus' updater
Over eager use of /tmp is the worst. That’s RAM, my boy! Precious gold.
I don't think that's always true.
Although I just looked into it, and even Ubuntu 26.04 appear to default to tmpfs for /tmp storage, so I guess it's fairly universal now.
Not sure if I agree with that idea in principle... What's wrong with just wiping it intermittently??
It’s RAM unless you have swap enabled.
Did not know this. Was looking at htop yesterday scratching my head as to why there was over a GB in swap with ram <0.25 capacity. Had been teeing logs there pretty heavily
Running an LLM to delete files seems like overkill to me. Couldn't a cron job do the same thing? Or is the clutter just put into random places, which, if true, seems like bad software, which then leads me to consider the output of LLMs in general, which then leads me to wonder why are we doing this?
But, I'm just wondering.
Oh it makes all sorts of temporary files and directories, sometimes in the right places as per UNIX filesystem conventions, but often not.
You could use snapshots or whatnot to reset the state whenever you like. Using an LLM to clean up files often seems like overkill to me.
Wouldn't a snapshot delete everything else you saved?
You keep your source tree on a separate file system with version control, one hopes.
So you only snapshot the rest. (And since your source tree is under version control, finding stray garbage there is straightforward unless you checked it in)
Just have an emphemal VM which you nume daily.
Its the only way I trust to install anything from these companies.
Went down the same hole, seeing all the massive logs, in plain text and as json, but ever eventually found the real culprit: snap caches of insane sizes.
Why wouldn’t you just rebuild the VM every day? Then you don’t have to run around trying to catch and delete things, it’s set up with exactly what you want.
It's funny how differently people use LLMs. I have agents that run for weeks, building something from a detailed plan with clear goals that gate progress. I don't like to constantly baby LLMs and tell them what to do. It would be inconvenient to rebuild the VM every day, then restore it and start everything again.
When did you create that workflow? I ask because I used to have something with a lot of carefully designed stuff like that back in Spring, but as the Summer progressed I found that getting out of the agent's way more and more has worked really well. I've been coding for 17 years, so this year has been a real journey as I've let go of some of the control of "this is how each step must be done". Those years of experience do mean that problems jump out pretty readily after the fact and and once you point out the problems to the agent it's pretty good at correcting them.
Today, I generally spend a few hours on a spec, let the agent run for 4 to 6 hours and I'm 90% there, with maybe a couple of days of tweaks, then a couple of days of iterations coming from user feedback after that. I've stopped using skills almost entirely now, mainly using them just to keep discovery of MCP or API docs out of context until needed. I have a few bullet points on testing and style in AGENTS.md, but I'm pretty sure it would probably run pretty close to what I'm looking for even without those these days.
It’s extremely ironic that the software that’s meant to end software is itself pretty terrible software.
Yep, .codex/packages/standalone/releases keeps all the old versions. Also each codex bin is somehow ~300MB.
thanks, I just removed all the old stuff.
> People moan about how badly made Claude code is but Codex seems much worse on every metric
Also, it feels that chatgpt.com and aistudio.google.com are the buggiest websites I have seen for long time. Why it is always something related to LLMs?
Because they're the most likely to be 100% vibe coded. And as much as some people still deny it, AI code = buggy code.
All the LLM turds we've curled out at work are the same.
It’s actually insane how buggy the Gemini web version is (or at least was a few months ago, since I stopped using it).
It's improved. The scrolling used to be terribly glitchy and would make it difficult to read as text was generated.
But in the same fix, they also removed the reasoning-sample, which kinda sucked.
ChatGPT.com is dreadful. The whole thing chokes when the conversation gets moderately long. It's amazing that it's been allowed to stay this way.
I suspect it’s intentional.
Chat sessions are not metered by token usage but rather a fairly high limit of messages per day or something.
The longer chats you have, the more context and token input. So I think that discourages longer chats, and encourages users to start new chats.
Because LLMs are changing so fast that nobody wants to spend time carefully engineering an efficient setup for them which might just get thrown away in 6 months when the modality changes again.
But are we not told that LLMs are so powerful that nobody would need to spend time to engineer that?
I haven't worked with the update subsystem before but that seems like an oversight to me. I'm gonna fix it.
for some reason I had 11 separate codex and codex-code-mode-host binaries in my ~/.bun/install/cache/@openai . each weighing about ~300 MB. might be worth a look to anyone running low on disk space.
My preferred Nix package for this patches at least that behavior out, afaict: https://github.com/numtide/llm-agents.nix/blob/dc285bfd94ec7...
https://github.com/numtide/llm-agents.nix/
what's the lazy way to check? can you share where/how you cleaned up?
I just asked Claude where all my disk space went and it gave me a really useful breakdown; turns out i had some unused local models in random folders ~200gb worth. Plus aforementioned harness bloat plus 100gb of unused npm stuff etc
Don't get me started on my custom NES harness, it generates ~10MB per turn. At least the harness itself is pretty tiny
I mean, they are the premier showcase of vibe coding - can we really expect anything but the finest soup of slop?
Recently they broke the most essential thing you can do in TUI - copying the text selected with the mouse: https://github.com/openai/codex/issues/48125
The daemon has many bugs. For example, when auto-updating, it would randomly ruin the permissions and block the goal as .git became read-only. Generally, it is extremely annoying how many bugs Codex has. I basically can't trust it to execute on any goal since it would often get blocked every few hours due to random bugs.
https://github.com/openai/codex/issues/52251#issuecomment-60...
The CLI has been pretty good on this score, way better than the App. Has been…
My complaint applies specifically to the CLI. I have never used the gui app. Here are the various goal-breaking bugs I've run into:
- Goals get blocked due to .git and other stuff becoming randomly read-only when daemon auto-updates in the background (the linked issue in my comment above)
- Goals get blocked due to transient "Selected model is at capacity"
- Goals get blocked due to "Codex ran out of room in the model's context window". Somehow, both auto-compaction and manually running /compact don't work. https://github.com/openai/codex/issues/52567#issuecomment-61...
- Goals get blocked due to bwrap randomly failing with `bwrap: loopback: Failed RTM_NEWADDR: Operation not permitted`. I traced this one to `apparmor` on Ubuntu 24.04 interfering with bwrap and found a local workaround.
Also, in Codex, one randomly can't click "New Chat" or "Scheduled Tasks". You know, the absolute two basic functions.
I’ve been using GPT models via hax[1], a bare bones harness with minimal tools on my system and have the models rely on bash for the most part the last few months. It’s been a breath of fresh air amidst all these overengineered harnesses.
If I need special actions, I just make them CLI tools on my Mac and tell the AI model that such a tool exists(via a single line in its system prompt) and that’s it. It’s been very nice.
[1] - https://usehax.dev/
No affiliation whatsoever. Just a happy user.
You seem to care, so I wanna point out a semantic nit; "such a tool exists" could be interpreted as a harness provided tool, rather than a command line tool. (Edit, on a re-read its pretty obvious you mean cli tool, but keeping this statment here as im sure it'll open someone's eyes to the difference)
I've gotta give hax a go, as a pi user who came on-board due to the no frills direction pi takes. I say takes rather than took, because regardless of the (heated) discussion surrounding mcp and code mode support, I cannot fight the numbers- augmenting the harness provided tools is a notable boost to execution round trip performance.
I may need to take a second look at Pi again if it has any niceties like that notable boost in round trip performance compared to hax.
I mostly stuck around with Hax because of a few design choices. The sessions are merely plain text files indexed by a dirpath slug. This means I can just start a hax session in that directory and expect sessions history to be available in any model.. (I occasionally dabble in GLM for security checks, Gemini for writing stuff, Deepseek for tightly scoped tests etc).
In the end what you said about letting the model know what tools exist is more or less what pi does regarding tools/extensions/plugins.
you can also switch the model at any point too after resuming.
But honestly i dont think there is that big a difference between these “minimal harnesses” to begin with so long as they have the basic functionality…
I swapped to hax after the atuhor talked about it here on Hackernews, it really is very much a huge recommendation. Most importantly for me, it has been the only harness who respects the XDG specification and does not ask me to install by curling into sh. From my previous to harnesses, pi and maki, neither did both.
On top of that, it also feels very much like a normal CLI tool, which is a big plus for me.
It does not support plugins or MCP, which could both be a big negative for many people, but for now I was able to find a good terminal alternative for everything I needed.
Just a huge recommendation from my side as well, not affiliated in any way myself.
can I use this harness with subcription plans without being afraid to banned from violating some ToS?
ChatGPT: likely yes (Tibo tweeted that it was approved)
Claude: probably not (officially against the rules after the openclaw fiasco)
This is the same operational model as Claude Code.
I see a few prior versions of the Claude Code binary and several running background tasks, without any copy of Claude Code in the foreground. I regularly get a "Update available" message in my Claude Code UI too.
This kind of stuff often breaks for applications packaged with Nix, so it's often removed from Nix packages for compatibility reasons. Both behaviors you mention are helpfully patched out of the Claude Code package I use: https://github.com/numtide/llm-agents.nix/blob/dc285bfd94ec7...
As a result, I never knew that Claude Code does a nasty thing like this, either. :-\
Fwiw, packages in that repo get version bumped each day, so if that's a fast enough pace for you it may be a good alternative.
And here is the issue raised in github: https://github.com/anthropics/claude-code/issues/14980
TLDR: They don't care.
This sort of persistent auto closing is just so infuriating. Shows 0 respect for the user and not wasting users' time.
An AI bot will create the issue, and another AI bot will close it without fixing anything.
The future is here! It's a shame it has to be _this_ future...
If running systemd, wrap that crap into a cgroup and force kill the whole process tree on exit. I've been doing it for years with badly behaving applications. On phone, from memory, may not be exactly what is needed:
Off-topic: I think the front-end quality of ChatGPT/Codex Desktop and Android app is simply dreadful—hard to imagine how such a large number of frequent failures made it into production. Do they not use human testing at all?
probably not much, they're all using workflows where the agents pull issues and automatically merge code when the tests pass. so lots of stuff slips through and the overall experience is kinda shite.
Eyes free coding is a badge of honor for some folks.
I think it's a crazy notion given what I see these things do and generate, and hoped they would too after recent incidents.
yeah and it's not even about reading code in particular. i keep a close eye on architecture, project structure, data structures & data flow, etc. and then i do manual testing to make sure things feel right. i cannot imagine developing anything users interact with without doing this.
I have recently hit the point where I am struggling in a vibe coding experiment with the state management and control flow sequencing. It's a very complex scenario (detecting game mode change for Final Fantasy 1 in a NES harness where the game loop and agent loop need to run independently, yet interleave). I'm insanely impressed with how far the open models have brought the project, I would never have on my own, life is too short. It remains unclear if I can work with the agents through this challenge. Probably time I took a deeper look at the code I suppose.
i'm working on a complex project and i got it to a really good state as well without really looking at the code. i'm now digging into some of it to rework the architecture so i can tackle some even more complex things. it's fine, i've read maybe 5% of all the code, most of it doesn't really matter since it's isolated in their own crate, it's the interaction boundaries that matter.
Is there evidence to suggest that open ai business leadership values money over inspiring general public customer delight?
Codex is very badly structured. I was an early user with codex. But it mixes state and configuration data; which is why I can't really declaratively manage it in my nix-darwin environment; so abandoned it a while ago. This issue being raised, and the way that the codex development responds back to it makes me not trust their harness ever again. I only use codex in opencode; which seems to be doing OK. At least openai doesn't gate their product to their harness like anthropic.
Not trying to sing praises; i think opencode is doing a bunch of weird stuff too but it's not codex level.
Antigravity's agy is the same. I suspect ACP and GUI too. It has no env var or parameter to set its config dir. You can set home but that also set's agent's home. How big of a piece of crap it is is literally hard to fathom.
It doesn't even have a place to check your remaining time or limits except for an in app /quota command that the CLI does not expose.
>At least openai doesn't gate their product to their harness like anthropic.
Ant doesn't do this. (Anymore)
This stuff is moving fast, should update automatically. This is kind of standard now. Browsers do it. No reason for harnesses not to do it as well.
My browser doesnt update automatically, i have to approve it.
Maybe this kind of stuff is standard for some people but I absolutely loathe auto updating software for many reasons
For example, Firefox updates by default and forces you to restart it, disabling using websites or seeing any site content before doing so.
I've been using Firefox for years and don't think I've ever seen this. Are you running some custom configuration?
Firefox Developer Edition on macOS.
that's exactly my setup as well! strange
Standard on Linux, I believe. One of many reasons I got back to Windows as my main OS (with Linux needs fulfilled by WSL).
Not true since summer 2025.
https://www.firefox.com/en-US/firefox/141.0/releasenotes/#:~...
On your setup.
Firefox does not only not prompt me for updates (it only updates if I manually run an update), even if I do update with Firefox running, it does not stop me from continuing to use Firefox without restarting it. All I did was install Firefox from flathub (packaged by Mozilla (a default configuration provided by Mozilla)).
I am running Firefox Developer Edition on macOS, where it is the default option. Have to set "Check for updates, but choose when to install" to get the similar behavior.
Iirc, this is a pattern of the flatpack version of Firefox. I do not believe the .deb does this.
I've never seen that behaviour, it downloads updates in the background and then gives me a little notification that I should restart it to update, but it's dismiss-able.
I think this is the old default option. What options you see in the update options?
Are you sure this isn't your organization's update policy kicking in here?
Not on my machine
Unless I rebuild my ports, Firefox does fuck all to my system. If it ever did, I would nuke it immediately.
Being able to turn auto-updates off is okay, but that being the default would certainly not be okay in Codex, giving the reach, what it can do and how immature it is.
One practical reason - system stability for important events.
I travel for work, and often have a tech demo, solution, tool, or something to show - or am running a workshop.
I usually do NOT update things right before my trip, as I want to minimize the potential for disruption.
Isn’t this what docker is for?
Jokes aside I do the same I tend not to upgrade my Mac, my phone unless I really have to.
The “update” button on the top of my brave install has now turned from green to orange and I’ll likely wait until it goes red
> Isn’t this what docker is for?
What? Pinning a browser?
First thing it'll want to do after starting is update itself to newest version anyway.
> My browser doesnt update automatically, i have to approve it.
Have you ever actually blocked it due to something in the new version, or is it mostly to control the timing of when it updates?
Only to control the timing
If software engineering is solved they should be able to get it right the first time
CODEX WRITES ITSELF! DONT YOU PEOPLE UNDERSTAND!!!!!
So you imply that Codex has a hoarding issue?
It gets very attached to itself
It loves hording issues. Over 15 THOUSAND on GH.
Nah, you're confusing it with Autolith.
Coding is solved, software engineering still TBD
Software Engineering clearly is solved, that's why Google has a tiny animated banner on the AI Studio sidebar (advertising subscription upgrade), which shows a simple animated border around it and utilizing exactly 100% of the GPU to render just that banner. And there is a browser extension removing that styling element (without banner GPU load is obviously under 0.1% as it should be) released way back in May. So the almighty AI didn't manage to fix a major UI blocker for a flagship AI product in half a year now. :)
When I had a Claude account (cancelled ~May time) I vividly remember the web chat having broken editing for backtick-quoted monospace text. If you typed <space>`foobar`<space> the last space would move the cursor backward into the closing quote, and the space would be emitted inside the monospaced region. It was like this for several months (on Firefox). I always found this baffling for a product marketed to programmers.
Same with their desktop app by the way, absolutely infuriating.
You don't understand Google business. It's an ad company, not a tech company. Nobody cares about that banner.
You can do this without a daemon, and without storing n previous versions as noted by another user.
Yeah this seems like a decision yielded by a model. One of countless examples of the model’s outputs careening into individually defensible but holistically nonsensical results
A human seems less likely to embark upon a path that most humans know leads to something a human is unlikely to want
LLMs produce amazing things, but only one token at a time. Anything beyond that is retrospectively emergent at best
I guarantee the prompt “add auto update feature” was the first and last human input applied to that feature.
Products moving fast doesn't mean that they're moving in the direction I want, or that I want them to move underneath me while I'm in the middle of a project.
Auto-update systems have value but are not a suitable default for professional tools.
Ordinary package managers are totally capable of updating thousands of programs without manual effort, including automatically and in the background if that's a thing you want. But they do it without violating users' sovereignty over their own computers or turning every app into a special snowflake that gets to install software (namely itself) in its own bespoke way.
Serious tools shouldn't do this. Sure, you can offer an opt-in rapid release beta update option, but if you can't go more than a month without forcing me into a "stable" update that changes the UI and behavior I'm getting used to, then I'm not going to consider your software stable and reliable enough to be worth developing expertise in using.
The entire class of software (harnesses) you're talking about was literally invented like 2 years ago...
I don't see how that excuses anything. It certainly doesn't give harness developers an excuse to be disrespectful to their users. It shouldn't give harness developers any reason to not even try to produce a stable release with a well-designed UI instead of a janky mess that gains new bugs every time you try to use it.
There are contexts where "move fast and break things" can make sense, but usually not when it's other people's workflows that you're breaking.
Just how old do you think a category of software product needs to be before it's reasonable for users to start expecting professionalism from the developers?
The majority of harness users are the equivalent of boomers using browsers. They don't really care.
Then use the package manager, or windows store on windows.
Only if OSes have some easy and sanenly robust way of limiting app access in such a granular way that these apps might be as well forced to start behaving.
Like a simple:
- Dropbox:
(also: the example given above is not fair game for nitpicking :D)
The thing is: the Internet access part one can control with Lulu or other similar apps. But anything else is a user nightmare - next to impossible even for a cli/tweaking/etc comfortable user. And mac's TCC is a royal mess - even their UI part for this is utterly confusing. I think only the Linux world can achieve something sane+easy like this (if it doesn't have that already; though they have not been known for being "easy").
I have achieved a lot of these for harnesses using sandbox-exec (by basically doing: "deny *; then selectively allow") on mac but it was a pain and I can't even think of trying something like that for "normal" apps.
It's not necessarily hostility. We considered different updating approaches with our legal IDE where security, stability, etc. are paramount, and having a buggy application out in the wild is user-hostile. Sure, in a dream world we'd say "don't ship until it's perfect", but that's just not realistic.
We considered the daemon thing, but ended up with a hard-update check on every boot. It's thus a user choice: if you don't like the automatic updating, you can just not run the application anymore.
And even with all that, it's hard to stay on the right side of AV algorithms, etc.
We wrote about it here: https://tritium.legal/blog/update
> It's thus a user choice: if you don't like the automatic updating, you can just not run the application anymore.
That's not a choice. It s just what most apps do these days, but it's the first time I've seen anyone stating this so directly, or trying to frame it as a choice.
(And behaviorally, this makes your product just a SaaS website with extra steps.)
I guess I mean it's a choice in the sense that it's a transparent part of the product that one chooses how and when to use (or not). That's opposed to something running in the background on its own schedule, with its own agenda whether the user is running the application or not.
[Edit: yes, that is kind of the idea. Native version has better features because it can access them.]
It's right about now that having a operating system distro model is great - you get folks who will package the software & test it out, make generally sensible defaults, and generally keep shenanigans like this from going on
Nix/NixOS takes it a step further and makes you have to go out of the way to enable self-updating behavior when packaging something :)
What are the top ones you recommend? ( I am running Mint Debian Linux )
I think the quality of Codex CLI (and Claude Code) is an honest reflection of the status quo of LLM-driven development. The future doesn’t look really promising.
Totally.
The problem is hardly anyone gives a shit if they can pump out stuff that makes them look like they are good at stuff.
Vanity before engineering.
https://www.jerrypournelle.com/reports/jerryp/iron.html
I find codex CLI to be a pretty high quality application. Is the existence of a backend daemon what you're referring to ?
It's buggy like hell once you do not run the default settings. Whole permissions system is completely broken, for example.
It’s kinda vibe coding in a nutshell. Lots of cool and varied features, that often just don’t quite work right.
I've used the CLIs for Codex, Gemini and Claude and they all give off the feeling of being on an very rickety, very fast runaway train.
You install an update. Oops, they added a sandbox that doesn't work inside a docker container, it's stopped working.
You install an update. Oops, you can't log in inside a docker container any more, it's stopped working.
You install an update. Oops, they started catching the copy+paste shortcut and replaced it with one that doesn't work.
You revert a broken update. Oops, the update changed the format of your login details, the old version can't read them, gotta log in again.
You install an update. Oops, can't scroll with the mouse wheel any more.
Not showstopping bugs (if you're used to persuading broken oauth logins to work) but it certainly makes updating an "ugh, what have they broken this time?" experience.
To be fair, how many products this old even have a revert update mechanism?
You got further than I did. I checked them out and went back to manual prompting. Just don't have a need for codegen that much, and when I do I'd prefer to be in control.
It does some neat things that, ultimately, are super obnoxious. Background animations and "sparkle" effects that make my terminal indicate activity at all times. Just subtly broken behavior.
It has pretty rapidly reached the point where I do not think any acceptable LLM-harness is widely available. Every single one I've tried has broken in bizarre ways on even minor updates.
I used codex the first time yesterday and quickly decided I need to sandbox it and came up with a pretty easy and straightforward solution (I think).
I use nixos and use a little wrapper that wraps Codex CLI in Docker. Run codex-box /path/to/project and it starts or reuses a container with only that project bind-mounted, keeping login and history in a separate volume. It uses tmux for detaching and reattaching
https://gist.github.com/entropie/8f30b9e33e9412fda3adf2f7507...
I was delaying it but one day Codex+GLM went ahead and did things in my ~/.dotfiles folder which I had granted only READ access for. I asked and I was given a reason which I didn't understand and didn't really want to. Right then I used sandbox-exec/safehouse (macOS) and tightened every harness installed (and the one not even installed, lest I install it later and forget to add/track them in the sb zsh init script).
But I am not satisfied. I am trying to find a really lightweight container/VM for macOS that eats very less RAM on its own and expands as needed. Because I really don't want to run an agent outside a container on my mac.
The script is working like charm. I updated the packages so it has more access to tooling (ffmpeg, rmagick etc)
Build your own, using the broken harness
Maybe thats just the tool nerd in me that just wants the perfect tool for every job.
Very much this... The utility of Claude has grown exponentially with the amount of work I've put into memory/context management, tooling, skills development and CLAUDE.md (and friends). I freely admit I may just be fortunate, but I've yet to hit a bug in a new release that rose above the level of minor annoyance.
The thing that really validated this point was when I recently tried Codex again. Out of the box it was OK, but not great. I swung over the memory apparatus and had it import directives from my existing Claude install and it was almost immediately quite useful in its own right and, especially, as a counterpoint to Claude when dealing with some fairly complex operational issues.
Pi as well? Comparatively it's quite a small surface. I haven't seen issues when I upgrade.
Pi went searching across my entire home directory unprompted... Idk to do that without some kind of sandboxing builtin is rough and chews through tokens on things I don't really want polluting my context.
Well yeah, it's YOLO-by-default by design. That's not related to upgrade churn.
A coworker of mine has a pretty neat script that uses bubblewrap to wrap any application. I'm using that one too for pi and it's pretty great since you don't have to trust the harness and can quite easily customize the sandbox to your needs, e.g. disallow reading to certain directories etc.
This blogpost describes a similar thing: https://bxt.rs/blog/easy-sandboxing-on-linux-with-bubblewrap...
Yes, Pi as well. All these harnesses have gone off kilter and are all for the LLM, by the LLM, and of the LLM at this point.
Maybe it's like online services/tools. Use them until they are VCed and gone pivoting and then move to another tool.
I'm sure if you file a bug on the 15k backlog they'll fix it eventually /s
Legit bugs still open 6 months on.. It's a bit ironic
To be fair we've gone from barely capable at writing code to what we have today in barely 3 years. I wouldn't put money on the counter bet that they won't get beyond this hump.
Time doesn't solve bad designs. We still have lots of buffer overflows in C.
We don't see any indication that the LLM companies are slowing down and go for better code.
Instead it just looks like a cash grab until the AI bubble bursts.
The product and UX of the tool is distinct from the raw ability of the tool.
Claude code has great UX.
No, the tooling I make has better UX very quickly. It is built for their financial goals, not for the end user.
I know this is an unpopular opinion, but it's actually good. - pasting lots of content became [35 lines] and they added a tiny notification to show it as-is if you paste again - interactive questions layout - paste images - the recap - auto-updating session titles
And so many more. I tried codex and it was lacking in many UX aspects. Remember we got from a text-paragraph-only terminal to this at breakneck speed.
I’m not deeply pro-codex, but it does have all those features. Who knows since when.
It did not as of a week or so back.
https://x.com/dvsj_in/status/2098620473550700771
Half of what you're listing as features people should be impressed are stuff that causes as much frustration as it solves. The image pasting behavior is a super-annoying footgun, because sometimes I just want to tell the LLM the path to the image file without it trying to burn a ton of tokens on computer vision—and dragging and dropping a file into the terminal pastes the path in any normal context. The auto-updating session titles, recap, and notifications are token-burning distractions that are glitchy; I had to disable them when I found that having the agent launch an app would mean I'd get a random beep about a minute later when the agent had been waiting for further input in the background.
And they can't seem to go two whole months without scrolling breaking in some new way.
this 1000x. a lot of details in context compaction, editing, reverting ux, etc are all really centered on keeping the load and cost of subscription users as small as possible. its no always that nor is it necessarily correct, but its a huge driver of how those subscriptions and first party apps are designed
agreed. the thing i reach for most is its ability to coordinate my agent graph, e.g. seeing what sub-agents are doing, messaging agents, adding new capacity. claude code really is a delight to use here
Claude Code is better than Codex UX. But as per the sibling response it's more a developer tool made by developers for developers. It does have a lot of niceties. Codex/openai on the other hand is more clearly trying to reach mass-market and it's a UX shit show because of it. Consumer UX is its own thing. So the original point is that raw ability of the tool doesn't magically solve ergonomics.
Won't disagree with you because I haven't used codex/OAI a lot - but Claude's non CLI UX is great too.
Eg - I asked for a recipe and it says leave x for y time - there's actually deeplinks that link to your clock timer with the time preset! And to change quantities, there's input boxes in the response that update all quantities accordingly.
Many such cases of use-case specific UX
It is hands down the most user hostile UX I put up with. The fact that I put up with it speaks volumes about the value proposition that the underlying models bring to the table.
I’m in the process of dumping codex for more open harnesses that don’t add problematic new features every week. Because Anthropic insists that I have to use their harness with the subscription, eventually I’m either going to wrap `claude -p` to get away from the crappy TUI or else I’ll just unsubscribe and use other models. Their bad UX has alienated me as a paying customer.
Can you give me examples of things you don't like? Because I unironically admire how they improve UX. It's subtle, minimal, yet insanely useful.
Listed a few in my other comment
I'm not who you're asking but for me I am right now going through the insanity of providing plugin/mcp/tool access across environments. This is in codex which as I mentioned is intentionally trying to provide mass-market ergonomics. But with that comes incomprehensible configuration that's also a moving target. chat/work/codex/remote/cloud are all different things. And each client exposes different abilities and hides others. And looks like only the web-ui is the most up to date because other targets need releases. As a developer I understand why it's in its current state, but that in no way excuses it as acceptable ux.
Like of course codex is the most powerful and "just" run `npx blah blah` but no, I'm not running randomly piped code on my personal computer and even if I didn't care about privacy it means I can only run this locally with my laptop on. "leave your laptop on and access from your phone" is not a good idea. It only adds to the surface area of confusion. Ux no good.
Try using the "rewind" feature to go back to a previous message.
Went too far? Oops, it's not accessible from the Claude Code UI anymore! You can get the agent to dredge up the info from the session logs, but you'd better hope they put the pieces together correctly.
Also, you can't rewind to a steering message. Want to make sure you can rewind to it? Wait for the agent to settle, or stop them, enter your message, and hope you don't throw them off their current train of thought.
To see a proper rewind UI, see how Pi does it: Every message is available, forked conversation history is preserved. It has its own issues, but is miles ahead of Claude Code in this regard.
If we’re learning anything from the past 15 years it’s probably not to extrapolate AI progress in a straight line.
https://finance.yahoo.com/sectors/healthcare/articles/godfat...
Progress is spiky and not guaranteed. The capital costs have also ballooned to the point where the rate has to level out
> The capital costs have also ballooned to the point where the rate has to level out
That's a pretty bold use of "has to". None of the financing behind AI seems sane, yet it continues to defy rational expectations. Reminds me of the comment "the market can remain irrational longer than you can stay solvent". It's not the exact meaning but has the same feeling. The circular financing going on does not help anything either
I wouldn’t assume that progress is linear. Maybe I’m wrong and it will be! But I’m reminded of early developments with self driving cars, it felt like manual driving would be a thing of the past within a decade. But progress has been much slower than that.
> But I’m reminded of early developments with self driving cars, it felt like manual driving would be a thing of the past within a decade. But progress has been much slower than that.
I think that's exactly the standpoint of Yann LeCun.
I dont think the quality has gotten that much better. Take claude 4.5, the probability of getting usable outputs was less likely than with opus 5.5, and the usuable outputs weren't great.
I think newer models are more likely to produce the usuable output, almost always, but its still not great. The frequency in which you get usable results leads one to believe that quality is improving.. No usability is improving but the result is still meh.
Also put an llm in an environment without an lsp or compiler to check against and let me know how capable you think they are on their own. The "loop" is doing a lot of heavy lifting here.
The current approach of the big companies is to keep increasing the number of parameters (there was a report that recent Claude models are on the 4T parameter scale). Even recent SOTA open weight models are in the 1T-2T range.
This is partly due to the multiplicative scaling factor -- the number of tokens; the number of transformer layers; the number of features; etc.
I suspect that for models to have a step upgrade either/both of 1) a new/improved architecture model; and 2) better training of smaller parameter models are needed. I say the latter as I think that with the larger weights there is a lot of unused/redundant parameters.
Seems like its just a bunch of young engineers making bad architecture decisions. Not sure I would blame the culture of vibe coding everything. It might just be bad taste.
If you blindly trust frontier LLM architecture 'decisions,' they often do look a lot like what a young/junior engineer would do.
I say this about 30 times a day, to nobody. "How the FUCK is this all so bad? They have unlimited tokens"
I think it’s a new spin on Brook’s Law. Adding tokens to a project makes it less efficient not more.
The "Mythical Man-Month" is now the "Mythical Token-Minute"?
As an aside, I often wonder how would classics like Mythical Man-Month or Project Phoenix would be (re)written today.
that's what I'm also wondering about.
in the last 2 weeks or so: - scrolling stopped working - subagents no longer work (main agent doesn't get notified when they finish) - subagents don't work (a subagent can't make its own agent even if instructed to do so)
what's going on? I thought coding was solved?
> They have unlimited tokens
That is exactly why it is so bad. Tokens spent generate code. Large amounts of code is a liability.
Both CLIs are getting worse. I think it's because they keep bolting in unconsidered "features", not because of the code quality.
But maybe being able to code up a feature at the drop of a hat has turbo-charged their ability to make bad UX decisions.
I believe it's all related. They keep adding new, badly thought out features because it's much easier than improving existing features built on low quality code.
The latter requires modifying existing, badly architectured and tightly coupled code that will almost definitely break something somewhere else if touched, so what do you do? Just keep adding new code on top and hope for the best.
This is not a new phenomenon by any means, but AI amplifies it by 100x.
There is actually even worse code quality written by humans, is that small sample also a reflection of human-driven development? And therefore, the future doesn't look promising that way either?
The difference is the source of the sample. This is a flagship product by a frontier lab. It should be reflective of the best that is possible. It should be biased in the most favorable possible way. It was designed by people without the normal limitations and quotas of outsiders in building it, as well as in learning experiences in driving it. This is not a random cherry-pick of bad code.
Again, the same parallel can be drawn by frontier tech companies. Case in point: Even before AI (and even till date), iOS has always been buggy, crappy. Apple was a trillion dollar company when they had some of the worst bugs in iOS launched to public.
The same story for Google's products - their products were always buggy even before AI. And so is the case for Microsoft.
I think the reasonable argument is that AI or not, software problems are hard problems to solve. And software is constantly evolving. AI isn't a magic wand. It also depends a lot on the humans using it, including prompting and context supplied to it.
Drawing a massive conclusion from a tiny, unrepresentative sample is just hasty generalization.
Solar power has become a real transformative technology and instead of trying to recreate a better world we tariffed them and the execs of this country spent all our coins on power hungry data-centers that write mid code.
I think the (lack of) quality of these tools shows that software engineering is maturing as an engineering discipline.
We were overbuilding trivial parts of the software like the Romans overbuilt small bridges.
Modern engineering is about making the thing that barely works. If you disagree, learn a little bit about bit narrow the tolerances of modern cars and bridges are.
I think there's a difference between something that's engineered and precise vs something that's rickety. Just because you built something that might fall apart at any moment doesn't mean it's been engineered with narrow tolerances.
I disagree.
> [...] vs something that's rickety
A 100 percent of modern bridges are rickety. There has been dozens of high profile incidents because of this.
> Just because you built something that might fall apart at any moment doesn't mean it's been engineered with narrow tolerances.
Here the software they are building falls apart in ..say.. two days of use, but can be updated in 5 seconds at close to zero marginal cost. The software is useful enough that people keep updating and using it. This iteration gives them a competitive advantage over the safer choice of rigorously testing every new thing for several weeks.
I don't disagree but it's clearly a problem that already existed for decades in software and is just being 10x'ed. how many different frontend frameworks or AWS regurgitated and enshittified cloud services did we have to endure over the years.
> learn a little bit about bit narrow the tolerances of modern cars and bridges are
Buildings typically use a safety factor of 1.5 to 2.0, and cars typically use a safety factor of 2.0 to 3.0. These things are being built twice as strong as they need to be. I wouldn't call that narrow.
And with software, we're at a point where it can't even properly do what it needs to. If we were overbuilding it, damn software wouldn't crash so much.
I think all engineering has safety factors of 2 or more. Maybe with the exception of aerospace (mostly space) where materials might be at the limits of what's possible right now so the safety factors are much reduced.
> I think all engineering has safety factors of 2 or more.
Not even close.
For example, a BMW X5 weighs about 2200 Kgs without passengers, and it's GVWR is 2800 Kgs.
If you have five people and heavy bags, you can comfortably exceed the GVWR. You can absolutely break control arms and suspension components in that scenario if you go over a speed bump or hit a pothole (which are real things that exist in the real world, like people doing something unintended and crashing software).
If this needed a 2x safety factor, there would have been no way to build this car.
Even the toughest cars like land cruisers are limited in this way.
i'm personally quite perplexed how sloppy the harnesses are from the leading AI labs, you'd think these are their primary products and would have some human attention devoted to them
it's embarrassing when every claude code release has obvious bugs in it like telling you to upgrade when you're on the latest version or codex opening visible powershell windows for every command that pop up on your screen
like 5 minutes of human testing would catch this obvious shit but obviously they don't bother because vibes are the future and stuff? idk
The restraint, rigour and responsibility you showed prior to LLMs relates directly to how much of that you apply now that they’re here.
Given how rare it was previously, and how little it was cultivated by shortsighted management, I’m not surprised with all the slop we see today.
The truth is there’s nothing stopping someone from using these tools to remove dead code, simplify project structure, remove dependencies, etc. but I don’t see it happening very often. I have done it a bunch myself though so it’s absolutely possible, it’s all a matter of investment and prioritization.
I'm inclined to agree
So is OpenCode. More so. I use Claude Code and OpenCode almost equally and Codex slightly less and Pi the least of them (not that it's worse, but because I use it for "non coding" purposes). They are all bad. Even this newer breed of "agent orchrestrating" tools.
One goes to Github and one notices, the dev is done by LLMs, issue triage is done by bots, and the commenting is done by the bots. (btw, the triage mostly means closing them or playing the "this is dupe of that" game while noone gives a flying fuck about any of the issues). Another good one is "not planned". You report a breaking/critical change and "not planned". What demorlised me is attitude of OpenCode devs/maintainers. I think the Open in it more of the "Open" in OpenAI than in FOSS. That's when I started reducing my dependency on this harness whihc was slowly becoming my pretty much full time harness.
OpenCode is barely usable with local LLMs. Plan mode to build mode switch and lose all your prefix. Compaction throws away your prefix (just fixed in v2... I guess v1 gets to stuff it). Pi throws away your prefix during compaction too. I think all these tools' devs and users use it with hosted models. Pi doesn't come with basic permission capabilities--YOLO, write your own or hope the extension you find in the Pi extension store isn't an absolute dumpster fire.
Claude Code turned on the remote-control server by default with an update (no explanation or notification). BUT Claude Code didn't break the expectation that the hooks and the commands you run inherit your environment. So it was hard to notice.
Whereas when Codex App server became enabled by default, and as per OpenAI, it was never contractual that hooks run in the client's environment. Sure, let's break long-standing expectations of where code runs when you run a CLI--it was never contractual, you see. Now you have to figure out how to turn this crap off, just to UNBREAK your workflow!
This is why it's apples and oranges here, with Claude Code and Codex.
> hope the extension you find in the Pi extension store isn't an absolute dumpster fire
That's why I didn't mind it when Pi added native MCP capabilities. What dismayed me was they didn't other tools like subagents, and other stuff. I mean why do I have to scour the Interwebs to find something that doesn't possibly screw everything up for me.
I have a feeling harness usage will finally move to lots of harnesses with usage clusters - as in not X million harness for X million devs/users but a lot and people will use what suits them, and if not a more inclined coder will fork/make one just for them. In all their faults LLMs have made this a possibility.
You can just copy the executable then run it with --no-daemon, or edit the config equivalently. No autoupdates and no background process.
The recent terminal UI changes were more fastidious, but even those are easily disabled with CODEX_TUI_DISABLE_KEYBOARD_ENHANCEMENT=1 and the /tui command.
Is anyone using the vscode extension of Codex? Its insane how brittle it is.
Just a couple of days ago, it was completely broken for about a week before it got somewhat fixed again. When I say fixed, I mean basic functionality is working again but bugs and regressions are still left. There are multiple issues tracking the same problems. The community have even started to patch the extension themselves as a workaround until its adressed.
You know whats even crazier? There are like a new release every other day with lots of commits and changes, yet it still in a bad shape. I have turned off autoupdate for Codex extension for this reason. The only extension I’ve had to.
I mean, it doesn’t take that much work to have some tests in the pipeline to make sure the extension continue to work, it almost feels like they are purposely doing this.
I have now experienced the consequences of ”move fast and break things”. I realize how much software quality means to me. Its not fun being on the receiving end, especially when it affects my daily workflow.
If any of you, see anyone hype up LLMs again, please refer them to the state of Codex vscode extension.
It's as if there was a reason the whole industry was obsessed with quality up to like 3 years ago
My 2-cents: never install those things into your host. A locked down Docker container is the bare minimum. Pin your versions and never update them without checking the changelog.
Well, OpenAI at least is fine with you using whatever harness you like. Having a crappy first-party one is bad, but an escape hatch puts a floor on it.
Continuing to be glad I trust my instincts around bad management making problematic products!
while this points it out, i'll show you what I had in place:
~/.codex/config.toml
hell, I also have this redundancy configured in bash:
I discovered this while benchmarking the tool I'm developing. I realized Codex was surprisingly fast after the initial run. Some other harnesses do similar things, so I decided to use bwrap around these tools for accurate benchmarking.
Cool thing is that I can just ask the llm to modify the harness to what I need. I discovered this daemon thing about two weeks ago and had codex modify it's own custom launcher that I have to bypass the daemon thing. If as a recreational code farmer can do it then most "pros" should be able to handle this and other inconveniences. Cc has been pushing that no scrolling feature that codex recently introduced for a half a year now but again I had them put a stop to that. Software has never been this easy to configure.
This is why I use all OpenAI products through the web (except where there's strong sandboxing e.g. Apple iOS). Makes me sleep a lot better at night.
I feel like so many of the new AI tooling is reinventing the wheel. We've figured out how to update software via package managers. Do we need a daemon to continually check for updates and do we need shell scripts to circumvent package managers?
Have a look at https://chatgpt.com/codex/install.sh. It's managing the installation by itself not using existing package managers. There's a good point to making it easy to install, but it leads to managing an installation when you shouldn't need to. Time would be better spent elsewhere and better solutions exist.
Am I the only one thinking this?
It's taking a cue from desktop apps on Mac and Windows. But I agree. I hate self-updating behavior in both contexts.
Sandbox everything if the OS is not doing what it’s supposed to do
Exactly, that's what I do, I even up end up writing my own for this purpose - https://github.com/ashishb/amazing-sandbox
Interesting. I have a very similar setup for myself.
Refusal to adhere to the XDG specification is a big signal that the app is going to be a general bull in a china shop. It's not that hard to do OS- and distribution-appropriate package management.
A well-behaved application should not only use XDG on Linux, but it should use platform-native conventions on macOS as well: "~/Library/Application Support", etc.
Yes, and the Windows app-data equivalent. The point is that you have to be a good citizen of the platform on which you're running. curl | bash is kind of a selfish model.
I use it at work. On Windows it also launches a new console window every it executes (?) a command. You should definitely disabled this using --no-daemon.
I don't know how and why they ruined this CLI with needless "features". It was perfectly usable two weeks ago.
A bit off-topic, but on the rare occasions I help some acquaintance with Windows I always feel a bit upset that random split second console windows still pop up when installing everyday software, even that from Microsoft.
I remember them from way back on Windows 98 and no one seems to care to hide them (?).
I expect this sort of thing when installing/running the client, but I can see why it would be alarming for a CLI installed via NPM to do this
Slop coded CLI(!) via NPM(!)...I think that answers itself.
not to mention the daemon mode breaks a bunch of assumptions one might have about about codex CLI e.g. that codex CLI inherits the env vars of the shell that invokes it.
—no-daemon is the way, but still feels like the noose is tightening …
So, similar as Google and Microsoft have been doing with all their tools?
In some circles this is called a backdoor.
Deleting codex and unsubbing. Thank you, OP, for highlighting this important PSA.
All I'd want is a CLI with a few tools AND a built-in, properly configurable and working sandbox. Seems that's too much too ask.
Just be the 10th person to make one this week.
Reminder that OpenAI allows you to use the Pi Coding Agent, which is a lot more lightweight, and in my experience much better than any of the proprietary harnesses.
https://pi.dev/
I've been using Pi nearly every day for 4-5 months now, and even though it is still very much in development with new updates arriving nearly every week, it has to my mind never regressed. I've never lamented that a Pi update ever broke anything I depend on or made anything worse.
I immediately adopted the new tuiMode "fullscreen" feature the moment it landed, and it's been exceptional. I love the way it now manages the viewport -- this was also right about the time I migrated to Ghostty so that also made a big difference. Showing inline images with the Kitty graphics protocol has been a huge improvement too, I love it when a model calls `read` on an image file and I get to see the results in my terminal. The OSC-8 hyperlink support is super cool too. I love the way it auto hides/shows the scrollbar now too, and recently they've even made it so concurrent tool calls show different "themes" when pending/running vs success vs error.
Claude has been doing this already.
Talk about your box not being yours any more. First Apple and Microslop take it away from you, and then the service providers pile on.
ah... so this is why my agents all made a signal noise when i used chatgpt on my phone?
Claude also now hacks your MacOS to put an "Ask Claude" item into every right-click menu. You can remove it through the system's keyboard preferences.
100 years ago, if you had told people that everyone in the future would be summoning 'persistent daemons' inside black boxes using something called a 'Codex CLI', they'd have thought we went crazy and that the future is a horrifying place.
It's off topic, but this weekend I caught both Codex and Claude accidentally read some credentials in config files and not flag them. When confronted, they both went "oh yeah, that, I should have mentioned that".
Except in the past they both would automatically stop and fire an alarm almost. So something clearly changed and I think they just want us not to notice, to avoid damaging the trust in their tools.
I seriously feel at loss with this current AI situation: can't live without them anymore, hate their product still and feel taken advantage of. Local LLM still to expensive and hard to see any light in the tunnel.
Yeah, and for the contrary I spotted Claude app being ugly. When I turned off Claude, then put my computer to sleep and later woke it up, it made my fans spin loudly, and after I checked, there were like 2 dozen Claude processes and a lot of Python. What was it doing - I have no idea, but it was crazy. I'm setting up a VM with nothing but Claude and necessary tools. I feel Claude is not honest with everything it is doing.
Can you share some more detail of how you would implement this? Are you thinking something like VirtualBox (?), running a virtual machine, and you're using - for example, OpenCode terminal in the VM...?
I've used pretty much this type of setup:
https://michael.stapelberg.ch/posts/2026-02-01-coding-agent-...
If you want something not NixOS-related, smolmachines.com (I haven't tried this yet) gets mentioned here a lot.
Today I used Claude Desktop after not having used it for a while. It ran bash commands on my machine, like starting brew services etc. It did not have that capability before (I used to hook up some mcp to allow selective file editing), and nobody warned me that it currently has. Shady tactics, very invasive, freaked me out.
A brief story of these agentic harnesses, from the perspective of a dev that barely used them.
I remember when opencode was out, I installed it as a separate user and tried it and it was cool.
Then Copy.fail came out, and I worried that a separate user really wasn't enough, but I felt I was overworrying at this point.
Then it worked fine and I felt silly for going through the trouble of a separate user even.
Then the opencode guys started self developing the tool itself and it became slop, this was like 2 months into the fad, and it was clear the quality merited uninstalling the thing, even if it did some cool magic ( https://github.com/anomalyco/opencode/issues?q=is%3Aissue+au... )
Then Codex came out, and uninstalling opencode became the optimal move, if only because it removes a third party. It's one of those things where people will continue to use it out of inertia (either legacy code, or people reading/watching old tutorials), like using Axios in 2026 after Fetch was made standard, or using Mono after Microsoft released multiplatform dotnet.
Everything was good for some time, but then it quickly became obvious that OpenAI wasn't developing this tool, but rather letting it build itself, which results in a lot of slop (High RAM usage, inefficient looping that only works out of sheer GPU power and tight token limits, resulting in Skinner-box based development)
Then I uninstalled Codex, but this Pi thing came out, from the authorship of the dude from Flask, but I'm tapping out here, then Jev came out and I'm just not playing this game, good luck to everyone who is using these things.
It feels like this is an attrition game where we are waiting for the bubble to pop, but the bubble is made very long to tempt people into taking the bait. I'm betting the house on the day of reckoning, and hope that those that didn't take the AI bait, (or took the AI pill and repented) will be one of the few players left with a reputation.
I remember going in interviews and people asking me if I could use these tools, they wanted to see what projects I made, but I wasn't comfortable even showing a Chess Engine thing, like I didn't make this, this is not what I'm going to be delivering professionally, I'd rather be unemployed for a couple of months or years if that's what it takes, I'm not vibecoding for a salary sorry.