Three modes, three behaviors
- auto — model decides whether to call a tool or answer directly. Default for chat.
- required / any — model must call some tool. Useful when you've narrowed the task to tool-only paths.
- tool with name — model must call this specific tool. The cleanest way to enforce JSON schema (Anthropic JSON pattern).
- none — disable tool calling. Useful for the 'just answer' branch of a router.
Why this is a prompt decision
Tool choice changes the contract. If you use required, you've taken "answer directly" off the table; the prompt must make that obvious or the model will produce ill-fitting tool calls. If you use auto, your prompt must tell the model when not to call a tool — otherwise it tool-calls reflexively.