> ## Documentation Index
> Fetch the complete documentation index at: https://docs.rotascale.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Anthropic

> Govern Anthropic with one line: watch_anthropic wraps `messages.create`, and every model call, tool call and retrieval lands on the trajectory.

Claude, through the official SDK.

```python theme={"system"}
import anthropic
from rotascale.middleware import watch_anthropic

client = watch_anthropic(anthropic.Anthropic())
```

That is the whole integration. From here every call the client makes is recorded
on the open trajectory.

## What is distinctive

Tool use is recorded as `tool_call` steps rather than folded into the model call, so a tool the model reached for is visible as its own step with its own taint.

## In context

```python theme={"system"}
from rotascale import Rotascale

client = Rotascale()
agent = client.agent("refund-bot")

with client.witness(agent) as trajectory:
    trajectory.authorize(GRANT, {"tools": ["issue_refund"]}, amount_minor=4_500)
    # ... your Anthropic calls here, already wrapped ...
```

The `witness` block opens the trajectory and closes it on exit, including when
the body raises — an episode that ended badly is exactly the one worth having a
record of.

## Recording without content

```python theme={"system"}
watch_anthropic(client, capture_content=False)
```

Shape and metadata only: model, latency, token counts, tool names. No prompt or
response text. The governed facts are unchanged.

<Tip>
  Authority is never asked for by an adapter. It stays an explicit
  `trajectory.authorize(...)` call, so importing a middleware can never become a
  spend decision. See [authorise an action](/guides/authorise-an-action).
</Tip>
