Claude Academy
Sign in

Vault / wiki/201/parallel-tool-use.md

updated 2026-05-28

Parallel Tool Use

Claude can emit multiple tool_use blocks in a single assistant turn when the calls are independent. Executing them in parallel cuts agent loop latency dramatically.

How it works

If the user asks "What's the weather in NYC and London?", Claude may return:

{
  "content": [
    {"type": "tool_use", "id": "1", "name": "get_weather", "input": {"city": "NYC"}},
    {"type": "tool_use", "id": "2", "name": "get_weather", "input": {"city": "London"}}
  ],
  "stop_reason": "tool_use"
}

You run both, then send a single user turn with both tool_result blocks:

{
  "role": "user",
  "content": [
    {"type": "tool_result", "tool_use_id": "1", "content": "..."},
    {"type": "tool_result", "tool_use_id": "2", "content": "..."}
  ]
}

Encouraging parallelism

Claude is more likely to parallelize when:

  • Tools have clearly independent purposes.
  • The user query has multiple separable parts.
  • Tool descriptions explicitly allow it ("This tool is safe to call in parallel with others").

You can also nudge with a system prompt line:

When multiple tool calls are needed and they do not depend on each other's
outputs, emit all of them in a single turn so they can run in parallel.

Anti-pattern: sequential dependencies

If tool B needs the output of tool A, Claude should sequentially split them across turns. Forcing parallel when there's a dependency = nonsense input to tool B.

See also