thinking-tool-workflows changedbuild-with-claude/thinking-tool-workflows
Nearest release: v2.1.304, published under an hour after this site recorded the change. Shown because the two are within 24 hours of each other. Nothing here says the release caused the edit.
Recorded here
Lines+6added
Lines−64removed
From line
55
where the diff opens
First seen
14 Aug 2026
this site's first read of the page
Recorded edits11to this page, all time
The whole hunk
from line 55, old and new numbered
/
from line 55
5555 ```
5656
5757 ```bash CLI
58 ant messages create --transform content <<'YAML'
58 ant messages create <<'YAML'
5959 model: claude-opus-5-5
6060 max_tokens: 16000
6161 thinking:
from line 313
313313
314314 Each sample is a self-contained script: it repeats the first request, then immediately sends the follow-up using the response it just received.
315315
316 <CodeGroup exclude="shell:cURL">
316 <CodeGroup exclude="shell:cURL, shell:CLI">
317317 <CodeGroupItem language="cURL">
318 This workflow needs more logic than a single shell command. Use the Claude SDK to run it.
318 This workflow needs more logic than a single shell command. Use the [Claude SDK](https://platform.claude.com/docs/en/cli-sdks-libraries/overview) to run it.
319319 </CodeGroupItem>
320320
321 ```bash CLI
322 # First turn: write the assistant content array (thinking and tool_use
323 # blocks, signatures intact) to a file. Routing model-generated text
324 # through a file keeps it out of shell-expansion position later.
325 ant messages create --transform content --format jsonl \
326 > assistant_content.json <<'YAML'
327 model: claude-opus-5-5
328 max_tokens: 16000
329 thinking:
330 type: adaptive
331 tools:
332 - name: get_weather
333 description: Get current weather for a location
334 input_schema:
335 type: object
336 properties:
337 location:
338 type: string
339 description: City name
340 required: [location]
341 messages:
342 - role: user
343 content: What's the weather in Paris?
344 YAML
345
346 # Second turn: jq fills the two null placeholders from the captured file,
347 # so the blocks return verbatim as the assistant message. The thinking
348 # block MUST accompany the tool_use block. The quoted delimiter keeps the
349 # shell from expanding anything in the body.
350 jq --slurpfile blocks assistant_content.json '
351 .messages[1].content = $blocks[0] |
352 .messages[2].content[0].tool_use_id =
353 ($blocks[0][] | select(.type == "tool_use") | .id)
354 ' <<'JSON' | ant messages create
355 {
356 "model": "claude-opus-5-5",
357 "max_tokens": 16000,
358 "thinking": {"type": "adaptive"},
359 "tools": [{
360 "name": "get_weather",
361 "description": "Get current weather for a location",
362 "input_schema": {
363 "type": "object",
364 "properties": {
365 "location": {"type": "string", "description": "City name"}
366 },
367 "required": ["location"]
368 }
369 }],
370 "messages": [
371 {"role": "user", "content": "What's the weather in Paris?"},
372 {"role": "assistant", "content": null},
373 {"role": "user", "content": [{
374 "type": "tool_result",
375 "tool_use_id": null,
376 "content": "Current temperature: 88°F"
377 }]}
378 ]
379 }
380 JSON
381 ```
321 <CodeGroupItem language="CLI">
322 This workflow needs more logic than a single shell command. Use the [Claude SDK](https://platform.claude.com/docs/en/cli-sdks-libraries/overview) to run it.
323 </CodeGroupItem>
382324
383325 ```python Python
384326
No line in this hunk matches that.