For some months now I have been working on my own take on the “terminal based coding agent”. It started out as a learning project, but has since progressed to the point where I use it every day for my professional work as well.
Unlike most other such recent programs like Claude Code, CodexCLI, etc. the program does not provide a Curses style user interface. Instead my inspiration is the interactive read eval print loop offered by programming languages such as Scheme and Common Lisp. More prosaically, it’s also similar to an interactive UNIX shell plus Lisp-style extension command. The entire “UI” (such as it is) is just text.
In general I find that the REPL metaphor, which is inherently language based, is more interesting and powerful than the “text user interface” (TUI) model which is much more limited. The latter brings to mind the green screen terminal programs which were historically used for data entry / form processing, and which guide the user through a more specific process or workflow that the software designer has prepared for them in advance. Although it can be very efficient for specific use cases, it removes flexibility and power from the end user in exchange for that.
Although it must be said in fairness that many of the modern terminal based coding agents also provide REPLs in the broader sense, I still don’t like the paradigm very much due to the intertwining of “user interface drawing boxes” and “interactive shell language” which in my view they conflate, to the detriment of both UI design and language design. For example, imagine that in order to use POSIX shell, you had to adopt some specific curses TUI with it? This conflation of concerns is a real design error IMO.
Another issue I have with the terminal based coding agents is that, having checked out the codebases and poked around a bit , many of them have a problem with Way Too Much Code ™ for my taste. When last I looked at Codex CLI, it had approximately 60,000 lines of code. I honestly don’t know what all that code is doing. No doubt it is serving some need that OpenAI has for the program in terms of enterprise integrations or features or whatever. But I am not really excited about running 60k lines of code (given the concomitant bugs to lines of code ratio that has been shown to be fairly constant over the years) in order to talk to some APIs and do a bit of processing on the output.