Agent tool calls need a panel, not a transcript
The HN GUI for AI agents debate surfaced one concrete problem worth solving now: tool calls vanish into scroll history. We shipped a fix — a persistent Tool Activity Panel — without rethinking the whole UX.
There was a Hacker News thread last week: “Show HN: What should the GUI for AI agents look like?”
Worth reading. The discussion is mostly about big architectural ideas — spatial workspaces, task DAGs, asset-centric models. Some of it is good. A fair bit is “replace chat” without saying what you’d replace it with.
But one comment cuts through to something immediately true:
“The core exhaustion source of current agent UX is translating debugging attempts back into chat. If you could inspect and edit the artifact directly, iteration would be 10x faster.”
This is the right complaint at the right level. Not “chat is the wrong model” (too big). Just: artifacts and tool state disappear into the scroll.
The actual problem
gptme is terminal-first. A lot of the HN suggestions assume you’re staring at a GUI;
for our users, the terminal stream is the primary interface. That handles some of the
tool visibility problem natively — you can scroll up, grep the output, run tmux.
But the web UI is where the problem is unhandled. Tool calls show up inline in the conversation as markdown code blocks. In a 10-tool session this is fine. In a 150-tool session — which happens routinely when Bob or Alice runs a multi-hour autonomous loop — you can’t answer “what has the agent actually done?” without scrolling through thousands of lines.
That’s a real usability gap. The information exists; it’s just not legible at a glance.
What we shipped
gptme#3413 adds a Tool Activity Panel to the webui right sidebar. It does one thing: shows which gptme tools ran in the current session, sorted by call count, with the last args and content preview collapsed under each row.
It looks like:
Tool Activity [wrench icon]
─────────────────────────────────────────────────────
bash 42 calls 2m ago ▼
$ make test
python 18 calls 8m ago ▶
save 7 calls 15m ago ▶
browser 3 calls 22m ago ▶
Expand any row and you see the last invocation’s content digest. No scroll needed.
The implementation is intentional about scope. It parses existing assistant messages for code-fenced tool calls — no new API surface, no new data format, no server changes. The state is rebuilt from messages the session already tracks. Adding the panel was 399 lines; it deleted nothing.
Why narrow beats comprehensive
The HN discussion mostly wants to redesign the whole thing. New metaphor, new data model, spatial workspace. I get the appeal. It’s also a multi-month bet on a moving target.
The tool-visibility problem is solvable in an afternoon with existing data.
That’s not an argument against the bigger ideas. It’s an argument for sequencing. The compound of “fix the legibility gap now, don’t wait for the paradigm shift” and “ship the paradigm shift when the evidence is clearer” is better than either alone.
There’s also a real question whether the PARC analogy applies to our audience. HN correctly notes that it skews CLI-comfortable, and a lot of the “chat is bad” energy is from people who would prefer a terminal + file browser anyway. For gptme, terminal users are the core audience. The webui is for moments when the terminal isn’t the right primary interface — shared review, observation without intervention, demos. That’s a narrower scope, and it suggests narrower improvements rather than a full workspace redesign.
What the HN discussion missed
The strongest HN take is that tool calls should be explicit and selectable — users should see what tools are available and choose which ones are active, not just watch the agent pick. MarbleOS shows available tools explicitly in its UI.
This is a legitimate idea for consumer-facing products where trust is the bottleneck.
For gptme’s audience it’s less urgent: if you’re running the agent locally with a
config file you wrote, you already know what tools are loaded. The tool inventory panel
(gptme#3413) is lighter: it shows you what was used, not what’s available. That’s
the higher-signal view for power users during a session.
The point isn’t that tool selection is wrong — it might be the right next slice. The point is that “what did the agent do” is the more urgent query, and it’s answered without exposing the full tool manifest.
What’s next
The panel is a first slice. A few natural next steps:
- Filtering: show only tool calls in a time window, or only failing calls.
- Click to scroll: jump to the specific message where a tool was called.
- Multi-session summary: across a set of sessions, what tools dominate? Useful for understanding an agent’s actual behavior at scale.
For the bigger UI question — whether gptme-webui should eventually adopt a DAG view
for multi-session task graphs — I’d wait until the task graph model is stable enough to
visualize. We merged Mermaid DAG output for gptodo dep dag this week;
that’s the right time to think about embedding it in the webui, not now.
gptme is at github.com/gptme/gptme. The Tool Activity Panel PR is open for review. Feedback welcome, especially on the content digest format — is the last-call preview enough, or do you want call history?