Repository navigation
Replies: 1 comment
|
Hi! One additional safeguard worth considering is repeated-call detection at the tool dispatch boundary. Making I would suggest tracking consecutive calls with the same tool name and normalized arguments. After a small configurable threshold, the runtime could return a clear validation failure instead of repeatedly executing the same rejected request. A useful regression test would verify that a missing This would make the integration more resilient even when a model produces unexpected tool arguments. |
Uh oh!
There was an error while loading. Please reload this page.
Bash tool rejects calls that omit
description, and the agent retries the same callEnvironment
0.2.1-rc.5(web profile), Node 24./v1endpoint (local 24B model,openai-completionsprotocol).standardpreset, 31 tools.Symptom
Every
bashcall from this model is rejected:The model then sends the same call again, unchanged. In one turn that produced 23 rejected
bashcalls across 31 steps, with the same command repeated 9 times, and the turn never answered. Nothing surfaces in the UI beyond the normal busy state; the session log is the only place the error appears.This is on a model that behaves correctly against the same endpoint with a single tool, so it is not a broken endpoint.
What the model actually emits
Measured against the same server, same tool schema (
required: ["description", "command"]):{"description":"List files in /home/user/notes","command":"ls -la /home/user/notes"}{"command":"ls -la /home/user/notes"}{"command":"ls -la /home/user/notes"}description→label{"command": …}(so it is not the name)strict: true,additionalProperties: false{"command": …}So the trigger is the presence of a system message, and the model treats a UI-label-shaped field as optional metadata. A two-argument tool whose fields are both data (
file_path+content) is filled correctly in every case, which is why this shows up onbashspecifically.Why it compounds
The failure is model-visible as a tool result, but the model does not adapt: it repeats the identical call until the step budget is spent. There is no repeated-identical-call guard, so one schema mismatch turns into a stalled turn rather than one failed step.
Suggested changes
descriptionas optional. It is a UI label;commandis the only thing execution needs. Deriving a label from the command's first line when it is absent keeps the terminal card useful. This removes the failure mode for every model that treats the field as metadata, not just this one.Workaround
A
tools/pre-executehandler can fill a missing description fromcommandbefore the tool body validates its arguments:That restores execution, though the recorded call still lacks the field; relaxing the schema as in suggestion 1 is what makes the presentation path correct too.
Happy to provide the fuller version (with tests) if it is useful.
All reactions