# X_LLM_TOOL_ARGUMENTS_INVALID

## Means

a finished turn called a tool with arguments that are not JSON

## Typical cause

the model completed its turn (the stop reason is not a truncation) and the argument string of a tool call does not parse — or streamed fragments carried no index and no id, so two calls could not be told apart. The provider answered and billed: `meta.billed` carries the usage and cost, the gateway records them on the ledger and does not retry. A turn cut off mid-arguments is `X_LLM_TRUNCATED` instead. `terminal` for a job: it dead-letters on the first attempt

## Fix

`maxTokens: 8192` on the `llm()` / `agent()` declaration if the arguments were long, and shorten or split the string fields of the tool's input schema; to run the same request once more, catch the code in the job and re-enqueue it deliberately — a retry policy does not apply

[MCP and AI](/error-codes#mcp-and-ai)
