One read of Claude Developer Platformapi-20261001T213726Z
336 pages moved out of 748 read.
Pages moved
336
significant first
Pages read
748
in this capture
Captured
21:37 UTC
Corpus hash
6a28c636443e
index-hash
What this read moved
151-175 of 336, page 7 of 14This capture is too large to show at once. Changes 151-175 of 336 are below, significant first; the rest are on the following screens.
managed-agents/environments Changed · +76 / -25 lines
#### Risks of unrestricted networking
from line 28
2828 "name": "python-dev",
2929 "config": {
3030 "type": "cloud",
31 "networking": {"type": "unrestricted"}
31 "networking": {"type": "limited", "allow_package_managers": true}
3232 }
3333 }
3434 EOF
from line 46
4646 config:
4747 type: cloud
4848 networking:
49 type: unrestricted
49 type: limited
50 allow_package_managers: true
5051 ```
5152 </File>
5253
from line 59
5859 name="python-dev",
5960 config={
6061 "type": "cloud",
61 "networking": {"type": "unrestricted"},
62 "networking": {"type": "limited", "allow_package_managers": True},
6263 },
6364 )
6465
from line 71
7071 name: "python-dev",
7172 config: {
7273 type: "cloud",
73 networking: { type: "unrestricted" },
74 networking: { type: "limited", allow_package_managers: true },
7475 },
7576 });
7677
from line 84
8384 Name = "python-dev",
8485 Config = new BetaCloudConfigParams
8586 {
86 Networking = new BetaUnrestrictedNetwork(),
87 Networking = new BetaLimitedNetworkParams
88 {
89 AllowPackageManagers = true,
90 },
8791 },
8892 });
8993
from line 100
96100 Config: anthropic.BetaEnvironmentNewParamsConfigUnion{
97101 OfCloud: &anthropic.BetaCloudConfigParams{
98102 Networking: anthropic.BetaCloudConfigParamsNetworkingUnion{
99 OfUnrestricted: &anthropic.BetaUnrestrictedNetworkParam{},
103 OfLimited: &anthropic.BetaLimitedNetworkParams{
104 AllowPackageManagers: anthropic.Bool(true),
105 },
100106 },
101107 },
102108 },
from line 118
112118 var environment = client.beta().environments().create(EnvironmentCreateParams.builder()
113119 .name("python-dev")
114120 .config(BetaCloudConfigParams.builder()
115 .networking(BetaUnrestrictedNetwork.builder().build())
121 .networking(BetaLimitedNetworkParams.builder()
122 .allowPackageManagers(true)
123 .build())
116124 .build())
117125 .build());
118126 IO.println("Environment ID: " + environment.id());
from line 129
121129 ```php PHP
122130 $environment = $client->beta->environments->create(
123131 name: 'python-dev',
124 config: ['type' => 'cloud', 'networking' => ['type' => 'unrestricted']],
132 config: [
133 'type' => 'cloud',
134 'networking' => ['type' => 'limited', 'allow_package_managers' => true],
135 ],
125136 );
126137 echo "Environment ID: {$environment->id}\n";
127138 ```
from line 142
131142 name: "python-dev",
132143 config: {
133144 type: "cloud",
134 networking: {type: "unrestricted"}
145 networking: {type: "limited", allow_package_managers: true}
135146 }
136147 )
137148
from line 150
139150 ```
140151</CodeGroup>
141152
142Use a unique, descriptive `name` so you can tell environments apart.
153Use a unique, descriptive `name` so you can tell environments apart. This example uses `limited` [networking](https://platform.claude.com/docs/en/managed-agents/environments#networking) with package managers allowed, so the sandbox can reach the package registries and code hosts. To let it reach other hosts, add them to `allowed_hosts`.
143154
144155## Use the environment in a session
145156
from line 253
242253 "pip": ["pandas", "numpy", "scikit-learn"],
243254 "npm": ["express"]
244255 },
245 "networking": {"type": "unrestricted"}
256 "networking": {"type": "limited", "allow_package_managers": true}
246257 }
247258 }
248259 EOF
from line 278
267278 npm:
268279 - express
269280 networking:
270 type: unrestricted
281 type: limited
282 allow_package_managers: true
271283 ```
272284 </File>
273285 </CodeGroupItem>
from line 293
281293 "pip": ["pandas", "numpy", "scikit-learn"],
282294 "npm": ["express"],
283295 },
284 "networking": {"type": "unrestricted"},
296 "networking": {"type": "limited", "allow_package_managers": True},
285297 },
286298 )
287299 ```
from line 307
295307 pip: ["pandas", "numpy", "scikit-learn"],
296308 npm: ["express"]
297309 },
298 networking: { type: "unrestricted" }
310 networking: { type: "limited", allow_package_managers: true }
299311 }
300312 });
301313 ```
from line 325
313325 Pip = ["pandas", "numpy", "scikit-learn"],
314326 Npm = ["express"],
315327 },
316 Networking = new BetaUnrestrictedNetwork(),
328 Networking = new BetaLimitedNetworkParams
329 {
330 AllowPackageManagers = true,
331 },
317332 },
318333 });
319334 ```
from line 343
328343 Npm: []string{"express"},
329344 },
330345 Networking: anthropic.BetaCloudConfigParamsNetworkingUnion{
331 OfUnrestricted: &anthropic.BetaUnrestrictedNetworkParam{},
346 OfLimited: &anthropic.BetaLimitedNetworkParams{
347 AllowPackageManagers: anthropic.Bool(true),
348 },
332349 },
333350 },
334351 },
from line 367
350367 .pip(List.of("pandas", "numpy", "scikit-learn"))
351368 .npm(List.of("express"))
352369 .build())
353 .networking(BetaUnrestrictedNetwork.builder().build())
370 .networking(BetaLimitedNetworkParams.builder()
371 .allowPackageManagers(true)
372 .build())
354373 .build())
355374 .build());
356375 ```
from line 383
364383 'pip' => ['pandas', 'numpy', 'scikit-learn'],
365384 'npm' => ['express'],
366385 ],
367 'networking' => ['type' => 'unrestricted'],
386 'networking' => ['type' => 'limited', 'allow_package_managers' => true],
368387 ],
369388 );
370389 ```
from line 397
378397 pip: %w[pandas numpy scikit-learn],
379398 npm: %w[express]
380399 },
381 networking: {type: "unrestricted"}
400 networking: {type: "limited", allow_package_managers: true}
382401 }
383402 )
384403 ```
from line 418
399418
400419The `networking` field controls the sandbox's outbound network access. It does not affect the `web_search` or `web_fetch` tools, which run on Anthropic's servers; to restrict the sites those tools can reach, set `allowed_domains` or `blocked_domains` on the tool's entry in the agent toolset. See [Restrict web search and web fetch domains](https://platform.claude.com/docs/en/managed-agents/tools#restrict-web-search-and-web-fetch-domains).
401420
402| Mode | Description |
403| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
404| `unrestricted` | Full outbound network access, except for a general safety blocklist. This is the default. |
405| `limited` | Restricts sandbox network access to the hosts in `allowed_hosts`. Set `allow_package_managers` and `allow_mcp_servers` to `true` to allow additional access. |
421| Mode | Description |
422| -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
423| `limited` | Restricts sandbox network access to the hosts in `allowed_hosts`. Set `allow_package_managers` and `allow_mcp_servers` to `true` to allow additional access. Use this mode unless the agent must reach sites you cannot list in advance. |
424| `unrestricted` | Full outbound network access, except for a general safety blocklist. Before you use it, read [Risks of unrestricted networking](https://platform.claude.com/docs/en/managed-agents/environments#risks-of-unrestricted-networking). |
406425
426<Note>
427 Set `networking` explicitly in API requests; a create request that omits it gets `unrestricted`. The Claude Console's form for creating an environment starts with **Limited** selected and nothing else allowed.
428</Note>
429
407430The following example creates an environment with `limited` networking:
408431
409432<CodeGroup defaultLanguage="CLI">
from line 588
565588</CodeGroup>
566589
567590<Info>
568 For production deployments, use `limited` networking with an explicit `allowed_hosts` list. Follow the principle of least privilege by granting only the minimum network access your agent requires, and regularly audit your allowed domains.
591 Use `limited` networking with an explicit `allowed_hosts` list. Follow the principle of least privilege by granting only the minimum network access your agent requires, and regularly audit your allowed domains.
569592</Info>
570593
594With `limited` networking and no other fields set, no hosts are allowed. Files, memory stores, and GitHub repositories that you attach to the session stay available. When a request from the sandbox on port 80 or 443 is refused because its host is not allowed, the response is a 403 that names the blocked host.
595
571596When using `limited` networking:
572597
573598* `allowed_hosts` specifies domains the sandbox can reach. Specify bare hostnames or wildcard patterns (such as `*.example.com`). Do not include a URL scheme, port, or path.
574* `allow_mcp_servers` allows outbound access to MCP server endpoints configured on the agent, beyond those listed in the `allowed_hosts` array. Defaults to `false`.
599* `allow_mcp_servers` allows outbound access to MCP server endpoints configured on the agent, beyond those listed in the `allowed_hosts` array. Defaults to `false`. While it is `false`, session creation fails with a 400 error if the agent declares an MCP server whose host is not in `allowed_hosts`. The same applies to [an agent it can delegate to](https://platform.claude.com/docs/en/managed-agents/multiagent-orchestration). To fix it, add the host to `allowed_hosts` or set `allow_mcp_servers` to `true`.
575600* `allow_package_managers` allows outbound access to a set of public package registries and code hosts beyond those listed in the `allowed_hosts` array. See [Package manager hosts](https://platform.claude.com/docs/en/managed-agents/environments#package-manager-hosts) for the list. Defaults to `false`. Set it to `true` whenever the environment specifies `packages`; otherwise the request is rejected with a 400 error, even if the registry hosts are listed in `allowed_hosts`.
576601
577602#### Package manager hosts
from line 619
594619<Warning>
595620 Network access is granted per host, not per operation. The sandbox can send any request to an allowed host, including uploads such as `git push` and package publishing, with any credential the command supplies. If the agent processes untrusted input (repository files, fetched web content, or third-party tool output), a successful prompt injection could use an allowed host to copy files out of the sandbox. To reduce this risk, set the `bash` tool's [permission policy](https://platform.claude.com/docs/en/managed-agents/permission-policies) to `always_ask` or `auto`. If the environment does not specify `packages`, you can instead leave `allow_package_managers` set to `false` and list only the hosts your agent needs in `allowed_hosts`.
596621</Warning>
622
623#### Risks of unrestricted networking
624
625With `unrestricted` networking, code in the sandbox can send requests to any host on the internet, except for hosts on a general safety blocklist. Before you choose this mode, consider what the agent can do with that access:
626
627* **The agent can change things on external sites, not only read them:** The `bash` tool can send any request. The agent can post data, submit forms, call APIs, and run scripts that change data on external sites. Even a request that only fetches a URL can change data on some sites.
628* **Nothing pauses these requests by default:** The agent toolset's default [permission policy](https://platform.claude.com/docs/en/managed-agents/permission-policies) is `always_allow`, so `bash` commands run without approval.
629* **Anything in the sandbox can leave it:** This includes files, tool outputs, and any credentials or secrets you put in the sandbox.
630* **Fetched content can steer the agent:** Web pages, API responses, and other content the agent reads can contain instructions (prompt injection) that change what it does next.
631* **The agent acts on your behalf:** Its actions can violate a site's terms of service, or create accounts and records there.
632* **Model behavior is not a security control:** The agent can act on external sites in ways you did not ask for, including retrying in a different way after a site blocks a request. Use network settings and permission policies to limit what it can do.
633* **The safety blocklist is not an allowlist:** It does not limit which other sites the agent reaches, or what the agent does on them.
634
635To reduce these risks, use `limited` networking with an explicit list of hosts. The following `networking` value allows `api.example.com`, plus the [package manager hosts](https://platform.claude.com/docs/en/managed-agents/environments#package-manager-hosts) for an agent that installs packages:
636
637```json
638{
639 "type": "limited",
640 "allowed_hosts": ["api.example.com"],
641 "allow_package_managers": true
642}
643```
644
645An agent that only uses the `web_search` and `web_fetch` tools does not need `unrestricted` networking if you can list the sites it needs. [Networking](https://platform.claude.com/docs/en/managed-agents/environments#networking) says when `allowed_hosts` applies to those tools. Where it does, list those sites in `allowed_hosts`. Listing them in `web_search`'s `allowed_domains` too makes it search those sites. A host that you add to `allowed_hosts` is also open to the sandbox. To restrict the tools further, see [Restrict web search and web fetch domains](https://platform.claude.com/docs/en/managed-agents/tools#restrict-web-search-and-web-fetch-domains).
646
647Use `unrestricted` only when the agent must reach sites you cannot list in advance. In that case, keep secrets and sensitive files out of the sandbox, and give the agent only the credentials the task needs. Consider setting the `bash` tool's permission policy to `always_ask` or `auto`, and [watch the session's events](https://platform.claude.com/docs/en/managed-agents/events-and-streaming).
597648
598649## Environment lifecycle
599650
managed-agents/events-and-streaming Changed · +3 / -3 lines
from line 1048
10481048 var events = client.beta().sessions().events().list(
10491049 session.id(),
10501050 EventListParams.builder()
1051 .addType("agent.tool_use")
1052 .addType("agent.tool_result")
1051 .addType(BetaManagedAgentsSessionEventType.AGENT_TOOL_USE)
1052 .addType(BetaManagedAgentsSessionEventType.AGENT_TOOL_RESULT)
10531053 .build());
10541054 for (var event : events.data()) {
10551055 event.agentToolUse().ifPresent(toolUse ->
from line 2853
28532853* **Check session events:** Session errors are conveyed through the `session.error` event
28542854* **Review tool results:** Tool execution failures often explain unexpected agent behavior
28552855* **Track token usage:** Monitor token consumption to optimize prompts and reduce costs
2856* **Use system prompts:** Add logging instructions to the system prompt to make the agent explain its reasoning
2856* **Use system prompts:** Add logging instructions to the system prompt so the agent summarizes what it did and what it found
28572857* **Troubleshoot previews:** If a stream that opts in to event deltas doesn't behave as you expect, see [Troubleshoot previews](https://platform.claude.com/docs/en/managed-agents/events-and-streaming#troubleshoot-previews)
28582858
models/opus-5-5/migration-guide Changed · +3 / -3 lines
from line 286
286286* Set `effort` explicitly: the default is `medium`, where Claude Opus 5's is `high`.
287287* Replace `tool_choice` types `any` and `tool` with `auto` plus strict tool use or structured outputs.
288288* If you use computer use on the Claude API or Google Cloud, declare `computer_toolset_20260801` (no beta header) instead of `computer_20251124` and update your agent loop for the toolset. On Amazon Bedrock, keep `computer_20251124`; check the computer use tool's [Compatibility](https://platform.claude.com/docs/en/agents-and-tools/tool-use/computer-use-tool#compatibility) section for other platforms.
289* If a router or fallback can move a conversation from Claude Opus 5.5 to another model, expect that model to run without Claude Opus 5.5's thinking blocks (Claude Fable 5.1 and Claude Mythos 5.1 on the Claude API are the exception and keep them). Claude Opus 5.5 itself reads thinking from Claude Opus 5, from earlier Opus, Sonnet, and Haiku models, and, on the Claude API, from Claude Sonnet 5.5, but not from Claude Fable or Claude Mythos models.
289* If a router or fallback can move a conversation from Claude Opus 5.5 to another model, expect that model to run without Claude Opus 5.5's thinking blocks (Claude Fable 5.1 and Claude Mythos 5.1 on the Claude API are the exception and keep them). Claude Opus 5.5 itself reads thinking from Claude Opus 5, from earlier Opus, Sonnet, and Haiku models, and, on the Claude API and Google Cloud, from Claude Sonnet 5.5, but not from Claude Fable or Claude Mythos models.
290290* Read content blocks by `type`, and pass `thinking` blocks back unmodified in tool-use loops.
291291* If your interface renders text between tool calls, set `display: "updates"` (beta) or `"summarized"` and render the non-empty `thinking` blocks.
292292* If your code edits earlier turns, the `system` prompt, or `tools` mid-conversation, follow [Preserved thinking](https://platform.claude.com/docs/en/build-with-claude/preserved-thinking).
from line 884
884884
885885#### Thinking blocks are tied to the model and the conversation
886886
887On the Claude API, Claude Fable 5.1 and Claude Mythos 5.1 read Claude Opus 5.5 thinking blocks; no other model does. A router or fallback that moves a conversation from Claude Opus 5.5 to any other model runs those turns without them. In the other direction, Claude Opus 5.5 reads thinking blocks from Claude Opus 5, from earlier Opus, Sonnet, and Haiku models, and, on the Claude API, from Claude Sonnet 5.5, but not from Claude Fable or Claude Mythos models. Keep the conversation append-only (no edits to the `system` prompt, `tools`, or earlier messages mid-conversation) so the blocks stay valid; Claude Code, claude.ai, Claude Managed Agents, and the Claude Agent SDK already do. Enforcement matches Claude Fable 5.1 on every platform: for accounts created on or after August 31, 2026, 00:00 UTC, replaying a thinking block after such an edit returns a 400 error by default. There is no code change for append-only integrations. See [Thinking blocks are tied to the model and the conversation](https://platform.claude.com/docs/en/models/opus-5-5/whats-new-opus-5-5#thinking-blocks-are-tied-to-the-model-that-produced-them) and [Preserved thinking](https://platform.claude.com/docs/en/build-with-claude/preserved-thinking).
887On the Claude API, Claude Fable 5.1 and Claude Mythos 5.1 read Claude Opus 5.5 thinking blocks; no other model does. A router or fallback that moves a conversation from Claude Opus 5.5 to any other model runs those turns without them. In the other direction, Claude Opus 5.5 reads thinking blocks from Claude Opus 5, from earlier Opus, Sonnet, and Haiku models, and, on the Claude API and Google Cloud, from Claude Sonnet 5.5, but not from Claude Fable or Claude Mythos models. Keep the conversation append-only (no edits to the `system` prompt, `tools`, or earlier messages mid-conversation) so the blocks stay valid; Claude Code, claude.ai, Claude Managed Agents, and the Claude Agent SDK already do. Enforcement matches Claude Fable 5.1 on every platform: for accounts created on or after August 31, 2026, 00:00 UTC, replaying a thinking block after such an edit returns a 400 error by default. There is no code change for append-only integrations. See [Thinking blocks are tied to the model and the conversation](https://platform.claude.com/docs/en/models/opus-5-5/whats-new-opus-5-5#thinking-blocks-are-tied-to-the-model-that-produced-them) and [Preserved thinking](https://platform.claude.com/docs/en/build-with-claude/preserved-thinking).
888888
889889#### The `computer_20251124` computer use tool is not supported on the Claude API and Google Cloud
890890
from line 1152
11521152
11531153### Safety classifiers and fallback
11541154
1155Claude Opus 5.5 can return `stop_reason: "refusal"` with a `stop_details` category. Its classifiers cover a broader set of categories than Claude Opus 5's, so expect `stop_details.category` values such as `"bio"` and `"reasoning_extraction"` in addition to `"cyber"`; see the [refusal category table](https://platform.claude.com/docs/en/build-with-claude/refusals-and-fallback#refusal-response). Handle refusals and configure [server-side fallback](https://platform.claude.com/docs/en/build-with-claude/refusals-and-fallback#server-side-fallback) or your own retry (server-side fallback doesn't retry requests declined with `"reasoning_extraction"`; that refusal is returned to you); see [Refusals and fallback](https://platform.claude.com/docs/en/build-with-claude/refusals-and-fallback) and [Safeguard refusals](https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/prompting-claude-opus-5-5#safeguard-refusals).
1155Claude Opus 5.5 can return `stop_reason: "refusal"` with a `stop_details` category. Its classifiers cover a broader set of categories than Claude Opus 5's, so expect `stop_details.category` values such as `"bio"` in addition to `"cyber"` and `"reasoning_extraction"`; see the [refusal category table](https://platform.claude.com/docs/en/build-with-claude/refusals-and-fallback#refusal-response). Handle refusals and configure [server-side fallback](https://platform.claude.com/docs/en/build-with-claude/refusals-and-fallback#server-side-fallback) or your own retry (server-side fallback doesn't retry requests declined with `"reasoning_extraction"`; that refusal is returned to you); see [Refusals and fallback](https://platform.claude.com/docs/en/build-with-claude/refusals-and-fallback) and [Safeguard refusals](https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/prompting-claude-opus-5-5#safeguard-refusals).
11561156
11571157### Recommended changes
11581158
test-and-evaluate/develop-tests Changed · +8 / -8 lines
from line 2845
28452845 A given use case, or even a specific success criteria for that use case, might require several rubrics for holistic evaluation.
28462846 </Note>
28472847* **Empirical or specific:** For example, instruct the LLM to output only 'correct' or 'incorrect', or to judge from a scale of 1–5. Purely qualitative evaluations are hard to assess quickly and at scale.
2848* **Encourage reasoning:** Ask the LLM to reason first before producing an evaluation score, and then discard the reasoning. This increases evaluation performance, particularly for tasks requiring complex judgment.
2848* **Encourage reasoning:** Use a grader model with [thinking](https://platform.claude.com/docs/en/build-with-claude/thinking) on, so that it reasons before it produces an evaluation score. This increases evaluation performance, particularly for tasks requiring complex judgment.
28492849
28502850<Accordion title="Example: LLM-based grading">
28512851 <CodeGroup exclude="shell">
from line 2857
28572857 return f"""Grade this answer based on the rubric:
28582858 <rubric>{rubric}</rubric>
28592859 <answer>{answer}</answer>
2860 Think through your reasoning in <thinking> tags, then output 'correct' or 'incorrect' in <result> tags."""
2860 Output 'correct' or 'incorrect' in <result> tags."""
28612861
28622862
28632863 def grade_completion(output, golden_answer):
from line 2916
29162916 return `Grade this answer based on the rubric:
29172917 <rubric>${rubric}</rubric>
29182918 <answer>${answer}</answer>
2919 Think through your reasoning in <thinking> tags, then output 'correct' or 'incorrect' in <result> tags.`;
2919 Output 'correct' or 'incorrect' in <result> tags.`;
29202920 }
29212921
29222922 async function gradeCompletion(output: string, goldenAnswer: string): Promise<string> {
from line 2972
29722972 Grade this answer based on the rubric:
29732973 <rubric>{rubric}</rubric>
29742974 <answer>{answer}</answer>
2975 Think through your reasoning in <thinking> tags, then output 'correct' or 'incorrect' in <result> tags.
2975 Output 'correct' or 'incorrect' in <result> tags.
29762976 """;
29772977 }
29782978
from line 3053
30533053 return fmt.Sprintf(`Grade this answer based on the rubric:
30543054 <rubric>%s</rubric>
30553055 <answer>%s</answer>
3056 Think through your reasoning in <thinking> tags, then output 'correct' or 'incorrect' in <result> tags.`, rubric, answer)
3056 Output 'correct' or 'incorrect' in <result> tags.`, rubric, answer)
30573057 }
30583058
30593059 func gradeCompletion(output, goldenAnswer string) string {
from line 3134
31343134 Grade this answer based on the rubric:
31353135 <rubric>%s</rubric>
31363136 <answer>%s</answer>
3137 Think through your reasoning in <thinking> tags, then output 'correct' or 'incorrect' in <result> tags.""".formatted(rubric, answer);
3137 Output 'correct' or 'incorrect' in <result> tags.""".formatted(rubric, answer);
31383138 }
31393139
31403140 String gradeCompletion(String output, String goldenAnswer) {
from line 3177
31773177 Grade this answer based on the rubric:
31783178 <rubric>{$rubric}</rubric>
31793179 <answer>{$answer}</answer>
3180 Think through your reasoning in <thinking> tags, then output 'correct' or 'incorrect' in <result> tags.
3180 Output 'correct' or 'incorrect' in <result> tags.
31813181 PROMPT;
31823182 }
31833183
from line 3258
32583258 Grade this answer based on the rubric:
32593259 <rubric>#{rubric}</rubric>
32603260 <answer>#{answer}</answer>
3261 Think through your reasoning in <thinking> tags, then output 'correct' or 'incorrect' in <result> tags.
3261 Output 'correct' or 'incorrect' in <result> tags.
32623262 PROMPT
32633263 end
32643264
about-claude/use-case-guides/ticket-routing Changed · +4 / -0 lines
from line 306
306306 """
307307```
308308
309<Note>
310 This prompt is written for Claude Haiku 4.5, which runs here without thinking. On Claude Fable 5.1, Claude Fable 5, Claude Opus 5.5, Claude Opus 5, and Claude Sonnet 5.5, ask for the intent and a one-sentence summary of the request instead. See [Keep reasoning in thinking blocks](https://platform.claude.com/docs/en/build-with-claude/refusals-and-fallback#keep-reasoning-in-thinking-blocks).
311</Note>
312
309313Here are the key components of this prompt:
310314
311315* The prompt template is a Python f-string, allowing the `ticket_contents` to be inserted into the `<request>` tags.
agents-and-tools/tool-use/computer-use-tool Changed · +1 / -1 lines
from line 716
716716### Optimize model performance with prompting
717717
7187181. Specify simple, well-defined tasks and provide explicit instructions for each step.
7192. Claude sometimes assumes outcomes of its actions without explicitly checking their results. To prevent this you can prompt Claude with `After each step, take a screenshot and carefully evaluate if you have achieved the right outcome. Explicitly show your thinking: "I have evaluated step X..." If not correct, try again. Only when you confirm a step was executed correctly should you move on to the next one.`
7192. Claude sometimes assumes outcomes of its actions without explicitly checking their results. To prevent this you can prompt Claude with `After each step, take a screenshot and carefully evaluate if you have achieved the right outcome. State in one sentence what the screenshot shows and whether the step succeeded. If it didn't, try again. Only when you confirm a step was executed correctly should you move on to the next one.`
7207203. Some UI elements (such as dropdowns and scrollbars) might be tricky for Claude to manipulate using mouse movements. If you experience this, try prompting the model to use keyboard shortcuts.
7217214. For repeatable tasks or UI interactions, include example screenshots and tool calls of successful outcomes in your prompt.
7227225. If you need the model to log in, provide it with the username and password in your prompt inside XML tags such as `<robot_credentials>`. Using computer use within applications that require login increases the risk of bad outcomes as a result of prompt injection. Review [Mitigate jailbreaks and prompt injections](https://platform.claude.com/docs/en/test-and-evaluate/strengthen-guardrails/mitigate-jailbreaks) before providing the model with login credentials.
agents-and-tools/tool-use/define-tools Changed · +2 / -0 lines
from line 85
8585
8686* **Design tool responses to return only high-signal information.** Return semantic, stable identifiers (for example, slugs or UUIDs) rather than opaque internal references, and include only the fields Claude needs to reason about its next step. Bloated responses waste context and make it harder for Claude to extract what matters.
8787
88* **Ask for an explanation, not reasoning.** If a parameter asks Claude why it is making the call, ask for a short explanation or the supporting evidence. A parameter that asks for the model's thinking or step-by-step reasoning may lead to a `reasoning_extraction` refusal. See [Keep reasoning in thinking blocks](https://platform.claude.com/docs/en/build-with-claude/refusals-and-fallback#keep-reasoning-in-thinking-blocks).
89
8890<AccordionGroup>
8991 <Accordion title="Example of a good tool description">
9092 ```json JSON
api/beta/deployment_runs Changed · +4 / -0 lines
from line 173
173173
174174 - `"ce-plugins-2026-09-01"`
175175
176 - `"spend-limit-reads-2026-09-26"`
177
176178- `"anthropic-workspace-id": optional string`
177179
178180 Optional header to select the Workspace for this request. The value is a Workspace ID (for example, `wrkspc_011CZkZaBF1tNoB5wlCeusgy`).
from line 565
563565 - `"mcp-client-2026-09-15"`
564566
565567 - `"ce-plugins-2026-09-01"`
568
569 - `"spend-limit-reads-2026-09-26"`
566570
567571- `"anthropic-workspace-id": optional string`
568572
api/beta/deployment_runs/list Changed · +2 / -0 lines
from line 171
171171
172172 - `"ce-plugins-2026-09-01"`
173173
174 - `"spend-limit-reads-2026-09-26"`
175
174176- `"anthropic-workspace-id": optional string`
175177
176178 Optional header to select the Workspace for this request. The value is a Workspace ID (for example, `wrkspc_011CZkZaBF1tNoB5wlCeusgy`).
api/beta/deployment_runs/retrieve Changed · +2 / -0 lines
from line 121
121121
122122 - `"ce-plugins-2026-09-01"`
123123
124 - `"spend-limit-reads-2026-09-26"`
125
124126- `"anthropic-workspace-id": optional string`
125127
126128 Optional header to select the Workspace for this request. The value is a Workspace ID (for example, `wrkspc_011CZkZaBF1tNoB5wlCeusgy`).
api/beta/deployments/archive Changed · +2 / -0 lines
from line 121
121121
122122 - `"ce-plugins-2026-09-01"`
123123
124 - `"spend-limit-reads-2026-09-26"`
125
124126- `"anthropic-workspace-id": optional string`
125127
126128 Optional header to select the Workspace for this request. The value is a Workspace ID (for example, `wrkspc_011CZkZaBF1tNoB5wlCeusgy`).
api/beta/deployments/create Changed · +2 / -0 lines
from line 115
115115
116116 - `"ce-plugins-2026-09-01"`
117117
118 - `"spend-limit-reads-2026-09-26"`
119
118120- `"anthropic-workspace-id": optional string`
119121
120122 Optional header to select the Workspace for this request. The value is a Workspace ID (for example, `wrkspc_011CZkZaBF1tNoB5wlCeusgy`).
api/beta/deployments/list Changed · +2 / -0 lines
from line 159
159159
160160 - `"ce-plugins-2026-09-01"`
161161
162 - `"spend-limit-reads-2026-09-26"`
163
162164- `"anthropic-workspace-id": optional string`
163165
164166 Optional header to select the Workspace for this request. The value is a Workspace ID (for example, `wrkspc_011CZkZaBF1tNoB5wlCeusgy`).
api/beta/deployments/pause Changed · +2 / -0 lines
from line 121
121121
122122 - `"ce-plugins-2026-09-01"`
123123
124 - `"spend-limit-reads-2026-09-26"`
125
124126- `"anthropic-workspace-id": optional string`
125127
126128 Optional header to select the Workspace for this request. The value is a Workspace ID (for example, `wrkspc_011CZkZaBF1tNoB5wlCeusgy`).
api/beta/deployments/retrieve Changed · +2 / -0 lines
from line 121
121121
122122 - `"ce-plugins-2026-09-01"`
123123
124 - `"spend-limit-reads-2026-09-26"`
125
124126- `"anthropic-workspace-id": optional string`
125127
126128 Optional header to select the Workspace for this request. The value is a Workspace ID (for example, `wrkspc_011CZkZaBF1tNoB5wlCeusgy`).
api/beta/deployments/run Changed · +2 / -0 lines
from line 121
121121
122122 - `"ce-plugins-2026-09-01"`
123123
124 - `"spend-limit-reads-2026-09-26"`
125
124126- `"anthropic-workspace-id": optional string`
125127
126128 Optional header to select the Workspace for this request. The value is a Workspace ID (for example, `wrkspc_011CZkZaBF1tNoB5wlCeusgy`).
api/beta/deployments/unpause Changed · +2 / -0 lines
from line 121
121121
122122 - `"ce-plugins-2026-09-01"`
123123
124 - `"spend-limit-reads-2026-09-26"`
125
124126- `"anthropic-workspace-id": optional string`
125127
126128 Optional header to select the Workspace for this request. The value is a Workspace ID (for example, `wrkspc_011CZkZaBF1tNoB5wlCeusgy`).
api/beta/deployments/update Changed · +2 / -0 lines
from line 121
121121
122122 - `"ce-plugins-2026-09-01"`
123123
124 - `"spend-limit-reads-2026-09-26"`
125
124126- `"anthropic-workspace-id": optional string`
125127
126128 Optional header to select the Workspace for this request. The value is a Workspace ID (for example, `wrkspc_011CZkZaBF1tNoB5wlCeusgy`).
api/beta/dreams/archive Changed · +2 / -0 lines
from line 125
125125
126126 - `"ce-plugins-2026-09-01"`
127127
128 - `"spend-limit-reads-2026-09-26"`
129
128130- `"anthropic-workspace-id": optional string`
129131
130132 Optional header to select the Workspace for this request. The value is a Workspace ID (for example, `wrkspc_011CZkZaBF1tNoB5wlCeusgy`).
api/beta/dreams/cancel Changed · +2 / -0 lines
from line 125
125125
126126 - `"ce-plugins-2026-09-01"`
127127
128 - `"spend-limit-reads-2026-09-26"`
129
128130- `"anthropic-workspace-id": optional string`
129131
130132 Optional header to select the Workspace for this request. The value is a Workspace ID (for example, `wrkspc_011CZkZaBF1tNoB5wlCeusgy`).
api/beta/dreams/create Changed · +2 / -0 lines
from line 119
119119
120120 - `"ce-plugins-2026-09-01"`
121121
122 - `"spend-limit-reads-2026-09-26"`
123
122124- `"anthropic-workspace-id": optional string`
123125
124126 Optional header to select the Workspace for this request. The value is a Workspace ID (for example, `wrkspc_011CZkZaBF1tNoB5wlCeusgy`).
api/beta/dreams/list Changed · +2 / -0 lines
from line 183
183183
184184 - `"ce-plugins-2026-09-01"`
185185
186 - `"spend-limit-reads-2026-09-26"`
187
186188- `"anthropic-workspace-id": optional string`
187189
188190 Optional header to select the Workspace for this request. The value is a Workspace ID (for example, `wrkspc_011CZkZaBF1tNoB5wlCeusgy`).
api/beta/dreams/retrieve Changed · +2 / -0 lines
from line 125
125125
126126 - `"ce-plugins-2026-09-01"`
127127
128 - `"spend-limit-reads-2026-09-26"`
129
128130- `"anthropic-workspace-id": optional string`
129131
130132 Optional header to select the Workspace for this request. The value is a Workspace ID (for example, `wrkspc_011CZkZaBF1tNoB5wlCeusgy`).
api/beta/environments/archive Changed · +2 / -0 lines
from line 119
119119
120120 - `"ce-plugins-2026-09-01"`
121121
122 - `"spend-limit-reads-2026-09-26"`
123
122124- `"anthropic-workspace-id": optional string`
123125
124126 Optional header to select the Workspace for this request. The value is a Workspace ID (for example, `wrkspc_011CZkZaBF1tNoB5wlCeusgy`).
api/beta/environments/create Changed · +2 / -0 lines
from line 115
115115
116116 - `"ce-plugins-2026-09-01"`
117117
118 - `"spend-limit-reads-2026-09-26"`
119
118120- `"anthropic-workspace-id": optional string`
119121
120122 Optional header to select the Workspace for this request. The value is a Workspace ID (for example, `wrkspc_011CZkZaBF1tNoB5wlCeusgy`).