Let’s Try Out OpenCode UI
A hands-on look at OpenCode’s new desktop UI, comparing it with VSCode and Claude Code and exploring where a GUI coding harness improves the agent experience. The post highlights OpenCode’s strengths in focus, tool design, and subagent workflows, while noting that the space is still evolving.
One of the biggest innovations in agentic coding is surely Claude Code. Before then, AI in programming was asking questions in a separate window, or having fancy autocomplete in your IDE. But Claude Code was a different approach: it ran outside of your favourite editor, and it just did things by itself — it could read and edit files, run commands, and you could just generally let it run by itself. And the magic wasn’t just the agent doing the work, but the harness — i.e. Claude Code — wrapping the agent.
Since then, coding harnesses have become ubiquitous, but a lot of the current state-of-the-art tools (Codex CLI, OpenCode, pi, etc) still look a lot like Claude Code — they're all shortcut-driven, slash-command-oriented interfaces, and most importantly, they're all terminal-based — they’re all TUIs.
But that is slowly changing as more and more GUI tools come out promising to do the same thing as their TUI counterparts, but without being stuck in the terminal. So I spent the last couple of weeks exploring OpenCode’s new desktop application to put it through its paces.
My Baseline: VSCode and Claude Code
It’s odd to start a review by talking about other tools, but I want to set a bit of a baseline for what I’m expecting, so we’re all on the same page. Up until now, my daily drivers have been a combination of VSCode and Claude Code. They’re both good in their own way, but they have different strengths and weaknesses.
VSCode is primarily a text editor. This is both its biggest strength and its biggest weakness. As a strength, it means that there is a wide ecosystem of extensions that can be leveraged by the agent in different ways (for example the agent can access the warnings shown by existing linting plugins, or run tests provided by test runner extensions). As a weakness, it means that it’s difficult to get away from the editor part — even if I make the agent chat fullscreen, VSCode will regularly collapse it down again to show me other files or panes that I’m not interested in. Similarly, I can pop a single agent chat into a new window and focus on that, but once I do that, I can’t easily switch between different sessions.
The other issue with VSCode is the sheer number of tools available, which can overwhelm a lot of models, especially when adding only a very small number of custom tools or MCPs. The harness does try to optimise which tools the agent sees, but this has its own flaws. Even some of the extension-based features can get in the way sometimes — when there’s an integrated test runner, but also the ability to run a test command directly, I’ve seen agents waste cycles and tokens trying to figure out which one will work best.
In the other corner sits Claude Code. As I said before, Claude Code had a huge effect on how people code with agents. It’s a very well-optimised harness — few excess tools to waste your tokens on, and the existing tools are optimised to be easy for Anthropic’s own models to understand. It’s also the place where a lot of the features that we now take for granted first appeared.
On the other hand, the UI is often difficult to read. The limitations of the terminal mean that it’s difficult to clearly indicate hierarchy, which means it’s not always obvious at a glance whether text is coming from the agent, a tool call, system messages, or something else. The lack of interactivity can also make things more complicated to use. For example, to expand tool calls, I need to press a shortcut which expands all tool calls globally, creating a lot of noise in my terminal that I need to scroll through to find the text I’m interested in.
Clearly there has to be a better approach — something with the visual strengths of VSCode, but the focus on agentic coding of Claude Code.
Introducing: OpenCode (as a UI)
When I first started playing around with coding harnesses, one of the ones I quite liked was the TUI version of OpenCode. Well now they’ve released a GUI version of the same tool.
The result is a clean interface that feels similar to the VSCode interface, but with access to everything in one window. On the left I have a sidebar containing different projects I’m working on, and for each project I can jump between different sessions within that project. On the right I can see a list of changes made this session, and even a file tree (although these only work if the project folder contains a git repository, unfortunately). In the middle, front and center, is my chat — exactly where I want it so I can focus on it.
OpenCode also makes use of the more powerful GUI. It’s easy to explore a session in more detail by clicking around and letting things expand. That’s not to say it’s perfect — some tool calls have quite limited representations, meaning it’s difficult to see what the agent actually saw — but it’s significantly easier to use than its terminal counterparts.
Beyond the UI, OpenCode also clearly takes after Claude Code in providing a slimmed-down but feature-complete set of tools. In the last couple of weeks using OpenCode, I’ve rarely if ever seen cases where the agent has struggled to use the tools available to it, or had to think hard about what tools to use.
The most impressive feature here is the subagents. OpenCode’s subagents are persistent, which means the agent you’re working with can go back to the same subagent multiple times and ask it additional questions. I ran into this recently when a subagent doing a code review hallucinated a bug in the code that didn’t exist. The main agent tried to write a test that could reproduce this bug, couldn’t (because it didn’t exist), and then went back to the same subagent to get more details and figure out what had gone wrong.
These powerful subagents are also presented nicely in the UI. In the chat log, I can see where subagent runs occur, and click on them. This opens the same chat pane that I’d use to interact with the main agent, where I can see the conversation history, and even send additional steering messages. This is great for orchestrator-style workflows where most of the work is being done by subagents, because it means I can go in and fix things when a subagent gets stuck implementing something.
To be clear, I don’t think OpenCode is the pinnacle of what coding harnesses can be, at least not yet. The UI definitely lacks the polish of VSCode’s, although it’s a significant improvement on terminal equivalents. I’m aware that there are also other competitors in this space, including Claude Code Desktop, and I’m hopeful that UIs like these represent better ways of interacting with coding agents at a higher level.
)
)
)
)
)
)
)
)
)