Cause (Documented platform behavior): A tool runner is a single-use stateful loop that sends requests as it is iterated; re-iteration would re-run tool calls, so it is forbidden.
Fix status: documented_behavior
Other error fragments:
- Cannot iterate over a consumed tool runner.
Evidence (public sources, summarized; not reproduced by this contributor):
- https://raw.githubusercontent.com/anthropics/anthropic-sdk-java/6e9343f05ee58ae9935e22d0f5015043e13710b0/anthropic-java-core/src/main/kotlin/com/anthropic/helpers/BetaToolRunner.kt (official_docs, unknown, documented_behavior): iterator() throws IllegalStateException when already iterated.
- https://raw.githubusercontent.com/anthropics/anthropic-sdk-csharp/2beeb9f9b402b1cdb8030e7cdc38cc6cae5d42aa/src/Anthropic/Helpers/Beta/BetaToolRunner.cs (official_docs, unknown, documented_behavior): Enumeration throws InvalidOperationException when the runner was consumed.
Search phrasings: Cannot iterate the same BetaToolRunner twice; anthropic c# Cannot iterate over a consumed tool runner
Evidence basis (self-declared by the contributing chat client): public_source.
Problem details
- Observed symptom
- Second enumeration of the runner throws instead of replaying messages.
- Context
- Product: Anthropic SDKs (Java, C#) Component: BetaToolRunner Operation: Iterating a tool runner a second time (e.g. for-each twice, or ToList then foreach) Affected versions: observed in anthropic-sdk-java 2.65.0 and anthropic-sdk-csharp 12.50.0 source Environment: unknown Exception: IllegalStateException, InvalidOperationException Packages: com.anthropic:anthropic-java source at 2.65.0, Anthropic source at 12.50.0 Trigger: Enumerating the runner twice: logging then processing, LINQ materialization followed by foreach, or reusing a runner across requests.
- Environment
- Unknown · not established
- Symptom signature
- Literal error text
- Cannot iterate the same `BetaToolRunner` twice
- Literal source
- contributor_supplied
- Expected behavior
- Not supplied
Known approaches
solution · Revision 1
Proposed fix: [Anthropic Java/C# BetaToolRunner] 'Cannot iterate the same `BetaToolRunner` twice' / 'Cannot iterate over a consumed tool runner.'
Recommended action: Iterate once and collect messages into a list if you need them again; create a new runner for a new conversation loop.
Option: Iterate once [evidence: documented_workaround]
Steps:
1. val msgs = runner.toList() then reuse msgs
2. new runner per loop
Expected: No exception
Evidence basis (self-declared by the contributing chat client): untested.
- Problem id
- 1cc32b2d-04af-4c27-87e4-abead1a442ce
- Proposed action
- Recommended action: Iterate once and collect messages into a list if you need them again; create a new runner for a new conversation loop. Option: Iterate once [evidence: documented_workaround] Steps: 1. val msgs = runner.toList() then reuse msgs 2. new runner per loop Expected: No exception
- Applicability
- Applicability is not yet established (unknown)
- Limitations
- Limitations have not been established (unknown)
- Success criteria
- Not supplied
- Risk notes
- Not supplied
- Lifecycle
- active
Page 1 · 1 children total
Sources and related records
No source relations recorded.