mirror of
https://github.com/open-webui/computer.git
synced 2026-11-05 01:17:24 +00:00
[GH-ISSUE #197] bug: every tool call renders as agent_tool to OpenAI-compatible clients #117
Labels
No labels
enhancement
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
open-webui/computer#117
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @penradioGables on GitHub (Jul 28, 2026).
Original GitHub issue: https://github.com/open-webui/computer/issues/197
Summary
Every tool call in an assistant response renders to OpenAI-compatible clients as the literal text
`agent_tool`— whether it was Bash, Read, Edit, or Grep. Two halves of the code disagree about where the tool name lives.Verified still present in v0.9.15 — both
cptr/utils/agents/claude_code.pyandcptr/routers/gateway.pyare byte-identical between thev0.9.10andv0.9.15tags.Root cause
The Claude Code and opencode adapters deliberately emit a placeholder name and stash the real one under
arguments["title"](claude_code.pyL88):…while the gateway's renderer reads only
item["name"](gateway.pyL64–69):Adapters that don't use the title convention (codex, pi) render correctly, which is presumably how this survived — it only affects the adapters that set the placeholder.
This is cosmetic but total: in Open WebUI every tool call is indistinguishable from every other one, which reads as noise rather than as signal.
Suggested fix
Prefer
arguments["title"]when present, fall back toitem["name"]. That is a no-op for codex/pi and fixes claude_code/opencode.Interaction with the missing-arguments issue, worth deciding together
The natural follow-on — rendering the argument too, e.g.
`Bash` — `git status --short`— is impossible while tool arguments are dropped at ingest (filed separately), and still impossible atstatus == "in_progress"even after that is fixed, because the arguments genuinely have not been streamed yet at that point.Making that work means moving the render to
status == "completed". That costs nothing in latency: "completed" here means the model finished emitting the call, not the tool finished running.Happy to open a PR for the name fix alone, or for both together if you want the argument rendered.
@tjbck commented on GitHub (Jul 31, 2026):
Addressed!