Why Coding Agents Keep Ending Up in the Terminal
There’s a pattern worth noticing. Most of the serious agent harness projects have landed on terminal-first workflows: Codex CLI, Claude Code, OpenCode, and others. Even the ones with a GUI end up using the terminal as the real control surface.
I don’t think this is just design inertia. I think it’s practical.
Agents can propose changes and run commands fast. If you can’t see what they did and why, all you’re automating is uncertainty. Terminals make actions visible by default. You get explicit commands, file paths, diffs, and a tight feedback loop. That’s the stuff trust is built on.

Review bandwidth matters too. For most of the work I do, the bottleneck isn’t execution. It’s reviewing what the agent produced. Terminal workflows naturally break things into small units: run a command, see output, apply a patch, run a check, stop. You can keep moving without having to take anything on faith.
Composability is a big part of it too. CLI tools chain together. Search flows into edit, edit flows into test, test flows into packaging. Agent harnesses can sit on top of tools that already exist instead of reinventing them. The harness doesn’t need to be a full IDE. It just needs to orchestrate a few steps across familiar tools.
Then there’s blast radius. Both Codex CLI and Claude Code have landed on similar controls here: OS-level sandboxing (Seatbelt on macOS, Landlock or bubblewrap on Linux), tiered approval policies, and optional OpenTelemetry logging. The terminal makes those controls easy to enforce. “Only these directories, only these commands, ask before anything risky, log everything” - that falls out naturally.
Both tools also have escape hatches for when the sandbox gets in the way (--dangerously-bypass-approvals-and-sandbox in Codex, dangerouslyDisableSandbox in Claude Code). And audit logging is opt-in, not on by default. The knobs are there. Whether you use them is up to you.
Terminals also fit how I actually work. I run agents locally and over SSH. I can log everything. I can paste exact reproduction steps into a ticket without screenshotting UI state. That kind of portability matters when you’re switching between machines.
Terminal-first agent harnesses aren’t trying to be magical. They’re trying to trustable while still getting the job done with the least amount of overhead. That’s why they keep winning.
Further reading: