action-dispatched tools: required params and valid action/op values aren't in the schema, so first calls error-and-retry #716
Labels
No labels
breaking
bug
documentation
enhancement
epic
good first issue
help wanted
refactoring
resolution/duplicate
resolution/invalid
resolution/wontfix
security
severity/critical
severity/high
severity/low
severity/medium
status/abandoned
status/blocked
status/needs-decision
status/needs-info
status/needs-verification
testing
upstream
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
sixfold-space/madtea#716
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?
What happens
The action-dispatched tools (ADR 0015) expose one flat input schema per tool. The valid
action/opvalues, the per-action required params, and the canonical param names are not in that schema - they live inmadt_helpand the prose. So a call made without first readingmadt_helpfor that exact action gets a server-side error and a retry. Each miss is a wasted round-trip (turns and tokens), which is the cost the schema should remove.Evidence (one session)
madt_searchwith noaction->required: action; and withquery=->unknown argument query (valid: ..., q, ...).madt_branch_create name=...->unknown argument name (did you mean base?) - name= was renamed to branch=(a rename old habits and docs still miss).madt_issues action=bodywith noop->required field op is empty.madt_issues action=delete-> not a valid action (only discoverable by hitting the enum).The error messages are good - they name the valid args, so each miss self-corrects in one step. But the step is a round-trip a self-sufficient schema would save.
Why it matters
"Call these tools directly" is the stated agent contract, yet the schema alone is not enough to call them correctly - so an agent either pre-reads help for every action or errors, both round-trips. ADR 0005 (parameter-name ergonomics) and ADR 0008 (the registry renders action/op summaries inline) aim at exactly this; the cases above are where it is not yet realized.
Possible fixes
actionandopas JSON-Schema enums of their valid values, so a bad value is rejected client-side before the round-trip.action), or at least in each action's inline summary.name->branch) loudly.Related
Agent-call-form drift (hook and MCP text naming tools in a form the agent cannot call): #706.