Codex CLI installs a persistent, self-updating background daemon by default
github.com
github.com
[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.--
1: https://github.com/openai/codex/blob/0c329ad2c9d5a2592128a1d...
codex features disable daemon_auto_start
codex app-server daemon stop
pkill -f 'app-server daemon pid-update-loop'
[1] - https://github.com/openai/codex/issues/48195People moan about how badly made Claude code is but Codex seems much worse on every metric
https://x.com/FlorianKluge/status/2041855675295318039
(Whether that's against the ToS is not clear.)
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…
E.g. OpenCode can be used with all three methods. Looks like it needs a plugin for the two Claude methods, though.
Anyone experiences with it?
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.
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.
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.
And it worked. I'm switching to this unless i find a reason not to.
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.
It's like fighting fire by employing an arsonist.
It’s simple, deterministic stuff. At least most of the time.
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.
It should be the harness responsibility to create / destroy things like worktrees and scratch spaces, and communicate to the agent (e.g. via system prompt) where the scratch space is and its purge schedule. Harness should also set appropriate env vars to make this work in tools.
> 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 think fixing it is just not high on the priority list.
...are you sure it wouldn't consider your personal files garbage?
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??
But, I'm just wondering.
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)
Its the only way I trust to install anything from these companies.
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.
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?
But in the same fix, they also removed the reasoning-sample, which kinda sucked.
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.
https://github.com/openai/codex/issues/52251#issuecomment-60...
- 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.
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.
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 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).
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…
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.
Claude: probably not (officially against the rules after the openclaw fiasco)
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.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.
TLDR: They don't care.
The future is here! It's a shame it has to be _this_ future...
systemd-run --user --pty --wait --collect -p TimeoutStopSec=5s -- "$@"I think it's a crazy notion given what I see these things do and generate, and hoped they would too after recent incidents.
Maybe this kind of stuff is standard for some people but I absolutely loathe auto updating software for many reasons
https://www.firefox.com/en-US/firefox/141.0/releasenotes/#:~...
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 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.
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
What? Pinning a browser?
First thing it'll want to do after starting is update itself to newest version anyway.
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?
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
Auto-update systems have value but are not a suitable default for professional tools.
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?
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.
Not trying to sing praises; i think opencode is doing a bunch of weird stuff too but it's not codex level.
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.
Ant doesn't do this. (Anymore)
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
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.)
[Edit: yes, that is kind of the idea. Native version has better features because it can access them.]
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.
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.
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...
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.
Maybe thats just the tool nerd in me that just wants the perfect tool for every job.
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.
This blogpost describes a similar thing: https://bxt.rs/blog/easy-sandboxing-on-linux-with-bubblewrap...
Maybe it's like online services/tools. Use them until they are VCed and gone pivoting and then move to another tool.
Legit bugs still open 6 months on.. It's a bit ironic
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.
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.
And they can't seem to go two whole months without scrolling breaking in some new way.
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
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.
Listed a few in my other comment
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.
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.
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
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 think that's exactly the standpoint of Yann LeCun.
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.
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.
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?
That is exactly why it is so bad. Tokens spent generate code. Large amounts of code is a liability.
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.
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.
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.
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.
> [...] 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.
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.
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.
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
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.
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.
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.
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.
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.
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.
~/.codex/config.toml
[features]
daemon_auto_start = false
hell, I also have this redundancy configured in bash: codex() {
command codex --no-daemon "${@:-.}"
}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?
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.
I don't know how and why they ruined this CLI with needless "features". It was perfectly usable two weeks ago.
I remember them from way back on Windows 98 and no one seems to care to hide them (?).
—no-daemon is the way, but still feels like the noose is tightening …
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.
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.
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.