---
title: "Think Tool"
description: "Anthropic's technique of giving an LLM a no-op 'think' tool so it can persist structured reasoning into context before complex tool calls."
section: "concepts"
type: "concept"
created: "2026-08-30"
updated: "2026-08-30"
confidence: "high"
tags: ["agents", "tool-use", "patterns"]
canonical: "https://pyweb.dev/wiki/think-tool"
---
# Think Tool

Anthropic's think-tool technique: give the LLM a **`think` tool that does nothing** — its `execute` simply returns the `thought` argument passed to it. The value is not an action but a **structured pause**: the thought is appended to the message history, saving important information in context so later iterations of the [tool calling loop](/wiki/tool-calling-loop) can make better decisions.^[raw/aihero/implementing-anthropics-think-tool-in-typescript.md]

```mermaid
flowchart LR
    A["Complex tool call"] --> T["Think (no-op)"] --> B["Next tool call, informed"]
```

## Mechanics
The tool is ordinary tool-calling: a description ("use it when complex reasoning or some cache memory is needed — it will not obtain new information or change the database, just append the thought to the log") plus a JSON-schema `thought: string` parameter. The `execute` function returns the thought unchanged; persistence in the [llm message protocol](/wiki/llm-message-protocol) history does the rest. Echoes ReAct and Reflexion.

## Why It Works
The model gets an explicit, schedulable slot to reflect between steps instead of cramming all reasoning into one response — a tool-surface application of the same principle behind [smart zone](/wiki/smart-zone) and context staging: put the right information in the right place in history for the decision that needs it.

## Failure Modes

| Symptom | Root cause | Fix |
|---|---|---|
| Tool call storms without progress | Agent retries failing calls blindly | Force a think step after every failed call; log the diagnosis |
| Notes ignored on later turns | Scratchpad not re-injected | Re-inject the note summary into subsequent prompts |
| Think used as a delay tactic | No binding between thoughts and next action | Each thought must name the next concrete action |

## Rule of Thumb

One thought per decision point; a thought that does not change the next
action was wasted context.

## Related
[tool calling loop](/wiki/tool-calling-loop), [llm message protocol](/wiki/llm-message-protocol), [generator evaluator loop](/wiki/generator-evaluator-loop), [smart zone](/wiki/smart-zone), [context engineering](/wiki/context-engineering).

---

## Agent Navigation

cluster: llm-fundamentals (8 pages) | betweenness: 6.7

### References (outbound)
- [Tool Calling Loop](https://pyweb.dev/wiki/tool-calling-loop.md)
- [LLM Message Protocol](https://pyweb.dev/wiki/llm-message-protocol.md)
- [Smart Zone](https://pyweb.dev/wiki/smart-zone.md)

### Referenced by (inbound)
- [LLM App Improvement Ladder](https://pyweb.dev/wiki/llm-app-improvement-ladder.md)

### Evidence (verified primary sources)
- raw/aihero/implementing-anthropics-think-tool-in-typescript.md (internal workspace doc)

### Machine endpoints
- Knowledge graph: https://pyweb.dev/api/graph.json
- Graph analysis: https://pyweb.dev/api/graph-analysis.json
- Context index: https://pyweb.dev/llms.txt
