I fired it up, and the first thing I notice is that the arrow keys don't work. I can't select Claude Code. Oh, apparently it's in a different control, so I have to press Tab, and then the arrow keys work. Wow, this list of buttons has a slow scrolling animation when navigating it. Can I turn that off? Press enter on Claude, now I'm in a tiny modal window. Press enter, because I want to do the obvious thing, but apparently the obvious thing is "show in launcher", so the background of the modal is weirdly changing while a tiny single character inside the button is indicating that this is the part I'm supposed to be focusing on. No, I want to do the obvious thing of running Claude code. You could easily fit the 4 actions of this form on my screen, but by choosing to use a tiny modal window you're now forcing yourself to use another modal drop-down control to choose the action and a separate "yes actually do it" button, so the OBVIOUS ACTION of RUN THIS AGENT requires pressing tab, enter, down, down, down, enter, tab, enter. Great. Now I'm at a chat interface with an error screen, because it isn't installed. Quit the program, restart, enter, tab, enter, down, down, enter, tab, enter to install. It shows a successful run of the "ACP adapter" for claude. Shift-tab, enter, down, enter, tab, enter. Now I'm back at exactly the same error screen because apparently the install didn't work. Now, I know that you need to be running "npx @zed-industries/claude-code-acp", so I check the docs and apparently I can "toad run COMMAND". But it doesn't work for multi-word commands. And my trial with toad comes to an end.
So I can't test it for anything actually useful right now, but I'll add this to my list of projects to watch. Hopefully, being a UX-focused project, the creator actually focuses on the UX and fixes some of these silly decisions.
It's possible this is just part of the learning curve, but it is making me think I'll have to come back to this project in a month or two to see if there are fewer pain points. Great work so far though.
Toad works the same way as a browser. Tab and shift+tab to move focus. Cursor keys move within the control. That's what is happening on the front page. If you don't like the keyboard control, you could always just use your mouse to click stuff.
The agent modal works in the same way. Tab to focus a control. The currently focused control is highlighted with a really obvious accent color. Seriously, this is how web pages work. Try it with this one.
Tiny modal? It had some padding around it, but there is plenty of space for the contents. 100x20 characters IIRC. Unless you have shrunk your terminal down to less than that.
The commands are provided by the creators of the agents. If they fail for any reason, there is probably some kind of error message you could use for tech support. You would get the same result running the command outside of Toad. But I don't think you were interested in fixing it, as you would have mentioned an error message.
> so the OBVIOUS ACTION of RUN THIS AGENT requires pressing tab, enter, down, down, down, enter, tab, enter.
Even more obvious would be to press space. Which is displayed prominently in the footer. How did you miss that? It even works from the front page. Highlight the agent, and press space. No need to open the agent modal.
> But it doesn't work for multi-word commands. And my trial with toad comes to an end.
It does work for multi-word commands. But if your command contains a space you will need to wrap it in quotes. This isn't a Toad thing, this is a CLI thing. I imagine you don't work in the terminal much?
> If you don't like the keyboard control, you could always just use your mouse to click stuff. < You're reading me backwards. I like keyboard control, but feel like Textualize is a mouse-first UI library. Pressing arrow keys when launching Toad does nothing because I'm not in a "control". As a user, I am supposed to intuitively know that "Recommended" and "Coding agents" are "different controls" and so it should be obvious to me that the arrow keys would not navigate between them?
> 100x20 characters IIRC < You have 20 lines to work with and you decided to shove 4 of the 5 actions for the form into a modal control within the modal dialog. That's my point.
> Which is displayed prominently in the footer. < That's rich. You dedicate 3 lines to the "show in launcher" button and a "Go" button and say the one line at the bottom of the screen is "prominently". Also, that message isn't even on the opening screen of the app, presumably because I have a flawed understanding of what a "control" is.
> I don't think you were interested in fixing it, as you would have mentioned an error message.
No, the error message was perfectly clear! That's how I knew the solution. "Agent returned a failure code: 127 - /bin/sh: claude-code-acp: command not found" The solution is to run via npx.
> It does work for multi-word commands. But if your command contains a space you will need to wrap it in quotes. < You are wrong.
$ toad run "npx @zed-industries/claude-code-acp"
Not a directory: npx @zed-industries/claude-code-acp
> I imagine you don't work in the terminal much? < Please don't blame your users for uncovering bugs that your coding agent put in that you didn't catch in review.Anyways, go take your sabbatical, relax, you need it. I do genuinely want a better CLI interface for my coding agents and what you said elsewhere that the landscape is "like building a browser for a single website" is very true. Hopefully you come back with fresh eyes and can make a compelling offering in this space.
For instance, "toad run" takes a path to a directory and not a command (check the usage). You've made an incorrect assumption about how that works, based on previous assumptions on how the UI works.
I would be like to understand why you made the assumptions you did, and make changes based on your feedback. But you've chosen to be combative, for reasons known only to yourself.
For the record, I apologize for the "Mr cranky pants" quip. If you do want to improve this software, join the Discord. Let's keep it civil. Merry Xmas.
> For instance, "toad run" takes a path to a directory and not a command (check the usage). < I stand corrected. I think I was confused because I read this comment <https://news.ycombinator.com/item?id=46370722> ("toad acp COMMAND") and substituted "toad run COMMAND". I saw in the usage that it mentions "PATH" without specifying what it is the path to, and does include a "--agent" flag but with no explanation about what it does. This level of documentation is far from what I would call good, but I'll give it to you that I could have figured that one out. ([append] `toad run` isn't even the right command and as near as I can tell --agent does nothing. But `toad acp` is what I actually wanted and finally I can actually test the app)
> But you've chosen to be combative < My post was snarky but my experience was honest. I don't think I'm being combative. I certainly don't intend to offend you as the creator of the tool, regardless of whether or not I think the tool is high-quality in its current state.
Merry Christmas, I will continue to watch this project. Maybe I will open a discussion in the Github if I end up successfully able to use it with my newfound understanding of the "acp" subcommand.
Textual offers incredibly impressive terminal experiences so I'm very much looking forward to this.
I wonder how much agentic magic it'll be able to include though - Claude Code often seems like a lot of its intelligence comes from the scaffolding, not just the LLM. I'm excited to see!
Check out vibecommander - it’s a young tool in this space with a different take that wraps around CLI coding assistants with IDE-style file and git panels that compliment the experience by letting the human do the code review part of the task seamlessly.
Will add Toad support ASAP, I’m sure they’ll be great together.
Stop trying to convince people to use vim, it sucks, it's got a terrible ux, it's not intuitive, it's overly complicated, hard to learn, arcane, and looks like ass.
First, from my reading of the ACP doc, one thing that seems pretty janky is if the ACP client wants to expose a tool to the agent, e.g. if Toad wanted to add the ability for the agent to display pretty diffs. In the doc they recommend stdio to the ACP server, then stdio to an MCP server, and then some out of band network request back to the ACP client. Have you thought about this, or found a better solution working on Toad?
Similarly, it would be useful to be able to expose a tool which runs a subagent using ACP using a different agent, e.g. if I'm using Claude for coding but I'd like to invoke codex for code review. Have you thought about doing anything like this? Is it feasible over the protocol?
One of the advantages of Toad is that it is vendor agnostic. In the future Toad will be able to run sub agents, and allocate any agent to any job. Still to figure out the UX for that.
1. How has it been working with ACP? Is it anywhere near feature parity with Claude code’s native interface?
2. I see your repo is written in Python which is interesting to me for a responsive TUI. Is it snappy and performant and if so what gave you done to make it feel native? And why did you choose Python?
Python is more than capable of running a TUI. It is just text manipulation after all. Toad uses Textual, which is currently the best TUI library around. I may be biased saying that as I built it...
I was about to try opencode after using claude code for quite a while.
I think understand the fundamental difference in how they work (acp against existing agentic loops with toad vs a single agentic loop for all models with opencode) but I’m curious why we might want toad over something like opencode, which lets me use any model under the sun.
I suppose toad gets to use the highly specialized agentic loops for each cli. And has a nicer (? opencode is pretty slick from my brief usage…).
Curious to hear about why you chose to built this way and what advantages you see.
You get a nice UI that is only going to get better as time goes on.
It’s far better model to separate the agent from the UI. The current situation is like building a browser for a single website.
How are new agents added? Do you have to write a dedicated plugin for each one? Or there's some kind of discovery mechanism?
(I was looking for Copilot, but I guess that will depend on https://github.com/github/copilot-cli/issues/222 ?)
I think they are working in the Copilot ACP layer. Doubt it will take long.
And Copilot isn't supported for now because, well, there is no ACP support
Ideally working with toad to experiment with it.
If an agent can be configured to use Ollama, then you could use it from a Toad. It might be possible right now.
I tried Toad and to me it feels ridiculously slow and laggy. Switching between input and output (ALT+up/down) for example just lags, I can notice the transition. The whole UI lags. It's no wonder, it's python. Simply the wrong language for this, sorry.
I’d be interesting in knowing what platform and terminal you observed the lag, when testing Toad.
I tried Toad and to me it feels ridiculously slow and laggy. Switching between input and output (ALT+up/down) for example just lags, I can notice the transition. The whole UI lags. It's no wonder, it's python. Simply the wrong language for this, sorry.
It worked perfectly and looked splendid doing so.
Excited to dig in further.
It literally is using Claude under the hood. Should be no different than Claude’s own CLI.