The problem is TUIs. Or at least the assumption you're only supposed to use a TUI. There are plaintext ways to invoke things but the advertised Claude/Codex experience is a TUI. You can't pipe the contents because it's not next - it's instructions to draw to the terminal.
<humor>TUIs are the new podcast! With everyone asking you to invoke tools via a TUI, there was nobody left to write actual tools.</humor>
TLDR - make sure you support plain text too ;)
Erlang processes are in no way what's commonly called "persistent" - there's no way to persist them automatically (ie. freeze to disk and wake later). It's even preferred to either use external databases like Mnesia or manually implement persistence in the actor itself for robustness.
The only even slightly mainstream persistent environment is Smalltalk with its images.
For Linux there's also CRIU, but that has quite a few caveats.
If the definition of "persistent" is "processes run until they're done or they crash", well, pretty much everything fulfils that, so the distinction is meaningless.
> "You can send messages to a process from a terminal, from another process, from a web socket, from anywhere."
Also technically wrong. This only works if you have a cluster of erlang nodes already set up in full mesh mode. It's not auto-discoverable, scalable, P2P or anything remotely like that. If you want that, it's outside the Erlang stdlib. Websockets etc. need to be manually proxied. There's no standard protocol, security boundary or anything...
Ugh, actually I give up, there's too many mistakes to even go into.
Final opinion: slop.
What they want is a framework for persisting stuff... that is an application level service... go ahead and build one.
Clients and daemons end up relying of fairly heavyweight protocols to chat (dbus, various DB protocols, grpc), and it feels cumbersome, and means leaving the native paradigm of the shell anyways when we drift into these protocols.
Its not an agent problem specifically: this is a meta-crisis. There is an ongoing meta-thread about "the tyranny of the application", that it contains its process and is bad at sharing, that the data is the thing and multiple tools ought be able to coordinate around the data. This extends to CLI programs too! They too are really not good at making the state they hold (as both a Model of the data and as a ViewModel over their interfaces) available, extropic.
Plan9 is as close as we've gotten to addressing this. We could implement more 9p protocol or Filesystems in UserSpacE (FUSE) programs to make their state easily available.
Turso has an interesting agentfs, which is just a filesystem that happens to be on Turso, their sqlite compatible rust database. This is a bit generic of a filesystem, isn't very application specific. But it is intended for agent use, and it uses FUSE, so is definitely notable here. It would be neat to see this adapted to expose more interesting application specific payloads. Their intro post: The Missing Abstraction for AI Agents: The Agent Filesystem https://turso.tech/blog/agentfs https://turso.tech/blog/agentfs-fuse
(The sqlite compatible backing here would also allow for interesting SQL based processing of the state too, which could be a bonus; you now have dual interfaces, fs or DB, for the same data)
I feel like OP’s main gripe is that persistent interactive sessions should be supported without a third party tool like tmux or screen or zellij, but one of the main strengths of Unix is that it provides platform building blocks which can be composed to create whatever experience you’re looking for.
cat > lib/example.txt <<'EOF'
Line 1
Line 2
EOF
I don't know if Unix isn't for agents but surely they know how to use it.OTP Supervision is listed as one of the primary reasons for this switch. I also noticed: 15,441 lines added / 109,254 lines removed !
There's definitely a bunch of agent related thing out there they have various daemons they kick off. I feel like often this is over some kind of fancy protocol, where there is still a somewhat thick CLI client. I wanted to play around with making a very thin CLI (and with a prefork model in rust) and wrote a little sample repo for myself to explore the idea: it just passes the stdin/stdout/stderr directly to the daemon, for it process with. https://tangled.org/jauntywk.bsky.social/pfd
None of the above for me. I'm using either mosh or emacs --daemon.
xyzsparetimexyz•2h ago