{"version":"2.1.228","anchor":"refusals-now-stop-the-tool-loop","canonical_anchor":"refusals-now-stop-the-tool-loop","heading":"Refusals now stop the tool loop","tier":"notice","area":"Tool Calls","scope":null,"heads_up":null,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.228\/e\/refusals-now-stop-the-tool-loop","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.228","markdown":"### Refusals now stop the tool loop\n\nWhen Claude refuses, the turn now ends rather than the tool loop grinding on.\n\n**What**\n\nWhen the model refuses, the assistant turn ends there instead of the tool loop continuing on. The refusal category is also carried through, so refusal telemetry reports why.\n\n**Details**\n\n- Both streaming accumulators copy `stop_details` from the message delta onto the accumulated message.\n- The loop breaks when `stop_reason` is `refusal`.\n- `stop_details.category` feeds the existing refusal-fallback telemetry fields.\n\n**Evidence**\n\n`stop_details`\n\n- Area: Tool Calls\n- Tier: You'll notice\n- Useful: 3\/5\n- Signal: 3\/5"}