From 974978fd9721e25d416bc79e08adaff0cbdfb6ce Mon Sep 17 00:00:00 2001 From: "claude[bot]" <41898282+claude[bot]@users.noreply.github.com> Date: Thu, 22 Oct 2026 05:35:01 +0000 Subject: [PATCH] docs: Claude Code v2.1.308 - /claude-api api-version migrates code to API 2026-10-21, new safety_event OTel telemetry Co-Authored-By: claude-yolo[bot] --- content/.metadata.json | 1256 ++++++++--------- content/CHANGELOG.md | 50 + content/claude-code-manifest.json | 42 +- content/claude/claude-science/changelog.md | 13 + .../claude-science/corporate-networks.md | 2 +- .../claude-science/manage-on-devices.md | 2 +- .../claude/claude-science/troubleshooting.md | 4 +- .../claude-science/update-claude-science.md | 22 +- content/claude/cowork/changelog.md | 21 + content/claude/cowork/monitoring.md | 2 + .../claude-desktop/admin-console.md | 11 +- .../claude-desktop/configuration-changelog.md | 4 + .../en/about-claude/models/migration-guide.md | 8 +- .../optimizing-for-cost-and-intelligence.md | 9 +- content/en/about-claude/pricing.md | 96 +- .../use-case-guides/content-moderation.md | 14 +- .../use-case-guides/customer-support-chat.md | 10 +- .../use-case-guides/legal-summarization.md | 2 +- .../use-case-guides/ticket-routing.md | 10 +- .../agent-skills/best-practices.md | 16 +- .../agent-skills/enterprise.md | 4 +- .../agents-and-tools/agent-skills/overview.md | 2 +- .../agent-skills/quickstart.md | 4 +- content/en/agents-and-tools/mcp-connector.md | 16 +- .../mcp-tunnels/deploy-compose.md | 4 +- .../mcp-tunnels/quickstart.md | 2 +- .../agents-and-tools/tool-use/advisor-tool.md | 30 +- .../en/agents-and-tools/tool-use/bash-tool.md | 6 +- .../tool-use/browser-use-sdk.md | 10 +- .../tool-use/browser-use-tool.md | 10 +- .../tool-use/build-a-tool-using-agent.md | 14 +- .../tool-use/code-execution-tool.md | 18 +- .../tool-use/computer-use-tool.md | 26 +- .../agents-and-tools/tool-use/define-tools.md | 6 +- .../tool-use/handle-tool-calls.md | 2 +- .../agents-and-tools/tool-use/memory-tool.md | 4 +- .../en/agents-and-tools/tool-use/overview.md | 12 +- .../tool-use/parallel-tool-use.md | 2 +- .../tool-use/programmatic-tool-calling.md | 18 +- .../agents-and-tools/tool-use/server-tools.md | 14 +- .../tool-use/strict-tool-use.md | 10 +- .../tool-use/text-editor-tool.md | 34 +- .../agents-and-tools/tool-use/tool-runner.md | 12 +- .../tool-use/tool-search-tool.md | 112 +- .../tool-use/troubleshooting-tool-use.md | 2 +- .../tool-use/web-fetch-tool.md | 14 +- .../tool-use/web-search-tool.md | 14 +- content/en/api/beta-headers.md | 2 +- content/en/api/claude-code/routines-fire.md | 4 +- content/en/api/errors.md | 10 +- content/en/api/migration-2026-10-21.md | 50 +- content/en/api/overview.md | 4 +- content/en/api/rate-limits.md | 4 +- content/en/api/service-tiers.md | 4 +- content/en/api/versioning.md | 2 +- .../en/build-with-claude/batch-processing.md | 18 +- .../en/build-with-claude/cache-diagnostics.md | 2 +- content/en/build-with-claude/citations.md | 24 +- .../claude-in-amazon-bedrock.md | 8 +- .../claude-in-microsoft-foundry.md | 8 +- .../claude-on-amazon-bedrock-legacy.md | 22 +- .../build-with-claude/claude-on-vertex-ai.md | 22 +- .../claude-platform-on-aws.md | 19 +- .../build-with-claude/compaction-on-demand.md | 2 +- .../build-with-claude/compaction-threshold.md | 7 +- .../en/build-with-claude/context-editing.md | 25 +- content/en/build-with-claude/effort.md | 5 +- content/en/build-with-claude/embeddings.md | 10 +- .../en/build-with-claude/extended-thinking.md | 5 +- .../en/build-with-claude/fallback-credit.md | 2 +- content/en/build-with-claude/fast-mode.md | 6 +- content/en/build-with-claude/files.md | 42 +- .../handling-stop-reasons.md | 22 +- .../mid-conversation-effort-example.md | 6 +- .../mid-conversation-system-messages.md | 7 +- .../build-with-claude/multilingual-support.md | 2 +- content/en/build-with-claude/overview.md | 2 +- content/en/build-with-claude/pdf-support.md | 23 +- .../build-with-claude/preserved-thinking.md | 16 +- .../en/build-with-claude/prompt-caching.md | 12 +- .../claude-prompting-best-practices.md | 6 +- .../prompting-claude-fable-5.md | 2 +- .../prompting-claude-opus-4-8.md | 6 +- .../prompting-claude-opus-5-5.md | 4 +- .../prompting-claude-opus-5.md | 2 +- .../prompting-claude-sonnet-5-5.md | 4 +- .../prompting-claude-sonnet-5.md | 6 +- .../refusals-and-fallback.md | 8 +- .../en/build-with-claude/search-results.md | 6 +- content/en/build-with-claude/skills-guide.md | 21 +- content/en/build-with-claude/streaming.md | 32 +- .../build-with-claude/structured-outputs.md | 48 +- content/en/build-with-claude/task-budgets.md | 13 +- .../thinking-steering-and-cost.md | 12 +- .../thinking-tool-workflows.md | 6 +- content/en/build-with-claude/thinking.md | 20 +- .../en/build-with-claude/token-counting.md | 21 +- .../build-with-claude/vision-coordinates.md | 10 +- content/en/build-with-claude/vision.md | 23 +- .../working-with-messages.md | 11 +- content/en/claude_api_primer.md | 19 +- content/en/cli-sdks-libraries/cli/apply.md | 2 +- .../en/cli-sdks-libraries/cli/quickstart.md | 2 +- .../en/cli-sdks-libraries/cli/scripting.md | 6 +- content/en/cli-sdks-libraries/cli/using.md | 8 +- .../libraries/apple-foundation-models.md | 2 +- .../libraries/openai-sdk.md | 40 +- content/en/cli-sdks-libraries/overview.md | 16 +- content/en/cli-sdks-libraries/sdks/go.md | 4 +- content/en/cli-sdks-libraries/sdks/java.md | 4 +- content/en/cli-sdks-libraries/sdks/ruby.md | 18 +- .../docs/claude-code/agent-sdk/permissions.md | 18 +- .../en/docs/claude-code/agent-sdk/python.md | 9 +- content/en/docs/claude-code/agent-teams.md | 2 +- content/en/docs/claude-code/authentication.md | 14 +- .../en/docs/claude-code/auto-mode-config.md | 6 +- content/en/docs/claude-code/changelog.md | 61 + .../claude-code/claude-apps-gateway-config.md | 27 +- .../claude-code/claude-apps-gateway-deploy.md | 91 +- .../claude-code/claude-apps-gateway-on-aws.md | 41 +- .../claude-code/claude-apps-gateway-on-gcp.md | 6 +- .../claude-apps-gateway-spend-limits.md | 6 + .../docs/claude-code/claude-apps-gateway.md | 2 +- .../claude-code/claude-code-on-the-web.md | 2 +- .../en/docs/claude-code/claude-directory.md | 4 +- .../en/docs/claude-code/cloud-environments.md | 2 +- .../claude-code/code-review-pull-requests.md | 2 +- content/en/docs/claude-code/commands.md | 2 +- .../en/docs/claude-code/common-workflows.md | 7 +- content/en/docs/claude-code/costs.md | 5 +- .../en/docs/claude-code/debug-your-config.md | 1 + .../en/docs/claude-code/desktop-changelog.md | 42 +- .../claude-code/desktop-scheduled-tasks.md | 30 +- content/en/docs/claude-code/desktop.md | 42 +- content/en/docs/claude-code/devcontainer.md | 8 +- content/en/docs/claude-code/env-vars.md | 2 +- content/en/docs/claude-code/errors.md | 22 +- .../en/docs/claude-code/features-overview.md | 2 +- content/en/docs/claude-code/fullscreen.md | 1 + content/en/docs/claude-code/hooks-guide.md | 1 + content/en/docs/claude-code/hooks.md | 16 + content/en/docs/claude-code/iam.md | 14 +- .../en/docs/claude-code/interactive-mode.md | 15 + content/en/docs/claude-code/keybindings.md | 21 + .../en/docs/claude-code/large-codebases.md | 2 +- .../docs/claude-code/llm-gateway-protocol.md | 2 +- content/en/docs/claude-code/managed-mcp.md | 2 +- content/en/docs/claude-code/mcp-quickstart.md | 2 +- content/en/docs/claude-code/mcp.md | 35 +- content/en/docs/claude-code/memory.md | 7 + .../en/docs/claude-code/monitoring-usage.md | 2 +- content/en/docs/claude-code/network-config.md | 2 +- .../en/docs/claude-code/permission-modes.md | 42 +- .../docs/claude-code/plugins/cli-reference.md | 4 +- .../en/docs/claude-code/plugins/components.md | 1 + content/en/docs/claude-code/plugins/create.md | 7 +- .../en/docs/claude-code/plugins/loading.md | 38 +- .../plugins/marketplace-reference.md | 4 +- .../claude-code/plugins/mods/interface.md | 7 +- .../claude-code/plugins/mods/troubleshoot.md | 11 + content/en/docs/claude-code/plugins/org.md | 8 +- .../en/docs/claude-code/plugins/publish.md | 2 +- content/en/docs/claude-code/prompt-caching.md | 6 +- content/en/docs/claude-code/routines.md | 14 +- content/en/docs/claude-code/sandboxing.md | 40 +- .../en/docs/claude-code/scheduled-tasks.md | 4 +- .../self-hosted-environments-configuration.md | 4 +- .../self-hosted-environments-deploy.md | 14 +- .../claude-code/server-managed-settings.md | 15 +- .../en/docs/claude-code/settings-example.md | 2 +- .../en/docs/claude-code/settings-reference.md | 48 +- content/en/docs/claude-code/settings.md | 6 +- content/en/docs/claude-code/skills.md | 12 +- content/en/docs/claude-code/slash-commands.md | 12 +- content/en/docs/claude-code/sub-agents.md | 9 +- .../en/docs/claude-code/tools-reference.md | 9 +- .../docs/claude-code/web-scheduled-tasks.md | 14 +- content/en/get-started.md | 10 +- .../manage-claude/access-transparency-log.md | 10 +- .../en/manage-claude/access-transparency.md | 8 +- content/en/manage-claude/admin-api.md | 2 +- .../manage-claude/api-and-data-retention.md | 10 +- content/en/manage-claude/authentication.md | 8 +- .../claude-code-analytics-api.md | 2 +- .../manage-claude/compliance-activity-feed.md | 2 +- .../en/manage-claude/compliance-api-access.md | 2 +- content/en/manage-claude/compliance-api.md | 2 +- .../manage-claude/compliance-content-data.md | 10 +- content/en/manage-claude/compliance-errors.md | 6 +- content/en/manage-claude/compliance-faq.md | 2 +- .../en/manage-claude/compliance-org-data.md | 16 +- .../en/manage-claude/compliance-sessions.md | 8 +- content/en/manage-claude/data-residency.md | 12 +- .../manage-claude/inference-hooks-endpoint.md | 37 +- content/en/manage-claude/opentelemetry/sdk.md | 4 +- .../en/manage-claude/organization-webhooks.md | 4 +- content/en/manage-claude/plugins-api.md | 69 +- content/en/manage-claude/rate-limits-api.md | 2 +- content/en/manage-claude/spend-limits-api.md | 15 +- content/en/manage-claude/usage-cost-api.md | 16 +- content/en/manage-claude/user-management.md | 24 +- .../user-profiles-verification-portal.md | 2 +- content/en/manage-claude/user-profiles.md | 4 +- content/en/manage-claude/wif-admin-api.md | 4 +- .../en/manage-claude/wif-providers/azure.md | 8 +- content/en/manage-claude/wif-providers/gcp.md | 2 +- .../wif-providers/github-actions.md | 2 +- .../en/manage-claude/wif-providers/spiffe.md | 16 +- .../workload-identity-federation.md | 2 +- content/en/manage-claude/workspaces.md | 19 +- content/en/managed-agents/agent-setup.md | 28 +- content/en/managed-agents/define-outcomes.md | 14 +- content/en/managed-agents/dreams.md | 2 +- content/en/managed-agents/event-deltas.md | 8 +- .../en/managed-agents/events-and-streaming.md | 2 +- content/en/managed-agents/files.md | 2 +- content/en/managed-agents/memory.md | 6 +- content/en/managed-agents/migration.md | 2 +- .../multiagent-orchestration.md | 18 +- .../en/managed-agents/permission-policies.md | 8 +- content/en/managed-agents/quickstart.md | 8 +- .../managed-agents/scheduled-deployments.md | 4 +- .../en/managed-agents/secure-deployment.md | 8 +- .../self-hosted-sandboxes-workers.md | 6 +- .../managed-agents/self-hosted-sandboxes.md | 8 +- .../managed-agents/session-observability.md | 4 +- .../en/managed-agents/session-operations.md | 13 +- content/en/managed-agents/session-threads.md | 14 +- content/en/managed-agents/sessions.md | 15 +- content/en/managed-agents/skills.md | 2 +- .../managed-agents/tools-web-restrictions.md | 10 +- content/en/managed-agents/tools.md | 2 +- content/en/managed-agents/vaults.md | 8 +- content/en/managed-agents/webhooks.md | 2 +- content/en/managed-agents/workflow-runs.md | 6 +- .../en/models/fable-5-1/migration-guide.md | 5 +- content/en/models/fable-5-1/overview.md | 2 +- .../models/fable-5-1/whats-new-fable-5-1.md | 23 +- content/en/models/opus-5-5/migration-guide.md | 6 +- .../en/models/opus-5-5/whats-new-opus-5-5.md | 4 +- content/en/models/overview.md | 2 +- content/en/release-notes/overview.md | 7 +- .../system-prompts/claude-fable-5-1.md | 2 +- .../system-prompts/claude-fable-5.md | 2 +- .../system-prompts/claude-haiku-3-5.md | 2 +- .../system-prompts/claude-haiku-3.md | 2 +- .../system-prompts/claude-haiku-4-5.md | 2 +- .../system-prompts/claude-haiku-5-5.md | 2 +- .../system-prompts/claude-opus-3.md | 2 +- .../system-prompts/claude-opus-4-1.md | 2 +- .../system-prompts/claude-opus-4-5.md | 2 +- .../system-prompts/claude-opus-4-6.md | 2 +- .../system-prompts/claude-opus-4-7.md | 2 +- .../system-prompts/claude-opus-4-8.md | 2 +- .../system-prompts/claude-opus-4.md | 2 +- .../system-prompts/claude-opus-5-5.md | 2 +- .../system-prompts/claude-opus-5.md | 2 +- .../system-prompts/claude-sonnet-3-5.md | 2 +- .../system-prompts/claude-sonnet-3-7.md | 2 +- .../system-prompts/claude-sonnet-4-5.md | 2 +- .../system-prompts/claude-sonnet-4-6.md | 2 +- .../system-prompts/claude-sonnet-4.md | 2 +- .../system-prompts/claude-sonnet-5-5.md | 2 +- .../system-prompts/claude-sonnet-5.md | 2 +- .../release-notes/system-prompts/overview.md | 2 +- content/en/test-and-evaluate/develop-tests.md | 22 +- .../handle-streaming-refusals.md | 2 +- .../increase-consistency.md | 2 +- .../strengthen-guardrails/reduce-latency.md | 2 +- .../github/anthropic-sdk-python/CHANGELOG.md | 6 + content/github/anthropic-sdk-python/api.md | 6 + .../anthropic-sdk-typescript/CHANGELOG.md | 6 + .../github/anthropic-sdk-typescript/api.md | 6 + .../.claude-plugin/marketplace.json | 2 +- .../.claude-plugin/plugin.json | 2 +- ...how-do-i-log-out-of-all-active-sessions.md | 2 +- ...k-settings-on-team-and-enterprise-plans.md | 2 +- .../10593882-share-and-unshare-chats.md | 6 +- ...ith-local-mcp-servers-on-claude-desktop.md | 2 +- content/support/11101966-use-voice-mode.md | 8 +- ...the-claude-lti-in-canvas-by-instructure.md | 2 +- ...being-asked-to-verify-my-payment-method.md | 2 +- .../11869629-use-claude-with-android-apps.md | 2 +- ...or-team-and-seat-based-enterprise-plans.md | 10 +- ...12173-get-started-with-claude-in-chrome.md | 2 +- ...11783-create-and-edit-files-with-claude.md | 6 +- .../12157520-claude-code-usage-analytics.md | 2 +- .../support/12260368-use-incognito-chats.md | 2 +- .../support/12293051-use-claude-in-xcode.md | 2 +- ...age-usage-credits-for-paid-claude-plans.md | 2 +- ...6728-troubleshoot-claude-error-messages.md | 2 +- .../support/12512180-use-skills-in-claude.md | 2 +- ...d-using-the-desktop-extension-allowlist.md | 8 +- .../12618689-use-claude-code-in-the-cloud.md | 6 +- ...-quick-entry-with-claude-desktop-on-mac.md | 2 +- ...analytics-for-team-and-enterprise-plans.md | 24 +- ...2446-claude-in-chrome-permissions-guide.md | 4 +- .../12997503-team-plan-billing-faqs.md | 2 +- .../13132885-set-up-single-sign-on-sso.md | 8 +- ...3133195-set-up-jit-or-scim-provisioning.md | 6 +- ...1-configuring-session-security-settings.md | 6 +- .../13189465-log-in-to-your-claude-account.md | 2 +- .../13325567-account-management-faqs.md | 2 +- ...13345190-get-started-with-claude-cowork.md | 2 +- ...13371040-log-in-to-your-console-account.md | 2 +- ...13641943-visual-and-interactive-content.md | 6 +- .../support/13837440-use-plugins-in-claude.md | 4 +- ...gn-tasks-from-anywhere-in-claude-cowork.md | 4 +- ...ur-tasks-with-projects-in-claude-cowork.md | 12 +- ...sync-works-for-enterprise-organizations.md | 4 +- .../14604842-cyber-verification-program.md | 2 +- .../support/14661296-use-claude-security.md | 4 +- ...t-a-default-model-for-your-organization.md | 2 +- ...nage-model-access-for-your-organization.md | 8 +- ...-started-with-skill-and-plugin-scanning.md | 16 +- ...1-get-started-with-1password-for-claude.md | 2 +- ...3-how-claude-marks-ai-generated-content.md | 2 +- ...rstanding-your-pro-or-max-plan-invoices.md | 2 +- ...16893491-get-started-with-smart-reports.md | 14 +- ...claude-in-google-docs-sheets-and-slides.md | 4 +- ...ooled-group-budgets-on-enterprise-plans.md | 2 +- .../17203415-set-up-claude-for-intune.md | 22 +- ...from-standalone-claude-design-to-claude.md | 22 +- .../8114491-get-started-with-claude.md | 2 +- ...8230524-delete-or-rename-a-conversation.md | 16 +- .../support/8325618-paid-plan-billing-faqs.md | 2 +- ...27-customizing-your-appearance-settings.md | 6 +- ...nt-to-a-team-or-enterprise-organization.md | 2 +- ...77-how-can-i-create-and-manage-projects.md | 6 +- discovery.json | 2 +- tombstones.json | 2 +- 331 files changed, 2715 insertions(+), 1962 deletions(-) diff --git a/content/.metadata.json b/content/.metadata.json index 5d360c3a6c..ea9f7729c0 100644 --- a/content/.metadata.json +++ b/content/.metadata.json @@ -1,7 +1,7 @@ { "metadata": { "version": "2.0", - "fetch_date": "2026-10-21T19:44:41.294430Z", + "fetch_date": "2026-10-22T05:33:56.688902Z", "section": "all" }, "items": [ @@ -30,155 +30,155 @@ "url": "https://platform.claude.com/docs/en/get-started", "status": "success", "path": "en/get-started.md", - "sha256": "e3279d6216627132916fe9e09b4d7da98fedf03727d2a3fb7397c59150062c57", - "size": 19378 + "sha256": "9dbbde38a07f6c7ebf53b3d755f749e0c3c3e2e16fce9e1a6fde2dee101e70f8", + "size": 19379 }, { "url": "https://platform.claude.com/docs/en/manage-claude/authentication", "status": "success", "path": "en/manage-claude/authentication.md", - "sha256": "cfd792d818930f5900608f520e8bd6f533b2f827dbec58ca09b6d70d8763d4bc", - "size": 25709 + "sha256": "d00adcaa9c9c63ab8c624976bc1de8e9b6d949d3e5eb0f9ecb485793ad7e8c1d", + "size": 25722 }, { "url": "https://platform.claude.com/docs/en/build-with-claude/overview", "status": "success", "path": "en/build-with-claude/overview.md", - "sha256": "329931ec023539cd23ada2f1b00d7c389fdd4f63d817bb1ff1635ec00cb2237c", + "sha256": "eb0c1e4d34616bb72b718bb5178fc67c80e708781eadf13dede024e8631d9b21", "size": 29474 }, { "url": "https://platform.claude.com/docs/en/build-with-claude/working-with-messages", "status": "success", "path": "en/build-with-claude/working-with-messages.md", - "sha256": "f7c10e851b149c9395225b5f522bad8e4f42c95e1f90aad16ffdf8f58d389f25", - "size": 33168 + "sha256": "7caf5d7aa1de75f3a8e485e8bc94c2ede69c3ca10bace57960c9d73b36feb7ae", + "size": 33189 }, { "url": "https://platform.claude.com/docs/en/build-with-claude/handling-stop-reasons", "status": "success", "path": "en/build-with-claude/handling-stop-reasons.md", - "sha256": "580efbfda0c818fa4ae41a47ae24c17d2a199c10294cac8c552588ee9ca656e3", - "size": 120092 + "sha256": "32583481a2caae6b50763ac1155a7746e6698672f9c077c6e5b91dada7f8609e", + "size": 120232 }, { "url": "https://platform.claude.com/docs/en/build-with-claude/refusals-and-fallback", "status": "success", "path": "en/build-with-claude/refusals-and-fallback.md", - "sha256": "d096d5c0ef526cccac1aad63ffa2cc95eb0e4d46b11c2cf97594ed42b0121785", - "size": 65292 + "sha256": "e89d7a2bdf717ba17c31ead9a42ef3b83986abaf34b8f276e4a463de8231b366", + "size": 65375 }, { "url": "https://platform.claude.com/docs/en/build-with-claude/fallback-credit", "status": "success", "path": "en/build-with-claude/fallback-credit.md", - "sha256": "ad8babd9398adb3ea3e6d7ff4afc18091b1f965f8c2456fb7b8e5a91bab92842", - "size": 31370 + "sha256": "5ebf07594bb7b6ff5f754d8319f70dd9f026d0f037fa8a22757f311188bc1c21", + "size": 31396 }, { "url": "https://platform.claude.com/docs/en/build-with-claude/effort", "status": "success", "path": "en/build-with-claude/effort.md", - "sha256": "691ce48204935d370ba81415af38febc643f53a657496f4512851e6f86b0dff5", - "size": 42859 + "sha256": "78392970b6a58393428501a3e48bf895e109c2c2b7ec10380c40e6fa968ef45f", + "size": 42865 }, { "url": "https://platform.claude.com/docs/en/build-with-claude/task-budgets", "status": "success", "path": "en/build-with-claude/task-budgets.md", - "sha256": "0fa3d532dec0cf139bfa0ea2f9de0e9b14c095a446ba9a5c53b0986d2db8426c", - "size": 28840 + "sha256": "13bc50b2cf0b70e912aa11344455c20eaf0b1cf6d2f82e0750ea94a87f30dc4c", + "size": 28879 }, { "url": "https://platform.claude.com/docs/en/build-with-claude/fast-mode", "status": "success", "path": "en/build-with-claude/fast-mode.md", - "sha256": "2b85745d2899ea80d6bba9e3f89016ecd3974c8fba65828b2fdf97a614106e3c", - "size": 24899 + "sha256": "6a1ebc3d85aeac4ed1b3d1d3e4770639c1d30f570371b2d71d07be9445dafaa1", + "size": 24906 }, { "url": "https://platform.claude.com/docs/en/build-with-claude/structured-outputs", "status": "success", "path": "en/build-with-claude/structured-outputs.md", - "sha256": "280b21fac15740b5c8e2f48ca2044509851da79d97e449cc46f3355cbe8ce5a7", - "size": 102219 + "sha256": "74e5f01e92be0d7b5b6a95459d5fabecbd9a2a2fc6cb85751cbea1c4bfbdedac", + "size": 102376 }, { "url": "https://platform.claude.com/docs/en/build-with-claude/citations", "status": "success", "path": "en/build-with-claude/citations.md", - "sha256": "dd6b6e30d4a229515130796ec6d6d173cba54429f693a429c2530ce87707492b", - "size": 74678 + "sha256": "7a055df68dc2601ff806260b214e56c2fd02e5722dcc3acc2f09298d7220b0fc", + "size": 74796 }, { "url": "https://platform.claude.com/docs/en/build-with-claude/streaming", "status": "success", "path": "en/build-with-claude/streaming.md", - "sha256": "19486990bb6fccfffb9d257ec95ee239f69a0ca0c95c4c5a213451b12e3d15fe", - "size": 51066 + "sha256": "fb6a18b7536849c886da487d73cb7e391b5929a67c62766aa8786d8a34a3634e", + "size": 51158 }, { "url": "https://platform.claude.com/docs/en/build-with-claude/batch-processing", "status": "success", "path": "en/build-with-claude/batch-processing.md", - "sha256": "6a3cf0af263502f67312da2efe67cb8c2643f56f0c21c3780a19d90d974e3128", - "size": 75563 + "sha256": "7549add31e32e7c2b3c7f3501b98fcd501630dc5fad6ae17c42496ca5561ba8d", + "size": 75641 }, { "url": "https://platform.claude.com/docs/en/build-with-claude/search-results", "status": "success", "path": "en/build-with-claude/search-results.md", - "sha256": "274e23696e0f0f111fe0023b75a8485aff023e59deb093452edebd816a15be95", - "size": 83867 + "sha256": "50941a86d7e2c0629ad62f12108fbd990512d8e2a7cbcf679bb84920f6a24b40", + "size": 83872 }, { "url": "https://platform.claude.com/docs/en/test-and-evaluate/strengthen-guardrails/handle-streaming-refusals", "status": "success", "path": "en/test-and-evaluate/strengthen-guardrails/handle-streaming-refusals.md", - "sha256": "20404743c9ed10d6bca4b21f559b27c97d7e51d04f5f0961d7959a567a5568f9", + "sha256": "e812a84e2a3d400bfe0fb9ad293ca8414f731f48afe60b44fe3451c2c183a657", "size": 13905 }, { "url": "https://platform.claude.com/docs/en/build-with-claude/multilingual-support", "status": "success", "path": "en/build-with-claude/multilingual-support.md", - "sha256": "e8f2426f0d2044cc6187e42bdb09ce4c7aa67aec2cb4d0b78ef20701e59521b7", - "size": 9419 + "sha256": "6fdb01a16f9bfac1db0fd3744bd3439c9947cd7a82e7bb3d1630dc12cbd6ab5a", + "size": 9435 }, { "url": "https://platform.claude.com/docs/en/build-with-claude/embeddings", "status": "success", "path": "en/build-with-claude/embeddings.md", - "sha256": "1ce7cd8deaea7a1dc2c11a349deb3e0862cc22f6eb316dc10851c0276cd61e53", - "size": 25426 + "sha256": "b7d5a601a31d12dd3bfc093ffcd624a0723de9da42900c968dd6282a39a31914", + "size": 25434 }, { "url": "https://platform.claude.com/docs/en/build-with-claude/thinking", "status": "success", "path": "en/build-with-claude/thinking.md", - "sha256": "df5e8df6f1e9df1a2a79a1ee95957ec23bfec7ec001d38820dcfb6606dfb9fba", - "size": 84859 + "sha256": "e55b939d6b042f9c72b80cbe58f52dbcafbfad37ddfce2a8f4f1ca02b0cb80e9", + "size": 84890 }, { "url": "https://platform.claude.com/docs/en/build-with-claude/thinking-steering-and-cost", "status": "success", "path": "en/build-with-claude/thinking-steering-and-cost.md", - "sha256": "5b3bcd4eea8bba2d714b738c676f5c2416f4374cf30e12c1a98ad253fbfa4bae", - "size": 42729 + "sha256": "e97fe16d01ee2a8d221ad9f0e93c9177746b2e9b603ce06371b47855efecc98d", + "size": 42764 }, { "url": "https://platform.claude.com/docs/en/build-with-claude/thinking-tool-workflows", "status": "success", "path": "en/build-with-claude/thinking-tool-workflows.md", - "sha256": "f600942017b6c10a7eaee7c7b1bf62b49d5e9b4f984713a96a9871e501aa7cd3", - "size": 31351 + "sha256": "0f277a0d73d08095d37fc8ce99995ab8f9658b767b6cfb162df3d086cf598edb", + "size": 31358 }, { "url": "https://platform.claude.com/docs/en/build-with-claude/preserved-thinking", "status": "success", "path": "en/build-with-claude/preserved-thinking.md", - "sha256": "50e27d5f0a3d6e348c8fef3442e366dcf8529c705a45ea73f7801a6350e9eae9", - "size": 115674 + "sha256": "57a408d40935d727ab1e400d98448050d5f08d7ec31e67e0f145a4ed8e25c5b5", + "size": 115667 }, { "url": "https://platform.claude.com/docs/en/build-with-claude/thinking-troubleshooting", @@ -191,15 +191,15 @@ "url": "https://platform.claude.com/docs/en/build-with-claude/extended-thinking", "status": "success", "path": "en/build-with-claude/extended-thinking.md", - "sha256": "6e3bd7b43347e9dc31df09d951bb899ae590c94136f0b678da5d058f42adf141", - "size": 22431 + "sha256": "e90628b1050066826eed1d861bef2f361c2c9a27ea47df9b3ed8e9920e2cd6b8", + "size": 22441 }, { "url": "https://platform.claude.com/docs/en/agents-and-tools/tool-use/overview", "status": "success", "path": "en/agents-and-tools/tool-use/overview.md", - "sha256": "ce72d3165a1536eb6f5c90c57b9e71aff16d41ddf7350d4b6e8649555720e0b4", - "size": 35872 + "sha256": "7c45cf69e78c4ee3c69523fbb122e6b15825969b93fce7c06d1605220fb80d06", + "size": 35965 }, { "url": "https://platform.claude.com/docs/en/agents-and-tools/tool-use/how-tool-use-works", @@ -212,133 +212,133 @@ "url": "https://platform.claude.com/docs/en/agents-and-tools/tool-use/build-a-tool-using-agent", "status": "success", "path": "en/agents-and-tools/tool-use/build-a-tool-using-agent.md", - "sha256": "31272d59f6a5880615e219b42435ac2b1e14cfcd2f69a84263dd04503d00c916", + "sha256": "27c6be9c6fa18400ddd05913d9aee83459636cccdcc4b69bcacbf61ea6f9c17c", "size": 138641 }, { "url": "https://platform.claude.com/docs/en/agents-and-tools/tool-use/define-tools", "status": "success", "path": "en/agents-and-tools/tool-use/define-tools.md", - "sha256": "90906d84a2046d57da36d0cf1737ba52bed8fcc57370da9cbabdde5ced38c8e8", - "size": 38522 + "sha256": "a8f8fe06aaad3d324e1b9caa0bb6d2a890d7af37b5cac85e555b067f81f3ec46", + "size": 38554 }, { "url": "https://platform.claude.com/docs/en/agents-and-tools/tool-use/handle-tool-calls", "status": "success", "path": "en/agents-and-tools/tool-use/handle-tool-calls.md", - "sha256": "b739788e7022c083ea121ffad9ccf7011ef10522f736811cf104a1d91ffe0ff7", - "size": 13433 + "sha256": "380b8caf2330b3241cb86eac1a3ff1841a7bb1302146ffa3d4bd17c1c0d9659b", + "size": 13438 }, { "url": "https://platform.claude.com/docs/en/agents-and-tools/tool-use/parallel-tool-use", "status": "success", "path": "en/agents-and-tools/tool-use/parallel-tool-use.md", - "sha256": "68267606eb7eed4cefa36c17308b70dfcac15aed9fe110e5224b645487f572dd", - "size": 55250 + "sha256": "7c8da97d2bf57d5824186fb4f474546b3d06d0db3b2ec007299fe2592f972077", + "size": 55254 }, { "url": "https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-runner", "status": "success", "path": "en/agents-and-tools/tool-use/tool-runner.md", - "sha256": "131312ea9a8a8970ccceeedb93a551886d6827e807143285170d772d71f89c25", - "size": 66605 + "sha256": "afdf0478bc28fa6b9b63c3c779f79ff07f863bfcf6b88af59867a8c0055c8a23", + "size": 66701 }, { "url": "https://platform.claude.com/docs/en/agents-and-tools/tool-use/strict-tool-use", "status": "success", "path": "en/agents-and-tools/tool-use/strict-tool-use.md", - "sha256": "2ef0566b43f7a5cca61745c3815e9a8db4798ec11ed598a26bafdf750287f1bf", - "size": 40227 + "sha256": "61d54d5d504e747e9ec39d9ea087b634cb2b2c967c1f8282c6bdf7d4fa05eed0", + "size": 40271 }, { "url": "https://platform.claude.com/docs/en/agents-and-tools/tool-use/server-tools", "status": "success", "path": "en/agents-and-tools/tool-use/server-tools.md", - "sha256": "70b00e72c0202a1c3cb0dd6bfa5ab63c9cded7337d02097e2d190079429d049b", - "size": 44776 + "sha256": "bccba9db4a386df0b817465ad33c818f946c8a759b6f6c964073c4f0a0b5a247", + "size": 44827 }, { "url": "https://platform.claude.com/docs/en/agents-and-tools/tool-use/web-search-tool", "status": "success", "path": "en/agents-and-tools/tool-use/web-search-tool.md", - "sha256": "1e95a1ab6d6021ab301d06c93a05191756689a58fb2b977bcaadc25af39d1b7e", - "size": 29085 + "sha256": "fbf41c23f517d7bd6d0a35bba97e63149fae3d2180c3837819a695a54d07c633", + "size": 29084 }, { "url": "https://platform.claude.com/docs/en/agents-and-tools/tool-use/web-fetch-tool", "status": "success", "path": "en/agents-and-tools/tool-use/web-fetch-tool.md", - "sha256": "97346582785f5b448e1f37b644426a7073e2493485f5c407aee974b9d8e0fb12", - "size": 38715 + "sha256": "83f628328651cc92985a85a60fa83213b297a83478ea46e30ecf995a52ef9b70", + "size": 39691 }, { "url": "https://platform.claude.com/docs/en/agents-and-tools/tool-use/code-execution-tool", "status": "success", "path": "en/agents-and-tools/tool-use/code-execution-tool.md", - "sha256": "7c4cd551df553dd371d767142efc517426d2b630eedbaea470bab85bac5e1fe5", - "size": 61136 + "sha256": "71120ce9038a5a3147f8282e3196327968f684d5a17cdff9fca385e3da414eb4", + "size": 61162 }, { "url": "https://platform.claude.com/docs/en/agents-and-tools/tool-use/advisor-tool", "status": "success", "path": "en/agents-and-tools/tool-use/advisor-tool.md", - "sha256": "62cef5409573561fb1cbdbf60d2273b991a3689038c7c6c115a8e5a42bc3d260", - "size": 101077 + "sha256": "531d2621d91af1630ffb2d433a880c50335b61051b2034ceb4a81537705b3c0c", + "size": 101293 }, { "url": "https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-search-tool", "status": "success", "path": "en/agents-and-tools/tool-use/tool-search-tool.md", - "sha256": "acebeeeb142f0b706df911ef5fbf769f29b4eabe91798805c39a97851b83b6dc", - "size": 37753 + "sha256": "fa3df97d52586d0880108de1d9aaa1f5ede42dd94c4c6f2bbf3c33dde55d27a2", + "size": 37369 }, { "url": "https://platform.claude.com/docs/en/agents-and-tools/tool-use/memory-tool", "status": "success", "path": "en/agents-and-tools/tool-use/memory-tool.md", - "sha256": "bc1d6b92ba48028f9f0376d3c874607b1cd150879bef8fccc63e9e9d90adc219", - "size": 39598 + "sha256": "b694f225fe09edf85c71bdba0d0f9936b574f1e61735d758072a2647c008914c", + "size": 39608 }, { "url": "https://platform.claude.com/docs/en/agents-and-tools/tool-use/bash-tool", "status": "success", "path": "en/agents-and-tools/tool-use/bash-tool.md", - "sha256": "78ed2d15b2f1723d31f13a6cb6ca3ebdd5f16a8dee8d581d9b4a19a0986e40c4", - "size": 71094 + "sha256": "9efce521edc86b776031548d0fa3203925e842d8d4adb5a5e6699c2db3a8cd8b", + "size": 71131 }, { "url": "https://platform.claude.com/docs/en/agents-and-tools/tool-use/text-editor-tool", "status": "success", "path": "en/agents-and-tools/tool-use/text-editor-tool.md", - "sha256": "4c9024dac9db7659cfdd00fe7a973bccadf8329d6d891829525b0dd3b8e79ab2", - "size": 81231 + "sha256": "dcc30277d154e851b094d21664d065e8b1bc53c66b8943f7aa7b816d1fa382fa", + "size": 81315 }, { "url": "https://platform.claude.com/docs/en/agents-and-tools/tool-use/browser-use-sdk", "status": "success", "path": "en/agents-and-tools/tool-use/browser-use-sdk.md", - "sha256": "33c5b419ae8681bf935066fc7c774b3fc082bb9cd7cf278285257bcb19891f7d", - "size": 79725 + "sha256": "535ea614e8bb93128fdc279d41cbbbe94472f0a5dcca4480fe67d6ee4608d2f8", + "size": 79692 }, { "url": "https://platform.claude.com/docs/en/agents-and-tools/tool-use/computer-use-tool", "status": "success", "path": "en/agents-and-tools/tool-use/computer-use-tool.md", - "sha256": "ef70c9493d875700fd8329759fe65e6a10b4dbdcb1a833c0a6ef5d051dc5fa4f", - "size": 118393 + "sha256": "86d10c147ba7d91c4771bfd898112e67881c8a52ecf5bfc1e44fba99ca25bdba", + "size": 118468 }, { "url": "https://platform.claude.com/docs/en/agents-and-tools/tool-use/browser-use-tool", "status": "success", "path": "en/agents-and-tools/tool-use/browser-use-tool.md", - "sha256": "0f3fa694daaac1bbd8d6f74a280e0e75df8d22676fdc41540b58d269ffeded38", - "size": 108153 + "sha256": "890b973ef97e1cf3a48e7dc7e10fd98266b942882910160e7930fa7fed15c2a3", + "size": 108189 }, { "url": "https://platform.claude.com/docs/en/agents-and-tools/tool-use/troubleshooting-tool-use", "status": "success", "path": "en/agents-and-tools/tool-use/troubleshooting-tool-use.md", - "sha256": "8fac27652a83e0c7b636f64286e8229c7aad84ff41032140160c670afcb67bcb", + "sha256": "1a9edef186787279fc98be6619ec74e1fb4be7501a960f09e9eb64d4be44a5f6", "size": 15268 }, { @@ -373,8 +373,8 @@ "url": "https://platform.claude.com/docs/en/agents-and-tools/tool-use/programmatic-tool-calling", "status": "success", "path": "en/agents-and-tools/tool-use/programmatic-tool-calling.md", - "sha256": "99e5b7fcf973c2e18681b0213660431c2402ae03c3470c3f09875de1b98bb7f4", - "size": 62171 + "sha256": "0b2ccba6fd6cd35bc966b075a8a2f4cf4159277f6a3fb11009361f63e68c8107", + "size": 62189 }, { "url": "https://platform.claude.com/docs/en/agents-and-tools/tool-use/fine-grained-tool-streaming", @@ -394,43 +394,43 @@ "url": "https://platform.claude.com/docs/en/build-with-claude/context-editing", "status": "success", "path": "en/build-with-claude/context-editing.md", - "sha256": "d97efadd69440d56c5b092dbddf0dfb29a00c0eca8098c3f4a92b073e399b7e5", - "size": 103258 + "sha256": "9c8ae15b0bde5eaeb8d682ddf439970a3b5879464fbe72821edb80e6ffee8fec", + "size": 103384 }, { "url": "https://platform.claude.com/docs/en/build-with-claude/prompt-caching", "status": "success", "path": "en/build-with-claude/prompt-caching.md", - "sha256": "709298a25f8f81fa12a2c283c7a6ceb135a7bc4aead0a8db23a8dff4360be734", - "size": 159894 + "sha256": "871b4fce112af343c937985b8b811efd6d9cf0681df26f4f52b24ad7e07239c3", + "size": 159938 }, { "url": "https://platform.claude.com/docs/en/build-with-claude/mid-conversation-system-messages", "status": "success", "path": "en/build-with-claude/mid-conversation-system-messages.md", - "sha256": "4d490b43257b0f937465fe45f527616ed10a8bd9a21b02991f363e820d04bbed", - "size": 104661 + "sha256": "057e2ea2084a3b8b636a8b59a6030e94580dc4042f9d9a725a46669acc902615", + "size": 104670 }, { "url": "https://platform.claude.com/docs/en/build-with-claude/mid-conversation-effort-example", "status": "success", "path": "en/build-with-claude/mid-conversation-effort-example.md", - "sha256": "f7a03d5d6cc8eb9b87b6489b17bf361857e4a1953ba88a1f5911337dfb046e09", - "size": 162222 + "sha256": "3b6f46e9cb8a3890135c491cc4d0f8ca18936fe7d587a0a1a6525ab7cc9be48a", + "size": 162228 }, { "url": "https://platform.claude.com/docs/en/build-with-claude/cache-diagnostics", "status": "success", "path": "en/build-with-claude/cache-diagnostics.md", - "sha256": "ec72925efe9bb497e37a360259351b0d5bc5ad4f5febe4aaea5baf760b21c807", - "size": 46450 + "sha256": "14b4e5156c8dbb7ca49c92f7e83f770a0f3fb2151ab1273c2f5bdb3f7ecab0db", + "size": 46455 }, { "url": "https://platform.claude.com/docs/en/build-with-claude/token-counting", "status": "success", "path": "en/build-with-claude/token-counting.md", - "sha256": "8eb922a4f5d95d45bb9fa4a70c27e8f428001d62a8645618a3e309f5843d1648", - "size": 43244 + "sha256": "24382b898436c5f2e1523b9e703b4d7ffc6bac91867d8a19a3bd93557ac9a60f", + "size": 43339 }, { "url": "https://platform.claude.com/docs/en/build-with-claude/compaction", @@ -443,7 +443,7 @@ "url": "https://platform.claude.com/docs/en/build-with-claude/compaction-on-demand", "status": "success", "path": "en/build-with-claude/compaction-on-demand.md", - "sha256": "f1e85a3855d2234e5d24e63b226c1cef980d782bbf9a385794c67bf7bedc221a", + "sha256": "3dac05805276933f8af90d48ca11d03695e4a760cd8afffd3bc94fcf784a95cb", "size": 46833 }, { @@ -471,71 +471,71 @@ "url": "https://platform.claude.com/docs/en/build-with-claude/compaction-threshold", "status": "success", "path": "en/build-with-claude/compaction-threshold.md", - "sha256": "19a24aa9a4c33ce6880546fc391cd1d1f31f4a3a1c38acbac93521cf160272e7", - "size": 114210 + "sha256": "42d684954273d210352286d9efff58b41e53d415414c7f52458d8d2dd9d904f0", + "size": 114209 }, { "url": "https://platform.claude.com/docs/en/build-with-claude/files", "status": "success", "path": "en/build-with-claude/files.md", - "sha256": "4d0e0ebb37fee401fc6376446ab87604135c84145ea7997efaf0045ae169e9ee", - "size": 38019 + "sha256": "9009923af60c15f4418f5a5d134ce6768d4edc3ff9ca6a36284aaa85d76af58c", + "size": 38342 }, { "url": "https://platform.claude.com/docs/en/build-with-claude/pdf-support", "status": "success", "path": "en/build-with-claude/pdf-support.md", - "sha256": "1c47ddaf5baa47b851fa7a58a471a768e8b741921c1e8f2d43207cd9975f5297", - "size": 61564 + "sha256": "fd80613047643a48fbd803a328405dc4333aeafe041df6029abb748d2a750ee4", + "size": 61592 }, { "url": "https://platform.claude.com/docs/en/build-with-claude/vision", "status": "success", "path": "en/build-with-claude/vision.md", - "sha256": "116105a08ca1bda02de9e21abd7eabf56762e49b9ff98c3a5d68d6d0d9984431", - "size": 47679 + "sha256": "19fa9da1ffecb5fdf3e09d54f085c2ae3ccbaa384b35f25103e23e98bc8255fa", + "size": 47708 }, { "url": "https://platform.claude.com/docs/en/build-with-claude/vision-coordinates", "status": "success", "path": "en/build-with-claude/vision-coordinates.md", - "sha256": "5414f9b222549bcfab9156cb0ca95256dfdcfbb8bfff1060df08936e72d9a176", - "size": 35190 + "sha256": "4c8bc8996f55d5ca84c8443f692845ec9ee68646782f46fb419e7276cc00f414", + "size": 35198 }, { "url": "https://platform.claude.com/docs/en/agents-and-tools/agent-skills/overview", "status": "success", "path": "en/agents-and-tools/agent-skills/overview.md", - "sha256": "00f0675b702bc0ed28974971b6ca870e20b62a447e1aae62d457190fcfa1c755", - "size": 21841 + "sha256": "7913d4556c014c6bf7f23e186efded1b36da63d7b29d73898267ebe8d2f6258f", + "size": 21840 }, { "url": "https://platform.claude.com/docs/en/agents-and-tools/agent-skills/quickstart", "status": "success", "path": "en/agents-and-tools/agent-skills/quickstart.md", - "sha256": "1641b50a4caa95de15b60d13d6c6ba65c2e048de6b7c456820f6258ffc13b64e", - "size": 36819 + "sha256": "27f907732940f1299415b305021a9c2767043c356d8f1fc4e20f39f8f9f9f9b3", + "size": 36835 }, { "url": "https://platform.claude.com/docs/en/agents-and-tools/agent-skills/best-practices", "status": "success", "path": "en/agents-and-tools/agent-skills/best-practices.md", - "sha256": "1490eb6111daf632f8fed716863efe080162b8d615d5bc888b6ba0777b759c0a", - "size": 42151 + "sha256": "f0a5d61b67123a31527e64aae7c5cfc05c4c7e27fff16f5b35ea14b135423960", + "size": 42169 }, { "url": "https://platform.claude.com/docs/en/agents-and-tools/agent-skills/enterprise", "status": "success", "path": "en/agents-and-tools/agent-skills/enterprise.md", - "sha256": "c1cd8c85e27c1f8110dafc0660fe4829bcaddee6752c891397c589ec92eff494", - "size": 16380 + "sha256": "138fc1abcd1dbf7579c9b60377dde47a88fd18a4681b37c31bac87bf306f565a", + "size": 16441 }, { "url": "https://platform.claude.com/docs/en/build-with-claude/skills-guide", "status": "success", "path": "en/build-with-claude/skills-guide.md", - "sha256": "d2b7e954a33697089d84ff66c13197c4db5ea26c56265b162b0fbebf2f0bc0a2", - "size": 145282 + "sha256": "15b7cf010a1ec5ac532c27e7d0ab14f14e500992c4d5346ed4de25db87260400", + "size": 145336 }, { "url": "https://platform.claude.com/docs/en/agents-and-tools/remote-mcp-servers", @@ -548,8 +548,8 @@ "url": "https://platform.claude.com/docs/en/agents-and-tools/mcp-connector", "status": "success", "path": "en/agents-and-tools/mcp-connector.md", - "sha256": "f4d545c6ebba5e0cfd978ae0495a2a9b32222f8df045130b361a2bc50d02acee", - "size": 73261 + "sha256": "c655e2ecc1a703aea6a6e476af05142fed2bfbc1d13e6f54666980d98f44ba9f", + "size": 73280 }, { "url": "https://platform.claude.com/docs/en/agents-and-tools/mcp-tunnels/overview", @@ -569,8 +569,8 @@ "url": "https://platform.claude.com/docs/en/agents-and-tools/mcp-tunnels/quickstart", "status": "success", "path": "en/agents-and-tools/mcp-tunnels/quickstart.md", - "sha256": "88819287ed86baa29cfa586ca78891f34280b76fde46119ce30bf38c9e7b7564", - "size": 11782 + "sha256": "f57bc1f5969c8e8ece82919c45133922378c7eaa476593865a9fbe208924e769", + "size": 11783 }, { "url": "https://platform.claude.com/docs/en/agents-and-tools/mcp-tunnels/console", @@ -590,8 +590,8 @@ "url": "https://platform.claude.com/docs/en/agents-and-tools/mcp-tunnels/deploy-compose", "status": "success", "path": "en/agents-and-tools/mcp-tunnels/deploy-compose.md", - "sha256": "d3d8513e512b87b596da8caa883e7c3bf46cedd482c7db7a15c1cd4bf0ce1828", - "size": 22956 + "sha256": "6aea63f10a02932835663747ef12b398b01017868d849f1ed403f6d4abab4cfc", + "size": 22968 }, { "url": "https://platform.claude.com/docs/en/agents-and-tools/mcp-tunnels/security", @@ -618,35 +618,35 @@ "url": "https://platform.claude.com/docs/en/build-with-claude/claude-in-amazon-bedrock", "status": "success", "path": "en/build-with-claude/claude-in-amazon-bedrock.md", - "sha256": "aa47d3477281e06f61e0a29140e8e4eb9252e10b3ac1986863b8cfbf8b01fbed", + "sha256": "90a73fa9d2ba529492b3c698d8c122870604c61926870fc08c69e68abd55e268", "size": 23202 }, { "url": "https://platform.claude.com/docs/en/build-with-claude/claude-on-amazon-bedrock-legacy", "status": "success", "path": "en/build-with-claude/claude-on-amazon-bedrock-legacy.md", - "sha256": "eb7af140d1902a90ead56608d789cc9d9359bfbfcf3f14c507f847c9e7b8b12d", - "size": 42397 + "sha256": "7a8c1ad9abc0af35a24f55846f63d84c037fd33128a0e369faa2d9b73923f217", + "size": 42430 }, { "url": "https://platform.claude.com/docs/en/build-with-claude/claude-platform-on-aws", "status": "success", "path": "en/build-with-claude/claude-platform-on-aws.md", - "sha256": "9c03a8b618522cf841e140b9417be17692cbc05c95d444f343081d2629b99127", - "size": 102601 + "sha256": "56d2cfcf95d33d5bfabd2fad5e7239b6886e9f3a30df2a97596191e9c71f6cab", + "size": 103253 }, { "url": "https://platform.claude.com/docs/en/build-with-claude/claude-on-vertex-ai", "status": "success", "path": "en/build-with-claude/claude-on-vertex-ai.md", - "sha256": "4ff162bffd726363f80c5155c908fe3c2cf90dfcd25bc351b8f1ebadae0a5b95", - "size": 35306 + "sha256": "4d49a554423c298663fad36d051acb5489eed5f903c8c695aaebea6bbc2cc5ea", + "size": 35332 }, { "url": "https://platform.claude.com/docs/en/build-with-claude/claude-in-microsoft-foundry", "status": "success", "path": "en/build-with-claude/claude-in-microsoft-foundry.md", - "sha256": "c29a0c57959757dbd21d9cbbe33b5e8bd9832b05f2e8c3d33ef5f42e5763d4ab", + "sha256": "54af78dde40257aee5128d89f4ed2741daacd450327cf99d83896d6210bd398e", "size": 39327 }, { @@ -660,8 +660,8 @@ "url": "https://platform.claude.com/docs/en/managed-agents/quickstart", "status": "success", "path": "en/managed-agents/quickstart.md", - "sha256": "b1fe56e1beccf830a7aaf1e2568de86cb8748e1668a8b038cfaead021ac07a52", - "size": 34247 + "sha256": "df0342f786b3f1252d387039f1efa9ab45d73b37d4a9fd577d03872f3c3c3460", + "size": 34287 }, { "url": "https://platform.claude.com/docs/en/managed-agents/onboarding", @@ -674,29 +674,29 @@ "url": "https://platform.claude.com/docs/en/managed-agents/migration", "status": "success", "path": "en/managed-agents/migration.md", - "sha256": "4723aa3b08c5e3a82b0bf9a21f6a35d447a9c6bed48635d8cc5512ecd469e5fc", - "size": 52907 + "sha256": "3a3946d4590dfbf7a6c9682f19ccb32b4d54d5fa04117da3ba5b65582f8b5b6e", + "size": 52946 }, { "url": "https://platform.claude.com/docs/en/managed-agents/agent-setup", "status": "success", "path": "en/managed-agents/agent-setup.md", - "sha256": "8bd73a5110106059dc818065f14818b04d0aec84bedf32d3d0511fa63247ad0c", - "size": 40557 + "sha256": "0e172256f97442bc6f61adf94a5d0ba7ce80d89cc61a704fe3b923b04877be2e", + "size": 41760 }, { "url": "https://platform.claude.com/docs/en/managed-agents/tools", "status": "success", "path": "en/managed-agents/tools.md", - "sha256": "9dd4f5dccc603296eb7f15ad81b6f1d83efe7756855ff936d88f43aa2fbd5e44", - "size": 20029 + "sha256": "5f484b1b01a612dcac1c3db111bfd3e962b2df08049b5e1299dd1dd567acff13", + "size": 20049 }, { "url": "https://platform.claude.com/docs/en/managed-agents/tools-web-restrictions", "status": "success", "path": "en/managed-agents/tools-web-restrictions.md", - "sha256": "850868b817d1c4c90113009ddf87fccd387b85e8a3454602243eb9c997158a45", - "size": 29924 + "sha256": "6151d8e2187b3c682246829b0d35f052cedc79bd3ca26e20d7b24f0949057260", + "size": 30900 }, { "url": "https://platform.claude.com/docs/en/managed-agents/mcp-connector", @@ -709,15 +709,15 @@ "url": "https://platform.claude.com/docs/en/managed-agents/permission-policies", "status": "success", "path": "en/managed-agents/permission-policies.md", - "sha256": "c1fd661a6124f7832c3563148b649a0487cfd7f5713d09bb573d1836c7e85ede", - "size": 48784 + "sha256": "67ce6c0f635bb6ef69c779b3ea5c620dee7df30b3487423f5bcb9cf4c34710ce", + "size": 48792 }, { "url": "https://platform.claude.com/docs/en/managed-agents/skills", "status": "success", "path": "en/managed-agents/skills.md", - "sha256": "afcf89c41413a1b7efb4548763636a7c046c43e680fbf9a1e589294a2fb815ae", - "size": 23334 + "sha256": "2a48c3034ee1172994b446f3eb7a6086bb939c8e8fc6e633ef25a865f12d9e37", + "size": 23338 }, { "url": "https://platform.claude.com/docs/en/managed-agents/choosing-an-environment", @@ -744,15 +744,15 @@ "url": "https://platform.claude.com/docs/en/managed-agents/self-hosted-sandboxes", "status": "success", "path": "en/managed-agents/self-hosted-sandboxes.md", - "sha256": "fe625847ad0a680ca93cd195c42d184657ca7064e71b82bd883217341c6ab18e", - "size": 22608 + "sha256": "7b2de3be3dfb279fe6ee1b2c0bc1cb2666370f124a0cc34f0f67bd379256d6d8", + "size": 22633 }, { "url": "https://platform.claude.com/docs/en/managed-agents/self-hosted-sandboxes-workers", "status": "success", "path": "en/managed-agents/self-hosted-sandboxes-workers.md", - "sha256": "bf7739c4581b83376e1355afbb248ace5bf8b7f56b3f6d9d0f76d8e75787a61c", - "size": 38505 + "sha256": "c7c020c7ee8130a50f95579a8a90d4679ad3e6bfea5522ce0c24dbbbd6df45b0", + "size": 38517 }, { "url": "https://platform.claude.com/docs/en/managed-agents/self-hosted-sandboxes-memory", @@ -793,36 +793,36 @@ "url": "https://platform.claude.com/docs/en/managed-agents/sessions", "status": "success", "path": "en/managed-agents/sessions.md", - "sha256": "ce397f663b32912bb87934ab8636da72aeaf108277405f91b917c7c28469fb0b", - "size": 43148 + "sha256": "774122f9d7284b1fc22ff674ad0734b49ef6bb8a79a93ffe95530c0dd20afc83", + "size": 43256 }, { "url": "https://platform.claude.com/docs/en/managed-agents/session-operations", "status": "success", "path": "en/managed-agents/session-operations.md", - "sha256": "9fa64c714e9bc171e2ffe609bd2dfd87fa65677dea1112422ce9f6795926b62b", - "size": 28315 + "sha256": "3be1da34cbad0237a72538931d67e3fde680337f1453c94ce8a6b69972e265c7", + "size": 28300 }, { "url": "https://platform.claude.com/docs/en/managed-agents/events-and-streaming", "status": "success", "path": "en/managed-agents/events-and-streaming.md", - "sha256": "b810e6a77000cbbcf09d445ccd2aa44ccc1301ac481d09b54114e35d8357dede", - "size": 66656 + "sha256": "9514b42af72a786d3acab676bcd6de74a81eaa24d7e36839786b33735f0e42b6", + "size": 66644 }, { "url": "https://platform.claude.com/docs/en/managed-agents/event-deltas", "status": "success", "path": "en/managed-agents/event-deltas.md", - "sha256": "c25a9e4955945de30d977063ee7955a1f09fbc7a1a23cd0ddb603614a1759565", - "size": 41449 + "sha256": "fe5d30752010a936d5218d706a99092e24c1e42841a3e4af9bbca4bd0ee700f7", + "size": 41486 }, { "url": "https://platform.claude.com/docs/en/managed-agents/session-observability", "status": "success", "path": "en/managed-agents/session-observability.md", - "sha256": "36d4fcb35da40aa67fe6c2d0103bfc2e7db53ce682e6726cc3167abfa0473f88", - "size": 11451 + "sha256": "eadcf9ca539704ee8c4da7326876f093f298a7ba2d6b788a1e3d8b930c7566ee", + "size": 11632 }, { "url": "https://platform.claude.com/docs/en/managed-agents/budgets", @@ -835,22 +835,22 @@ "url": "https://platform.claude.com/docs/en/managed-agents/webhooks", "status": "success", "path": "en/managed-agents/webhooks.md", - "sha256": "024f20625c6b088eb179561d09bc76c39ad23e1097e39a3fcf77ebd7aa6c934f", - "size": 33747 + "sha256": "c05952920e1da73bb2cb76952e09b2b79d269ed38a5fde64ae48af9614641ba2", + "size": 33746 }, { "url": "https://platform.claude.com/docs/en/managed-agents/define-outcomes", "status": "success", "path": "en/managed-agents/define-outcomes.md", - "sha256": "e0131b3d7fe1492ab16cc685c06709e56a58c2c1f571987a87e39a368783c89a", - "size": 31715 + "sha256": "8fe78470884301e5f0da061971b715875d2c7d089e5ccb617d473876ac202f8c", + "size": 31722 }, { "url": "https://platform.claude.com/docs/en/managed-agents/vaults", "status": "success", "path": "en/managed-agents/vaults.md", - "sha256": "0c240ecb59fc8e157dd4e762f2e5ff979d433dfb644951788d757441031261a9", - "size": 48046 + "sha256": "2fd515fff674c27daa3435a521a0285ed538ee2e1ce9f2e2e309a8013ba0be71", + "size": 48121 }, { "url": "https://platform.claude.com/docs/en/managed-agents/github", @@ -863,57 +863,57 @@ "url": "https://platform.claude.com/docs/en/managed-agents/files", "status": "success", "path": "en/managed-agents/files.md", - "sha256": "89a4bc3de2e30572bee3571fbe4603b8b48c5022f5ae7b9ffac89a6b05839424", - "size": 22444 + "sha256": "370cce7a37f120f80afdb3b5634edba24f010b32d08fe73e47eb854da3e7d64a", + "size": 22443 }, { "url": "https://platform.claude.com/docs/en/managed-agents/memory", "status": "success", "path": "en/managed-agents/memory.md", - "sha256": "1b67c3f8f0864a482fdf6f556b328acb9175dc2a278a0729f31ed1be9b9bfcf1", - "size": 49252 + "sha256": "4b3b62bcd9dfef1b9af57764f1b1f53d53661e07d03ba7c342eaad9cc25b355e", + "size": 49249 }, { "url": "https://platform.claude.com/docs/en/managed-agents/dreams", "status": "success", "path": "en/managed-agents/dreams.md", - "sha256": "c1e342e89e9233491441f9d3c93a1ae9b6410f11a8ecd1fd22a5557c6022b0fc", + "sha256": "821f1f9775c5236cb995c5134af79ea7d60f8f6b409361207ac46fcd1b4eba42", "size": 25357 }, { "url": "https://platform.claude.com/docs/en/managed-agents/multiagent-orchestration", "status": "success", "path": "en/managed-agents/multiagent-orchestration.md", - "sha256": "ab7d3a3b33e6d66a31b6b404c7a48be40b17f19c9897e5d06601b43fb3976d8b", - "size": 70633 + "sha256": "a516995d917a7414a167f564b5477612e167c5449aab4568e671e4a4e9325e34", + "size": 71089 }, { "url": "https://platform.claude.com/docs/en/managed-agents/session-threads", "status": "success", "path": "en/managed-agents/session-threads.md", - "sha256": "67b046640680cd5695872af03b6c9dd7a3d678add120293d72fe8bdfec7e355a", - "size": 36763 + "sha256": "a86ae94ff6dc6f6c94f47a5f3030dd1bbef18d045b4339b2732ca64e76ba0f2d", + "size": 36824 }, { "url": "https://platform.claude.com/docs/en/managed-agents/workflow-runs", "status": "success", "path": "en/managed-agents/workflow-runs.md", - "sha256": "d26b50717cfa5a522bfb86d14851909e31379a9af3a1535b8454b397d42a15c2", - "size": 76473 + "sha256": "676947a7c0605e48a8333c54a52e1c0321b619255933f938f7dbc6fb5da3f826", + "size": 76483 }, { "url": "https://platform.claude.com/docs/en/managed-agents/scheduled-deployments", "status": "success", "path": "en/managed-agents/scheduled-deployments.md", - "sha256": "c35260386114819dec5c573b2acd5a568801834f50c08bdac8dd230ee8cc1222", - "size": 29268 + "sha256": "fa1d20d1cd49e0d6f50fbcdbcde504e2bbf120e5f1b92b534d5c89285a508192", + "size": 29273 }, { "url": "https://platform.claude.com/docs/en/managed-agents/secure-deployment", "status": "success", "path": "en/managed-agents/secure-deployment.md", - "sha256": "b43bcc040ddb8cc4f2d3e8b15c78d58895dd320ae6b107e77b2bd975c525d970", - "size": 73190 + "sha256": "f095b47cbbf9efa793acefcdb4e118c9fbde6fea4505b167ca636033c6c8b6ab", + "size": 73208 }, { "url": "https://platform.claude.com/docs/en/managed-agents/secure-deployment-monitoring", @@ -940,50 +940,50 @@ "url": "https://platform.claude.com/docs/en/manage-claude/admin-api", "status": "success", "path": "en/manage-claude/admin-api.md", - "sha256": "47e253a8c7627ae487c4c6d9d807ee7f07726e2875503d6b3d5e301514bd99a2", - "size": 54310 + "sha256": "09e50af46b02ce95d9e7c45adbf4c8d2e3668cea8ce5ecb885e9db2c9d6382d3", + "size": 54315 }, { "url": "https://platform.claude.com/docs/en/manage-claude/user-management", "status": "success", "path": "en/manage-claude/user-management.md", - "sha256": "bfb5857bc0ae4d461498090d8fdf51687cf310ba7ac1cd4c98dda37a341a2808", - "size": 87445 + "sha256": "ec63f3f8f055fe2a83e35b2bbcc420aa2673c95490e2abb2054041d6772a016a", + "size": 87500 }, { "url": "https://platform.claude.com/docs/en/manage-claude/plugins-api", "status": "success", "path": "en/manage-claude/plugins-api.md", - "sha256": "704b1d9e90a12318da3331c501bf91e7f7ff24c4f4aba5c349195c64837924d1", - "size": 182201 + "sha256": "1c8dcd33ce959f4aad6ea8e56c5659490be55c51b432da707f865d810830e75c", + "size": 184307 }, { "url": "https://platform.claude.com/docs/en/manage-claude/workspaces", "status": "success", "path": "en/manage-claude/workspaces.md", - "sha256": "f317e73890fbc440ea9eda1014e8d0c5fa2c4ff1bfcf40addb65f6b8ccd94e63", - "size": 45523 + "sha256": "0cccacb23665185b511b79d10c4516569d7fb1d77b512067abb6b85e0314750a", + "size": 45517 }, { "url": "https://platform.claude.com/docs/en/manage-claude/organization-webhooks", "status": "success", "path": "en/manage-claude/organization-webhooks.md", - "sha256": "34ebca1a9217a96b55519034bd97fc91703d5aee0f6db192a715600b8e7c32a7", - "size": 20934 + "sha256": "aaa370f334bb7b74cc92738cee3d3a1812fef9628a4bd1db8a09bda6e70f71fe", + "size": 20944 }, { "url": "https://platform.claude.com/docs/en/manage-claude/user-profiles", "status": "success", "path": "en/manage-claude/user-profiles.md", - "sha256": "1c0e26cf51112e809c62548ad0031d5c098a6e4d9a36cd0e31c4dca31cd449dc", - "size": 34199 + "sha256": "9c16b3de17bae11334502c80dd3bb07c5ca56c9cb7a04b3dd9333c95a027e5dd", + "size": 34209 }, { "url": "https://platform.claude.com/docs/en/manage-claude/user-profiles-verification-portal", "status": "success", "path": "en/manage-claude/user-profiles-verification-portal.md", - "sha256": "a79d2def459124b75375b2dd3b3fc1e4821a8488eb8ea661f699d351d735c595", - "size": 11010 + "sha256": "46bf27c897e31c6d397c9da5514eb00862904ee696bc05624d6dab75554a0fb3", + "size": 11015 }, { "url": "https://platform.claude.com/docs/en/manage-claude/admin-api-keys", @@ -1003,15 +1003,15 @@ "url": "https://platform.claude.com/docs/en/manage-claude/workload-identity-federation", "status": "success", "path": "en/manage-claude/workload-identity-federation.md", - "sha256": "4ef04a74350663c1e7dfccbf24e5f0263f54a70b36f4eb16f38be1c7c9ecee10", - "size": 26374 + "sha256": "d6c36977b9ed8da84e2fc76d4b20d18f96d016b5805ba93ba9bb8d67b4faf1d0", + "size": 26380 }, { "url": "https://platform.claude.com/docs/en/manage-claude/wif-admin-api", "status": "success", "path": "en/manage-claude/wif-admin-api.md", - "sha256": "fdb46dd2d38cb17606ff284cc6b1219901396acf122f80beaccf505493a3468e", - "size": 46611 + "sha256": "4d9e36c0fa738b1ac119cff2c6e68c0536887c0d1f2c8b38898d4ef9ca17945a", + "size": 46621 }, { "url": "https://platform.claude.com/docs/en/manage-claude/wif-reference", @@ -1031,22 +1031,22 @@ "url": "https://platform.claude.com/docs/en/manage-claude/wif-providers/gcp", "status": "success", "path": "en/manage-claude/wif-providers/gcp.md", - "sha256": "d04893ddf3b533cf15de7b8cc5eae3acfb434a078c0a00e4f39392c181256806", - "size": 22557 + "sha256": "08f450a184dedc311ed392860fb5ebb9580e176730fe75d2757630b0b22c2165", + "size": 22600 }, { "url": "https://platform.claude.com/docs/en/manage-claude/wif-providers/azure", "status": "success", "path": "en/manage-claude/wif-providers/azure.md", - "sha256": "b9d44d32fbe3f171764ccdee345efc00db8e7c34e85bef85780f10cc13349ab2", - "size": 70012 + "sha256": "75cdeb06142eb4f6c70d2c1b4293e06c03b388f62dd847498647cb98ef88bfe8", + "size": 70068 }, { "url": "https://platform.claude.com/docs/en/manage-claude/wif-providers/github-actions", "status": "success", "path": "en/manage-claude/wif-providers/github-actions.md", - "sha256": "6beae92ce8bcf1ca8c6f331ee723128523839b2edfcc21d5f149779e57de9c5a", - "size": 14835 + "sha256": "ad2400e8ca0019092c77581c6e99bd555c9e24a99857822b0981e44f8ce7d1d6", + "size": 14833 }, { "url": "https://platform.claude.com/docs/en/manage-claude/wif-providers/kubernetes", @@ -1059,8 +1059,8 @@ "url": "https://platform.claude.com/docs/en/manage-claude/wif-providers/spiffe", "status": "success", "path": "en/manage-claude/wif-providers/spiffe.md", - "sha256": "f53a12003527f70dea9c6e453bcd247a23dff22c8e963b9ffdd7e818bcf830be", - "size": 30608 + "sha256": "89d858fff457c6de08c45f40f6784df689697e1d2aff6b36e885dba9a9c9b2b9", + "size": 30603 }, { "url": "https://platform.claude.com/docs/en/manage-claude/wif-providers/okta", @@ -1073,15 +1073,15 @@ "url": "https://platform.claude.com/docs/en/manage-claude/usage-cost-api", "status": "success", "path": "en/manage-claude/usage-cost-api.md", - "sha256": "f6df596832f94bff11887ec6e08de686ce279fa7f35b7750fc3e8228736f4672", - "size": 16879 + "sha256": "d3eda87c0ad7ae0e0f747ec0c15797d9e93faf260d722bf331326b02bd689028", + "size": 16904 }, { "url": "https://platform.claude.com/docs/en/manage-claude/rate-limits-api", "status": "success", "path": "en/manage-claude/rate-limits-api.md", - "sha256": "82ec0cd8a886e779ff3284aeaab59f1f7c14f4c389f92e41a790eaacbb7adeff", - "size": 39731 + "sha256": "7de9ec719310d3946b2b4315351cf4f4a17bd33aca9700dc4fbaa5e774048edc", + "size": 39725 }, { "url": "https://platform.claude.com/docs/en/manage-claude/analytics-api", @@ -1094,15 +1094,15 @@ "url": "https://platform.claude.com/docs/en/manage-claude/claude-code-analytics-api", "status": "success", "path": "en/manage-claude/claude-code-analytics-api.md", - "sha256": "c27275b8a8093bbafa9bc853035eced0116e71cfe3ba4598eabfa8c5677c6a6b", - "size": 14087 + "sha256": "4bd6632170bc635365fac0dca2371877b6e7ef2b23ab827ec9f4afb82933c1f3", + "size": 14092 }, { "url": "https://platform.claude.com/docs/en/manage-claude/spend-limits-api", "status": "success", "path": "en/manage-claude/spend-limits-api.md", - "sha256": "2c9d726e7b8eaa1c4630356772e81d87fc4b52f3877943754f0397bf33f07739", - "size": 82675 + "sha256": "2ec9de97a7af0a3a61f6e84c4038dc0b3c3bf5a3b776af59644fc0afce5a5505", + "size": 82739 }, { "url": "https://platform.claude.com/docs/en/manage-claude/opentelemetry", @@ -1115,7 +1115,7 @@ "url": "https://platform.claude.com/docs/en/manage-claude/opentelemetry/sdk", "status": "success", "path": "en/manage-claude/opentelemetry/sdk.md", - "sha256": "f86f7ea05d341159590aea487e37d35e3cbffd0eb9ac55b9a72892bf9ae7fe3a", + "sha256": "ae1607fa72359ecf1f5216c5e881e3656c420abcd933c148c5849c94991f915c", "size": 31922 }, { @@ -1129,29 +1129,29 @@ "url": "https://platform.claude.com/docs/en/manage-claude/data-residency", "status": "success", "path": "en/manage-claude/data-residency.md", - "sha256": "68c442adb020bad556eaf14f5ecc6192e9173d99894556594ef1251b00ae231c", - "size": 15345 + "sha256": "b1b7a94e0c53b8c7d6293d7643e2813e794e2b7f4e5ea87e8abaa87ba5464f91", + "size": 15380 }, { "url": "https://platform.claude.com/docs/en/manage-claude/api-and-data-retention", "status": "success", "path": "en/manage-claude/api-and-data-retention.md", - "sha256": "76e09f78d63bda799424837315745f17bfe658b16cb0190b05adab3c3cad9d27", + "sha256": "89dccc6ade90ac10ac593fa9cb8f8d53c252396662d1e5874ef66d367049e05e", "size": 61461 }, { "url": "https://platform.claude.com/docs/en/manage-claude/access-transparency", "status": "success", "path": "en/manage-claude/access-transparency.md", - "sha256": "e34b58079c789c921d5276daef18f66091c5343596125a9f6b60b3cfcdfd1ff4", - "size": 25143 + "sha256": "d530f65f6b259ba08b3870c65a785b256e78da7c5e179fcbd018468e81b0ff13", + "size": 25155 }, { "url": "https://platform.claude.com/docs/en/manage-claude/access-transparency-log", "status": "success", "path": "en/manage-claude/access-transparency-log.md", - "sha256": "f9721c4df9b5231d8b9cad5db002509cd68bdcc93bdd7244e5964d967c9d0dcd", - "size": 56864 + "sha256": "a54015c499ee74c51de863c550287efda1330a3d3690a163afd0b5143e56ce65", + "size": 56898 }, { "url": "https://platform.claude.com/docs/en/manage-claude/cmek", @@ -1206,50 +1206,50 @@ "url": "https://platform.claude.com/docs/en/manage-claude/inference-hooks-endpoint", "status": "success", "path": "en/manage-claude/inference-hooks-endpoint.md", - "sha256": "eb0133ca307fa63ba9ea3c4489769d410c79fac2fec168da22dc5acb15129695", - "size": 52879 + "sha256": "c22fac1c99104e46efaf8ca3da8bc3a4a3d568a89723f4eca0c6a537295f3b7d", + "size": 53895 }, { "url": "https://platform.claude.com/docs/en/manage-claude/compliance-api", "status": "success", "path": "en/manage-claude/compliance-api.md", - "sha256": "bb8261a0f48a6bea45e615c0bb48d541a3d838e310be853d263518e14f9041dd", - "size": 10158 + "sha256": "d6b9814e15da65c7d58d1bb73647f9060f6c6dc65f3f782eb347dec62c4c4b85", + "size": 10163 }, { "url": "https://platform.claude.com/docs/en/manage-claude/compliance-api-access", "status": "success", "path": "en/manage-claude/compliance-api-access.md", - "sha256": "f1787c44bff7b624c542df4b41dcdecaa6aab67e3400b36c9ee726e037f21405", + "sha256": "20a6172dbbb723edbf14becf2141ecdd513c4c42e2c3647884b4b29858198e8b", "size": 17743 }, { "url": "https://platform.claude.com/docs/en/manage-claude/compliance-activity-feed", "status": "success", "path": "en/manage-claude/compliance-activity-feed.md", - "sha256": "dd26846e0484912b27af1b672031cf045195902b8ab9c7835bfbd5be58d64520", - "size": 17864 + "sha256": "54b5bfe86120f84e2d8825f043dd872c6b251ad95fe44846ac1e69d77d7f8e02", + "size": 17869 }, { "url": "https://platform.claude.com/docs/en/manage-claude/compliance-content-data", "status": "success", "path": "en/manage-claude/compliance-content-data.md", - "sha256": "4a5423cd32aaeb8e092393470a2cfd4e18e622583c64caf4c301657b6248d897", - "size": 26244 + "sha256": "53ab155a21c8cedec7a6458da7ad1cf7c7eec37d2b6ed20a75190d285de8fcad", + "size": 26254 }, { "url": "https://platform.claude.com/docs/en/manage-claude/compliance-sessions", "status": "success", "path": "en/manage-claude/compliance-sessions.md", - "sha256": "76cd8c719d4a3dbb1bb0987ee5e57e679b10cbd515bead62a5f5d10ec5e9afd5", - "size": 54543 + "sha256": "5c85c00d8d08e5b0a71410325e93602ef733f8bc1d373b663b90a20b6511d1b9", + "size": 54553 }, { "url": "https://platform.claude.com/docs/en/manage-claude/compliance-org-data", "status": "success", "path": "en/manage-claude/compliance-org-data.md", - "sha256": "86f064290c8ecdd561aaf41963f1e3f0cd9b309db2c897cc3f62ca0e8481d324", - "size": 26648 + "sha256": "436572f8114b107e988e9072d8f21e80a44430a6c5a105b0d07807cf3093cf43", + "size": 26672 }, { "url": "https://platform.claude.com/docs/en/manage-claude/compliance-integration-patterns", @@ -1262,14 +1262,14 @@ "url": "https://platform.claude.com/docs/en/manage-claude/compliance-errors", "status": "success", "path": "en/manage-claude/compliance-errors.md", - "sha256": "f565f5dd1d303855398c5e67a7ce4cae67a35cbbc29cd9783cc68dbd14b2836c", - "size": 55477 + "sha256": "52d28b50d3db614d72ee94dd5fa0bad045a09171c574d8b80eda41599b91ad9c", + "size": 55482 }, { "url": "https://platform.claude.com/docs/en/manage-claude/compliance-faq", "status": "success", "path": "en/manage-claude/compliance-faq.md", - "sha256": "4dfd4809a213f92470d50adf709984589f68c6827e8245a8de0dd73ffe233748", + "sha256": "0c5e293603b5a4c4c157f5a18d9587b02a5867ece05ff4d9105b5061a66f98e2", "size": 26799 }, { @@ -1283,29 +1283,29 @@ "url": "https://platform.claude.com/docs/en/about-claude/use-case-guides/ticket-routing", "status": "success", "path": "en/about-claude/use-case-guides/ticket-routing.md", - "sha256": "89211f6aefe70c25f5e859064232b09dc474fdbb9f1ad0a61a880e4a8e356484", - "size": 75146 + "sha256": "e98ac13ccc7e2d0a4d4335d56cb7226f07c93fc825ab60e29293130e680f617b", + "size": 75104 }, { "url": "https://platform.claude.com/docs/en/about-claude/use-case-guides/customer-support-chat", "status": "success", "path": "en/about-claude/use-case-guides/customer-support-chat.md", - "sha256": "7435447f5e77c0d7bdc0df01f6c23e4dd26ab90e97a711b1770a80f06a8c870c", - "size": 55004 + "sha256": "8ed13e5ebc9a93f748dde5a48709e3f0e0ee3d7b1596261ebf3eccf481246802", + "size": 54985 }, { "url": "https://platform.claude.com/docs/en/about-claude/use-case-guides/content-moderation", "status": "success", "path": "en/about-claude/use-case-guides/content-moderation.md", - "sha256": "9be8b8d8a044b467369b0910319e89cbb927968d0939758bc3bbc9e442ad5396", - "size": 115213 + "sha256": "0b7444bdc1b2678ddaffecf267f503f571d710fd8052567a570789bb27038cb7", + "size": 115263 }, { "url": "https://platform.claude.com/docs/en/about-claude/use-case-guides/legal-summarization", "status": "success", "path": "en/about-claude/use-case-guides/legal-summarization.md", - "sha256": "00f6bf54f8c08443c4d1e89311952f765f722ad9aa1dd86befe8844e94741d9a", - "size": 57935 + "sha256": "14bb53eb34b2899c6226fbcde61a1777d260e7bf10c99a01b33f65789da02c70", + "size": 57932 }, { "url": "https://platform.claude.com/docs/en/about-claude/use-case-guides/commerce-agents", @@ -1325,8 +1325,8 @@ "url": "https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/claude-prompting-best-practices", "status": "success", "path": "en/build-with-claude/prompt-engineering/claude-prompting-best-practices.md", - "sha256": "21a866aa68b8fd00667ed14ffffb60b405168ce415c4dbe128a14bbacb0bb978", - "size": 74503 + "sha256": "741fd447f6e3b9dcd00c3b95cdf572085a86fde7666f97dc55285663b36b7aee", + "size": 74539 }, { "url": "https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/prompting-claude-fable-5-1", @@ -1339,43 +1339,43 @@ "url": "https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/prompting-claude-fable-5", "status": "success", "path": "en/build-with-claude/prompt-engineering/prompting-claude-fable-5.md", - "sha256": "9a4d1966c0c7724673f890cc7b6f48bd84d0b01ff32504364df21ed64461131a", - "size": 19324 + "sha256": "9da0d559e53b5730f03e432ca032afac9852a5582da07a3c7d9d00b9d5c3f6a9", + "size": 19326 }, { "url": "https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/prompting-claude-opus-5-5", "status": "success", "path": "en/build-with-claude/prompt-engineering/prompting-claude-opus-5-5.md", - "sha256": "04956a0f74c2f38781e354a4e3df1b2d5fc701ad691f33c31c66f030e201b6ea", - "size": 28879 + "sha256": "37c81d6119dc00a5bf131cd13eb0eb108e8bfbe66bff27f2bc64456299df2a95", + "size": 28855 }, { "url": "https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/prompting-claude-opus-5", "status": "success", "path": "en/build-with-claude/prompt-engineering/prompting-claude-opus-5.md", - "sha256": "4ca67ba8e89375f49a2d36efe94a6af1757ced731610cd02a1e2899734236c9b", - "size": 12941 + "sha256": "43cd9ce21193be4595a8debe8a89063b871c270d6ebbff5a5b3c63cf207e6a3c", + "size": 12953 }, { "url": "https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/prompting-claude-opus-4-8", "status": "success", "path": "en/build-with-claude/prompt-engineering/prompting-claude-opus-4-8.md", - "sha256": "284215e1634f7c6df51d088d60dce340d2b77a93c239911a521c9b56cbd4fc83", - "size": 16518 + "sha256": "0a24ebb01c8a24370363f6862cc8c2f347a27ef193cd65b5be95043736826c2c", + "size": 16546 }, { "url": "https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/prompting-claude-sonnet-5-5", "status": "success", "path": "en/build-with-claude/prompt-engineering/prompting-claude-sonnet-5-5.md", - "sha256": "f3617ae74a4ad28dbbcedce7e465bec585659fc46fcdb1052e013da4c417ca77", - "size": 28031 + "sha256": "69e646b9ce97c2c5af96522017ce16a309a6d18653f940014c27e4f91ec49b39", + "size": 28046 }, { "url": "https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/prompting-claude-sonnet-5", "status": "success", "path": "en/build-with-claude/prompt-engineering/prompting-claude-sonnet-5.md", - "sha256": "300753efed8782406642119a51a2a3c7f47668254c38d0d65df83777a0e98620", - "size": 15966 + "sha256": "750e603dbacf2e1d508027960bcf8f9b448440e6f3e1d8fc8019b9cd7818fb15", + "size": 15995 }, { "url": "https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/prompting-claude-haiku-5-5", @@ -1388,15 +1388,15 @@ "url": "https://platform.claude.com/docs/en/test-and-evaluate/develop-tests", "status": "success", "path": "en/test-and-evaluate/develop-tests.md", - "sha256": "55bf56219b827dc817fb176672455465d43153fe7c782e8aae2857a19d98ea13", - "size": 153085 + "sha256": "28068b61e61a32b194c32bd4db1b437087bdd884345168c04b8e8cbf526fe1a5", + "size": 153054 }, { "url": "https://platform.claude.com/docs/en/test-and-evaluate/strengthen-guardrails/reduce-latency", "status": "success", "path": "en/test-and-evaluate/strengthen-guardrails/reduce-latency.md", - "sha256": "565eacd59aa4a6ffec4b5ea5f36cfb8f798269bde1179f8126b1b4ddebc87bc1", - "size": 10826 + "sha256": "0909ef0c6d743674ea174eb17c1467e661c4e0f6123507e51ab7387d3bd32fea", + "size": 10842 }, { "url": "https://platform.claude.com/docs/en/test-and-evaluate/strengthen-guardrails/reduce-hallucinations", @@ -1409,8 +1409,8 @@ "url": "https://platform.claude.com/docs/en/test-and-evaluate/strengthen-guardrails/increase-consistency", "status": "success", "path": "en/test-and-evaluate/strengthen-guardrails/increase-consistency.md", - "sha256": "74f9dee8ab595972f291bb158ac6387dbc9761396aa4f136ecbc7c4606b50157", - "size": 13948 + "sha256": "ee9f44efa96fd38c9c39447d6d907891dbf4a6f93d1506bf8690e8c8332cff53", + "size": 13947 }, { "url": "https://platform.claude.com/docs/en/test-and-evaluate/strengthen-guardrails/mitigate-jailbreaks", @@ -1444,29 +1444,29 @@ "url": "https://platform.claude.com/docs/en/models/overview", "status": "success", "path": "en/models/overview.md", - "sha256": "86d26d2b1f39ff97f686ebf6633042048886b26ece5a1214a4b8a3352a35f692", - "size": 20455 + "sha256": "968e6bc022276fe6d4cefa24f19ebfffcd8f25e5adf358d32612da16f694bd8e", + "size": 20456 }, { "url": "https://platform.claude.com/docs/en/models/fable-5-1/overview", "status": "success", "path": "en/models/fable-5-1/overview.md", - "sha256": "bbc86f0ac66e84d0ea2befd302d0a1e6fb3efd302d78a58782ab34e274af8476", - "size": 15136 + "sha256": "2601c11e1eedf8972055ae26e2612d08944e1e43bfdf79eefc606a51e2b1af9c", + "size": 15149 }, { "url": "https://platform.claude.com/docs/en/models/fable-5-1/whats-new-fable-5-1", "status": "success", "path": "en/models/fable-5-1/whats-new-fable-5-1.md", - "sha256": "fbd536d426cd06d1cd8f4bb80aff06839802f589b71719d588f422554077a0bd", - "size": 40103 + "sha256": "a86a3cfc80284406ecec90ac1d7bc81dc7ff84c423fcc2bf4d0496d5c2f73565", + "size": 40215 }, { "url": "https://platform.claude.com/docs/en/models/fable-5-1/migration-guide", "status": "success", "path": "en/models/fable-5-1/migration-guide.md", - "sha256": "031a0754e490882060342763b1af500d4522b11c4d4dd0762d41df4b699b6662", - "size": 95745 + "sha256": "096b244d7f31538dc109a5c2840330ca0650d9274b1eabb862e073efe27f5d04", + "size": 95750 }, { "url": "https://platform.claude.com/docs/en/models/opus-5-5/overview", @@ -1479,15 +1479,15 @@ "url": "https://platform.claude.com/docs/en/models/opus-5-5/whats-new-opus-5-5", "status": "success", "path": "en/models/opus-5-5/whats-new-opus-5-5.md", - "sha256": "d0a31759905fbf36aa7972389cae82b1a72867b14724934cd83f28f5a6fed6cc", - "size": 22183 + "sha256": "865db3f46b5a79fe7b3e4ec78af86d647857d3d9484add6c66bdf24ade6b1b84", + "size": 22219 }, { "url": "https://platform.claude.com/docs/en/models/opus-5-5/migration-guide", "status": "success", "path": "en/models/opus-5-5/migration-guide.md", - "sha256": "725e52d0325163346e16b992bf7d22f4f2958da9456db86d9da8443f1307da50", - "size": 90716 + "sha256": "40ace2e1fb288b83425649d390c5e5ca2b649effce678e8b3384aa029b68dfda", + "size": 90752 }, { "url": "https://platform.claude.com/docs/en/models/sonnet-5-5/overview", @@ -1626,15 +1626,15 @@ "url": "https://platform.claude.com/docs/en/about-claude/models/optimizing-for-cost-and-intelligence", "status": "success", "path": "en/about-claude/models/optimizing-for-cost-and-intelligence.md", - "sha256": "af00fdfe22ec65adc4f4e85c52ad1ffab749e366d78e5c1fb3cd52e3cf7722f0", - "size": 182361 + "sha256": "7ee7b3f5549a6a41c6b3d80600204e167e0dfc5494e66e518f589f501b70f3e2", + "size": 182718 }, { "url": "https://platform.claude.com/docs/en/about-claude/models/migration-guide", "status": "success", "path": "en/about-claude/models/migration-guide.md", - "sha256": "6eb88eac34b9dcc52b0defa3dcba287337cd46fcacebf723ec765736e4cdcede", - "size": 1062 + "sha256": "138955f7c3dfc800525b7ee10700df368423b9329a4e904ad01c3817b9513913", + "size": 1066 }, { "url": "https://platform.claude.com/docs/en/about-claude/models/model-ids-and-versions", @@ -1661,8 +1661,8 @@ "url": "https://platform.claude.com/docs/en/about-claude/pricing", "status": "success", "path": "en/about-claude/pricing.md", - "sha256": "cd91b9b575a49310938ef2de2aac6bcc2d41475611516ff36c994ead2e9469b9", - "size": 50513 + "sha256": "88ae8282a9d5e48bc3aa7cde98c80b468454abaaa348de5baf09ef27f1a05c6f", + "size": 50718 }, { "url": "https://platform.claude.com/docs/en/about-claude/api-credits-for-subscribers", @@ -1675,175 +1675,175 @@ "url": "https://platform.claude.com/docs/en/release-notes/system-prompts/overview", "status": "success", "path": "en/release-notes/system-prompts/overview.md", - "sha256": "3f510048960ce8f8611c855399544690a75a8f550d19559b47860468e7793bfb", - "size": 4298 + "sha256": "ef03ab8a3212325f1a5f8e837bfdbb521e7a64d7ab7e20d2188275b7dbc5de41", + "size": 4300 }, { "url": "https://platform.claude.com/docs/en/release-notes/system-prompts/claude-haiku-5-5", "status": "success", "path": "en/release-notes/system-prompts/claude-haiku-5-5.md", - "sha256": "9bfb388f4d4d0fef99c051de67463d5604f557efb5a84c09d36f331ed0b5ef47", - "size": 27882 + "sha256": "21284760f82083af199b3d653164b9bc16cbf6318f3270f649b3f693efb15912", + "size": 27884 }, { "url": "https://platform.claude.com/docs/en/release-notes/system-prompts/claude-sonnet-5-5", "status": "success", "path": "en/release-notes/system-prompts/claude-sonnet-5-5.md", - "sha256": "502da0082b33aadda8716f252ea3b84bf3281c7e4b75f16e5c71f639fa0837d2", - "size": 42241 + "sha256": "a397b4cf83c0450bd31026f2fa788be85a8512a3e2f128e164efeb3d71bec045", + "size": 42243 }, { "url": "https://platform.claude.com/docs/en/release-notes/system-prompts/claude-opus-5-5", "status": "success", "path": "en/release-notes/system-prompts/claude-opus-5-5.md", - "sha256": "2e33ca9aad00727eb4b61974b888187ca0fba5f82a085ff7f2af64eb88c054fe", - "size": 27507 + "sha256": "da32ecefd6038927897b0ca473c9a17b9aafe80932cca93a1af61298f69e5dc7", + "size": 27509 }, { "url": "https://platform.claude.com/docs/en/release-notes/system-prompts/claude-fable-5-1", "status": "success", "path": "en/release-notes/system-prompts/claude-fable-5-1.md", - "sha256": "4ad8174d706a51e5f68083b0d690dbf33e25f373697b99efc5312674635ed16d", - "size": 28359 + "sha256": "88dd9a52f21aa961e713f4488c1c5355770c4c299a5599daa440757ce366d2d5", + "size": 28361 }, { "url": "https://platform.claude.com/docs/en/release-notes/system-prompts/claude-opus-5", "status": "success", "path": "en/release-notes/system-prompts/claude-opus-5.md", - "sha256": "2ee7aa8e01827d0268af5d88b267fc3f22b40796ad4dd5028487121f35f252fe", - "size": 22267 + "sha256": "4e6a284295a41cf900a075c84e291f34e6cbce3dd0c51919228182868a2cd35a", + "size": 22269 }, { "url": "https://platform.claude.com/docs/en/release-notes/system-prompts/claude-sonnet-5", "status": "success", "path": "en/release-notes/system-prompts/claude-sonnet-5.md", - "sha256": "1e0e6aab05c4c1f014f27c3125d10850011500729cd5ba3dc932d5b5f9a2ce3e", - "size": 23797 + "sha256": "8c89b474389db7864428152a8f1574d5cdbd701709165e03baae1e912f5eb3b3", + "size": 23799 }, { "url": "https://platform.claude.com/docs/en/release-notes/system-prompts/claude-fable-5", "status": "success", "path": "en/release-notes/system-prompts/claude-fable-5.md", - "sha256": "15ff3cca481f9050b1f89c16cfc75c4933362214d975db5f01d79f3174382352", - "size": 22414 + "sha256": "9e495bdd62b9db3168b6b61eb8ffafcb2651af5b31a3708fb9928f3acde127cb", + "size": 22416 }, { "url": "https://platform.claude.com/docs/en/release-notes/system-prompts/claude-opus-4-8", "status": "success", "path": "en/release-notes/system-prompts/claude-opus-4-8.md", - "sha256": "ea6f6852b81f5cc7c649fe0951d9e79918694a2aee23bcab352c839224f52231", - "size": 23051 + "sha256": "b3f098564fb19275d2b990e9626501ff902dab8ab68229946dfaeaad38842436", + "size": 23053 }, { "url": "https://platform.claude.com/docs/en/release-notes/system-prompts/claude-opus-4-7", "status": "success", "path": "en/release-notes/system-prompts/claude-opus-4-7.md", - "sha256": "2d4bec02133941bb839537e3ecfb8458552e28cf0345e42077e7b54ae664632a", - "size": 24493 + "sha256": "db28d7f939a4b7ea3ab4a66e28556c29721f6b0a15edd278c03d57994ead8604", + "size": 24495 }, { "url": "https://platform.claude.com/docs/en/release-notes/system-prompts/claude-sonnet-4-6", "status": "success", "path": "en/release-notes/system-prompts/claude-sonnet-4-6.md", - "sha256": "09d100851112832a022382faf649b683350cc3e29e94830a93dd19832be393c3", - "size": 39818 + "sha256": "124d9b3d9c2c7894a48e39450f00e18ef876425c36f4a81f718b5687d494db18", + "size": 39820 }, { "url": "https://platform.claude.com/docs/en/release-notes/system-prompts/claude-opus-4-6", "status": "success", "path": "en/release-notes/system-prompts/claude-opus-4-6.md", - "sha256": "1899b8590bfa8a1ed70cad7080d2879878e47200dda6f2445c047b05d669354b", - "size": 19116 + "sha256": "7b33a5dd8656766478696c750543bbc21c276afb5da96c62ba29455a19f07d2b", + "size": 19118 }, { "url": "https://platform.claude.com/docs/en/release-notes/system-prompts/claude-opus-4-5", "status": "success", "path": "en/release-notes/system-prompts/claude-opus-4-5.md", - "sha256": "e7e06e8775bf7d0351a30947205dbc8598a2db71e17571cc00504b89408f1e9c", - "size": 32564 + "sha256": "740285daa9fcd96492bb5b6eca275fc4616a17ae6779da9d07cd775995b9f836", + "size": 32566 }, { "url": "https://platform.claude.com/docs/en/release-notes/system-prompts/claude-haiku-4-5", "status": "success", "path": "en/release-notes/system-prompts/claude-haiku-4-5.md", - "sha256": "352d57a3cd899b691b304b36d09b3b450199971a0ec14eb74b15d84fe8a333cf", - "size": 70214 + "sha256": "eb9cdb6b9db3552999c933b1467b335f5f25e15def4c776695cf70d08d25f532", + "size": 70216 }, { "url": "https://platform.claude.com/docs/en/release-notes/system-prompts/claude-sonnet-4-5", "status": "success", "path": "en/release-notes/system-prompts/claude-sonnet-4-5.md", - "sha256": "b9929ef558f4d6060940006e1f3cd548c29f8bf1b1af9c6f21e94c5ee0bf167b", - "size": 42912 + "sha256": "c29265fce4cc71d4a19d86c148700fb2ffdb8c1330c34ce4c6f73f3eb791df62", + "size": 42914 }, { "url": "https://platform.claude.com/docs/en/release-notes/system-prompts/claude-opus-4-1", "status": "success", "path": "en/release-notes/system-prompts/claude-opus-4-1.md", - "sha256": "f848748a6964e84c1d4c4cd6f7042250d7646bd6e715090918ed9dc4fcb53f21", - "size": 18974 + "sha256": "f8fdace4d1dcf5b4a49d3a1f12e008f302b94a35330b19f1db61e9edfb7ce2aa", + "size": 18976 }, { "url": "https://platform.claude.com/docs/en/release-notes/system-prompts/claude-opus-4", "status": "success", "path": "en/release-notes/system-prompts/claude-opus-4.md", - "sha256": "5b1f6856ced15adf6eb30455244842beb029c5f6f6569cb000bf3d89c64fcf46", - "size": 44384 + "sha256": "9783d8b3a924694b619f37a2dff2b52305a31b887a2f9b8543d6736f26307839", + "size": 44386 }, { "url": "https://platform.claude.com/docs/en/release-notes/system-prompts/claude-sonnet-4", "status": "success", "path": "en/release-notes/system-prompts/claude-sonnet-4.md", - "sha256": "94a7f0d4178ec46aa1c9f51e62600ff0cfcadd8e3153bdaaf410f0bd7868df00", - "size": 44398 + "sha256": "c9dad580986194e682f4a624bab9533225fac618c7382bdf038d59600aaf2c79", + "size": 44400 }, { "url": "https://platform.claude.com/docs/en/release-notes/system-prompts/claude-sonnet-3-7", "status": "success", "path": "en/release-notes/system-prompts/claude-sonnet-3-7.md", - "sha256": "92ad3a10008533416523441f2f42e995fd2eb77187f1cce2a9e420b5528e4c06", - "size": 13247 + "sha256": "7dae8c4e1bdaeaf54d3d5ba43682cc88c4670b7b9797fc69d55c414ec7c403b2", + "size": 13249 }, { "url": "https://platform.claude.com/docs/en/release-notes/system-prompts/claude-sonnet-3-5", "status": "success", "path": "en/release-notes/system-prompts/claude-sonnet-3-5.md", - "sha256": "f61ca55c33d0e90b242d2662dbf62d92d02cd8c9723b7e2ee1595c67ae459f3e", - "size": 68601 + "sha256": "2c848fafabadb9d1bf9851c81ae375c2db325d1ae49dec960c4f676508cdd4b7", + "size": 68603 }, { "url": "https://platform.claude.com/docs/en/release-notes/system-prompts/claude-haiku-3-5", "status": "success", "path": "en/release-notes/system-prompts/claude-haiku-3-5.md", - "sha256": "efdd89467820aa466472c85b8137021a4fc8759147895470429d8f9ed3d0dbc7", - "size": 21598 + "sha256": "59461161fb55bafddfaa72db70322b493f5dd91b2a648e4fdd188228ff9dfa1b", + "size": 21600 }, { "url": "https://platform.claude.com/docs/en/release-notes/system-prompts/claude-opus-3", "status": "success", "path": "en/release-notes/system-prompts/claude-opus-3.md", - "sha256": "534b366d23d673f86409089431e7aebf427b4e886b648d8a406586afd913dfba", - "size": 2519 + "sha256": "d9f0c66799e57cbba489deea54848e8b1ca4423fe60764575d7c5851b2e5c96b", + "size": 2521 }, { "url": "https://platform.claude.com/docs/en/release-notes/system-prompts/claude-haiku-3", "status": "success", "path": "en/release-notes/system-prompts/claude-haiku-3.md", - "sha256": "012747dbff5081b9040c573f91a1ccfe58b7ea4b562442262718f46347e0ce6a", - "size": 1116 + "sha256": "0605dc5324b5b1be4c7075f6620e2cf84b0616ab66c91a85bf97adc9d19dc75a", + "size": 1118 }, { "url": "https://platform.claude.com/docs/en/cli-sdks-libraries/overview", "status": "success", "path": "en/cli-sdks-libraries/overview.md", - "sha256": "b0ac1837d9448da213225674a8d2e014f2d60b841b7fa00e2644d5ed5be06735", + "sha256": "02f28e5da6f9501b90e3fcbde32fb79e83f2ae07c52a3c785e66f7bfe32736c0", "size": 5429 }, { "url": "https://platform.claude.com/docs/en/cli-sdks-libraries/cli/quickstart", "status": "success", "path": "en/cli-sdks-libraries/cli/quickstart.md", - "sha256": "c4c16882ea0318acef95f12233c92e6da5144502271121dcee65491212912fc5", + "sha256": "1d68eea67522be796fb40e80dbbc68fe25c9bcb9059e40118b53f8d1319f1249", "size": 5347 }, { @@ -1857,22 +1857,22 @@ "url": "https://platform.claude.com/docs/en/cli-sdks-libraries/cli/using", "status": "success", "path": "en/cli-sdks-libraries/cli/using.md", - "sha256": "174386b4635e46dd43f54111f2ced1c845c229d053c0c181e9b177abc389228b", - "size": 14091 + "sha256": "760cce36a0438a3fb26a2bc7999b482d34836bde8b9a872b4b02f3983732ccca", + "size": 14087 }, { "url": "https://platform.claude.com/docs/en/cli-sdks-libraries/cli/scripting", "status": "success", "path": "en/cli-sdks-libraries/cli/scripting.md", - "sha256": "57daef2c945c01d8ac58e7447717b3153ab70978efc82c17cbf866ca61b9e877", - "size": 5959 + "sha256": "0c0a1aa9ec97e08105dec9ee42c0b6286321b8d4af23aaefdadc02857a842426", + "size": 5956 }, { "url": "https://platform.claude.com/docs/en/cli-sdks-libraries/cli/apply", "status": "success", "path": "en/cli-sdks-libraries/cli/apply.md", - "sha256": "21aadd1ec31537fa7571fdadc467cf10bb29126495ad34bf4ebee60b95766d85", - "size": 15484 + "sha256": "9bcc40761c78422b71e18bf1fc011ac87e61c0d30cb15632b306d48802dd208c", + "size": 15472 }, { "url": "https://platform.claude.com/docs/en/cli-sdks-libraries/cli/sessions-connect", @@ -1913,14 +1913,14 @@ "url": "https://platform.claude.com/docs/en/cli-sdks-libraries/sdks/go", "status": "success", "path": "en/cli-sdks-libraries/sdks/go.md", - "sha256": "63c99a4363f5e48859fe64b11eecad71539baf8e76d65fd350ef38fcaa81506b", - "size": 27168 + "sha256": "c13ddb0c89a09f1fd739f6c18fa1f0acae656238e2ec513ffaf99929f901bf18", + "size": 27167 }, { "url": "https://platform.claude.com/docs/en/cli-sdks-libraries/sdks/java", "status": "success", "path": "en/cli-sdks-libraries/sdks/java.md", - "sha256": "21f5ff543bddf300c3dff2e04d4c8f16a9d73439d6569429174f2465f975598d", + "sha256": "6315978f04627c389b5fe0dbff37e8f95c7681a72cb7d36b190e75f0e8d1d685", "size": 48275 }, { @@ -1934,43 +1934,43 @@ "url": "https://platform.claude.com/docs/en/cli-sdks-libraries/sdks/ruby", "status": "success", "path": "en/cli-sdks-libraries/sdks/ruby.md", - "sha256": "5d2feca87938328809d8625a0730d6b79669eca513ee21f1e5b116d212d5ade1", - "size": 15363 + "sha256": "93f13c6fb84c1f00ef6d3b26dc98a08ec15095629be7a3c75de856638179614a", + "size": 15484 }, { "url": "https://platform.claude.com/docs/en/cli-sdks-libraries/libraries/apple-foundation-models", "status": "success", "path": "en/cli-sdks-libraries/libraries/apple-foundation-models.md", - "sha256": "3af3cd180b414cac2d7a78e40e1e95345f61c55fd47544a9a5dcf905ad2a4b2d", - "size": 16143 + "sha256": "ff5336a59abda628f5d747ffc00aab4e6d26b2652857d0a7460edf71d258eead", + "size": 16152 }, { "url": "https://platform.claude.com/docs/en/cli-sdks-libraries/libraries/openai-sdk", "status": "success", "path": "en/cli-sdks-libraries/libraries/openai-sdk.md", - "sha256": "04eedee35554da9e521362eae296d9967280094ffcbc7f23f5f0142529fe57c7", - "size": 35560 + "sha256": "f0932a50764a858caa3120c5400f9fe281a1b2ff1e5bb62491bdb83854ddbf2f", + "size": 35569 }, { "url": "https://platform.claude.com/docs/en/api/overview", "status": "success", "path": "en/api/overview.md", - "sha256": "3a26361b25315d1534c4ef414bc89c2829a53591ea1ab45b34d27ff96eefed21", - "size": 22679 + "sha256": "b0ddf5ca6fcafe1734cfe15927734ea0947fdcdeab74b5a0448c1a3ca93e037a", + "size": 22690 }, { "url": "https://platform.claude.com/docs/en/api/beta-headers", "status": "success", "path": "en/api/beta-headers.md", - "sha256": "d5b02c8e244bb815090c75fe21514c2ffd26134a6a315b8e9c3089edf4d0e9d4", + "sha256": "39a6050cebc69f773c7a99bf8d1d15b18734ea898f7d0b1de4d7dcbddadc22ab", "size": 9709 }, { "url": "https://platform.claude.com/docs/en/api/errors", "status": "success", "path": "en/api/errors.md", - "sha256": "c6fc04f579cb02b6f7e641731920e9a58f09afa37a3435e5eba890d04d27a396", - "size": 33515 + "sha256": "b43f0d872016245606c1a0dcad14c25c3f4edbfcba9c21931d887d02793bdc46", + "size": 33567 }, { "url": "https://platform.claude.com/docs/en/api/opentelemetry/spans", @@ -1983,15 +1983,15 @@ "url": "https://platform.claude.com/docs/en/api/rate-limits", "status": "success", "path": "en/api/rate-limits.md", - "sha256": "959581b9f4e162affc25823058a10d89d01f588908556a5e85674770d47d91ac", - "size": 36138 + "sha256": "2b1e99b3d4cad6bfc3ef9203fd2d42fe12a817eb2451874f4cecf8eb6fbfbee2", + "size": 36142 }, { "url": "https://platform.claude.com/docs/en/api/service-tiers", "status": "success", "path": "en/api/service-tiers.md", - "sha256": "7470091b5b1f8b4aee504086ee427a6d0b8eb0bf253538b1b19e056425042fe8", - "size": 8822 + "sha256": "0b49b55cdc6d8617a75fafa7816a5a010fbe54b7c02cd2e9478b545bb903a1dd", + "size": 8843 }, { "url": "https://platform.claude.com/docs/en/api/claude-platform-on-aws-iam-actions", @@ -2004,8 +2004,8 @@ "url": "https://platform.claude.com/docs/en/api/versioning", "status": "success", "path": "en/api/versioning.md", - "sha256": "be23f72b4b64b529b0fd75b38041f0932146cdb5c34e682f66c8d3df3904b76a", - "size": 4524 + "sha256": "88841e8478b8fc8c73736e594731cfc4809ceb83b579ec660054354d712445d1", + "size": 4442 }, { "url": "https://platform.claude.com/docs/en/api/ip-addresses", @@ -2025,8 +2025,8 @@ "url": "https://platform.claude.com/docs/en/api/claude-code/routines-fire", "status": "success", "path": "en/api/claude-code/routines-fire.md", - "sha256": "f5d9da1370dd2c6642af8f9ef0405c587c125b6c00deb0cf3bb3885d5e2d2569", - "size": 13774 + "sha256": "d9b0cef615a27eefdb1317f279f835d5c3f197eb7b2ed0606b961a5f36d09f4a", + "size": 13779 }, { "url": "https://platform.claude.com/docs/en/agents-and-tools/agent-skills/claude-api-skill", @@ -2039,8 +2039,8 @@ "url": "https://platform.claude.com/docs/en/release-notes/overview", "status": "success", "path": "en/release-notes/overview.md", - "sha256": "e44246a59866b69fb396bb5d53fa47fd4601791d0f388131423b76c407ac132b", - "size": 130591 + "sha256": "632020f4b3f31e65f9e9aa4b3a0a32d19a9bed30be6104247f0251f8753aafde", + "size": 131957 }, { "url": "https://platform.claude.com/docs/en/api/completions", @@ -5658,15 +5658,15 @@ "url": "https://platform.claude.com/docs/en/claude_api_primer", "status": "success", "path": "en/claude_api_primer.md", - "sha256": "774332beff5da1b0bc65fde2007ac5428bd4362f1d68a67732fb4ee1c94e63ca", - "size": 27054 + "sha256": "9fcc06bce96da5f0315fe52168939f5bbaf81ddd0864ba50dfb7410f08a4ecf4", + "size": 27076 }, { "url": "https://platform.claude.com/docs/en/api/migration-2026-10-21", "status": "success", "path": "en/api/migration-2026-10-21.md", - "sha256": "3014e18b31a24100503e97aca1c9b0a7c52cbae13b97a8ff5f9ce253a55f12c0", - "size": 85449 + "sha256": "bdcbaa693bec55353ff7b80646947a7b0ad01c35b12d66000923ea3a429d3b17", + "size": 85680 }, { "url": "https://code.claude.com/docs/en/overview", @@ -5686,8 +5686,8 @@ "url": "https://code.claude.com/docs/en/changelog", "status": "success", "path": "en/docs/claude-code/changelog.md", - "sha256": "f19ebcffc4f357b261d4ee49751f6915fcde30e526a04c659488a84b80fc74e0", - "size": 1076591 + "sha256": "4389b1188976631043f5fc6f9269f1aa75abab4995cfe278dd0493b1defdbc55", + "size": 1083282 }, { "url": "https://code.claude.com/docs/en/how-claude-code-works", @@ -5700,15 +5700,15 @@ "url": "https://code.claude.com/docs/en/features-overview", "status": "success", "path": "en/docs/claude-code/features-overview.md", - "sha256": "f58a1fe2df7ddf2bf6030cdd6d84270d010dbccef1d3a787017d493f615f7e85", - "size": 26858 + "sha256": "605c0d03041dccf379fa3e56fe8d89504d31a66e34566895bf7d01198aa6fbb2", + "size": 26896 }, { "url": "https://code.claude.com/docs/en/claude-directory", "status": "success", "path": "en/docs/claude-code/claude-directory.md", - "sha256": "9df085ab33aa735a66e2b7efeb3c0d93349c270fb239c157859c4da9119e4ffa", - "size": 28373 + "sha256": "f37af31f764f4a97d549f825abe9e71241ffe1e2c33eed4723b06346a848f663", + "size": 28394 }, { "url": "https://code.claude.com/docs/en/context-window", @@ -5721,15 +5721,15 @@ "url": "https://code.claude.com/docs/en/prompt-caching", "status": "success", "path": "en/docs/claude-code/prompt-caching.md", - "sha256": "faf9c38e2e8dbcac28e5328f1fb86b28a57fa0f1a4630ad4e6d137e8e0b0c06d", - "size": 41988 + "sha256": "1773b530e8ac1e015d14b9fb9fe4a870ffda56703c70daca5f86ae2a6d31d3e4", + "size": 42106 }, { "url": "https://code.claude.com/docs/en/memory", "status": "success", "path": "en/docs/claude-code/memory.md", - "sha256": "57effaf46f0e2f0ee63b1e80c719da46b7a3c5669a5840bb7c7ffd477d47eea3", - "size": 51390 + "sha256": "d951a26e6662ef73a97566b7e9bac1d84d477d1a15e0b193148340d05081a88c", + "size": 51857 }, { "url": "https://code.claude.com/docs/en/sessions", @@ -5742,8 +5742,8 @@ "url": "https://code.claude.com/docs/en/common-workflows", "status": "success", "path": "en/docs/claude-code/common-workflows.md", - "sha256": "e86258b835af468848af32976cbfe0123aeb635216d9502da323cc2b18953b54", - "size": 17106 + "sha256": "c0975fd28c4c36603b74287845990b2d9fc38e59057ae25240f8cf417b193af2", + "size": 17964 }, { "url": "https://code.claude.com/docs/en/prompt-library", @@ -5833,15 +5833,15 @@ "url": "https://code.claude.com/docs/en/claude-code-on-the-web", "status": "success", "path": "en/docs/claude-code/claude-code-on-the-web.md", - "sha256": "ec6bbeaf3d81e7c39926567e6501b14dbf7469f3e25f475595fcb72d9734e2bb", - "size": 42692 + "sha256": "78bb4a03aaa47bcce1a561a1b851bcac66462f9362dd78add91b9463bf52c97e", + "size": 42702 }, { "url": "https://code.claude.com/docs/en/routines", "status": "success", "path": "en/docs/claude-code/routines.md", - "sha256": "66a0b4931d816aee9a1fc8e156f67756b9f3a5ca9ff1f248380d7c7d9889189c", - "size": 40887 + "sha256": "b7986c5faced4decfc9d343d16d7ce5354044b6ff9a0bf3ff2038adc87a33b56", + "size": 41018 }, { "url": "https://code.claude.com/docs/en/desktop-quickstart", @@ -5854,8 +5854,8 @@ "url": "https://code.claude.com/docs/en/desktop", "status": "success", "path": "en/docs/claude-code/desktop.md", - "sha256": "b7f7fa05d5f0c5d0154381b3c8f9afd00515246be19c8b95227bcc19f7902924", - "size": 163933 + "sha256": "e9b10421454affb68a4c1c525ee9dbbc7b0604c79a210258e1073f3e742d9bdb", + "size": 166763 }, { "url": "https://code.claude.com/docs/en/desktop-linux", @@ -5875,8 +5875,8 @@ "url": "https://code.claude.com/docs/en/desktop-scheduled-tasks", "status": "success", "path": "en/docs/claude-code/desktop-scheduled-tasks.md", - "sha256": "b786dc6c1e511e660ffd933533d30febc19e31676a6f29e956ded2a58f758849", - "size": 12234 + "sha256": "a7301d959c16acb91b07c4cf15de53f10eb3aa5d38fa6d5511d600ee28b2bf60", + "size": 13764 }, { "url": "https://code.claude.com/docs/en/desktop-ios-simulator", @@ -5931,8 +5931,8 @@ "url": "https://code.claude.com/docs/en/code-review-pull-requests", "status": "success", "path": "en/docs/claude-code/code-review-pull-requests.md", - "sha256": "03a21e21ed2b76cab0d7dd038eacdf1ebb01c0fc1c573687bf112ebcf5856d3f", - "size": 12968 + "sha256": "6fe10e1251a219f3ac31429936c366db679a03f1973555fd55e2533010d26150", + "size": 12958 }, { "url": "https://code.claude.com/docs/en/code-review-costs", @@ -5994,8 +5994,8 @@ "url": "https://code.claude.com/docs/en/sub-agents", "status": "success", "path": "en/docs/claude-code/sub-agents.md", - "sha256": "ef0b7f52c196c22e986e546107112d74ff036a6110a9910a7ae2e4a5c4ecf356", - "size": 109902 + "sha256": "89aa73eb3f28e274650634620113a19585dd09b7f40be3dd16d584800cb60aed", + "size": 110784 }, { "url": "https://code.claude.com/docs/en/agent-view", @@ -6008,8 +6008,8 @@ "url": "https://code.claude.com/docs/en/agent-teams", "status": "success", "path": "en/docs/claude-code/agent-teams.md", - "sha256": "215467b0859639ba1af4bd81a0ae2ea26c7bbefd7e92c6b5dbc58472927855b2", - "size": 39748 + "sha256": "e9a5bec29ca3637862ab76acc0d874b07b3227d60627f741c3133164e90886d6", + "size": 39786 }, { "url": "https://code.claude.com/docs/en/cross-session-messaging", @@ -6036,22 +6036,22 @@ "url": "https://code.claude.com/docs/en/mcp-quickstart", "status": "success", "path": "en/docs/claude-code/mcp-quickstart.md", - "sha256": "e3c05d38c0643e11036044fa5fe3f7d88ab75761c6644212c21a4c5c240f9021", - "size": 24899 + "sha256": "d00c6dc14d6912661d4c0a035b0079901c8d395c37efb85518a83dcde99e184b", + "size": 24909 }, { "url": "https://code.claude.com/docs/en/mcp", "status": "success", "path": "en/docs/claude-code/mcp.md", - "sha256": "af5d6a79fcf2ef8e2d42843606d67354a32905d34dfafa6c43e4603497848a69", - "size": 123698 + "sha256": "9a42e98f81001adbefcf19d03fc40d591ffe55ba7c83b5a764ea725b403af766", + "size": 127022 }, { "url": "https://code.claude.com/docs/en/skills", "status": "success", "path": "en/docs/claude-code/skills.md", - "sha256": "df82f2aaebe552f82d1b4d89f3ad6f156520ad3e8f404644df32ed41a68a823b", - "size": 110552 + "sha256": "cdfcb0df93072710866de536ba823c06a0804038d488cd27a2ba48ad114cd456", + "size": 111557 }, { "url": "https://code.claude.com/docs/en/artifacts", @@ -6064,8 +6064,8 @@ "url": "https://code.claude.com/docs/en/hooks-guide", "status": "success", "path": "en/docs/claude-code/hooks-guide.md", - "sha256": "595931e3915c46ef6c5fcc16f316d22adbcdb1ea90dceb386ec1851db0359d3b", - "size": 62244 + "sha256": "b371129f98ba5023d47cd93614154b2c793e5b0de05e79662ecd8950387b604e", + "size": 62644 }, { "url": "https://code.claude.com/docs/en/channels", @@ -6078,8 +6078,8 @@ "url": "https://code.claude.com/docs/en/scheduled-tasks", "status": "success", "path": "en/docs/claude-code/scheduled-tasks.md", - "sha256": "db0464de04343531977300fd92c688db62101597fa80a148bbb953dada3b6259", - "size": 19118 + "sha256": "30a38e6f96b5629202a87769812069621a4f9e92627559038b9c130e18d82a4e", + "size": 19189 }, { "url": "https://code.claude.com/docs/en/goal", @@ -6106,8 +6106,8 @@ "url": "https://code.claude.com/docs/en/large-codebases", "status": "success", "path": "en/docs/claude-code/large-codebases.md", - "sha256": "621870713aa5909b26ed22c4dd18e3d710cc10bd782511dd5af7b470a0e59669", - "size": 34434 + "sha256": "8761d50291f9b2e804ac85caf2024c5e5cd966886c55787980842e78f86d30fb", + "size": 34413 }, { "url": "https://code.claude.com/docs/en/troubleshoot-install", @@ -6127,15 +6127,15 @@ "url": "https://code.claude.com/docs/en/debug-your-config", "status": "success", "path": "en/docs/claude-code/debug-your-config.md", - "sha256": "2b046f4e1efc45bd48b0815dccb593e9e9b4f4d6d621337a0a1bf5e93ca7ef5f", - "size": 16927 + "sha256": "61e62993427bbe457e42c8109f6b4dda659990cf5b67718112be6ba3872d7e81", + "size": 17303 }, { "url": "https://code.claude.com/docs/en/errors", "status": "success", "path": "en/docs/claude-code/errors.md", - "sha256": "696b38e3fe064d1052230c6931d0866b2ea6a1d5dba2c9cb7e37ff2028f60f63", - "size": 538783 + "sha256": "37e9799a44678ea216d5c5cc4c6a39fb4029cf9323875de3464a2088bd32d990", + "size": 541573 }, { "url": "https://code.claude.com/docs/en/plugins/overview", @@ -6176,15 +6176,15 @@ "url": "https://code.claude.com/docs/en/plugins/create", "status": "success", "path": "en/docs/claude-code/plugins/create.md", - "sha256": "3d40f9bb2df522bf90f064f192da73d2cc442f16b41359867d15b28f0655185a", - "size": 24676 + "sha256": "107a1dc7377a73ffef9e96839d4973851b2491594038dc562501c952e14ae388", + "size": 25111 }, { "url": "https://code.claude.com/docs/en/plugins/components", "status": "success", "path": "en/docs/claude-code/plugins/components.md", - "sha256": "3be7db1d5245931f0729452008879cbfe777acf328b0c93b84766b4962721908", - "size": 38083 + "sha256": "6c0503ce637b5874827b6768871bea76a462ec1ce5db31e7dee07ac607b6d8c9", + "size": 38222 }, { "url": "https://code.claude.com/docs/en/plugins/dependencies", @@ -6204,8 +6204,8 @@ "url": "https://code.claude.com/docs/en/plugins/publish", "status": "success", "path": "en/docs/claude-code/plugins/publish.md", - "sha256": "4fbb2bdf4e8b76eccfbe77a69ce02563c7dbbe4fbe11c57c3649a77534676cad", - "size": 16040 + "sha256": "169204fa96a9f164bb19b8d01977be6f220cb87711af0b197f87f5e630ddfd53", + "size": 16133 }, { "url": "https://code.claude.com/docs/en/plugins/measure", @@ -6246,8 +6246,8 @@ "url": "https://code.claude.com/docs/en/plugins/mods/interface", "status": "success", "path": "en/docs/claude-code/plugins/mods/interface.md", - "sha256": "c21ece606f0880d3777dd3bec557e60221e4047845f60d6003d5927e441f3823", - "size": 48746 + "sha256": "d3fab2cfa94d3c164a50c78b4a4db37d8b7be454d4280da4f7cd40184f9e8bf5", + "size": 48784 }, { "url": "https://code.claude.com/docs/en/plugins/mods/gallery", @@ -6281,8 +6281,8 @@ "url": "https://code.claude.com/docs/en/plugins/mods/troubleshoot", "status": "success", "path": "en/docs/claude-code/plugins/mods/troubleshoot.md", - "sha256": "ef2cb833e1edf43f0a2299ff502c63ee2e25d7336d7f7536e5fe2830c3bc7d58", - "size": 26021 + "sha256": "dbb416f6814f25956a24c4c55b49099803e30829867ceba65ec224e408cf7d1e", + "size": 27034 }, { "url": "https://code.claude.com/docs/en/plugins/create-marketplace", @@ -6309,8 +6309,8 @@ "url": "https://code.claude.com/docs/en/plugins/org", "status": "success", "path": "en/docs/claude-code/plugins/org.md", - "sha256": "6a96d39cccb7175f7884a07d38a7ede18094f4333be31ecbc5398bfbc95d13ab", - "size": 40153 + "sha256": "4b9db0411bafc48a0c775d63c5d5786bb5d4c9f863d50e001ab6d34f3d045f8e", + "size": 40412 }, { "url": "https://code.claude.com/docs/en/plugins/mods/admin", @@ -6330,8 +6330,8 @@ "url": "https://code.claude.com/docs/en/plugins/loading", "status": "success", "path": "en/docs/claude-code/plugins/loading.md", - "sha256": "b2fac9343cc5e5bc6f412ca2037a6ab552b571e47179412353158c3b7d0fea1b", - "size": 39286 + "sha256": "186db8f211a9294bf61b5dadead619da1d71324e54758109463a26827c40aac9", + "size": 42191 }, { "url": "https://code.claude.com/docs/en/plugins/manifest-reference", @@ -6344,15 +6344,15 @@ "url": "https://code.claude.com/docs/en/plugins/marketplace-reference", "status": "success", "path": "en/docs/claude-code/plugins/marketplace-reference.md", - "sha256": "1fe46ddd308fbae1bc879280ae03971725a6e1c3123106eebe63ac443bbd37a0", - "size": 44260 + "sha256": "f5e0b13ea7e2b0fbb4f2961230109c1e6b56272a3eec69a363fafeefcf9902b3", + "size": 44398 }, { "url": "https://code.claude.com/docs/en/plugins/cli-reference", "status": "success", "path": "en/docs/claude-code/plugins/cli-reference.md", - "sha256": "2012ddc700c8feace5d02da1442bdb10093e2460dfb9d9945678e911805cdea6", - "size": 62057 + "sha256": "7e4179520aca33dc8864dee99fd55377447817440504fc50dace54f97340cc65", + "size": 62450 }, { "url": "https://code.claude.com/docs/en/admin-setup", @@ -6372,8 +6372,8 @@ "url": "https://code.claude.com/docs/en/authentication", "status": "success", "path": "en/docs/claude-code/authentication.md", - "sha256": "7eee08423ba09f648ad55d2a977d2783960450b5867e1629b23386341293a81d", - "size": 30701 + "sha256": "e5f4326ea3fb729685b18d23ed654af6d9f50fb363cca4352e6ad172e9249f05", + "size": 32422 }, { "url": "https://code.claude.com/docs/en/managed-settings", @@ -6386,22 +6386,22 @@ "url": "https://code.claude.com/docs/en/server-managed-settings", "status": "success", "path": "en/docs/claude-code/server-managed-settings.md", - "sha256": "dc907af0eba9b495eb5ca2006e13f51c1d8154af0f3060408a2be06f54be1f34", - "size": 44268 + "sha256": "2187f1d9d57fc8c952ef24bb38c6eb5047d15908b916bf389d27e721d4caf86a", + "size": 45223 }, { "url": "https://code.claude.com/docs/en/managed-mcp", "status": "success", "path": "en/docs/claude-code/managed-mcp.md", - "sha256": "96b82f54bc3e3dca6a9e64b719935784fa764e1ffc269bca984001eb0bd1b84c", - "size": 44973 + "sha256": "02baf70310d9028d77764e3e5d40f83473fdf72a4fec855e25312c8c52a51077", + "size": 45120 }, { "url": "https://code.claude.com/docs/en/auto-mode-config", "status": "success", "path": "en/docs/claude-code/auto-mode-config.md", - "sha256": "8e3538c437c2df7501ce2565fa8faaac1de47e5ba5f6af6c92459433ee8c2b72", - "size": 31974 + "sha256": "67284cb8a9484c38ebed471a7ef9b18233ee625233cf160200d6dc883ff1aa3f", + "size": 32052 }, { "url": "https://code.claude.com/docs/en/third-party-integrations", @@ -6449,8 +6449,8 @@ "url": "https://code.claude.com/docs/en/network-config", "status": "success", "path": "en/docs/claude-code/network-config.md", - "sha256": "4623c04a2545817aa01ba17bf3d785847d9057f492d8c522624b0395ea80e062", - "size": 31933 + "sha256": "bcae6c7a680ec5d8357022e07df4998323b471c362ce4314974ddc35664957eb", + "size": 32146 }, { "url": "https://code.claude.com/docs/en/corporate-launcher", @@ -6463,8 +6463,8 @@ "url": "https://code.claude.com/docs/en/devcontainer", "status": "success", "path": "en/docs/claude-code/devcontainer.md", - "sha256": "8d2f8be00a322af2b695f17124f5f947103cb948f7d5827ad7c3ac08e4efb46e", - "size": 17311 + "sha256": "82a2684b1c52c66c11f71655b949b05c399e04089d9d289495bc48ffaf5c1fda", + "size": 17636 }, { "url": "https://code.claude.com/docs/en/gateways", @@ -6477,43 +6477,43 @@ "url": "https://code.claude.com/docs/en/claude-apps-gateway", "status": "success", "path": "en/docs/claude-code/claude-apps-gateway.md", - "sha256": "4e21339c8da63a6ecc6ee14cbadec227cfd6501ef7d2e83b16763bca3a145e34", - "size": 58303 + "sha256": "6d980c13727d68fc4eaa726274fd1a693e93a03b5d9fc6075b1dbcd000c057a3", + "size": 58393 }, { "url": "https://code.claude.com/docs/en/claude-apps-gateway-config", "status": "success", "path": "en/docs/claude-code/claude-apps-gateway-config.md", - "sha256": "fba034cc0b91bdaee1983a56fdc660bb131d712289e368baed906e6f35b08af1", - "size": 135910 + "sha256": "929e700c0f1afffb4f6442b3e6b0bac57da63cc6be55a5a96b1ca9987941e450", + "size": 137731 }, { "url": "https://code.claude.com/docs/en/claude-apps-gateway-spend-limits", "status": "success", "path": "en/docs/claude-code/claude-apps-gateway-spend-limits.md", - "sha256": "b4f1ca7b124b5f864f3ca742274b87af032f42776043584642085068bbec16f1", - "size": 15835 + "sha256": "c695c9cf6c8d226a7ac8a837687b54298ea453369fbe3454a331b367b4216fd5", + "size": 16430 }, { "url": "https://code.claude.com/docs/en/claude-apps-gateway-deploy", "status": "success", "path": "en/docs/claude-code/claude-apps-gateway-deploy.md", - "sha256": "566d795097dffe00479558e5ede03d4d0f9fb6cfe698b73130f2b7beb7a40ddd", - "size": 62547 + "sha256": "5d20b8119ec89dc54b45a4e70fdeeb355c8ef172a43b8550b295750c7f18da8f", + "size": 72460 }, { "url": "https://code.claude.com/docs/en/claude-apps-gateway-on-aws", "status": "success", "path": "en/docs/claude-code/claude-apps-gateway-on-aws.md", - "sha256": "5d87a93b310d2f172bf1d12563472870a8ae9e5d882c262c074a71b285b40771", - "size": 48380 + "sha256": "42bed9a9542be383fcc0ddd80715cb4e7700a9df9d7d080419dad0029c49ea2b", + "size": 50672 }, { "url": "https://code.claude.com/docs/en/claude-apps-gateway-on-gcp", "status": "success", "path": "en/docs/claude-code/claude-apps-gateway-on-gcp.md", - "sha256": "d3e2215b6bd4be83895c44521763bdcc711febadd10e62a4515cda000becb57e", - "size": 21695 + "sha256": "63ee86de9659b20a2916b5ee3e8d10f0a9865a968b64492da1ab68ff3b049f80", + "size": 21746 }, { "url": "https://code.claude.com/docs/en/llm-gateway", @@ -6540,22 +6540,22 @@ "url": "https://code.claude.com/docs/en/llm-gateway-protocol", "status": "success", "path": "en/docs/claude-code/llm-gateway-protocol.md", - "sha256": "8062000523b9984f737f0ff4c0fcd553a12eab0514d69c310701dac5d594950c", - "size": 47750 + "sha256": "171b414d0e3374a3d8bb219b3fb029feb9c662afae7a0ed2dbffa708dde0e7b9", + "size": 47768 }, { "url": "https://code.claude.com/docs/en/monitoring-usage", "status": "success", "path": "en/docs/claude-code/monitoring-usage.md", - "sha256": "0e270766248190d60339d61432aeaed04ae6c681f3f9b08761df32547ecef50e", - "size": 156695 + "sha256": "84f37844a9303d5f6079c68e4e6f4df55c52a7bd45438b50ada3199556729fbf", + "size": 156822 }, { "url": "https://code.claude.com/docs/en/costs", "status": "success", "path": "en/docs/claude-code/costs.md", - "sha256": "9daf33a0e41a0af2a0a5ec91c0c2017b3cec87e836496dd00d3c53576b31ad54", - "size": 44374 + "sha256": "0f5ff12e6e1cba1fc2dbd7360c38165ed6b172bf5e4ce8fb224fb6b3a7b9d4b1", + "size": 44392 }, { "url": "https://code.claude.com/docs/en/analytics", @@ -6610,22 +6610,22 @@ "url": "https://code.claude.com/docs/en/settings", "status": "success", "path": "en/docs/claude-code/settings.md", - "sha256": "c7e0316e45fa6307bf4ca57b003033548558e458c5859f223464692529cff4b6", - "size": 41771 + "sha256": "513768ecae76734930921886d5380201f80541e449ac67e977a6b39e2bbad9f5", + "size": 41791 }, { "url": "https://code.claude.com/docs/en/settings-reference", "status": "success", "path": "en/docs/claude-code/settings-reference.md", - "sha256": "dda05451266e1ba084ceccd52b5fc8e6ef6603dbf63e5948dd23f000c31ded40", - "size": 404714 + "sha256": "f94dece81575479b27a94d4d4f158ed0f30d5fceff45488a9d76540caa83e35a", + "size": 408350 }, { "url": "https://code.claude.com/docs/en/settings-example", "status": "success", "path": "en/docs/claude-code/settings-example.md", - "sha256": "6866bdbccf2bdedf618cee180c1f8c716d01dcfe2909c5d88407da6ee629e9bc", - "size": 14300 + "sha256": "7e6c3a9bd7602e207ffcba15ecbfda55ba3ed92537f1d9e77dfbe212500c7b46", + "size": 14310 }, { "url": "https://code.claude.com/docs/en/permissions", @@ -6638,8 +6638,8 @@ "url": "https://code.claude.com/docs/en/permission-modes", "status": "success", "path": "en/docs/claude-code/permission-modes.md", - "sha256": "f2679496bc88cd794bdab61a03fdf6be877394dbadd2a585426e04f95d598f75", - "size": 98760 + "sha256": "cc9d0c0ecb57d1db6e1dba2ce7f6f9d1c0e4335021129ef627ee0cd99f8c181e", + "size": 100848 }, { "url": "https://code.claude.com/docs/en/auto-mode-classifier-billing", @@ -6652,8 +6652,8 @@ "url": "https://code.claude.com/docs/en/sandboxing", "status": "success", "path": "en/docs/claude-code/sandboxing.md", - "sha256": "b77ce86ffbdb116b82c2a289d6edf1d5e2eb09953cb0f5e6eee1aaca0b1970ea", - "size": 95397 + "sha256": "828837815ef9675a7154c48f38980247ed4b4c8532e728c004768b5aee3dd972", + "size": 99068 }, { "url": "https://code.claude.com/docs/en/sandbox-environments", @@ -6666,8 +6666,8 @@ "url": "https://code.claude.com/docs/en/cloud-environments", "status": "success", "path": "en/docs/claude-code/cloud-environments.md", - "sha256": "a59b13b0cba8bd522f0fd6cdaccb5058b9f853d4bcd4478ad86e7b0b3f05566b", - "size": 63310 + "sha256": "e85bd558c87e32491974496868c64e17cc894f6508c2223b34f84600716b3afc", + "size": 63320 }, { "url": "https://code.claude.com/docs/en/self-hosted-environments", @@ -6687,15 +6687,15 @@ "url": "https://code.claude.com/docs/en/self-hosted-environments-deploy", "status": "success", "path": "en/docs/claude-code/self-hosted-environments-deploy.md", - "sha256": "9c9cb1629b2b9dad84e7e635c7b64b9eed7d3dde71535632a1c5fa5652416af4", - "size": 96583 + "sha256": "58c61127447a386fcf05d41d2a38dffe38f7501fa5474fe5e4d90f80544dbb1e", + "size": 98145 }, { "url": "https://code.claude.com/docs/en/self-hosted-environments-configuration", "status": "success", "path": "en/docs/claude-code/self-hosted-environments-configuration.md", - "sha256": "62f95b24e1bbc37f8a52c8d1a688537ad36a494dbe8e57e4ad92fe0256a5a0e2", - "size": 79767 + "sha256": "634a0803ac1551eb5cd5582c470c4c31d18df15604803e42a081457c13ab4481", + "size": 80208 }, { "url": "https://code.claude.com/docs/en/self-hosted-environments-testing", @@ -6757,8 +6757,8 @@ "url": "https://code.claude.com/docs/en/fullscreen", "status": "success", "path": "en/docs/claude-code/fullscreen.md", - "sha256": "75c11eebbab588ea9ae7198aa431ae43fb2579b11f647e291b1fb025730f6692", - "size": 30901 + "sha256": "fa9083c8b131233d8019170c16e383081315c3e450112f2b904037dd6d0e0902", + "size": 31044 }, { "url": "https://code.claude.com/docs/en/accessibility", @@ -6785,8 +6785,8 @@ "url": "https://code.claude.com/docs/en/keybindings", "status": "success", "path": "en/docs/claude-code/keybindings.md", - "sha256": "ff10bdd0e1469a1a4b293b71c78e61cb9fef0d0f71097b547f2344a1b16d11a6", - "size": 38073 + "sha256": "4e5f6f9dc423bc220f43f1ba3d030fa535c4dd7aba0f261a95b78d15f07798be", + "size": 39023 }, { "url": "https://code.claude.com/docs/en/cli-reference", @@ -6799,29 +6799,29 @@ "url": "https://code.claude.com/docs/en/commands", "status": "success", "path": "en/docs/claude-code/commands.md", - "sha256": "5648cece19676c18a4df7d783e5f4665b223bd85a6fb70515641f912abe5c0f8", - "size": 53666 + "sha256": "1af6adbf2b8b597fff833e9fbabf4e9b1b51d754831b171651f8ca7892ea0ac3", + "size": 53679 }, { "url": "https://code.claude.com/docs/en/env-vars", "status": "success", "path": "en/docs/claude-code/env-vars.md", - "sha256": "98b128c3f7d3c1e0a12e1ec8c2990489904f4cd662d1329f5c4b6926569c99e9", - "size": 168466 + "sha256": "f44263e3879a646e6d292827b5cd90c85c0db687332fecdb927488374e41f35b", + "size": 168593 }, { "url": "https://code.claude.com/docs/en/tools-reference", "status": "success", "path": "en/docs/claude-code/tools-reference.md", - "sha256": "7ed98b5309e16ef87ea86c46409f432c520f3fbbdf70d08a30312eddc049eb63", - "size": 80716 + "sha256": "f7b4ca6a8b5f97804f2ec7ba8872a73f3aa3299faeeca3a282961624ec86ed6b", + "size": 81226 }, { "url": "https://code.claude.com/docs/en/interactive-mode", "status": "success", "path": "en/docs/claude-code/interactive-mode.md", - "sha256": "460314f54f20914cad863b71f78bd6d475bab89360fccea64e2e97fbae3c96aa", - "size": 72991 + "sha256": "a6781e829fe4d53e7529946719103a366ee75c8678e4f6d7a19dd162412f22b4", + "size": 74339 }, { "url": "https://code.claude.com/docs/en/checkpointing", @@ -6834,8 +6834,8 @@ "url": "https://code.claude.com/docs/en/hooks", "status": "success", "path": "en/docs/claude-code/hooks.md", - "sha256": "5a5cc139bc639ced7c328a509c3962da375dfba672dc54713356940a354bd79f", - "size": 269876 + "sha256": "b646e8f614acecad913b5b6662dd7316542bb0de85bcd9011b5a20ee8b1ee54b", + "size": 272947 }, { "url": "https://code.claude.com/docs/en/channels-reference", @@ -7002,8 +7002,8 @@ "url": "https://code.claude.com/docs/en/agent-sdk/permissions", "status": "success", "path": "en/docs/claude-code/agent-sdk/permissions.md", - "sha256": "449ff08baac9cc1ea1371f7915cb057f193e3cd7ec3cc3706cd5f88d344b112e", - "size": 25622 + "sha256": "9839f2f4de8d6ccfc8f681507bcf05d0e61a4268d6407fe084d991f797a5b973", + "size": 25758 }, { "url": "https://code.claude.com/docs/en/agent-sdk/hooks", @@ -7072,8 +7072,8 @@ "url": "https://code.claude.com/docs/en/agent-sdk/python", "status": "success", "path": "en/docs/claude-code/agent-sdk/python.md", - "sha256": "734b9e3eeae40614fa93a269f21b417cc74571503804352c97e7c9c0ab58cf93", - "size": 160194 + "sha256": "58366b3a3e84eb42acebde235ee2ba523551edfa3e408538c914387c30d761fa", + "size": 161225 }, { "url": "https://code.claude.com/docs/en/whats-new/index", @@ -9837,8 +9837,8 @@ "url": "https://support.claude.com/en/articles/8114491-get-started-with-claude", "status": "success", "path": "support/8114491-get-started-with-claude.md", - "sha256": "b360ad7260e7f36276e9942bb7f9b693a81344483ed6db304bf335b3c46d4d8f", - "size": 5203 + "sha256": "bcae0e224148f9a05378eeaca181fd84fb61c50c3ec0c3109f62f6d43c726b83", + "size": 5207 }, { "url": "https://support.claude.com/en/articles/8114494-how-up-to-date-is-claude-s-training-data", @@ -9914,8 +9914,8 @@ "url": "https://support.claude.com/en/articles/8230524-delete-or-rename-a-conversation", "status": "success", "path": "support/8230524-delete-or-rename-a-conversation.md", - "sha256": "c860dfbe8ed7a3d573c6f4129595ab5c4c5e2d151da2bdc537ec21730544d42c", - "size": 5887 + "sha256": "3afa94bb15c1b325cba8d9a347c8f5fa245faf179eb4e440d01dc3b8b30e6e5a", + "size": 5891 }, { "url": "https://support.claude.com/en/articles/8241126-upload-files-to-claude", @@ -9984,7 +9984,7 @@ "url": "https://support.claude.com/en/articles/8325618-paid-plan-billing-faqs", "status": "success", "path": "support/8325618-paid-plan-billing-faqs.md", - "sha256": "33b0f2814b3020662d1f32616af7fae992ad73a047f38683a2d1612aae1432f0", + "sha256": "28d194318d875a9bb9bac7bcc45b0534f83ab8f87573c672a6a8ce50d41a11b3", "size": 4949 }, { @@ -10047,8 +10047,8 @@ "url": "https://support.claude.com/en/articles/8887527-customizing-your-appearance-settings", "status": "success", "path": "support/8887527-customizing-your-appearance-settings.md", - "sha256": "715c078f8044c8cfba42588457180ba79615c7e06c252292d293608989cb0adc", - "size": 1874 + "sha256": "2a6656cfc894f8565f39424fec27fe95935e1740d7b252fe7f90ae8136dcb8ef", + "size": 1870 }, { "url": "https://support.claude.com/en/articles/8896518-does-anthropic-crawl-data-from-the-web-and-how-can-site-owners-block-the-crawler", @@ -10222,7 +10222,7 @@ "url": "https://support.claude.com/en/articles/9267400-move-your-personal-claude-account-to-a-team-or-enterprise-organization", "status": "success", "path": "support/9267400-move-your-personal-claude-account-to-a-team-or-enterprise-organization.md", - "sha256": "07b7c9056a4b89c9489c38b381394ef78352ac9b3b4c944c522c69846fec5f6c", + "sha256": "ee1319270dce4a9cb34c3ecb9ffb6eb485beb63281b901626b47aa7c958b2028", "size": 10264 }, { @@ -10264,7 +10264,7 @@ "url": "https://support.claude.com/en/articles/9519177-how-can-i-create-and-manage-projects", "status": "success", "path": "support/9519177-how-can-i-create-and-manage-projects.md", - "sha256": "f940145403193a157b64cdda5a803493acae47e86525b97235006f06523bc52b", + "sha256": "bfd036cb393ef7893e3ace6e54a0677ae023fd1b84a50d51da709f344bd94cef", "size": 9201 }, { @@ -10516,8 +10516,8 @@ "url": "https://support.claude.com/en/articles/10310342-how-do-i-log-out-of-all-active-sessions", "status": "success", "path": "support/10310342-how-do-i-log-out-of-all-active-sessions.md", - "sha256": "e1d2145f8e7b9a279a73394ed20d0e7796391e6f39dab8a419b25db25d090834", - "size": 2496 + "sha256": "661f22e0f1684128fc8f37e2957669af21e00a196808252f48049a45eb472df8", + "size": 2494 }, { "url": "https://support.claude.com/en/articles/10366376-how-can-i-delete-my-claude-console-account", @@ -10565,8 +10565,8 @@ "url": "https://support.claude.com/en/articles/10504844-manage-user-feedback-settings-on-team-and-enterprise-plans", "status": "success", "path": "support/10504844-manage-user-feedback-settings-on-team-and-enterprise-plans.md", - "sha256": "7c309077dc5c1b779bdfcf03cadd11d2890161eed5fa15ebe8b92136baecbf88", - "size": 1036 + "sha256": "32524813bb6db6d8bce1a0504e63afd47904d3cc7aa122f366cfd1a13f1eebb5", + "size": 1034 }, { "url": "https://support.claude.com/en/articles/10504853-manage-user-feedback-settings-on-claude-console", @@ -10586,7 +10586,7 @@ "url": "https://support.claude.com/en/articles/10593882-share-and-unshare-chats", "status": "success", "path": "support/10593882-share-and-unshare-chats.md", - "sha256": "0e465ea722be47a0a60ac6c8a8125c0e51129c88b3afcc0741248e4ef7e1e588", + "sha256": "a02f561705cc539f130c6c9834809e2157b9887a12d124669dcc127471dc168a", "size": 4022 }, { @@ -10614,7 +10614,7 @@ "url": "https://support.claude.com/en/articles/10949351-getting-started-with-local-mcp-servers-on-claude-desktop", "status": "success", "path": "support/10949351-getting-started-with-local-mcp-servers-on-claude-desktop.md", - "sha256": "6fffcd6ec599f64593f796734ddd12213d7310a841ea354abe3310fd9b663a56", + "sha256": "f41a0b4e9c200f3b46cc42a3dea1515086e9aed526b6de1c3137a72b6e7dad24", "size": 8392 }, { @@ -10649,8 +10649,8 @@ "url": "https://support.claude.com/en/articles/11101966-use-voice-mode", "status": "success", "path": "support/11101966-use-voice-mode.md", - "sha256": "2aac00352f6c553ca39476bbf05600b38470cdaef1a5be2c90d232520c276b13", - "size": 10553 + "sha256": "61411e5a399d1799bdb7d9d1512ddf30ce3acd0dd44755619d1b32f5e37ba27d", + "size": 10559 }, { "url": "https://support.claude.com/en/articles/11107691-why-is-a-coupon-or-promotion-not-available-for-my-account", @@ -10782,8 +10782,8 @@ "url": "https://support.claude.com/en/articles/11725453-set-up-the-claude-lti-in-canvas-by-instructure", "status": "success", "path": "support/11725453-set-up-the-claude-lti-in-canvas-by-instructure.md", - "sha256": "562e9090f6ea97a6246df756d2e42ff9565f49895fae25e371cfcaa626a328a6", - "size": 2750 + "sha256": "ffa694ab05a74e16b73b6e4a5a7e2b76ad730837a577222eae27e1a51257737b", + "size": 2752 }, { "url": "https://support.claude.com/en/articles/11732894-who-owns-and-manages-the-data-of-my-claude-for-education-account", @@ -10803,8 +10803,8 @@ "url": "https://support.claude.com/en/articles/11818288-why-am-i-being-asked-to-verify-my-payment-method", "status": "success", "path": "support/11818288-why-am-i-being-asked-to-verify-my-payment-method.md", - "sha256": "b3e529280547ff5f34eb9d72dfb0b53d6f84feb97d735650291f0e29048ae8d0", - "size": 818 + "sha256": "57e1af2930253fc804c5a6eecd0d214c616cf2d389558aa8706276ebb65f57af", + "size": 816 }, { "url": "https://support.claude.com/en/articles/11825384-how-to-update-claude-for-ios", @@ -10838,8 +10838,8 @@ "url": "https://support.claude.com/en/articles/11869629-use-claude-with-android-apps", "status": "success", "path": "support/11869629-use-claude-with-android-apps.md", - "sha256": "488ead229fb3038dfe1cd595a85819233030d73f2ec51057d16c5e5ace3392d6", - "size": 13995 + "sha256": "66e0ce91b3e5af93ff143abe3e55eb9e883f96bde96994e2f68d9ff04562ab38", + "size": 13993 }, { "url": "https://support.claude.com/en/articles/11932705-automated-security-reviews-in-claude-code", @@ -10873,15 +10873,15 @@ "url": "https://support.claude.com/en/articles/12005970-manage-usage-credits-for-team-and-seat-based-enterprise-plans", "status": "success", "path": "support/12005970-manage-usage-credits-for-team-and-seat-based-enterprise-plans.md", - "sha256": "56a1f115d007ad8c0238493adb44516131e58940b2ef655d3eec37c980dd466a", - "size": 9703 + "sha256": "a5974f0f599436bcf877057b0119d58f71dd41d2700e74e16aeb5a3aa57dce1c", + "size": 9711 }, { "url": "https://support.claude.com/en/articles/12012173-get-started-with-claude-in-chrome", "status": "success", "path": "support/12012173-get-started-with-claude-in-chrome.md", - "sha256": "3b2026138194e40826d0f098a06fe1e8649f0d99e8beaa3aa499eb7433518bb1", - "size": 14857 + "sha256": "bc9c41808449b52d87c050477ea309305ee9ea3aea845a0c291704fe4d2e8e5d", + "size": 14855 }, { "url": "https://support.claude.com/en/articles/12053672-what-happens-to-a-user-s-data-when-they-are-removed-from-a-team-or-enterprise-organization", @@ -10908,8 +10908,8 @@ "url": "https://support.claude.com/en/articles/12111783-create-and-edit-files-with-claude", "status": "success", "path": "support/12111783-create-and-edit-files-with-claude.md", - "sha256": "45a9021196466e367e3045ec840414050a790462cbb45196d90fa3fa502e780b", - "size": 17962 + "sha256": "e6f95dfbcb2b2cd154c417faae236729fca549bf8170dc745b161614c1560ea3", + "size": 17958 }, { "url": "https://support.claude.com/en/articles/12119250-model-safety-bug-bounty-program", @@ -10936,22 +10936,22 @@ "url": "https://support.claude.com/en/articles/12157520-claude-code-usage-analytics", "status": "success", "path": "support/12157520-claude-code-usage-analytics.md", - "sha256": "43691f5992657ea2cf6cb67b15c2bfb1b6abc62009f8646df742e039ef63e249", - "size": 6380 + "sha256": "41939859a8c366d824db59eb607cb4df916aeb97f7eb1b764577dd306bcf8dfc", + "size": 6366 }, { "url": "https://support.claude.com/en/articles/12260368-use-incognito-chats", "status": "success", "path": "support/12260368-use-incognito-chats.md", - "sha256": "1080bd1954449b669f61cb339699cc59246aecc80336e758f63daadf658c1c5b", - "size": 4374 + "sha256": "5f5dacbe7066f87f231d6db2ba68836cf3c74403eb2c0d4ddd6644af1b0cf2c0", + "size": 4372 }, { "url": "https://support.claude.com/en/articles/12293051-use-claude-in-xcode", "status": "success", "path": "support/12293051-use-claude-in-xcode.md", - "sha256": "ac5c77948f18a16519aed969e4f0b9954b0241b1568bd1010837008951123ad1", - "size": 1907 + "sha256": "def6b3e7df0b86a11dd0f049aba8b8c1d57f74230852955b102fae99dd266dba", + "size": 1905 }, { "url": "https://support.claude.com/en/articles/12304248-manage-api-key-environment-variables-in-claude-code", @@ -10992,14 +10992,14 @@ "url": "https://support.claude.com/en/articles/12429409-manage-usage-credits-for-paid-claude-plans", "status": "success", "path": "support/12429409-manage-usage-credits-for-paid-claude-plans.md", - "sha256": "b0196f7b9683d9b20d75742ac16553e6242da956718038f135e086e1abdf322e", - "size": 7972 + "sha256": "77b2f0fdc331e4c9a591e5c331ef1beb7095473490c44c29e6a6f16defd76955", + "size": 7968 }, { "url": "https://support.claude.com/en/articles/12466728-troubleshoot-claude-error-messages", "status": "success", "path": "support/12466728-troubleshoot-claude-error-messages.md", - "sha256": "d87a74d55b3b0b7ff5f9df0febd1e0711952c0d3dcf61a481a55668490863bd3", + "sha256": "c0f4a34cb3704c5b71eb1394179ad7a4bf5b21c1ce607cc9a08c462b6050ee92", "size": 5139 }, { @@ -11020,8 +11020,8 @@ "url": "https://support.claude.com/en/articles/12512180-use-skills-in-claude", "status": "success", "path": "support/12512180-use-skills-in-claude.md", - "sha256": "6a4a20eb191bfd0ea215732bfb82b3ca8fdbe7832b2ac7c66d4f3db6eb8d53d8", - "size": 19148 + "sha256": "6fd44cb8069789eb053594aee11fa7037280ed315bcaad109210ab48d6bbe9f1", + "size": 19146 }, { "url": "https://support.claude.com/en/articles/12512198-how-to-create-custom-skills", @@ -11041,8 +11041,8 @@ "url": "https://support.claude.com/en/articles/12592343-enabling-and-using-the-desktop-extension-allowlist", "status": "success", "path": "support/12592343-enabling-and-using-the-desktop-extension-allowlist.md", - "sha256": "19fa971d98ae79287dcc932c475aba170066d1633f9f257943343f8b686c2e9d", - "size": 5712 + "sha256": "155ab4f1fc8bd27f165ba065c6787f703ea37a4f82490043999766129b0e8833", + "size": 5718 }, { "url": "https://support.claude.com/en/articles/12611117-deploy-claude-desktop-for-macos", @@ -11055,8 +11055,8 @@ "url": "https://support.claude.com/en/articles/12618689-use-claude-code-in-the-cloud", "status": "success", "path": "support/12618689-use-claude-code-in-the-cloud.md", - "sha256": "d2ed8afbc409ec22dde0b7a8f9bd01509725d9d5ce1524fcb8aea1227647d03b", - "size": 11058 + "sha256": "536b8a37c104af6214c34c610fce630b965f6e8c5dfc01327ddfebd3480ccc6a", + "size": 11060 }, { "url": "https://support.claude.com/en/articles/12622667-enterprise-configuration-for-claude-desktop", @@ -11076,8 +11076,8 @@ "url": "https://support.claude.com/en/articles/12626668-use-quick-entry-with-claude-desktop-on-mac", "status": "success", "path": "support/12626668-use-quick-entry-with-claude-desktop-on-mac.md", - "sha256": "fab4d777a33b2053d449c875db0fef7d0fe56a07307273f82a3ebf22def9cc08", - "size": 5974 + "sha256": "5aebcb9c87249a52d72c4b99b7ee4b88ed73598f7382a1ec00f9a0b13bf38593", + "size": 5970 }, { "url": "https://support.claude.com/en/articles/12684923-microsoft-365-connector-security-guide", @@ -11111,8 +11111,8 @@ "url": "https://support.claude.com/en/articles/12883420-view-usage-analytics-for-team-and-enterprise-plans", "status": "success", "path": "support/12883420-view-usage-analytics-for-team-and-enterprise-plans.md", - "sha256": "11415c15d6ac8d138fb92f7d8d30fcf8a1ebec8dd38552c6af7605da12fc2762", - "size": 15103 + "sha256": "74062af09739d627ffa592d4a8a41eaabe41fbddf418b32f91c45e55e1c03bd1", + "size": 15095 }, { "url": "https://support.claude.com/en/articles/12902405-claude-in-chrome-troubleshooting", @@ -11132,8 +11132,8 @@ "url": "https://support.claude.com/en/articles/12902446-claude-in-chrome-permissions-guide", "status": "success", "path": "support/12902446-claude-in-chrome-permissions-guide.md", - "sha256": "1a13e68e97c4a24439fe089b44d10873b1625dc33f7a9d88679d2be08764e9d5", - "size": 9571 + "sha256": "272ce7eae220feb8e827aba642476cb9463cebaa5a71e235858be9ee2e5adee8", + "size": 9567 }, { "url": "https://support.claude.com/en/articles/12938627-how-to-gift-a-claude-subscription", @@ -11160,8 +11160,8 @@ "url": "https://support.claude.com/en/articles/12997503-team-plan-billing-faqs", "status": "success", "path": "support/12997503-team-plan-billing-faqs.md", - "sha256": "73cfd4ef376725b3f138ffc0b12b4235a02ca5b24716a52d26af64337d2cc9a2", - "size": 5417 + "sha256": "f3ae3843cb62969cc880fd2af5bacec17fbcc24592d4d80763c95d006b61b644", + "size": 5413 }, { "url": "https://support.claude.com/en/articles/13015708-access-the-compliance-api", @@ -11209,15 +11209,15 @@ "url": "https://support.claude.com/en/articles/13132885-set-up-single-sign-on-sso", "status": "success", "path": "support/13132885-set-up-single-sign-on-sso.md", - "sha256": "109b55413f3aabe5c9f4b2da40248a1d132051ebc6530638fe71aa131273ac63", - "size": 13651 + "sha256": "a7b49a8465e4d6a5e4a6d0a795644843052026c068d32ff5ad5d860ced8f814c", + "size": 13653 }, { "url": "https://support.claude.com/en/articles/13133195-set-up-jit-or-scim-provisioning", "status": "success", "path": "support/13133195-set-up-jit-or-scim-provisioning.md", - "sha256": "96035c8fa59fb1d122b1f48cb915d35bf1f942fa57274a6731307a444e458ae9", - "size": 22519 + "sha256": "4fe294333ef34a97955caea2ac6f422b6cf83e63d279b03a538f25213ef73670", + "size": 22533 }, { "url": "https://support.claude.com/en/articles/13133750-manage-members-on-team-and-enterprise-plans", @@ -11244,7 +11244,7 @@ "url": "https://support.claude.com/en/articles/13163631-configuring-session-security-settings", "status": "success", "path": "support/13163631-configuring-session-security-settings.md", - "sha256": "45b952f1d96c41da03d022817eaea1f52cd219c1882d8ec75cddcc7c41879334", + "sha256": "e8a96063d13c60676b60fbd8573df1e6627f15bde8a2216bfc1e548acc8edd42", "size": 3697 }, { @@ -11258,8 +11258,8 @@ "url": "https://support.claude.com/en/articles/13189465-log-in-to-your-claude-account", "status": "success", "path": "support/13189465-log-in-to-your-claude-account.md", - "sha256": "ea54bb7241e2229c7676a97b3d003cf5ced77b3e3508c7e3d6a6846a72a882db", - "size": 7041 + "sha256": "3039ae95516bbfbebc10bd8dba85b008725c2cb3fdc2318d943ead58b40b9040", + "size": 7039 }, { "url": "https://support.claude.com/en/articles/13198485-enforce-network-level-access-control-with-tenant-restrictions", @@ -11286,14 +11286,14 @@ "url": "https://support.claude.com/en/articles/13325567-account-management-faqs", "status": "success", "path": "support/13325567-account-management-faqs.md", - "sha256": "d63461e25f93f5e4a16d1e5a8ecef23ae1e39c41ec567c2cebf3e4a90ef797cd", - "size": 2638 + "sha256": "c84fd8258e3132cdd24398faf6689963bccd7845fe7905aa30b87675e9ec5ef7", + "size": 2634 }, { "url": "https://support.claude.com/en/articles/13345190-get-started-with-claude-cowork", "status": "success", "path": "support/13345190-get-started-with-claude-cowork.md", - "sha256": "7aabfc0a4672cb541a919549ef31382ed088fd73949e46b2e7631b7d7c40bfc0", + "sha256": "5c1562fae3fa87398c70652fb14b3f5c22d4f17bfb33861f11582ecaa1d2ba97", "size": 23056 }, { @@ -11321,7 +11321,7 @@ "url": "https://support.claude.com/en/articles/13371040-log-in-to-your-console-account", "status": "success", "path": "support/13371040-log-in-to-your-console-account.md", - "sha256": "bd4cb9ed736b8ef2ecd0396b808d11e06584b1ba5f8c101265407144b302d45f", + "sha256": "7052cbf4745ca2f2e792e2d11f99d7f8aa198d24c87956ea1b117810f7f4cec2", "size": 4611 }, { @@ -11377,8 +11377,8 @@ "url": "https://support.claude.com/en/articles/13641943-visual-and-interactive-content", "status": "success", "path": "support/13641943-visual-and-interactive-content.md", - "sha256": "67d2ce89464f80c9b761198a33737314165c7170d89dc0969bb38ee88f7a6a0f", - "size": 6509 + "sha256": "e77ed992d1eafac2dd9d6e1c0ff6a066c7a7c6e0184f8047eb431d2992c9837d", + "size": 6505 }, { "url": "https://support.claude.com/en/articles/13663666-use-visual-and-interactive-content-on-team-and-enterprise-plans", @@ -11433,7 +11433,7 @@ "url": "https://support.claude.com/en/articles/13837440-use-plugins-in-claude", "status": "success", "path": "support/13837440-use-plugins-in-claude.md", - "sha256": "da5dcdee6965200e86a0bdd093fee7ca099c7525f021db634bc80cce4c171f48", + "sha256": "1c6ef14b9618eaba919cb4207b8afe5c680bd4c724a89843c36a261ddd3c39b4", "size": 15191 }, { @@ -11531,8 +11531,8 @@ "url": "https://support.claude.com/en/articles/13947068-assign-tasks-from-anywhere-in-claude-cowork", "status": "success", "path": "support/13947068-assign-tasks-from-anywhere-in-claude-cowork.md", - "sha256": "ea0dffdeb191710136de2f7fbc69621ce59663501bcbe210fa4eb4b0541f701a", - "size": 9462 + "sha256": "829f2c8cec3cca2aa41a35615af67a45edec3f9a8177ca2f44faaf5f8ef642f5", + "size": 9464 }, { "url": "https://support.claude.com/en/articles/13979539-custom-visuals-in-chat-and-cowork", @@ -11552,7 +11552,7 @@ "url": "https://support.claude.com/en/articles/14116274-organize-your-tasks-with-projects-in-claude-cowork", "status": "success", "path": "support/14116274-organize-your-tasks-with-projects-in-claude-cowork.md", - "sha256": "30e2967c2b3392b0531eaa5dc22b4592ec82d53041d4eb5208622b0b63fa6412", + "sha256": "44d0b8a6291a2a9ed080b457ec009c29b47678f33a2b7dd76f75719310be3450", "size": 8387 }, { @@ -11622,8 +11622,8 @@ "url": "https://support.claude.com/en/articles/14499648-how-scim-sync-works-for-enterprise-organizations", "status": "success", "path": "support/14499648-how-scim-sync-works-for-enterprise-organizations.md", - "sha256": "4c45c918057820b4a36dbf7bb34f5a30925e88f4a7cf605a8b26f4bfd6f1b04b", - "size": 7670 + "sha256": "66f72c8b768fdae4773ebb9b1de99683fe77f7f1946856959f068b0437c1b524", + "size": 7672 }, { "url": "https://support.claude.com/en/articles/14503520-available-beta-and-research-preview-features", @@ -11734,8 +11734,8 @@ "url": "https://support.claude.com/en/articles/14604842-cyber-verification-program", "status": "success", "path": "support/14604842-cyber-verification-program.md", - "sha256": "9e2fae2dc6ce7d27c728053f3b1e07571c34a777363cd69df0b30b0a4ea7187b", - "size": 25122 + "sha256": "9985bf8c305cf5e31ff30b46c1ca6d0f4261ff47b3307df670f9094913f0d2e0", + "size": 25124 }, { "url": "https://support.claude.com/en/articles/14625619-claim-and-migrate-accounts-on-your-domain", @@ -11755,8 +11755,8 @@ "url": "https://support.claude.com/en/articles/14661296-use-claude-security", "status": "success", "path": "support/14661296-use-claude-security.md", - "sha256": "db7de8a6eef7c7ec3cb7d45284fcca7ee3eed9b43a43e13ce8b6065cf5e3d7b3", - "size": 18895 + "sha256": "91221bc287f5960cb448aee3b92f5d6c3941ba3bf2ac7617d3783431216b8403", + "size": 19215 }, { "url": "https://support.claude.com/en/articles/14729249-use-live-artifacts-in-claude-cowork", @@ -11846,7 +11846,7 @@ "url": "https://support.claude.com/en/articles/15330088-set-a-default-model-for-your-organization", "status": "success", "path": "support/15330088-set-a-default-model-for-your-organization.md", - "sha256": "8147ff83ebbef50bc2d97e4e77f0a4f170ef437f378932cf1bd57cc0feef481b", + "sha256": "1a0eb2e6e24cbc01e943e4e12e2571af35780ffc1c3499def87e386e422d256a", "size": 11311 }, { @@ -11958,8 +11958,8 @@ "url": "https://support.claude.com/en/articles/15694740-manage-model-access-for-your-organization", "status": "success", "path": "support/15694740-manage-model-access-for-your-organization.md", - "sha256": "4246927accb2869a543523177639a9de7705eeef41216c7019ec9854c3e90eed", - "size": 10334 + "sha256": "278ca4ed79924e419c247c73d218634ecf719e62f7e8afc8037a6b5cd4ba9c8b", + "size": 10338 }, { "url": "https://support.claude.com/en/articles/15707726-using-claude-for-legal-work-privilege-confidentiality-and-how-to-think-about-configuration", @@ -11986,14 +11986,14 @@ "url": "https://support.claude.com/en/articles/15927065-get-started-with-skill-and-plugin-scanning", "status": "success", "path": "support/15927065-get-started-with-skill-and-plugin-scanning.md", - "sha256": "732d7ff02dc93fafb697445d1216baeb88a8810f2776fdb8b30aba8a6a3aea0a", - "size": 5102 + "sha256": "bebe624f9a1e7b620a980a80a038a155779f1ff20c3cbe4ccb164bd18ea39924", + "size": 6101 }, { "url": "https://support.claude.com/en/articles/15936181-get-started-with-1password-for-claude", "status": "success", "path": "support/15936181-get-started-with-1password-for-claude.md", - "sha256": "78533e9546479abe72e84e7ddbaf72912e1ad0b4724421f7004e4b9eafb10240", + "sha256": "0ee9485a7862bc033a08471a24a53af69aa597e4a46473fd124242cf900750d6", "size": 5056 }, { @@ -12014,7 +12014,7 @@ "url": "https://support.claude.com/en/articles/16266773-how-claude-marks-ai-generated-content", "status": "success", "path": "support/16266773-how-claude-marks-ai-generated-content.md", - "sha256": "cf9a06b129cbaddf514f2c11b7ed410b9fea8aeb4642a7e396dce69ae7e6a498", + "sha256": "381e8e65ed17cf4685760a3f372a2c21a0009886de7972792452d02f9a26952a", "size": 11984 }, { @@ -12042,7 +12042,7 @@ "url": "https://support.claude.com/en/articles/16607638-understanding-your-pro-or-max-plan-invoices", "status": "success", "path": "support/16607638-understanding-your-pro-or-max-plan-invoices.md", - "sha256": "bd2b150e612e96ed3a428d9a936a5033874046ceef6c0f73283d57997a1ef34a", + "sha256": "73cd2f33ab59b459035f4367b7391d718bcc2434a319e5703b0bf8ec8161b23a", "size": 5834 }, { @@ -12126,8 +12126,8 @@ "url": "https://support.claude.com/en/articles/16893491-get-started-with-smart-reports", "status": "success", "path": "support/16893491-get-started-with-smart-reports.md", - "sha256": "c92092b5d0a3ba4e8c1e68fbdd12d12299fc01a064dfa8d11ae64e92f88debf1", - "size": 16031 + "sha256": "840de39669b8b1122b624d9156bc0c8896cdcf5db5833964afe682e96589f4d1", + "size": 15959 }, { "url": "https://support.claude.com/en/articles/16923645-get-started-with-claude-docs", @@ -12147,8 +12147,8 @@ "url": "https://support.claude.com/en/articles/16951679-use-claude-in-google-docs-sheets-and-slides", "status": "success", "path": "support/16951679-use-claude-in-google-docs-sheets-and-slides.md", - "sha256": "e625412ebfe425e240b549f5910e530878ba49ba3cc6e230952721314a013528", - "size": 21898 + "sha256": "acaf47d3a33f1172e12a76f32bd2fae99a28c9e365460e88a922826501baa57e", + "size": 21894 }, { "url": "https://support.claude.com/en/articles/16952184-set-up-salesforce-in-claude-for-your-organization", @@ -12175,7 +12175,7 @@ "url": "https://support.claude.com/en/articles/17005973-manage-pooled-group-budgets-on-enterprise-plans", "status": "success", "path": "support/17005973-manage-pooled-group-budgets-on-enterprise-plans.md", - "sha256": "25fbb99ad517b579fc424129c51daadeb0560f6e95b348cdb060fa58ab431c91", + "sha256": "5967683819b9556f3af34f2b1ab1a483499ee6ea56197bbe079f9aa254447c57", "size": 6982 }, { @@ -12224,8 +12224,8 @@ "url": "https://support.claude.com/en/articles/17203415-set-up-claude-for-intune", "status": "success", "path": "support/17203415-set-up-claude-for-intune.md", - "sha256": "16fba50dafda29012a6443b4ac8815e2e12f0dbec905db0e9a6a9e0106276991", - "size": 11379 + "sha256": "5e0f172baadb6da421aa1bbc9ad0d0ebf2fc7eb232f6efb8689559bac4fad2f6", + "size": 11377 }, { "url": "https://support.claude.com/en/articles/17318731-use-claude-code-local-mode-and-claude-cowork-local-mode-on-a-hipaa-ready-enterprise-plan", @@ -12238,8 +12238,8 @@ "url": "https://support.claude.com/en/articles/17440474-migrate-from-standalone-claude-design-to-claude", "status": "success", "path": "support/17440474-migrate-from-standalone-claude-design-to-claude.md", - "sha256": "86d6967adc230cf1e80469801db90d636e13e7103a5e05cd013f54e9e4e4c04c", - "size": 15289 + "sha256": "fce4b47a0c4b0e152a106b764ed54fa9521832acf6ba87597c5dc6c6d4daa2fb", + "size": 15291 }, { "url": "https://support.claude.com/en/articles/17444146-claude-haiku-4-5-is-leaving-the-model-selector", @@ -12308,8 +12308,8 @@ "url": "https://claude.com/docs/claude-science/changelog", "status": "success", "path": "claude/claude-science/changelog.md", - "sha256": "5d0deda7214dd9e6948e83e57ccc1376da350e89275fec74beb10fdd15efffbb", - "size": 23450 + "sha256": "33b7636d87cb40c87c9585e9eb81e8831baff3db3e8f15aef6258c07d056b6f4", + "size": 24623 }, { "url": "https://claude.com/docs/claude-science/cloud-storage", @@ -12364,8 +12364,8 @@ "url": "https://claude.com/docs/claude-science/corporate-networks", "status": "success", "path": "claude/claude-science/corporate-networks.md", - "sha256": "e8339b7646b178f17b0f447247c1e1b52b5eb1938f38686ce7ab4959134f2c3f", - "size": 39408 + "sha256": "670b959ac2f6716d8aa7c3300b16c51d7d3567a5f5945951c8cce0881ef13b6b", + "size": 39338 }, { "url": "https://claude.com/docs/claude-science/custom-connectors", @@ -12497,8 +12497,8 @@ "url": "https://claude.com/docs/claude-science/manage-on-devices", "status": "success", "path": "claude/claude-science/manage-on-devices.md", - "sha256": "bea67152a88a1dc4028460aa65aa2d2981b0a9733bd4005cd8e3195f1af8141d", - "size": 10919 + "sha256": "0c5b8f073dc6a9640195cdfce7d8b5ea3953d92efc9191d70980ff270ca2ed03", + "size": 10937 }, { "url": "https://claude.com/docs/claude-science/monitor-usage", @@ -12567,15 +12567,15 @@ "url": "https://claude.com/docs/claude-science/troubleshooting", "status": "success", "path": "claude/claude-science/troubleshooting.md", - "sha256": "c0d3caccac6f899cc98c03204dcce81ba1e55b2f13b2282e9aa3ab08594bc5f1", - "size": 10073 + "sha256": "c03d81a90969ceeda0381031417f770d6e2e1a751797e137e497948a6595fac5", + "size": 10449 }, { "url": "https://claude.com/docs/claude-science/update-claude-science", "status": "success", "path": "claude/claude-science/update-claude-science.md", - "sha256": "3c718dc3ddaad8d55b0c80a4643fd1b96c1f359077d52bd4ea7647de6f6c2943", - "size": 4152 + "sha256": "e1c79811ae185aa036b0a3af184b5b5a9db8a4508c72f7ea3f5d4d0025d3e9b8", + "size": 6240 }, { "url": "https://claude.com/docs/claude-tag/admins/add-connections", @@ -13386,8 +13386,8 @@ "url": "https://claude.com/docs/cowork/changelog", "status": "success", "path": "claude/cowork/changelog.md", - "sha256": "e4c4b27004d27b33ad3eee254aafe54e6669bfed18aa350aee421e807bd2816c", - "size": 219541 + "sha256": "107a7afa362d34e890790a8dceaabd4e38943fe52a4f3a06ca7114c9c2588464", + "size": 220011 }, { "url": "https://claude.com/docs/cowork/guide/dispatch", @@ -13421,8 +13421,8 @@ "url": "https://claude.com/docs/cowork/monitoring", "status": "success", "path": "claude/cowork/monitoring.md", - "sha256": "140044d0b7da10f20f720606f4b6326205874f124e6c1144d98d56886175f2b9", - "size": 14216 + "sha256": "7b489f5f4169c1aed2223914b984f8101aa5c8974c2a5f898522a79d9554af87", + "size": 14447 }, { "url": "https://claude.com/docs/cowork/overview", @@ -13953,8 +13953,8 @@ "url": "https://claude.com/docs/third-party/claude-desktop/admin-console", "status": "success", "path": "claude/third-party/claude-desktop/admin-console.md", - "sha256": "6149fe38892ef00726e7d0764951e6bbe874db7503b9a6ce0349d3be2c00985a", - "size": 70795 + "sha256": "c9907303438872b2550e7c61e336da32a5e7aff8a1043191aa44b6885376e5fe", + "size": 72012 }, { "url": "https://claude.com/docs/third-party/claude-desktop/bedrock", @@ -14016,8 +14016,8 @@ "url": "https://claude.com/docs/third-party/claude-desktop/configuration-changelog", "status": "success", "path": "claude/third-party/claude-desktop/configuration-changelog.md", - "sha256": "8e90779fe99cae9df8f2fe471bd8b894d40f678e5c45b4988977c3782d1b3542", - "size": 58741 + "sha256": "46f0471e5a96ee834d9803ec767f3d525f78530062ace1844502e0f8731c4588", + "size": 58799 }, { "url": "https://claude.com/docs/third-party/claude-desktop/connectors-box", @@ -14226,8 +14226,8 @@ "url": "https://code.claude.com/docs/en/slash-commands", "status": "success", "path": "en/docs/claude-code/slash-commands.md", - "sha256": "df82f2aaebe552f82d1b4d89f3ad6f156520ad3e8f404644df32ed41a68a823b", - "size": 110552 + "sha256": "cdfcb0df93072710866de536ba823c06a0804038d488cd27a2ba48ad114cd456", + "size": 111557 }, { "url": "https://code.claude.com/docs/en/ultraplan", @@ -14254,15 +14254,15 @@ "url": "https://code.claude.com/docs/en/iam", "status": "success", "path": "en/docs/claude-code/iam.md", - "sha256": "7eee08423ba09f648ad55d2a977d2783960450b5867e1629b23386341293a81d", - "size": 30701 + "sha256": "e5f4326ea3fb729685b18d23ed654af6d9f50fb363cca4352e6ad172e9249f05", + "size": 32422 }, { "url": "https://code.claude.com/docs/en/desktop-changelog", "status": "success", "path": "en/docs/claude-code/desktop-changelog.md", - "sha256": "b7f7fa05d5f0c5d0154381b3c8f9afd00515246be19c8b95227bcc19f7902924", - "size": 163933 + "sha256": "e9b10421454affb68a4c1c525ee9dbbc7b0604c79a210258e1073f3e742d9bdb", + "size": 166763 }, { "url": "https://code.claude.com/docs/en/plugin-relevance", @@ -14303,8 +14303,8 @@ "url": "https://code.claude.com/docs/en/web-scheduled-tasks", "status": "success", "path": "en/docs/claude-code/web-scheduled-tasks.md", - "sha256": "66a0b4931d816aee9a1fc8e156f67756b9f3a5ca9ff1f248380d7c7d9889189c", - "size": 40887 + "sha256": "b7986c5faced4decfc9d343d16d7ce5354044b6ff9a0bf3ff2038adc87a33b56", + "size": 41018 }, { "url": "https://code.claude.com/docs/en/agent-sdk/slash-commands", @@ -25363,7 +25363,7 @@ "url": "https://raw.githubusercontent.com/anthropics/claude-plugins-official/main/.claude-plugin/marketplace.json", "status": "success", "path": "github/claude-plugins-official/.claude-plugin/marketplace.json", - "sha256": "0551c99abf647e28d8c5e2eac3d62ad051fd87231ef6b576f98af6d7ddba372e", + "sha256": "6c16184811024ac4ed0f4e871767d077d397ee33d30bf5887b51a18ec8dbee17", "size": 190732 }, { @@ -27470,7 +27470,7 @@ "url": "https://raw.githubusercontent.com/anthropics/claude-plugins-official/main/plugins/security-guidance/.claude-plugin/plugin.json", "status": "success", "path": "github/claude-plugins-official/plugins/security-guidance/.claude-plugin/plugin.json", - "sha256": "28e2ec31f82268679baef06776a6975b56146a0be8ddf2d4f84f8f7e8bad4337", + "sha256": "08a25db641c565ace7ae99fb3723a0852ef379e0b4d543123a6b25e37e18421b", "size": 500 }, { @@ -28047,13 +28047,6 @@ "sha256": "a133764b0551c56b46694b7f374d6290c7e5c22493176e0db76ac30de3be4c3e", "size": 107456 }, - { - "url": "https://raw.githubusercontent.com/anthropics/courses/master/real_world_prompting/04_call_summarizer.ipynb", - "status": "success", - "path": "github/courses/real_world_prompting/04_call_summarizer.ipynb", - "sha256": "97869b23544e285cd35fcb7cc4df9ca9740f8f98bde1be24a44a543467af412e", - "size": 70986 - }, { "url": "https://raw.githubusercontent.com/anthropics/courses/master/real_world_prompting/05_customer_support_ai.ipynb", "status": "success", @@ -29346,8 +29339,8 @@ "url": "https://raw.githubusercontent.com/anthropics/anthropic-sdk-python/main/CHANGELOG.md", "status": "success", "path": "github/anthropic-sdk-python/CHANGELOG.md", - "sha256": "9054c84b7d2f62bfb904633c9f5995ecc2c8bc7ca10859427330432995ba579e", - "size": 270145 + "sha256": "556412998679ab1f2ba05bfe0f9dcb6042436b6aad2cf8b602e580f636ff56da", + "size": 270332 }, { "url": "https://raw.githubusercontent.com/anthropics/anthropic-sdk-python/main/CLAUDE.md", @@ -29395,8 +29388,8 @@ "url": "https://raw.githubusercontent.com/anthropics/anthropic-sdk-python/main/api.md", "status": "success", "path": "github/anthropic-sdk-python/api.md", - "sha256": "99e8dea610116e6cfa9705b55a9dd19f717d34cb3aa56a8d9cf524b09d8b865c", - "size": 196817 + "sha256": "1b3f54c16092ed77796f3dec23ecd0643436f294f3477fb144a506a61fe531a5", + "size": 197049 }, { "url": "https://raw.githubusercontent.com/anthropics/anthropic-sdk-python/main/browser-toolset.md", @@ -29458,8 +29451,8 @@ "url": "https://raw.githubusercontent.com/anthropics/anthropic-sdk-typescript/main/CHANGELOG.md", "status": "success", "path": "github/anthropic-sdk-typescript/CHANGELOG.md", - "sha256": "c3661a38cc829a1f6266455bea4113bc9c63cd22d0c9d7b0f455830d304aa959", - "size": 249436 + "sha256": "c60ac17e60651cef3c3dc929c50130d3f8a6272fc93b5529bc6d53c7df2895a1", + "size": 249635 }, { "url": "https://raw.githubusercontent.com/anthropics/anthropic-sdk-typescript/main/CLAUDE.md", @@ -29507,8 +29500,8 @@ "url": "https://raw.githubusercontent.com/anthropics/anthropic-sdk-typescript/main/api.md", "status": "success", "path": "github/anthropic-sdk-typescript/api.md", - "sha256": "0aa05dd839d97d2c7c9a3da765e5bea2d91ecb3d81718c480a05727df9459dbd", - "size": 258148 + "sha256": "0b13a531dbe76bcd00faa728260616b7bf1c298da7ba84c4e7b2d6d41a818ffe", + "size": 258806 }, { "url": "https://raw.githubusercontent.com/anthropics/anthropic-sdk-typescript/main/browser-toolset.md", @@ -29651,7 +29644,12 @@ "size": 170 } ], - "failures": [], + "failures": [ + { + "url": "https://raw.githubusercontent.com/anthropics/courses/master/real_world_prompting/04_call_summarizer.ipynb", + "error": "503, message='between bytes timeout', url='https://raw.githubusercontent.com/anthropics/courses/master/real_world_prompting/04_call_summarizer.ipynb'" + } + ], "dead": [ { "url": "https://code.claude.com/docs/en/claude-tag", @@ -30848,9 +30846,9 @@ ], "summary": { "total": 4533, - "downloaded": 4235, + "downloaded": 4234, "skipped": 0, - "failed": 0, + "failed": 1, "dead": 298, "success_rate": 100.0 } diff --git a/content/CHANGELOG.md b/content/CHANGELOG.md index 2611b38896..859e1c98d2 100644 --- a/content/CHANGELOG.md +++ b/content/CHANGELOG.md @@ -1,5 +1,55 @@ # Changelog +## 2.1.308 + +- Bug fixes and reliability improvements + +## 2.1.307 + +- Added `/claude-api api-version` to move Claude API code to API version `2026-10-21` +- Added the `claude_code.safety_event` OpenTelemetry event for each tool call a permission rule, auto mode, a safety check, a hook or the sandbox stopped, prompted or sent back +- Fixed requests failing with a model-not-found error when `CLAUDE_CODE_DISABLE_1M_CONTEXT` is set and the model is an alias with the `[1m]` suffix, such as `opus[1m]` +- Fixed the `prompt-caching-scope` beta header being sent behind custom `ANTHROPIC_BASE_URL` gateways and on Foundry, where it has no effect +- Fixed MCP servers showing "needs authentication" in `claude -p` on macOS while the login keychain was locked; they now say why, and the next run after an unlock connects without a new sign-in +- Fixed MCP servers being reported as timed out, and staying failed in headless runs, when a macOS or Linux computer went to sleep while they were connecting +- Fixed HTTP MCP tool calls being sent twice when the connection closed mid-call; only read-only or idempotent tools are now retried +- Fixed a turn sometimes starting without an SDK MCP server's latest tools when a background task was running +- Fixed some "Autocompact is thrashing" errors in turns that read many PDF pages, images or other large tool results +- Fixed `/autocompact` in cloud sessions going back to the default window after the session restarted +- Fixed a conversation cleared with `/clear` sometimes coming back when a cloud or self-hosted runner session restarted +- Fixed `CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MS` being ignored in Claude apps gateway sessions +- Fixed telemetry from Claude Desktop sessions behind a Claude apps gateway being rejected when `OTEL_EXPORTER_OTLP_HEADERS` is set +- Fixed `/permissions` > Recently denied not showing the denied shell command, and auto mode's local classifier ignoring an approval from there when it checks a retried command; approving a row now names the command, not its description +- Fixed `/help` and the `/` command menu showing long model-facing descriptions for bundled skills such as `/claude-api` instead of their short descriptions +- Fixed subagent transcripts recording placeholder token usage and an empty stop reason for streamed responses +- Fixed model switches through the Agent SDK's `setModel()`, and apps built on it, being refused when the API took more than 5 seconds to confirm the model; Claude Code now waits up to 15 seconds +- Fixed a background command stopped through a connected app (such as the desktop app archiving an idle session) being reported to Claude as stopped by the user; the notice now names its output file +- Fixed WebFetch in Cowork cloud sessions reporting a tool error when a site answered with a 4xx status or a robots.txt refusal; it is now a normal result, as in local sessions +- Fixed write tools on a directly configured GitHub MCP server showing a form that closed without creating anything in the desktop app's Code tab +- Fixed Artifact tool reads failing with a connection reset when the server had closed a reused connection +- Self-hosted runner: Fixed sessions with `--use-anthropic-git-proxy` committing a `.claude/settings.local.json` left in the clone by an earlier session +- Self-hosted runner: Fixed archiving or requeueing a session, or stopping the runner, during its checkout hook leaving the hook's processes running and the runner's slot held +- Improved recovery from unparseable tool calls: Claude Code now retries the call up to twice before ending the turn with an error +- Improved fork subagents launched together: each is now told which launch is its own, so forks are much less likely to try to start each other's work +- Improved browser sign-in: the success page now appears as soon as sign-in completes, without waiting for your account profile to load +- Improved web search errors in cloud and self-hosted runner sessions: a search refused with a 403 that gives a reason now shows that reason instead of a generic "Authentication error" +- Improved the time to the first reply in cloud sessions when one of the desktop app's MCP servers can't connect +- Improved Remote Control connect time for sessions whose transcript contains large pasted images or PDF reads +- Changed the notice Claude gets when the WebSearch budget is used up to also tell it not to query search engines in a browser or through computer use +- Changed the `axScreenReader` setting and `CLAUDE_AX_SCREEN_READER` in a settings `env` block to apply only from user, managed or `--settings` settings (since 2.1.305) +- Self-hosted runner: Changed checkout hooks to be stopped after 30 minutes by default, failing the session's setup; if yours needs longer, raise `--checkout-hook-timeout-min` or set it to `0` +- Self-hosted runner: Changed the certificate file built for Anthropic-managed git to filter its trusted certificates as the CLI does; a `[runner:warn]` line gives the number left out +- [VSCode] Added a notice on the microphone button when voice dictation stops by itself (15 seconds without recognized speech, or the 2-minute limit), saying why and that the text so far is kept +- [VSCode] Fixed a long prompt expanded with Show more covering the whole chat panel: a pinned prompt is now capped at 40% of the panel and scrolls +- [VSCode] Fixed part of a list item or table cell with LaTeX math pasting as a new list or table in rich text editors +- [VSCode] Fixed dictation failing behind a TLS-inspecting proxy when `NODE_EXTRA_CA_CERTS` is set only in `~/.claude/settings.json`; it now also follows `CLAUDE_CODE_CERT_STORE` +- [VSCode] Changed the "still open somewhere else" notice to also cover a Claude process left over from an extension restart, which usually ends on its own within about 10 minutes +- [VSCode] Changed voice dictation to filter its trusted certificates as the CLI does +- [VSCode] Changed the extension's own requests to filter their trusted certificates as the CLI does, and to trust the `NODE_EXTRA_CA_CERTS` file named in the environment or in user settings +- [Cloud sessions] Fixed the repository picker saying "No repositories match" while a search was still running; it now shows "Searching…" until the results arrive +- [Cloud sessions] Fixed the "Waiting for a runner" status on self-hosted environments being cut off; with on-demand runners it now counts up from your last message and shows failed attempts +- [Code Review] Added `@claude review stop` (also `off` and `pause`) to Code Review, ending an `@claude review always` subscription on a pull request without starting a new review + ## 2.1.306 - Fixed `claude -p` inside cloud sessions reporting "Not logged in" when started without the session's environment variables diff --git a/content/claude-code-manifest.json b/content/claude-code-manifest.json index 33d1f7ce63..2de3a78e2f 100644 --- a/content/claude-code-manifest.json +++ b/content/claude-code-manifest.json @@ -6,17 +6,17 @@ "url": "https://github.com/anthropics/claude-code/issues" }, "dist": { - "shasum": "19ee36814fd23f840c75f3a61600c413ce75c56f", - "tarball": "https://registry.npmjs.org/@anthropic-ai/claude-code/-/claude-code-2.1.306.tgz", + "shasum": "afb8f4d592108295e45492e6fbd52c184a1e1fd1", + "tarball": "https://registry.npmjs.org/@anthropic-ai/claude-code/-/claude-code-2.1.308.tgz", "fileCount": 7, - "integrity": "sha512-7biQtEqwnigGbezCgmpkGfcleiRddNy7Z9FXLCxmaizBnC11Qk9dxnr6mPBMX5eTRbnoMGHHIsL5M5el1vWhlw==", + "integrity": "sha512-b2HnszgyN73wRTFP+IYPDJNn9ADXnG6jr26ibL+w03HSKqfb6GqE8Jnfr4mz37Zv4AT/NP+B5/3c1F89WTdWSA==", "signatures": [ { - "sig": "MEUCIQDy0FeyTw4LcVBoGJyYGiFA6lZA7SgPSzShikECkcc4MgIgIiGXz688/KPhdXED/BN0llQXZ4yvDFYcgjV63idj80U=", + "sig": "MEUCIHwDAAaWUGI7dfWkW/PNX76cLCWleQTsY+a8vGLAy4VeAiEA2cGttZBQvUP0MrmJOTni45cE0+svnX63HNGV82zkrho=", "keyid": "SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U" }, { - "sig": "MEQCIDITF2mLAoQc0wC7N+Rk3l9OnK1OGnDayUMFW7lcyYZCAiAPOKHy2B9NxDICTHOH9KOYqKbzXuatDtH3k+1LxP7S2g==", + "sig": "MEUCIHynYqhMVoO3kWvRhpHM+dflRJHBqeh8C2Hoe7108W9dAiEAn67qCJyFQdhCE62F9R8BQC/3eK+hWK0uh8J8og3ejx8=", "keyid": "SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U" } ], @@ -24,7 +24,7 @@ }, "name": "@anthropic-ai/claude-code", "type": "module", - "_from": "file:staged-npm/anthropic-ai-claude-code-2.1.306.tgz", + "_from": "file:staged-npm/anthropic-ai-claude-code-2.1.308.tgz", "author": { "name": "Anthropic", "email": "support@anthropic.com" @@ -46,9 +46,9 @@ } }, "homepage": "https://github.com/anthropics/claude-code", - "_resolved": "/home/runner/work/claude-cli-internal/claude-cli-internal/staged-npm/anthropic-ai-claude-code-2.1.306.tgz", - "_integrity": "sha512-7biQtEqwnigGbezCgmpkGfcleiRddNy7Z9FXLCxmaizBnC11Qk9dxnr6mPBMX5eTRbnoMGHHIsL5M5el1vWhlw==", - "_npmVersion": "11.19.0", + "_resolved": "/home/runner/work/claude-cli-internal/claude-cli-internal/staged-npm/anthropic-ai-claude-code-2.1.308.tgz", + "_integrity": "sha512-b2HnszgyN73wRTFP+IYPDJNn9ADXnG6jr26ibL+w03HSKqfb6GqE8Jnfr4mz37Zv4AT/NP+B5/3c1F89WTdWSA==", + "_npmVersion": "11.19.1", "description": "Use Claude, Anthropic's AI assistant, right from your terminal. Claude can understand your codebase, edit files, run terminal commands, and handle entire workflows for you.", "directories": {}, "maintainers": [ @@ -113,24 +113,24 @@ "email": "joan@anthropic.com" } ], - "_nodeVersion": "24.21.0", + "_nodeVersion": "24.22.0", "dependencies": {}, "_hasShrinkwrap": false, "readmeFilename": "README.md", "optionalDependencies": { - "@anthropic-ai/claude-code-linux-x64": "2.1.306", - "@anthropic-ai/claude-code-win32-x64": "2.1.306", - "@anthropic-ai/claude-code-darwin-x64": "2.1.306", - "@anthropic-ai/claude-code-linux-arm64": "2.1.306", - "@anthropic-ai/claude-code-win32-arm64": "2.1.306", - "@anthropic-ai/claude-code-darwin-arm64": "2.1.306", - "@anthropic-ai/claude-code-linux-x64-musl": "2.1.306", - "@anthropic-ai/claude-code-linux-arm64-musl": "2.1.306" + "@anthropic-ai/claude-code-linux-x64": "2.1.308", + "@anthropic-ai/claude-code-win32-x64": "2.1.308", + "@anthropic-ai/claude-code-darwin-x64": "2.1.308", + "@anthropic-ai/claude-code-linux-arm64": "2.1.308", + "@anthropic-ai/claude-code-win32-arm64": "2.1.308", + "@anthropic-ai/claude-code-darwin-arm64": "2.1.308", + "@anthropic-ai/claude-code-linux-x64-musl": "2.1.308", + "@anthropic-ai/claude-code-linux-arm64-musl": "2.1.308" }, "_npmOperationalInternal": { - "tmp": "tmp/claude-code_2.1.306_1792549727402_0.7862613812864887", + "tmp": "tmp/claude-code_2.1.308_1792642788819_0.41760888090613246", "host": "s3://npm-registry-packages-npm-production" }, - "_id": "@anthropic-ai/claude-code@2.1.306", - "version": "2.1.306" + "_id": "@anthropic-ai/claude-code@2.1.308", + "version": "2.1.308" } \ No newline at end of file diff --git a/content/claude/claude-science/changelog.md b/content/claude/claude-science/changelog.md index c8ba4a6dfc..4b09c5d8d4 100644 --- a/content/claude/claude-science/changelog.md +++ b/content/claude/claude-science/changelog.md @@ -6,6 +6,19 @@ > Release notes for Claude Science, including new features, improvements, and bug fixes by version. +**0.1.70** + +* Bug fixes and reliability improvements + +**0.1.69** + +* A new **Trouble updating?** link opens [Update Claude Science](/docs/claude-science/update-claude-science), a help page with other ways to update. It shows in **Settings > General > About**, in the **Update required** box, and on the "Update available" notice while an update downloads or after one fails +* Cloud storage in Settings now works with Google Cloud Storage HMAC keys on computers where no AWS region is set +* Mac: if `config.toml` has `auto_update = false` under `[update]`, Claude Science in its own window no longer checks for updates in the background. You can still check with **Claude Science > Check for App Updates…** in the menu bar +* Linux: fixed updates from 0.1.66 or earlier failing with "restart aborted" when Claude Science was started by typing only `claude-science` +* Linux: if a folder you've granted **Read & write** holds a folder you can enter but not list (such as another person's folder on a shared drive), or a stale network mount, the code and commands Claude runs can now be refused, with a message that says how to fix it +* Bug fixes and reliability improvements + **0.1.68** * **Export session** files now list the approval decisions made in the session from this version on: whether each action was approved, how it was settled, and when diff --git a/content/claude/claude-science/corporate-networks.md b/content/claude/claude-science/corporate-networks.md index e7ddec634f..817d6f71db 100644 --- a/content/claude/claude-science/corporate-networks.md +++ b/content/claude/claude-science/corporate-networks.md @@ -205,7 +205,7 @@ Conda package downloads for the analysis sandbox use their own setting, `[conda] On macOS and Linux, `[conda] ca_bundle` affects package downloads only, and it never fixes sign-in. The CA bundle path field on the Settings page sets this same `[conda]` key, so filling it in helps package downloads only, and on Windows leave the field empty. Behind TLS inspection you also need `[network] ca_bundle`, which has no Settings field and is set in `config.toml`. -pip verifies package downloads against the operating system's trust store, and in this release setting `[conda] ca_bundle` alone may not be sufficient for pip, so also install the corporate root in that trust store: on Linux with `update-ca-certificates` or `update-ca-trust`, on macOS in the system keychain through your MDM, and on Windows in the computer's Trusted Root Certification Authorities store, which pip reads in environments on Python 3.10 or later, the default. +pip verifies package downloads against the operating system's trust store, and in this release setting `[conda] ca_bundle` alone may not be sufficient for pip, so also install the corporate root in that trust store: on Linux with `update-ca-certificates` or `update-ca-trust`, on macOS in the system keychain through your MDM, and on Windows in the computer's Trusted Root Certification Authorities store. ```toml theme={null} [conda] diff --git a/content/claude/claude-science/manage-on-devices.md b/content/claude/claude-science/manage-on-devices.md index 1444752bf0..4258effaac 100644 --- a/content/claude/claude-science/manage-on-devices.md +++ b/content/claude/claude-science/manage-on-devices.md @@ -32,7 +32,7 @@ To set configuration keys organization-wide, deploy the per-member config.toml ( | - | - | | `disable_telemetry = true` | Stops the app from sending product-usage telemetry and error reports to Anthropic. | | `data_dir = ""` | Moves conversations, artifacts, and workspaces to a managed location (for example, a volume your backup tooling covers). | -| `auto_update = false` under `[update]` | Turns off the background check for updates on Windows, on Linux, and on a Mac where Claude Science opens in a browser tab; pair with your own distribution channel. A member can still check for and install an update from inside Claude Science. | +| `auto_update = false` under `[update]` | Turns off the background check for updates; pair with your own distribution channel. On a Mac where Claude Science opens in its own window, the key requires version 0.1.69 or later. A member can still check for and install an update from inside Claude Science. | | `enabled = false` under `[sandbox.network]` | Blocks network access from the app's local code-execution sandbox. The similarly named `network_isolated` key under `[sandbox]` doesn't control this. | The [configuration file reference](/docs/claude-science/configuration-file-reference) documents the network-related keys and their defaults, and [Use Claude Science on a corporate network](/docs/claude-science/corporate-networks) covers the proxy, TLS-inspection, and mirror settings. diff --git a/content/claude/claude-science/troubleshooting.md b/content/claude/claude-science/troubleshooting.md index 395144c72a..aec556001c 100644 --- a/content/claude/claude-science/troubleshooting.md +++ b/content/claude/claude-science/troubleshooting.md @@ -91,9 +91,9 @@ Claude Science couldn't reach the update server. Check your internet connection, ### restart aborted -On the "Update available" notice, this means the new version was downloaded but didn't start. If Claude Science is still running, it's the version you had, and you can try again: select **Check for updates** under **Settings > General > About**, then select **Restart to update** there. If Claude Science has stopped, start it again. +On the "Update available" notice, this means the new version was downloaded but didn't start. On a Mac or Linux, if the message says "restart aborted" and you started Claude Science from a terminal, follow [the terminal steps](/docs/claude-science/update-claude-science#from-a-terminal-or-on-a-server). Otherwise, if Claude Science is still running, it's the version you had, and you can try again: select **Check for updates** under **Settings > General > About**, then select **Restart to update** there. On Windows, if trying again fails, leave Claude Science open and follow [the Windows steps](/docs/claude-science/update-claude-science#if-the-update-still-fails). If Claude Science has stopped, start it again. -On Linux, an update to version 0.1.61 ends this way on a computer where bubblewrap or socat came from conda, Homebrew, or a folder in your home directory, because version 0.1.61 needs both installed for the whole system. Version 0.1.62 withdraws that requirement, so trying again as above now gets a version that starts. If Claude Science won't start at all, run `claude-science update` in a terminal, then start it again. +On Linux, an update to version 0.1.61 ends this way on a computer where bubblewrap or socat came from conda, Homebrew, or a folder in your home directory, because version 0.1.61 needs both installed for the whole system. Version 0.1.62 withdraws that requirement, so updating again now gets a version that starts. If Claude Science won't start at all, run `claude-science update` in a terminal, then start it again. In version 0.1.67 and later, the notice can show one of these two sentences, with the new version's error on a **Reason** line when there is one: diff --git a/content/claude/claude-science/update-claude-science.md b/content/claude/claude-science/update-claude-science.md index 8830fa77e0..41f377fa85 100644 --- a/content/claude/claude-science/update-claude-science.md +++ b/content/claude/claude-science/update-claude-science.md @@ -10,21 +10,23 @@ Your projects, conversations, and artifacts stay in your data folder. Updating s ## Update from the app -1. Select **Update now** in the **Update required** box, or **Restart to update** on the "Update available" notice. With neither, select **Check for updates** under **Settings > General > About**, then **Restart to update**. +1. Select **Update now** in the **Update required** box, or **Restart to update** on the "Update available" notice at the lower right of the window. With neither, select **Check for updates** under **Settings > General > About**, then **Restart to update**. 2. If sessions are still running, select **Stop & restart**, which stops them. -3. Leave Claude Science open while it downloads and restarts. +3. Leave Claude Science open while it downloads and restarts, which can take several minutes. If it says "Restart timed out", or nothing changes for an hour, start Claude Science the way you usually do. On Windows, don't quit Claude Science first. ## A Mac app in its own window If **Update now** shows an error in red: -1. Quit Claude Science with Command-Q, which stops running sessions. Closing the window isn't enough. -2. Wait ten seconds, open Claude Science from your **Applications** folder, and send a message. -3. If the **Update required** box comes back, choose **Claude Science > Check for App Updates…** in the menu bar. When the window says "Ready to update", select **Restart to update**. +1. Choose **Claude Science > Check for App Updates…** in the menu bar at the top of the screen. If you don't see that menu, click the Claude Science window first. +2. Wait while the window that opens checks and downloads, then select **Restart to update**. If sessions are running, select **Stop session and restart** or **Stop sessions and restart** instead. If macOS asks for an administrator's password and you don't have one, ask your IT team. +3. Send a message. If the **Update required** box comes back, do steps 1 and 2 once more. + +If you can't find the menu, leave Claude Science open for ten minutes. Then quit with Command-Q, which stops running sessions (closing the window isn't enough), wait ten seconds, and open Claude Science from your **Applications** folder. > [!WARNING] > -> Download Claude Science again only if that window says "install the newest Claude Science app over this one", or if Claude Science won't open and says "This copy of Claude Science can't be opened". Then [install Claude Science again](#install-claude-science-again). The download is the app that opens in a browser tab, not the app you have. +> Download Claude Science again only if the window from step 2 says "install the newest Claude Science app over this one", or if Claude Science won't open and says "This copy of Claude Science can't be opened". Then [install Claude Science again](#install-claude-science-again). The download is the app that opens in a browser tab, not the app you have. ## From a terminal or on a server @@ -39,7 +41,7 @@ If `claude-science stop` says "Not killing pid", press Ctrl-C in the terminal wh ## Install Claude Science again -On a Mac where Claude Science opens in its own window, do this only if [the steps for that Mac](#a-mac-app-in-its-own-window) sent you here, and [get help](#if-the-update-still-fails) if they didn't. Installing again doesn't replace your data folder. If your projects don't appear afterward, don't delete any folders, and get help. +On a Mac where Claude Science opens in its own window, do this only if [the steps for that Mac](#a-mac-app-in-its-own-window) sent you here, and [get help](#if-the-update-still-fails) if they didn't. On Windows, if an update said "restart aborted" or "The update is installed", follow [the Windows steps](#if-the-update-still-fails) first. Installing again doesn't replace your data folder. If your projects don't appear afterward, don't delete any folders, and get help. 1. Quit Claude Science. On a Mac, Control-click **Claude Science** in the Dock and choose **Quit**. On Windows, right-click its icon in the notification area of the taskbar and choose **Quit Claude Science**. 2. Download the installer from [claude.com/product/claude-science](https://claude.com/product/claude-science) and open it. On a Mac, choose **Install**. @@ -52,6 +54,8 @@ curl -fsSL https://claude.ai/install-claude-science.sh | bash ## If the update still fails -* **Claude Science still asks you to update**: on a Mac where Claude Science opens in its own window, quit it with Command-Q, wait ten seconds, then open it from your **Applications** folder. Anywhere else, run `claude-science stop` in a terminal (on a Mac or Linux, if the command isn't found, type `~/.local/bin/claude-science stop`), quit Claude Science if you're on a Mac, then open it again. If `claude-science stop` says "Not killing pid", follow [the terminal steps](#from-a-terminal-or-on-a-server). -* **The message says "restart aborted"**: follow [restart aborted](/docs/claude-science/troubleshooting#restart-aborted). +* **On Windows, an update said "restart aborted" or "The update is installed"**: don't quit Claude Science or run `claude-science stop`, and don't shut down or restart your PC, or sign out of Windows. Letting your PC sleep doesn't close Claude Science. If security software is blocking the new version, Claude Science might not open again. Select **Update now** or **Restart to update** again after a few minutes. If it still fails, ask your IT team whether security software is blocking Claude Science, and send them [Where the app stores data](/docs/claude-science/manage-on-devices#where-the-app-stores-data). If you don't have an IT team, contact [Claude support](https://support.claude.com/en/articles/9015913-how-to-get-support). +* **Claude Science still asks you to update**: on Windows, if an update said "restart aborted" or "The update is installed", follow the entry above instead. On a Mac where Claude Science opens in its own window, quit it with Command-Q, wait ten seconds, then open it from your **Applications** folder. Anywhere else, run `claude-science stop` in a terminal (on a Mac or Linux, if the command isn't found, type `~/.local/bin/claude-science stop`), quit Claude Science if you're on a Mac, then open it again. If `claude-science stop` says "Not killing pid", follow [the terminal steps](#from-a-terminal-or-on-a-server). +* **The message says "restart aborted" or "The update is installed"**: on a Mac or Linux, if you started Claude Science from a terminal, follow [the terminal steps](#from-a-terminal-or-on-a-server). Otherwise, follow [restart aborted](/docs/claude-science/troubleshooting#restart-aborted). +* **The message says "the new version couldn't start"**: you're still on the version you had. Updating again, even from a terminal, gets the same version until a newer one is released, so contact [Claude support](https://support.claude.com/en/articles/9015913-how-to-get-support) with the exact words you see. * **Anything else**: on a Mac where Claude Science opens in its own window, contact [Claude support](https://support.claude.com/en/articles/9015913-how-to-get-support) with your version and the exact words you see. Anywhere else, [install Claude Science again](#install-claude-science-again), and contact support if that doesn't work. diff --git a/content/claude/cowork/changelog.md b/content/claude/cowork/changelog.md index 6cbc4d0bdd..d8e37a9bb3 100644 --- a/content/claude/cowork/changelog.md +++ b/content/claude/cowork/changelog.md @@ -6,6 +6,26 @@ > Release notes for Claude Desktop +**v3.1623.1** + +Bundled Claude Code version: 2.1.304. + +**General** + +* No user-facing changes. + +**Code** + +* No user-facing changes. + +**Cowork** + +* No user-facing changes. + +**3P** + +* No user-facing changes. + **v3.1623.0** Bundled Claude Code version: 2.1.304. @@ -52,6 +72,7 @@ Bundled Claude Code version: 2.1.304. * Added `quickEntryDefaultShortcut`, which sets the Quick Entry shortcut, or `off` for none, for users who have not chosen their own in Settings. * Added `releaseChannel`. Set it to `staggered` to have devices update to releases that Anthropic marks after they have fully rolled out on `stable`; those devices skip the releases in between, and fixes reach them later. * Added an optional `icon` to remote and local `managedMcpServers` entries, a PNG or JPEG image as a base64 `data:` URI of up to 4,096 characters, shown so users can tell connectors apart. +* Added nested sessions to local and SSH sessions in the Code tab: Claude can start a task in a separate session, which appears under the original session in the sidebar and reports back to it. Each nested session sends its own requests to your inference provider. * Added the new Code tab: the New session page with saved environments (folders and SSH hosts), the session rail, sidebar grouping by environment, and the pickers under the message box. Anthropic-hosted cloud environments, Remote Control, voice input and worktrees for extra folders remain unavailable. * Added to Code tab sessions Claude's plan and a next-step box at the end of a turn, suggested next actions, `/btw` side chats in a pane, and permission requests, questions and suggested tasks shown in the conversation. * (breaking) Changed `sshHostAllowlist` (beta) to also cover a session's jump hosts: each `ProxyJump` host, and the host in a `ProxyCommand` written `ssh -W %h:%p host`, must be on the list by its `HostName`. The error on a refused session names the host to add. diff --git a/content/claude/cowork/monitoring.md b/content/claude/cowork/monitoring.md index 5e56c501a3..75ad8ab09f 100644 --- a/content/claude/cowork/monitoring.md +++ b/content/claude/cowork/monitoring.md @@ -12,6 +12,8 @@ Track Cowork usage and activity across your organization by exporting events thr > > Monitoring is available for Team and Enterprise plans. OTel monitoring requires Claude desktop app version 1.1.4173 or later. +See [Retrieve session transcripts](https://platform.claude.com/docs/en/manage-claude/compliance-sessions) in the Compliance API documentation to retrieve the transcripts of Cowork sessions on request. Requires an Enterprise plan. + ## Setup Configure monitoring from the Cowork admin settings: diff --git a/content/claude/third-party/claude-desktop/admin-console.md b/content/claude/third-party/claude-desktop/admin-console.md index d55af377d3..e099c5fd56 100644 --- a/content/claude/third-party/claude-desktop/admin-console.md +++ b/content/claude/third-party/claude-desktop/admin-console.md @@ -416,10 +416,19 @@ The app doesn't fall back to the profile's provider or server when it can't reac On Claude Desktop 2.37337.0 or later, a user who belongs to any organization that uses the admin console can move a device to that organization's configuration by signing in. The organization doesn't have to be yours. To prevent the move, or to allow it only for your organization, set one of these keys in the device's [managed profile](#devices-with-a-managed-profile): * **Prevent the move:** set [`disableDeploymentModeChooser`](/docs/third-party/claude-desktop/configuration#disabledeploymentmodechooser) to `true`. The app ignores the admin console, and the sign-in screen doesn't offer **Or sign in with Claude.ai**. A device that already moved returns to the profile at its next launch. Set the key in the profile itself, not only in your bootstrap server's response. -* **Allow only your organization:** set [`forceLoginOrgUUID`](/docs/cowork/hipaa-setup#what-each-claude-desktop-key-does) to your Claude organization's ID. This ID isn't [`deploymentOrganizationUuid`](/docs/third-party/claude-desktop/configuration#deploymentorganizationuuid), which is a UUID you generate. The app ignores the admin console configuration of any other organization and limits standard Claude Desktop sign-in on the device to your organization. +* **Allow only your organization:** set [`forceLoginOrgUUID`](/docs/cowork/hipaa-setup#what-each-claude-desktop-key-does) to your Claude organization's ID. This ID isn't [`deploymentOrganizationUuid`](/docs/third-party/claude-desktop/configuration#deploymentorganizationuuid), which is a UUID you generate. Devices already on your organization's admin console configuration stay on it. The app ignores the admin console configuration of any other organization and limits standard Claude Desktop sign-in on the device to your organization. You can use `forceLoginOrgUUID` to help prevent shadow IT, which here means people using personal Claude accounts or other organizations' accounts in Claude Desktop on work computers. A user who signs in to standard Claude Desktop with an account that isn't in your organization sees a page that reads "This account is not approved by your enterprise admin" and can only log out. +To deploy `forceLoginOrgUUID`: + +1. Update devices to Claude Desktop 2.37337.0 or later. Earlier versions ignore the admin console when this key is set. +2. In the admin console, copy the **Key** and the **Value** from the **Allow only this organization with device management (MDM)** row, under **Desktop sign-in** on the **Connection** page. +3. Add the key and value to the device's managed profile, in one of the [locations the app reads](/docs/third-party/claude-desktop/mdm#4-deploy-the-configuration). Enter the ID without braces or quotation marks. In the Windows registry, make it a String value (`REG_SZ`). For more than one organization, enter a JSON array of IDs, such as `["ID-1","ID-2"]`. +4. Restart Claude Desktop after the profile reaches the device. + +If the value lists only other IDs, or the app can't read it, the app uses only the profile and the console's settings stop applying. Correct the value and restart Claude Desktop. If the device doesn't return to the console's configuration, its user signs in to your organization again, as described under [Devices with a managed profile](#devices-with-a-managed-profile). + For the macOS and Windows locations where the app reads a managed profile's keys, see [Deploy the configuration](/docs/third-party/claude-desktop/mdm#4-deploy-the-configuration). > [!WARNING] diff --git a/content/claude/third-party/claude-desktop/configuration-changelog.md b/content/claude/third-party/claude-desktop/configuration-changelog.md index b429d07edb..223c508dc5 100644 --- a/content/claude/third-party/claude-desktop/configuration-changelog.md +++ b/content/claude/third-party/claude-desktop/configuration-changelog.md @@ -8,6 +8,10 @@ Configuration keys by Claude Desktop release. Each section lists keys added in that release, with the MDM key name (for plist/registry deployment) and the equivalent JSON shape (for local-file or bootstrap remote configuration). +**v3.1623.1** + +No configuration changes in this release. + **v3.1623.0** | MDM key | Type | Description | diff --git a/content/en/about-claude/models/migration-guide.md b/content/en/about-claude/models/migration-guide.md index a7625237c0..2e2f2a6086 100644 --- a/content/en/about-claude/models/migration-guide.md +++ b/content/en/about-claude/models/migration-guide.md @@ -11,7 +11,7 @@ description: Guides for migrating to the latest Claude models from previous Clau ## Get help -* Check the [API overview](https://platform.claude.com/docs/en/api/overview) for detailed specifications -* Review [model capabilities](https://platform.claude.com/docs/en/models/overview) for performance comparisons -* Review [Claude Platform release notes](https://platform.claude.com/docs/en/release-notes/overview) for API updates -* Contact support if you encounter any issues during migration +* Check the [API overview](https://platform.claude.com/docs/en/api/overview) for detailed specifications. +* Review [model capabilities](https://platform.claude.com/docs/en/models/overview) for performance comparisons. +* Review [Claude Platform release notes](https://platform.claude.com/docs/en/release-notes/overview) for API updates. +* Contact support if you encounter any issues during migration. diff --git a/content/en/about-claude/models/optimizing-for-cost-and-intelligence.md b/content/en/about-claude/models/optimizing-for-cost-and-intelligence.md index b1330c1bf0..cd3d397026 100644 --- a/content/en/about-claude/models/optimizing-for-cost-and-intelligence.md +++ b/content/en/about-claude/models/optimizing-for-cost-and-intelligence.md @@ -61,7 +61,7 @@ Turn on [prompt caching](https://platform.claude.com/docs/en/build-with-claude/p * Deep in a task, a well-built loop pays full price on under 1% of its input. * Below about 80%, look for something breaking the cache (see [What breaks the cache](https://platform.claude.com/docs/en/about-claude/models/optimizing-for-cost-and-intelligence#what-breaks-the-cache)). -Across Anthropic's measured runs, cache reads are routinely the largest single component of task cost, making caching worth more than most model-choice decisions. Anthropic priced the DeepResearch Bench II[7](https://platform.claude.com/docs/en/about-claude/models/optimizing-for-cost-and-intelligence#refs) runs with and without caching: +Anthropic priced the DeepResearch Bench II[7](https://platform.claude.com/docs/en/about-claude/models/optimizing-for-cost-and-intelligence#refs) runs with and without caching: ![Chart, DeepResearch Bench II: caching cuts Fable 5.1 from $37.94 USD to $6.89 USD per task; Sonnet 5, $3.20 USD to $1.18 USD](https://platform.claude.com/docs/images/cost-intel/caching-repriced.svg) @@ -319,7 +319,7 @@ Audit prompts against the model you run now, and again whenever you change model * Each model generation responds to prompts differently, so a prompt accumulates text written for a model you no longer use. * The usual case is over-specific instruction added to compensate for an older model: "verify twice," "be maximally thorough," a mandatory step-by-step procedure, or a hand-rolled reasoning scratchpad. -* A newer model follows such instructions to the letter, producing extra tool rounds and extra writing, so the bill goes up with no gain in accuracy. +* A newer model follows such instructions to the letter, producing extra tool rounds and extra writing that you pay for with no gain in accuracy. The audit is one command. The [Claude API skill](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/claude-api-skill) that ships with Claude Code has a `prompt-audit` command that reads a project's prompts and request code and reports what was written for a different model: @@ -424,7 +424,7 @@ The [multi-model strategies](https://platform.claude.com/docs/en/about-claude/mo ### Upgrade the model -If you are a model or two behind, the cheapest lever is the model string. In Anthropic's measurements, each newer model solved at least as many tasks as the one before it, usually for less per solved task. The chart plots recent Claude models on the SWE-bench Pro[3](https://platform.claude.com/docs/en/about-claude/models/optimizing-for-cost-and-intelligence#refs) subset, where every model ran through the same test setup, and on Terminal-Bench 3[20](https://platform.claude.com/docs/en/about-claude/models/optimizing-for-cost-and-intelligence#refs); the table lists what each upgrade changed: +If you are a model or two behind, the cheapest lever is the model string. In Anthropic's measurements, each newer model solved at least as many tasks as the one before it, usually for less per solved task. The chart plots recent Claude models on two benchmarks in which an agent works alone on one written task and tests check the result: the SWE-bench Pro[3](https://platform.claude.com/docs/en/about-claude/models/optimizing-for-cost-and-intelligence#refs) subset, where every model ran through the same test setup, and Terminal-Bench 3[20](https://platform.claude.com/docs/en/about-claude/models/optimizing-for-cost-and-intelligence#refs). The table lists what each upgrade changed: ![Charts: on SWE-bench Pro, Opus 5.5 and Sonnet 5.5 cut cost per solved task most; on Terminal-Bench 3, Opus drops to $28 USD](https://platform.claude.com/docs/images/cost-intel/upgrade-ladder-sonnet-5-5.svg) @@ -444,6 +444,7 @@ If you are a model or two behind, the cheapest lever is the model string. In Ant **When it pays.** +* The size of the saving depends on the work. From Claude Opus 5 to Claude Opus 5.5, it is 78% per solved task on the SWE-bench Pro subset and 40% on typical workloads ([Introducing Claude Opus 5.5](https://www.anthropic.com/news/claude-opus-5-5)). From Claude Sonnet 5 to Claude Sonnet 5.5, it is 87% on the same subset and up to 30% for most work ([Introducing Claude Sonnet 5.5](https://www.anthropic.com/news/claude-sonnet-5-5)). * Where older models already solve most tasks, the cost of each attempt decides the saving: on the SWE-bench Pro subset, Claude Opus 5.5 scores about the same as Claude Opus 5 for 78% less per solved task. * Where older models mostly fail, the pass rate decides the saving: on Terminal-Bench 3[20](https://platform.claude.com/docs/en/about-claude/models/optimizing-for-cost-and-intelligence#refs), the upgrade from Claude Opus 4.8 to Claude Opus 5 raises tasks solved from 15% to 41% and costs 56% less per solved task. * Measure the upgrade on your own workload before assuming it saves. The saving is not guaranteed: on DeepResearch Bench II[7](https://platform.claude.com/docs/en/about-claude/models/optimizing-for-cost-and-intelligence#refs), Claude Fable 5.1 costs more per task than Claude Fable 5 because the new model does more work per task there, although the input and output prices are the same and the cache read is 4x cheaper. @@ -861,7 +862,7 @@ The following table lists the levers in the order to try them. The figures are f | Data files through code execution | 92% on a data task of 25 questions, with prompt caching off | A gain: 25 of 25 correct instead of 7 | Faster | [Trim input and context tokens](https://platform.claude.com/docs/en/about-claude/models/optimizing-for-cost-and-intelligence#trim-input-and-context-tokens) | | Batch API | 50% | None | Results within 24 hours | [Batch work that can wait](https://platform.claude.com/docs/en/about-claude/models/optimizing-for-cost-and-intelligence#batch-work-that-can-wait) | | Prompt audit against the current model | 14% on both model upgrades tested | None; a gain on one | Faster (fewer tool rounds) | [Audit prompts against the current model](https://platform.claude.com/docs/en/about-claude/models/optimizing-for-cost-and-intelligence#audit-prompts-against-the-current-model) | -| Upgrade the model | Usually less per solved task: up to 87% less on a coding benchmark | None; a gain on most | Neutral | [Upgrade the model](https://platform.claude.com/docs/en/about-claude/models/optimizing-for-cost-and-intelligence#upgrade-the-model) | +| Upgrade the model | Usually less: up to 40% less on typical workloads, and up to 87% less per solved task on a coding benchmark | None; a gain on most | Neutral | [Upgrade the model](https://platform.claude.com/docs/en/about-claude/models/optimizing-for-cost-and-intelligence#upgrade-the-model) | | Lower effort | On long coding tasks, `medium` cost about 30% to 52% less than `high`, and `low` about two thirds less | Up to 15 points lower, depending on the task; none on one research agent | Faster | [Tune effort](https://platform.claude.com/docs/en/about-claude/models/optimizing-for-cost-and-intelligence#tune-effort) | | Re-run failures | About 40% less than running everything at `high`, at the same pass rate or slightly better | None | A second attempt on the tasks that fail | [Re-run failures at higher effort](https://platform.claude.com/docs/en/about-claude/models/optimizing-for-cost-and-intelligence#re-run-failures-at-higher-effort) | | Ask for shorter answers | About 13% less, from 39% fewer output tokens | None | Faster | [Set budgets and output caps](https://platform.claude.com/docs/en/about-claude/models/optimizing-for-cost-and-intelligence#set-budgets-and-output-caps) | diff --git a/content/en/about-claude/pricing.md b/content/en/about-claude/pricing.md index 40b8243d6f..c961197087 100644 --- a/content/en/about-claude/pricing.md +++ b/content/en/about-claude/pricing.md @@ -84,16 +84,16 @@ Claude models are available on [Amazon Bedrock](https://platform.claude.com/docs [Claude Platform on AWS](https://platform.claude.com/docs/en/build-with-claude/claude-platform-on-aws) bills through AWS Marketplace using Claude Consumption Units (CCUs). Anthropic rates your token usage in USD at standard per-model, per-feature rates, applies any negotiated discount, converts the result to CCUs at $0.01 USD per CCU, and reports the CCU quantity to AWS Marketplace hourly. Your AWS bill shows a single CCU line item. -| Concept | Details | -| ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **Billing unit** | Claude Consumption Unit (CCU) | -| **CCU price** | $0.01 per CCU (fixed; discounts apply at token-to-CCU conversion, not to the CCU price) | -| **Conversion** | Token usage rated in USD at standard per-model, per-feature rates (same as [Claude API pricing](https://platform.claude.com/docs/en/about-claude/pricing#model-pricing)), then converted to CCUs at $0.01 per CCU | -| **Billing cadence** | Hourly metering to AWS Marketplace; monthly invoices | -| **Payment model** | Arrears only (postpaid); no prepaid credits | -| **Discounts** | Applied as fewer CCUs metered | -| **Tax** | Pre-tax metering; AWS Marketplace handles tax | -| **Cost visibility** | Real-time breakdown in the Claude Console (access through the AWS Console); AWS Cost Explorer shows aggregated CCU | +| Concept | Details | +| ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **Billing unit** | Claude Consumption Unit (CCU) | +| **CCU price** | $0.01 USD per CCU (fixed; discounts apply at token-to-CCU conversion, not to the CCU price) | +| **Conversion** | Token usage rated in USD at standard per-model, per-feature rates (same as [Claude API pricing](https://platform.claude.com/docs/en/about-claude/pricing#model-pricing)), then converted to CCUs at $0.01 USD per CCU | +| **Billing cadence** | Hourly metering to AWS Marketplace; monthly invoices | +| **Payment model** | Arrears only (postpaid); no prepaid credits | +| **Discounts** | Applied as fewer CCUs metered | +| **Tax** | Pre-tax metering; AWS Marketplace handles tax | +| **Cost visibility** | Real-time breakdown in the Claude Console (access through the AWS Console); AWS Cost Explorer shows aggregated CCU | **CCU:** Claude Consumption Unit. A CCU is a unit of measure used solely for Marketplace Platform invoicing. If Customer accesses the Services through certain Marketplace Platforms (e.g., Claude Platform on AWS), usage will be invoiced in Claude Consumption Units ("CCU") rather than per MTok. One hundred (100) CCU represents $1.00 USD of fees owed for the Services, calculated at the applicable prices on [claude.com/pricing#api](https://claude.com/pricing#api), after application of any discounts. @@ -113,16 +113,16 @@ When you sign up on the AWS Console **Claude Platform on AWS** service page, the [Claude in Microsoft Foundry](https://platform.claude.com/docs/en/build-with-claude/claude-in-microsoft-foundry) bills through the Azure Marketplace using Claude Consumption Units (CCUs). Anthropic rates your token usage in USD at standard per-model, per-feature rates, applies any negotiated discount, converts the result to CCUs at $0.01 USD per CCU, and reports the CCU quantity to the Azure Marketplace hourly. Your Azure bill shows a single CCU line item. -| Concept | Details | -| ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **Billing unit** | Claude Consumption Unit (CCU) | -| **CCU price** | $0.01 per CCU (fixed; discounts apply at token-to-CCU conversion, not to the CCU price) | -| **Conversion** | Token usage rated in USD at standard per-model, per-feature rates (same as [Claude API pricing](https://platform.claude.com/docs/en/about-claude/pricing#model-pricing)), then converted to CCUs at $0.01 per CCU | -| **Billing cadence** | Hourly metering to the Azure Marketplace; monthly invoices | -| **Payment model** | Arrears only (postpaid); no prepaid credits | -| **Discounts** | Applied as fewer CCUs metered | -| **Tax** | Pre-tax metering; Azure Marketplace handles tax | -| **Cost visibility** | Azure Cost Management shows aggregated CCU | +| Concept | Details | +| ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **Billing unit** | Claude Consumption Unit (CCU) | +| **CCU price** | $0.01 USD per CCU (fixed; discounts apply at token-to-CCU conversion, not to the CCU price) | +| **Conversion** | Token usage rated in USD at standard per-model, per-feature rates (same as [Claude API pricing](https://platform.claude.com/docs/en/about-claude/pricing#model-pricing)), then converted to CCUs at $0.01 USD per CCU | +| **Billing cadence** | Hourly metering to the Azure Marketplace; monthly invoices | +| **Payment model** | Arrears only (postpaid); no prepaid credits | +| **Discounts** | Applied as fewer CCUs metered | +| **Tax** | Pre-tax metering; Azure Marketplace handles tax | +| **Cost visibility** | Azure Cost Management shows aggregated CCU | **CCU:** Claude Consumption Unit. A CCU is a unit of measure used solely for Marketplace Platform invoicing. If Customer accesses the Services through certain Marketplace Platforms (e.g., Claude Platform on AWS, Claude in Microsoft Foundry), usage will be invoiced in Claude Consumption Units ("CCU") rather than per MTok. One hundred (100) CCU represents $1.00 USD of fees owed for the Services, calculated at the applicable prices on [claude.com/pricing#api](https://claude.com/pricing#api), after application of any discounts. @@ -300,7 +300,7 @@ When used without these tools, code execution is billed by execution time, track Code execution usage is tracked in the response: -```json +```text wrap { "usage": { "input_tokens": 105, @@ -329,7 +329,7 @@ See [tool use pricing](https://platform.claude.com/docs/en/about-claude/pricing# Web search usage is charged in addition to token usage: -```json +```text wrap { "usage": { "input_tokens": 105, @@ -343,7 +343,7 @@ Web search usage is charged in addition to token usage: } ``` -Web search is available on the Claude API for **$10 USD per 1,000 searches**, plus standard token costs for search-generated content. Web search results retrieved throughout a conversation are counted as input tokens, in search iterations executed during a single turn and in subsequent conversation turns. +Web search is available on the Claude API for **$10 USD per 1,000 searches**, plus standard token costs for search-generated content. Web search results retrieved throughout a conversation are counted as input tokens, in search iterations run during a single turn and in subsequent conversation turns. Each web search counts as one use, regardless of the number of results returned. If an error occurs during web search, the web search will not be billed. @@ -351,7 +351,7 @@ Each web search counts as one use, regardless of the number of results returned. Web fetch usage has **no additional charges** beyond standard token costs: -```json +```text wrap { "usage": { "input_tokens": 25039, @@ -416,7 +416,7 @@ Browser use follows the standard [tool use pricing](https://platform.claude.com/ ### Tokens -All tokens consumed by a Claude Managed Agents session are billed at the rates shown in [Model pricing](https://platform.claude.com/docs/en/about-claude/pricing#model-pricing). [Prompt caching](https://platform.claude.com/docs/en/about-claude/pricing#prompt-caching) multipliers apply identically. Web search triggered inside a session incurs the standard $10 USD per 1,000 searches. On [Claude Platform on AWS](https://platform.claude.com/docs/en/about-claude/pricing#claude-platform-on-aws-pricing), session token and runtime charges convert to Claude Consumption Units at the standard rate. [Fast mode](https://platform.claude.com/docs/en/about-claude/pricing#fast-mode-pricing) premium pricing applies when an agent's `model.speed` is set to `"fast"`. +All tokens consumed by a Claude Managed Agents session are billed at the rates shown in [Model pricing](https://platform.claude.com/docs/en/about-claude/pricing#model-pricing). [Prompt caching multipliers](https://platform.claude.com/docs/en/about-claude/pricing#prompt-caching) apply identically. Web search triggered inside a session incurs the standard $10 USD per 1,000 searches. On Claude Platform on AWS, session token and runtime charges convert to Claude Consumption Units at the standard rate (see [Claude Platform on AWS pricing](https://platform.claude.com/docs/en/about-claude/pricing#claude-platform-on-aws-pricing)). [Fast mode premium pricing](https://platform.claude.com/docs/en/about-claude/pricing#fast-mode-pricing) applies when an agent's `model.speed` is set to `"fast"`. The [data residency multiplier](https://platform.claude.com/docs/en/about-claude/pricing#data-residency-pricing) also applies: when an agent's `model.inference_geo` is pinned to `"us"`, tokens consumed by sessions running that agent are billed at 1.1x the standard rates, the same multiplier that applies to US-only inference on the Messages API. @@ -429,9 +429,9 @@ The following Messages API modifiers do **not** apply to Claude Managed Agents s ### Session runtime -| SKU | Rate | Metering | -| --------------- | ---------------------- | ------------------------- | -| Session runtime | $0.08 per session-hour | `running` status duration | +| SKU | Rate | Metering | +| --------------- | -------------------------- | ------------------------- | +| Session runtime | $0.08 USD per session-hour | `running` status duration | Runtime is measured to the millisecond and accrues only while the session's status is `running`. Time spent `idle` (waiting for your next message or a tool confirmation), `rescheduling`, or `terminated` does not count toward runtime. @@ -443,22 +443,22 @@ Runtime is measured to the millisecond and accrues only while the session's stat A 1-hour coding session using Claude Opus 5.5 that consumes 50,000 input tokens and 15,000 output tokens: -| Line item | Calculation | Cost | -| --------------- | ------------------------ | --------- | -| Input tokens | 50,000 × $4 / 1,000,000 | $0.20 | -| Output tokens | 15,000 × $20 / 1,000,000 | $0.30 | -| Session runtime | 1.0 hour × $0.08 | $0.08 | -| **Total** | | **$0.58** | +| Line item | Calculation | Cost | +| --------------- | ------------------------ | ------------- | +| Input tokens | 50,000 × $4 / 1,000,000 | $0.20 USD | +| Output tokens | 15,000 × $20 / 1,000,000 | $0.30 USD | +| Session runtime | 1.0 hour × $0.08 | $0.08 USD | +| **Total** | | **$0.58 USD** | If prompt caching is active and 40,000 of the input tokens are cache reads: -| Line item | Calculation | Cost | -| --------------------- | ------------------------------ | ---------- | -| Uncached input tokens | 10,000 × $4 / 1,000,000 | $0.04 | -| Cache read tokens | 40,000 × $4 × 0.05 / 1,000,000 | $0.008 | -| Output tokens | 15,000 × $20 / 1,000,000 | $0.30 | -| Session runtime | 1.0 hour × $0.08 | $0.08 | -| **Total** | | **$0.428** | +| Line item | Calculation | Cost | +| --------------------- | ------------------------------ | -------------- | +| Uncached input tokens | 10,000 × $4 / 1,000,000 | $0.04 USD | +| Cache read tokens | 40,000 × $4 × 0.05 / 1,000,000 | $0.008 USD | +| Output tokens | 15,000 × $20 / 1,000,000 | $0.30 USD | +| Session runtime | 1.0 hour × $0.08 | $0.08 USD | +| **Total** | | **$0.428 USD** | ## Additional pricing considerations @@ -491,9 +491,9 @@ For limits beyond the Scale tier or custom pricing arrangements, [contact the sa Volume discounts might be available for high-volume users. These are negotiated on a case-by-case basis. -* Standard usage tiers use the pricing shown in [Model pricing](https://platform.claude.com/docs/en/about-claude/pricing#model-pricing) -* Enterprise customers can [contact sales](mailto:sales@anthropic.com) for custom pricing -* Academic and research discounts might be available +* Standard usage tiers use the pricing shown in [Model pricing](https://platform.claude.com/docs/en/about-claude/pricing#model-pricing). +* Enterprise customers can [contact sales](mailto:sales@anthropic.com) for custom pricing. +* Academic and research discounts might be available. ### Enterprise pricing @@ -508,10 +508,10 @@ Contact the sales team at [sales@anthropic.com](mailto:sales@anthropic.com) or t ## Billing and payment -* Billing is based on actual monthly usage -* All payments are in USD -* Credit card and invoicing options available -* Usage tracking available in the Claude Console at [platform.claude.com](https://platform.claude.com/) +* Billing is based on actual monthly usage. +* All payments are in USD. +* Credit card and invoicing options are available. +* Usage tracking is available in the Claude Console at [platform.claude.com](https://platform.claude.com/). ## Frequently asked questions diff --git a/content/en/about-claude/use-case-guides/content-moderation.md b/content/en/about-claude/use-case-guides/content-moderation.md index d7110e9606..f24a90f16a 100644 --- a/content/en/about-claude/use-case-guides/content-moderation.md +++ b/content/en/about-claude/use-case-guides/content-moderation.md @@ -37,7 +37,7 @@ Here are some key indicators that you should use an LLM such as Claude instead o Once a traditional ML approach has been established, changing it is a laborious and data-intensive undertaking. On the other hand, as your product or customer needs evolve, Claude can easily adapt to changes or additions to moderation policies without extensive relabeling of training data. - + If you want to provide users or regulators with clear explanations behind moderation decisions, Claude can generate detailed and coherent justifications. This transparency is important for building trust and ensuring accountability in content moderation practices. @@ -45,7 +45,7 @@ Here are some key indicators that you should use an LLM such as Claude instead o Traditional ML approaches typically require separate models or extensive translation processes for each supported language. Human moderation requires hiring a workforce fluent in each supported language. Claude’s multilingual capabilities allow it to classify content in various languages without the need for separate models or extensive translation processes, streamlining moderation for global customer bases. - + Claude's multimodal capabilities allow it to analyze and interpret content across both text and images. This makes it a versatile tool for comprehensive content moderation in environments where different media types need to be evaluated together. @@ -836,7 +836,7 @@ To use Claude for content moderation, Claude must have information about the mod # Send the request to Claude for content moderation response = CLIENT.messages.create( - model: "claude-haiku-4-5-20251001", # Using the Haiku model for lower costs + model: Anthropic::Model::CLAUDE_HAIKU_4_5_20251001, # Using the Haiku model for lower costs max_tokens: 200, messages: [{role: :user, content: assessment_prompt}] ) @@ -879,7 +879,7 @@ The model's assessment is then parsed to determine if there is a violation. If t Content moderation is a classification problem. Thus, you can use the same techniques outlined in the Claude Cookbook's [classification recipe](https://platform.claude.com/cookbook/capabilities-classification-guide) to determine the accuracy of your content moderation system. -One additional consideration is that instead of treating content moderation as a binary classification problem, you can instead create multiple categories to represent various risk levels. Creating multiple risk levels allows you to adjust the aggressiveness of your moderation. For example, you might want to automatically block user queries that are deemed high risk, whereas users with many medium risk queries are flagged for human review. +One additional consideration is that instead of treating content moderation as a binary classification problem, you can create multiple categories to represent various risk levels. Creating multiple risk levels allows you to adjust the aggressiveness of your moderation. For example, you might want to automatically block user queries that are deemed high risk, whereas users with many medium risk queries are flagged for human review. ```python Python @@ -1395,7 +1395,7 @@ One additional consideration is that instead of treating content moderation as a # Send the request to Claude for risk assessment response = CLIENT.messages.create( - model: "claude-haiku-4-5-20251001", # Using the Haiku model for lower costs + model: Anthropic::Model::CLAUDE_HAIKU_4_5_20251001, # Using the Haiku model for lower costs max_tokens: 200, messages: [{role: :user, content: assessment_prompt}] ) @@ -2149,7 +2149,7 @@ In addition to listing the unsafe categories in the prompt, further improvements # Send the request to Claude for content moderation response = CLIENT.messages.create( - model: "claude-haiku-4-5-20251001", # Using the Haiku model for lower costs + model: Anthropic::Model::CLAUDE_HAIKU_4_5_20251001, # Using the Haiku model for lower costs max_tokens: 200, messages: [{role: :user, content: assessment_prompt}] ) @@ -2702,7 +2702,7 @@ To reduce costs in situations where real-time moderation isn't necessary, consid # Send the request to Claude for content moderation response = CLIENT.messages.create( - model: "claude-haiku-4-5-20251001", # Using the Haiku model for lower costs + model: Anthropic::Model::CLAUDE_HAIKU_4_5_20251001, # Using the Haiku model for lower costs max_tokens: 2048, # Increased max token count to handle batches messages: [{role: :user, content: assessment_prompt}] ) diff --git a/content/en/about-claude/use-case-guides/customer-support-chat.md b/content/en/about-claude/use-case-guides/customer-support-chat.md index e5191cf991..7c3cf62be7 100644 --- a/content/en/about-claude/use-case-guides/customer-support-chat.md +++ b/content/en/about-claude/use-case-guides/customer-support-chat.md @@ -187,7 +187,7 @@ Here are criteria and benchmarks that can be used to evaluate the business impac The choice of model depends on the trade-offs among cost, accuracy, and response time. -For customer support chat, Claude Opus 5.5 is well suited to balance intelligence, latency, and cost, including the most complex support scenarios that require deep reasoning across long, multistep conversations. However, for instances where you have conversation flow with multiple prompts including RAG, tool use, or long-context prompts, Claude Haiku 5.5 might be more suitable to optimize for latency. [Effort](https://platform.claude.com/docs/en/build-with-claude/effort) is its main control for speed: `low` is the fastest level, suited to chat and short tool tasks. +For customer support chat, Claude Opus 5.5 is well suited to balance intelligence, latency, and cost, including the most complex support scenarios that require deep reasoning across long, multistep conversations. However, for instances where you have a conversation flow with multiple prompts including RAG, tool use, or long-context prompts, Claude Haiku 5.5 might be more suitable to optimize for latency. [Effort](https://platform.claude.com/docs/en/build-with-claude/effort) is its main control for speed: `low` is the fastest level, suited to chat and short tool tasks. ### Build a strong prompt @@ -349,7 +349,7 @@ Once you provide this information, I'll use our quoting tool to generate a perso """ ``` -You will also want to include any important instructions outlining dos and don'ts for how Claude should interact with the customer. This might draw from brand guardrails or support policies. +Also include any important instructions outlining dos and don'ts for how Claude should interact with the customer. This might draw from brand guardrails or support policies. ```python ADDITIONAL_GUARDRAILS = """Please adhere to the following guardrails: @@ -440,7 +440,7 @@ The class should have two main methods: one that calls the API to generate a mes ```python Python - # In your chatbot.py, import these from the config.py you wrote above: + # In your chatbot.py, import these from the config.py you wrote earlier: # from config import IDENTITY, TOOLS, MODEL, get_quote from anthropic import Anthropic from dotenv import load_dotenv @@ -1075,7 +1075,7 @@ The class should have two main methods: one that calls the API to generate a mes ### Build your user interface -Test deploying this code with Streamlit using a main method. This `main()` function sets up a Streamlit-based chat interface. Streamlit is a Python framework, so this part of the walkthrough is shown in Python only; the ChatBot class shown earlier is the piece you can port to any language. +Test deploying this code with Streamlit using a main function. This `main()` function sets up a Streamlit-based chat interface. Streamlit is a Python framework, so this part of the walkthrough is shown in Python only; the ChatBot class shown earlier is the piece you can port to any language. Do this in a file called `app.py`: @@ -1152,7 +1152,7 @@ When deploying a chatbot, especially in customer service scenarios, it's importa * [Reduce hallucination](https://platform.claude.com/docs/en/test-and-evaluate/strengthen-guardrails/reduce-hallucinations): Implement fact-checking mechanisms and [citations](https://platform.claude.com/cookbook/misc-using-citations) to ground responses in provided information. * Cross-check information: Verify that the agent's responses align with your company's policies and known facts. * Avoid contractual commitments: Ensure the agent doesn't make promises or enter into agreements it's not authorized to make. -* [Mitigate jailbreaks](https://platform.claude.com/docs/en/test-and-evaluate/strengthen-guardrails/mitigate-jailbreaks): Use methods such as harmlessness screens and input validation to prevent users from exploiting model vulnerabilities, aiming to generate inappropriate content. +* [Mitigate jailbreaks](https://platform.claude.com/docs/en/test-and-evaluate/strengthen-guardrails/mitigate-jailbreaks): Use methods such as harmlessness screens and input validation to prevent users from exploiting model vulnerabilities to generate inappropriate content. * Avoid mentioning competitors: Implement a competitor mention filter to maintain brand focus and not mention any competitor's products or services. * [Increase output consistency](https://platform.claude.com/docs/en/test-and-evaluate/strengthen-guardrails/increase-consistency): Prevent Claude from changing style or going out of character, even during long, complex interactions. * Remove personally identifiable information (PII): Unless explicitly required and authorized, strip out any PII from responses. diff --git a/content/en/about-claude/use-case-guides/legal-summarization.md b/content/en/about-claude/use-case-guides/legal-summarization.md index 2af708732f..5bb0655066 100644 --- a/content/en/about-claude/use-case-guides/legal-summarization.md +++ b/content/en/about-claude/use-case-guides/legal-summarization.md @@ -17,7 +17,7 @@ Here are some key indicators that you should employ an LLM such as Claude to sum Large-scale document review can be time-consuming and expensive when done manually. Claude can process and summarize vast amounts of legal documents rapidly, significantly reducing the time and cost associated with document review. This capability is particularly valuable for tasks such as due diligence, contract analysis, or litigation discovery, where efficiency is crucial. - + Claude can efficiently extract and categorize important metadata from legal documents, such as parties involved, dates, contract terms, or specific clauses. This automated extraction can help organize information, making it easier to search, analyze, and manage large document sets. It's especially useful for contract management, compliance checks, or creating searchable databases of legal information. diff --git a/content/en/about-claude/use-case-guides/ticket-routing.md b/content/en/about-claude/use-case-guides/ticket-routing.md index 8e6aa2d3f8..f45a567c64 100644 --- a/content/en/about-claude/use-case-guides/ticket-routing.md +++ b/content/en/about-claude/use-case-guides/ticket-routing.md @@ -28,7 +28,7 @@ Here are some key indicators that you should use an LLM such as Claude instead o - Traditional ML approaches often rely on bag-of-words models or simple pattern matching. Claude excels at understanding and applying underlying rules when classes are defined by conditions rather than examples. + Traditional ML approaches often rely on bag-of-words models or simple pattern matching. Claude excels at applying underlying rules when classes are defined by conditions rather than examples. @@ -203,7 +203,7 @@ Here are some common success criteria that might be useful regardless of whether - This measures the percentage of tickets resolved during the first interaction with the customer. Higher rates indicate efficient routing and well-prepared support teams. Industry benchmarks typically range from 70–75 percent, with top performers achieving rates of 80 percent or higher. + This measures the percentage of tickets resolved during the first interaction with the customer. Higher rates indicate efficient routing and well-prepared support teams. Industry benchmarks typically range from 70 to 75 percent, with top performers achieving rates of 80 percent or higher. @@ -689,7 +689,7 @@ Having Claude split its response into separate XML tag sections lets you use reg It’s hard to know how well your prompt works without deploying it in a test production setting and [running evaluations](https://platform.claude.com/docs/en/test-and-evaluate/develop-tests). -Build the deployment structure. Start by defining the function signature for wrapping the call to Claude. Extend the function you started writing earlier, which takes `ticket_contents` (typescript, csharp, go, java: `ticketContents`; php: `$ticketContents`) as input, so that it now returns the reasoning and the intent as output. If you have an existing automation using traditional ML, you'll want to follow that method signature instead. +Build the deployment structure. Start by defining the function signature for wrapping the call to Claude. Extend the function you started writing earlier, which takes `ticket_contents` (typescript, csharp, go, java: `ticketContents`; php: `$ticketContents`) as input, so that it now returns the reasoning and the intent as output. If you have an existing automation using traditional ML, you'll want to follow that signature instead. @@ -1033,7 +1033,7 @@ The example evaluation for this guide measures Claude’s performance along two * Accuracy * Cost per classification -You may need to assess Claude on other axes depending on which factors are important to you. +You might need to assess Claude on other axes depending on which factors are important to you. To assess this, first modify the script so that it compares the predicted intent with the actual intent. Then have it return the API call's token usage, from which you can calculate cost. @@ -1478,7 +1478,7 @@ Here are some scenarios where Claude might misclassify tickets (there might be o When customers express dissatisfaction, Claude might prioritize addressing the emotion over solving the underlying problem. - * **Solution:** Provide Claude with directions on when to prioritize customer sentiment or not. It can be something as simple as “Ignore all customer emotions. Focus only on analyzing the intent of the customer’s request and what information the customer might be asking for.” + * **Solution:** Provide Claude with directions on when to prioritize customer sentiment or not. For example: “Ignore all customer emotions. Focus only on analyzing the intent of the customer’s request and what information the customer might be asking for.” diff --git a/content/en/agents-and-tools/agent-skills/best-practices.md b/content/en/agents-and-tools/agent-skills/best-practices.md index 79d5844c64..9eeb8fa8a1 100644 --- a/content/en/agents-and-tools/agent-skills/best-practices.md +++ b/content/en/agents-and-tools/agent-skills/best-practices.md @@ -254,9 +254,9 @@ description: Does stuff with files **Practical guidance:** -* Keep `SKILL.md` body under 500 lines for optimal performance -* Split content into separate files when approaching this limit -* Use the following patterns to organize instructions, code, and resources effectively +* Keep the `SKILL.md` body under 500 lines for optimal performance. +* Split content into separate files when approaching this limit. +* Use the following patterns to organize instructions, code, and resources effectively. #### Visual overview: From simple to complex @@ -812,9 +812,9 @@ The same hierarchical pattern continues when improving Skills. You alternate amo * **Testing with Claude B** (the agent using the Skill to perform real work) * **Observing Claude B's behavior** and bringing insights back to Claude A -1. **Use the Skill in real workflows:** Give Claude B (with the Skill loaded) actual tasks, not test scenarios +1. **Use the Skill in real workflows:** Give Claude B (with the Skill loaded) actual tasks, not test scenarios. -2. **Observe Claude B's behavior:** Note where it struggles, succeeds, or makes unexpected choices +2. **Observe Claude B's behavior:** Note where it struggles, succeeds, or makes unexpected choices. **Example observation:** "When I asked Claude B for a regional sales report, it wrote the query but forgot to filter out test accounts, even though the Skill mentions this rule." @@ -822,7 +822,7 @@ The same hierarchical pattern continues when improving Skills. You alternate amo 4. **Review Claude A's recommendations:** Claude A might recommend reorganizing to make rules more prominent, using stronger language such as "MUST filter" instead of "always filter," or restructuring the workflow section. -5. **Apply and test changes:** Update the Skill with Claude A's refinements, then test again with Claude B on similar requests +5. **Apply and test changes:** Update the Skill with Claude A's refinements, then test again with Claude B on similar requests. 6. **Repeat based on usage:** Continue this observe-refine-test cycle as you encounter new scenarios. Each iteration improves the Skill based on real agent behavior, not assumptions. @@ -918,7 +918,7 @@ Configuration parameters should also be justified and documented to avoid "voodo # Longer timeout accounts for slow connections REQUEST_TIMEOUT = 30 -# Three retries balances reliability vs speed +# Three retries balances reliability versus speed # Most intermittent failures resolve by the second retry MAX_RETRIES = 3 ``` @@ -1137,7 +1137,7 @@ See [Skill structure](https://platform.claude.com/docs/en/agents-and-tools/agent ### Token budgets -Keep `SKILL.md` body under 500 lines for optimal performance. If your content exceeds this, split it into separate files using the progressive disclosure patterns described earlier. For architectural details, see [How Skills work](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/overview#how-skills-work). +Keep the `SKILL.md` body under 500 lines for optimal performance. If your content exceeds this, split it into separate files using the progressive disclosure patterns described earlier. For architectural details, see [How Skills work](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/overview#how-skills-work). ## Checklist for effective Skills diff --git a/content/en/agents-and-tools/agent-skills/enterprise.md b/content/en/agents-and-tools/agent-skills/enterprise.md index 9fd257a8d6..5414ebf3df 100644 --- a/content/en/agents-and-tools/agent-skills/enterprise.md +++ b/content/en/agents-and-tools/agent-skills/enterprise.md @@ -25,7 +25,7 @@ Evaluate each Skill against these risk indicators before approving deployment: | Network access patterns | URLs, API endpoints, `fetch`, `curl`, or `requests` calls | High: potential data exfiltration vector | | Hardcoded credentials | API keys, tokens, or passwords in Skill files or scripts | High: secrets exposed in Git history and context window | | Filesystem access scope | Paths outside the Skill directory, broad glob patterns, path traversal (`../`) | Medium: might access unintended data | -| Tool invocations | Instructions directing Claude to use bash, file operations, or other tools | Medium: review what operations are performed | +| Tool calls | Instructions directing Claude to use bash, file operations, or other tools | Medium: review what operations are performed | ### Review checklist @@ -46,7 +46,7 @@ Before deploying any Skill from a third party or internal contributor, complete ### Skill content scanning -Claude Enterprise organizations can turn on automated security scanning for custom Skills in claude.ai and Claude Cowork. After you turn on **Skill and plugin security scanning** at [claude.ai > Organization settings > Skills](https://claude.ai/admin-settings/skills), Skills that members then upload or edit in claude.ai or Cowork are scanned for signs of malicious behavior, such as hidden code execution, sending your data to an outside service, or instructions that tamper with Claude's safeguards. A Skill that fails the scan, or whose scan hasn't completed, is blocked from use. A Skill that passes with a warning stays usable behind a caution notice. If scanning is available to your organization, turn it on. It complements, but doesn't replace, the [review checklist](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/enterprise#review-checklist). +Claude Enterprise organizations can turn on automated security scanning for custom Skills in claude.ai and Claude Cowork. After you turn on **Skill and plugin security scanning** at [claude.ai > Organization settings > Skills](https://claude.ai/admin-settings/skills), Skills that members then upload or edit in claude.ai or Cowork are scanned for signs of malicious behavior, such as hidden code execution, sending your data to an outside service, or instructions that tamper with Claude's safeguards. A Skill that fails the scan, or whose scan hasn't completed, is blocked from use. An administrator can allow some Skills that failed the scan. A Skill that passes with a warning stays usable behind a caution notice. If scanning is available to your organization, turn it on. It complements, but doesn't replace, the [review checklist](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/enterprise#review-checklist). Scanning doesn't cover the Claude API. Skills you upload through the Skills API (`/v1/skills`), including from the Claude Console, aren't scanned, so for API deployments, rely on the review checklist and [version pinning](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/enterprise#versioning-strategy). Scanning also doesn't apply to Skills that were already in your organization when you turned it on, or to organizations with certain data handling configurations, such as customer-managed encryption keys (CMEK), zero data retention (ZDR), or HIPAA readiness. For setup steps, exclusions, and result types, see [Get started with skill and plugin scanning](https://support.claude.com/en/articles/15927065-get-started-with-skill-and-plugin-scanning) in the Claude Help Center. diff --git a/content/en/agents-and-tools/agent-skills/overview.md b/content/en/agents-and-tools/agent-skills/overview.md index 0d78b13b7a..87c593d2e0 100644 --- a/content/en/agents-and-tools/agent-skills/overview.md +++ b/content/en/agents-and-tools/agent-skills/overview.md @@ -114,7 +114,7 @@ Progressive disclosure ensures only relevant content occupies the context window Skills run in a code execution environment where Claude has filesystem access, bash commands, and code execution capabilities. Skills exist as directories on a virtual machine, and Claude interacts with them using the same bash commands you'd use to navigate files on your computer. - ![Agent Skills architecture - showing how Skills integrate with the agent's configuration and virtual machine](https://platform.claude.com/docs/images/agent-skills-architecture.svg) + ![Agent Skills architecture, showing how Skills integrate with the agent's configuration and virtual machine](https://platform.claude.com/docs/images/agent-skills-architecture.svg) **How Claude accesses Skill content:** diff --git a/content/en/agents-and-tools/agent-skills/quickstart.md b/content/en/agents-and-tools/agent-skills/quickstart.md index d2c376b2cb..4ee2ea029b 100644 --- a/content/en/agents-and-tools/agent-skills/quickstart.md +++ b/content/en/agents-and-tools/agent-skills/quickstart.md @@ -394,7 +394,9 @@ The presentation was created in the code execution container and saved as a file if [[ -n "$file_id" ]]; then # Download the file and save it - ant files download --file-id "$file_id" --output "${TMPDIR:-/tmp}/renewable_energy.pptx" + ant files download \ + --file-id "$file_id" \ + --output "${TMPDIR:-/tmp}/renewable_energy.pptx" fi ``` diff --git a/content/en/agents-and-tools/mcp-connector.md b/content/en/agents-and-tools/mcp-connector.md index f867b2e9ef..312eb839e7 100644 --- a/content/en/agents-and-tools/mcp-connector.md +++ b/content/en/agents-and-tools/mcp-connector.md @@ -498,7 +498,7 @@ When Claude uses MCP tools, the response includes two new content block types: ### MCP tool use block -```json +```text wrap { "type": "mcp_tool_use", "id": "mcptoolu_014Q35RayjACSWkSj4X2yov1", @@ -510,7 +510,7 @@ When Claude uses MCP tools, the response includes two new content block types: ### MCP tool result block -```json +```text wrap { "type": "mcp_tool_result", "tool_use_id": "mcptoolu_014Q35RayjACSWkSj4X2yov1", @@ -530,7 +530,7 @@ An MCP server can change its tools at any time. The `mcp-client-2026-09-15` beta When the API asks an MCP server for its tools while producing a response, the response starts with an `mcp_tool_listing` block for that server, one block for each server it asked: -```json +```text wrap { "type": "mcp_tool_listing", "mcp_server_name": "example-mcp", @@ -1276,8 +1276,8 @@ Install both the Anthropic SDK and the MCP SDK: ```kotlin - implementation("com.anthropic:anthropic-java:3.0.0") - implementation("com.anthropic:anthropic-java-mcp:3.0.0") + implementation("com.anthropic:anthropic-java:3.1.0") + implementation("com.anthropic:anthropic-java-mcp:3.1.0") ``` @@ -1286,12 +1286,12 @@ Install both the Anthropic SDK and the MCP SDK: com.anthropic anthropic-java - 3.0.0 + 3.1.0 com.anthropic anthropic-java-mcp - 3.0.0 + 3.1.0 ``` @@ -1996,7 +1996,7 @@ If you're using the deprecated `mcp-client-2025-04-04` beta header, follow this 1. **New beta header:** Change from `mcp-client-2025-04-04` to `mcp-client-2025-11-20`. 2. **Tool configuration moved:** Tool configuration now lives in the `tools` array as MCPToolset objects, not in the MCP server definition. -3. **More flexible configuration:** New pattern supports allowlisting, denylisting, and per-tool configuration. +3. **More flexible configuration:** The new pattern supports allowlisting, denylisting, and per-tool configuration. ### Migration steps diff --git a/content/en/agents-and-tools/mcp-tunnels/deploy-compose.md b/content/en/agents-and-tools/mcp-tunnels/deploy-compose.md index c5e5f9ba93..801c1e2160 100644 --- a/content/en/agents-and-tools/mcp-tunnels/deploy-compose.md +++ b/content/en/agents-and-tools/mcp-tunnels/deploy-compose.md @@ -409,8 +409,8 @@ With programmatic access, increment `--token-version` in the `setup` service com export ANTHROPIC_FEDERATION_RULE_ID=fdrl_... export ANTHROPIC_ORGANIZATION_ID=00000000-0000-0000-0000-000000000000 # export ANTHROPIC_WORKSPACE_ID=wrkspc_... # if your rule is workspace-scoped -# Re-mint ANTHROPIC_IDENTITY_TOKEN per the WIF provider guide for your -# environment (it will have expired since install). +# Re-mint ANTHROPIC_IDENTITY_TOKEN as described in the WIF provider guide for +# your environment (it will have expired since install). export ANTHROPIC_IDENTITY_TOKEN=... docker compose run --rm setup diff --git a/content/en/agents-and-tools/mcp-tunnels/quickstart.md b/content/en/agents-and-tools/mcp-tunnels/quickstart.md index bd7d570e08..b2e8cdc9c5 100644 --- a/content/en/agents-and-tools/mcp-tunnels/quickstart.md +++ b/content/en/agents-and-tools/mcp-tunnels/quickstart.md @@ -17,7 +17,7 @@ A two-container [tunnel stack](https://platform.claude.com/docs/en/agents-and-to ## What you need * [Docker and Docker Compose](https://docs.docker.com/get-docker/) on a machine with outbound internet access. -* A role in the [Claude Console](https://platform.claude.com) that can manage MCP tunnels. See the [Console guide prerequisites](https://platform.claude.com/docs/en/agents-and-tools/mcp-tunnels/console#prerequisites). +* A role in the [Claude Console](https://platform.claude.com/) that can manage MCP tunnels. See the [Console guide prerequisites](https://platform.claude.com/docs/en/agents-and-tools/mcp-tunnels/console#prerequisites). * [OpenSSL](https://openssl-library.org/source/) 1.1.1 or later. Preinstalled on macOS and most Linux distributions. On Windows, install it separately (the `openssl` binary must be on your `PATH`). diff --git a/content/en/agents-and-tools/tool-use/advisor-tool.md b/content/en/agents-and-tools/tool-use/advisor-tool.md index a81daed9f2..f0525e3067 100644 --- a/content/en/agents-and-tools/tool-use/advisor-tool.md +++ b/content/en/agents-and-tools/tool-use/advisor-tool.md @@ -292,7 +292,7 @@ The advisor itself runs without tools and without context management. Its thinki The `caching` object has the shape `{"type": "ephemeral", "ttl": "5m" | "1h"}`. Unlike `cache_control` on content blocks, this is not a breakpoint marker. It is an on/off switch. The server determines where cache boundaries go. -The advisor tool also accepts the generic properties available on any tool definition: `cache_control`, `allowed_callers`, `defer_loading`, and `strict` (covered in [structured outputs](https://platform.claude.com/docs/en/build-with-claude/structured-outputs)). See the [Tool reference](https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-reference#tool-definition-properties) for their semantics. +The advisor tool also accepts the generic properties available on any tool definition: `cache_control`, `allowed_callers`, `defer_loading`, and `strict` (covered in [structured outputs](https://platform.claude.com/docs/en/build-with-claude/structured-outputs)). See [Tool definition properties](https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-reference#tool-definition-properties) in the Tool reference for their semantics. ## Response structure @@ -300,7 +300,7 @@ The advisor tool also accepts the generic properties available on any tool defin When the advisor is called, a `server_tool_use` block is followed by an `advisor_tool_result` block in the assistant's content. The following example shows the plaintext `advisor_result` variant returned by a Claude Opus 4.8 advisor. The [Quick start](https://platform.claude.com/docs/en/agents-and-tools/tool-use/advisor-tool#quick-start) uses Claude Opus 5.5, which returns the encrypted `advisor_redacted_result` variant instead; see [Result variants](https://platform.claude.com/docs/en/agents-and-tools/tool-use/advisor-tool#result-variants) for both shapes side by side. -```json +```text { "role": "assistant", "content": [ @@ -349,7 +349,7 @@ Here is the same request sent twice, identical except for the advisor `model` in With `"model": "claude-opus-4-8"`, the advice is plaintext: -```json +```text { "type": "advisor_tool_result", "tool_use_id": "srvtoolu_abc123", @@ -362,7 +362,7 @@ With `"model": "claude-opus-4-8"`, the advice is plaintext: With `"model": "claude-opus-5-5"`, the advice is encrypted: -```json +```text { "type": "advisor_tool_result", "tool_use_id": "srvtoolu_abc123", @@ -383,7 +383,7 @@ In both cases, round-trip the content verbatim on subsequent turns. If you switc If the advisor call fails, the result carries an error: -```json +```text wrap { "type": "advisor_tool_result", "tool_use_id": "srvtoolu_abc123", @@ -1181,7 +1181,7 @@ With the default `NUDGE_TURN` of 2, the reminder typically arrives after the mod end tools = [ - { type: "advisor_20260301", name: "advisor", model: "claude-opus-5-5" } + { type: "advisor_20260301", name: "advisor", model: Anthropic::Model::CLAUDE_OPUS_5_5 } # ... your other tools ] task = "Build a concurrent worker pool in Go with graceful shutdown." @@ -1190,7 +1190,7 @@ With the default `NUDGE_TURN` of 2, the reminder typically arrives after the mod (1..MAX_TURNS).each do |turn| response = client.beta.messages.create( - model: "claude-haiku-5-5", + model: Anthropic::Model::CLAUDE_HAIKU_5_5, max_tokens: 4096, tools: tools, messages: messages, @@ -1235,7 +1235,7 @@ A `message_delta` event follows with the updated `usage.iterations` array reflec Advisor calls run as a separate sub-inference billed at the advisor model's rates. Usage is reported in the `usage.iterations[]` array: -```json +```text wrap { "usage": { "input_tokens": 1760, @@ -1555,12 +1555,12 @@ The advisor tool composes with other server-side and client-side tools. Add them The executor can search the web, call the advisor, and use your custom tools in the same turn. The advisor's plan can inform which tools the executor reaches for next. -| Feature | Interaction | -| ------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [Batch processing](https://platform.claude.com/docs/en/build-with-claude/batch-processing) | Supported. `usage.iterations` is reported per item. | -| [Token counting](https://platform.claude.com/docs/en/build-with-claude/token-counting) | Returns the executor's first-iteration input tokens only. For a rough advisor estimate, call `client.beta.messages.count_tokens()` (typescript: `client.beta.messages.countTokens()`; go, csharp: `client.Beta.Messages.CountTokens()`; java: `client.beta().messages().countTokens()`; php: `$client->beta->messages->countTokens()`; cli: `ant beta:messages count-tokens`; curl: `POST /v1/messages/count_tokens`) with `model` set to the advisor model and the same messages. | -| [Context editing](https://platform.claude.com/docs/en/build-with-claude/context-editing) | `clear_tool_uses` is not fully compatible with advisor tool blocks. With `clear_thinking`, see the earlier caching warning. | -| `pause_turn` | A dangling advisor call ends the response with `stop_reason: "pause_turn"` and a `server_tool_use` block with no result when no client `tool_use` block is awaiting your result in the same turn. The advisor runs on resumption. If the executor also called one of your tools in that turn, the response ends with `stop_reason: "tool_use"` instead, and the pending advisor call runs at the start of your next request, after you send the `tool_result` blocks. See [Resuming a paused turn](https://platform.claude.com/docs/en/agents-and-tools/tool-use/advisor-tool#resuming-a-paused-turn), [Mixing server tools and client tools in one turn](https://platform.claude.com/docs/en/agents-and-tools/tool-use/server-tools#mixing-server-tools-and-client-tools-in-one-turn), and [Server tools](https://platform.claude.com/docs/en/agents-and-tools/tool-use/server-tools#the-server-side-loop-and-pause-turn). | +| Feature | Interaction | +| ------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [Batch processing](https://platform.claude.com/docs/en/build-with-claude/batch-processing) | Supported. `usage.iterations` is reported per item. | +| [Token counting](https://platform.claude.com/docs/en/build-with-claude/token-counting) | Returns the executor's first-iteration input tokens only. For a rough advisor estimate, call `client.beta.messages.count_tokens()` (typescript: `client.beta.messages.countTokens()`; go, csharp: `client.Beta.Messages.CountTokens()`; java: `client.beta().messages().countTokens()`; php: `$client->beta->messages->countTokens()`; cli: `ant beta:messages count-tokens`; curl: `POST /v1/messages/count_tokens`) with `model` set to the advisor model and the same messages. | +| [Context editing](https://platform.claude.com/docs/en/build-with-claude/context-editing) | `clear_tool_uses` is not fully compatible with advisor tool blocks. With `clear_thinking`, see the earlier caching warning. | +| `pause_turn` | A dangling advisor call ends the response with `stop_reason: "pause_turn"` and a `server_tool_use` block with no result when no client `tool_use` block is awaiting your result in the same turn. The advisor runs on resumption. If the executor also called one of your tools in that turn, the response ends with `stop_reason: "tool_use"` instead, and the pending advisor call runs at the start of your next request, after you send the `tool_result` blocks. See [Resuming a paused turn](https://platform.claude.com/docs/en/agents-and-tools/tool-use/advisor-tool#resuming-a-paused-turn), [Mixing server tools and client tools in one turn](https://platform.claude.com/docs/en/agents-and-tools/tool-use/server-tools#mixing-server-tools-and-client-tools-in-one-turn), and [The server-side loop and pause\_turn](https://platform.claude.com/docs/en/agents-and-tools/tool-use/server-tools#the-server-side-loop-and-pause-turn). | ## Best practices @@ -1762,7 +1762,7 @@ Hard reasoning tasks elicit substantially longer advisor output than the [typica When the advisor does hit the cap, the result block carries `stop_reason: "max_tokens"` on both [result variants](https://platform.claude.com/docs/en/agents-and-tools/tool-use/advisor-tool#result-variants), whichever advisor model you use. Use `stop_reason` to detect truncated advice and decide whether to raise the cap or let the executor proceed with partial guidance. The API also appends `[Advisor output truncated at max_tokens=2048.]` (naming your cap) to the advice text, so the executor receives the truncation notice in its own context; with a plaintext `advisor_result` advisor that marker is visible to your client as well. Both signals appear only when you set `max_tokens` on the tool definition. -```json +```text { "type": "advisor_tool_result", "tool_use_id": "srvtoolu_abc123", diff --git a/content/en/agents-and-tools/tool-use/bash-tool.md b/content/en/agents-and-tools/tool-use/bash-tool.md index 2ed5c867d7..f92a36d34c 100644 --- a/content/en/agents-and-tools/tool-use/bash-tool.md +++ b/content/en/agents-and-tools/tool-use/bash-tool.md @@ -166,7 +166,7 @@ The current version of the tool is `bash_20250124`. For model support, beta head client = Anthropic::Client.new response = client.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, tools: [{type: "bash_20250124", name: "bash"}], messages: [ @@ -180,7 +180,7 @@ The current version of the tool is `bash_20250124`. For model support, beta head Claude responds with `stop_reason: "tool_use"` and a `tool_use` block that contains the command for your application to run: -```json Output +```text Output wrap { "id": "msg_01XAbCDeFgHiJkLmNoPQrStU", "model": "claude-opus-5-5", @@ -1147,7 +1147,7 @@ Claude determines which command to run. Your application owns everything else: t client = Anthropic::Client.new response = client.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, tools: [{type: "bash_20250124", name: "bash"}], messages: [ diff --git a/content/en/agents-and-tools/tool-use/browser-use-sdk.md b/content/en/agents-and-tools/tool-use/browser-use-sdk.md index 518292cd2b..8c92db6155 100644 --- a/content/en/agents-and-tools/tool-use/browser-use-sdk.md +++ b/content/en/agents-and-tools/tool-use/browser-use-sdk.md @@ -20,7 +20,7 @@ Writing your own driver is an advanced case, covered in [Implement a driver](htt ## Use a driver from a provider -With a driver from a provider, such as one under [Partner integrations](https://platform.claude.com/docs/en/agents-and-tools/tool-use/browser-use-sdk#partner-integrations), you can build an agent in a few lines of code. The provider in this example is made up. Replace `example_browser_provider` (typescript: `example-browser-provider`) and `ExampleBrowser` with [a real provider's](https://platform.claude.com/docs/en/agents-and-tools/tool-use/browser-use-sdk#partner-integrations) package and driver class, and set them up as the provider's docs describe. +With a driver from a provider, such as one under [Partner integrations](https://platform.claude.com/docs/en/agents-and-tools/tool-use/browser-use-sdk#partner-integrations), you can build an agent in a few lines of code. The provider in this example is made up. Replace `example_browser_provider` (typescript: `example-browser-provider`) and `ExampleBrowser` with a real provider's package and driver class, and set them up as the provider's docs describe. ```python Python @@ -587,7 +587,7 @@ The SDK applies steps 1, 4, and 5 through the policies and the callable you pass Without a URL policy, the SDK checks no URL, and the API doesn't filter the URLs Claude opens. Even with a policy, a link Claude clicks or a redirect can take the browser to loopback (`localhost`, `127.0.0.1`), to link-local addresses such as the cloud metadata address `169.254.169.254`, and to private network ranges. [Egress rules on the container](https://platform.claude.com/docs/en/agents-and-tools/tool-use/browser-use-sdk#put-egress-policy-on-the-container) can block the link-local and private addresses. Rules enforced outside the container can't block loopback. - The SDK doesn't check a URL's scheme, so your driver must refuse every scheme it doesn't mean to open, such as `javascript:`, `view-source:`, `data:`, and `file:`. Most drivers need only `http` and `https`. The example policy later in this section allows only `http` and `https` URLs, plus `about:blank`. + The SDK doesn't check a URL's scheme, so your driver must refuse every scheme that you don't intend it to open, such as `javascript:`, `view-source:`, `data:`, and `file:`. Most drivers need only `http` and `https`. The example policy later in this section allows only `http` and `https` URLs, plus `about:blank`. A `file:` URL lets Claude read files on the browser host. A `javascript:` URL runs script in the current page, even when `javascript_exec` is off. Egress rules don't stop either one. @@ -669,7 +669,7 @@ The example isn't production grade. A production policy needs much more, in area * Links Claude clicks, forms it submits, redirects, and the requests a page makes on its own. Only your driver sees them. See [Intercept requests in the driver](https://platform.claude.com/docs/en/agents-and-tools/tool-use/browser-use-sdk#intercept-requests-in-the-driver). * Hostnames and URLs that come from page content, which an attacker can choose. * Parsing each URL the way the browser does, not finding the hostname with a plain string split. -* URL schemes. The SDK doesn't check them, so refuse every scheme your driver doesn't mean to open. +* URL schemes. The SDK doesn't check them, so refuse every scheme that you don't intend your driver to open. * Egress rules on the container, for what no URL check can see. See [Put egress policy on the container](https://platform.claude.com/docs/en/agents-and-tools/tool-use/browser-use-sdk#put-egress-policy-on-the-container). If you pass `url_policy=None` (typescript: `urlPolicy: null`), the SDK refuses every `navigate` to a URL, so a `None` (typescript: `null`) read from your configuration can't leave URLs unchecked by accident. In TypeScript, `undefined` leaves the option unset, the same as not passing it. @@ -914,7 +914,7 @@ The class takes `configs`, `confirm`, and `tool_configs` (typescript: `toolConfi * **Browser-only options:** The class has no [URL policy](https://platform.claude.com/docs/en/agents-and-tools/tool-use/browser-use-sdk#write-a-url-policy), no [file policy](https://platform.claude.com/docs/en/agents-and-tools/tool-use/browser-use-sdk#confine-uploads-and-downloads), and no [state report](https://platform.claude.com/docs/en/agents-and-tools/tool-use/browser-use-sdk#report-browser-state). * **`configs`:** Every tool you implement is on by default. The per-tool settings are listed under [Tool parameters](https://platform.claude.com/docs/en/agents-and-tools/tool-use/computer-use-tool#tool-parameters). * **`confirm`:** If your class implements `type`, `key`, or `hold_key`, the constructor raises a configuration error unless you pass a `confirm` callable or turn those tools off with `configs`. A class that overrides `execute` counts as implementing all three. -* **Skipped calls:** After a failed computer call, the tool runner answers the turn's later computer calls with `Not executed: an earlier computer action in this turn failed.` Browser calls get a different text. In a loop you write, answer the skipped computer calls with that exact text ([Batch actions](https://platform.claude.com/docs/en/agents-and-tools/tool-use/computer-use-tool#batch-actions)). +* **Skipped calls:** After a failed computer call, the tool runner answers the turn's later computer calls with `Not executed: an earlier computer action in this turn failed.` Browser calls get a different text. In a loop you write, answer the skipped computer calls with that exact text ([Batch actions in the computer use tool](https://platform.claude.com/docs/en/agents-and-tools/tool-use/computer-use-tool#batch-actions)). * **`execute`:** In TypeScript, an `execute` override types `name` as `BetaComputerMemberName` and `input` as `BetaComputerMemberInput`. Both come from `@anthropic-ai/sdk/resources/beta`. * **Error text:** The SDK doesn't hide local paths in a computer tool's error text or in the text a tool returns. Claude reads both, cut at 4,096 characters. Catch exceptions in your tools, and raise `ToolError` (throw it in TypeScript) with your own text. @@ -1191,7 +1191,7 @@ Before you run a driver against anything but a throwaway machine, take these fiv 4. Refuse input your desktop shouldn't honor, such as a point outside the screenshot, a `wait` of several minutes, or a very large `repeat` or `scroll_amount`. Raise `ToolError` (throw it in TypeScript) instead of moving the value into range. 5. Treat everything on the screen as untrusted, including window titles and clipboard text. Don't run it or pass it on unchecked. -The SDK applies step 2 through the callable you pass. The other steps are up to your driver and your deployment. The precautions under [Security considerations](https://platform.claude.com/docs/en/agents-and-tools/tool-use/computer-use-tool#security-considerations) apply as well. +The SDK applies step 2 through the callable you pass. The other steps are up to your driver and your deployment. The precautions under [Security considerations for the computer use tool](https://platform.claude.com/docs/en/agents-and-tools/tool-use/computer-use-tool#security-considerations) apply as well. The following `confirm` asks a person before any keyboard input, through your own `ask_user` (typescript: `askUser`) function, and approves every other call. `context.member` (typescript: `ctx.member`) is the tool's name. To have a person approve clicks too, set `ASK_FIRST` to `KEYBOARD | CLICKS` (typescript: `new Set([...KEYBOARD, ...CLICKS])`). diff --git a/content/en/agents-and-tools/tool-use/browser-use-tool.md b/content/en/agents-and-tools/tool-use/browser-use-tool.md index 75642a1214..ab700b24ea 100644 --- a/content/en/agents-and-tools/tool-use/browser-use-tool.md +++ b/content/en/agents-and-tools/tool-use/browser-use-tool.md @@ -186,7 +186,7 @@ The browser use tool is available on the Claude API and [Google Cloud](https://p client = Anthropic::Client.new response = client.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 2048, tools: [ { type: "browser_toolset_20260801" } @@ -205,7 +205,7 @@ The browser use tool is available on the Claude API and [Google Cloud](https://p Claude's first response ends with `stop_reason: "tool_use"` and carries one or more member `tool_use` blocks, each naming a member tool in `name` and carrying `"toolset_name": "browser"`: -```json Output +```text Output { "id": "msg_01HCDu4XSTLzTAcodEQ58vDo", "type": "message", @@ -802,7 +802,7 @@ The second part runs a batch in order, dispatches each block to those handlers, continue; } if (failed) { - // A batch stops at its first failure; answer later actions unexecuted + // A batch stops at its first failure; answer later actions without running them toolResults.push(browserResult(block.id, HALT_TEXT, true)); continue; } @@ -1054,7 +1054,7 @@ When you stream the response, each member's `input` arrives as one complete `inp A turn with several member calls is a batch action: run the calls in the order they appear, stop at the first failure, and answer every later call with `is_error: true` and the exact text `Not executed: an earlier action in this turn failed.` A batch uses the same response shape as [parallel tool use](https://platform.claude.com/docs/en/agents-and-tools/tool-use/parallel-tool-use); the difference is that you run the blocks in order rather than concurrently. Here Claude clicks the search box it found earlier, types a query, and presses Enter in one turn: -```json +```text wrap { "role": "assistant", "content": [ @@ -1263,7 +1263,7 @@ Four member tools are disabled by default: `javascript_exec` and `file_upload` b * `paths` are file paths on the executor's filesystem, for deployments where the executor can read your application's files directly (the same condition under which you populate a download's `path`). * `document_ids` are identifiers for files your application has staged for the browser, for deployments where it can't. Your application defines what the identifiers mean; scope their resolution the way you scope `paths`, to files staged for this task. -```json +```text wrap { "type": "tool_use", "id": "toolu_01N7gVzFEfZjLjgsYwnrPgrF", diff --git a/content/en/agents-and-tools/tool-use/build-a-tool-using-agent.md b/content/en/agents-and-tools/tool-use/build-a-tool-using-agent.md index 873656a084..80361b4f51 100644 --- a/content/en/agents-and-tools/tool-use/build-a-tool-using-agent.md +++ b/content/en/agents-and-tools/tool-use/build-a-tool-using-agent.md @@ -4,7 +4,7 @@ url: https://platform.claude.com/docs/en/agents-and-tools/tool-use/build-a-tool- description: A guided walkthrough from a single tool call to a production-ready agentic loop. --- -This tutorial builds a calendar-management agent in five concentric rings. Each ring is a complete, runnable program that adds exactly one concept to the ring before it. By the end you will have written the agentic loop by hand and then replaced it with the Tool Runner SDK abstraction. +This tutorial builds a calendar-management agent in five concentric rings. Each ring is a complete, runnable program that adds exactly one concept to the ring before it. By the end you will have written the agentic loop by hand and then replaced it with the tool runner SDK abstraction. The example tool is `create_calendar_event`. Its schema uses nested objects, arrays, and optional fields, so you will see how Claude handles realistic input shapes rather than a single flat string. @@ -3311,19 +3311,19 @@ I tried to schedule the all-hands but the calendar only allows 10 attendees per The `is_error` flag is the only difference from a successful result. Claude receives the flag and the error text, and responds accordingly. See [Handle tool calls](https://platform.claude.com/docs/en/agents-and-tools/tool-use/handle-tool-calls) for the full error-handling reference. -## Ring 5: The Tool Runner SDK abstraction +## Ring 5: The tool runner SDK abstraction -Rings 2 through 4 wrote the same loop by hand: call the API, check `stop_reason`, run tools, append results, repeat. The Tool Runner does this for you. Define each tool as a function, pass the list to `client.beta.messages.tool_runner()` (typescript: `client.beta.messages.toolRunner()`; java: `client.beta().messages().toolRunner()`; php: `$client->beta->messages->toolRunner()`; csharp: `client.Beta.Messages.ToolRunner()`; go: `client.Beta.Messages.NewToolRunner()`), and retrieve the final message once the loop completes. Error wrapping, result formatting, and conversation management are handled internally. +Rings 2 through 4 wrote the same loop by hand: call the API, check `stop_reason`, run tools, append results, repeat. The tool runner does this for you. Define each tool as a function, pass the list to `client.beta.messages.tool_runner()` (typescript: `client.beta.messages.toolRunner()`; java: `client.beta().messages().toolRunner()`; php: `$client->beta->messages->toolRunner()`; csharp: `client.Beta.Messages.ToolRunner()`; go: `client.Beta.Messages.NewToolRunner()`), and retrieve the final message once the loop completes. Error wrapping, result formatting, and conversation management are handled internally. The SDK provides a helper that turns an ordinary function into a runnable tool and derives the input schema from its signature; the following example shows the idiomatic form. - The Tool Runner is a helper in the [Claude SDK](https://platform.claude.com/docs/en/cli-sdks-libraries/overview). Raw HTTP requests have no equivalent. + The tool runner is a helper in the [Claude SDK](https://platform.claude.com/docs/en/cli-sdks-libraries/overview). Raw HTTP requests have no equivalent. - The Tool Runner is a helper in the [Claude SDK](https://platform.claude.com/docs/en/cli-sdks-libraries/overview). The `ant` CLI has no equivalent. + The tool runner is a helper in the [Claude SDK](https://platform.claude.com/docs/en/cli-sdks-libraries/overview). The `ant` CLI has no equivalent. ```python Python @@ -3935,7 +3935,7 @@ The output is identical to Ring 3. The difference is in the code: roughly half t ## What you built -You started with a single hardcoded tool call and ended with a production-shaped agent that handles multiple tools, parallel calls, and errors, then collapsed all of that into the Tool Runner. Along the way you saw every piece of the tool-use protocol: `tool_use` blocks, `tool_result` blocks, `tool_use_id` matching, `stop_reason` checking, and `is_error` signaling. +You started with a single hardcoded tool call and ended with a production-shaped agent that handles multiple tools, parallel calls, and errors, then collapsed all of that into the tool runner. Along the way you saw every piece of the tool-use protocol: `tool_use` blocks, `tool_result` blocks, `tool_use_id` matching, `stop_reason` checking, and `is_error` signaling. ## Next steps @@ -3944,7 +3944,7 @@ You started with a single hardcoded tool call and ended with a production-shaped Schema specification and best practices. - + The full SDK abstraction reference. diff --git a/content/en/agents-and-tools/tool-use/code-execution-tool.md b/content/en/agents-and-tools/tool-use/code-execution-tool.md index 72b6f2f553..136391ed37 100644 --- a/content/en/agents-and-tools/tool-use/code-execution-tool.md +++ b/content/en/agents-and-tools/tool-use/code-execution-tool.md @@ -295,7 +295,7 @@ The Python environment can process various file types uploaded through the Files -H "anthropic-version: 2023-06-01" \ -F "file=@data.csv" - # Then use the file with code execution: FILE_ID is the id from the upload response + # Then use the file with code execution: FILE_ID is the ID from the upload response curl --fail-with-body -sS https://api.anthropic.com/v1/messages \ -H "x-api-key: $ANTHROPIC_API_KEY" \ -H "anthropic-version: 2023-06-01" \ @@ -321,7 +321,7 @@ The Python environment can process various file types uploaded through the Files # First, upload a file ant files upload --file ./data.csv - # Then use the file with code execution: FILE_ID is the id from the upload response + # Then use the file with code execution: FILE_ID is the ID from the upload response ant messages create <`. 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. @@ -761,7 +761,7 @@ Keep the following in mind when implementing the members: Shift+click at a position, for example, to extend a selection. Unlike `hold_key`, `text` holds the modifiers only for the duration of that click or scroll: - ```json + ```text wrap { "type": "tool_use", "id": "toolu_01Qg8m3XqC5aRy7tD2eS4jUg", @@ -773,7 +773,7 @@ Keep the following in mind when implementing the members: Drag from one point to another: - ```json + ```text wrap { "type": "tool_use", "id": "toolu_01Ed6j9VnA3yPw5rB8cQ2gSe", @@ -788,7 +788,7 @@ Keep the following in mind when implementing the members: Scroll down three clicks of the wheel: - ```json + ```text wrap { "type": "tool_use", "id": "toolu_01Yc5h8UmZ2xNv4qA7bP9fRd", @@ -804,7 +804,7 @@ Keep the following in mind when implementing the members: Press Tab four times: - ```json + ```text wrap { "type": "tool_use", "id": "toolu_01Sb4g7TkY9wLu3pX6zM8eQc", @@ -816,7 +816,7 @@ Keep the following in mind when implementing the members: Zoom in to inspect a region at full resolution: - ```json + ```text wrap { "type": "tool_use", "id": "toolu_01Kf7k2WpB4zQx6sC9dR3hTf", @@ -828,7 +828,7 @@ Keep the following in mind when implementing the members: Report the cursor position. Answer this call with a short text result that gives the position in screenshot pixels, for example, `X=512, Y=384`: - ```json + ```text wrap { "type": "tool_use", "id": "toolu_01Ekh3vqB6yTs2mNc4Rw8pLd", @@ -1323,7 +1323,7 @@ The computer use tool is implemented as a schema-less tool. When using this tool continue; } if (failed) { - // A batch stops at its first failure; answer later actions unexecuted + // A batch stops at its first failure; answer later actions without running them toolResults.push(computerResult(block.id, HALT_TEXT, true)); continue; } @@ -1597,7 +1597,7 @@ Use the same shape for coordinates outside the display bounds and for actions th Screenshots and zoom images that you return to the computer use toolset must already fit within your model's [image size limits](https://platform.claude.com/docs/en/build-with-claude/vision#evaluate-image-size): the toolset takes no display dimensions and the API doesn't downscale for you, so an oversized `tool_result` image is rejected with a validation error. Because Claude returns coordinates in the pixel space of the image it receives, keep the scale factor you used so you can map those coordinates back to your screen. - Limits vary by model. Claude Opus 4.7 and later models, including every model that supports `computer_toolset_20260801`, accept up to 2576 pixels on the long edge and 4,784 visual tokens total (`⌈width / 28⌉ × ⌈height / 28⌉`, approximately 3.75 megapixels); earlier models accept up to 1568 pixels on the long edge and approximately 1.15 megapixels total (see [Resolution and token cost](https://platform.claude.com/docs/en/build-with-claude/vision#evaluate-image-size) for each model's tier). The following example uses the earlier-model 1568 px / 1.15 MP limits. For a high-resolution-tier model, size to the visual-token limit rather than a pixel total, for example with the resize helper in [Resize your image before uploading](https://platform.claude.com/docs/en/build-with-claude/vision-coordinates#resize-your-image-before-uploading). + Limits vary by model. Claude Opus 4.7 and later models, including every model that supports `computer_toolset_20260801`, accept up to 2,576 pixels on the long edge and 4,784 visual tokens total (`⌈width / 28⌉ × ⌈height / 28⌉`, approximately 3.75 megapixels); earlier models accept up to 1,568 pixels on the long edge and approximately 1.15 megapixels total (see [Resolution and token cost](https://platform.claude.com/docs/en/build-with-claude/vision#evaluate-image-size) for each model's tier). The following example uses the earlier-model 1,568 px / 1.15 MP limits. For a high-resolution-tier model, size to the visual-token limit rather than a pixel total, for example with the resize helper in [Resize your image before uploading](https://platform.claude.com/docs/en/build-with-claude/vision-coordinates#resize-your-image-before-uploading). If your screen is larger than the limit, resize each screenshot before returning it and scale Claude's returned coordinates back to the original screen space. Because the toolset takes no display dimensions, the resize and the coordinate scaling in your application code are all you need: diff --git a/content/en/agents-and-tools/tool-use/define-tools.md b/content/en/agents-and-tools/tool-use/define-tools.md index 7da413329c..896458b3da 100644 --- a/content/en/agents-and-tools/tool-use/define-tools.md +++ b/content/en/agents-and-tools/tool-use/define-tools.md @@ -494,7 +494,7 @@ Add an optional `input_examples` field to your tool definition with an array of client = Anthropic::Client.new message = client.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, tools: [ { @@ -807,7 +807,7 @@ On models that support it, the highlighted lines are the only difference from a client = Anthropic::Client.new message = client.messages.create( - model: "claude-opus-5", + model: Anthropic::Model::CLAUDE_OPUS_5, max_tokens: 1024, tools: [ { @@ -869,7 +869,7 @@ When using tools, Claude often comments on what it's doing or responds naturally For example, given the prompt "What's the weather like in San Francisco right now, and what time is it there?", Claude might respond with: -```json JSON +```text JSON { "role": "assistant", "content": [ diff --git a/content/en/agents-and-tools/tool-use/handle-tool-calls.md b/content/en/agents-and-tools/tool-use/handle-tool-calls.md index b6205619d7..c154cde17d 100644 --- a/content/en/agents-and-tools/tool-use/handle-tool-calls.md +++ b/content/en/agents-and-tools/tool-use/handle-tool-calls.md @@ -23,7 +23,7 @@ The response has a `stop_reason` of `tool_use` and one or more `tool_use` conten A `tool_use` block for a member of the [computer use](https://platform.claude.com/docs/en/agents-and-tools/tool-use/computer-use-tool) or [browser use](https://platform.claude.com/docs/en/agents-and-tools/tool-use/browser-use-tool) toolset also carries a `toolset_name` field (`"computer"` or `"browser"`). Its `name` is the member tool Claude is calling, such as `screenshot` or `navigate`, so dispatch those blocks on both fields. - ```json JSON + ```text JSON wrap { "id": "msg_01Aq9w938a90dw8q", "model": "claude-opus-5-5", diff --git a/content/en/agents-and-tools/tool-use/memory-tool.md b/content/en/agents-and-tools/tool-use/memory-tool.md index 14a4325985..32942cf45b 100644 --- a/content/en/agents-and-tools/tool-use/memory-tool.md +++ b/content/en/agents-and-tools/tool-use/memory-tool.md @@ -48,7 +48,7 @@ A typical interaction looks like this: Claude calls the memory tool: -```json +```text wrap { "type": "tool_use", "id": "toolu_01C4D5E6F7G8H9I0J1K2L3M4", @@ -72,7 +72,7 @@ Claude calls the memory tool: **4. Claude reads relevant files:** -```json +```text wrap { "type": "tool_use", "id": "toolu_01D5E6F7G8H9I0J1K2L3M4N5", diff --git a/content/en/agents-and-tools/tool-use/overview.md b/content/en/agents-and-tools/tool-use/overview.md index c2e71dd47b..0583fd92cf 100644 --- a/content/en/agents-and-tools/tool-use/overview.md +++ b/content/en/agents-and-tools/tool-use/overview.md @@ -125,7 +125,7 @@ Here's a minimal example using a server tool, the [Web search tool](https://plat client = Anthropic::Client.new message = client.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, tools: [{ type: "web_search_20260209", name: "web_search" }], messages: [{ role: "user", content: "What's the latest on the Mars rover?" }] @@ -587,7 +587,7 @@ Here's that round trip in full for a client tool. The first request defines a `g # Claude replies with a tool_use block naming the tool and its arguments. response = client.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, tools: tools, # Ask for at most one tool call per turn. @@ -609,7 +609,7 @@ Here's that round trip in full for a client tool. The first request defines a `g } ] followup = client.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, tools: tools, tool_choice: {type: "auto", disable_parallel_tool_use: true}, @@ -627,7 +627,7 @@ Claude called get_weather with {"location": "San Francisco, CA"} The current weather in San Francisco is 15 degrees Celsius with partly cloudy skies. ``` -[Handle tool calls](https://platform.claude.com/docs/en/agents-and-tools/tool-use/handle-tool-calls) covers each step in detail, including result formatting and error signaling; [Parallel tool use](https://platform.claude.com/docs/en/agents-and-tools/tool-use/parallel-tool-use) covers responses that call several tools at once. To skip writing this round trip yourself, use [Tool Runner](https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-runner): the SDK runs your tools and sends the results back automatically. +[Handle tool calls](https://platform.claude.com/docs/en/agents-and-tools/tool-use/handle-tool-calls) covers each step in detail, including result formatting and error signaling; [Parallel tool use](https://platform.claude.com/docs/en/agents-and-tools/tool-use/parallel-tool-use) covers responses that call several tools at once. To skip writing this round trip yourself, use the [tool runner](https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-runner): the SDK runs your tools and sends the results back automatically. For the full conceptual model including the agentic loop and when to choose each approach, see [How tool use works](https://platform.claude.com/docs/en/agents-and-tools/tool-use/how-tool-use-works). @@ -654,7 +654,7 @@ Each server tool's page describes its own trigger boundary in more detail. For example, given a `get_weather` tool that requires a `location` parameter, if you ask Claude "What's the weather?" without specifying a location, Claude (particularly Claude Sonnet) might guess values you didn't supply: - ```json JSON + ```text JSON wrap { "type": "tool_use", "id": "toolu_01A09q90qw90lq917835lq9", @@ -791,7 +791,7 @@ See the [Models overview](https://platform.claude.com/docs/en/models/overview#la When you send a tool use prompt, like any other API request, the response includes both input and output token counts in the reported `usage` metrics. -Some server tools add usage-based charges on top of tokens: see [Web search tool](https://platform.claude.com/docs/en/agents-and-tools/tool-use/web-search-tool#usage-and-pricing) and [Code execution tool](https://platform.claude.com/docs/en/agents-and-tools/tool-use/code-execution-tool#usage-and-pricing) for their rates. +Some server tools add usage-based charges on top of tokens: see [Web search tool usage and pricing](https://platform.claude.com/docs/en/agents-and-tools/tool-use/web-search-tool#usage-and-pricing) and [Code execution tool usage and pricing](https://platform.claude.com/docs/en/agents-and-tools/tool-use/code-execution-tool#usage-and-pricing) for their rates. ## Next steps diff --git a/content/en/agents-and-tools/tool-use/parallel-tool-use.md b/content/en/agents-and-tools/tool-use/parallel-tool-use.md index 2f391d1587..9eac93daad 100644 --- a/content/en/agents-and-tools/tool-use/parallel-tool-use.md +++ b/content/en/agents-and-tools/tool-use/parallel-tool-use.md @@ -847,7 +847,7 @@ Parallel tool use is on by default. To turn it off, set `disable_parallel_tool_u ### At most one tool call -When `tool_choice` type is `auto` (the default), setting `disable_parallel_tool_use: true` means Claude calls at most one tool in each response. Claude can still answer in plain text without calling any tool. The highlighted lines are the only change from a standard tool use request: +When the `tool_choice` type is `auto` (the default), setting `disable_parallel_tool_use: true` means Claude calls at most one tool in each response. Claude can still answer in plain text without calling any tool. The highlighted lines are the only change from a standard tool use request: ```bash cURL diff --git a/content/en/agents-and-tools/tool-use/programmatic-tool-calling.md b/content/en/agents-and-tools/tool-use/programmatic-tool-calling.md index a249e0f4b4..866aa28f35 100644 --- a/content/en/agents-and-tools/tool-use/programmatic-tool-calling.md +++ b/content/en/agents-and-tools/tool-use/programmatic-tool-calling.md @@ -376,7 +376,7 @@ When you configure a tool to be callable from code execution and Claude determin This approach is particularly useful for: * **Large data processing:** Filter or aggregate tool results before they reach Claude's context. -* **Multistep workflows:** Save tokens and latency by calling tools serially or in a loop without sampling Claude in-between tool calls. +* **Multistep workflows:** Save tokens and latency by calling tools serially or in a loop without sampling Claude between tool calls. * **Conditional logic:** Make decisions based on intermediate tool results. @@ -422,7 +422,7 @@ Every tool use block includes a `caller` field indicating how it was called: **Direct call (traditional tool use):** -```json +```text wrap { "type": "tool_use", "id": "toolu_abc123", @@ -434,7 +434,7 @@ Every tool use block includes a `caller` field indicating how it was called: **Programmatic call:** -```json +```text wrap { "type": "tool_use", "id": "toolu_xyz789", @@ -480,7 +480,7 @@ The request shape is identical to the [Quick start](https://platform.claude.com/ Claude writes code that calls your tool. The API pauses and returns: -```json Output +```text Output { "role": "assistant", "content": [ @@ -1160,7 +1160,7 @@ The code picks up where it paused and processes your result. Each continuation r Once the code execution completes, Claude provides the final response: -```json Output +```text Output { "content": [ { @@ -1197,7 +1197,7 @@ for region in regions: results[region] = sum(row["revenue"] for row in rows) # Process results programmatically -top_region = max(results.items(), key=lambda x: x[1]) +top_region = max(results.items(), key=lambda item: item[1]) print(f"Top region: {top_region[0]} with ${top_region[1]:,} in revenue") ``` @@ -1249,7 +1249,7 @@ for error in errors[-10:]: # Only return last 10 errors When code execution calls a tool: -```json +```text wrap { "type": "tool_use", "id": "toolu_abc123", @@ -1283,7 +1283,7 @@ Your tool result is passed back to the running code: When all tool calls are satisfied and code completes: -```json +```text { "type": "code_execution_tool_result", "tool_use_id": "srvtoolu_xyz789", @@ -1310,7 +1310,7 @@ When all tool calls are satisfied and code completes: If your tool result doesn't arrive within about 4 minutes, the pending call raises a `TimeoutError` inside Claude's running code. Claude receives the error in `stderr` and typically retries the call: -```json +```text { "type": "code_execution_tool_result", "tool_use_id": "srvtoolu_abc123", diff --git a/content/en/agents-and-tools/tool-use/server-tools.md b/content/en/agents-and-tools/tool-use/server-tools.md index 98248cf0cf..674ceadcc9 100644 --- a/content/en/agents-and-tools/tool-use/server-tools.md +++ b/content/en/agents-and-tools/tool-use/server-tools.md @@ -10,7 +10,7 @@ Server-executed tools share these mechanics: the `server_tool_use` block, `pause The `server_tool_use` block appears in Claude's response when a server-executed tool runs. Its `id` field uses the `srvtoolu_` prefix to distinguish it from client tool calls: -```json +```text wrap { "type": "server_tool_use", "id": "srvtoolu_01A2B3C4D5E6F7G8H9", @@ -77,7 +77,7 @@ Here's how to handle the `pause_turn` stop reason: tools=[{"type": "web_search_20250305", "name": "web_search", "max_uses": 10}], ) - # Check if the response has pause_turn stop reason + # Check if the response has a pause_turn stop reason if response.stop_reason == "pause_turn": # Continue the conversation with the paused content messages = [ @@ -124,7 +124,7 @@ Here's how to handle the `pause_turn` stop reason: ] }); - // Check if the response has pause_turn stop reason + // Check if the response has a pause_turn stop reason if (response.stop_reason === "pause_turn") { // Continue the conversation with the paused content const messages: Anthropic.MessageParam[] = [ @@ -335,7 +335,7 @@ Here's how to handle the `pause_turn` stop reason: client = Anthropic::Client.new response = client.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, messages: [ { @@ -366,7 +366,7 @@ Here's how to handle the `pause_turn` stop reason: ] continuation = client.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, messages: messages, tools: [ @@ -405,7 +405,7 @@ Claude can call a server tool and a client tool in the same group of parallel to With [programmatic tool calling](https://platform.claude.com/docs/en/agents-and-tools/tool-use/programmatic-tool-calling), the same response shape means something different. The client `tool_use` block comes from code that is running in the `code_execution` tool rather than from Claude directly, and its `caller` field names the `code_execution` block that called it. That code has already started: it is paused waiting for your `tool_result` blocks, and sending them resumes the execution instead of starting a deferred tool. The `code_execution` block's own result block arrives once the code completes, which can take more than one round of tool results. The follow-up user message itself is the same in both cases; with programmatic tool calling, also pass back the `id` from the response's `container` field, as that page shows. -```json +```text wrap { "stop_reason": "tool_use", "content": [ @@ -446,7 +446,7 @@ To continue the turn, run the client tools and send a user message whose content The API attaches your results to the still-open assistant turn, runs the deferred server tool (for paused code execution, resumes it), and then lets Claude continue. For a server tool Claude called directly, the next response starts with the result block that answers the previous response's `server_tool_use` `id`, followed by the newly generated content and a fresh `stop_reason`: -```json +```text wrap { "stop_reason": "end_turn", "content": [ diff --git a/content/en/agents-and-tools/tool-use/strict-tool-use.md b/content/en/agents-and-tools/tool-use/strict-tool-use.md index 59653900b7..08065436ee 100644 --- a/content/en/agents-and-tools/tool-use/strict-tool-use.md +++ b/content/en/agents-and-tools/tool-use/strict-tool-use.md @@ -19,7 +19,7 @@ Building reliable agentic systems requires guaranteed schema conformance. Withou Strict tool use guarantees type-safe parameters: -* Functions receive correctly typed arguments every time +* Correctly typed function arguments every time * No need to validate and retry tool calls * Production-ready agents that work consistently at scale @@ -315,7 +315,7 @@ For example, suppose a booking system needs `passengers: int`. Without strict mo client = Anthropic::Client.new message = client.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, messages: [ { role: "user", content: "What's the weather like in San Francisco?" } @@ -349,7 +349,7 @@ For example, suppose a booking system needs `passengers: int`. Without strict mo **Response format:** Tool use blocks with validated inputs in `response.content[x].input` -```json Output +```text Output wrap { "type": "tool_use", "name": "get_weather", @@ -656,7 +656,7 @@ The [computer use](https://platform.claude.com/docs/en/agents-and-tools/tool-use client = Anthropic::Client.new message = client.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, messages: [ { role: "user", content: "Search for flights to Tokyo departing June 1, 2026" } @@ -1072,7 +1072,7 @@ The [computer use](https://platform.claude.com/docs/en/agents-and-tools/tool-use client = Anthropic::Client.new message = client.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, messages: [ { role: "user", content: "Help me plan a trip from New York to Paris for 2 people, departing June 1, 2026" } diff --git a/content/en/agents-and-tools/tool-use/text-editor-tool.md b/content/en/agents-and-tools/tool-use/text-editor-tool.md index fcecdf4de5..06836d15ed 100644 --- a/content/en/agents-and-tools/tool-use/text-editor-tool.md +++ b/content/en/agents-and-tools/tool-use/text-editor-tool.md @@ -200,7 +200,7 @@ You can optionally specify a `max_characters` parameter to control truncation wh client = Anthropic::Client.new response = client.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, tools: [ { @@ -274,7 +274,7 @@ Parameters: Example for viewing a file: - ```json + ```text wrap { "type": "tool_use", "id": "toolu_01A09q90qw90lq917835lq9", @@ -288,7 +288,7 @@ Parameters: Example for viewing a directory: - ```json + ```text wrap { "type": "tool_use", "id": "toolu_02B19r91rw91mr917835mr9", @@ -313,7 +313,7 @@ Parameters: * `new_str`: The new text to insert in place of the old text - ```json + ```text wrap { "type": "tool_use", "id": "toolu_01A09q90qw90lq917835lq9", @@ -339,7 +339,7 @@ Parameters: * `file_text`: The content to write to the new file - ```json + ```text { "type": "tool_use", "id": "toolu_01A09q90qw90lq917835lq9", @@ -365,7 +365,7 @@ Parameters: * `insert_text`: The text to insert - ```json + ```text { "type": "tool_use", "id": "toolu_01A09q90qw90lq917835lq9", @@ -543,7 +543,7 @@ First, your application provides Claude with the text editor tool and a prompt t client = Anthropic::Client.new response = client.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, tools: [{type: "text_editor_20250728", name: "str_replace_based_edit_tool"}], messages: [ @@ -560,7 +560,7 @@ First, your application provides Claude with the text editor tool and a prompt t Claude uses the text editor tool first to view the file: -```json Output +```text Output { "id": "msg_01XAbCDeFgHiJkLmNoPQrStU", "model": "claude-opus-5-5", @@ -973,7 +973,7 @@ Your application should then read the file and return its contents to Claude: client = Anthropic::Client.new response = client.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, tools: [{type: "text_editor_20250728", name: "str_replace_based_edit_tool"}], messages: [ @@ -1021,7 +1021,7 @@ Your application should then read the file and return its contents to Claude: Claude identifies the syntax error and uses the `str_replace` command to fix it: -```json Output +```text Output { "id": "msg_01VwXyZAbCdEfGhIjKlMnO", "model": "claude-opus-5-5", @@ -1417,7 +1417,7 @@ Your application should then make the edit and return the result: client = Anthropic::Client.new response = client.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, tools: [{type: "text_editor_20250728", name: "str_replace_based_edit_tool"}], messages: [ @@ -1461,7 +1461,7 @@ Your application should then make the edit and return the result: Finally, Claude provides a complete explanation of the fix: -````json Output +````text Output { "id": "msg_01IjKlMnOpQrStUvWxYzAb", "model": "claude-opus-5-5", @@ -2258,11 +2258,11 @@ You can use the text editor tool alongside other Claude tools. When combining to Here are some ideas for how to use the text editor tool in more convenient and powerful ways: -* **Integrate with your development workflow:** Build the text editor tool into your development tools or IDE -* **Create a code review system:** Have Claude review your code and make improvements -* **Build a debugging assistant:** Create a system where Claude can help you diagnose and fix issues in your code -* **Implement file format conversion:** Let Claude help you convert files from one format to another -* **Automate documentation:** Set up workflows for Claude to automatically document your code +* **Integrate with your development workflow:** Build the text editor tool into your development tools or IDE. +* **Create a code review system:** Have Claude review your code and make improvements. +* **Build a debugging assistant:** Create a system where Claude can help you diagnose and fix issues in your code. +* **Implement file format conversion:** Let Claude help you convert files from one format to another. +* **Automate documentation:** Set up workflows for Claude to automatically document your code. The text editor tool allows Claude to work directly with your code base, supporting workflows from debugging to automated documentation. diff --git a/content/en/agents-and-tools/tool-use/tool-runner.md b/content/en/agents-and-tools/tool-use/tool-runner.md index f7d75a3628..5b6b429695 100644 --- a/content/en/agents-and-tools/tool-use/tool-runner.md +++ b/content/en/agents-and-tools/tool-use/tool-runner.md @@ -564,7 +564,7 @@ Depending on the SDK's tool signature, a tool returns its result as a string or # Use the tool runner runner = client.beta.messages.tool_runner( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, tools: [GetWeather.new, CalculateSum.new], messages: [ @@ -757,7 +757,7 @@ If you don't need intermediate messages, you can get the final message directly: client = Anthropic::Client.new # ... runner = client.beta.messages.tool_runner( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, tools: [GetWeather.new, CalculateSum.new], messages: [ @@ -1068,7 +1068,7 @@ When you take over for an iteration, the runner does not append the assistant me ```ruby runner = client.beta.messages.tool_runner( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, max_iterations: 10, tools: [GetWeather.new], @@ -1266,7 +1266,7 @@ By default, the tool runner passes tool errors back to Claude, which can then re client = Anthropic::Client.new # ... runner = client.beta.messages.tool_runner( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, tools: [MyTool.new], messages: [{role: "user", content: "Run my_tool with the query 'hello'."}] @@ -1526,7 +1526,7 @@ You can modify tool results before they're sent back to Claude. This is useful f client = Anthropic::Client.new # ... runner = client.beta.messages.tool_runner( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, tools: [SearchDocuments.new], messages: [{role: "user", content: "Search for information about the climate of San Francisco"}] @@ -1741,7 +1741,7 @@ Enable streaming to process each turn's response incrementally. Each iteration y client = Anthropic::Client.new # ... runner = client.beta.messages.tool_runner( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, tools: [CalculateSum.new], messages: [{role: "user", content: "What is 15 + 27?"}] diff --git a/content/en/agents-and-tools/tool-use/tool-search-tool.md b/content/en/agents-and-tools/tool-use/tool-search-tool.md index 11ef0e0af4..f63442c636 100644 --- a/content/en/agents-and-tools/tool-use/tool-search-tool.md +++ b/content/en/agents-and-tools/tool-use/tool-search-tool.md @@ -84,57 +84,57 @@ The following example includes the tool search tool and two deferred tools: ```bash cURL curl https://api.anthropic.com/v1/messages \ - -H "x-api-key: $ANTHROPIC_API_KEY" \ - -H "anthropic-version: 2023-06-01" \ - -H "content-type: application/json" \ - -d '{ - "model": "claude-opus-5-5", - "max_tokens": 2048, - "messages": [ - { - "role": "user", - "content": "What is the weather in San Francisco?" + -H "x-api-key: $ANTHROPIC_API_KEY" \ + -H "anthropic-version: 2023-06-01" \ + -H "content-type: application/json" \ + -d '{ + "model": "claude-opus-5-5", + "max_tokens": 2048, + "messages": [ + { + "role": "user", + "content": "What is the weather in San Francisco?" + } + ], + "tools": [ + { + "type": "tool_search_tool_regex_20251119", + "name": "tool_search_tool_regex" + }, + { + "name": "get_weather", + "description": "Get the weather at a specific location", + "input_schema": { + "type": "object", + "properties": { + "location": {"type": "string"}, + "unit": { + "type": "string", + "enum": ["celsius", "fahrenheit"] } - ], - "tools": [ - { - "type": "tool_search_tool_regex_20251119", - "name": "tool_search_tool_regex" - }, - { - "name": "get_weather", - "description": "Get the weather at a specific location", - "input_schema": { - "type": "object", - "properties": { - "location": {"type": "string"}, - "unit": { - "type": "string", - "enum": ["celsius", "fahrenheit"] - } - }, - "required": ["location"] - }, - "defer_loading": true - }, - { - "name": "search_files", - "description": "Search through files in the workspace", - "input_schema": { - "type": "object", - "properties": { - "query": {"type": "string"}, - "file_types": { - "type": "array", - "items": {"type": "string"} - } - }, - "required": ["query"] - }, - "defer_loading": true + }, + "required": ["location"] + }, + "defer_loading": true + }, + { + "name": "search_files", + "description": "Search through files in the workspace", + "input_schema": { + "type": "object", + "properties": { + "query": {"type": "string"}, + "file_types": { + "type": "array", + "items": {"type": "string"} } - ] - }' + }, + "required": ["query"] + }, + "defer_loading": true + } + ] + }' ``` ```bash CLI @@ -479,7 +479,7 @@ The following example includes the tool search tool and two deferred tools: client = Anthropic::Client.new message = client.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 2048, messages: [ { role: "user", content: "What is the weather in San Francisco?" } @@ -604,7 +604,7 @@ Internally, the API excludes deferred tools from the system-prompt prefix. When When Claude uses the tool search tool, the response includes the following block types: -```json JSON +```text JSON { "role": "assistant", "content": [ @@ -693,7 +693,7 @@ These errors prevent the API from processing the request: **All tools deferred:** -```json +```text { "type": "error", "error": { @@ -705,7 +705,7 @@ These errors prevent the API from processing the request: **Missing tool definition:** -```json +```text wrap { "type": "error", "error": { @@ -719,7 +719,7 @@ These errors prevent the API from processing the request: When a tool search operation fails during execution, the API returns a 200 response with the error in the body: -```json JSON +```text JSON { "type": "tool_search_tool_result", "tool_use_id": "srvtoolu_01ABC123", @@ -793,7 +793,7 @@ A tool with `defer_loading: true` can't also carry `cache_control`: the API retu With streaming enabled, you'll receive tool search events as part of the stream: -```sse +```text event: content_block_start data: {"type": "content_block_start", "index": 1, "content_block": {"type": "server_tool_use", "id": "srvtoolu_xyz789", "name": "tool_search_tool_regex"}} @@ -801,7 +801,7 @@ data: {"type": "content_block_start", "index": 1, "content_block": {"type": "ser event: content_block_delta data: {"type": "content_block_delta", "index": 1, "delta": {"type": "input_json_delta", "partial_json": "{\"pattern\":\"weather\"}"}} -// Pause while search executes +// Pause while search runs // Search results streamed event: content_block_start diff --git a/content/en/agents-and-tools/tool-use/troubleshooting-tool-use.md b/content/en/agents-and-tools/tool-use/troubleshooting-tool-use.md index 7fa25eb877..31c5ac2bc4 100644 --- a/content/en/agents-and-tools/tool-use/troubleshooting-tool-use.md +++ b/content/en/agents-and-tools/tool-use/troubleshooting-tool-use.md @@ -12,7 +12,7 @@ Symptom-to-fix tables for the most common tool-use errors. Each fix cross-refere | ------------------------------------------ | -------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Claude calls tool A when you wanted tool B | Description ambiguity | Sharpen descriptions. Differentiate tools by WHEN to use them, not only WHAT they do. See [Define tools](https://platform.claude.com/docs/en/agents-and-tools/tool-use/define-tools). | | Claude never calls your tool | Tool name collision or overly generic schema | Check for duplicate names across your tool list. Add `input_examples` to make the intended use concrete. | -| Claude calls with wrong parameter types | Model guessing at ambiguous schema | Add `strict: true` (if your schema is in the supported subset) or add `input_examples`. | +| Claude calls with wrong parameter types | Ambiguous schema | Add `strict: true` (if your schema is in the supported subset) or add `input_examples`. | ## Claude invents tool parameters diff --git a/content/en/agents-and-tools/tool-use/web-fetch-tool.md b/content/en/agents-and-tools/tool-use/web-fetch-tool.md index 30407eefae..f4bcbb749a 100644 --- a/content/en/agents-and-tools/tool-use/web-fetch-tool.md +++ b/content/en/agents-and-tools/tool-use/web-fetch-tool.md @@ -244,6 +244,10 @@ To enable dynamic filtering, use `web_fetch_20260209` or any later version. The ## How to use web fetch + + An organization admin can turn off web fetch for your organization on the [**Capabilities**](https://platform.claude.com/settings/capabilities) page of the Claude Console. With web fetch off, a Messages API request that includes the tool fails with a 400 `invalid_request_error` that says web fetch is not enabled, and `web_fetch` calls in a [Claude Managed Agents](https://platform.claude.com/docs/en/managed-agents/overview) session return an error result to the agent while the session continues. With web fetch on, the admin can also set allowed or blocked domains for web fetch on the same page. For how the organization's domain lists apply, see [Domain filtering](https://platform.claude.com/docs/en/agents-and-tools/tool-use/server-tools#domain-filtering) for Messages API requests and [Restrict web search and web fetch domains](https://platform.claude.com/docs/en/managed-agents/tools-web-restrictions) for Managed Agents sessions. + + Provide the web fetch tool in your API request: @@ -518,7 +522,7 @@ Unlike web search, where citations are always enabled, citations are optional fo Here's an example response structure: -```json Output +```text Output { "role": "assistant", "content": [ @@ -602,7 +606,7 @@ Fetch results include: For PDF documents, content is returned as base64-encoded data: -```json Output +```text Output wrap { "type": "web_fetch_tool_result", "tool_use_id": "srvtoolu_02", @@ -627,7 +631,7 @@ For PDF documents, content is returned as base64-encoded data: When the web fetch tool encounters an error, the Claude API returns a 200 (success) response with the error represented in the response body. Claude receives the error result and continues the turn. For example: -```json Output +```text Output wrap { "type": "web_fetch_tool_result", "tool_use_id": "srvtoolu_a93jad", @@ -954,7 +958,7 @@ To cache tool definitions across turns, see [Tool use with prompt caching](https With streaming enabled, fetch events are part of the stream with a pause during content retrieval: -```sse Output +```text Output event: message_start data: {"type": "message_start", "message": {"id": "msg_abc123", "type": "message"}} @@ -987,7 +991,7 @@ You can include the web fetch tool in the [Messages Batches API](https://platfor Web fetch usage has **no additional charges** beyond standard token costs: -```json +```text wrap { "usage": { "input_tokens": 25039, diff --git a/content/en/agents-and-tools/tool-use/web-search-tool.md b/content/en/agents-and-tools/tool-use/web-search-tool.md index d7c63f8e28..01b785a9c8 100644 --- a/content/en/agents-and-tools/tool-use/web-search-tool.md +++ b/content/en/agents-and-tools/tool-use/web-search-tool.md @@ -459,8 +459,8 @@ The `user_location` parameter allows you to localize search results based on a u * `type`: The type of location (must be `approximate`) * `city`: The city name * `region`: The region or state -* `country`: The two-letter [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) country code. The API rejects unsupported country codes with a 400 error. -* `timezone`: The [IANA time zone ID](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones). +* `country`: The two-letter [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) country code (the API rejects an unsupported code with a 400 error) +* `timezone`: The [IANA time zone ID](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) On Claude Managed Agents, the `web_search` entry of the agent toolset accepts a `user_location` object with the same fields. The API rejects an unsupported `country` code with a 400 error when you create or update the agent, or when you create or update a session that supplies the setting. See the [web tool settings](https://platform.claude.com/docs/en/managed-agents/tools-web-restrictions#settings). @@ -488,7 +488,7 @@ The `response_inclusion` parameter controls how search result blocks appear in t Here's an example response structure: -```json Output +```text Output { "role": "assistant", "content": [ @@ -583,7 +583,7 @@ The web search citation fields `cited_text`, `title`, and `url` do not count tow When the web search tool encounters an error (such as hitting rate limits), the Claude API still returns a 200 (success) response. The error is represented within the response body using the following structure: -```json Output +```text Output wrap { "type": "web_search_tool_result", "tool_use_id": "srvtoolu_a93jad", @@ -621,7 +621,7 @@ To cache tool definitions across turns, see [Tool use with prompt caching](https With streaming enabled, you'll receive search events as part of the stream. There is a pause while the search runs: -```sse Output +```text Output event: message_start data: {"type": "message_start", "message": {"id": "msg_abc123", "type": "message"}} @@ -656,7 +656,7 @@ To protect shared capacity, the Batches API throttles web search requests for ea Web search usage is charged in addition to token usage: -```json +```text wrap { "usage": { "input_tokens": 105, @@ -670,7 +670,7 @@ Web search usage is charged in addition to token usage: } ``` -Web search is available on the Claude API for **$10 USD per 1,000 searches**, plus standard token costs for search-generated content. Web search results retrieved throughout a conversation are counted as input tokens, in search iterations executed during a single turn and in subsequent conversation turns. +Web search is available on the Claude API for **$10 USD per 1,000 searches**, plus standard token costs for search-generated content. Web search results retrieved throughout a conversation are counted as input tokens, in search iterations run during a single turn and in subsequent conversation turns. Each web search counts as one use, regardless of the number of results returned. If an error occurs during web search, the web search will not be billed. diff --git a/content/en/api/beta-headers.md b/content/en/api/beta-headers.md index d5372d3e09..2335abbdc7 100644 --- a/content/en/api/beta-headers.md +++ b/content/en/api/beta-headers.md @@ -209,7 +209,7 @@ Beta feature names typically follow the pattern `feature-name-YYYY-MM-DD`, where If you use an invalid beta name, or a beta your organization doesn't have access to, you'll receive a `400` error response: -```json Output +```text Output { "type": "error", "error": { diff --git a/content/en/api/claude-code/routines-fire.md b/content/en/api/claude-code/routines-fire.md index 489c8dabba..0bc9dc82aa 100644 --- a/content/en/api/claude-code/routines-fire.md +++ b/content/en/api/claude-code/routines-fire.md @@ -95,7 +95,7 @@ The body is optional. Unknown fields in the body are ignored. A successful request returns `200 OK` with the new session details: -```json +```text { "type": "routine_fire", "claude_code_session_id": "session_01HJKLMNOPQRSTUVWXYZ", @@ -113,7 +113,7 @@ A successful request returns `200 OK` with the new session details: Errors use the standard Anthropic [error envelope](https://platform.claude.com/docs/en/api/errors): -```json +```text wrap { "type": "error", "error": { diff --git a/content/en/api/errors.md b/content/en/api/errors.md index f9c3f8b4f9..e34fb4ff25 100644 --- a/content/en/api/errors.md +++ b/content/en/api/errors.md @@ -57,7 +57,7 @@ If you exceed these limits, you'll receive a 413 `request_too_large` error. On t The API always returns errors as JSON, with a top-level `error` object that always includes a `type` and `message` value. The response also includes a `request_id` field for easier tracking and debugging. For example: -```json JSON +```text JSON wrap { "type": "error", "error": { @@ -275,7 +275,7 @@ If you don't need to process events incrementally, the SDK can consume the strea ```bash CLI - # The CLI streams events; --format jsonl emits one event per line + # The CLI streams events; --format jsonl emits one event on each line ant messages create --stream --format jsonl <<'YAML' model: claude-sonnet-5 max_tokens: 128000 @@ -413,7 +413,7 @@ If you don't need to process events incrementally, the SDK can consume the strea client = Anthropic::Client.new message = client.messages.stream( - model: "claude-sonnet-5", + model: Anthropic::Model::CLAUDE_SONNET_5, max_tokens: 128000, messages: [{ role: "user", content: "Write a detailed analysis..." }] ).accumulated_message @@ -422,7 +422,7 @@ If you don't need to process events incrementally, the SDK can consume the strea ``` -See [Streaming messages](https://platform.claude.com/docs/en/build-with-claude/streaming#get-the-final-message-without-handling-events) for more details. +See [Get the final message without handling events](https://platform.claude.com/docs/en/build-with-claude/streaming#get-the-final-message-without-handling-events) for more details. ## Common validation errors @@ -430,7 +430,7 @@ See [Streaming messages](https://platform.claude.com/docs/en/build-with-claude/s Claude 4.6 and later models and [Claude Mythos Preview](https://anthropic.com/glasswing) do not support prefilling assistant messages. Sending a request with a prefilled last assistant message to any of these models returns a 400 `invalid_request_error`: -```json +```text { "type": "error", "error": { diff --git a/content/en/api/migration-2026-10-21.md b/content/en/api/migration-2026-10-21.md index 7f579bef73..927ad1912b 100644 --- a/content/en/api/migration-2026-10-21.md +++ b/content/en/api/migration-2026-10-21.md @@ -161,9 +161,9 @@ If your code treated a `null` `workspace_id` as the Default Workspace, compare ` Earlier SDK and CLI versions sent `anthropic-version: 2023-06-01` with every request. The versions under [Switch to 2026-10-21](https://platform.claude.com/docs/en/api/migration-2026-10-21#upgrade) send `2026-10-21`, including their Amazon Bedrock and Google Cloud clients. The changes in [Breaking changes](https://platform.claude.com/docs/en/api/migration-2026-10-21#breaking-changes) apply to them too: the removed parameters and the old field names are also gone from the SDK's types and from the CLI's flags and output. -### `MessageParam` is a union with one type per role +### `MessageParam` is a union with one type for each role -In earlier versions, `MessageParam` was one type for every role. Each role now has a type of its own: `UserMessageParam`, `AssistantMessageParam`, and `SystemMessageParam`. `BetaMessageParam` is split the same way, into `BetaUserMessageParam`, `BetaAssistantMessageParam`, and `BetaSystemMessageParam`. The requests that the SDK sends have the same fields and values as before. +In earlier versions, `MessageParam` was one type for all roles. Each role now has a type of its own: `UserMessageParam`, `AssistantMessageParam`, and `SystemMessageParam`. `BetaMessageParam` is split the same way, into `BetaUserMessageParam`, `BetaAssistantMessageParam`, and `BetaSystemMessageParam`. The requests that the SDK sends have the same fields and values as before. @@ -620,7 +620,7 @@ This affects the TypeScript and Ruby SDKs. Client-side compaction in the tool ru - The `compactionControl` option and the `@anthropic-ai/sdk/lib/tools/CompactionControl` module are gone. The option stopped working in v0.129.0, where passing it threw an `AnthropicError`. It isn't in the params type, so TypeScript reports it as an unknown property. + The `compactionControl` option and the `@anthropic-ai/sdk/lib/tools/CompactionControl` module are gone. The option stopped working in v0.129.0, where passing it threw an `AnthropicError`. It isn't in the tool runner's parameters type, so TypeScript reports it as an unknown property. To keep compacting automatically at a token threshold: @@ -1107,7 +1107,7 @@ Authorization: Bearer This affects the Python, TypeScript, Go, PHP, and Ruby SDKs. -If you removed `X-Api-Key` so that a request sent only an auth token, delete that code instead of changing it, because removing `Authorization` would remove the token. [A client holds one credential](https://platform.claude.com/docs/en/api/migration-2026-10-21#sdk-one-credential), so make sure that it's the token: with none passed in code and both `ANTHROPIC_API_KEY` and `ANTHROPIC_AUTH_TOKEN` set, the client uses the key. +If you removed `X-Api-Key` so that a request sent only an authentication token, delete that code instead of changing it, because removing `Authorization` would remove the token. [A client holds one credential](https://platform.claude.com/docs/en/api/migration-2026-10-21#sdk-one-credential), so make sure that it's the token: with none passed in code and both `ANTHROPIC_API_KEY` and `ANTHROPIC_AUTH_TOKEN` set, the client uses the key. @@ -1147,11 +1147,11 @@ If you removed `X-Api-Key` so that a request sent only an auth token, delete tha ### A client holds one credential -An API key and an auth token now share a header, so an SDK client holds one credential. With none passed in code, it follows the [credential precedence](https://platform.claude.com/docs/en/manage-claude/wif-reference#credential-precedence) order. +An API key and an authentication token now share a header, so an SDK client holds one credential. With none passed in code, it follows the [credential precedence](https://platform.claude.com/docs/en/manage-claude/wif-reference#credential-precedence) order. - v1 sent both an API key and an auth token when the client had both, each in its own header. The credential is one of `api_key`, `auth_token`, `credentials`, `config`, or `profile`. + v1 sent both an API key and an authentication token when the client had both, each in its own header. The credential is one of `api_key`, `auth_token`, `credentials`, `config`, or `profile`. * **Pass at most one.** Two or more in the constructor, or in one `copy()` or `with_options()` call, raise `ValueError`. `None` doesn't count. v1 raised `TypeError`, and only for two of `credentials`, `config`, and `profile`. * **The one you pass is the only one.** As in v1, the client does not look for another in the environment or on disk. @@ -1169,11 +1169,11 @@ An API key and an auth token now share a header, so an SDK client holds one cred The docstrings of `Anthropic.__init__` and `Anthropic.copy` in [`_client.py`](https://github.com/anthropics/anthropic-sdk-python/blob/main/src/anthropic/_client.py) have the details. - If you relied on sending both, for example a token for a gateway and a key for the API behind it, pass the token as `auth_token` and set `X-Api-Key` in `default_headers`. Have the gateway remove its `Authorization` header before it forwards the request. The Claude API expects one credential per request. + If you relied on sending both, for example a token for a gateway and a key for the API behind it, pass the token as `auth_token` and set `X-Api-Key` in `default_headers`. Have the gateway remove its `Authorization` header before it forwards the request. The Claude API expects one credential for each request. - In v0 a client that had both an API key and an auth token sent both, each in its own header. The credential is one of `apiKey`, `authToken`, `credentials`, `config`, or `profile`. + In v0 a client that had both an API key and an authentication token sent both, each in its own header. The credential is one of `apiKey`, `authToken`, `credentials`, `config`, or `profile`. * **Pass at most one.** Two or more in `new Anthropic()`, or in one `withOptions()` call, throw a `TypeError`. `null` and `undefined` don't count. * **The one you pass is the only one.** The client does not look for another in the environment or on disk. @@ -1189,13 +1189,13 @@ An API key and an auth token now share a header, so an SDK client holds one cred const client = new Anthropic({ credentials }); ``` - The doc comments on [`ClientOptions`](https://github.com/anthropics/anthropic-sdk-typescript/blob/main/src/client.ts) say how each option behaves, and the doc comment on each of those platform clients' constructors lists the options it rejects. + The doc comments on `ClientOptions` in [`client.ts`](https://github.com/anthropics/anthropic-sdk-typescript/blob/main/src/client.ts) say how each option behaves, and the doc comment on each of those platform clients' constructors lists the options it rejects. - If you relied on sending both, for example a token for a gateway and a key for the API behind it, set `X-Api-Key` in `defaultHeaders` and keep `authToken`. Have the gateway remove its `Authorization` header before it forwards the request. The Claude API expects one credential per request. + If you relied on sending both, for example a token for a gateway and a key for the API behind it, set `X-Api-Key` in `defaultHeaders` and keep `authToken`. Have the gateway remove its `Authorization` header before it forwards the request. The Claude API expects one credential for each request. - In v12 a client that had both an API key and an auth token sent both, each in its own header. The credential is one of `ApiKey`, `AuthToken`, or `ClientOptions.Credentials`. + In v12 a client that had both an API key and an authentication token sent both, each in its own header. The credential is one of `ApiKey`, `AuthToken`, or `ClientOptions.Credentials`. * **Passing two is an error.** Setting a second one throws an `ArgumentException`. `null` doesn't count, so to swap the credential in `ClientOptions` that you built yourself, set the old one to `null` first. * **Passing one uses it and ignores the environment.** No credential environment variable or profile on disk is read. In the same way, `AnthropicCredentials.Resolve(profile: "name")` now returns that profile's credentials when `ANTHROPIC_API_KEY` or `ANTHROPIC_AUTH_TOKEN` is set. @@ -1212,13 +1212,13 @@ An API key and an auth token now share a header, so an SDK client holds one cred The XML docs on those three properties of [`ClientOptions`](https://github.com/anthropics/anthropic-sdk-csharp/blob/main/src/Anthropic/Core/ClientOptions.cs) have the details. - Cloud platform clients keep the credentials they were built with. The Bedrock, Bedrock Mantle, Foundry, Google Cloud, and AWS clients and `AnthropicVertexClient` decide how to authenticate when you build them, and most of them use the `Authorization` header for it. The releases of these packages that depend on v13 ignore an `ApiKey` or `AuthToken` that you set through `WithOptions`. To use another key with `AnthropicAwsClient`, build a new client with `ApiKey` in `AwsClientOptions`. + Cloud platform clients keep the credentials they were built with. The Bedrock, Bedrock Mantle, Foundry, Google Cloud, and AWS clients and `AnthropicVertexClient` determine how to authenticate when you build them, and most of them use the `Authorization` header for it. The releases of these packages that depend on v13 ignore an `ApiKey` or `AuthToken` that you set through `WithOptions`. To use another key with `AnthropicAwsClient`, build a new client with `ApiKey` in `AwsClientOptions`. - If you relied on sending both, for example a token for a gateway and a key for the API behind it, set `X-Api-Key` with `ExtraHeaders` and keep `AuthToken`. Have the gateway remove its `Authorization` header before it forwards the request. The Claude API expects one credential per request. + If you relied on sending both, for example a token for a gateway and a key for the API behind it, set `X-Api-Key` with `ExtraHeaders` and keep `AuthToken`. Have the gateway remove its `Authorization` header before it forwards the request. The Claude API expects one credential for each request. - In v1 a client that had both an API key and an auth token sent both, each in its own header. The credential comes from `option.WithAPIKey`, `option.WithAuthToken`, `option.WithConfig`, `option.WithProfile`, or `option.WithFederationTokenProvider`. + In v1 a client that had both an API key and an authentication token sent both, each in its own header. The credential comes from `option.WithAPIKey`, `option.WithAuthToken`, `option.WithConfig`, `option.WithProfile`, or `option.WithFederationTokenProvider`. * **Two of them passed to `anthropic.NewClient` are an error.** `NewClient` returns no error, so every request the client makes fails with it. `NewClient` already applies `anthropic.DefaultClientOptions()`, so don't pass its result as well: the credential it finds in the environment then counts as one you passed. * **One of them is used as it is.** No credential is read from the environment or from a profile on disk. In v1 `ANTHROPIC_API_KEY` and `ANTHROPIC_AUTH_TOKEN` won over the last three. @@ -1240,13 +1240,13 @@ An API key and an auth token now share a header, so an SDK client holds one cred The doc comments on `anthropic.NewClient` and `anthropic.DefaultClientOptions` in [`client.go`](https://github.com/anthropics/anthropic-sdk-go/blob/main/client.go) have the details. - If you relied on sending both, for example a token for a gateway and a key for the API behind it, set `X-Api-Key` with `option.WithHeader` and keep `option.WithAuthToken`. Have the gateway remove its `Authorization` header before it forwards the request. The Claude API expects one credential per request. + If you relied on sending both, for example a token for a gateway and a key for the API behind it, set `X-Api-Key` with `option.WithHeader` and keep `option.WithAuthToken`. Have the gateway remove its `Authorization` header before it forwards the request. The Claude API expects one credential for each request. `ANTHROPIC_CUSTOM_HEADERS` and `ANTHROPIC_WEBHOOK_SIGNING_KEY` now apply to every client that `anthropic.NewClient` builds. In v1 they were read only when neither the environment nor a profile on disk held a credential. - In v2 a client that had both an API key and an auth token sent both, each in its own header. The credential is one of `apiKey`, `authToken`, or `configurationProvider` on the `AnthropicOkHttpClient`, `AnthropicOkHttpClientAsync`, and `AnthropicBackend` builders. + In v2 a client that had both an API key and an authentication token sent both, each in its own header. The credential is one of `apiKey`, `authToken`, or `configurationProvider` on the `AnthropicOkHttpClient`, `AnthropicOkHttpClientAsync`, and `AnthropicBackend` builders. * **Set at most one.** With two on one builder, `build()` throws an `IllegalStateException` that names them. `null` or an empty `Optional` does not count. * **The one you set is the only one.** `fromEnv()`, called before or after, takes no credential from the environment or from a profile on disk. In v2, a key or token that `fromEnv()` found could be sent as well, or instead. @@ -1276,15 +1276,15 @@ An API key and an auth token now share a header, so an SDK client holds one cred .build(); ``` - Have the gateway remove its `Authorization` header before it forwards the request. The Claude API expects one credential per request. + Have the gateway remove its `Authorization` header before it forwards the request. The Claude API expects one credential for each request. - Earlier versions sent both an API key and an auth token when the client had both, each in its own header. `Anthropic\Client` takes one credential, from `apiKey`, `authToken`, or `credentials`: + Earlier versions sent both an API key and an authentication token when the client had both, each in its own header. `Anthropic\Client` takes one credential, from `apiKey`, `authToken`, or `credentials`: * Passing more than one of them throws `\InvalidArgumentException`. Only `null` counts as not passed. An empty string counts as passed, so `new Client(apiKey: '')` sends no credential. * Passing one uses it, and no credential is read from the environment or from a profile on disk. With `ANTHROPIC_API_KEY` set, `new Client(authToken: $token)` sends the token. Earlier versions sent the environment's key with it. - * Passing none uses the first of these that is set: `ANTHROPIC_API_KEY`, `ANTHROPIC_AUTH_TOKEN`, the profile named by `ANTHROPIC_PROFILE`, the workload identity federation variables, the active profile on disk (the one the `active_config` file names, otherwise `default`). Earlier versions used the active profile before the federation variables, and used no profile when there was no `active_config` file. They also skipped an `ANTHROPIC_PROFILE` that named a missing or invalid profile. For that, `new Client()` now throws `Anthropic\Core\Exceptions\AnthropicException`. With both `ANTHROPIC_API_KEY` and `ANTHROPIC_AUTH_TOKEN` set, the client sends the key and its `authToken` property is empty. The first client built that way also writes a warning with `error_log()`, once per process, which on a web server means once per request: `Anthropic: ANTHROPIC_API_KEY and ANTHROPIC_AUTH_TOKEN are both set. Using ANTHROPIC_API_KEY.` To stop it, unset the variable you don't use. + * Passing none uses the first of these that is set: `ANTHROPIC_API_KEY`, `ANTHROPIC_AUTH_TOKEN`, the profile named by `ANTHROPIC_PROFILE`, the workload identity federation variables, the active profile on disk (the one the `active_config` file names, otherwise `default`). Earlier versions used the active profile before the federation variables, and used no profile when there was no `active_config` file. They also skipped an `ANTHROPIC_PROFILE` that named a missing or invalid profile. For that, `new Client()` now throws `Anthropic\Core\Exceptions\AnthropicException`. With both `ANTHROPIC_API_KEY` and `ANTHROPIC_AUTH_TOKEN` set, the client sends the key and its `authToken` property is empty. The first client built that way also writes a warning with `error_log()`, once for each process, which on a web server means once for each request: `Anthropic: ANTHROPIC_API_KEY and ANTHROPIC_AUTH_TOKEN are both set. Using ANTHROPIC_API_KEY.` To stop it, unset the variable you don't use. ```php // Before: sent the key as X-Api-Key and the token as Authorization. @@ -1292,7 +1292,7 @@ An API key and an auth token now share a header, so an SDK client holds one cred $client = new Client(apiKey: $key, authToken: $token); ``` - If you relied on sending both, for example a token for a gateway and a key for the API behind it, pass the token as `authToken` and add `X-Api-Key` in a middleware like the one under [If a proxy or gateway reads `X-Api-Key`](https://platform.claude.com/docs/en/api/migration-2026-10-21#sdk-proxy-x-api-key), without the `withoutHeader` call. Have the gateway remove its `Authorization` header before it forwards the request. The Claude API expects one credential per request. + If you relied on sending both, for example a token for a gateway and a key for the API behind it, pass the token as `authToken` and add `X-Api-Key` in a middleware like the one under [If a proxy or gateway reads `X-Api-Key`](https://platform.claude.com/docs/en/api/migration-2026-10-21#sdk-proxy-x-api-key), without the `withoutHeader` call. Have the gateway remove its `Authorization` header before it forwards the request. The Claude API expects one credential for each request. @@ -1302,7 +1302,7 @@ An API key and an auth token now share a header, so an SDK client holds one cred * **One passed:** The client uses it, and does not fall back to a credential from the environment or from a profile on disk. * **None passed:** The client uses the first of these it finds: `ANTHROPIC_API_KEY`, `ANTHROPIC_AUTH_TOKEN`, `ANTHROPIC_PROFILE`, the workload identity federation variables, the active profile on disk. The order has not changed, but with both `ANTHROPIC_API_KEY` and `ANTHROPIC_AUTH_TOKEN` set, `client.auth_token` is now `nil`. An empty `ANTHROPIC_API_KEY` or `ANTHROPIC_AUTH_TOKEN` now counts as unset, where earlier versions let an empty `ANTHROPIC_API_KEY` hide the token and everything after it. - When no credential is passed and both `ANTHROPIC_API_KEY` and `ANTHROPIC_AUTH_TOKEN` are set, the SDK also warns once per process, on standard error through `Kernel#warn`: `Anthropic: ANTHROPIC_API_KEY and ANTHROPIC_AUTH_TOKEN are both set. Using ANTHROPIC_API_KEY.` Unset the variable you don't use to silence it. + When no credential is passed and both `ANTHROPIC_API_KEY` and `ANTHROPIC_AUTH_TOKEN` are set, the SDK also warns once for each process, on standard error through `Kernel#warn`: `Anthropic: ANTHROPIC_API_KEY and ANTHROPIC_AUTH_TOKEN are both set. Using ANTHROPIC_API_KEY.` Unset the variable you don't use to silence it. ```ruby # Before: sent the key and ignored the token. @@ -1321,7 +1321,7 @@ These changes each affect one SDK or the CLI. - **`--api-key` and `--auth-token` are removed.** `ant` no longer takes an API key or auth token as a flag value, because a value on the command line is visible in shell history and process listings. Both flags have printed a deprecation warning since v1.27.0. A command that still passes one stops with `flag provided but not defined`. + **`--api-key` and `--auth-token` are removed.** `ant` no longer takes an API key or authentication token as a flag value, because a value on the command line is visible in shell history and process listings. Both flags have printed a deprecation warning since v1.27.0. A command that still passes one stops with `flag provided but not defined`. | Removed | Use instead | | ---------------------- | ----------------------------------------------------------- | @@ -1342,7 +1342,7 @@ These changes each affect one SDK or the CLI. `--api-key-stdin` and `--auth-token-stdin` read all of standard input, so a command that uses one takes its request body from flags. - `ant auth status`, the first-run prompt of `ant apply`, and the note about multiple auth sources now call these credentials `ANTHROPIC_API_KEY` and `ANTHROPIC_AUTH_TOKEN`, where they printed `--api-key / ANTHROPIC_API_KEY` and `--auth-token / ANTHROPIC_AUTH_TOKEN`. + `ant auth status`, the first-run prompt of `ant apply`, and the note about multiple authentication sources now call these credentials `ANTHROPIC_API_KEY` and `ANTHROPIC_AUTH_TOKEN`, where they printed `--api-key / ANTHROPIC_API_KEY` and `--auth-token / ANTHROPIC_AUTH_TOKEN`. @@ -1362,11 +1362,13 @@ These changes each affect one SDK or the CLI. + **Go 1.25 or later is required.** + **`vertex.DefaultVersion` and `bedrock.DefaultVersion` are removed.** - **Getters that now return an `Optional`.** `apiKey()` and `authToken()` on `AnthropicBackend` now return an `Optional`, as `apiKey()` on `AwsBackend` and `BedrockMantleBackend` already did. In v2 each returned a `String`, which was `null` when the backend had no credential of that kind. + **Getters that now return an `Optional`.** `apiKey()` and `authToken()` on `AnthropicBackend` now return an `Optional`, as `apiKey()` on `AwsBackend` and `BedrockMantleBackend` already did. In v2 each returned a `String`, which was `null` when `AnthropicBackend` had no credential of that kind. ```java // Before diff --git a/content/en/api/overview.md b/content/en/api/overview.md index 7cf9b73446..71af519699 100644 --- a/content/en/api/overview.md +++ b/content/en/api/overview.md @@ -14,7 +14,7 @@ The Claude API is a RESTful API at `https://api.anthropic.com` that provides pro To use the Claude API, you'll need: -* A [Claude Console account](https://platform.claude.com) +* A [Claude Console account](https://platform.claude.com/) * An [API key](https://platform.claude.com/settings/keys) from the Console, or a configured [Workload Identity Federation](https://platform.claude.com/docs/en/manage-claude/workload-identity-federation) rule For step-by-step setup instructions, see [Get started](https://platform.claude.com/docs/en/get-started). @@ -163,7 +163,7 @@ The API enforces rate limits and spend limits to prevent misuse and manage capac * **Spend limits:** Maximum monthly cost for API usage * **Rate limits:** Maximum number of requests per minute (RPM) and tokens per minute (TPM) -In the Console, you can view your rate limits on the [Rate limits](https://platform.claude.com/usage/limits) page and your spend limits on the [Billing](https://platform.claude.com/settings/billing) page. For higher rate limits or a higher monthly spend cap, use **Request tier increase** on the **Rate limits** page. +You can view your rate limits under [Rate limits in the Claude Console](https://platform.claude.com/usage/limits) and your spend limits on the Console's [Billing](https://platform.claude.com/settings/billing) page. For higher rate limits or a higher monthly spend cap, use **Request tier increase** on the **Rate limits** page. For detailed information about limits, tiers, and the token bucket algorithm used for rate limiting, see [Rate limits](https://platform.claude.com/docs/en/api/rate-limits). diff --git a/content/en/api/rate-limits.md b/content/en/api/rate-limits.md index 15426d4a84..8a9099bfba 100644 --- a/content/en/api/rate-limits.md +++ b/content/en/api/rate-limits.md @@ -46,7 +46,7 @@ Organizations on the Custom tier have no monthly spend cap; limits are arranged Once you reach your tier's spend cap, API usage pauses until 00:00 UTC on the first day of the next month, unless you request a higher limit sooner. While usage is paused, API requests return HTTP 429: -```json +```text { "type": "error", "error": { @@ -244,7 +244,7 @@ The response includes `anthropic-fast-*` headers that indicate your fast mode ra You can monitor your rate limit usage on the [Usage](https://platform.claude.com/usage) page of the [Claude Console](https://platform.claude.com/). -In addition to providing token and request charts, the Usage page provides two separate rate limit charts. Use these charts to see what headroom you have to grow, identify when you might be hitting peak use, understand what rate limits to request, and learn how to improve your caching rates. The charts visualize a number of metrics for a given rate limit (for example, for each model): +In addition to providing token and request charts, the **Usage** page provides two separate rate limit charts. Use these charts to see what headroom you have to grow, identify when you might be hitting peak use, understand what rate limits to request, and learn how to improve your caching rates. The charts visualize a number of metrics for a given rate limit (for example, for each model): * The **Rate Limit - Input Tokens** chart includes: diff --git a/content/en/api/service-tiers.md b/content/en/api/service-tiers.md index 0192064c07..9b2add588d 100644 --- a/content/en/api/service-tiers.md +++ b/content/en/api/service-tiers.md @@ -171,7 +171,7 @@ You can control which service tiers can be used for a request by setting the `se client = Anthropic::Client.new message = client.messages.create( - model: "claude-opus-4-8", + model: Anthropic::Model::CLAUDE_OPUS_4_8, max_tokens: 1024, messages: [{ role: "user", content: "Hello, Claude!" }], service_tier: :auto # Automatically use Priority Tier when available, fallback to standard @@ -187,7 +187,7 @@ The `service_tier` parameter accepts the following values: The response `usage` object also includes the service tier assigned to the request: -```json +```text wrap { "usage": { "input_tokens": 410, diff --git a/content/en/api/versioning.md b/content/en/api/versioning.md index 616bab8bda..690f9dc761 100644 --- a/content/en/api/versioning.md +++ b/content/en/api/versioning.md @@ -20,7 +20,7 @@ Generally, if you are using the API as documented in this reference, Anthropic w ## Version history -Anthropic recommends using the latest API version whenever possible. Previous versions are considered deprecated and may be unavailable for new users. +Anthropic recommends using the latest API version whenever possible. * `2026-10-21` diff --git a/content/en/build-with-claude/batch-processing.md b/content/en/build-with-claude/batch-processing.md index 40204c7900..6b250fedc9 100644 --- a/content/en/build-with-claude/batch-processing.md +++ b/content/en/build-with-claude/batch-processing.md @@ -387,7 +387,7 @@ You can [create a batch](https://platform.claude.com/docs/en/api/messages/batche { custom_id: "my-first-request", params: { - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, messages: [ { role: "user", content: "Hello, world" } @@ -397,7 +397,7 @@ You can [create a batch](https://platform.claude.com/docs/en/api/messages/batche { custom_id: "my-second-request", params: { - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, messages: [ { role: "user", content: "Hi again, friend" } @@ -421,7 +421,7 @@ In this example, two separate requests are batched together for asynchronous pro When a batch is first created, the response has a processing status of `in_progress`. -```json Output +```text Output wrap { "id": "msgbatch_01HkcTjaV5uDC8jWR4ZsDV8d", "type": "message_batch", @@ -917,7 +917,7 @@ Results of the batch are available for download at the `results_url` property on The results are in `.jsonl` format, where each line is a valid JSON object representing the result of a single request in the Message Batch. For each streamed result, you can do something different depending on its `custom_id` and result type. Here is an example set of results: -```jsonl .jsonl file +```text .jsonl file {"custom_id":"my-second-request","result":{"type":"succeeded","message":{"id":"msg_014VwiXbi91y3JMjcpyGBHX5","type":"message","role":"assistant","model":"claude-opus-5-5","content":[{"type":"text","text":"Hello again! It's nice to see you. How can I assist you today? Is there anything specific you'd like to chat about or any questions you have?"}],"stop_reason":"end_turn","stop_sequence":null,"usage":{"input_tokens":11,"output_tokens":36}}}} {"custom_id":"my-first-request","result":{"type":"succeeded","message":{"id":"msg_01FqfsLoHwgeFbguDgpz48m7","type":"message","role":"assistant","model":"claude-opus-5-5","content":[{"type":"text","text":"Hello! How can I assist you today? Feel free to ask me any questions or let me know if there's anything you'd like to chat about."}],"stop_reason":"end_turn","stop_sequence":null,"usage":{"input_tokens":10,"output_tokens":34}}}} ``` @@ -1016,7 +1016,7 @@ You can cancel a Message Batch that is currently processing using the [cancel en The response shows the batch in a `canceling` state: -```json Output +```text Output wrap { "id": "msgbatch_013Zva2CMHLNnXjNJJKqJ2EF", "type": "message_batch", @@ -1492,7 +1492,7 @@ Example of implementing prompt caching in a batch: { custom_id: "my-first-request", params: { - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, system: [ { @@ -1513,7 +1513,7 @@ Example of implementing prompt caching in a batch: { custom_id: "my-second-request", params: { - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, system: [ { @@ -1770,7 +1770,7 @@ A single 300k-token generation can take over an hour to complete, so plan your b { custom_id: "long-form-request", params: { - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 300_000, messages: [ { role: "user", content: "Write a comprehensive technical guide to building distributed systems, covering architecture patterns, consistency models, fault tolerance, and operational best practices." } @@ -1837,7 +1837,7 @@ For ZDR eligibility across all features, see [API and data retention](https://pl - No, once a batch has been submitted, it cannot be modified. If you need to make changes, you should cancel the current batch and submit a new one. Note that cancellation might not take immediate effect. + No, once a batch has been submitted, it cannot be modified. If you need to make changes, cancel the current batch and submit a new one. Note that cancellation might not take immediate effect. diff --git a/content/en/build-with-claude/cache-diagnostics.md b/content/en/build-with-claude/cache-diagnostics.md index 0839413bb6..7ff955b639 100644 --- a/content/en/build-with-claude/cache-diagnostics.md +++ b/content/en/build-with-claude/cache-diagnostics.md @@ -973,7 +973,7 @@ The `diagnostics` field on the response `Message` has three possible values: When `cache_miss_reason` is non-null, it looks like this: -```json +```text wrap { "id": "msg_01Xyz...", "type": "message", diff --git a/content/en/build-with-claude/citations.md b/content/en/build-with-claude/citations.md index c30fff08f9..14d1a10060 100644 --- a/content/en/build-with-claude/citations.md +++ b/content/en/build-with-claude/citations.md @@ -276,7 +276,7 @@ The following example shows how to enable citations on a plain text document wit client = Anthropic::Client.new response = client.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, messages: [ { @@ -374,7 +374,7 @@ Integrate citations with Claude in these steps: ### Token costs * Enabling citations incurs a slight increase in input tokens because of system prompt additions and document chunking. -* However, the citations feature is very efficient with output tokens. Internally, the model outputs citations in a standardized format that are then parsed into cited text and document location indices. The `cited_text` field is provided for convenience and does not count toward output tokens. +* However, the citations feature is very efficient with output tokens. Internally, the model outputs citations in a standardized format, and those citations are then parsed into cited text and document location indices. The `cited_text` field is provided for convenience and does not count toward output tokens. * When passed back in subsequent conversation turns, `cited_text` is also not counted toward input tokens. ### Feature compatibility @@ -666,7 +666,7 @@ The citation blocks generated in responses cannot be cached directly, but the so " ... " * 1000 # Minimum cacheable length response = client.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, messages: [ { @@ -945,7 +945,7 @@ Plain text documents are automatically chunked into sentences. You can provide t ```ruby Ruby cited_response = client.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, messages: [ { @@ -974,7 +974,7 @@ Plain text documents are automatically chunked into sentences. You can provide t - ```json + ```text { "type": "char_location", "cited_text": "The exact text being cited", // not counted toward output tokens @@ -1255,7 +1255,7 @@ PDF documents can be provided as base64-encoded data, as a URL, or by `file_id`. pdf_base64 = Base64.strict_encode64(File.binread("/path/to/document.pdf")) response = client.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, messages: [ { @@ -1761,7 +1761,7 @@ PDF documents can be provided as base64-encoded data, as a URL, or by `file_id`. ```ruby Ruby cited_response = client.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, messages: [ { @@ -1790,7 +1790,7 @@ PDF documents can be provided as base64-encoded data, as a URL, or by `file_id`. - ```json + ```text { "type": "page_location", "cited_text": "The exact text being cited", // not counted toward output tokens @@ -2076,7 +2076,7 @@ Custom content documents give you control over citation granularity. No addition client = Anthropic::Client.new response = client.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, messages: [ { @@ -2109,7 +2109,7 @@ Custom content documents give you control over citation granularity. No addition - ```json + ```text { "type": "content_block_location", "cited_text": "The exact text being cited", // not counted toward output tokens @@ -2127,7 +2127,7 @@ Custom content documents give you control over citation granularity. No addition When citations are enabled, responses include multiple text blocks with citations: -```json +```text wrap { "content": [ { "type": "text", "text": "According to the document, " }, @@ -2206,7 +2206,7 @@ For streaming responses, citations arrive as a `citations_delta` delta type insi - ```sse + ```text event: message_start data: {"type": "message_start", ...} diff --git a/content/en/build-with-claude/claude-in-amazon-bedrock.md b/content/en/build-with-claude/claude-in-amazon-bedrock.md index bddd2266fb..fe43864840 100644 --- a/content/en/build-with-claude/claude-in-amazon-bedrock.md +++ b/content/en/build-with-claude/claude-in-amazon-bedrock.md @@ -102,8 +102,8 @@ Anthropic's [client SDKs](https://platform.claude.com/docs/en/cli-sdks-libraries ```kotlin - implementation("com.anthropic:anthropic-java:3.0.0") - implementation("com.anthropic:anthropic-java-bedrock:3.0.0") + implementation("com.anthropic:anthropic-java:3.1.0") + implementation("com.anthropic:anthropic-java-bedrock:3.1.0") ``` @@ -112,12 +112,12 @@ Anthropic's [client SDKs](https://platform.claude.com/docs/en/cli-sdks-libraries com.anthropic anthropic-java - 3.0.0 + 3.1.0 com.anthropic anthropic-java-bedrock - 3.0.0 + 3.1.0 ``` diff --git a/content/en/build-with-claude/claude-in-microsoft-foundry.md b/content/en/build-with-claude/claude-in-microsoft-foundry.md index 89152b3450..359d043364 100644 --- a/content/en/build-with-claude/claude-in-microsoft-foundry.md +++ b/content/en/build-with-claude/claude-in-microsoft-foundry.md @@ -80,8 +80,8 @@ Anthropic's [client SDKs](https://platform.claude.com/docs/en/cli-sdks-libraries ```kotlin - implementation("com.anthropic:anthropic-java:3.0.0") - implementation("com.anthropic:anthropic-java-foundry:3.0.0") + implementation("com.anthropic:anthropic-java:3.1.0") + implementation("com.anthropic:anthropic-java-foundry:3.1.0") // For Entra ID authentication, also add the Azure Identity library implementation("com.azure:azure-identity:1.18.3") @@ -93,12 +93,12 @@ Anthropic's [client SDKs](https://platform.claude.com/docs/en/cli-sdks-libraries com.anthropic anthropic-java - 3.0.0 + 3.1.0 com.anthropic anthropic-java-foundry - 3.0.0 + 3.1.0 diff --git a/content/en/build-with-claude/claude-on-amazon-bedrock-legacy.md b/content/en/build-with-claude/claude-on-amazon-bedrock-legacy.md index 5c3dff0432..0a1540f28f 100644 --- a/content/en/build-with-claude/claude-on-amazon-bedrock-legacy.md +++ b/content/en/build-with-claude/claude-on-amazon-bedrock-legacy.md @@ -58,20 +58,20 @@ Anthropic's [client SDKs](https://platform.claude.com/docs/en/cli-sdks-libraries ```groovy Gradle - implementation("com.anthropic:anthropic-java:3.0.0") - implementation("com.anthropic:anthropic-java-bedrock:3.0.0") + implementation("com.anthropic:anthropic-java:3.1.0") + implementation("com.anthropic:anthropic-java-bedrock:3.1.0") ``` ```xml Maven com.anthropic anthropic-java - 3.0.0 + 3.1.0 com.anthropic anthropic-java-bedrock - 3.0.0 + 3.1.0 ``` @@ -326,14 +326,14 @@ The following examples show how to generate text from Claude on Bedrock: from anthropic import AnthropicBedrock client = AnthropicBedrock( - # Authenticate by either providing the keys below or use the default AWS credential providers, such as + # Authenticate by either providing the following keys or using the default AWS credential providers, such as # using ~/.aws/credentials or the "AWS_SECRET_ACCESS_KEY" and "AWS_ACCESS_KEY_ID" environment variables. aws_access_key="", aws_secret_key="", # Temporary credentials can be used with aws_session_token. # Read more at https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html. aws_session_token="", - # aws_region changes the aws region to which the request is made. If it is not provided, the SDK reads + # aws_region changes the AWS region to which the request is made. If it is not provided, the SDK reads # AWS_REGION / AWS_DEFAULT_REGION, then the region configured for your boto3 session or AWS profile # (including ~/.aws/config), and raises ValueError if no region can be resolved. aws_region="us-west-2", @@ -353,7 +353,7 @@ The following examples show how to generate text from Claude on Bedrock: import AnthropicBedrock from "@anthropic-ai/bedrock-sdk"; const client = new AnthropicBedrock({ - // Authenticate by either providing the keys below or use + // Authenticate by either providing the following keys or using // the default AWS credential providers, such as // ~/.aws/credentials or the "AWS_SECRET_ACCESS_KEY" and // "AWS_ACCESS_KEY_ID" environment variables. @@ -364,7 +364,7 @@ The following examples show how to generate text from Claude on Bedrock: // Read more at https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html. awsSessionToken: "", - // awsRegion changes the aws region to which the request + // awsRegion changes the AWS region to which the request // is made. By default, the SDK reads AWS_REGION, and if // that's not present, defaults to us-east-1. Note that // the SDK does not read ~/.aws/config for the region. @@ -796,9 +796,9 @@ Regional endpoints include a 10 percent pricing premium over global endpoints. **Regional endpoints (CRIS):** * Route traffic through specific geographic regions -* Required for data residency and compliance requirements -* Available for US, EU, Japan, and Asia-Pacific -* 10 percent pricing premium reflects infrastructure costs for dedicated regional capacity +* Are required for data residency and compliance requirements +* Are available for US, EU, Japan, and Asia-Pacific +* Carry a 10 percent pricing premium that reflects infrastructure costs for dedicated regional capacity ### Implementation diff --git a/content/en/build-with-claude/claude-on-vertex-ai.md b/content/en/build-with-claude/claude-on-vertex-ai.md index 9e20fd700c..fd95d3b176 100644 --- a/content/en/build-with-claude/claude-on-vertex-ai.md +++ b/content/en/build-with-claude/claude-on-vertex-ai.md @@ -45,20 +45,20 @@ First, install Anthropic's [client SDK](https://platform.claude.com/docs/en/cli- ```groovy Gradle - implementation("com.anthropic:anthropic-java:3.0.0") - implementation("com.anthropic:anthropic-java-vertex:3.0.0") + implementation("com.anthropic:anthropic-java:3.1.0") + implementation("com.anthropic:anthropic-java-vertex:3.1.0") ``` ```xml Maven com.anthropic anthropic-java - 3.0.0 + 3.1.0 com.anthropic anthropic-java-vertex - 3.0.0 + 3.1.0 ``` @@ -419,16 +419,16 @@ Regional and multi-region endpoints include a 10 percent pricing premium over gl **Multi-region endpoints:** * Dynamically route requests across regions within a geographic area (currently `us` and `eu`) -* Useful when you need data residency within a broad geography but want higher availability than a single region -* 10 percent pricing premium over global endpoints -* Only supports pay-as-you-go traffic (provisioned throughput requires regional endpoints) +* Are useful when you need data residency within a broad geography but want higher availability than a single region +* Carry a 10 percent pricing premium over global endpoints +* Only support pay-as-you-go traffic (provisioned throughput requires regional endpoints) **Regional endpoints:** * Route traffic through specific geographic regions -* Required for single-region data residency, strict compliance mandates, or provisioned throughput +* Are required for single-region data residency, strict compliance mandates, or provisioned throughput * Support both pay-as-you-go and provisioned throughput -* 10 percent pricing premium reflects infrastructure costs for dedicated regional capacity +* Carry a 10 percent pricing premium that reflects infrastructure costs for dedicated regional capacity ### Implementation @@ -623,7 +623,7 @@ Set the `region` parameter to a multi-region identifier: `"us"` for the United S ```bash cURL - # The multi-region identifier, "us" or "eu", appears in the host name and in the path + # The multi-region identifier, "us" or "eu", appears in the hostname and in the path curl https://aiplatform.us.rep.googleapis.com/v1/projects/MY_PROJECT_ID/locations/us/publishers/anthropic/models/claude-opus-5-5:rawPredict \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ @@ -810,7 +810,7 @@ Specify a specific region such as `"us-east5"` or `"europe-west1"`: ```bash cURL # Specific regional endpoints support Claude Sonnet 4.6 and earlier; newer models use the global or multi-region endpoints - # The region, here us-east5, appears in the host name and in the path + # The region, here us-east5, appears in the hostname and in the path curl https://us-east5-aiplatform.googleapis.com/v1/projects/MY_PROJECT_ID/locations/us-east5/publishers/anthropic/models/claude-sonnet-4-6:rawPredict \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ diff --git a/content/en/build-with-claude/claude-platform-on-aws.md b/content/en/build-with-claude/claude-platform-on-aws.md index 74e13deee4..eb00ba0d26 100644 --- a/content/en/build-with-claude/claude-platform-on-aws.md +++ b/content/en/build-with-claude/claude-platform-on-aws.md @@ -96,7 +96,7 @@ Setting up Claude Platform on AWS takes four phases: sign up on the AWS Console Access to the Claude Console is federated through AWS IAM: 1. Assume an IAM role with the `aws-external-anthropic:AssumeConsole` permission. See [Console access](https://platform.claude.com/docs/en/api/claude-platform-on-aws-iam-actions#console-access). - 2. From the **Claude Platform on AWS** service page, choose **Open Claude Console**. The AWS Console issues a JWT and redirects you to `platform.claude.com`. + 2. From the **Claude Platform on AWS** service page, click **Open Claude Console**. The AWS Console issues a JWT and redirects you to `platform.claude.com`. 3. On first sign-in, you're prompted for an email address. Enter your work email. The platform provisions your Claude Console user just-in-time. When you're signed in through the AWS Console, the Claude Console scopes to your Claude Platform on AWS organization. An **Account managed by AWS** indicator appears in the bottom-left of the Claude Console sidebar. @@ -200,7 +200,7 @@ For simpler integration paths (local development and scripts), you can authentic Generate API keys in the **AWS Console** under **Claude Platform on AWS → API keys**. Click **Generate a key**, then copy the key value. Grant the `aws-external-anthropic:CallWithBearerToken` IAM action to the principals that should be allowed to use API key authentication. - API keys for Claude Platform on AWS are managed in the AWS Console, not the Claude Console. Keys created in the standard Claude Console at [platform.claude.com](https://platform.claude.com) (for first-party API access) don't work with the Claude Platform on AWS endpoint. + API keys for Claude Platform on AWS are managed in the AWS Console, not the Claude Console. Keys created in the standard Claude Console at [platform.claude.com](https://platform.claude.com/) (for first-party API access) don't work with the Claude Platform on AWS endpoint. #### Short-term API keys @@ -305,20 +305,20 @@ Anthropic's [client SDKs](https://platform.claude.com/docs/en/cli-sdks-libraries ```kotlin Gradle - implementation("com.anthropic:anthropic-java:3.0.0") - implementation("com.anthropic:anthropic-java-aws:3.0.0") + implementation("com.anthropic:anthropic-java:3.1.0") + implementation("com.anthropic:anthropic-java-aws:3.1.0") ``` ```xml Maven com.anthropic anthropic-java - 3.0.0 + 3.1.0 com.anthropic anthropic-java-aws - 3.0.0 + 3.1.0 ``` @@ -794,7 +794,7 @@ Create additional workspaces, rename a workspace, or archive a workspace from th ## Using the Claude Console -Claude Platform on AWS uses the standard Claude Console at [platform.claude.com](https://platform.claude.com). When you sign in from the AWS Console, an **Account managed by AWS** indicator appears in the bottom-left of the Claude Console sidebar and the Console scopes to your Claude Platform on AWS organization. It provides usage analytics, cost breakdowns, rate limit visibility, workspace management, and pages for managing files, Agent Skills, batch jobs, and Claude Managed Agents resources (agents, sessions, environments, credential vaults, memory stores, and webhooks). +Claude Platform on AWS uses the standard Claude Console at [platform.claude.com](https://platform.claude.com/). When you sign in from the AWS Console, an **Account managed by AWS** indicator appears in the bottom-left of the Claude Console sidebar, and the Console scopes to your Claude Platform on AWS organization. It provides usage analytics, cost breakdowns, rate limit visibility, workspace management, and pages for managing files, Agent Skills, batch jobs, and Claude Managed Agents resources (agents, sessions, environments, credential vaults, memory stores, and webhooks). ### Signing in @@ -805,7 +805,7 @@ Access to the Claude Console is federated through AWS IAM. See [Set up your acco 3. Click **Open Claude Console**. The AWS Console issues a JWT and redirects you to `platform.claude.com`. 4. On first sign-in, you're prompted for an email address. Enter your work email. The platform provisions your Claude Console user just-in-time. -Two Claude Console roles are available: **Admin** and **Developer**. The Admin role grants access to all Claude Console pages and settings available for Claude Platform on AWS. The Developer role grants read access to usage, cost, rate limit, and workspace information. Contact your Anthropic account representative to assign the Admin or Developer role to a principal. +Two Claude Console roles are available: **Admin** and **Developer**. The Admin role grants access to all Claude Console pages and settings available for Claude Platform on AWS. The Developer role grants read access to usage, cost, request log, rate limit, and workspace information. Contact your Anthropic account representative to assign the Admin or Developer role to a principal. ### Available pages @@ -816,6 +816,7 @@ The **Through AWS gateway** column indicates whether the page reads and writes d | **Usage** | Yes | No | View token usage by model, workspace, and dimension. Data can take a few minutes to appear after a request. | | **Cost** | Yes | No | View cost breakdowns by model and workspace. AWS Cost Explorer shows the aggregated [Claude Consumption Unit (CCU)](https://platform.claude.com/docs/en/build-with-claude/claude-platform-on-aws#billing) line item. | | **Rate limits** | Yes | No | View rate limits (read-only). Tier increases go through your Anthropic account representative; see [Rate limits and quotas](https://platform.claude.com/docs/en/build-with-claude/claude-platform-on-aws#rate-limits-and-quotas). | +| **Logs** | Yes | No | View per-request metadata such as time, model, workspace, token counts, and status. Log entries do not include prompts or responses. | | **Workspaces** | Yes | Yes (except spend limits) | View per-region workspaces. With the Admin role, you can also create, rename, and archive workspaces, and set per-workspace [spend limits](https://platform.claude.com/docs/en/build-with-claude/claude-platform-on-aws#spend-limits). | | **Encryption keys** | Yes | Yes | A section of the [Data retention](https://platform.claude.com/settings/privacy#encryption-keys) page (`platform.claude.com/settings/privacy`) in the Claude Console, shown while **Organization** is selected in the dropdown menu at the top of the page. Register AWS KMS keys there (Admin role), as described in [Set up CMEK on Claude Platform on AWS](https://platform.claude.com/docs/en/manage-claude/cmek-claude-platform-on-aws). To attach a registered key to a workspace, select the workspace from that dropdown menu, then select the key under **Encryption key**. | | **Files** | Yes | Yes | View and manage uploaded files. | @@ -1206,7 +1207,7 @@ AWS provides five managed policies (`AnthropicFullAccess`, `AnthropicReadOnlyAcc ## Additional resources - + View usage, cost, and workspaces in the Claude Console. Sign in through the AWS Console. diff --git a/content/en/build-with-claude/compaction-on-demand.md b/content/en/build-with-claude/compaction-on-demand.md index e570172463..4826b0432d 100644 --- a/content/en/build-with-claude/compaction-on-demand.md +++ b/content/en/build-with-claude/compaction-on-demand.md @@ -281,7 +281,7 @@ Send the conversation as it stands with `"compaction": {"type": "summarize"}`. T ``` -```json Response +```text Response { "id": "msg_013Zva2CMHLNnXjNJJKqJ2EF", "type": "message", diff --git a/content/en/build-with-claude/compaction-threshold.md b/content/en/build-with-claude/compaction-threshold.md index 1c98b90536..564a4f72a0 100644 --- a/content/en/build-with-claude/compaction-threshold.md +++ b/content/en/build-with-claude/compaction-threshold.md @@ -1365,7 +1365,7 @@ When compaction is triggered, the API returns a `compaction` block at the start A long-running conversation might result in multiple compactions. The last compaction block reflects the final state of the prompt, replacing content prior to it with the generated summary. -```json Output +```text Output { "content": [ { @@ -2255,7 +2255,7 @@ This keeps long system prompts cached across multiple compaction events througho Compaction requires an additional sampling step, which contributes to rate limits and billing. The API returns detailed usage information in the response: -```json Output +```text Output wrap { "usage": { "input_tokens": 23000, @@ -2320,8 +2320,7 @@ The token counting endpoint (`/v1/messages/count_tokens`) applies existing `comp ``` ```bash CLI - ant beta:messages count-tokens \ - --beta compact-2026-01-12 <<'YAML' + ant beta:messages count-tokens --beta compact-2026-01-12 <<'YAML' model: claude-opus-5-5 messages: - role: user diff --git a/content/en/build-with-claude/context-editing.md b/content/en/build-with-claude/context-editing.md index 7da069057c..4ae0b55c9a 100644 --- a/content/en/build-with-claude/context-editing.md +++ b/content/en/build-with-claude/context-editing.md @@ -270,7 +270,7 @@ The simplest way to enable tool result clearing is to specify only the strategy client = Anthropic::Client.new response = client.beta.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 4096, messages: [ { role: "user", content: "Search for recent developments in AI" } @@ -893,7 +893,7 @@ Use thinking block clearing to manage context and prompt caching in conversation client = Anthropic::Client.new response = client.beta.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 16000, messages: [{ role: "user", content: "Hello" }], betas: ["context-management-2025-06-27"], @@ -1115,7 +1115,7 @@ Keep thinking blocks from the last 3 assistant turns: client = Anthropic::Client.new response = client.beta.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 16000, messages: [{ role: "user", content: "Hello" }], betas: ["context-management-2025-06-27"], @@ -1312,7 +1312,7 @@ Keep all thinking blocks (maximizes cache hits): client = Anthropic::Client.new response = client.beta.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 16000, messages: [{ role: "user", content: "Hello" }], betas: ["context-management-2025-06-27"], @@ -1678,7 +1678,7 @@ You can use both thinking block clearing and tool result clearing together: client = Anthropic::Client.new response = client.beta.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 16000, messages: [ { @@ -1735,7 +1735,7 @@ You can use both thinking block clearing and tool result clearing together: You can see which context edits were applied to your request using the `context_management` response field, along with helpful statistics about the content and input tokens cleared. -```json Output +```text Output wrap { "id": "msg_013Zva2CMHLNnXjNJJKqJ2EF", "type": "message", @@ -1767,7 +1767,7 @@ You can see which context edits were applied to your request using the `context_ For streaming responses, the context edits are included in the final `message_delta` event: -```json Streaming Response +```text Streaming Response wrap { "type": "message_delta", "delta": { @@ -1823,8 +1823,7 @@ The [token counting](https://platform.claude.com/docs/en/build-with-claude/token ``` ```bash CLI - ant beta:messages count-tokens \ - --beta context-management-2025-06-27 <<'YAML' + ant beta:messages count-tokens --beta context-management-2025-06-27 <<'YAML' model: claude-opus-5-5 messages: - role: user @@ -2042,7 +2041,7 @@ The [token counting](https://platform.claude.com/docs/en/build-with-claude/token client = Anthropic::Client.new response = client.beta.messages.count_tokens( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, messages: [ { role: "user", content: "Continue our conversation..." } ], @@ -2070,7 +2069,7 @@ The [token counting](https://platform.claude.com/docs/en/build-with-claude/token ``` -```json Output +```text Output wrap { "input_tokens": 25000, "context_management": { @@ -2281,7 +2280,7 @@ To use both features together, enable them in your API request: client = Anthropic::Client.new response = client.beta.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 4096, messages: [{ role: "user", content: "Hello" }], tools: [ @@ -2799,7 +2798,7 @@ When using server-side tools, the SDK might incorrectly calculate token usage, c For example, after a web search operation, the API response might show: -```json Output +```text Output wrap { "usage": { "input_tokens": 63000, diff --git a/content/en/build-with-claude/effort.md b/content/en/build-with-claude/effort.md index aca7e8dd48..a34ed82fad 100644 --- a/content/en/build-with-claude/effort.md +++ b/content/en/build-with-claude/effort.md @@ -296,7 +296,7 @@ The API default is `high`. To use `xhigh`, set `effort` explicitly. The value yo | Effort | Guidance for Claude Opus 4.7 | | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `low` | Efficient, but best for short, scoped tasks. Pair `low` with explicit checklists if your task has multiple sections. | -| `medium` | The drop-in for the average workflow where you want good results while reducing costs. | +| `medium` | The setting for the average workflow where you want good results while reducing costs. | | `high` | Advanced use cases that still need a balance of intelligence and token consumption. This is often the best balance of quality and token efficiency. | | `xhigh` | The recommended starting point for coding and agentic work, and for exploratory tasks such as repeated tool calling, detailed web search, and knowledge-base search. Expect meaningfully higher token usage than `high`. | | `max` | Reserve for frontier problems. On most workloads `max` adds significant cost for relatively small quality gains, and on some structured-output or less intelligence-sensitive tasks it can lead to overthinking. | @@ -402,7 +402,8 @@ The following example starts at `high`, then drops to `low` for a routine follow ``` ```bash CLI - ant beta:messages create --beta mid-conversation-output-config-2026-07-01 <<'YAML' + ant beta:messages create \ + --beta mid-conversation-output-config-2026-07-01 <<'YAML' model: claude-fable-5-1 max_tokens: 4096 output_config: diff --git a/content/en/build-with-claude/embeddings.md b/content/en/build-with-claude/embeddings.md index 3741284069..c3ff78443e 100644 --- a/content/en/build-with-claude/embeddings.md +++ b/content/en/build-with-claude/embeddings.md @@ -8,9 +8,9 @@ description: Text embeddings are numerical representations of text that let you When selecting an embeddings provider, there are several factors you can consider depending on your needs and preferences: -* Dataset size and domain specificity: size of the model training dataset and its relevance to the domain you want to embed. Larger or more domain-specific data generally produces better in-domain embeddings -* Inference performance: embedding lookup speed and end-to-end latency. This is a particularly important consideration for large-scale production deployments -* Customization: options for continued training on private data, or specialization of models for very specific domains. This can improve performance on unique vocabularies +* Dataset size and domain specificity: size of the model training dataset and its relevance to the domain you want to embed. Larger or more domain-specific data generally produces better in-domain embeddings. +* Inference performance: embedding lookup speed and end-to-end latency. This is a particularly important consideration for large-scale production deployments. +* Customization: options for continued training on private data, or specialization of models for very specific domains. This can improve performance on unique vocabularies. ## How to get embeddings with Anthropic @@ -88,7 +88,7 @@ export VOYAGE_API_KEY="" For more detail, see [Voyage AI quick start](https://www.mongodb.com/docs/voyageai/quickstart/) in the MongoDB documentation. -You can obtain the embeddings by either using the official [`voyageai` Python package](https://github.com/voyage-ai/voyageai-python) or HTTP requests, as described in the following sections. Voyage AI also has an official TypeScript client. To use it with a model API key from Atlas, set its `environment` option to `https://ai.mongodb.com/v1`, as described in [TypeScript client](https://www.mongodb.com/docs/voyageai/api-and-clients/#typescript-client) in the MongoDB documentation. +You can obtain the embeddings by using either the official [`voyageai` Python package](https://github.com/voyage-ai/voyageai-python) or HTTP requests, as described in the following sections. Voyage AI also has an official TypeScript client. To use it with a model API key from Atlas, set its `environment` option to `https://ai.mongodb.com/v1`, as described in [TypeScript client](https://www.mongodb.com/docs/voyageai/api-and-clients/#typescript-client) in the MongoDB documentation. ### Voyage AI Python library @@ -142,7 +142,7 @@ curl https://ai.mongodb.com/v1/embeddings \ The response is a JSON object containing the embeddings and the token usage: -```json +```text wrap { "object": "list", "data": [ diff --git a/content/en/build-with-claude/extended-thinking.md b/content/en/build-with-claude/extended-thinking.md index 27ce71f4fc..5077d32116 100644 --- a/content/en/build-with-claude/extended-thinking.md +++ b/content/en/build-with-claude/extended-thinking.md @@ -53,8 +53,7 @@ Here is an example of using extended thinking in the Messages API: ``` ```bash CLI - ant messages create \ - --format yaml <<'YAML' + ant messages create --format yaml <<'YAML' model: claude-sonnet-4-6 max_tokens: 16000 thinking: @@ -236,7 +235,7 @@ Here is an example of using extended thinking in the Messages API: client = Anthropic::Client.new response = client.messages.create( - model: "claude-sonnet-4-6", + model: Anthropic::Model::CLAUDE_SONNET_4_6, max_tokens: 16_000, thinking: { type: :enabled, diff --git a/content/en/build-with-claude/fallback-credit.md b/content/en/build-with-claude/fallback-credit.md index 9fce7e5fff..32bc2035fa 100644 --- a/content/en/build-with-claude/fallback-credit.md +++ b/content/en/build-with-claude/fallback-credit.md @@ -6,7 +6,7 @@ description: Avoid paying the prompt-cache cost twice when you retry a refused r Prompt caches are per-model. When a model declines a request and you retry on another model, the conversation prefix already cached for the first model must be written into the new model's cache in full. Cache writes cost more than cache reads. Fallback credit removes that extra cost. The refusal carries a credit token, you echo the token on the retry, and the retry is billed as though the conversation had been on the new model from the start. -You need this page only when you build the retry yourself: over raw HTTP or with custom retry logic. [Server-side fallback](https://platform.claude.com/docs/en/build-with-claude/refusals-and-fallback#server-side-fallback) and the [SDK middleware](https://platform.claude.com/docs/en/build-with-claude/refusals-and-fallback#client-side-fallback) apply fallback credit automatically. If you use either, skip this page. +You need this page only when you build the retry yourself: over raw HTTP or with custom retry logic. [Server-side fallback](https://platform.claude.com/docs/en/build-with-claude/refusals-and-fallback#server-side-fallback) and [client-side fallback with the SDK middleware](https://platform.claude.com/docs/en/build-with-claude/refusals-and-fallback#client-side-fallback) apply fallback credit automatically. If you use either, skip this page. [Refusals and fallback](https://platform.claude.com/docs/en/build-with-claude/refusals-and-fallback) covers detecting refusals and choosing a fallback approach. [Prompt caching](https://platform.claude.com/docs/en/build-with-claude/prompt-caching) explains cache reads and cache writes if those terms are new. diff --git a/content/en/build-with-claude/fast-mode.md b/content/en/build-with-claude/fast-mode.md index 568b47e3e0..bda827e18b 100644 --- a/content/en/build-with-claude/fast-mode.md +++ b/content/en/build-with-claude/fast-mode.md @@ -222,8 +222,8 @@ Fast mode is priced at a multiplier on standard rates across the full context wi Fast mode pricing stacks with other pricing modifiers: -* [Prompt caching multipliers](https://platform.claude.com/docs/en/about-claude/pricing#prompt-caching) apply on top of fast mode pricing -* [Data residency](https://platform.claude.com/docs/en/manage-claude/data-residency) multipliers apply on top of fast mode pricing +* [Prompt caching multipliers](https://platform.claude.com/docs/en/about-claude/pricing#prompt-caching) apply on top of fast mode pricing. +* [Data residency](https://platform.claude.com/docs/en/manage-claude/data-residency) multipliers apply on top of fast mode pricing. For complete pricing details, see the [Pricing](https://platform.claude.com/docs/en/about-claude/pricing#fast-mode-pricing) page. @@ -373,7 +373,7 @@ The response `usage` object includes a `speed` field that indicates which speed ``` -```json Output +```text Output wrap { "id": "msg_01XFDUDYJgAACzvnptvVoYEL", "type": "message", diff --git a/content/en/build-with-claude/files.md b/content/en/build-with-claude/files.md index 644b459dc9..7f807928b1 100644 --- a/content/en/build-with-claude/files.md +++ b/content/en/build-with-claude/files.md @@ -143,7 +143,7 @@ Upload a file to reference in future API calls: The response from uploading a file includes: -```json Response +```text Response wrap { "id": "file_011CNha8iCJcU1wXNR6q4V8w", "type": "file", @@ -348,7 +348,7 @@ Once uploaded, reference the file by passing the `id` from the upload response a ```ruby Ruby response = client.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, messages: [ { @@ -375,12 +375,12 @@ Once uploaded, reference the file by passing the `id` from the upload response a The Files API supports different file types that correspond to different content block types: -| File type | MIME type | Content block type | Use case | -| --------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------- | ------------------ | ---------------------------------- | -| PDF | `application/pdf` | `document` | Text analysis, document processing | -| Plain text | `text/plain` | `document` | Text analysis, processing | -| Images | `image/jpeg`, `image/png`, `image/gif`, `image/webp` | `image` | Image analysis, visual tasks | -| [Datasets, others](https://platform.claude.com/docs/en/agents-and-tools/tool-use/code-execution-tool#upload-and-analyze-your-own-files) | Varies | `container_upload` | Data analysis, visualization | +| File type | MIME type | Content block type | Use case | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------- | ------------------ | ---------------------------------- | +| PDF | `application/pdf` | `document` | Text analysis, document processing | +| Plain text | `text/plain` | `document` | Text analysis, processing | +| Images | `image/jpeg`, `image/png`, `image/gif`, `image/webp` | `image` | Image analysis, visual tasks | +| Datasets, others (see [Upload and analyze your own files](https://platform.claude.com/docs/en/agents-and-tools/tool-use/code-execution-tool#upload-and-analyze-your-own-files)) | Varies | `container_upload` | Data analysis, visualization | #### Document blocks @@ -415,7 +415,7 @@ For images, use the `image` content block: #### Container upload blocks -To send a file to the [code execution tool](https://platform.claude.com/docs/en/agents-and-tools/tool-use/code-execution-tool#upload-and-analyze-your-own-files), use the `container_upload` content block: +To [send a file to the code execution tool](https://platform.claude.com/docs/en/agents-and-tools/tool-use/code-execution-tool#upload-and-analyze-your-own-files), use the `container_upload` content block: ```json { @@ -426,7 +426,7 @@ To send a file to the [code execution tool](https://platform.claude.com/docs/en/ ### Working with other file formats -For file types that the `document` block doesn't support (for example, .docx and .xlsx), convert the files to plain text and include the content directly in your message. Files that are already plain text, such as .csv and .md files, can either be read in this way or uploaded through the Files API with an explicit `text/plain` content type. To analyze datasets instead of reading them as text, upload them for the [code execution tool](https://platform.claude.com/docs/en/agents-and-tools/tool-use/code-execution-tool#upload-and-analyze-your-own-files) using a `container_upload` block. +For file types that the `document` block doesn't support (for example, .docx and .xlsx), convert the files to plain text and include the content directly in your message. Files that are already plain text, such as .csv and .md files, can either be read in this way or uploaded through the Files API with an explicit `text/plain` content type. To analyze datasets instead of reading them as text, upload them for the code execution tool using a `container_upload` block (see [Upload and analyze your own files](https://platform.claude.com/docs/en/agents-and-tools/tool-use/code-execution-tool#upload-and-analyze-your-own-files)). The following examples read a text file and send its contents as plain text: @@ -461,9 +461,7 @@ The following examples read a text file and send its contents as plain text: ```bash CLI # The "@./path" reference inlines the file contents directly into the field. - ant messages create \ - --model claude-opus-5-5 \ - --max-tokens 1024 <<'YAML' + ant messages create --model claude-opus-5-5 --max-tokens 1024 <<'YAML' messages: - role: user content: @@ -641,7 +639,7 @@ The following examples read a text file and send its contents as plain text: text_content = File.read("document.txt") message = client.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, messages: [ { @@ -990,15 +988,15 @@ Requests that carry `anthropic-beta: managed-agents-2026-04-01` without `files-a Common errors when using the Files API include: -* **File not found (404):** The specified `file_id` doesn't exist or you don't have access to it -* **Invalid file type (400):** The file type doesn't match the content block type (for example, using an image file in a document block) -* **Not downloadable (400):** Files you upload have `"downloadable": false` and cannot be downloaded. Only files created by skills or the code execution tool can be downloaded -* **Exceeds context window size (400):** The file is larger than the context window size (for example, using a 500 MB plain text file in a `/v1/messages` request) -* **Invalid file name (400):** The file name doesn't meet the length requirements (1–255 characters) or contains forbidden characters (`<`, `>`, `:`, `"`, `|`, `?`, `*`, `\`, `/`, or Unicode characters 0–31) -* **File too large (413):** File exceeds the 500 MB limit -* **Storage limit exceeded (400):** Your organization has reached the 1 TB storage limit +* **File not found (404):** The specified `file_id` doesn't exist or you don't have access to it. +* **Invalid file type (400):** The file type doesn't match the content block type (for example, using an image file in a document block). +* **Not downloadable (400):** Files you upload have `"downloadable": false` and cannot be downloaded. Only files created by skills or the code execution tool can be downloaded. +* **Exceeds context window size (400):** The file is larger than the context window size (for example, using a 500 MB plain text file in a `/v1/messages` request). +* **Invalid file name (400):** The file name doesn't meet the length requirements (1–255 characters) or contains forbidden characters (`<`, `>`, `:`, `"`, `|`, `?`, `*`, `\`, `/`, or Unicode characters 0–31). +* **File too large (413):** The file exceeds the 500 MB limit. +* **Storage limit exceeded (400):** Your organization has reached the 1 TB storage limit. -```json Output +```text Output wrap { "type": "error", "error": { diff --git a/content/en/build-with-claude/handling-stop-reasons.md b/content/en/build-with-claude/handling-stop-reasons.md index f415b0dab6..cde73a7c59 100644 --- a/content/en/build-with-claude/handling-stop-reasons.md +++ b/content/en/build-with-claude/handling-stop-reasons.md @@ -24,7 +24,7 @@ For the full response schema, see the [Messages API reference](https://platform. The `stop_reason` field is part of every successful Messages API response. Unlike errors, which indicate failures in processing your request, `stop_reason` tells you why Claude completed its response generation. -```json Example response +```text Example response wrap { "id": "msg_01234", "type": "message", @@ -191,7 +191,7 @@ The most common stop reason. Indicates Claude completed its response naturally. client = Anthropic::Client.new response = client.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, messages: [{ role: "user", content: "Hello!" }] ) @@ -862,7 +862,7 @@ Claude stopped because it reached the `max_tokens` limit specified in your reque # Request with limited tokens response = client.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 10, messages: [{ role: "user", content: "Explain quantum physics" }] ) @@ -1015,7 +1015,7 @@ Claude stopped because it reached the `max_tokens` limit specified in your reque ```ruby Ruby response = client.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, messages: messages, tools: tools @@ -1025,7 +1025,7 @@ Claude stopped because it reached the `max_tokens` limit specified in your reque last_block = response.content.last if last_block.type == :tool_use response = client.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 4096, messages: messages, tools: tools @@ -1164,7 +1164,7 @@ Claude encountered one of your custom stop sequences. client = Anthropic::Client.new response = client.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, stop_sequences: ["END", "STOP"], messages: [{ role: "user", content: "Generate text until you say END" }] @@ -1476,7 +1476,7 @@ A `tool_use` response can also contain a `server_tool_use` block whose `id` has With [programmatic tool calling](https://platform.claude.com/docs/en/agents-and-tools/tool-use/programmatic-tool-calling), the same response shape means something different. The client `tool_use` block comes from code that is running in the `code_execution` tool rather than from Claude directly, and its `caller` field names the `code_execution` block that called it. That code has already started: it is paused waiting for your `tool_result` blocks, and sending them resumes the execution instead of starting a deferred tool. The `code_execution` block's own result block arrives once the code completes, which can take more than one round of tool results. The follow-up user message itself is the same in both cases; with programmatic tool calling, also pass back the `id` from the response's `container` field, as that page shows. -```json A mixed tool_use response +```text A mixed tool_use response wrap { "stop_reason": "tool_use", "content": [ @@ -1872,7 +1872,7 @@ Claude declined to generate a response. Safety classifiers return this stop reas client = Anthropic::Client.new response = client.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, messages: [{ role: "user", content: "[Unsafe request]" }] ) @@ -2318,7 +2318,7 @@ When a response is truncated because of token limits or the context window, appe ### Implement retry logic for pause\_turn -When using [server tools](https://platform.claude.com/docs/en/agents-and-tools/tool-use/server-tools), the API might return `pause_turn` if the server-side sampling loop reaches its iteration limit (default 10). Handle this by continuing the conversation: +When you use [server tools](https://platform.claude.com/docs/en/agents-and-tools/tool-use/server-tools), the API might return `pause_turn` if the server-side sampling loop reaches its iteration limit (default 10). Handle this by continuing the conversation: ```python Python @@ -2777,7 +2777,7 @@ It's important to distinguish between `stop_reason` values and actual errors: begin response = client.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, messages: [{ role: "user", content: "Hello!" }] ) @@ -2946,7 +2946,7 @@ When using streaming, `stop_reason` is: client = Anthropic::Client.new stream = client.messages.stream( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, messages: [{ role: "user", content: "Hello!" }] ) diff --git a/content/en/build-with-claude/mid-conversation-effort-example.md b/content/en/build-with-claude/mid-conversation-effort-example.md index c868ac5334..c5903901ff 100644 --- a/content/en/build-with-claude/mid-conversation-effort-example.md +++ b/content/en/build-with-claude/mid-conversation-effort-example.md @@ -1337,7 +1337,7 @@ The bash handler runs the requested command with a timeout, captures combined st stdin.close reader = Thread.new { stdout_and_stderr.read.scrub } # Enforce the time limit with a monotonic-clock deadline so a timed-out command is - # terminated rather than left running in the background. + # stopped rather than left running in the background. deadline = Process.clock_gettime(Process::CLOCK_MONOTONIC) + BASH_TIMEOUT_SECONDS until wait_thr.join(0.1) next if Process.clock_gettime(Process::CLOCK_MONOTONIC) < deadline @@ -2012,8 +2012,8 @@ A fan-out that spawns dozens of subagents is expensive to restart from the begin return cached; } const result = await compute(); - // Chain writes so concurrent subagents do not clobber each other's entries. - // The chain is kept settled so one failed write does not poison later ones. + // Chain writes so concurrent subagents do not overwrite each other's entries. + // The chain is kept settled so one failed write does not cause later ones to fail. await (journalWriteChain = journalWriteChain .then(async () => { const journal = await loadJournal(); diff --git a/content/en/build-with-claude/mid-conversation-system-messages.md b/content/en/build-with-claude/mid-conversation-system-messages.md index f534a974b0..d5c8f5aed6 100644 --- a/content/en/build-with-claude/mid-conversation-system-messages.md +++ b/content/en/build-with-claude/mid-conversation-system-messages.md @@ -991,7 +991,7 @@ The following request keeps `get_weather` in `tools` and defines `db_query` afte The response's `content` includes a `tool_use` block for the new tool, for example: -```json +```text { "type": "tool_use", "id": "toolu_01A09q90qw90lq917835lq9", @@ -1006,7 +1006,7 @@ To change a tool's schema, or to move a server tool to a newer version, send a d A few rules follow from where the definition renders: -* **Declare what you know up front.** A tool you know about at the first request belongs in `tools`, with `defer_loading: true` and a later `tool_addition` reference if it shouldn't be offered to the model yet. Define by value only what is unknown at the first request or changes later. +* **Declare what you know up front.** A tool you know about at the first request belongs in `tools`, with `defer_loading: true` and a later `tool_addition` reference if you don't want to offer it to the model yet. Define by value only what is unknown at the first request or changes later. * **Keep at least one non-deferred tool in `tools`.** A conversation whose `tools` array has no non-deferred tool is accepted, but the first tool it defines by value changes the start of the rendered prompt, which costs one full cache miss on that request. A [tool search tool](https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-search-tool) counts as non-deferred. * **Dated tool types keep their own beta headers.** If a server tool you define by value requires its own beta header, send that header on every later request in the conversation. * **`cache_control` goes on the block or in the definition, not both,** and counts toward the request's breakpoint limit. A deferred definition can't carry `cache_control`. @@ -2114,7 +2114,8 @@ Through the SDK, set `clear_at` (csharp, go: `ClearAt`; java: `.clearAt()`; php: ``` ```bash CLI - ant beta:messages create --beta mid-conversation-system-clear-at-2026-08-21 <<'YAML' + ant beta:messages create \ + --beta mid-conversation-system-clear-at-2026-08-21 <<'YAML' model: claude-fable-5-1 max_tokens: 4096 messages: diff --git a/content/en/build-with-claude/multilingual-support.md b/content/en/build-with-claude/multilingual-support.md index fade5339a4..7d53453d95 100644 --- a/content/en/build-with-claude/multilingual-support.md +++ b/content/en/build-with-claude/multilingual-support.md @@ -161,7 +161,7 @@ Claude infers the response language from the conversation, but for production ap client = Anthropic::Client.new message = client.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, system: "Always respond in French, regardless of the language the user writes in.", messages: [ diff --git a/content/en/build-with-claude/overview.md b/content/en/build-with-claude/overview.md index 9d1da93e38..5ed860fae8 100644 --- a/content/en/build-with-claude/overview.md +++ b/content/en/build-with-claude/overview.md @@ -85,7 +85,7 @@ Infrastructure that supports discovering, orchestrating, and scaling tool use. | [Agent Skills](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/overview) | Extend Claude's capabilities with Skills. Use pre-built Skills (PowerPoint, Excel, Word, PDF) or create custom Skills with instructions and scripts. Skills use progressive disclosure to efficiently manage context. | Not ZDR eligible | †‡ | | [Fine-grained tool streaming](https://platform.claude.com/docs/en/agents-and-tools/tool-use/fine-grained-tool-streaming) | Stream tool use parameters without buffering/JSON validation, reducing latency for receiving large parameters. | ZDR eligible | | | [MCP connector](https://platform.claude.com/docs/en/agents-and-tools/mcp-connector) | Connect to remote [MCP](https://modelcontextprotocol.io/) servers directly from the Messages API without a separate MCP client. | Not ZDR eligible | | -| [Programmatic tool calling](https://platform.claude.com/docs/en/agents-and-tools/tool-use/programmatic-tool-calling) | Enable Claude to call your tools programmatically from within code execution containers, reducing latency and token consumption for multi-tool workflows. | Not ZDR eligible | † | +| [Programmatic tool calling](https://platform.claude.com/docs/en/agents-and-tools/tool-use/programmatic-tool-calling) | Allow Claude to call your tools programmatically from within code execution containers, reducing latency and token consumption for multi-tool workflows. | Not ZDR eligible | † | | [Tool search](https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-search-tool) | Scale to thousands of tools by dynamically discovering and loading tools on demand using regex- and BM25-based search, optimizing context usage and improving tool selection accuracy. | ZDR eligible | | ## Context management diff --git a/content/en/build-with-claude/pdf-support.md b/content/en/build-with-claude/pdf-support.md index 5a5f301ffe..f5a62d62c6 100644 --- a/content/en/build-with-claude/pdf-support.md +++ b/content/en/build-with-claude/pdf-support.md @@ -349,7 +349,7 @@ The simplest approach is to reference a PDF directly from a URL: The response returns Claude's analysis as text blocks in `content`, with token consumption in `usage`: -```json Output +```text Output { "id": "msg_01Hfp8YuFjQ55VgWbpdHDehB", "type": "message", @@ -411,9 +411,7 @@ If you need to send PDFs from your local system or when a URL isn't available: ``` ```bash CLI - ant messages create \ - --model claude-opus-5-5 \ - --max-tokens 1024 <<'YAML' + ant messages create --model claude-opus-5-5 --max-tokens 1024 <<'YAML' messages: - role: user content: @@ -477,7 +475,7 @@ If you need to send PDFs from your local system or when a URL isn't available: // Method 2: Load from a local file // import { readFile } from "node:fs/promises"; - // const pdfBase64 = (await readFile('document.pdf')).toString('base64'); + // const pdfBase64 = (await readFile("document.pdf")).toString("base64"); // Send the API request with base64-encoded PDF const anthropic = new Anthropic(); @@ -681,7 +679,7 @@ If you need to send PDFs from your local system or when a URL isn't available: # Send to Claude using base64 encoding anthropic = Anthropic::Client.new message = anthropic.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, messages: [ { @@ -744,8 +742,7 @@ For PDFs you'll use repeatedly, or when you want to avoid encoding overhead, use ```bash CLI # First, upload your PDF to the Files API - ant files upload \ - --file ./document.pdf + ant files upload --file ./document.pdf # Then use the file_id from the upload response in your message ant messages create < - + * Documents are provided as a combination of text and images for analysis. * This allows users to ask for insights on visual elements of a PDF, such as charts, diagrams, and other non-textual content. @@ -1344,7 +1341,7 @@ Cache PDFs with [prompt caching](https://platform.claude.com/docs/en/build-with- anthropic = Anthropic::Client.new message = anthropic.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, messages: [ { @@ -1891,7 +1888,7 @@ Use the [Message Batches API](https://platform.claude.com/docs/en/build-with-cla { custom_id: "my-first-request", params: { - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, messages: [ { @@ -1917,7 +1914,7 @@ Use the [Message Batches API](https://platform.claude.com/docs/en/build-with-cla { custom_id: "my-second-request", params: { - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, messages: [ { diff --git a/content/en/build-with-claude/preserved-thinking.md b/content/en/build-with-claude/preserved-thinking.md index 38ccb5c52d..4ae864c048 100644 --- a/content/en/build-with-claude/preserved-thinking.md +++ b/content/en/build-with-claude/preserved-thinking.md @@ -53,7 +53,7 @@ Keep sending the full history on every request, thinking blocks included, and le With the `thinking-binding-controls-2026-08-01` [beta header](https://platform.claude.com/docs/en/api/beta-headers), the response lists each dropped block in a top-level `input_transformations` array with `reason: "model_binding_mismatch"`: -```json +```text wrap { "input_transformations": [ { @@ -116,7 +116,7 @@ If the request didn't send the beta header, the message continues: That setting requires the `thinking-binding-controls-2026-08-01` value in the `anthropic-beta` header. ``` -It usually ends with a sentence naming what changed, for example that the `system` prompt or the `tools` list differs from when the block was created. [Troubleshooting thinking](https://platform.claude.com/docs/en/build-with-claude/thinking-troubleshooting#error-thinking-block-signature) describes what that sentence can name. +It usually ends with a sentence naming what changed, for example that the `system` prompt or the `tools` list differs from when the block was created. For what that sentence can name, see [A 400 error says a thinking block signature is invalid](https://platform.claude.com/docs/en/build-with-claude/thinking-troubleshooting#error-thinking-block-signature) in Troubleshooting thinking. A tampered or undecryptable signature is a different failure. It always returns a 400 (``Invalid `signature` in `thinking` block`` with no sentence about the conversation), and `prefix_mismatch_behavior` doesn't apply to it. @@ -716,7 +716,7 @@ Neither turn drops a block because nothing earlier changed. Check that the first Log `input_transformations` on every turn of your own integration. When the API drops a block, the entry looks like the following: -```json +```text wrap { "input_transformations": [ { @@ -746,7 +746,7 @@ Two plain turns rarely show the problem. Run a session through each of the follo On an older account, you can also watch production traffic without opting into enforcement: send the beta header, leave `block_binding` out, and log `input_transformations`. Sending the header alone doesn't change what the model receives. Every thinking block that comes after the content you edited fails the check and gets its own `thinking_mismatch_allowed` entry, with the same `path` and `reason` fields as a `thinking_dropped` entry. Blocks before the edit still pass. An edit to `system` or `tools` comes before every block, so it fails every thinking block in the request. One entry looks like this: -```json +```text wrap { "input_transformations": [ { @@ -1107,7 +1107,7 @@ Once sent, that text block is part of the prefix for later thinking: leave it in ### Send per-turn reminders as turn-scoped system messages -A common prefix edit is the per-turn nudge: a line such as "request independent reads together" or "you haven't updated the user in a while" that your code appends after each batch of tool results. To keep reminders from piling up, send each nudge as a [mid-conversation system message](https://platform.claude.com/docs/en/build-with-claude/mid-conversation-system-messages) with `clear_at: "next_user_message"`, placed after the `tool_result` user message. `clear_at` requires the beta header `mid-conversation-system-clear-at-2026-08-21`. The following `messages` array is the request after two tool calls and their results. `messages[3]` is the previous request's nudge, left in place, and `messages[6]` is this request's copy: +A common prefix edit is the per-turn nudge: a line such as "request independent reads together" or "you haven't updated the user in a while" that your code appends after each batch of tool results. To keep reminders from piling up, send each nudge as a [mid-conversation system message](https://platform.claude.com/docs/en/build-with-claude/preserved-thinking#new-instructions) with `clear_at: "next_user_message"`, placed after the `tool_result` user message. `clear_at` requires the beta header `mid-conversation-system-clear-at-2026-08-21`. The following `messages` array is the request after two tool calls and their results. `messages[3]` is the previous request's nudge, left in place, and `messages[6]` is this request's copy: ```json [ @@ -1165,7 +1165,7 @@ Editing the `tools` array mid-session invalidates preserved thinking blocks. Lea You have two ways to use these blocks: -* **Declare every tool up front.** Put every tool the session might need in `tools` on the first request, with `defer_loading: true` on any that shouldn't be offered to the model yet. Then turn tools on and off with `tool_addition` and `tool_removal` blocks that name them. +* **Declare every tool up front.** Put every tool the session might need in `tools` on the first request, with `defer_loading: true` on any that you don't want to offer to the model yet. Then turn tools on and off with `tool_addition` and `tool_removal` blocks that name them. * **Start with a snapshot and add tools as you go.** Put the tools you know about in `tools` on the first request. When you learn about another tool, define it inside a `tool_addition` block instead of editing `tools`. Either way, `tools` never changes, so earlier thinking stays valid and the prompt cache still hits, with the one exception noted later in this section. @@ -1475,7 +1475,7 @@ Pass the compacted history as `messages` and set `block_binding` on the `thinkin The response carries the new assistant turn as usual, plus one `input_transformations` entry for each dropped block. For the history in the diagram, that's the thinking on assistant turns 3 and 4: -```json +```text wrap { "input_transformations": [ { @@ -1544,7 +1544,7 @@ A library, proxy, or gateway sits between someone else's history and the API, so - Load them once at session start and keep the top-level `system` prompt and `tools` fixed. When a file changes, append the new version at that point in `messages` instead of editing the original. Use a [mid-conversation system message](https://platform.claude.com/docs/en/build-with-claude/mid-conversation-system-messages) for instructions that come from you as the operator. For file text you treat as untrusted, which shouldn't carry system-prompt authority, put the content in the next `user` turn instead. See [Add instructions with a mid-conversation system message](https://platform.claude.com/docs/en/build-with-claude/preserved-thinking#new-instructions) and [Limitations](https://platform.claude.com/docs/en/build-with-claude/mid-conversation-system-messages#limitations). + Load them once at session start and keep the top-level `system` prompt and `tools` fixed. When a file changes, append the new version at that point in `messages` instead of editing the original. Use a mid-conversation system message for instructions that come from you as the operator. For file text you treat as untrusted, which shouldn't carry system-prompt authority, put the content in the next `user` turn instead. See [Add instructions with a mid-conversation system message](https://platform.claude.com/docs/en/build-with-claude/preserved-thinking#new-instructions) and [Limitations](https://platform.claude.com/docs/en/build-with-claude/mid-conversation-system-messages#limitations). diff --git a/content/en/build-with-claude/prompt-caching.md b/content/en/build-with-claude/prompt-caching.md index 8bd8e5031a..0dcdb40d96 100644 --- a/content/en/build-with-claude/prompt-caching.md +++ b/content/en/build-with-claude/prompt-caching.md @@ -171,7 +171,7 @@ The simplest way to start is with automatic caching: client = Anthropic::Client.new response = client.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, cache_control: {type: "ephemeral"}, system: "You are an AI assistant tasked with analyzing literary works. Your goal is to provide insightful commentary on themes, characters, and writing style.", @@ -448,7 +448,7 @@ Automatic caching is the simplest way to enable prompt caching. Instead of placi client = Anthropic::Client.new response = client.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, cache_control: {type: "ephemeral"}, system: "You are a helpful assistant that remembers our conversation.", @@ -819,7 +819,7 @@ To use the extended cache, include `ttl` in the `cache_control` definition like The response includes detailed cache information like the following: -```json Output +```text Output wrap { "usage": { "input_tokens": 2048, @@ -850,7 +850,7 @@ The 1-hour cache is best used in the following scenarios: * When you want to improve your rate limit utilization, because cache hits are not deducted against your rate limit. - The 5-minute and 1-hour cache behave the same with respect to latency. You generally see improved time-to-first-token for long documents. + The 5-minute and 1-hour caches behave the same with respect to latency. You generally see improved time-to-first-token for long documents. ### Mixing different TTLs @@ -1088,7 +1088,7 @@ Place the `cache_control` breakpoint on the last block that is shared with the f The API returns an empty `content` array: -```json Output +```text Output wrap { "id": "msg_01XFDUDYJgAACzvnptvVoYEL", "type": "message", @@ -1522,7 +1522,7 @@ A `max_tokens: 0` request is rejected with an `invalid_request_error` if any of `max_tokens: 0` is also rejected inside a [Message Batches](https://platform.claude.com/docs/en/build-with-claude/batch-processing) request. Pre-warming targets time-to-first-token, which does not apply to batch processing, and a cache entry written during batch processing would likely expire before the follow-up request runs. -### Replacing the max\_tokens=1 workaround +### Replacing the `max_tokens=1` workaround Before `max_tokens: 0` was available, some applications used `max_tokens: 1` warm-up calls to achieve the same effect. The `max_tokens: 0` approach is preferred: no output is produced, so there is no single-token reply to discard, no output tokens are billed, and the intent of the request is unambiguous. diff --git a/content/en/build-with-claude/prompt-engineering/claude-prompting-best-practices.md b/content/en/build-with-claude/prompt-engineering/claude-prompting-best-practices.md index 1e7061353c..db94bc6196 100644 --- a/content/en/build-with-claude/prompt-engineering/claude-prompting-best-practices.md +++ b/content/en/build-with-claude/prompt-engineering/claude-prompting-best-practices.md @@ -224,7 +224,7 @@ Setting a role in the system prompt focuses Claude's behavior and tone for your client = Anthropic::Client.new message = client.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, system: "You are a helpful coding assistant specializing in Python.", messages: [ @@ -485,7 +485,7 @@ edits, modifications, or implementations when the user explicitly requests them. ``` -Claude Opus 4.5 and Claude Opus 4.6 are also more responsive to the system prompt than previous models. If your prompts were designed to reduce undertriggering on tools or skills, these models might now overtrigger. The fix is to soften any aggressive language. Where you might have said "CRITICAL: You MUST use this tool when...", you can use more normal prompting such as "Use this tool when...". +Claude Opus 4.5 and Claude Opus 4.6 are also more responsive to the system prompt than previous models. If your prompts were designed to reduce undertriggering on tools or skills, these models might now overtrigger. The fix is to soften any aggressive language. Where you might have said "CRITICAL: You MUST use this tool when...," you can use more normal prompting such as "Use this tool when..." instead. ### Optimize parallel tool calling @@ -822,7 +822,7 @@ For tasks spanning multiple context windows: 3. **Set up convenience tools:** Encourage Claude to create setup scripts (for example, `init.sh`) to gracefully start servers and run test suites and linters. This prevents repeated work when continuing from a fresh context window. -4. **Starting fresh versus compacting:** When a context window is cleared, consider starting with a brand new context window rather than using compaction. Claude's latest models are extremely effective at discovering state from the local filesystem. In some cases, you might want to take advantage of this over compaction. Be prescriptive about how it should start: +4. **Choose between starting fresh and compacting:** When a context window is cleared, consider starting with a brand new context window rather than using compaction. Claude's latest models are extremely effective at discovering state from the local filesystem. In some cases, you might want to take advantage of this over compaction. Be prescriptive about how it should start: * "Call pwd; you can only read and write files in this directory." * "Review progress.txt, tests.json, and the git logs." diff --git a/content/en/build-with-claude/prompt-engineering/prompting-claude-fable-5.md b/content/en/build-with-claude/prompt-engineering/prompting-claude-fable-5.md index 8518742a2e..1ac86dcc35 100644 --- a/content/en/build-with-claude/prompt-engineering/prompting-claude-fable-5.md +++ b/content/en/build-with-claude/prompt-engineering/prompting-claude-fable-5.md @@ -171,6 +171,6 @@ Do not route narration or internal reasoning through `send_to_user`; over-callin * **Start at the top of your difficulty range.** Pick a task harder than what you'd assign to prior models, and have Claude Fable 5 scope it, ask clarifying questions, and carry it out. * **Make self-verification explicit in long-run prompts.** Separate, fresh-context verifier subagents tend to outperform self-critique. For long-running tasks, instruct: `Establish a method for checking your own work at an interval of [X] as you build. Run this every [X interval], verifying your work with subagents against the specification.` -* **Refactor existing prompts and skills.** Skills developed for prior models are often too prescriptive for Claude Fable 5 and can degrade output quality. Review and consider removing older instructions if default performance is better. Claude Fable 5 also does a good job of updating skills on the fly based on what it learns from the task at hand. +* **Refactor existing prompts and skills.** Skills developed for prior models are often too prescriptive for Claude Fable 5 and can degrade output quality. Review and consider removing older instructions if default performance is better. Claude Fable 5 also does a good job of updating skills as it works, based on what it learns from the current task. * **Don't instruct Claude to reproduce its reasoning in the response.** Prompts, skills, or harness instructions that tell the model to echo, transcribe, or explain its internal reasoning as response text might trigger the [`reasoning_extraction` refusal category](https://platform.claude.com/docs/en/build-with-claude/refusals-and-fallback#refusal-response) on Claude Fable 5. Server-side fallback with `fallbacks: "default"` doesn't retry requests declined with `reasoning_extraction`; that refusal is returned to you. Audit existing skills and system prompts for reflection or show-your-thinking instructions when migrating. If your application needs reasoning visibility, read the structured `thinking` blocks from [adaptive thinking](https://platform.claude.com/docs/en/build-with-claude/thinking) instead, and use a [send-to-user tool](https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/prompting-claude-fable-5#create-a-send-to-user-tool) to surface progress during long runs. You can still ask for a short explanation of the answer or a summary of the actions taken; see [Keep reasoning in thinking blocks](https://platform.claude.com/docs/en/build-with-claude/refusals-and-fallback#keep-reasoning-in-thinking-blocks). * **Create a send-to-user tool.** For long, asynchronous agents, a client-side tool delivers messages to the user verbatim without ending the turn. See [Create a send-to-user tool](https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/prompting-claude-fable-5#create-a-send-to-user-tool). diff --git a/content/en/build-with-claude/prompt-engineering/prompting-claude-opus-4-8.md b/content/en/build-with-claude/prompt-engineering/prompting-claude-opus-4-8.md index dbdd98191b..41b6dd073e 100644 --- a/content/en/build-with-claude/prompt-engineering/prompting-claude-opus-4-8.md +++ b/content/en/build-with-claude/prompt-engineering/prompting-claude-opus-4-8.md @@ -90,7 +90,7 @@ Spawn multiple subagents in the same turn when fanning out across items or readi ## Design and frontend defaults -Claude Opus 4.8 has strong design instincts, with a consistent default house style: warm cream/off-white backgrounds (\~`#F4F1EA`), serif display type (Georgia, Fraunces, Playfair), italic word-accents, and a terracotta/amber accent. This reads well for editorial, hospitality, and portfolio briefs, but feels off for dashboards, dev tools, fintech, healthcare, or enterprise apps. The default appears in slide decks and web UIs. +Claude Opus 4.8 has strong design instincts, with a consistent default house style: warm cream/off-white backgrounds (\~`#F4F1EA`), serif display type (Georgia, Fraunces, Playfair), italic word-accents, and a terracotta/amber accent. This reads well for editorial, hospitality, and portfolio briefs, but is a poor fit for dashboards, dev tools, fintech, healthcare, or enterprise apps. The default appears in slide decks and web UIs. This default is persistent. Generic instructions ("don't use cream," "make it clean and minimal") tend to shift the model to a different fixed palette rather than producing variety. Two approaches work reliably: @@ -141,7 +141,7 @@ Of course, when limiting the number of required user interactions, it's importan ## Code review harnesses -Claude Opus 4.8 is meaningfully better at finding bugs than prior models, and has both higher recall and precision in internal evals. However, if your code-review harness was tuned for an earlier model, you may initially see lower recall. This is likely a harness effect, not a capability regression. When a review prompt says things like "only report high-severity issues," "be conservative," or "don't nitpick," Claude Opus 4.8 may follow that instruction more faithfully than earlier models did: it may investigate the code just as thoroughly, identify the bugs, and then not report findings it determines to be below your stated bar. This can show up as the model doing the same depth of investigation but converting fewer investigations into reported findings, especially on lower-severity bugs. Precision typically rises, but measured recall can fall even though the model's underlying bug-finding ability has improved. +Claude Opus 4.8 is meaningfully better at finding bugs than prior models, and has both higher recall and precision in internal evals. However, if your code-review harness was tuned for an earlier model, you might initially see lower recall. This is likely a harness effect, not a capability regression. When a review prompt says things such as "only report high-severity issues," "be conservative," or "don't nitpick," Claude Opus 4.8 might follow that instruction more faithfully than earlier models did: it might investigate the code just as thoroughly, identify the bugs, and then not report findings it determines to be below your stated bar. This can show up as the model doing the same depth of investigation but converting fewer investigations into reported findings, especially on lower-severity bugs. Precision typically rises, but measured recall can fall even though the model's underlying bug-finding ability has improved. Some recommended prompt language: @@ -151,7 +151,7 @@ Report every issue you find, including ones you are uncertain about or consider This prompt can be used without having an actual second step, but moving confidence filtering out of the finding step often helps. If your harness has a separate verification, deduplication, or ranking stage, tell the model explicitly that its job at the finding stage is coverage rather than filtering. -If you do want the model to self-filter in a single pass, be concrete about where the bar is rather than using qualitative terms such as "important": for example, "report any bugs that could cause incorrect behavior, a test failure, or a misleading result; only omit nits like pure style or naming preferences." +If you do want the model to self-filter in a single pass, be concrete about what the reporting threshold is rather than using qualitative terms such as "important": for example, "report any bugs that could cause incorrect behavior, a test failure, or a misleading result; only omit nits like pure style or naming preferences." Iterate on prompts against a subset of your evals or test cases to validate recall or F1 score gains. diff --git a/content/en/build-with-claude/prompt-engineering/prompting-claude-opus-5-5.md b/content/en/build-with-claude/prompt-engineering/prompting-claude-opus-5-5.md index 690173c0de..53583b0098 100644 --- a/content/en/build-with-claude/prompt-engineering/prompting-claude-opus-5-5.md +++ b/content/en/build-with-claude/prompt-engineering/prompting-claude-opus-5-5.md @@ -78,8 +78,8 @@ A standing instruction from the user, the person you are working for. It is abou Claude Opus 5.5 runs safety classifiers, including for biology, cybersecurity, and reasoning extraction. -* **Biology:** The biology safeguards are the same as Claude Fable 5.1's and are new if you're coming from Claude Opus 5. Everyday health and educational questions are unaffected. If the biology classifier gets in the way of your organization's life sciences work, apply to the [Life Sciences Verification Program](https://www.anthropic.com/news/life-sciences-verification-program). -* **Cybersecurity:** Finding vulnerabilities in source code is allowed. High-risk dual-use cybersecurity activities are not. If the cybersecurity classifier gets in the way of your organization's legitimate security work, apply to the [Cyber Verification Program](https://support.claude.com/en/articles/14604842). +* **Biology:** The biology safeguards are the same as Claude Fable 5.1's and are new if you're coming from Claude Opus 5. Everyday health and educational questions are unaffected. If the biology classifier blocks your organization's life sciences work, apply to the [Life Sciences Verification Program](https://www.anthropic.com/news/life-sciences-verification-program). +* **Cybersecurity:** Finding vulnerabilities in source code is allowed. High-risk dual-use cybersecurity activities are not. If the cybersecurity classifier blocks your organization's legitimate security work, apply to the [Cyber Verification Program](https://support.claude.com/en/articles/14604842). * **Reasoning extraction:** Requests that push the model to reproduce its internal reasoning in the response text might be declined with the `reasoning_extraction` category. If your prompts ask the model to write its reasoning in the response, remove those instructions, set `display: "summarized"`, and read the summarized reasoning from the thinking blocks instead; see [Prompts written for thinking disabled](https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/prompting-claude-opus-5-5#prompts-written-for-thinking-disabled). You can still ask for a short explanation of the answer or a summary of the actions taken; see [Keep reasoning in thinking blocks](https://platform.claude.com/docs/en/build-with-claude/refusals-and-fallback#keep-reasoning-in-thinking-blocks). A classifier decline arrives as a normal response with `stop_reason: "refusal"` and a `stop_details` object naming the category. You can have the request retried automatically on a fallback model, except for `reasoning_extraction` declines, which server-side fallback returns to you instead of retrying; see [Refusals and fallback](https://platform.claude.com/docs/en/models/opus-5-5/whats-new-opus-5-5#refusals-and-fallback). diff --git a/content/en/build-with-claude/prompt-engineering/prompting-claude-opus-5.md b/content/en/build-with-claude/prompt-engineering/prompting-claude-opus-5.md index edf45adee7..30b4f1272b 100644 --- a/content/en/build-with-claude/prompt-engineering/prompting-claude-opus-5.md +++ b/content/en/build-with-claude/prompt-engineering/prompting-claude-opus-5.md @@ -14,7 +14,7 @@ Compared with Claude Opus 4.8, the improvements most relevant to prompting are: * **Agentic coding:** Claude Opus 5 is strongest on difficult coding tasks: multifile features, larger refactors, and end-to-end feature work. It completes full tasks rather than leaving stubs or placeholders, and it performs best when given the complete task specification up front and left to run. It also performs well on easier tasks such as single-turn edits, where the difference from prior models is smaller. * **Code review and bug-finding:** Claude Opus 5 reviews code with high precision and recall: it finds real bugs at a high rate per pass, and its additional findings are mostly real issues rather than false positives. Accuracy holds at lower effort settings, which supports a fast pass at review time and a more thorough pass later. If your review prompt says "only report high-severity issues" or "be conservative," the model might follow that instruction literally and report less; ask it to report everything and filter in a separate pass instead. -* **Efficiency at lower effort:** `low` and `medium` [effort](https://platform.claude.com/docs/en/build-with-claude/effort) produce strong quality at a fraction of the tokens and latency of higher settings. Start with the default (`high`) and adjust based on your evals: use `low` and `medium` liberally as your primary control for token cost and response time wherever quality holds, and step up to `xhigh` for demanding coding and agentic work. If you carried effort defaults over from a prior model, re-run an effort sweep on your own evals. See [Effort](https://platform.claude.com/docs/en/build-with-claude/effort#recommended-effort-levels-for-claude-opus-5) for the full recommendations. +* **Efficiency at lower effort:** `low` and `medium` [effort](https://platform.claude.com/docs/en/build-with-claude/effort) produce strong quality at a fraction of the tokens and latency of higher settings. Start with the default (`high`) and adjust based on your evals: use `low` and `medium` liberally as your primary control for token cost and response time wherever quality holds, and step up to `xhigh` for demanding coding and agentic work. If you carried effort defaults over from a prior model, re-run an effort sweep on your own evals. See [recommended effort levels](https://platform.claude.com/docs/en/build-with-claude/effort#recommended-effort-levels-for-claude-opus-5) for the full guidance. * **Vision:** Claude Opus 5 is strong on chart, document, and diagram understanding, and on UI and frontend visual replication. Re-validate any prompt-side vision workarounds you tuned for prior models; they might no longer be needed. Vision performance is strongest when the model has tools to iteratively analyze, crop, and visually verify its work, and tool use is a more cost-effective lever than thinking alone. * **Long-context work:** Claude Opus 5 has a [1M token context window](https://platform.claude.com/docs/en/build-with-claude/context-windows) as both the default and the maximum, and its instruction following, tool calling, and reasoning stay consistent throughout the window. * **Office and document tasks:** Claude Opus 5 generates and works with complex, multisheet spreadsheets with non-trivial formulas, and it produces well-structured slide decks. Prompt it with any specific styles or templates it needs to follow. diff --git a/content/en/build-with-claude/prompt-engineering/prompting-claude-sonnet-5-5.md b/content/en/build-with-claude/prompt-engineering/prompting-claude-sonnet-5-5.md index 09a6673c8c..457c510afc 100644 --- a/content/en/build-with-claude/prompt-engineering/prompting-claude-sonnet-5-5.md +++ b/content/en/build-with-claude/prompt-engineering/prompting-claude-sonnet-5-5.md @@ -110,7 +110,7 @@ To show these notes, set `display: "updates"` (beta, `thinking-display-updates-2 Next, remove older instructions such as "hold all findings for the final response." If you then want updates at predictable points, for example a line on what the model is about to do before its first tool call and a short recap at the end, say so in the system prompt. The model follows instructions like this. Updates at set points help most in human-in-the-loop work. -If long tool-calling turns still go quiet for longer than you want, your harness can prompt an update. Have it count consecutive tool-calling steps that send the user no text or progress update. After several in a row, for example five, append a one-turn reminder after the latest tool results. Send it as a [turn-scoped system message](https://platform.claude.com/docs/en/build-with-claude/mid-conversation-system-messages#turn-scoped-system-messages) (beta), with text like this: +If long tool-calling turns still go quiet for longer than you want, your harness can prompt an update. Have it count consecutive tool-calling steps that send the user no text or progress update. After several in a row, for example five, append a one-turn reminder after the latest tool results. Send it as a [turn-scoped system message](https://platform.claude.com/docs/en/build-with-claude/mid-conversation-system-messages#turn-scoped-system-messages) (beta), with text such as the following: ```text wrap The user hasn't heard from you in a while — say in a few words what you're doing, then continue. @@ -134,7 +134,7 @@ This matters most for research and support products, where answers depend on cur Claude Sonnet 5.5 is trained to resist indirect prompt injection, meaning malicious instructions that arrive through tool results and other content it reads during a task. Sometimes it treats a genuine user message as a possible injection. Suppose a message the user typed mid-task reaches the model as a [mid-conversation system message](https://platform.claude.com/docs/en/build-with-claude/mid-conversation-system-messages) placed directly after a tool result, or inside a `tool_result` block. The model can then tell the user that the tool result contained text posing as a message from them, and ignore the message or ask the user to confirm it. -A token countdown that your harness adds after every tool result can cause this. So can letting users send messages while the model is partway through a multistep turn, or having your harness add instructions or context after the tool results on every step. In each case, text arrives right after the tool results. With a countdown or per-step instructions, that can occur on every tool call. An occasional one-turn reminder, like the one in [User-facing progress updates](https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/prompting-claude-sonnet-5-5#user-facing-progress-updates), arrives far less often. If you see this reaction to a reminder of your own, send the reminder less often. To avoid the misread: +A token countdown that your harness adds after every tool result can cause this. So can letting users send messages while the model is partway through a multistep turn, or having your harness add instructions or context after the tool results on every step. In each case, text arrives right after the tool results. With a countdown or per-step instructions, that can occur on every tool call. An occasional one-turn reminder, such as the one in [User-facing progress updates](https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/prompting-claude-sonnet-5-5#user-facing-progress-updates), arrives far less often. If you see this reaction to a reminder of your own, send the reminder less often. To avoid the misread: * Never put user text inside a `tool_result` block. The model misreads that placement most often. * Deliver mid-turn user input as a user turn. Append the user's words as a text block in the user message that carries the `tool_result` blocks, after the last `tool_result`. diff --git a/content/en/build-with-claude/prompt-engineering/prompting-claude-sonnet-5.md b/content/en/build-with-claude/prompt-engineering/prompting-claude-sonnet-5.md index 09a1142661..3d2f5283b0 100644 --- a/content/en/build-with-claude/prompt-engineering/prompting-claude-sonnet-5.md +++ b/content/en/build-with-claude/prompt-engineering/prompting-claude-sonnet-5.md @@ -82,7 +82,7 @@ If you previously relied on `temperature` for stylistic variety, note that setti ## Design and frontend defaults -Claude Sonnet 5 might settle into a consistent default visual style on open-ended frontend and design briefs. A default house style can read well for some briefs but feel off for dashboards, dev tools, fintech, healthcare, or enterprise apps. +Claude Sonnet 5 might settle into a consistent default visual style on open-ended frontend and design briefs. A default house style can read well for some briefs but be a poor fit for dashboards, dev tools, fintech, healthcare, or enterprise apps. Generic instructions ("don't use that color," "make it clean and minimal") tend to shift the model to a different fixed palette rather than producing variety. Two approaches work reliably: @@ -133,7 +133,7 @@ When limiting the number of required user interactions, it's important to specif ## Code review harnesses -If your code-review harness was tuned for an earlier model, you may initially see lower recall on Claude Sonnet 5. This is likely a harness effect, not a capability regression. When a review prompt says things like "only report high-severity issues," "be conservative," or "don't nitpick," Claude Sonnet 5 may follow that instruction more faithfully than earlier models did: it may investigate the code just as thoroughly, identify the bugs, and then not report findings it determines to be below your stated bar. This can show up as the model doing the same depth of investigation but converting fewer investigations into reported findings, especially on lower-severity bugs. Precision typically rises, but measured recall can fall even though the model's underlying bug-finding ability has improved. +If your code-review harness was tuned for an earlier model, you might initially see lower recall on Claude Sonnet 5. This is likely a harness effect, not a capability regression. When a review prompt says things such as "only report high-severity issues," "be conservative," or "don't nitpick," Claude Sonnet 5 might follow that instruction more faithfully than earlier models did: it might investigate the code just as thoroughly, identify the bugs, and then not report findings it determines to be below your stated bar. This can show up as the model doing the same depth of investigation but converting fewer investigations into reported findings, especially on lower-severity bugs. Precision typically rises, but measured recall can fall even though the model's underlying bug-finding ability has improved. Some recommended prompt language: @@ -143,7 +143,7 @@ Report every issue you find, including ones you are uncertain about or consider This prompt can be used without having an actual second step, but moving confidence filtering out of the finding step often helps. If your harness has a separate verification, deduplication, or ranking stage, tell the model explicitly that its job at the finding stage is coverage rather than filtering. -If you do want the model to self-filter in a single pass, be concrete about where the bar is rather than using qualitative terms such as "important": for example, "report any bugs that could cause incorrect behavior, a test failure, or a misleading result; only omit nits like pure style or naming preferences." +If you do want the model to self-filter in a single pass, be concrete about what the reporting threshold is rather than using qualitative terms such as "important": for example, "report any bugs that could cause incorrect behavior, a test failure, or a misleading result; only omit nits like pure style or naming preferences." Iterate on prompts against a subset of your evals or test cases to validate recall or F1 score gains. diff --git a/content/en/build-with-claude/refusals-and-fallback.md b/content/en/build-with-claude/refusals-and-fallback.md index a9c66057db..fc53ee0191 100644 --- a/content/en/build-with-claude/refusals-and-fallback.md +++ b/content/en/build-with-claude/refusals-and-fallback.md @@ -152,7 +152,7 @@ The following sections cover what a refusal response contains, when to use serve A refusal is a successful HTTP 200 response with `stop_reason: "refusal"`: -```json +```text { "id": "msg_01XFUDYJgAACzvnptvVoYEL", "type": "message", @@ -645,7 +645,7 @@ The response looks like any other message, with two additions: On a refusal before any output, the `fallback` block is the first content block. For example, when default routing selects Claude Opus 4.8 for the refusal's category: -```json +```text wrap { "id": "msg_01XFUDYJgAACzvnptvVoYEL", "type": "message", @@ -756,7 +756,7 @@ The SDK includes a refusal-fallback middleware. You configure it once on the cli ### Setting it up -Pass `BetaRefusalFallbackMiddleware` (typescript: `betaRefusalFallbackMiddleware`; go: `betafallback.BetaRefusalFallbackMiddleware`; csharp: `BetaRefusalFallbackHandler`; java: `BetaRefusalFallbackInterceptor`; php: `RefusalFallbackMiddleware`) to the client constructor, and share one `BetaFallbackState` instance across the requests of a conversation. +Pass `BetaRefusalFallbackMiddleware` (typescript: `betaRefusalFallbackMiddleware`; go: `betafallback.BetaRefusalFallbackMiddleware`; csharp: `BetaRefusalFallbackHandler`; java: `BetaRefusalFallbackInterceptor`; php: `RefusalFallbackMiddleware`) to the client constructor, and share one `BetaFallbackState` (go: `betafallback.BetaFallbackState`) instance across the requests of a conversation. @@ -1102,7 +1102,7 @@ Pass `BetaRefusalFallbackMiddleware` (typescript: `betaRefusalFallbackMiddleware * When every model in the list has declined, the middleware returns the final refusal (the last model's refusal response) rather than raising an error. * Thinking blocks from Claude Fable 5.1, Claude Opus 5.5, Claude Sonnet 5.5, Claude Haiku 5.5, or Claude Fable 5 pass through unchanged. Each retry re-sends your original request body, and the only blocks the middleware removes from conversation history on later requests are the `fallback` boundary blocks it added itself. The fallback model can't read Claude Fable 5.1 blocks, which only [Claude Fable 5.1 and Claude Mythos 5.1 read](https://platform.claude.com/docs/en/build-with-claude/thinking#preserved-for-model), so the API drops them. The API also drops Claude Opus 5.5 blocks for every fallback model except Claude Fable 5.1 and Claude Mythos 5.1 (see [Switching models mid-conversation](https://platform.claude.com/docs/en/build-with-claude/preserved-thinking#switching-models)). It drops Claude Sonnet 5.5 blocks too, for every fallback model except Claude Opus 5.5 on the Claude API and Google Cloud. Claude Opus 5.5 and Claude Sonnet 5.5 read Claude Haiku 5.5 blocks on the Claude API and Google Cloud, and the API drops them for a fallback model that can't read them. * Responses served through the middleware include a `fallback` content block at each model boundary, the same as server-side fallback responses. The middleware manages those blocks for you on later requests. -* The model that accepted is recorded in `BetaFallbackState`, so follow-up requests that share the state stay pinned to it rather than re-asking a model that refused. +* The model that accepted is recorded in `BetaFallbackState` (go: `betafallback.BetaFallbackState`), so follow-up requests that share the state stay pinned to it rather than re-asking a model that refused. The middleware and the server-side `fallbacks` parameter do the same job. Configure one or the other, never both on the same request. To send a server-side `fallbacks` request from an application that installs the middleware, use a separate client instance without it. diff --git a/content/en/build-with-claude/search-results.md b/content/en/build-with-claude/search-results.md index f0eaff93de..bf2f510997 100644 --- a/content/en/build-with-claude/search-results.md +++ b/content/en/build-with-claude/search-results.md @@ -1171,7 +1171,7 @@ You can also provide search results directly in user messages. This is useful fo Regardless of how search results are provided, Claude automatically includes citations when using information from them: -```json +```text { "role": "assistant", "content": [ @@ -1258,7 +1258,7 @@ Search results can contain multiple text blocks in the `content` array: A citation referencing the rate limits block looks like: -```json +```text wrap { "type": "search_result_location", "cited_text": "Rate Limits: The API allows 1000 requests per hour per key.", @@ -1993,7 +1993,7 @@ The following example replays a complete conversation. The first user message ca The response cites both sources. The pre-fetched result is `search_result_index: 0` and the tool-returned result is `search_result_index: 1`, matching the order the `search_result` blocks appear in the conversation: -```json +```text { "role": "assistant", "content": [ diff --git a/content/en/build-with-claude/skills-guide.md b/content/en/build-with-claude/skills-guide.md index ef13f07f56..09257e81d7 100644 --- a/content/en/build-with-claude/skills-guide.md +++ b/content/en/build-with-claude/skills-guide.md @@ -279,7 +279,7 @@ The structure is identical for both Anthropic and custom Skills. Specify the req client = Anthropic::Client.new message = client.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 4096, container: { skills: [ @@ -712,8 +712,7 @@ To provide input files for Skills to work on, [upload them with the Files API](h ```bash CLI # Get file metadata - ant files retrieve-metadata \ - --file-id "$FILE_ID" + ant files retrieve-metadata --file-id "$FILE_ID" # List all files ant files list @@ -2602,7 +2601,7 @@ A new version is a complete snapshot, not a delta: upload the Skill's full file -F "files[]=@financial_skill/SKILL.md;filename=financial_skill/SKILL.md" \ -F "files[]=@financial_skill/analyze.py;filename=financial_skill/analyze.py" - # Use a specific version: the id from the create response + # Use a specific version: the ID from the create response curl https://api.anthropic.com/v1/messages \ -H "x-api-key: $ANTHROPIC_API_KEY" \ -H "anthropic-version: 2023-06-01" \ @@ -2647,7 +2646,7 @@ A new version is a complete snapshot, not a delta: upload the Skill's full file --skill-id skill_01AbCdEfGhIjKlMnOpQrStUv \ --file financial_skill.zip - # Use a specific version: the id from the create response + # Use a specific version: the ID from the create response ant messages create <skills`) instead of `client.beta.skills` (csharp, go: `client.Beta.Skills`; java: `client.beta().skills()`; php: `$client->beta->skills`); keeping `client.beta.skills` (csharp, go: `client.Beta.Skills`; java: `client.beta().skills()`; php: `$client->beta->skills`) works only on the [SDK releases that no longer send the header](https://platform.claude.com/docs/en/build-with-claude/skills-guide#sdk-beta-namespace). Earlier releases send it from `client.beta.skills` (csharp, go: `client.Beta.Skills`; java: `client.beta().skills()`; php: `$client->beta->skills`) even when you pass no beta names. -2. **Rename fields** in your code: `display_title` to `display_name`, `latest_version` to `latest_version_id`, and read `source.type` instead of comparing `source` to a string. +2. **Rename fields** in your code: `display_title` to `display_name` and `latest_version` to `latest_version_id`. Read `source.type` instead of comparing `source` to a string. 3. **Use version IDs.** Wherever you stored an epoch-microsecond version, store the version's `id` instead, or use `latest`. Skill references in Messages requests accept a version ID, `latest`, or (for Anthropic Skills) the catalog version. 4. **Review delete calls.** `DELETE /v1/skills/{skill_id}` now deletes every version with the Skill. If you relied on the beta's refusal as a safeguard, add your own check. - After migrating, deleting a Skill through `client.skills` (csharp, go: `client.Skills`; java: `client.skills()`; php: `$client->skills`) or `client.beta.skills` (csharp, go: `client.Beta.Skills`; java: `client.beta().skills()`; php: `$client->beta->skills`) removes the Skill together with all of its versions in one call. + After migrating, deleting a Skill through `client.skills` (csharp, go: `client.Skills`; java: `client.skills()`; php: `$client->skills`) or `client.beta.skills` (csharp, go: `client.Beta.Skills`; java: `client.beta().skills()`; php: `$client->beta->skills`) also deletes all of its versions in one call. A Skill whose versions were all deleted under the beta has no current version to return: `GET /v1/skills/{skill_id}` returns a 400 error and the Skill is omitted from list responses until you upload a version to it. You can still delete it. diff --git a/content/en/build-with-claude/streaming.md b/content/en/build-with-claude/streaming.md index 6ebc16e100..924874a1e8 100644 --- a/content/en/build-with-claude/streaming.md +++ b/content/en/build-with-claude/streaming.md @@ -126,7 +126,7 @@ The [Python SDK](https://github.com/anthropics/anthropic-sdk-python) and [TypeSc client = Anthropic::Client.new stream = client.messages.stream( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, messages: [{ role: "user", content: "Hello" }] ) @@ -141,7 +141,7 @@ If you don't need to process text as it arrives, the SDK provides a way to use s ```bash CLI - # The ant CLI's --stream flag emits one event per line and does not + # The ant CLI's --stream flag emits one event on each line and does not # accumulate into a final Message. For long generations, stream the # raw events: ant messages create --stream --format jsonl <<'YAML' @@ -273,7 +273,7 @@ If you don't need to process text as it arrives, the SDK provides a way to use s client = Anthropic::Client.new message = client.messages.stream( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 128000, messages: [{ role: "user", content: "Write a detailed analysis..." }] ).accumulated_message @@ -309,7 +309,7 @@ Event streams might also include any number of `ping` events. The API might occasionally send [errors](https://platform.claude.com/docs/en/api/errors) in the event stream. For example, during periods of high usage, you might receive an `overloaded_error`, which would normally correspond to an HTTP 529 in a non-streaming context: -```sse Example error +```text Example error event: error data: {"type": "error", "error": {"type": "overloaded_error", "message": "Overloaded"}} ``` @@ -326,7 +326,7 @@ Each `content_block_delta` event contains a `delta` of a type that updates the ` A `text` content block delta looks like: -```sse Text delta +```text Text delta event: content_block_delta data: {"type": "content_block_delta","index": 0,"delta": {"type": "text_delta", "text": "ello frien"}} ``` @@ -339,7 +339,7 @@ You can accumulate the string deltas and parse the JSON once you receive a `cont A `tool_use` content block delta looks like: -```sse Input JSON delta +```text Input JSON delta event: content_block_delta data: {"type": "content_block_delta","index": 1,"delta": {"type": "input_json_delta","partial_json": "{\"location\": \"San Fra"}}} ``` @@ -348,7 +348,7 @@ Note: Current models only support emitting one complete key and value property f ### Thinking delta -When using [thinking](https://platform.claude.com/docs/en/build-with-claude/thinking#streaming-thinking) with streaming enabled, you'll receive thinking content through `thinking_delta` events. These deltas correspond to the `thinking` field of the `thinking` content blocks. +When using [thinking with streaming enabled](https://platform.claude.com/docs/en/build-with-claude/thinking#streaming-thinking), you'll receive thinking content through `thinking_delta` events. These deltas correspond to the `thinking` field of the `thinking` content blocks. For thinking content, a special `signature_delta` event is sent just before the `content_block_stop` event. This signature is used to verify the integrity of the thinking block. @@ -356,14 +356,14 @@ When `display: "omitted"` is set on the thinking configuration, no thinking text A typical thinking delta looks like: -```sse Thinking delta +```text Thinking delta event: content_block_delta data: {"type": "content_block_delta", "index": 0, "delta": {"type": "thinking_delta", "thinking": "I need to find the GCD of 1071 and 462 using the Euclidean algorithm.\n\n1071 = 2 × 462 + 147"}} ``` The signature delta looks like: -```sse Signature delta +```text Signature delta event: content_block_delta data: {"type": "content_block_delta", "index": 0, "delta": {"type": "signature_delta", "signature": "EqQBCgIYAhIM1gbcDa9GJwZA2b3hGgxBdjrkzLoky3dl1pkiMOYds..."}} ``` @@ -521,7 +521,7 @@ There might be `ping` events dispersed throughout the response as well. See [Eve client = Anthropic::Client.new stream = client.messages.stream( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, messages: [{ role: "user", content: "Hello" }], max_tokens: 256 ) @@ -530,7 +530,7 @@ There might be `ping` events dispersed throughout the response as well. See [Eve ``` -```sse Response +```text Response event: message_start data: {"type": "message_start", "message": {"id": "msg_1nZdL29xx5MUA1yADyHTEsnR8uuvGzszyY", "type": "message", "role": "assistant", "content": [], "model": "claude-opus-5-5", "stop_reason": null, "stop_sequence": null, "usage": {"input_tokens": 25, "output_tokens": 1}}} @@ -859,7 +859,7 @@ This request asks Claude to use a tool to report the weather. ] stream = client.messages.stream( - model: "claude-opus-5", + model: Anthropic::Model::CLAUDE_OPUS_5, max_tokens: 1024, tools: tools, tool_choice: { type: "any" }, @@ -872,7 +872,7 @@ This request asks Claude to use a tool to report the weather. ``` -```sse Response +```text Response event: message_start data: {"type":"message_start","message":{"id":"msg_014p7gG3wDgGV9EUtLvnow3U","type":"message","role":"assistant","model":"claude-opus-5","stop_sequence":null,"usage":{"input_tokens":472,"output_tokens":2},"content":[],"stop_reason":null}} @@ -1165,7 +1165,7 @@ This request enables thinking with streaming. The `display: "summarized"` settin ``` -```sse Response +```text Response event: message_start data: {"type": "message_start", "message": {"id": "msg_01...", "type": "message", "role": "assistant", "content": [], "model": "claude-opus-5-5", "stop_reason": null, "stop_sequence": null}} @@ -1375,7 +1375,7 @@ This request asks Claude to search the web for current weather information. client = Anthropic::Client.new stream = client.messages.stream( - model: :"claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, tools: [ { @@ -1396,7 +1396,7 @@ This request asks Claude to search the web for current weather information. ``` -```sse Response +```text Response event: message_start data: {"type":"message_start","message":{"id":"msg_01G...","type":"message","role":"assistant","model":"claude-opus-5-5","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":2679,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":3}}} diff --git a/content/en/build-with-claude/structured-outputs.md b/content/en/build-with-claude/structured-outputs.md index cf846eefdb..c898219ddb 100644 --- a/content/en/build-with-claude/structured-outputs.md +++ b/content/en/build-with-claude/structured-outputs.md @@ -110,7 +110,7 @@ Structured outputs guarantee schema-compliant responses through constrained deco Claude returns JSON like this in the response's text content block: - ```json Output + ```text Output wrap { "name": "John Smith", "email": "john@example.com", @@ -148,7 +148,7 @@ Structured outputs guarantee schema-compliant responses through constrained deco Claude returns JSON like this in the response's text content block: - ```json Output + ```text Output wrap { "name": "John Smith", "email": "john@example.com", @@ -678,7 +678,7 @@ Structured outputs guarantee schema-compliant responses through constrained deco end message = client.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, messages: [{ role: "user", @@ -720,7 +720,7 @@ Structured outputs guarantee schema-compliant responses through constrained deco end message = client.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, messages: [{role: "user", content: "give me some famous numbers"}], output_config: {format: Output} @@ -788,7 +788,7 @@ To use a JSON schema from a file, an OpenAPI spec, or code that builds it at run Claude returns JSON like this in the response's text content block: - ```json Output + ```text Output wrap { "name": "John Smith", "email": "john@example.com", @@ -826,7 +826,7 @@ To use a JSON schema from a file, an OpenAPI spec, or code that builds it at run Claude returns JSON like this in the response's text content block: - ```json Output + ```text Output wrap { "name": "John Smith", "email": "john@example.com", @@ -1151,7 +1151,7 @@ To use a JSON schema from a file, an OpenAPI spec, or code that builds it at run client = Anthropic::Client.new response = client.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, messages: [ { @@ -1513,7 +1513,7 @@ To use a JSON schema from a file, an OpenAPI spec, or code that builds it at run invoice_text = "Invoice #12345, Date: 2024-01-15, Total: $500.00" message = client.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 4096, output_config: {format: Invoice}, messages: [ @@ -1800,7 +1800,7 @@ To use a JSON schema from a file, an OpenAPI spec, or code that builds it at run feedback_text = "Great product, fast shipping!" message = client.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, output_config: {format: Classification}, messages: [ @@ -2139,7 +2139,7 @@ To use a JSON schema from a file, an OpenAPI spec, or code that builds it at run end message = client.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, output_config: {format: APIResponse}, messages: [ @@ -2546,7 +2546,7 @@ When combined, Claude can call tools with guaranteed-valid parameters AND return client = Anthropic::Client.new message = client.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, messages: [ {role: "user", content: "Help me plan a trip to Paris departing May 15, 2026"} @@ -2594,14 +2594,8 @@ When combined, Claude can call tools with guaranteed-valid parameters AND return Structured outputs use constrained sampling with compiled grammar artifacts. This introduces some performance characteristics to be aware of: * **First request latency:** The first time you use a specific schema, there is additional latency while the grammar compiles. - * **Automatic caching:** Compiled grammars are cached for 24 hours from last use, making subsequent requests much faster. - -* **Cache invalidation:** The cache is invalidated if you change: - - * The JSON schema structure - * The set of tools in your request (when using both structured outputs and tool use) - * Changing only `name` or `description` fields does not invalidate the cache +* **Cache invalidation:** The cache is invalidated if you change the JSON schema structure or, when using both structured outputs and tool use, the set of tools in your request. Changing only `name` or `description` fields does not invalidate the cache. ### Prompt modification and token costs @@ -2709,10 +2703,10 @@ Although structured outputs guarantee schema compliance in most cases, there are Claude maintains its safety and helpfulness properties even when using structured outputs. If Claude refuses a request for safety reasons: -* The response has `stop_reason: "refusal"` -* You'll receive a 200 status code -* You'll be billed for the tokens generated -* The output might not match your schema because the refusal message takes precedence over schema constraints +* The response has `stop_reason: "refusal"`. +* You'll receive a 200 status code. +* You'll be billed for the tokens generated. +* The output might not match your schema because the refusal message takes precedence over schema constraints. A property that asks for the model's thinking or step-by-step reasoning might lead to a `reasoning_extraction` refusal. Ask for a short explanation instead. See [Keep reasoning in thinking blocks](https://platform.claude.com/docs/en/build-with-claude/refusals-and-fallback#keep-reasoning-in-thinking-blocks). @@ -2720,9 +2714,9 @@ A property that asks for the model's thinking or step-by-step reasoning might le If the response is cut off because it reached the `max_tokens` limit: -* The response has `stop_reason: "max_tokens"` -* The output might be incomplete and not match your schema -* Retry with a higher `max_tokens` value to get the complete structured output +* The response has `stop_reason: "max_tokens"`. +* The output might be incomplete and not match your schema. +* Retry with a higher `max_tokens` value to get the complete structured output. **Enum value casing** @@ -2800,8 +2794,8 @@ For ZDR and HIPAA eligibility across all features, see [API and data retention]( **Incompatible with:** -* **[Citations](https://platform.claude.com/docs/en/build-with-claude/citations):** Citations require interleaving citation blocks with text, which conflicts with strict JSON schema constraints. Returns 400 error if citations enabled with `output_config.format`. -* **Message prefilling:** Incompatible with JSON outputs +* **[Citations](https://platform.claude.com/docs/en/build-with-claude/citations):** Citations require interleaving citation blocks with text, which conflicts with strict JSON schema constraints. The API returns a 400 error if citations are enabled with `output_config.format`. +* **Message prefilling:** Prefilling is incompatible with JSON outputs. **Grammar scope:** Grammars apply only to Claude's direct output, not to tool use calls, tool results, or thinking tags (when using [thinking](https://platform.claude.com/docs/en/build-with-claude/thinking)). Grammar state resets between sections, allowing Claude to think freely while still producing structured output in the final response. diff --git a/content/en/build-with-claude/task-budgets.md b/content/en/build-with-claude/task-budgets.md index 210904a02a..b843b2012a 100644 --- a/content/en/build-with-claude/task-budgets.md +++ b/content/en/build-with-claude/task-budgets.md @@ -58,8 +58,7 @@ Add `task_budget` to `output_config` and include the beta header: ``` ```bash CLI - ant beta:messages create --beta task-budgets-2026-03-13 \ - --stream <<'YAML' + ant beta:messages create --beta task-budgets-2026-03-13 --stream <<'YAML' model: claude-opus-5-5 max_tokens: 128000 messages: @@ -224,7 +223,7 @@ Add `task_budget` to `output_config` and include the beta header: client = Anthropic::Client.new stream = client.beta.messages.stream( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 128_000, messages: [ { role: "user", content: "Review the codebase and propose a refactor plan." } @@ -313,7 +312,7 @@ Consider a loop with `task_budget: {type: "tokens", total: 100000}` and a single Claude thinks, then emits a tool call and stops with `stop_reason: "tool_use"`: -```json +```text { "role": "assistant", "content": [ @@ -503,7 +502,7 @@ For a hard cap on cost or latency, combine task budgets with a reasonable `max_t Because `task_budget` spans the full agentic loop (potentially many requests) whereas `max_tokens` caps each individual request, the two values are independent; one is not required to be at or below the other. - **A budget that is too small for the task can cause refusal-like behavior.** When Claude sees a budget that is clearly insufficient for the work being asked (for example, a 20,000-token budget for a multihour agentic coding task), it might decline to attempt the task at all, scope it down aggressively, or stop early with a partial result rather than start work it cannot complete. If you observe unexpected refusals or premature stops after setting a budget, raise the budget before debugging other parameters. Size budgets against your actual task-length distribution rather than a fixed default; see [Choosing a budget](https://platform.claude.com/docs/en/build-with-claude/task-budgets#choosing-a-budget). + **A budget that is too small for the task can cause refusal-like behavior.** When Claude receives a budget that is clearly insufficient for the work being asked (for example, a 20,000-token budget for a multihour agentic coding task), it might decline to attempt the task at all, scope it down aggressively, or stop early with a partial result rather than start work it cannot complete. If you observe unexpected refusals or premature stops after setting a budget, raise the budget before debugging other parameters. Size budgets against your actual task-length distribution rather than a fixed default; see [Choosing a budget](https://platform.claude.com/docs/en/build-with-claude/task-budgets#choosing-a-budget). ## Choosing a budget @@ -634,7 +633,7 @@ Run a representative sample of tasks **without** `task_budget` set and record th client = Anthropic::Client.new response = client.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 4096, messages: [ { role: "user", content: "Review the codebase and propose a refactor plan." } @@ -689,7 +688,7 @@ Task budgets are not supported on [Claude Code](https://code.claude.com/docs/en/ Let Claude determine when and how much to use extended thinking. - + Manage context in long-running conversations with server-side compaction. diff --git a/content/en/build-with-claude/thinking-steering-and-cost.md b/content/en/build-with-claude/thinking-steering-and-cost.md index f9096c7f4b..9899998d8f 100644 --- a/content/en/build-with-claude/thinking-steering-and-cost.md +++ b/content/en/build-with-claude/thinking-steering-and-cost.md @@ -16,9 +16,9 @@ To learn how to turn thinking on and how to read thinking output, see the [Think ## How Claude determines when to think -Thinking is optional for the model. On each request, Claude evaluates the complexity of the input and determines whether deeper reasoning would improve the answer. A simple factual question may get a direct response with no thinking block at all; a multistep math problem or a tricky debugging task triggers deeper reasoning. +Thinking is optional for the model. On each request, Claude evaluates the complexity of the input and determines whether deeper reasoning would improve the answer. A simple factual question might get a direct response with no thinking block at all; a multistep math problem or a tricky debugging task triggers deeper reasoning. -This determination happens per request. The same conversation can contain turns with and without thinking, and a turn where Claude skips thinking contains no thinking block. Don't build application logic that assumes every assistant turn starts with one. +This determination occurs for each request. The same conversation can contain turns with and without thinking, and a turn where Claude skips thinking contains no thinking block. Don't build application logic that assumes every assistant turn starts with one. The primary control over this determination is the [effort](https://platform.claude.com/docs/en/build-with-claude/effort) parameter, which acts as soft guidance for how often and how deeply Claude uses thinking; see [Effort levels](https://platform.claude.com/docs/en/build-with-claude/thinking-steering-and-cost#effort-levels) on this page for what each level does. @@ -30,7 +30,7 @@ For full details on how the thinking configuration and the effort parameter inte ## Steering how often Claude thinks -Whether Claude thinks on a given turn is promptable. Effort sets the overall posture, but you can also shape that behavior directly with natural-language guidance, either globally in the system prompt or per message from the user turn. +Whether Claude thinks on a given turn is promptable. Effort sets the overall posture, but you can also shape that behavior directly with natural-language guidance, either globally in the system prompt or for individual messages in the user turn. Use the two levers together in this order: @@ -74,7 +74,7 @@ Level availability varies by model; the [effort availability table](https://plat ### System prompt guidance -System prompt guidance shifts Claude's thinking threshold for every request in the conversation. If Claude is thinking more often than your workload needs, add guidance like this to your system prompt: +System prompt guidance shifts Claude's thinking threshold for every request in the conversation. If Claude is thinking more often than your workload needs, add guidance such as the following to your system prompt: ```text wrap Extended thinking adds latency and should only be used when it @@ -117,7 +117,7 @@ Assistant turns don't need to start with a thinking block. (Models using a legac For multi-turn applications, this means you can pass back conversation history in whatever shape you have it: * Assistant turns without thinking are valid history as-is. -* You can resume a conversation that began without thinking, or that used a different thinking configuration, without rewriting its history. +* You can resume a conversation that started without thinking, or that used a different thinking configuration, without rewriting its history. * History assembled from mixed sources doesn't need thinking blocks reinserted at the start of each assistant turn to pass validation. The relaxation is about validation, not about what you should send. When you have thinking blocks, pass them back unmodified, particularly during tool use, where they carry the reasoning behind Claude's tool calls. See the [Thinking](https://platform.claude.com/docs/en/build-with-claude/thinking) overview for the full rules. @@ -906,7 +906,7 @@ What you're billed for is the same regardless of the `display` setting; only wha To see how many billed output tokens were spent on internal reasoning, read `usage.output_tokens_details.thinking_tokens` in the response. This value reflects the raw reasoning the model generated (not the summarized text returned in the body) and is always less than or equal to `output_tokens`. Subtract it from `output_tokens` to approximate the non-reasoning portion of the output. When streaming, this breakdown appears only on the final `message_delta` event. -```json +```text wrap { "usage": { "input_tokens": 25, diff --git a/content/en/build-with-claude/thinking-tool-workflows.md b/content/en/build-with-claude/thinking-tool-workflows.md index acdf3ab959..1521e213a0 100644 --- a/content/en/build-with-claude/thinking-tool-workflows.md +++ b/content/en/build-with-claude/thinking-tool-workflows.md @@ -281,13 +281,13 @@ The example defines a `get_weather` tool, lets Claude think and request a tool c - You should see `thinking` and `tool_use` blocks in the response content on a run that includes thinking (on simpler requests, adaptive mode may skip the thinking block). A note Claude writes before the tool call comes back as a `text` block or, on models that write [progress updates](https://platform.claude.com/docs/en/build-with-claude/thinking#progress-updates), as another `thinking` block. Keep this content array intact: the next step sends it back verbatim. + You should see `thinking` and `tool_use` blocks in the response content on a run that includes thinking (on simpler requests, adaptive mode might skip the thinking block). A note Claude writes before the tool call comes back as a `text` block or, on models that write [progress updates](https://platform.claude.com/docs/en/build-with-claude/thinking#progress-updates), as another `thinking` block. Keep this content array intact: the next step sends it back verbatim. To see thinking text like this output, add `display: "summarized"` to the request. On models where display defaults to omitted, including Claude Opus 5.5, the `thinking` field otherwise comes back as an empty string with only the `signature` populated. Either way, echo the content array back unchanged; see [Controlling thinking display](https://platform.claude.com/docs/en/build-with-claude/thinking#controlling-thinking-display). - ```json Output + ```text Output { "content": [ { @@ -750,7 +750,7 @@ The example defines a `get_weather` tool, lets Claude think and request a tool c You should see Claude complete the turn with text. Because [interleaved thinking](https://platform.claude.com/docs/en/build-with-claude/thinking#interleaved-thinking) is automatic in adaptive mode, the continuation can also open with a new thinking block before the final text: - ```json Output + ```text Output wrap { "content": [ { diff --git a/content/en/build-with-claude/thinking.md b/content/en/build-with-claude/thinking.md index 13d78301e3..6435ac8506 100644 --- a/content/en/build-with-claude/thinking.md +++ b/content/en/build-with-claude/thinking.md @@ -24,7 +24,7 @@ Whether Claude thinks on a given request, and how deeply, depends on your thinki Here is what up-front thinking looks like in a response: one or more `thinking` content blocks arrive before the `text` blocks. The thinking block is still generated content, like the `text` block that follows it, but it is separated from the canonical response. Each thinking block also carries a `signature` field, an encrypted copy of the full reasoning that you pass back unchanged in multi-turn and tool-use conversations (see [Thinking encryption](https://platform.claude.com/docs/en/build-with-claude/thinking#thinking-encryption)): -```json +```text { "content": [ { @@ -481,7 +481,7 @@ Set `display: "omitted"` when your application doesn't surface thinking content With `display: "omitted"`, the response contains `thinking` blocks with an empty `thinking` field: -```json Output +```text Output wrap { "content": [ { @@ -798,7 +798,7 @@ The following examples stream a response with adaptive thinking, printing thinki To reassemble complete thinking blocks with their signatures after streaming, use your SDK's message-accumulation helper, `stream.get_final_message()` (typescript: `stream.finalMessage()`; ruby: `stream.accumulated_message`; csharp: `.Aggregate()`; go: `message.Accumulate(event)`; java, php: `MessageAccumulator`), instead of concatenating deltas yourself. - ```sse Output + ```text Output event: message_start data: {"type": "message_start", "message": {"id": "msg_01...", "type": "message", "role": "assistant", "content": [], "model": "claude-opus-5-5", "stop_reason": null, "stop_sequence": null}} @@ -840,7 +840,7 @@ To reassemble complete thinking blocks with their signatures after streaming, us When `display: "omitted"` is set, the thinking block opens, a `thinking_delta` with an empty `thinking` string arrives, a single `signature_delta` follows, and the block closes. Text streaming starts immediately after: -```sse Output +```text Output event: content_block_start data: {"type":"content_block_start","index":0,"content_block":{"type":"thinking","thinking":"","signature":""}} @@ -859,7 +859,7 @@ data: {"type":"content_block_start","index":1,"content_block":{"type":"text","te With `display: "updates"` (beta), reasoning blocks stream as they do under `"omitted"`. Each [progress-update block](https://platform.claude.com/docs/en/build-with-claude/thinking#progress-updates) streams its text as `thinking_delta` events before the `tool_use` block it introduces. A pause of several seconds before the progress-update block opens is normal: -```sse Output +```text Output event: content_block_start data: {"type":"content_block_start","index":1,"content_block":{"type":"thinking","thinking":"","signature":""}} @@ -953,7 +953,7 @@ Within the latest assistant message, the sequence of consecutive `thinking` bloc Modified thinking blocks are rejected with a 400 error. See [A 400 error says thinking blocks cannot be modified](https://platform.claude.com/docs/en/build-with-claude/thinking-troubleshooting#error-thinking-blocks-modified) for the exact message, the common causes, and the fix. The one exception: text placed in the empty `thinking` field of an [omitted](https://platform.claude.com/docs/en/build-with-claude/thinking#controlling-thinking-display) block is ignored rather than rejected. -For a complete two-turn walkthrough with code in every SDK, see [Thinking in tool and multi-turn workflows](https://platform.claude.com/docs/en/build-with-claude/thinking-tool-workflows#two-turn-tool-use-round-trip). It defines a tool, receives a thinking-plus-tool-use response, and echoes the assistant turn back with the tool result. +For a worked example with code in every SDK, see [Walk through a two-turn tool-use round trip](https://platform.claude.com/docs/en/build-with-claude/thinking-tool-workflows#two-turn-tool-use-round-trip). It defines a tool, receives a thinking-plus-tool-use response, and echoes the assistant turn back with the tool result. ### Interleaved thinking @@ -1019,7 +1019,7 @@ Use `display: "updates"` for an agent interface that keeps reasoning hidden and Under `"updates"`, the start of the response that follows a `tool_result` looks like this. The first block is reasoning and stays empty, as it would under `"omitted"`. The second carries text, so it's a progress update. Under `"summarized"` both blocks carry text, and under `"omitted"` both are empty. -```json Output +```text Output { "content": [ { @@ -1080,7 +1080,7 @@ The model check applies to every account. The API enforces the prefix check by d To keep thinking valid, send every assistant turn back exactly as you received it and add new messages only at the end of `messages`. If your code builds the `messages` array itself, the Preserved thinking page covers: -* [What counts as an edit](https://platform.claude.com/docs/en/build-with-claude/preserved-thinking#what-counts-as-an-edit), and [how to check whether your code makes one](https://platform.claude.com/docs/en/build-with-claude/preserved-thinking#how-to-tell-whether-your-integration-is-impacted). +* [What counts as an edit](https://platform.claude.com/docs/en/build-with-claude/preserved-thinking#what-counts-as-an-edit), and [how to check whether your code makes an edit](https://platform.claude.com/docs/en/build-with-claude/preserved-thinking#how-to-tell-whether-your-integration-is-impacted). * The [API feature that replaces each common edit](https://platform.claude.com/docs/en/build-with-claude/preserved-thinking#replace-prefix-edits): mid-conversation system messages for new instructions and per-turn reminders, `tool_addition` and `tool_removal` blocks for tool changes, per-message `output_config` for effort changes, and server-side compaction and context editing for trimming. * [Client-side compaction](https://platform.claude.com/docs/en/build-with-claude/preserved-thinking#custom-compaction-on-the-client): which patterns keep thinking valid and which don't. * The [`thinking-binding-controls-2026-08-01` beta header](https://platform.claude.com/docs/en/build-with-claude/preserved-thinking#preserved-thinking-controls). It adds a `block_binding.prefix_mismatch_behavior` field (`"error"` or `"drop_block"`) to the thinking configuration and an `input_transformations` array to every response. The array lists each thinking block that the API dropped, or that failed the prefix check and was let through. @@ -1166,7 +1166,7 @@ Keep the following in mind when working with signatures: In addition to regular `thinking` blocks, the API might return `redacted_thinking` blocks when portions of Claude's reasoning are safety-redacted. A `redacted_thinking` block contains encrypted thinking content in a `data` field, with no readable text: -```json +```text wrap { "type": "redacted_thinking", "data": "..." @@ -1221,7 +1221,7 @@ See the [models overview](https://platform.claude.com/docs/en/models/overview) f ### Long requests -The SDK requires streaming when `max_tokens` is greater than 21,333, to avoid HTTP timeouts on long-running requests. This is a client-side validation, not an API restriction. If you don't need to process events incrementally, use `.stream()` (java: `.createStreaming()`; csharp: `.CreateStreaming()`; go: `.NewStreaming()`; php: `->createStream()`) with `.get_final_message()` (typescript: `.finalMessage()`; ruby: `.accumulated_message`; csharp: `.Aggregate()`; go: `message.Accumulate(event)`; java, php: `MessageAccumulator`) to get the complete `Message` object without assembling it from individual events yourself. See [Streaming messages](https://platform.claude.com/docs/en/build-with-claude/streaming#get-the-final-message-without-handling-events). Expect longer response times when thinking is active, because generating thinking blocks adds processing time. For workloads that push thinking above roughly 32k tokens per request, use [batch processing](https://platform.claude.com/docs/en/build-with-claude/batch-processing) to avoid networking issues: such requests can run long enough to hit system timeouts and open connection limits. +The SDK requires streaming when `max_tokens` is greater than 21,333, to avoid HTTP timeouts on long-running requests. This is a client-side validation, not an API restriction. If you don't need to process events incrementally, use `.stream()` (java: `.createStreaming()`; csharp: `.CreateStreaming()`; go: `.NewStreaming()`; php: `->createStream()`) with `.get_final_message()` (typescript: `.finalMessage()`; ruby: `.accumulated_message`; csharp: `.Aggregate()`; go: `message.Accumulate(event)`; java, php: `MessageAccumulator`) to get the complete `Message` object without assembling it from individual events yourself. See [Get the final message without handling events](https://platform.claude.com/docs/en/build-with-claude/streaming#get-the-final-message-without-handling-events). Expect longer response times when thinking is active, because generating thinking blocks adds processing time. For workloads that push thinking above roughly 32k tokens per request, use [batch processing](https://platform.claude.com/docs/en/build-with-claude/batch-processing) to avoid networking issues: such requests can run long enough to hit system timeouts and open connection limits. ## Next steps diff --git a/content/en/build-with-claude/token-counting.md b/content/en/build-with-claude/token-counting.md index ead70c89ab..ea2a1a9d76 100644 --- a/content/en/build-with-claude/token-counting.md +++ b/content/en/build-with-claude/token-counting.md @@ -175,7 +175,7 @@ All [active models](https://platform.claude.com/docs/en/models/overview) support client = Anthropic::Client.new response = client.messages.count_tokens( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, system: "You are a scientist", messages: [ { role: "user", content: "Hello, Claude" } @@ -186,7 +186,7 @@ All [active models](https://platform.claude.com/docs/en/models/overview) support ``` -```json Output +```text Output wrap { "input_tokens": 14 } ``` @@ -443,7 +443,7 @@ All [active models](https://platform.claude.com/docs/en/models/overview) support client = Anthropic::Client.new response = client.messages.count_tokens( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, tools: [ { name: "get_weather", @@ -469,7 +469,7 @@ All [active models](https://platform.claude.com/docs/en/models/overview) support ``` -```json Output +```text Output wrap { "input_tokens": 403 } ``` @@ -503,7 +503,8 @@ All [active models](https://platform.claude.com/docs/en/models/overview) support ``` ```bash CLI - curl -s "https://platform.claude.com/docs/images/vision-example.jpg" -o ./vision-example.jpg + curl -s "https://platform.claude.com/docs/images/vision-example.jpg" \ + -o ./vision-example.jpg ant messages count-tokens <<'YAML' model: claude-opus-5-5 @@ -751,7 +752,7 @@ All [active models](https://platform.claude.com/docs/en/models/overview) support client = Anthropic::Client.new response = client.messages.count_tokens( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, messages: [ { role: "user", @@ -773,7 +774,7 @@ All [active models](https://platform.claude.com/docs/en/models/overview) support ``` -```json Output +```text Output wrap { "input_tokens": 1028 } ``` @@ -1098,7 +1099,7 @@ An embedded image block that sets [`"oversized_image": "error"`](https://platfor ``` -```json Output +```text Output wrap { "input_tokens": 88 } ``` @@ -1354,7 +1355,7 @@ An embedded image block that sets [`"oversized_image": "error"`](https://platfor pdf_base64 = Base64.strict_encode64(File.binread("/path/to/document.pdf")) response = client.messages.count_tokens( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, messages: [ { role: "user", @@ -1380,7 +1381,7 @@ An embedded image block that sets [`"oversized_image": "error"`](https://platfor ``` -```json Output +```text Output wrap { "input_tokens": 2188 } ``` diff --git a/content/en/build-with-claude/vision-coordinates.md b/content/en/build-with-claude/vision-coordinates.md index bdc87b1d83..01abc01ea1 100644 --- a/content/en/build-with-claude/vision-coordinates.md +++ b/content/en/build-with-claude/vision-coordinates.md @@ -22,17 +22,17 @@ Coordinates follow the standard image convention: the origin `(0, 0)` is the top Claude finds the largest aspect-preserving size that satisfies both of the model's image limits: -1. **Edge limit:** neither side exceeds the maximum edge length (1568 px on the standard tier, 2576 px on the high-resolution tier). -2. **Visual token limit:** the image's token cost `⌈width / 28⌉ × ⌈height / 28⌉` does not exceed the model's visual token budget (1568 tokens on the standard tier, 4784 on the high-resolution tier). +1. **Edge limit:** neither side exceeds the maximum edge length (1,568 px on the standard tier, 2,576 px on the high-resolution tier). +2. **Visual token limit:** the image's token cost `⌈width / 28⌉ × ⌈height / 28⌉` does not exceed the model's visual token budget (1,568 tokens on the standard tier, 4,784 on the high-resolution tier). See [Resolution and token cost](https://platform.claude.com/docs/en/build-with-claude/vision#evaluate-image-size) for which models are in which tier. For nearly all photos and screenshots, the visual token limit is what determines the final size. The edge limit takes over only for elongated images such as panoramas or tall phone screenshots. Compute the size with the [reference implementation](https://platform.claude.com/docs/en/build-with-claude/vision-coordinates#resize-your-image-before-uploading) rather than scaling to the edge length by hand: a 1920×1080 screenshot resizes to 1456×819, not 1568×882, and assuming the edge limit puts every coordinate noticeably off target. -The token limit can also trigger a resize when neither side exceeds the edge limit. Overlooking this is the most common cause of misaligned coordinates. For example, an A4 page scanned at 130 DPI is 1075×1520 pixels: both sides are under 1568 px, but it costs `39 × 55 = 2145` visual tokens, so Claude resizes it to 924×1307. +The token limit can also trigger a resize when neither side exceeds the edge limit. Overlooking this is the most common cause of misaligned coordinates. For example, an A4 page scanned at 130 DPI is 1075×1520 pixels: both sides are under 1,568 px, but it costs `39 × 55 = 2145` visual tokens, so Claude resizes it to 924×1307. - This example assumes a model on the standard resolution tier. A high-resolution-tier model doesn't resize the same scan: 2145 tokens is within its 4784-token budget, so the coordinates it returns map directly onto the 1075×1520 original. Model tiers are listed in [Resolution and token cost](https://platform.claude.com/docs/en/build-with-claude/vision#evaluate-image-size). + This example assumes a model on the standard resolution tier. A high-resolution-tier model doesn't resize the same scan: 2,145 tokens is within its 4,784-token budget, so the coordinates it returns map directly onto the 1075×1520 original. Model tiers are listed in [Resolution and token cost](https://platform.claude.com/docs/en/build-with-claude/vision#evaluate-image-size). Claude then pads every image, resized or not, up to the next multiple of 28 pixels on the bottom and right edges (924×1307 becomes 924×1316 in the example). The padding contains no content: Claude perceives the padded image, but the page content only ever occupies the un-padded resized region. **Always normalize or rescale by the resized dimensions, not the padded dimensions**; dividing by the padded dimensions scales every coordinate by a small amount. @@ -468,7 +468,7 @@ Rescale to the reported target and resend: the target is the largest size, at yo Each image has its own setting. `"oversized_image": "downsize"` (the default when the field is omitted) keeps automatic resizing as described on this page. Each image block is checked only against its own setting, so one request can mix images whose dimensions matter (a screenshot you'll click) with images where resizing is harmless (a logo). What the setting does and does not change: * [Padding](https://platform.claude.com/docs/en/build-with-claude/vision-coordinates#how-claude-resizes-and-pads-images) (which never discards content), format conversion, and orientation correction proceed as usual. -* The hard limits (8000 px on the longest side, and the stricter per-image limit on [many-image requests](https://platform.claude.com/docs/en/build-with-claude/vision#request-limits)) are separate rejections; this setting never lets an image past them. +* The hard limits (8,000 px on the longest side, and the stricter per-image limit on [many-image requests](https://platform.claude.com/docs/en/build-with-claude/vision#request-limits)) are separate rejections; this setting never lets an image past them. * Images supplied by URL or file ID are checked once their bytes have been fetched; those rejections carry the same message without the leading position, so they don't identify which image failed; only embedded base64 images are named by position in the error. * [PDF pages](https://platform.claude.com/docs/en/build-with-claude/pdf-support) are rasterized server-side at dimensions you don't control; the `document` block does not accept the field (an image block nested inside a document's content accepts it like any other). * A marked image whose dimensions cannot be determined is rejected rather than passed through: that rejection reports that the image's source dimensions could not be determined, not the resize message quoted earlier. No image that sets `"error"` reaches the model resized. diff --git a/content/en/build-with-claude/vision.md b/content/en/build-with-claude/vision.md index 7afe031a88..e0f4e7dcb1 100644 --- a/content/en/build-with-claude/vision.md +++ b/content/en/build-with-claude/vision.md @@ -266,7 +266,7 @@ On the API, provide images to Claude as `image` content blocks using one of thre image_data = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAADElEQVR4nGP4z8AAAAMBAQDJ/pLvAAAAAElFTkSuQmCC" message = client.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, messages: [ { @@ -575,8 +575,7 @@ For images you'll use repeatedly or when you want to avoid encoding overhead, us https://platform.claude.com/docs/images/vision-example.jpg # First, upload your image to the Files API - ant files upload \ - --file ./vision-example.jpg + ant files upload --file ./vision-example.jpg # Then use the file_id from the upload response in your message ant messages create < - + Refer to the Anthropic privacy policy page for information on how uploaded images and other data are handled. Anthropic does not use uploaded images to train models. diff --git a/content/en/build-with-claude/working-with-messages.md b/content/en/build-with-claude/working-with-messages.md index 42691a223c..70ed0ef1ae 100644 --- a/content/en/build-with-claude/working-with-messages.md +++ b/content/en/build-with-claude/working-with-messages.md @@ -133,7 +133,7 @@ This guide covers common patterns for working with the Messages API, including b ``` -```json Output +```text Output wrap { "id": "msg_01XFDUDYJgAACzvnptvVoYEL", "type": "message", @@ -300,7 +300,7 @@ The Messages API is stateless, which means that you always send the full convers ``` -```json Output +```text Output wrap { "id": "msg_018gCsTGsXkYJVqYPxTgDHBU", "type": "message", @@ -478,7 +478,7 @@ You can prefill part of Claude's response in the last position of the input mess ``` -```json Output +```text Output wrap { "id": "msg_01Q8Faay6S7QPTvEUUQARt7h", "type": "message", @@ -553,7 +553,8 @@ Claude can read both text and images in requests. You can supply images using th ```bash CLI # Option 1: Base64-encoded image (CLI auto-encodes binary @file refs) - curl -s "https://platform.claude.com/docs/images/vision-example.jpg" -o ./vision-example.jpg + curl -s "https://platform.claude.com/docs/images/vision-example.jpg" \ + -o ./vision-example.jpg ant messages create <<'YAML' model: claude-opus-5-5 @@ -1004,7 +1005,7 @@ Claude can read both text and images in requests. You can supply images using th ``` -```json Output +```text Output { "id": "msg_011CdKmWtV3oFx1C5yUbf5CY", "type": "message", diff --git a/content/en/claude_api_primer.md b/content/en/claude_api_primer.md index 3e22746adc..770118593e 100644 --- a/content/en/claude_api_primer.md +++ b/content/en/claude_api_primer.md @@ -44,7 +44,7 @@ Previous Haiku model: Claude Haiku 4.5: claude-haiku-4-5-20251001 ``` -```json Output +```text Output wrap { "id": "msg_01XFDUDYJgAACzvnptvVoYEL", "type": "message", @@ -146,7 +146,8 @@ Claude can read both text and images in requests. Both `base64` and `url` source ```bash CLI # Option 1: Base64-encoded image (@ prefix auto-encodes binary files as base64) - curl -sSo vision-example.jpg https://platform.claude.com/docs/images/vision-example.jpg + curl -sSo vision-example.jpg \ + https://platform.claude.com/docs/images/vision-example.jpg ant messages create <<'YAML' model: claude-opus-5-5 @@ -531,7 +532,7 @@ Client tools are specified in the `tools` top-level parameter of the API request * What each parameter means and how it affects the tool's behavior * Any important caveats or limitations -**Consider using `input_examples` for complex tools.** For tools with nested objects, optional parameters, or format-sensitive inputs, you can provide concrete examples using the `input_examples` field (beta). This helps Claude understand expected input patterns. See [Providing tool use examples](https://platform.claude.com/docs/en/agents-and-tools/tool-use/define-tools#providing-tool-use-examples) for details. +**Consider using `input_examples` for complex tools.** For tools with nested objects, optional parameters, or format-sensitive inputs, you can provide concrete examples using the `input_examples` field (beta). This shows Claude the expected input patterns. See [Providing tool use examples](https://platform.claude.com/docs/en/agents-and-tools/tool-use/define-tools#providing-tool-use-examples) for details. Example of a good tool description: @@ -589,7 +590,7 @@ The response has a `stop_reason` of `tool_use` and one or more `tool_use` conten * `name`: The name of the tool being used * `input`: An object containing the input being passed to the tool -```json +```text wrap { "role": "assistant", "content": [ @@ -628,7 +629,7 @@ If Claude's response is cut off because it hits the `max_tokens` limit during to ### Handling the `pause_turn` stop reason -When using server tools such as web search, the API might return a `pause_turn` stop reason. Continue the conversation by passing the paused response back as-is in a subsequent request. +When you use server tools such as web search, the API might return a `pause_turn` stop reason. Continue the conversation by passing the paused response back as-is in a subsequent request. ## Troubleshooting errors @@ -698,7 +699,7 @@ Each server-sent event includes a named event type and associated JSON data. Eac #### Text delta -```json +```text wrap { "type": "content_block_delta", "index": 0, @@ -710,7 +711,7 @@ Each server-sent event includes a named event type and associated JSON data. Eac For `tool_use` content blocks, deltas are *partial JSON strings*: -```json +```text {"type": "content_block_delta","index": 1,"delta": {"type": "input_json_delta","partial_json": "{\"location\": \"San Fra"}}} ``` @@ -718,7 +719,7 @@ For `tool_use` content blocks, deltas are *partial JSON strings*: When using thinking with streaming: -```json +```text wrap { "type": "content_block_delta", "index": 0, @@ -731,7 +732,7 @@ When using thinking with streaming: ### Basic streaming request example -```sse +```text event: message_start data: {"type": "message_start", "message": {"id": "msg_1nZdL29xx5MUA1yADyHTEsnR8uuvGzszyY", "type": "message", "role": "assistant", "content": [], "model": "claude-opus-5-5", "stop_reason": null, "stop_sequence": null, "usage": {"input_tokens": 25, "output_tokens": 1}}} diff --git a/content/en/cli-sdks-libraries/cli/apply.md b/content/en/cli-sdks-libraries/cli/apply.md index a9cfb3a5b9..77c47afeca 100644 --- a/content/en/cli-sdks-libraries/cli/apply.md +++ b/content/en/cli-sdks-libraries/cli/apply.md @@ -41,7 +41,7 @@ In an interactive terminal, `ant apply` prints the plan and waits for your appro First apply ./claude-lock.json does not exist yet and will be created Resources will be created with - credentials API key (--api-key / ANTHROPIC_API_KEY) + credentials API key (ANTHROPIC_API_KEY) host api.anthropic.com organization 1b0c2a4d-6c1f-4f0e-9a57-2e8d1c3b4a5f workspace wrkspc_01JwQvzr7rXLA5AGx3HKfFUJ diff --git a/content/en/cli-sdks-libraries/cli/quickstart.md b/content/en/cli-sdks-libraries/cli/quickstart.md index 238bf9ac4d..fb138130d7 100644 --- a/content/en/cli-sdks-libraries/cli/quickstart.md +++ b/content/en/cli-sdks-libraries/cli/quickstart.md @@ -32,7 +32,7 @@ Compared to `curl`, `ant` builds request bodies from typed flags or piped YAML i For Linux environments, download the release binary directly. ```bash - VERSION=2.0.0 + VERSION=2.1.0 OS=$(uname -s | tr '[:upper:]' '[:lower:]') case $(uname -m) in x86_64) ARCH=amd64 ;; diff --git a/content/en/cli-sdks-libraries/cli/scripting.md b/content/en/cli-sdks-libraries/cli/scripting.md index 4efa91a874..cb917848d7 100644 --- a/content/en/cli-sdks-libraries/cli/scripting.md +++ b/content/en/cli-sdks-libraries/cli/scripting.md @@ -25,7 +25,7 @@ Once an agent and environment exist, you can drive a session from the shell: --title "Summarization task" ``` - ```json Output + ```text Output wrap { "id": "session_01JZCh78XvmxJjiXVy3oSi7K", "status": "running" @@ -77,9 +77,7 @@ The CLI is designed to compose with standard shell tooling. ```bash FIRST_AGENT=$(ant beta:agents list --transform id --raw-output | head -1) -ant beta:agents:versions list \ - --agent-id "$FIRST_AGENT" \ - --format jsonl +ant beta:agents:versions list --agent-id "$FIRST_AGENT" --format jsonl ``` ### Inspect errors diff --git a/content/en/cli-sdks-libraries/cli/using.md b/content/en/cli-sdks-libraries/cli/using.md index 946174d97f..dab4b7db8b 100644 --- a/content/en/cli-sdks-libraries/cli/using.md +++ b/content/en/cli-sdks-libraries/cli/using.md @@ -48,7 +48,7 @@ ant beta:sessions:events list --session-id session_01... ant models retrieve --model-id claude-opus-5-5 --format yaml ``` -```yaml Output +```text Output wrap type: model id: claude-opus-5-5 display_name: Claude Opus 5.5 @@ -71,12 +71,10 @@ ant models list --format explore Use `--transform` to reshape responses before printing. The expression is a [GJSON path](https://github.com/tidwall/gjson/blob/master/SYNTAX.md). For list endpoints the transform runs against each item individually, not the envelope: ```bash -ant beta:agents list \ - --transform "{id,name,model}" \ - --format jsonl +ant beta:agents list --transform "{id,name,model}" --format jsonl ``` -```jsonl Output +```text Output {"id": "agent_011CYm1BLqPX...", "name": "Docs CLI Test Agent", "model": "claude-opus-5-5"} {"id": "agent_011CYkVwfaEt...", "name": "Coffee Making Assistant", "model": "claude-opus-5-5"} {"id": "agent_011CYixHhtUP...", "name": "Coding Assistant", "model": "claude-opus-5-5"} diff --git a/content/en/cli-sdks-libraries/libraries/apple-foundation-models.md b/content/en/cli-sdks-libraries/libraries/apple-foundation-models.md index 7557f9b2b4..901b7fc131 100644 --- a/content/en/cli-sdks-libraries/libraries/apple-foundation-models.md +++ b/content/en/cli-sdks-libraries/libraries/apple-foundation-models.md @@ -235,7 +235,7 @@ do { } catch ClaudeError.missingCredential { // Prompt for an API key. } catch let error as LanguageModelError { - // Framework-shaped errors (rate limits, guardrails, context length, decoding). + // Framework-shaped errors (rate limits, guardrails, context-window overflow, decoding). } catch { // Transport errors. } diff --git a/content/en/cli-sdks-libraries/libraries/openai-sdk.md b/content/en/cli-sdks-libraries/libraries/openai-sdk.md index 3d3a0f45d2..f07d09ec8d 100644 --- a/content/en/cli-sdks-libraries/libraries/openai-sdk.md +++ b/content/en/cli-sdks-libraries/libraries/openai-sdk.md @@ -1,7 +1,7 @@ --- title: OpenAI SDK compatibility url: https://platform.claude.com/docs/en/cli-sdks-libraries/libraries/openai-sdk -description: Anthropic provides a compatibility layer that lets you use the OpenAI SDK to test the Claude API. With a few code changes, you can quickly evaluate Anthropic model capabilities. +description: Anthropic provides a compatibility layer that lets you use the OpenAI SDK to test the Claude API. With a few code changes, you can evaluate Anthropic model capabilities. --- @@ -22,12 +22,12 @@ To use the OpenAI SDK compatibility feature, you'll need to: 1. Use an official OpenAI SDK. -2. Change the following +2. Change the following: - * Update your base URL to point to the Claude API - * Replace your API key with a [Claude API key](https://platform.claude.com/settings/keys) from the Claude Console - * If your key is a [personal or service account key](https://platform.claude.com/docs/en/manage-claude/authentication#key-types) that isn't scoped to a workspace, also send the `anthropic-workspace-id` header on every request (for example, `default_headers` in the Python SDK or `defaultHeaders` in TypeScript); see [Select a workspace](https://platform.claude.com/docs/en/manage-claude/authentication#select-a-workspace) - * Update your model name to use a [Claude model](https://platform.claude.com/docs/en/models/overview) + * Update your base URL to point to the Claude API. + * Replace your API key with a [Claude API key](https://platform.claude.com/settings/keys) from the Claude Console. + * If your key is a [personal or service account key](https://platform.claude.com/docs/en/manage-claude/authentication#key-types) that isn't scoped to a workspace, also send the `anthropic-workspace-id` header on every request (for example, `default_headers` in the Python SDK or `defaultHeaders` in TypeScript); see [Select a workspace](https://platform.claude.com/docs/en/manage-claude/authentication#select-a-workspace). + * Update your model name to use a [Claude model](https://platform.claude.com/docs/en/models/overview). 3. Review the following sections for what features are supported. @@ -183,7 +183,7 @@ To use the OpenAI SDK compatibility feature, you'll need to: Here are the most substantial differences from using OpenAI: -* The `strict` parameter for function calling is ignored, which means the tool use JSON is not guaranteed to follow the supplied schema. For guaranteed schema conformance, use the native [Claude API with Structured Outputs](https://platform.claude.com/docs/en/build-with-claude/structured-outputs). +* The `strict` parameter for function calling is ignored, which means the tool use JSON is not guaranteed to follow the supplied schema. For guaranteed schema conformance, use the native [Claude API with structured outputs](https://platform.claude.com/docs/en/build-with-claude/structured-outputs). * Audio input is not supported; it is ignored and stripped from input. * Prompt caching is not supported, but it is supported in the [Anthropic SDKs](https://platform.claude.com/docs/en/cli-sdks-libraries/overview). * System/developer messages are hoisted and concatenated into the top-level `system` field, wherever they appear in the conversation. To add system instructions partway through a conversation, use [mid-conversation system messages](https://platform.claude.com/docs/en/build-with-claude/mid-conversation-system-messages) in the native Claude API. @@ -297,7 +297,7 @@ Rate limits follow Anthropic's [standard limits](https://platform.claude.com/doc | `n` | Must be exactly 1 | | `logprobs` | Ignored | | `metadata` | Ignored | -| `response_format` | Ignored. For JSON output, use [structured outputs](https://platform.claude.com/docs/en/build-with-claude/structured-outputs) with the native Claude API | +| `response_format` | Ignored. For JSON output, use [structured outputs](https://platform.claude.com/docs/en/build-with-claude/structured-outputs) with the native Claude API. | | `prediction` | Ignored | | `presence_penalty` | Ignored | | `frequency_penalty` | Ignored | @@ -318,12 +318,12 @@ Rate limits follow Anthropic's [standard limits](https://platform.claude.com/doc `tools[n].function` fields - | Field | Support status | - | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | - | `name` | Fully supported | - | `description` | Fully supported | - | `parameters` | Fully supported | - | `strict` | Ignored. Use [structured outputs](https://platform.claude.com/docs/en/build-with-claude/structured-outputs) with the native Claude API for strict schema validation | + | Field | Support status | + | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | + | `name` | Fully supported | + | `description` | Fully supported | + | `parameters` | Fully supported | + | `strict` | Ignored. Use [structured outputs](https://platform.claude.com/docs/en/build-with-claude/structured-outputs) with the native Claude API for strict schema validation. | @@ -333,12 +333,12 @@ Rate limits follow Anthropic's [standard limits](https://platform.claude.com/doc OpenAI has deprecated the `functions` field and recommends using `tools` instead. - | Field | Support status | - | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | - | `name` | Fully supported | - | `description` | Fully supported | - | `parameters` | Fully supported | - | `strict` | Ignored. Use [structured outputs](https://platform.claude.com/docs/en/build-with-claude/structured-outputs) with the native Claude API for strict schema validation | + | Field | Support status | + | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | + | `name` | Fully supported | + | `description` | Fully supported | + | `parameters` | Fully supported | + | `strict` | Ignored. Use [structured outputs](https://platform.claude.com/docs/en/build-with-claude/structured-outputs) with the native Claude API for strict schema validation. | diff --git a/content/en/cli-sdks-libraries/overview.md b/content/en/cli-sdks-libraries/overview.md index e79ef2702f..a404c48e46 100644 --- a/content/en/cli-sdks-libraries/overview.md +++ b/content/en/cli-sdks-libraries/overview.md @@ -60,14 +60,14 @@ Each major version of a client SDK sends one [API version](https://platform.clau | Tool | Latest version | Package | | ---------- | -------------- | ----------------------------------------------------------------------------------------------------- | -| ant CLI | `2.0.0` | [`github.com/anthropics/anthropic-cli`](https://github.com/anthropics/anthropic-cli/releases) | -| Python | `2.0.0` | [`anthropic`](https://pypi.org/project/anthropic/) | -| TypeScript | `1.0.0` | [`@anthropic-ai/sdk`](https://www.npmjs.com/package/@anthropic-ai/sdk) | -| C# | `13.0.0` | [`Anthropic`](https://www.nuget.org/packages/Anthropic) | -| Go | `2.0.0` | [`github.com/anthropics/anthropic-sdk-go`](https://pkg.go.dev/github.com/anthropics/anthropic-sdk-go) | -| Java | `3.0.0` | [`com.anthropic:anthropic-java`](https://central.sonatype.com/artifact/com.anthropic/anthropic-java) | -| PHP | `1.0.0` | [`anthropic-ai/sdk`](https://packagist.org/packages/anthropic-ai/sdk) | -| Ruby | `2.0.0` | [`anthropic`](https://rubygems.org/gems/anthropic) | +| ant CLI | `2.1.0` | [`github.com/anthropics/anthropic-cli`](https://github.com/anthropics/anthropic-cli/releases) | +| Python | `2.1.0` | [`anthropic`](https://pypi.org/project/anthropic/) | +| TypeScript | `1.1.0` | [`@anthropic-ai/sdk`](https://www.npmjs.com/package/@anthropic-ai/sdk) | +| C# | `13.1.0` | [`Anthropic`](https://www.nuget.org/packages/Anthropic) | +| Go | `2.1.0` | [`github.com/anthropics/anthropic-sdk-go`](https://pkg.go.dev/github.com/anthropics/anthropic-sdk-go) | +| Java | `3.1.0` | [`com.anthropic:anthropic-java`](https://central.sonatype.com/artifact/com.anthropic/anthropic-java) | +| PHP | `1.1.0` | [`anthropic-ai/sdk`](https://packagist.org/packages/anthropic-ai/sdk) | +| Ruby | `2.1.0` | [`anthropic`](https://rubygems.org/gems/anthropic) | The same versions are available as JSON at `https://platform.claude.com/docs/sdk-versions.json`. diff --git a/content/en/cli-sdks-libraries/sdks/go.md b/content/en/cli-sdks-libraries/sdks/go.md index 48c9d5d1f4..54e97941ed 100644 --- a/content/en/cli-sdks-libraries/sdks/go.md +++ b/content/en/cli-sdks-libraries/sdks/go.md @@ -26,7 +26,7 @@ go get github.com/anthropics/anthropic-sdk-go ## Requirements -This library requires Go 1.24+. +This library requires Go 1.25+. ## Usage @@ -716,7 +716,7 @@ if err != nil { #### Undocumented request parameters -To make requests using undocumented parameters, you can use either the `option.WithQuerySet()` or the `option.WithJSONSet()` functions. +To make requests using undocumented parameters, you can use either the `option.WithQuerySet()` or the `option.WithJSONSet()` function. ```go params := FooNewParams{ diff --git a/content/en/cli-sdks-libraries/sdks/java.md b/content/en/cli-sdks-libraries/sdks/java.md index b8546f98a0..699c509324 100644 --- a/content/en/cli-sdks-libraries/sdks/java.md +++ b/content/en/cli-sdks-libraries/sdks/java.md @@ -15,7 +15,7 @@ The Anthropic Java SDK provides convenient access to the Claude API from applica ```kotlin - implementation("com.anthropic:anthropic-java:3.0.0") + implementation("com.anthropic:anthropic-java:3.1.0") ``` @@ -24,7 +24,7 @@ The Anthropic Java SDK provides convenient access to the Claude API from applica com.anthropic anthropic-java - 3.0.0 + 3.1.0 ``` diff --git a/content/en/cli-sdks-libraries/sdks/ruby.md b/content/en/cli-sdks-libraries/sdks/ruby.md index 535e0c610e..abafb84c67 100644 --- a/content/en/cli-sdks-libraries/sdks/ruby.md +++ b/content/en/cli-sdks-libraries/sdks/ruby.md @@ -32,7 +32,7 @@ anthropic = Anthropic::Client.new( message = anthropic.messages.create( max_tokens: 1024, messages: [{role: "user", content: "Hello, Claude"}], - model: :"claude-opus-5-5" + model: Anthropic::Model::CLAUDE_OPUS_5_5 ) message.content.each do |block| @@ -51,7 +51,7 @@ anthropic = Anthropic::Client.new stream = anthropic.messages.stream( max_tokens: 1024, messages: [{role: "user", content: "Hello, Claude"}], - model: :"claude-opus-5-5" + model: Anthropic::Model::CLAUDE_OPUS_5_5 ) stream.each do |message| @@ -68,7 +68,7 @@ anthropic = Anthropic::Client.new stream = anthropic.messages.stream( max_tokens: 1024, messages: [{role: :user, content: "Say hello there!"}], - model: :"claude-opus-5-5" + model: Anthropic::Model::CLAUDE_OPUS_5_5 ) stream.text.each do |text| @@ -80,7 +80,7 @@ Streaming with `anthropic.messages.stream(...)` exposes various helpers includin ## Input schema and tool calling -The SDK provides helper mechanisms to define structured data classes for tools and let Claude automatically run them. For detailed documentation on tool use patterns including the tool runner, see [Tool Runner (SDK)](https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-runner). +The SDK provides helper mechanisms to define structured data classes for tools and let Claude automatically run them. For detailed documentation on tool use patterns including the tool runner, see [Tool runner (SDK)](https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-runner). ```ruby anthropic = Anthropic::Client.new @@ -100,7 +100,7 @@ end # Automatically handles tool execution loop anthropic.beta.messages.tool_runner( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, messages: [{role: "user", content: "What's 15 * 7?"}], tools: [Calculator.new] @@ -121,7 +121,7 @@ begin message = anthropic.messages.create( max_tokens: 1024, messages: [{role: "user", content: "Hello, Claude"}], - model: :"claude-opus-5-5" + model: Anthropic::Model::CLAUDE_OPUS_5_5 ) rescue Anthropic::Errors::APIConnectionError => e puts("The server could not be reached") @@ -262,7 +262,7 @@ anthropic = Anthropic::Client.new anthropic.messages.create( max_tokens: 1024, messages: [Anthropic::MessageParam.new(role: "user", content: "Hello, Claude")], - model: :"claude-opus-5-5" + model: Anthropic::Model::CLAUDE_OPUS_5_5 ) ``` @@ -274,14 +274,14 @@ anthropic = Anthropic::Client.new anthropic.messages.create( max_tokens: 1024, messages: [{role: "user", content: "Hello, Claude"}], - model: :"claude-opus-5-5" + model: Anthropic::Model::CLAUDE_OPUS_5_5 ) # You can also splat a full Params class: params = Anthropic::MessageCreateParams.new( max_tokens: 1024, messages: [Anthropic::MessageParam.new(role: "user", content: "Hello, Claude")], - model: :"claude-opus-5-5" + model: Anthropic::Model::CLAUDE_OPUS_5_5 ) anthropic.messages.create(**params) ``` diff --git a/content/en/docs/claude-code/agent-sdk/permissions.md b/content/en/docs/claude-code/agent-sdk/permissions.md index 4cc4ae7005..10467e5a37 100644 --- a/content/en/docs/claude-code/agent-sdk/permissions.md +++ b/content/en/docs/claude-code/agent-sdk/permissions.md @@ -14,7 +14,9 @@ When Claude requests a tool, the SDK checks permissions in this order: **1. Hooks** -Run [hooks](/docs/en/agent-sdk/hooks) first. A hook can deny the call outright or pass it on. A hook that returns `allow` does not skip the deny and ask rules below; those are evaluated regardless of the hook result. A `PreToolUse` hook that returns `allow` also can't approve an `rm` or `rmdir` removal targeting a [critical path](/docs/en/permission-modes#critical-paths). For what that `allow` does in plan mode, see [Hook approvals in plan mode](/docs/en/permissions#hook-approvals-in-plan-mode). +Run [hooks](/docs/en/agent-sdk/hooks) first. A hook can deny the call outright or pass it on. A hook that returns `allow` doesn't skip the deny and ask rules below, which are evaluated regardless of the hook result. + +A `PreToolUse` hook that returns `allow` also can't approve an `rm` or `rmdir` command whose target Claude Code recognizes as a [critical path](/docs/en/permission-modes#critical-paths), such as `rm -rf ~`. For what that `allow` does in plan mode, see [Hook approvals in plan mode](/docs/en/permissions#hook-approvals-in-plan-mode). **2. Deny rules** @@ -32,7 +34,7 @@ Tools that require user interaction behave the same way: `AskUserQuestion` and M Apply the active [permission mode](#permission-modes): -* In `bypassPermissions` mode, Claude Code approves everything that reaches this step except `rm` and `rmdir` removals targeting a [critical path](/docs/en/permission-modes#critical-paths), which fall through instead. +* In `bypassPermissions` mode, Claude Code approves everything that reaches this step except recognized [critical-path removals](/docs/en/permission-modes#critical-paths), which fall through instead. * In `acceptEdits` mode, Claude Code approves the file operations listed under [Accept edits mode](#accept-edits-mode-acceptedits). * In `plan` mode, Claude Code sends file-edit and shell-write tools to your `canUseTool` callback regardless of allow rules, so write operations can't be auto-approved while planning. * In other modes, the request falls through. @@ -41,7 +43,7 @@ Apply the active [permission mode](#permission-modes): Check `allow` rules (from `allowed_tools` and settings.json). If a rule matches, the tool is approved. A call the tool approves on its own is resolved at this step too, with no rule needed: for example a file read inside your working directories or a [read-only Bash command](/docs/en/permissions#read-only-commands). -`rm` and `rmdir` removals targeting a [critical path](/docs/en/permission-modes#critical-paths) are never approved by an allow rule. Whether they then reach your callback depends on the permission mode: in an Agent SDK session in `auto` mode, for example, Claude Code denies them by default without calling it. The [Critical paths](/docs/en/permission-modes#critical-paths) mode table lists what each mode does with them. +Recognized [critical-path removals](/docs/en/permission-modes#critical-paths) aren't approved by an allow rule. Whether they then reach your callback depends on the permission mode: in an Agent SDK session in `auto` mode, for example, Claude Code denies them by default without calling it. The [Critical paths mode table](/docs/en/permission-modes#critical-path-removals-in-each-permission-mode) lists what each mode does with them. An allow rule doesn't approve a read from a [network path](/docs/en/permissions#network-paths). @@ -88,7 +90,7 @@ Use `//path` for an absolute filesystem path: a deny rule of `Edit(//secrets/**) > > **Auto-approved tools never reach `canUseTool`.** A tool call approved at any earlier step, by `acceptEdits` or `bypassPermissions`, or by an allow rule, skips your `canUseTool` callback, so permission checks you put there are silently bypassed for that tool. > -> An allow rule never auto-approves `AskUserQuestion`, MCP tools marked [`_meta["anthropic/requiresUserInteraction"]`](/docs/en/mcp#require-approval-for-a-specific-tool), connector tools [your organization set to `ask`](/docs/en/mcp#organization-controls-on-connector-tools), or `rm` and `rmdir` removals targeting a [critical path](/docs/en/permission-modes#critical-paths). In `dontAsk` mode Claude Code denies these calls without invoking the callback. In other modes the first three reach the callback. Depending on the [permission mode](/docs/en/permission-modes#critical-paths), a critical-path removal reaches the callback too or Claude Code denies it without calling it, as it does by default for an Agent SDK session in `auto` mode. +> No allow rule auto-approves `AskUserQuestion`, MCP tools marked [`_meta["anthropic/requiresUserInteraction"]`](/docs/en/mcp#require-approval-for-a-specific-tool), connector tools [your organization set to `ask`](/docs/en/mcp#organization-controls-on-connector-tools), or recognized `rm` and `rmdir` [critical-path removals](/docs/en/permission-modes#critical-paths). In `dontAsk` mode Claude Code denies these calls without invoking the callback. In other modes the first three reach the callback. The [Critical paths mode table](/docs/en/permission-modes#critical-path-removals-in-each-permission-mode) lists what each mode does with a critical-path removal. The check that recognizes these removals [can miss some commands](/docs/en/permission-modes#critical-paths). > > Coverage depends on the entry's form: a bare name like `Read` or `mcp__github__get_issue` auto-approves every call to that tool apart from those exceptions and [reads from network paths](/docs/en/permissions#network-paths), while a scoped rule like `Bash(npm test *)` auto-approves only matching calls, and other `Bash` calls that need approval still fall through to the callback. For checks that must run on every tool call, use a [`PreToolUse` hook](/docs/en/agent-sdk/hooks): hooks run before every other step, and a hook deny applies even in `bypassPermissions` mode. @@ -124,7 +126,7 @@ The SDK supports these permission modes: | Mode | Description | Tool behavior | | :- | :- | :- | | `default` | Standard permission behavior | No mode-based auto-approvals; calls that need approval and match no allow rule trigger your `canUseTool` callback | -| `dontAsk` | Deny instead of prompting | Any call that would otherwise prompt is denied, though a [mod](/docs/en/plugins/mods/overview) you installed can still approve [some of those calls](/docs/en/permissions#precedence-among-rules-hooks-and-mods). Calls approved by `allowed_tools` or rules run, and so do calls that need no approval in `default` mode. Connector tools [your organization set to `ask`](/docs/en/mcp#organization-controls-on-connector-tools) and tools that require user interaction are denied even if you've pre-approved them. [Reads from network paths](/docs/en/permissions#network-paths) and `rm` and `rmdir` removals targeting a [critical path](/docs/en/permission-modes#critical-paths) are also denied even if you've pre-approved them. `canUseTool` is never called | +| `dontAsk` | Deny instead of prompting | Any call that would otherwise prompt is denied without calling `canUseTool`, though a [mod](/docs/en/plugins/mods/overview) you installed can still approve [some of those calls](/docs/en/permissions#precedence-among-rules-hooks-and-mods). Calls approved by `allowed_tools` or `settings.json` allow rules run, and so do calls that need no approval in `default` mode. Some calls, such as [reads from network paths](/docs/en/permissions#network-paths), are denied even when `allowed_tools` or an allow rule matches them. For the list, see [Don't ask mode](#don’t-ask-mode-dontask) | | `acceptEdits` | Auto-accept file edits | File edits and [filesystem operations](#accept-edits-mode-acceptedits) (`mkdir`, `rm`, `mv`, etc.) are automatically approved | | `bypassPermissions` | Bypass permission checks | Tools run without permission prompts, except for the [actions no mode auto-approves](/docs/en/permission-modes#actions-no-mode-auto-approves). Use with caution | | `plan` | Planning mode | Claude explores and plans without editing your source files; file edits are never auto-approved and prompt through your `canUseTool` callback | @@ -251,7 +253,7 @@ Both apply only to paths inside the working directory or `additionalDirectories` * Works on a path outside that scope * Writes to a protected path -* Removes a [critical path](/docs/en/permission-modes#critical-paths) with `rm` or `rmdir` +* Removes a path that Claude Code recognizes as a [critical path](/docs/en/permission-modes#critical-paths) with `rm` or `rmdir` **Use when:** you trust Claude's edits and want faster iteration, such as during prototyping or when working in an isolated directory. @@ -259,7 +261,7 @@ Both apply only to paths inside the working directory or `additionalDirectories` Converts any permission prompt into a denial, without calling `canUseTool`, though a [mod](/docs/en/plugins/mods/overview) you installed can still approve [some of those calls](/docs/en/permissions#precedence-among-rules-hooks-and-mods). Tools pre-approved by `allowed_tools`, `settings.json` allow rules, or a hook run as normal. Calls that need no approval in `default` mode also run, such as file reads inside your working directories and calls to `Agent`. -Connector tools [your organization set to `ask`](/docs/en/mcp#organization-controls-on-connector-tools), tools that require user interaction, [reads from network paths](/docs/en/permissions#network-paths), and `rm` and `rmdir` removals targeting a [critical path](/docs/en/permission-modes#critical-paths) are denied even when an allow rule matches. A `PreToolUse` hook allow doesn't clear a critical-path removal or a read from a network path either. +Connector tools [your organization set to `ask`](/docs/en/mcp#organization-controls-on-connector-tools), tools that require user interaction, [reads from network paths](/docs/en/permissions#network-paths), and recognized [critical-path removals](/docs/en/permission-modes#critical-paths) are denied even when an allow rule matches. A `PreToolUse` hook allow doesn't clear a recognized critical-path removal or a read from a network path either. The check that recognizes these removals [can miss some commands](/docs/en/permission-modes#critical-paths). **Use when:** you want a fixed, explicit tool surface for a headless agent and prefer a hard deny over silent reliance on `canUseTool` being absent. @@ -274,7 +276,7 @@ Auto-approves tool uses without prompting, except the cases listed in the warnin > `allowed_tools` does not constrain this mode. Every tool is approved, not just the ones you listed. These controls still apply: > > * Deny rules, explicit `ask` rules, and hooks are evaluated before the mode check and can still block a tool. -> * Connector tools [your organization set to `ask`](/docs/en/mcp#organization-controls-on-connector-tools), tools that require user interaction, and `rm` and `rmdir` removals targeting a [critical path](/docs/en/permission-modes#critical-paths) still fall through to your `canUseTool` callback. +> * Connector tools [your organization set to `ask`](/docs/en/mcp#organization-controls-on-connector-tools), tools that require user interaction, and recognized [critical-path removals](/docs/en/permission-modes#critical-paths) still fall through to your `canUseTool` callback. The check that recognizes these removals [can miss some commands](/docs/en/permission-modes#critical-paths). > * The [cross-session messaging safeguards](/docs/en/permission-modes#skip-all-checks-with-bypasspermissions-mode) still apply. #### Plan mode (`plan`) diff --git a/content/en/docs/claude-code/agent-sdk/python.md b/content/en/docs/claude-code/agent-sdk/python.md index 2ed9936b73..15cca09f5f 100644 --- a/content/en/docs/claude-code/agent-sdk/python.md +++ b/content/en/docs/claude-code/agent-sdk/python.md @@ -2579,7 +2579,7 @@ Each output shown is the value you read from [`UserMessage.tool_use_result`](#us "subagent_type": str | None, # The type of specialized agent to use "model": "sonnet" | "opus" | "haiku" | "fable" | None, # Model override for this agent "effort": "low" | "medium" | "high" | "xhigh" | "max" | None, # Reasoning effort for this agent - "run_in_background": bool | None, # Agents run in the background by default; set to False to run synchronously + "run_in_background": bool | None, # Default when omitted: your main agent's call runs the new agent in the background, and a subagent's call waits for it "name": str | None, # Name for the spawned agent "team_name": str | None, # Deprecated; ignored "mode": "acceptEdits" | "auto" | "bypassPermissions" | "default" | "dontAsk" | "plan" | None, # Deprecated; ignored. The subagent inheritance rules decide a subagent's permission mode @@ -2589,6 +2589,13 @@ Each output shown is the value you read from [`UserMessage.tool_use_result`](#us Launches a new agent to handle complex, multi-step tasks autonomously. +When Claude leaves `run_in_background` out of an `Agent` call, by default your main agent doesn't wait for the new agent and a subagent waits: + +* **From your main agent**: the new agent runs in the background, and the result has `status: "async_launched"`. To make your main agent wait for the new agent instead, see [Choose whether Claude waits for subagents](/docs/en/agent-sdk/subagents#choose-whether-claude-waits-for-subagents). +* **From one of your subagents**: the calling subagent [waits for the new agent](/docs/en/sub-agents#let-subagents-spawn-their-own-subagents). The new agent runs in the background instead when its definition sets [`background`](#agentdefinition) to `True`, or when you [turn fork mode off](/docs/en/sub-agents#turn-fork-mode-on-or-off) by setting `CLAUDE_CODE_FORK_SUBAGENT` to `0`. + +Before Python SDK v0.2.169, agents that your subagents started also ran in the background by default. That release is the first to bundle Claude Code v2.1.302 or later. + **Output (status: `"completed"`):** ```python theme={null} diff --git a/content/en/docs/claude-code/agent-teams.md b/content/en/docs/claude-code/agent-teams.md index 3e3d6c157a..ecfabc095f 100644 --- a/content/en/docs/claude-code/agent-teams.md +++ b/content/en/docs/claude-code/agent-teams.md @@ -34,7 +34,7 @@ Both agent teams and [subagents](/docs/en/sub-agents) let you parallelize work, | | Subagents | Agent teams | | :- | :- | :- | | **Context** | Own context window; results return to the caller | Own context window; fully independent | -| **Communication** | Return a result to the caller. Subagents that Claude named when it spawned them can also [message each other](/docs/en/sub-agents#what-loads-at-startup) | Teammates message each other directly | +| **Communication** | Return a result to the caller. Subagents that Claude [named](/docs/en/sub-agents#subagent-names) when it spawned them can also [message each other](/docs/en/sub-agents#what-loads-at-startup) | Teammates message each other directly | | **Coordination** | Main agent manages all work | Self-coordination through messages, plus a shared task list for [agents that have the Task tools](/docs/en/tools-reference#task-tool-availability) | | **Best for** | Focused tasks where only the result matters | Complex work requiring discussion and collaboration | | **Token cost** | Lower: results summarized back to main context | Higher: each teammate is a separate Claude instance | diff --git a/content/en/docs/claude-code/authentication.md b/content/en/docs/claude-code/authentication.md index df04607a8c..fb6c545568 100644 --- a/content/en/docs/claude-code/authentication.md +++ b/content/en/docs/claude-code/authentication.md @@ -10,7 +10,10 @@ Claude Code supports multiple authentication methods depending on your setup. In ## Log in to Claude Code -After [installing Claude Code](/docs/en/setup#install-claude-code), run `claude` in your terminal. On first launch, Claude Code opens a browser window for you to log in. If you've set the `ANTHROPIC_API_KEY` environment variable and you approve the key when Claude Code asks whether to use it, Claude Code skips the login prompt. +After [installing Claude Code](/docs/en/setup#install-claude-code), run `claude` in your terminal. Claude Code opens a browser window for you to log in on first launch, except in cases such as these, where it can skip the login prompt: + +* **API key**: you've set the `ANTHROPIC_API_KEY` environment variable and you approve the key when Claude Code asks whether to use it +* **Earlier sign-in**: you ran [`claude auth login`](/docs/en/cli-reference#cli-commands) in your shell before your first session, or you rebuilt a dev container that keeps your credentials in a [volume](/docs/en/devcontainer#persist-authentication-and-settings-across-rebuilds). If you see the login prompt anyway, [check what can cause it](#login-prompt-still-appears-after-an-earlier-sign-in). If the browser doesn't open automatically, press `c` to copy the login URL to your clipboard, then paste it into your browser. @@ -32,6 +35,15 @@ To log out and re-authenticate, type `/logout` at the Claude Code prompt. Loggin If you're having trouble logging in, see [authentication troubleshooting](/docs/en/troubleshoot-install#login-and-authentication). +### Login prompt still appears after an earlier sign-in + +If you signed in earlier and first-launch setup shows the login prompt instead of [skipping it](#log-in-to-claude-code), check for causes such as these: + +* **Expired sign-in**: your earlier sign-in expired and Claude Code can't refresh it. Log in again at the prompt. +* **Login restricted to an organization**: an administrator set [`forceLoginOrgUUID`](/docs/en/settings-reference#forceloginorguuid) in managed settings to [require logins from specific organizations](#restrict-login-to-your-organization). The prompt appears whether or not your account belongs to one of them. Log in with an account in a required organization. If you don't have one, ask your administrator to add you. +* **Required login method**: your sign-in isn't the kind that [`forceLoginMethod`](/docs/en/settings-reference#forceloginmethod) in a settings file requires. With `"claudeai"`, an API key from an earlier Claude Console login doesn't count as an existing sign-in. With `"console"`, a claude.ai account doesn't. Log in with the kind of account that setting names. +* **Older version**: before v2.1.290, the prompt appeared during setup whether or not you were signed in. [Update Claude Code](/docs/en/setup#update-claude-code) to skip it. + ### Log in with multiple accounts To stay signed in to multiple accounts at once, such as work and personal accounts, give each account its own configuration directory. When you start `claude`, set the [`CLAUDE_CONFIG_DIR`](/docs/en/env-vars#variables) environment variable to the directory for the account you want to use. Each directory has its own settings, session history, and claude.ai login or API key. For example, in Bash or Zsh, add this alias to `~/.bashrc` or `~/.zshrc` so that `claude-work` uses your work account while `claude` keeps your personal one: diff --git a/content/en/docs/claude-code/auto-mode-config.md b/content/en/docs/claude-code/auto-mode-config.md index 7c9435d722..c472b5f87a 100644 --- a/content/en/docs/claude-code/auto-mode-config.md +++ b/content/en/docs/claude-code/auto-mode-config.md @@ -361,9 +361,11 @@ When the classifier produces [no verdict on the action](/docs/en/errors#auto-mod ### Fix a denial with an allow rule, an environment entry, or a retry -To see what the classifier blocked, find the tool call in the conversation. If the call appears shortened or folded into a summary line such as `Ran 3 shell commands`, press `Ctrl+O` to open the [transcript viewer](/docs/en/interactive-mode#transcript-viewer), which expands it. +To read the command or URL behind a notice such as `bash denied by auto mode · [Data Exfiltration] · /permissions`, use the **Recently denied** tab, a hook, or the conversation: -Two other places on screen that report denials leave out the command or URL: the notice near the input box, such as `bash denied by auto mode · [Data Exfiltration] · /permissions`, gives the tool and the reason, and the **Recently denied** tab lists a shell command by the description Claude wrote for it. To capture the exact input of these denials programmatically, add a [`PermissionDenied` hook](/docs/en/hooks#permissiondenied), which receives it as `tool_input`. +* **Recently denied tab**: in the `/permissions` dialog, highlight a denied Bash or PowerShell action to read its command below the list. In [screen reader mode](/docs/en/accessibility), all the commands appear before the list instead. +* **Hook**: to capture the exact input of denials programmatically, add a [`PermissionDenied` hook](/docs/en/hooks#permissiondenied), which receives it as `tool_input`. +* **Conversation**: find the tool call. If the call appears shortened or folded into a summary line such as `Ran 3 shell commands`, press `Ctrl+O` to open the [transcript viewer](/docs/en/interactive-mode#transcript-viewer), which expands it. The text beneath the call tells you whether there is anything to fix. A dim `Not run · auto mode's check had no usable answer` row, or text that reports a problem with the classifier itself, such as `Auto mode could not evaluate this action`, means Claude Code blocked the call without a verdict from the classifier. For a `Not run` row, press `Ctrl+O` to read the full message, then see [Auto mode cannot determine the safety of an action](/docs/en/errors#auto-mode-cannot-determine-the-safety-of-an-action) or [The server returned no safety verdict](/docs/en/errors#the-server-returned-no-safety-verdict) for what to do. diff --git a/content/en/docs/claude-code/changelog.md b/content/en/docs/claude-code/changelog.md index abfc7f3484..2dbebbd3cc 100644 --- a/content/en/docs/claude-code/changelog.md +++ b/content/en/docs/claude-code/changelog.md @@ -10,6 +10,67 @@ This page is generated from the [CHANGELOG.md on GitHub](https://github.com/anth Run `claude --version` to check your installed version. +**2.1.308** + +* Bug fixes and reliability improvements + +**2.1.307** + +**Added** + +* Added `/claude-api api-version` to move Claude API code to API version `2026-10-21` +* Added the `claude_code.safety_event` OpenTelemetry event for each tool call a permission rule, auto mode, a safety check, a hook or the sandbox stopped, prompted or sent back +* \[VSCode] Added a notice on the microphone button when voice dictation stops by itself (15 seconds without recognized speech, or the 2-minute limit), saying why and that the text so far is kept +* \[Code Review] Added `@claude review stop` (also `off` and `pause`) to Code Review, ending an `@claude review always` subscription on a pull request without starting a new review + +**Changed** + +* Changed the notice Claude gets when the WebSearch budget is used up to also tell it not to query search engines in a browser or through computer use +* Changed the `axScreenReader` setting and `CLAUDE_AX_SCREEN_READER` in a settings `env` block to apply only from user, managed or `--settings` settings (since 2.1.305) +* Self-hosted runner: Changed checkout hooks to be stopped after 30 minutes by default, failing the session's setup; if yours needs longer, raise `--checkout-hook-timeout-min` or set it to `0` +* Self-hosted runner: Changed the certificate file built for Anthropic-managed git to filter its trusted certificates as the CLI does; a `[runner:warn]` line gives the number left out +* \[VSCode] Changed the "still open somewhere else" notice to also cover a Claude process left over from an extension restart, which usually ends on its own within about 10 minutes +* \[VSCode] Changed voice dictation to filter its trusted certificates as the CLI does +* \[VSCode] Changed the extension's own requests to filter their trusted certificates as the CLI does, and to trust the `NODE_EXTRA_CA_CERTS` file named in the environment or in user settings + +**6 improvements** + +* Improved recovery from unparseable tool calls: Claude Code now retries the call up to twice before ending the turn with an error +* Improved fork subagents launched together: each is now told which launch is its own, so forks are much less likely to try to start each other's work +* Improved browser sign-in: the success page now appears as soon as sign-in completes, without waiting for your account profile to load +* Improved web search errors in cloud and self-hosted runner sessions: a search refused with a 403 that gives a reason now shows that reason instead of a generic "Authentication error" +* Improved the time to the first reply in cloud sessions when one of the desktop app's MCP servers can't connect +* Improved Remote Control connect time for sessions whose transcript contains large pasted images or PDF reads + +**26 bug fixes** + +* Fixed requests failing with a model-not-found error when `CLAUDE_CODE_DISABLE_1M_CONTEXT` is set and the model is an alias with the `[1m]` suffix, such as `opus[1m]` +* Fixed the `prompt-caching-scope` beta header being sent behind custom `ANTHROPIC_BASE_URL` gateways and on Foundry, where it has no effect +* Fixed MCP servers showing "needs authentication" in `claude -p` on macOS while the login keychain was locked; they now say why, and the next run after an unlock connects without a new sign-in +* Fixed MCP servers being reported as timed out, and staying failed in headless runs, when a macOS or Linux computer went to sleep while they were connecting +* Fixed HTTP MCP tool calls being sent twice when the connection closed mid-call; only read-only or idempotent tools are now retried +* Fixed a turn sometimes starting without an SDK MCP server's latest tools when a background task was running +* Fixed some "Autocompact is thrashing" errors in turns that read many PDF pages, images or other large tool results +* Fixed `/autocompact` in cloud sessions going back to the default window after the session restarted +* Fixed a conversation cleared with `/clear` sometimes coming back when a cloud or self-hosted runner session restarted +* Fixed `CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MS` being ignored in Claude apps gateway sessions +* Fixed telemetry from Claude Desktop sessions behind a Claude apps gateway being rejected when `OTEL_EXPORTER_OTLP_HEADERS` is set +* Fixed `/permissions` > Recently denied not showing the denied shell command, and auto mode's local classifier ignoring an approval from there when it checks a retried command; approving a row now names the command, not its description +* Fixed `/help` and the `/` command menu showing long model-facing descriptions for bundled skills such as `/claude-api` instead of their short descriptions +* Fixed subagent transcripts recording placeholder token usage and an empty stop reason for streamed responses +* Fixed model switches through the Agent SDK's `setModel()`, and apps built on it, being refused when the API took more than 5 seconds to confirm the model; Claude Code now waits up to 15 seconds +* Fixed a background command stopped through a connected app (such as the desktop app archiving an idle session) being reported to Claude as stopped by the user; the notice now names its output file +* Fixed WebFetch in Cowork cloud sessions reporting a tool error when a site answered with a 4xx status or a robots.txt refusal; it is now a normal result, as in local sessions +* Fixed write tools on a directly configured GitHub MCP server showing a form that closed without creating anything in the desktop app's Code tab +* Fixed Artifact tool reads failing with a connection reset when the server had closed a reused connection +* Self-hosted runner: Fixed sessions with `--use-anthropic-git-proxy` committing a `.claude/settings.local.json` left in the clone by an earlier session +* Self-hosted runner: Fixed archiving or requeueing a session, or stopping the runner, during its checkout hook leaving the hook's processes running and the runner's slot held +* \[VSCode] Fixed a long prompt expanded with Show more covering the whole chat panel: a pinned prompt is now capped at 40% of the panel and scrolls +* \[VSCode] Fixed part of a list item or table cell with LaTeX math pasting as a new list or table in rich text editors +* \[VSCode] Fixed dictation failing behind a TLS-inspecting proxy when `NODE_EXTRA_CA_CERTS` is set only in `~/.claude/settings.json`; it now also follows `CLAUDE_CODE_CERT_STORE` +* \[Cloud sessions] Fixed the repository picker saying "No repositories match" while a search was still running; it now shows "Searching…" until the results arrive +* \[Cloud sessions] Fixed the "Waiting for a runner" status on self-hosted environments being cut off; with on-demand runners it now counts up from your last message and shows failed attempts + **2.1.306** * Fixed `claude -p` inside cloud sessions reporting "Not logged in" when started without the session's environment variables diff --git a/content/en/docs/claude-code/claude-apps-gateway-config.md b/content/en/docs/claude-code/claude-apps-gateway-config.md index a32cd98953..03fd79ca2d 100644 --- a/content/en/docs/claude-code/claude-apps-gateway-config.md +++ b/content/en/docs/claude-code/claude-apps-gateway-config.md @@ -206,7 +206,7 @@ The `store` block points the gateway at its PostgreSQL database, which holds dev | `postgres_url` | Yes | `postgres://` or `postgresql://` URL with one host, not a comma-separated list. The gateway runs its own schema migrations at boot and on upgrade, so the role needs rights to create and alter tables on the target schema. See [Upgrades](/docs/en/claude-apps-gateway-deploy#upgrades) and [Postgres](/docs/en/claude-apps-gateway-deploy#postgres). | | `username` | No | Overrides the user in `postgres_url` | | `password` | No | Database credential. Set it here rather than in `postgres_url` so the credential stays out of the URL. Accepts any characters and takes precedence over URL credentials. | -| `max_connections` | No | Postgres connection-pool size per replica. Default `5`, which is conservative and friendly to shared databases. With [spend limits](#admin) enabled, the hot path does a few operations per inference request, so raise it for a dedicated database under load, and keep replicas × this below the database's `max_connections`. | +| `max_connections` | No | Postgres connection-pool size per replica. Default `5`, which is conservative and friendly to shared databases. With [spend limits](#admin) enabled, the gateway makes a few database operations per inference request, so raise it for a dedicated database under load, within what [Size the connection pool](/docs/en/claude-apps-gateway-deploy#size-the-connection-pool) allows. | | `connect_timeout_seconds` | No | Seconds the gateway waits when it opens a Postgres connection. A whole number from `1` to `60`, default `5`. Raise it if connection attempts time out when a new gateway instance starts. Requires Claude Code v2.1.274 or later on the gateway server. Earlier versions refuse to start when the key is set. | | `readiness_grace_seconds` | No | How many seconds `/readyz` keeps reporting ready after Postgres stops answering. A whole number from `0` to `3600`, default `0`. See [Outage behavior](/docs/en/claude-apps-gateway-deploy#outage-behavior) for how to pick a value. Requires Claude Code v2.1.282 or later on the gateway server. Earlier versions refuse to start when the key is set. | @@ -683,7 +683,7 @@ models: Failing over between cloud providers, or to the direct Anthropic API, changes which agreement, geography, and other terms govern the request. -The CLI applies the same feature gating to gateways regardless of which upstream serves a given request, so failover doesn't send a body field an upstream would reject. +The CLI applies the same feature gating to gateways regardless of which upstream serves a given request, so by default failover doesn't send a body field an upstream would reject. If you set the [one-hour cache TTL](#one-hour-prompt-cache) in a policy, it goes to every upstream in the list, so set it only if all of them accept it. ## Optional sections @@ -1022,6 +1022,29 @@ Claude Code applies this variable without showing the developer the approval dia To turn off 1M context instead, set [`CLAUDE_CODE_DISABLE_1M_CONTEXT: "1"`](/docs/en/model-config#extended-context) in the same `env` block. Claude Code then treats every model as having a 200K window. In interactive sessions, each developer approves this variable in the [approval dialog](#what-goes-in-cli) before it takes effect. +#### One-hour prompt cache + +To request the one-hour [prompt cache TTL](/docs/en/prompt-caching#cache-lifetime) instead of the default five minutes, add these keys to a policy's existing [`code`, `cli`, or `settings` block](#choose-cli-or-code) and restart the gateway. The keys need Claude Code v2.1.242 or later on the gateway server and on clients. + +`promptCacheTtl` covers the main conversation. `subagentPromptCacheTtl` is optional and covers subagents, workflows, and background requests. This example adds both to a `match: {}` policy keyed `cli`: + +```yaml theme={null} +managed: + policies: + - match: {} + cli: + promptCacheTtl: 1h + subagentPromptCacheTtl: 1h +``` + +> [!WARNING] +> +> Set the keys only if your upstreams offer the one-hour TTL for every model the gateway serves. If an upstream rejects the TTL, the request fails, and neither the gateway nor Claude Code retries it with the five-minute TTL. For Amazon Bedrock, check [supported models, regions, and limits](https://docs.aws.amazon.com/bedrock/latest/userguide/prompt-caching.html#prompt-caching-models). + +To confirm `promptCacheTtl`, sign in to the gateway as a user the policy matches and [check which TTL your cache writes used](/docs/en/prompt-caching#choose-the-ttl-yourself). Pass `--model` to repeat the check for each model the gateway serves. + +One-hour cache writes [cost more](/docs/en/prompt-caching#cache-lifetime) than five-minute writes. For [spend limits](/docs/en/claude-apps-gateway-spend-limits#how-requests-are-priced) to count that higher rate, you need v2.1.286 or later on the gateway server. + #### MCP servers in a policy To provide MCP servers to the Claude Code clients a policy matches, set [`managedMcpServers`](/docs/en/managed-mcp#provide-servers-through-managed-settings) in that policy's `cli` block. You need Claude Code v2.1.259 or later on the gateway server and on clients. diff --git a/content/en/docs/claude-code/claude-apps-gateway-deploy.md b/content/en/docs/claude-code/claude-apps-gateway-deploy.md index 4100517d6b..728073b029 100644 --- a/content/en/docs/claude-code/claude-apps-gateway-deploy.md +++ b/content/en/docs/claude-code/claude-apps-gateway-deploy.md @@ -201,6 +201,15 @@ If you autoscale on CPU, a replica at the limit queues requests without triggeri > > Every open request holds memory in the gateway process while it streams and while it waits for a slot. If you keep the limit at 256, memory on an overloaded replica still grows, because waiting requests keep their request bodies. Size the container's memory for the number of requests open at peak, and watch memory when you change the limit. A replica that runs out of memory is killed and drops every stream it holds. +### Keep `API_TIMEOUT_MS` above the gateway's time to first byte + +If you lower [`API_TIMEOUT_MS`](/docs/en/network-config#streaming-idle-watchdogs) to retry an unanswered request sooner, keep it above the time the gateway takes to send the first bytes of a streaming response. A request that waits longer times out, and so does each retry that waits as long, until the turn ends with `Request timed out`. + +* **`provider: anthropic`**: set `API_TIMEOUT_MS` above the longest time your upstream takes to send its first event. +* **Every other upstream**: set it more than 20 seconds above the longest time your upstream takes to return response headers. The gateway sends its first [keepalive `ping`](#deployment) about 15 seconds after those headers, unless the upstream's first event comes sooner. A gateway older than v2.1.229 sends no pings, so use the `provider: anthropic` rule there. + +On top of that time, allow for any [wait for a free slot](#concurrent-upstream-requests) and for the wait on a down upstream before [failover](/docs/en/claude-apps-gateway-config#multiple-upstreams). Keep the value above the longest [non-streaming request](/docs/en/network-config#streaming-idle-watchdogs) too. + ### Outage behavior If Postgres goes down, the gateway itself keeps serving signed-in developers and new sign-ins fail. Whether developers actually keep working depends on how your orchestrator handles readiness: @@ -251,6 +260,21 @@ A 30-second loop expires `kv` rows past their TTL, and an hourly sweep enforces With spend limits in use, a lost database means lost spend tracking and caps, not only developer re-logins, so run regular backups. To erase one departed developer immediately rather than waiting on retention, run `DELETE FROM principal_emails WHERE principal = ''` directly; that removes the only table holding their email, name, and groups. `spend` and `admin_audit` rows reference the pseudonymous OIDC `sub` only. +#### Size the connection pool + +Each replica opens up to [`store.max_connections`](/docs/en/claude-apps-gateway-config#store) Postgres connections, five by default. Keep replicas × `store.max_connections` at or below the connections the database has left for the gateway: + +* **Replicas**: count the most that run at once. Start from your autoscaling maximum, or your replica count if you don't autoscale, and add the extra replicas a rolling update starts before it stops old ones. On Amazon ECS with default settings, and on Cloud Run, that can be as many again. +* **Connections left**: take the database's `max_connections`, then subtract what the database reserves and what other clients hold. PostgreSQL reserves `superuser_reserved_connections`, three by default. A managed service can reserve more, so check its documentation. + +For example, take an autoscaling maximum of six, rolling updates that start at most two extra replicas, and the default pool of five. That needs (6 + 2) × 5 = 40 connections. A database with a `max_connections` of 50 and two connections held by other clients has 50 − 3 − 2 = 45 left, so the total fits. + +If your total doesn't fit, change one of these: + +* **The database**: raise its `max_connections` +* **The replicas**: run fewer, or have your orchestrator start fewer extra replicas in a rolling update +* **The pool**: lower `store.max_connections`, but with [spend limits](/docs/en/claude-apps-gateway-spend-limits) on, keep it large enough for each replica's load. Otherwise spend checks can [time out](/docs/en/claude-apps-gateway-spend-limits#postgres-availability) waiting for a connection, and the gateway logs `spend check failed: spend precheck timed out`. + ### Upgrades Replicas are stateless, so a rolling restart loses no gateway state. The gateway runs schema migrations at boot, which means deploying the new binary self-migrates the database. Concurrent replicas serialize on a Postgres advisory lock, so only one applies each migration. @@ -372,13 +396,17 @@ The gateway's stderr includes the audit event stream, the audit log records deve | Boot exits: `requires the native binary` | Running under Node instead of the native binary | Install Claude Code with one of the [standalone install methods](/docs/en/setup) | | Boot exits with an OIDC discovery error after `config.load` | `oidc.issuer` unreachable, or TLS chain not trusted | Check the issuer is reachable from the pod and serves `/.well-known/openid-configuration`. Set `ca_cert_pem` for private PKI. If the pod reaches the IdP only through a forward proxy, set [`oidc.use_proxy: true`](/docs/en/claude-apps-gateway-config#idp-requests-through-a-forward-proxy); on versions before v2.1.227, give the pod a direct route to each of the IdP's endpoints instead. If the pod also can't resolve the IdP's hostname, or the proxy refuses `CONNECT` to an IP address, see [Proxy-only egress](/docs/en/claude-apps-gateway-config#proxy-only-egress), which requires v2.1.277 or later. | | Boot exits with a Postgres permission error | The database role lacks DDL rights on its schema | Grant the role `CREATE` on the gateway's schema so it can create and alter its tables at boot | -| Log: `could not connect to Postgres at boot, attempt 1 of 3` | The database wasn't reachable yet when the gateway started, for example on a cold instance whose network is still coming up | If the gateway then finishes booting, no action is needed. When the database isn't reachable, the gateway tries the connection three times, two seconds apart, before it exits. If it exits with `could not connect to Postgres`, check `store.postgres_url`, including that it names one host, and the network path to the database. If the attempts time out rather than being refused, raise [`store.connect_timeout_seconds`](/docs/en/claude-apps-gateway-config#store) to give each one longer. | +| Log: `remaining connection slots are reserved` or `sorry, too many clients already`, from PostgreSQL. It shows in running replicas' `postgres connection closed` warnings, or in a new replica's boot log. There, `remaining connection slots are reserved` can follow `attempt 1 of 3`, and the replica may still start. | The replicas ask for more connections than the database has left for the gateway, and PostgreSQL refuses the extra ones | Make the total fit, as [Size the connection pool](#size-the-connection-pool) describes: run fewer replicas, lower `store.max_connections`, or raise the database's `max_connections`. If the total fits except during a rolling update, you can instead have your orchestrator stop an old replica before it starts a new one, if it supports that. | +| Log: `could not connect to Postgres at boot, attempt 1 of 3`, with a reason other than `remaining connection slots are reserved` | The database wasn't reachable yet when the gateway started, for example on a cold instance whose network is still coming up | If the gateway then finishes booting, no action is needed. When the database isn't reachable, the gateway tries the connection three times, two seconds apart, before it exits. If it exits with `could not connect to Postgres`, check `store.postgres_url`, including that it names one host, and the network path to the database. If the attempts time out rather than being refused, raise [`store.connect_timeout_seconds`](/docs/en/claude-apps-gateway-config#store) to give each one longer. | +| Log: `Postgres is below the supported floor` | The database runs a PostgreSQL version older than your gateway version supports. The gateway keeps running. | Upgrade the database. On PostgreSQL 11, 12, or 13, you can instead upgrade the gateway to meet the [PostgreSQL requirement](/docs/en/claude-apps-gateway#prerequisites). | | `/oauth/callback` shows "Sign-in could not be completed" | Email domain rejected, id\_token validation failed, or `email_verified` is explicitly `false`, which the gateway always rejects with no override | Check `allowed_email_domains` and that the IdP returns a verified `email` claim. For `email_verified: false`, fix the IdP-side verification. If your IdP emits email under a different claim name, set `oidc.email_claim`. | | Log: `token exchange failed request_id=: id_token missing email claim` | The IdP isn't including `email` in the id\_token by default. This rejection fires only when `allowed_email_domains` is set; without it, a missing email mints a session with no email | Configure the IdP to emit `email` in the id\_token. Okta: add `email` to a custom authorization server's ID-token claims. Entra: add `email` as an optional claim on the app registration. PingFederate: enable an OpenID Connect Policy that emits `email`. If the IdP serves `email` from the userinfo endpoint but won't include it in the id\_token, such as the Okta org authorization server, set `oidc.userinfo_fallback: true`. | | Log: `refresh failed request_id=: invalid_token (…) (at userinfo_no_id_token, …)`, and developers see `Cloud gateway session expired` every `session.ttl_hours` | The IdP accepted the refresh token but returned no id\_token with it, so the gateway asked the IdP's userinfo endpoint for the user's claims. The IdP rejected the refreshed access token there. The gateway answers `temporarily_unavailable`, so Claude Code keeps the refresh token but can't renew the session. Gateway versions before v2.1.260 log the same line without the `(at …)` detail. | Set [`oidc.scope_on_refresh: true`](/docs/en/claude-apps-gateway-config#oidc), available in gateway v2.1.260 or later, so the refresh request asks for `openid` again. Some IdPs, such as Okta, return an id\_token on refresh only when asked. On PingFederate, enable **Return ID Token On Refresh Grant** under **Applications > OAuth > OpenID Connect Policy Management** instead. The key doesn't change PingFederate's behavior. For other IdPs that still omit it, check whether the userinfo endpoint accepts access tokens issued by a refresh. As a stopgap, raise [`session.ttl_hours`](/docs/en/claude-apps-gateway-config#session). See [Identity provider setup](#identity-provider-setup) for the deprovisioning tradeoff. | | A developer signs in, then every request from that session fails with a `431` error | The session token in every request's `Authorization` header lists the developer's IdP groups, so for a developer in many groups the headers can total more than the gateway accepts | See [Request headers too large after sign-in](#request-headers-too-large-after-sign-in) for which limit applies and what to change | | Every Amazon Bedrock request returns 502; log shows `Could not load credentials from any providers` | On EC2, IMDSv2's default hop limit of 1 blocks the instance-metadata request from inside the container. Boot and `/readyz` pass anyway because the AWS SDK resolves instance credentials on the first request, not at client construction | Raise the hop limit with `aws ec2 modify-instance-metadata-options --instance-id --http-put-response-hop-limit 2`, or set it in the launch template. The change applies to every container on the instance. Prefer ECS task roles where available, which read credentials from the ECS container-credentials endpoint and avoid the change entirely, or apply the change on a dedicated gateway instance to limit the exposure. | | At peak load, responses are slow to start or appear to hang, or fail with a 502 `all upstreams failed` while the upstream is healthy | A replica has more requests open than it sends upstream at once, so the extra requests wait inside the gateway. On a `provider: anthropic` upstream, a request that waits longer than `timeouts.upstream_ttfb_ms` gives up on that upstream, which produces the 502 when no later upstream serves it. The log shows a warning that contains `client requests are open`. | Add replicas, or raise the limit on each replica. See [Concurrent upstream requests](#concurrent-upstream-requests). | +| On an upstream other than `provider: anthropic`, a turn with a long thinking pause fails. The proxy in front of the gateway logs one request that stays open for about 12.5 minutes, then a run of `504` errors | Claude Code ended a stream that had delivered its first response event and then carried only keepalive pings. It re-sent the request without streaming, and each reply takes longer than the proxy's timeout. | Raise `CLAUDE_STREAM_IDLE_TIMEOUT_MS` for your developers. See [Long thinking ends in proxy timeouts](#long-thinking-ends-in-proxy-timeouts). | +| On `provider: anthropic`, a turn with a long thinking pause fails. The proxy logs one request open for about 20 minutes, then `502` or `504` errors | Claude Code ended a stream that had delivered its first response event and then carried only keepalive pings. It re-sent the request without streaming, and each reply takes longer than the gateway's wait on the upstream, `timeouts.upstream_ttfb_ms`, or the proxy's timeout. | Raise `CLAUDE_STREAM_IDLE_TIMEOUT_MS` for your developers. See [Long thinking on an Anthropic API upstream](#long-thinking-on-an-anthropic-api-upstream). | | IdP error: unknown or unsupported scope | The IdP rejects scopes it doesn't recognize | Set `oidc.scopes` to exactly the list your IdP accepts; it must include `openid`. The default is `openid profile email offline_access`. | | Sessions don't silently renew after setting `oidc.scopes` | `offline_access` was dropped from the override | Add `offline_access` back if your IdP supports it. Without a refresh token, developers re-run the browser login every `session.ttl_hours`. | | Browser shows "This request came from another site and was blocked" | Cross-site form POST, blocked as CSRF protection. Expected for embedded or proxied pages | Open the verification link directly | @@ -413,6 +441,67 @@ When you trim the groups claim, keep the groups you named in these settings, whi * **`match.groups` in [`managed.policies`](/docs/en/claude-apps-gateway-config#managed)**: decides which policy applies to a developer * **`rbac_group` [spend caps](/docs/en/claude-apps-gateway-spend-limits)**: decide which group caps apply to a developer +### Long thinking ends in proxy timeouts + +If your upstream is `provider: anthropic`, use [Long thinking on an Anthropic API upstream](#long-thinking-on-an-anthropic-api-upstream) instead: you raise `CLAUDE_STREAM_IDLE_TIMEOUT_MS` there too, but the times and errors differ. + +If turns fail after long thinking and your proxy logs one request open for about 12.5 minutes, then a run of `504` errors, raise [`CLAUDE_STREAM_IDLE_TIMEOUT_MS`](/docs/en/env-vars) in a gateway policy. For example, with a 240-second idle timeout on the proxy, the run is 10 requests, each cut at 240 seconds. + +* **The first request**: a stream that delivers its first response event, `message_start`, and then only pings while Claude thinks. With default settings, Claude Code ends that stream after about 12.5 minutes. +* **The other 10**: the same request, sent [without streaming](/docs/en/errors#streaming-response-ended-before-any-complete-data-was-received) and then retried, 10 sends in all by default. They get no pings, so a slow reply hits the proxy's timeout. + +You don't need a longer proxy timeout for this fix. If you raise only the proxy's timeout, requests without streaming still fail once a reply takes longer than Claude Code's own wait, 300 seconds by default. + +#### Confirm the cause + +Have a developer reproduce the failure with `claude --debug-file ./claude-debug.txt`, then search that file for this line: + +```text theme={null} +Error streaming, falling back to non-streaming mode: Stream idle timeout - no chunks received +``` + +If your developers already set [`CLAUDE_CODE_DISABLE_NONSTREAMING_FALLBACK`](/docs/en/env-vars) to `1`, you see no requests without streaming, and the turn ends with `API Error: Stream idle timeout - no chunks received`. The same fix applies. + +#### Pick a value + +Pick a `CLAUDE_STREAM_IDLE_TIMEOUT_MS` value whose second column covers your longest thinking pause, or start with `1800000` if you don't know it. A stream can stay on pings alone for about 7.5 minutes longer than the value: + +| `CLAUDE_STREAM_IDLE_TIMEOUT_MS` | A stream can stay on pings alone for | +| - | - | +| `300000`, the default | About 12.5 minutes | +| `900000` | About 22.5 minutes | +| `1800000` | About 37.5 minutes | + +If an upstream hangs while the gateway keeps sending pings, your developers also wait that long before Claude Code gives up on the stream. A connection that goes fully silent still ends after 5 to 6 minutes, because the [body idle timeout](/docs/en/network-config#streaming-idle-watchdogs) doesn't follow this variable. + +#### Deliver the value in a policy + +Add the `env` entry to each policy in `gateway.yaml` that already delivers Claude Code settings to the developers you want to cover. Put it under the `code`, `cli`, or `settings` key that policy already has. To try the value first, start with a policy that matches one group. See [`managed`](/docs/en/claude-apps-gateway-config#managed) for how policies match and inherit. This example adds the entry to a `match: {}` policy keyed `cli`: + +```yaml theme={null} +managed: + policies: + - match: {} + cli: + env: + CLAUDE_STREAM_IDLE_TIMEOUT_MS: "1800000" +``` + +With the `cli` key, you cover terminal, IDE extension, and Agent SDK sessions. For Claude Desktop's Code tab, see [Choose `cli` or `code`](/docs/en/claude-apps-gateway-config#choose-cli-or-code). + +Restart the gateway so that it reads the edited file. Then have developers restart Claude Code to get `CLAUDE_STREAM_IDLE_TIMEOUT_MS`. + +### Long thinking on an Anthropic API upstream + +If `provider: anthropic` is the model's only upstream and your proxy logs one request open for about 20 minutes, then `502` or `504` errors, raise [`CLAUDE_STREAM_IDLE_TIMEOUT_MS`](/docs/en/env-vars) in a gateway policy. + +* **The long request**: a stream that delivers `message_start` and then only pings while Claude thinks. Claude Code ends it after about 20 minutes with default settings, and later once you raise the variable. +* **The errors**: requests that Claude Code then sends [without streaming](/docs/en/errors#streaming-response-ended-before-any-complete-data-was-received). Each one fails with a `502` from the gateway, or with your proxy's `504` if the proxy's timeout is shorter than the gateway's wait. That wait is [`timeouts.upstream_ttfb_ms`](/docs/en/claude-apps-gateway-config#http-tuning), which you don't need to raise for this fix. + +To confirm the cause, see [Confirm the cause](#confirm-the-cause). + +Pick the value whose time covers your longest thinking pause: about 20 minutes at the default, 30 at `900000`, and 45 at `1800000`. Then follow [Deliver the value in a policy](#deliver-the-value-in-a-policy). + ## Related * [Claude apps gateway overview](/docs/en/claude-apps-gateway): quickstart and developer connection diff --git a/content/en/docs/claude-code/claude-apps-gateway-on-aws.md b/content/en/docs/claude-code/claude-apps-gateway-on-aws.md index aee09696d6..1fec7e8a91 100644 --- a/content/en/docs/claude-code/claude-apps-gateway-on-aws.md +++ b/content/en/docs/claude-code/claude-apps-gateway-on-aws.md @@ -561,6 +561,7 @@ This route uses only the [`models`](/docs/en/claude-apps-gateway-config#models) ```yaml theme={null} models: + # Include the served model's id, such as claude-opus-4-8, in each id so the gateway's spend meter can price it. - id: platform-claude-opus-4-8 upstream_model: bedrock: arn:aws:bedrock:us-east-1:123456789012:application-inference-profile/abc123 @@ -581,7 +582,45 @@ Tell developers in a pinned team to start Claude Code with `--model platform-cla The gateway enforces `availableModels` on every request, not only in the model picker, and AWS billing groups the spend by the tag you activated. Without the `match: {}` catch-all, a developer who matches no policy gets every model in the catalog and can bill either team's profile. -The costs: the config grows with teams times models, and the role that signs this upstream's Bedrock requests must also be allowed to invoke the `application-inference-profile/*` ARNs. That role is the gateway's principal, or with `assume_role` the role it assumes. See [`pricing`](/docs/en/claude-apps-gateway-config#pricing) for how the gateway's own spend meter prices these ids. +The costs: + +* The config grows with teams times models +* The role that signs this upstream's Bedrock requests must also be allowed to invoke the `application-inference-profile/*` ARNs. That role is the gateway's principal, or with `assume_role` the role it assumes. + +See [How requests are priced](/docs/en/claude-apps-gateway-spend-limits#how-requests-are-priced) for how the gateway's own spend meter prices these ids. + +#### Let a developer choose which team to bill + +To let a developer who works for two teams choose which team each session bills, give that pair of teams an IdP group and a policy of its own. + +**1. Add a group for the pair** + +In your IdP, add the developer to a new group, such as `team-platform-and-data`. If they're already signed in, have them run `/login` again, or wait for the next [silent refresh](/docs/en/claude-apps-gateway-config#managed), so the gateway sees the new group. + +**2. List its policy first** + +Put the group's policy above the single-team policies and allow both teams' ids in it. Copy in any other settings the two team policies set. + +```yaml theme={null} +managed: + policies: + - match: {groups: [team-platform-and-data]} + cli: {availableModels: [platform-claude-opus-4-8, data-claude-opus-4-8], enforceAvailableModels: true} + - match: {groups: [team-platform]} + cli: {availableModels: [platform-claude-opus-4-8], enforceAvailableModels: true} + - match: {groups: [team-data]} + cli: {availableModels: [data-claude-opus-4-8], enforceAvailableModels: true} + - match: {} + cli: {availableModels: [claude-opus-4-8, claude-sonnet-4-6], enforceAvailableModels: true} +``` + +**3. Start each session on a team's id** + +Have the developer pass the id of the team the work is for, such as `claude --model data-claude-opus-4-8`. + +The gateway applies the [first policy that matches](/docs/en/claude-apps-gateway-config#managed), so a developer in only the two team groups gets the `team-platform` policy. Their sessions on the data team's id fail with `is not in your role's availableModels allowlist`, naming Claude Code's default model and not the id they typed. If you list both team groups in one policy's `groups` instead, everyone in either team can bill either team's profile. + +In the gateway's own [spend limits](/docs/en/claude-apps-gateway-spend-limits#set-a-cap), the developer has one total and one cap per period, by default the lowest of their groups' caps, whichever id a session uses. To keep one team's lower cap from stopping work for the other, set a per-user cap for the developer. ## Next steps diff --git a/content/en/docs/claude-code/claude-apps-gateway-on-gcp.md b/content/en/docs/claude-code/claude-apps-gateway-on-gcp.md index 72425a25d8..fe9080660f 100644 --- a/content/en/docs/claude-code/claude-apps-gateway-on-gcp.md +++ b/content/en/docs/claude-code/claude-apps-gateway-on-gcp.md @@ -221,7 +221,11 @@ gcloud run deploy claude-gateway \ --no-invoker-iam-check ``` -Direct VPC egress, via `--network`, `--subnet`, and `--vpc-egress=private-ranges-only`, lets the service reach the Cloud SQL private IP directly. Each instance holds up to [`store.max_connections`](/docs/en/claude-apps-gateway-config#store) Postgres connections, five by default, so keep maximum instances × `store.max_connections` below your Cloud SQL tier's connection limit; the [reference assets](#terraform-reference) cap instances at 8 for the `db-g1-small` tier for this reason. Public egress to Google Cloud's Agent Platform endpoints and `accounts.google.com` goes directly to the internet rather than through the VPC, so no Cloud NAT is needed. +Direct VPC egress, via `--network`, `--subnet`, and `--vpc-egress=private-ranges-only`, lets the service reach the Cloud SQL private IP directly. Public egress to Google Cloud's Agent Platform endpoints and `accounts.google.com` goes directly to the internet rather than through the VPC, so no Cloud NAT is needed. + +> [!NOTE] +> +> Each instance holds up to [`store.max_connections`](/docs/en/claude-apps-gateway-config#store) Postgres connections, five by default. Use [Size the connection pool](/docs/en/claude-apps-gateway-deploy#size-the-connection-pool) to check `--max-instances=8` against the connections your database has left for the gateway, and include the extra instances a rolling update starts. The invoker IAM check must be open or disabled. The gateway runs its own OIDC and its clients carry no GCP token, so Cloud Run's invoker check has to admit unauthenticated requests. The gateway's OIDC sign-in authenticates the request once it reaches the container, with `allowed_email_domains` gating which domains may sign in. diff --git a/content/en/docs/claude-code/claude-apps-gateway-spend-limits.md b/content/en/docs/claude-code/claude-apps-gateway-spend-limits.md index 3b991349a6..94302896db 100644 --- a/content/en/docs/claude-code/claude-apps-gateway-spend-limits.md +++ b/content/en/docs/claude-code/claude-apps-gateway-spend-limits.md @@ -72,6 +72,12 @@ Whichever rate applies, the meter then multiplies the amount by [`pricing.multip Client aborts are billed too. When a stream ends without the upstream's final usage frame, the meter bills a floor estimate of about four characters per output token for the text already sent to the client, so aborting requests early doesn't evade a cap. +#### Long-prompt rates + +The list price for [Claude Haiku 5.5](https://platform.claude.com/docs/en/models/haiku-5-5/overview) has a [higher rate for prompts over a token threshold](/docs/en/model-config#haiku-5-5-context-window-and-pricing). When Haiku 5.5 serves a request whose prompt exceeds the threshold, a gateway server running Claude Code v2.1.293 or later prices the whole request at that rate. The meter counts input tokens, cache reads, and cache writes toward that threshold. + +If one of your `pricing.overrides` rows matches the request, that row's rates apply at any prompt length. + ### Postgres availability The pre-check queries Postgres with a two-second timeout. If the store is unreachable or times out, enforcement fails open by default: the request proceeds, the gateway logs a warning, and the response carries no `anthropic-ratelimit-unified-*` headers. Set [`enforcement.fail_closed_on_error: true`](/docs/en/claude-apps-gateway-config#enforcement) to fail closed instead, which returns the same `429 billing_error` but with the message `spend limit unavailable` and no period, reset time, or `retry-after` header. Fail-open keeps a store outage from becoming an inference outage; fail-closed guarantees no unmetered spend. diff --git a/content/en/docs/claude-code/claude-apps-gateway.md b/content/en/docs/claude-code/claude-apps-gateway.md index 39e52dc6ae..15b198e099 100644 --- a/content/en/docs/claude-code/claude-apps-gateway.md +++ b/content/en/docs/claude-code/claude-apps-gateway.md @@ -514,7 +514,7 @@ The gateway delivers the [`anthropic-beta`](https://platform.claude.com/docs/en/ | [`/design-sync`](/docs/en/commands#all-commands) and `/design-login` | Not available | Both need claude.ai, which the CLI doesn't contact on gateway sessions, so neither command appears there | | Features that need feature-flag fetching, such as `/import` and `claude import` | Not available | The CLI skips the flag fetch on gateway sessions. [Features that need feature-flag fetching](/docs/en/env-vars#features-that-need-feature-flag-fetching) lists what that turns off | | Standard prompt caching | Available | The gateway forwards `cache_control` breakpoints to every upstream. [Where the cache lives](/docs/en/prompt-caching#where-the-cache-lives) covers which blocks the CLI marks, including the system context it appends mid-conversation | -| 1-hour cache TTL | Not available | The CLI omits the extended-cache-ttl beta on gateway sessions, because not every upstream the gateway can route to supports the 1-hour TTL, so prompt caching through the gateway uses the 5-minute TTL; see the beta-header note above | +| 1-hour cache TTL | Available with opt-in | The CLI uses the 5-minute TTL on gateway sessions by default. To request the 1-hour TTL, set it [in a policy](/docs/en/claude-apps-gateway-config#one-hour-prompt-cache). Set it only if your upstreams offer the 1-hour TTL for every model the gateway serves, because the request fails if an upstream rejects the TTL | | Auto mode | Available | Follows the [third-party provider rules](/docs/en/permission-modes#enable-auto-mode-on-bedrock-agent-platform-or-foundry): only the models eligible on third-party providers can use it. Before v2.1.207, auto mode on gateway sessions required setting `CLAUDE_CODE_ENABLE_AUTO_MODE=1`, deliverable through the managed policy `env` block | | First-party-only optimizations such as global cache scope and token-efficient tools | Not available | The CLI doesn't enable them on gateway sessions; see the beta-header note above | | OTLP/gRPC | Not supported | OTLP over HTTP only | diff --git a/content/en/docs/claude-code/claude-code-on-the-web.md b/content/en/docs/claude-code/claude-code-on-the-web.md index bee4357834..44149f1737 100644 --- a/content/en/docs/claude-code/claude-code-on-the-web.md +++ b/content/en/docs/claude-code/claude-code-on-the-web.md @@ -264,7 +264,7 @@ Cloud sessions support [built-in commands](/docs/en/commands) that produce text * **`/model`, `/effort`, `/color`, and `/rename`**: pass the value as an argument, for example `/model sonnet`, instead of opening the terminal picker or slider. The argument forms follow each command's [availability notes](/docs/en/commands#all-commands). * **`/fast`**: toggles [fast mode](/docs/en/fast-mode#use-fast-mode-in-cloud-sessions) for the session when fast mode is [available on your account](/docs/en/fast-mode#requirements). Requires Claude Code v2.1.271 or later in the session's environment. -* **`/config`**: in your browser at claude.ai/code, opens the Claude Code section of your settings instead of setting a value, and text after the command, including `key=value`, is ignored. To change a setting for a cloud session, set an [environment variable](/docs/en/cloud-environments#set-environment-variables) on the environment. In a session with one repository outside a [project](/docs/en/claude-projects), commit the key to that repository's `.claude/settings.json` instead. [Settings in cloud sessions](/docs/en/settings#settings-in-cloud-sessions) lists what each session reads. +* **`/config`**: in your browser at claude.ai/code, opens the Claude Code section of your settings instead of setting a value, and text after the command, including `key=value`, is ignored. To change a setting for a cloud session, set an [environment variable](/docs/en/cloud-environments#set-environment-variables) on the environment. In a session with one repository outside a [project](/docs/en/claude-projects)'s threads, commit the key to that repository's `.claude/settings.json` instead. [Settings in cloud sessions](/docs/en/settings#settings-in-cloud-sessions) lists what each session reads. For context management specifically: diff --git a/content/en/docs/claude-code/claude-directory.md b/content/en/docs/claude-code/claude-directory.md index ff98038204..c2d85cda81 100644 --- a/content/en/docs/claude-code/claude-directory.md +++ b/content/en/docs/claude-code/claude-directory.md @@ -76,7 +76,7 @@ Click a filename to open that node in the explorer above. | [`agents/*.md`](#ce-agents) | Project and global | ✓ | Subagent definitions with their own prompt and tools | [Subagents](/docs/en/sub-agents) | | [`workflows/*.js`](#ce-workflows) | Project and global | ✓ | Dynamic workflow scripts written by Claude and saved from `/workflows`; each file becomes a `/` command | [Dynamic workflows](/docs/en/workflows) | | [`agent-memory//`](#ce-agent-memory) | Project and global | ✓ | Persistent memory for subagents | [Persistent memory](/docs/en/sub-agents#enable-persistent-memory) | -| [`~/.claude.json`](#ce-claude-json) | Global only | | App state, OAuth, UI toggles, personal MCP servers | [Global config](/docs/en/settings-reference#global-config-settings) | +| [`~/.claude.json`](#ce-claude-json) | Global only | | App state, account details, UI toggles, personal MCP servers | [Global config](/docs/en/settings-reference#global-config-settings) | | [`projects//memory/`](#ce-global-projects) | Global only | | Auto memory: Claude's notes to itself across sessions | [Auto memory](/docs/en/memory#auto-memory) | | [`keybindings.json`](#ce-keybindings) | Global only | | Custom keyboard shortcuts | [Keybindings](/docs/en/keybindings) | | [`themes/*.json`](#ce-themes) | Global only | | Custom color themes | [Custom themes](/docs/en/terminal-config#create-a-custom-theme) | @@ -283,7 +283,7 @@ You can also delete any of the application-data paths above yourself, apart from | `~/.claude/debug/`, `~/.claude/plans/`, `~/.claude/session-env/`, `~/.claude/shell-snapshots/`, `~/.claude/backups/` | Nothing user-facing | | `~/.claude/todos/`, `~/.claude/statsig/`, `~/.claude/logs/`, `~/.claude/image-cache/` | Nothing. Legacy directories not written by current versions. | -Don't delete `~/.claude.json`, `~/.claude/settings.json`, or `~/.claude/plugins/`: those hold your auth, preferences, and installed plugins. +Don't delete `~/.claude.json`, `~/.claude/settings.json`, or `~/.claude/plugins/`: those hold your account details, preferences, and installed plugins. ## Related resources diff --git a/content/en/docs/claude-code/cloud-environments.md b/content/en/docs/claude-code/cloud-environments.md index e08414f206..18e9ecc4f1 100644 --- a/content/en/docs/claude-code/cloud-environments.md +++ b/content/en/docs/claude-code/cloud-environments.md @@ -476,7 +476,7 @@ If you have SessionStart hooks in your user-level `~/.claude/settings.json`, don ### Install dependencies with a SessionStart hook -To install dependencies only in cloud sessions outside a [project](/docs/en/claude-projects#what-threads-pick-up-from-your-repositories), pair a SessionStart hook with a script that checks where it's running. +To install dependencies only in cloud sessions outside a [project](/docs/en/claude-projects#what-threads-pick-up-from-your-repositories)'s threads, pair a SessionStart hook with a script that checks where it's running. First, add a SessionStart hook to your repo's `.claude/settings.json`. This configuration tells Claude Code to run `scripts/install_pkgs.sh` from your repository whenever a session starts or resumes: diff --git a/content/en/docs/claude-code/code-review-pull-requests.md b/content/en/docs/claude-code/code-review-pull-requests.md index fee0fbba09..4b11cff92e 100644 --- a/content/en/docs/claude-code/code-review-pull-requests.md +++ b/content/en/docs/claude-code/code-review-pull-requests.md @@ -110,7 +110,7 @@ Post one of these commands as a comment on the pull request: | `@claude review` | Starts a single review without subscribing the PR to future pushes | You want one review now, such as on a pull request in a repository set to **Manual**, or another review right away in the other modes | | `@claude review always` | Starts a review and subscribes the PR to push-triggered reviews going forward | You want every subsequent push to start a fresh review, such as on a high-priority PR in a repository set to **Manual** | | `@claude review once` | Same as `@claude review`: starts a single review without subscribing | The same cases as `@claude review` | -| `@claude review stop` | Ends the PR's subscription to push-triggered reviews, without starting a review or canceling one that's already queued or running. Claude replies with a comment instead of a check run. | You subscribed a PR with `@claude review always` in a repository set to **Manual** or **Once after PR creation**, and no longer want each push to start a review | +| `@claude review stop` | Ends the PR's subscription to push-triggered reviews, without starting a review or canceling one that's already running. Claude replies with a comment instead of a check run. | You subscribed a PR with `@claude review always` in a repository set to **Manual** or **Once after PR creation**, and no longer want each push to start a review | | `@claude review off` or `@claude review pause` | Same as `@claude review stop` | The same cases as `@claude review stop` | In a repository set to **After every push**, you can't stop reviews with a comment, because pushes there start reviews with or without a subscription. To stop pushes from starting reviews on one pull request there, convert it to a [draft](#review-drafts-and-pull-requests-from-forks). When you mark it ready for review again, a review starts. diff --git a/content/en/docs/claude-code/commands.md b/content/en/docs/claude-code/commands.md index 41090876cc..6b5acb4897 100644 --- a/content/en/docs/claude-code/commands.md +++ b/content/en/docs/claude-code/commands.md @@ -65,7 +65,7 @@ In the table below, `` indicates a required argument and `[arg]` indicates | `/bug [report]` | Report a bug or share your conversation. You choose how much session history to include and confirm on a consent screen before anything is sent. When you're signed in to Anthropic on a first-party connection, the report goes to Anthropic; on a third-party provider, or without Anthropic credentials, Claude Code writes the report to a [local archive under `~/.claude/feedback-bundles/`](/docs/en/data-usage#telemetry-services) that you forward yourself. In the [VS Code extension](/docs/en/vs-code#use-the-prompt-box), `/bug` opens the extension's own feedback dialog instead; requires Claude Code v2.1.229 or later. When you run it while Claude is responding, Claude Code opens the dialog immediately. Before v2.1.232, Claude Code queued the command until the turn finished. Alias: `/share`. Before v2.1.212, `/bug` and `/share` were aliases of `/feedback` | | `/cd ` | Move this session to a new working directory, keeping the conversation. Type a partial path to see matching directory suggestions; press `Tab` to accept one. For what Claude Code applies from the new directory as soon as you move, and how `/cd` differs from `/add-dir`, see [Move the session to another directory](/docs/en/permissions#move-the-session-to-another-directory) | | `/chrome` | Configure [Claude in Chrome](/docs/en/chrome) settings | -| `/claude-api [migrate\|upgrade\|managed-agents-onboard\|managed-agents-secure\|prompt-audit\|cost-optimize\|build-eval\|hillclimb\|preserved-thinking-migration]` | **[Skill](/docs/en/skills#bundled-skills).** Load [Claude API](https://platform.claude.com/docs/en/api/overview) and [Managed Agents](https://platform.claude.com/docs/en/managed-agents/overview) reference material for your project's language. Also activates automatically when your code imports `anthropic` or `@anthropic-ai/sdk`. For what each subcommand does and the version it requires, see [Work on Claude API projects](/docs/en/skills#work-on-claude-api-projects) | +| `/claude-api [migrate\|upgrade\|api-version\|managed-agents-onboard\|managed-agents-secure\|prompt-audit\|cost-optimize\|build-eval\|hillclimb\|preserved-thinking-migration]` | **[Skill](/docs/en/skills#bundled-skills).** Load [Claude API](https://platform.claude.com/docs/en/api/overview) and [Managed Agents](https://platform.claude.com/docs/en/managed-agents/overview) reference material for your project's language. Also activates automatically when your code imports `anthropic` or `@anthropic-ai/sdk`. For what each subcommand does and the version it requires, see [Work on Claude API projects](/docs/en/skills#work-on-claude-api-projects) | | `/claude-in-chrome [task]` | **[Skill](/docs/en/skills#bundled-skills).** Have Claude carry out a task in your browser, such as testing a page, filling a form, or reading console logs, through [Claude in Chrome](/docs/en/chrome). Available when Chrome integration is enabled for the session, for example with `claude --chrome`, or when Claude Code can offer to [install the extension](/docs/en/chrome#install-the-extension-when-claude-asks) | | `/clear [name]` | Start a new conversation with empty context. Pass a name to label the previous conversation in the `/resume` picker. To free up context while continuing the same conversation, use `/compact` instead. Resume the previous conversation with `/resume`, or, in the same Claude Code process, restore it from [the rewind menu's previous-session entry](/docs/en/checkpointing#rewind-past-a-cleared-conversation). Aliases: `/reset`, `/new` | | `/code-review [low\|medium\|high\|xhigh\|max\|ultra] [--fix] [--comment] [--max-findings n\|all\|default] [pr#\|branch\|path]` | **[Skill](/docs/en/skills#bundled-skills).** Review the current diff, or a PR number, branch, or path you pass, for correctness bugs. Depending on your model and effort level, the review also covers cleanup opportunities. Pass `--fix` to have Claude apply the findings, `--comment` to post them on the GitHub PR or GitLab merge request, or `ultra` to run a deep [cloud review](/docs/en/ultrareview). Posting to a GitLab merge request requires Claude Code v2.1.257 or later. With `ultra` on a `github.com` PR target, pass `--post` to preselect [posting the finished findings to the PR](/docs/en/ultrareview#post-findings-to-the-pull-request) in the launch dialog; `--post` requires Claude Code v2.1.227 or later. See [Review locally with `/code-review`](/docs/en/code-review-local) for the effort levels, targeting, and how it relates to `/simplify`. Alias: `/review` | diff --git a/content/en/docs/claude-code/common-workflows.md b/content/en/docs/claude-code/common-workflows.md index 289a052d1e..f9e394cc1f 100644 --- a/content/en/docs/claude-code/common-workflows.md +++ b/content/en/docs/claude-code/common-workflows.md @@ -377,7 +377,12 @@ This fetches data from connected MCP servers using the format @server:resource. > * Directory references show file listings, not contents > * You can reference multiple files in a single message (for example, "@file1.js and @file2.js") -To stop `@` references from including file contents and directory listings in your message, set [`CLAUDE_CODE_DISABLE_FILE_MENTIONS=1`](/docs/en/env-vars#variables) in your shell or user settings. Claude then receives the paths you referenced with a note to read them using its file tools. The variable requires Claude Code v2.1.299 or later, and Claude Code ignores it in project and local settings. +To stop `@` references from including file contents and directory listings, set [`CLAUDE_CODE_DISABLE_FILE_MENTIONS`](/docs/en/env-vars#variables) to `1` in your shell or in the [`env` block](/docs/en/env-vars#set-variables-in-settings-files) of user settings or [managed settings](/docs/en/managed-settings). Claude then receives the paths you referenced with a note to read them using its file tools. The variable requires Claude Code v2.1.299 or later, and Claude Code ignores it in project and local settings. + +Your [`PreToolUse` hooks](/docs/en/hooks#pretooluse) don't run when Claude Code includes a file you reference with `@`, because it makes no tool call. If you rely on those hooks to control what Claude reads, block specific paths or stop `@` references from including files: + +* **Block specific paths**: add a [`Read` deny rule](/docs/en/permissions#read-and-edit) for them. Claude Code doesn't include a file that the rule matches. +* **Stop `@` references from including files**: set `CLAUDE_CODE_DISABLE_FILE_MENTIONS=1`, which stops `@` file and directory references in your messages from including content, even for paths your hooks don't check. Your matching hooks then run before Claude opens a referenced path with a tool such as `Read`. *** diff --git a/content/en/docs/claude-code/costs.md b/content/en/docs/claude-code/costs.md index 54b65fee45..95583a512f 100644 --- a/content/en/docs/claude-code/costs.md +++ b/content/en/docs/claude-code/costs.md @@ -324,10 +324,11 @@ input=$(cat) cmd=$(echo "$input" | jq -r '.tool_input.command') # If running tests, filter to show only failures -if [[ "$cmd" =~ ^(npm test|pytest|go test) ]]; then +pattern='^(npm test|pytest|go test)( [^;&|<>`$#\\[:cntrl:]]*)?$' +if [[ "$cmd" =~ $pattern ]]; then filtered_cmd="$cmd 2>&1 | grep -A 5 -E '(FAIL|ERROR|error:)' | head -100" echo "$input" | jq --arg filtered "$filtered_cmd" \ - '{hookSpecificOutput: {hookEventName: "PreToolUse", permissionDecision: "allow", updatedInput: (.tool_input + {command: $filtered})}}' + '{hookSpecificOutput: {hookEventName: "PreToolUse", updatedInput: (.tool_input + {command: $filtered})}}' else echo "{}" fi diff --git a/content/en/docs/claude-code/debug-your-config.md b/content/en/docs/claude-code/debug-your-config.md index 5db85d7994..9e1d854ee6 100644 --- a/content/en/docs/claude-code/debug-your-config.md +++ b/content/en/docs/claude-code/debug-your-config.md @@ -61,6 +61,7 @@ Run `/hooks` to list every hook registered for the current session, grouped by e * The hook is defined in a standalone file. Hooks go under the `"hooks"` key in a [settings file](/docs/en/settings#settings-files). * The `matcher` value is an array instead of a single string. Claude Code lists the entry as an invalid setting when you start an interactive session and in `claude doctor`. If the array is under `PreToolUse` or `PermissionRequest`, none of that file's other hooks load either. +* The hook is in a skill's frontmatter, and neither you nor Claude has invoked the skill yet in this session. Invoke it or ask Claude to, then run `/hooks` again. If the hook still doesn't appear, check for other causes, such as [frontmatter that didn't parse](/docs/en/skills#skill-not-triggering) or one of the [limits on skill hooks](/docs/en/hooks#limits-on-skill-hooks). If the hook appears but doesn't fire, the matcher is the usual cause. Check it for these mistakes: diff --git a/content/en/docs/claude-code/desktop-changelog.md b/content/en/docs/claude-code/desktop-changelog.md index ef3c7f512d..bc6d4a63ac 100644 --- a/content/en/docs/claude-code/desktop-changelog.md +++ b/content/en/docs/claude-code/desktop-changelog.md @@ -204,7 +204,12 @@ To archive the session automatically once the PR merges or closes, turn on [auto ## Arrange your workspace -The Code tab is built around panes you can arrange in any layout: chat, diff, browser, terminal, file, plan, tasks, and subagent, along with the [iOS Simulator](/docs/en/desktop-ios-simulator) on macOS. Drag a pane by its header to reposition it, or drag a pane edge to resize it. Press **Cmd+\\** on macOS or **Ctrl+\\** on Windows to close the focused pane. Click **Terminal**, **Changes**, or **Browser** in the session's title bar to open the terminal, diff, or Browser pane. The **⋮** menu beside them opens more panes, such as **Files**, and holds those buttons when the window is too narrow to show them. +The Code tab is built around panes you can arrange in any layout: chat, diff, browser, terminal, file, plan, tasks, and subagent, along with the [iOS Simulator](/docs/en/desktop-ios-simulator) on macOS. Drag a pane by its header to reposition it, or drag a pane edge to resize it. Press **Cmd+\\** on macOS or **Ctrl+\\** on Windows to close the focused pane. + +To open another pane, click its icon button in the session's title bar. Hover to see each button's name, such as **Terminal**, **Changes** for the diff view, **Browser**, and **Files**. If the pane you want has no button in the title bar, select it from the **⋮** menu beside the buttons: + +* **When the window is narrow**: buttons that don't fit move into the menu +* **For panes with no button**: panes such as **Background tasks** and **Plan** are listed once the session has something to show in those panes To work across screens, pop a pane such as the diff or terminal out into its own window, and dock it back when you're done. Claude keeps working in the main window. @@ -248,7 +253,7 @@ Right-click any file path in the chat, diff viewer, or file pane to open a conte * **Attach as context**: add the file to your next prompt * **Open in**: open the file in an installed editor such as VS Code, Cursor, or Zed * **Show in Finder** on macOS, **Show in Explorer** on Windows: open the containing folder -* **Copy path**: copy the absolute path to your clipboard +* **Copy**: a submenu that copies the file's **Absolute path**, **Relative path**, or **Filename** ### Switch view modes @@ -267,6 +272,7 @@ Use Thinking to follow Claude's reasoning with tool calls still collapsed. Use V Press **Cmd+/** on macOS or **Ctrl+/** on Windows to see all shortcuts available in the Code tab. The table in this section shows the macOS keys. On Windows and Linux, change these keys: * **Cmd+Option**: press **Alt** +* **Cmd+Ctrl**: press **Ctrl+Alt** * **Cmd**: press **Ctrl** Session cycling, the terminal toggle, and the view-mode toggle use **Ctrl** on every platform. @@ -287,6 +293,7 @@ Session cycling, the terminal toggle, and the view-mode toggle use **Ctrl** on e | `Cmd` `Shift` `S` | Select an element in the Browser | | `Ctrl` `` ` `` | Toggle terminal pane | | `Cmd` `\` | Close focused pane | +| `Cmd` `Ctrl` `W` | Take focused session out of [split view](#work-in-parallel-with-sessions) | | `Cmd` `;` | Open side chat | | `Ctrl` `O` | Cycle view modes | | `Cmd` `Shift` `M` | Open permission mode menu | @@ -313,7 +320,7 @@ Computer use lets Claude open your apps, control your screen, and work directly > [!NOTE] > -> Computer use is a research preview on macOS and Windows that requires a Pro or Max plan. It is not available on Team or Enterprise plans. The Claude Desktop app must be running. +> Computer use is a research preview on macOS and Windows that requires a Pro or Max plan. It is not available on Team or Enterprise plans. The Claude Desktop app must be running. On macOS, computer use requires macOS 14 or later. Computer use is off by default. [Enable it in Settings](#enable-computer-use) before Claude can control your screen. On macOS, you also need to grant Accessibility and Screen Recording permissions. @@ -385,7 +392,12 @@ Each session is an independent conversation with its own context and changes. Yo Click **+ New** in the sidebar, or press **Cmd+N** on macOS or **Ctrl+N** on Windows, to work on multiple tasks in parallel. Press **Ctrl+Tab** and **Ctrl+Shift+Tab** to cycle through sessions in the sidebar. -To view two sessions at once, hold **Cmd** on macOS or **Ctrl** on Windows and click a session in the sidebar. The session opens in a second pane alongside the one you already have open. While the split is active, clicking another sidebar session replaces whichever pane has focus. Press **Cmd+\\** on macOS or **Ctrl+\\** on Windows to close the focused pane and return to a single session. +You can also open a second session next to the current session or in a window of its own: + +* **Side by side**: hold **Option** on macOS or **Alt** on Windows and click a session in the sidebar, or right-click the session and select **Open in**, then **Split view** +* **In its own window**: hold **Cmd** on macOS or **Ctrl** on Windows and click a session, or right-click the session and select **Open in**, then **New window** + +In the split view, the pane you opened or clicked last has focus, and the other pane is dimmed. To change which session a pane shows, click in that pane to give it focus, then click a session in the sidebar. To take the focused session out of the split view, press **Cmd+Ctrl+W** on macOS or **Ctrl+Alt+W** on Windows. #### Run a session in its own worktree @@ -475,7 +487,16 @@ Claude Code applies three safety behaviors across sessions: * Claude Code checks each message from this surface against the receiving session's [inbound controls](/docs/en/cross-session-messaging#control-inbound-messages), even when the receiving session doesn't have [cross-session messaging](/docs/en/cross-session-messaging#availability) itself. If you set [`crossSessionInbound`](/docs/en/settings-reference#crosssessioninbound) to `refuse` in the receiving session, Claude Code drops messages from this surface. Claude Code reports the refusal to the Claude desktop app. Before v2.1.234, Claude Code dropped every message from this surface to a receiving session without cross-session messaging. * Claude Code quotes each incoming message and attributes it to the session that sent it, and Claude still follows the receiving session's own permission settings when acting on one. -Claude can also suggest new sessions. When it notices something worth fixing that's out of scope for the current task, it offers the work as a task chip in the chat. Click the chip to start that work in a new session with its own worktree; Claude continues your current session uninterrupted. +### Start a task that Claude suggests + +When Claude notices something worth fixing outside your current task, it suggests that work as a task. In local and SSH sessions on the [current layout](#check-which-layout-you-have), the suggestion is a card in the chat, and its buttons either start the task or keep it in this session: + +* **Start**: starts the task in another session. By default the task runs in the current session's environment. The card then shows the started session's state, and the [sidebar](#work-in-parallel-with-sessions) lists the started session under the current session. +* **Do it here**: sends the task to the current session as a message +* **Options**: review or change settings such as the environment, model, [worktree](#run-a-session-in-its-own-worktree), and permissions before you click **Start** +* **Start all**: when the card lists several tasks, starts each task in its own session without waiting for one task to finish before starting the next + +In cloud sessions, and in local and SSH sessions on the earlier layout, the suggestion is a **Suggested task** card. To start the task where the card's main button says, for example **Send to cloud** or **Start with worktree**, click that button. Click the caret beside the main button for other ways to start the task, including **Do it here**. ### Run long-running tasks in the cloud @@ -524,10 +545,14 @@ To hide a session that already appears on your other devices, archive it in Desk A task can end up as a Code session in two ways: you ask for one directly, such as "open a Claude Code session and fix the login bug", or Dispatch decides the task is development work and spawns one on its own. Tasks that typically route to Code include fixing bugs, updating dependencies, running tests, or opening pull requests. Research, document editing, and spreadsheet work stay in Cowork. -Either way, the Code session appears in the Code tab's sidebar with a **Dispatch** badge. You get a push notification on your phone when it finishes or needs your approval. +#### Follow a session that Dispatch started + +The session that Dispatch starts appears in the Code tab's sidebar with your other sessions. With the sidebar's [default grouping and sorting](#organize-and-find-sessions), look for the newest session in the group for the folder it runs in. You get a push notification on your phone when it finishes or needs your approval. If you have [computer use](#let-claude-use-your-computer) enabled, Dispatch-spawned Code sessions can use it too. App approvals in those sessions expire after 30 minutes and re-prompt, rather than lasting the full session like regular Code sessions. +#### Set up Dispatch + For setup, pairing, and Dispatch settings, see the [Dispatch help article](https://support.claude.com/en/articles/13947068). Dispatch requires a Pro or Max plan and is not available on Team or Enterprise plans. Dispatch is one of several ways to work with Claude when you're away from your terminal. For a comparison with the other options, see [Platforms and integrations](/docs/en/platforms#work-when-you-are-away-from-your-terminal). @@ -780,7 +805,7 @@ The environment you pick when [starting a session](#start-a-session) determines ### Create a saved environment -A saved environment is an entry in the [environment selector](#start-a-session) that records where Claude runs, so you can start later sessions there. A local or SSH environment also holds the folders Claude works in. Saved local and SSH environments [require Claude Desktop v2.37337.0 or later](#check-which-layout-you-have). +A saved environment is an entry in the [environment selector](#start-a-session) that records where Claude runs, so you can start later sessions there. A local or SSH environment also holds the folders Claude works in. Saved local and SSH environments are part of the [current layout](#check-which-layout-you-have), so if you don't see them, check which layout you have and how to get the current one. **1. Open the New environment dialog** @@ -1823,7 +1848,8 @@ In a local session, the **Code** tab runs its own copy of Claude Code, which has If a new session has no [environment selector](#start-a-session) under the prompt box, you have the earlier layout: * **[Desktop older than v2.37337.0](#check-your-version)**: update to get the current layout. Select **Claude > Check for Updates…** on macOS or **Help > Check for Updates…** on Windows. -* **[Third-party provider](/docs/en/third-party-integrations)**: you keep the earlier layout, so there is nothing to do. +* **[Third-party provider](/docs/en/third-party-integrations) with sessions on your computer**: the current layout requires Claude Desktop v3.1623.0 or later, so [check your version](#check-your-version). To update, select **Claude > Check for Updates…** on macOS or **Help > Check for Updates…** on Windows. If your organization [turns off auto-updates](#device-management-policies), **Check for Updates…** is hidden, so ask your administrator for v3.1623.0 or later. +* **Third-party provider with sessions on your organization's infrastructure**: when your organization runs sessions on its own infrastructure rather than on your computer, Desktop keeps the earlier layout, and updating doesn't change the layout. If you don't know where your sessions run, ask your administrator. In the earlier layout, choose the environment and project folder above the prompt box, and the permission mode and model in the row under it. The earlier layout lacks the [session details panel](#see-session-details) and [saved local and SSH environments](#create-a-saved-environment). diff --git a/content/en/docs/claude-code/desktop-scheduled-tasks.md b/content/en/docs/claude-code/desktop-scheduled-tasks.md index 11afeca74d..8c913de33a 100644 --- a/content/en/docs/claude-code/desktop-scheduled-tasks.md +++ b/content/en/docs/claude-code/desktop-scheduled-tasks.md @@ -28,8 +28,8 @@ Claude Code offers three ways to schedule recurring or one-off work: | Access to local files | No (fresh clone) | Yes | Yes | | MCP servers | Connectors configured per task | [Config files](/docs/en/mcp) and connectors | Inherits from session | | Permission prompts | No (runs autonomously) | Configurable per task | Inherits from session | -| Customizable schedule | Via `/schedule` in the CLI | Yes | Yes | -| Minimum interval | 1 hour | 1 minute | 1 minute | +| Customizable schedule | Yes | Yes | Yes | +| Minimum interval | 1 hour | 1 minute when Claude sets it, [1 hour in the forms](/docs/en/desktop-scheduled-tasks#schedule-options) | 1 minute | > [!TIP] > @@ -61,7 +61,7 @@ In the box below the name, enter what Claude should do when the task runs. **5. Turn on Only on this computer** -Skip past the **Trigger** card for now and expand **Advanced settings** below it. On the **General** tab, turn on **Only on this computer**. With it on, the task runs on your machine in a local folder, and the **Trigger** card offers the presets listed in [Schedule options](#schedule-options). +Skip past the **Trigger** card for now and expand **Advanced settings** below it. On the **General** tab, turn on **Only on this computer**. With it on, the task runs on your machine in a local folder. If the switch is unavailable, clear the repository or the GitHub event or API trigger, because those make the task a [cloud scheduled task](/docs/en/routines). @@ -81,7 +81,7 @@ In the instructions box's toolbar, select a [permission mode](#permissions-for-s Click **Create**. If you haven't trusted the folder yet, Desktop asks you to trust it at this point. The task's detail page opens. -On the detail page, click the pencil icon to open the [**Edit** form](#manage-scheduled-tasks). There you can change the **Description** that Desktop filled in from your instructions, select **Worktree**, or switch the schedule to **Manual**. +On the detail page, click the pencil icon to open the [**Edit** form](#manage-scheduled-tasks). There you can change the **Description** that Desktop filled in from your instructions, select **Worktree**, or switch the schedule to **Manual** or **Custom**. You can also create a task by describing what you want in any session. For example, "set up a daily code review that runs every morning at 9am" creates a recurring task. A request like "remind me at 3pm tomorrow to check the deploy" creates a one-time task that disables itself after it fires. @@ -95,21 +95,22 @@ Then fill in the local form's fields: * **Description**: enter a description. **Create** stays unavailable until you do. * **The instructions box**: enter what Claude should do when the task runs. Select the permission mode and model from the menus in the box. * **Working folder**: select the folder the task runs in. **Create** stays unavailable until you select one. -* **Trigger**: select a schedule. **Custom** takes a cron expression. For the other presets, see [Schedule options](#schedule-options). +* **Trigger**: select a schedule. For the presets, see [Schedule options](#schedule-options). Click **Create**. The task's detail page opens. ## Schedule options -When you turn on **Only on this computer** under **Advanced settings**, the **Trigger** card offers Hourly, Daily, Weekdays, and Weekly. The task's [**Edit** form](#manage-scheduled-tasks) also offers **Manual**. +When you turn on **Only on this computer** under **Advanced settings**, the **Trigger** card offers Hourly, Daily, Weekdays, and Weekly. To get **Manual** or **Custom** for such a task, open its [**Edit** form](#manage-scheduled-tasks) after you create it. That form and the [dialog with **Only on this computer** at the top](#dialog-with-only-on-this-computer-at-the-top) offer these six options: * **Hourly**: runs every hour * **Daily**: runs every day at the local time you pick * **Weekdays**: same as Daily but skips Saturday and Sunday * **Weekly**: shows a time picker and a day picker * **Manual**: no schedule, only runs when you click **Run now**. Useful for saving a prompt you trigger on demand +* **Custom**: runs on a cron expression that you enter and that is evaluated in your local time, such as `0 9 * * *` for 9:00 AM each day. Write days of the week and months as numbers, since their names aren't accepted. Sunday is `0`, not `7`. The form rejects an expression that runs more often than once per hour. -For intervals the picker doesn't offer, such as every 15 minutes, the first of each month, or a single run at a specific future time, ask Claude in any Desktop session to set the schedule. Use plain language; for example, "schedule a task to run all the tests every 6 hours." +You can also ask Claude in any Desktop session to set the schedule. Claude isn't held to the once-per-hour limit and can set a single run at a future time. For example, ask "run the test suite every 30 minutes" or "next Monday at 9am, summarize the pull requests merged since Friday." ## How scheduled tasks run @@ -121,7 +122,16 @@ Tasks only run while the desktop app is running and your computer is awake. If y > > For tasks that need to run even when your computer is off, or that should trigger on an API call or GitHub event, create a [cloud scheduled task](/docs/en/routines) instead. -When a local task fires, a new session appears under a **Scheduled** section in the sidebar. Open it to see what Claude did, review changes, or respond to permission prompts. Claude can edit files, run commands, create commits, and open pull requests, the same as in a session you start yourself. +### Find a run's session + +To open the session a run started, go to the task's [detail page](#manage-scheduled-tasks) and click that run's row in the **History** list. + +The sidebar's session list can show a **Scheduled** group as well, with one row per task. To open the session of a task's latest run, click the task's row in that group. To show the group, [check which layout you have](/docs/en/desktop#check-which-layout-you-have): + +* **Current layout**: open the [**Group and sort** menu](/docs/en/desktop#organize-and-find-sessions), select **Show**, then select **Scheduled**. The group starts collapsed, so click its heading to expand it. **Show** lists **Scheduled** when at least one of your tasks is **Active**, the **Status** a task's detail page shows. If it isn't listed, use the **History** list, which works whether or not the group shows. +* **Earlier layout**: the group is in the session list with nothing to turn on + +In a run's session, whichever way you reached it, you can see what Claude did, review changes, and respond to permission prompts. Claude can edit files, run commands, create commits, and open pull requests, the same as in a session you start yourself. ## Missed runs @@ -131,7 +141,7 @@ Keep this in mind when writing prompts. A task scheduled for 9am might run at 11 ## Permissions for scheduled tasks -Each task has its own permission mode, which you set when creating or editing the task. Allow rules from `~/.claude/settings.json` also apply to scheduled task sessions. If a task runs in [Manual mode](/docs/en/desktop#choose-a-permission-mode) and needs to run a tool it doesn't have permission for, the run stalls until you approve it. The session stays open in the sidebar so you can answer later. +Each task has its own permission mode, which you set when creating or editing the task. Allow rules from `~/.claude/settings.json` also apply to scheduled task sessions. If a task runs in [Manual mode](/docs/en/desktop#choose-a-permission-mode) and needs to run a tool it doesn't have permission for, the run stalls until you approve it. To approve it, [find the run's session](#find-a-runs-session) and answer the permission prompt there. To avoid stalls, click **Run now** after creating a task, watch for permission prompts, and select "always allow" for each one. Future runs of that task auto-approve the same tools without prompting. You can review and revoke these approvals from the task's detail page. @@ -146,7 +156,7 @@ In the **Code** tab, click **Scheduled** in the sidebar, then click a task in th * **Edit**: change the instructions, schedule, folder, or other settings * **Review history**: see every past run, including skipped runs. Hover a skipped entry to see why: your computer was asleep, the previous run was still in progress, or other scheduled tasks were already running. Click **Show more** to load older entries. * **Review allowed permissions**: see and revoke saved tool approvals for this task from the **Always allowed** panel -* **Delete**: remove the task and archive all sessions it created. An **Also delete files on disk** checkbox appears in the confirmation dialog; check it to also remove the task's `SKILL.md` file and associated data from `~/.claude/scheduled-tasks/`. +* **Delete**: remove the task. The sessions the task created are [archived](/docs/en/desktop#organize-and-find-sessions), not deleted. The folder holding the task's `SKILL.md` file stays on disk at `~/.claude/scheduled-tasks//`, or at `scheduled-tasks//` under [`CLAUDE_CONFIG_DIR`](/docs/en/env-vars) if you set that variable. To remove that folder, delete it yourself. You can also list, create, edit, and pause tasks by asking Claude in any Desktop session. For example, "pause my dependency-audit task" or "show me my scheduled tasks." To delete a task, use the **Delete** button on its detail page. diff --git a/content/en/docs/claude-code/desktop.md b/content/en/docs/claude-code/desktop.md index ef3c7f512d..bc6d4a63ac 100644 --- a/content/en/docs/claude-code/desktop.md +++ b/content/en/docs/claude-code/desktop.md @@ -204,7 +204,12 @@ To archive the session automatically once the PR merges or closes, turn on [auto ## Arrange your workspace -The Code tab is built around panes you can arrange in any layout: chat, diff, browser, terminal, file, plan, tasks, and subagent, along with the [iOS Simulator](/docs/en/desktop-ios-simulator) on macOS. Drag a pane by its header to reposition it, or drag a pane edge to resize it. Press **Cmd+\\** on macOS or **Ctrl+\\** on Windows to close the focused pane. Click **Terminal**, **Changes**, or **Browser** in the session's title bar to open the terminal, diff, or Browser pane. The **⋮** menu beside them opens more panes, such as **Files**, and holds those buttons when the window is too narrow to show them. +The Code tab is built around panes you can arrange in any layout: chat, diff, browser, terminal, file, plan, tasks, and subagent, along with the [iOS Simulator](/docs/en/desktop-ios-simulator) on macOS. Drag a pane by its header to reposition it, or drag a pane edge to resize it. Press **Cmd+\\** on macOS or **Ctrl+\\** on Windows to close the focused pane. + +To open another pane, click its icon button in the session's title bar. Hover to see each button's name, such as **Terminal**, **Changes** for the diff view, **Browser**, and **Files**. If the pane you want has no button in the title bar, select it from the **⋮** menu beside the buttons: + +* **When the window is narrow**: buttons that don't fit move into the menu +* **For panes with no button**: panes such as **Background tasks** and **Plan** are listed once the session has something to show in those panes To work across screens, pop a pane such as the diff or terminal out into its own window, and dock it back when you're done. Claude keeps working in the main window. @@ -248,7 +253,7 @@ Right-click any file path in the chat, diff viewer, or file pane to open a conte * **Attach as context**: add the file to your next prompt * **Open in**: open the file in an installed editor such as VS Code, Cursor, or Zed * **Show in Finder** on macOS, **Show in Explorer** on Windows: open the containing folder -* **Copy path**: copy the absolute path to your clipboard +* **Copy**: a submenu that copies the file's **Absolute path**, **Relative path**, or **Filename** ### Switch view modes @@ -267,6 +272,7 @@ Use Thinking to follow Claude's reasoning with tool calls still collapsed. Use V Press **Cmd+/** on macOS or **Ctrl+/** on Windows to see all shortcuts available in the Code tab. The table in this section shows the macOS keys. On Windows and Linux, change these keys: * **Cmd+Option**: press **Alt** +* **Cmd+Ctrl**: press **Ctrl+Alt** * **Cmd**: press **Ctrl** Session cycling, the terminal toggle, and the view-mode toggle use **Ctrl** on every platform. @@ -287,6 +293,7 @@ Session cycling, the terminal toggle, and the view-mode toggle use **Ctrl** on e | `Cmd` `Shift` `S` | Select an element in the Browser | | `Ctrl` `` ` `` | Toggle terminal pane | | `Cmd` `\` | Close focused pane | +| `Cmd` `Ctrl` `W` | Take focused session out of [split view](#work-in-parallel-with-sessions) | | `Cmd` `;` | Open side chat | | `Ctrl` `O` | Cycle view modes | | `Cmd` `Shift` `M` | Open permission mode menu | @@ -313,7 +320,7 @@ Computer use lets Claude open your apps, control your screen, and work directly > [!NOTE] > -> Computer use is a research preview on macOS and Windows that requires a Pro or Max plan. It is not available on Team or Enterprise plans. The Claude Desktop app must be running. +> Computer use is a research preview on macOS and Windows that requires a Pro or Max plan. It is not available on Team or Enterprise plans. The Claude Desktop app must be running. On macOS, computer use requires macOS 14 or later. Computer use is off by default. [Enable it in Settings](#enable-computer-use) before Claude can control your screen. On macOS, you also need to grant Accessibility and Screen Recording permissions. @@ -385,7 +392,12 @@ Each session is an independent conversation with its own context and changes. Yo Click **+ New** in the sidebar, or press **Cmd+N** on macOS or **Ctrl+N** on Windows, to work on multiple tasks in parallel. Press **Ctrl+Tab** and **Ctrl+Shift+Tab** to cycle through sessions in the sidebar. -To view two sessions at once, hold **Cmd** on macOS or **Ctrl** on Windows and click a session in the sidebar. The session opens in a second pane alongside the one you already have open. While the split is active, clicking another sidebar session replaces whichever pane has focus. Press **Cmd+\\** on macOS or **Ctrl+\\** on Windows to close the focused pane and return to a single session. +You can also open a second session next to the current session or in a window of its own: + +* **Side by side**: hold **Option** on macOS or **Alt** on Windows and click a session in the sidebar, or right-click the session and select **Open in**, then **Split view** +* **In its own window**: hold **Cmd** on macOS or **Ctrl** on Windows and click a session, or right-click the session and select **Open in**, then **New window** + +In the split view, the pane you opened or clicked last has focus, and the other pane is dimmed. To change which session a pane shows, click in that pane to give it focus, then click a session in the sidebar. To take the focused session out of the split view, press **Cmd+Ctrl+W** on macOS or **Ctrl+Alt+W** on Windows. #### Run a session in its own worktree @@ -475,7 +487,16 @@ Claude Code applies three safety behaviors across sessions: * Claude Code checks each message from this surface against the receiving session's [inbound controls](/docs/en/cross-session-messaging#control-inbound-messages), even when the receiving session doesn't have [cross-session messaging](/docs/en/cross-session-messaging#availability) itself. If you set [`crossSessionInbound`](/docs/en/settings-reference#crosssessioninbound) to `refuse` in the receiving session, Claude Code drops messages from this surface. Claude Code reports the refusal to the Claude desktop app. Before v2.1.234, Claude Code dropped every message from this surface to a receiving session without cross-session messaging. * Claude Code quotes each incoming message and attributes it to the session that sent it, and Claude still follows the receiving session's own permission settings when acting on one. -Claude can also suggest new sessions. When it notices something worth fixing that's out of scope for the current task, it offers the work as a task chip in the chat. Click the chip to start that work in a new session with its own worktree; Claude continues your current session uninterrupted. +### Start a task that Claude suggests + +When Claude notices something worth fixing outside your current task, it suggests that work as a task. In local and SSH sessions on the [current layout](#check-which-layout-you-have), the suggestion is a card in the chat, and its buttons either start the task or keep it in this session: + +* **Start**: starts the task in another session. By default the task runs in the current session's environment. The card then shows the started session's state, and the [sidebar](#work-in-parallel-with-sessions) lists the started session under the current session. +* **Do it here**: sends the task to the current session as a message +* **Options**: review or change settings such as the environment, model, [worktree](#run-a-session-in-its-own-worktree), and permissions before you click **Start** +* **Start all**: when the card lists several tasks, starts each task in its own session without waiting for one task to finish before starting the next + +In cloud sessions, and in local and SSH sessions on the earlier layout, the suggestion is a **Suggested task** card. To start the task where the card's main button says, for example **Send to cloud** or **Start with worktree**, click that button. Click the caret beside the main button for other ways to start the task, including **Do it here**. ### Run long-running tasks in the cloud @@ -524,10 +545,14 @@ To hide a session that already appears on your other devices, archive it in Desk A task can end up as a Code session in two ways: you ask for one directly, such as "open a Claude Code session and fix the login bug", or Dispatch decides the task is development work and spawns one on its own. Tasks that typically route to Code include fixing bugs, updating dependencies, running tests, or opening pull requests. Research, document editing, and spreadsheet work stay in Cowork. -Either way, the Code session appears in the Code tab's sidebar with a **Dispatch** badge. You get a push notification on your phone when it finishes or needs your approval. +#### Follow a session that Dispatch started + +The session that Dispatch starts appears in the Code tab's sidebar with your other sessions. With the sidebar's [default grouping and sorting](#organize-and-find-sessions), look for the newest session in the group for the folder it runs in. You get a push notification on your phone when it finishes or needs your approval. If you have [computer use](#let-claude-use-your-computer) enabled, Dispatch-spawned Code sessions can use it too. App approvals in those sessions expire after 30 minutes and re-prompt, rather than lasting the full session like regular Code sessions. +#### Set up Dispatch + For setup, pairing, and Dispatch settings, see the [Dispatch help article](https://support.claude.com/en/articles/13947068). Dispatch requires a Pro or Max plan and is not available on Team or Enterprise plans. Dispatch is one of several ways to work with Claude when you're away from your terminal. For a comparison with the other options, see [Platforms and integrations](/docs/en/platforms#work-when-you-are-away-from-your-terminal). @@ -780,7 +805,7 @@ The environment you pick when [starting a session](#start-a-session) determines ### Create a saved environment -A saved environment is an entry in the [environment selector](#start-a-session) that records where Claude runs, so you can start later sessions there. A local or SSH environment also holds the folders Claude works in. Saved local and SSH environments [require Claude Desktop v2.37337.0 or later](#check-which-layout-you-have). +A saved environment is an entry in the [environment selector](#start-a-session) that records where Claude runs, so you can start later sessions there. A local or SSH environment also holds the folders Claude works in. Saved local and SSH environments are part of the [current layout](#check-which-layout-you-have), so if you don't see them, check which layout you have and how to get the current one. **1. Open the New environment dialog** @@ -1823,7 +1848,8 @@ In a local session, the **Code** tab runs its own copy of Claude Code, which has If a new session has no [environment selector](#start-a-session) under the prompt box, you have the earlier layout: * **[Desktop older than v2.37337.0](#check-your-version)**: update to get the current layout. Select **Claude > Check for Updates…** on macOS or **Help > Check for Updates…** on Windows. -* **[Third-party provider](/docs/en/third-party-integrations)**: you keep the earlier layout, so there is nothing to do. +* **[Third-party provider](/docs/en/third-party-integrations) with sessions on your computer**: the current layout requires Claude Desktop v3.1623.0 or later, so [check your version](#check-your-version). To update, select **Claude > Check for Updates…** on macOS or **Help > Check for Updates…** on Windows. If your organization [turns off auto-updates](#device-management-policies), **Check for Updates…** is hidden, so ask your administrator for v3.1623.0 or later. +* **Third-party provider with sessions on your organization's infrastructure**: when your organization runs sessions on its own infrastructure rather than on your computer, Desktop keeps the earlier layout, and updating doesn't change the layout. If you don't know where your sessions run, ask your administrator. In the earlier layout, choose the environment and project folder above the prompt box, and the permission mode and model in the row under it. The earlier layout lacks the [session details panel](#see-session-details) and [saved local and SSH environments](#create-a-saved-environment). diff --git a/content/en/docs/claude-code/devcontainer.md b/content/en/docs/claude-code/devcontainer.md index fc9383b9c3..dbb1d87e4f 100644 --- a/content/en/docs/claude-code/devcontainer.md +++ b/content/en/docs/claude-code/devcontainer.md @@ -83,9 +83,9 @@ See [Choose your API provider](/docs/en/admin-setup#choose-your-api-provider) to ## Persist authentication and settings across rebuilds -By default, the container's home directory is discarded on rebuild, so engineers must sign in again each time. Claude Code stores its authentication token, user settings, and session history under the [`~/.claude`](/docs/en/claude-directory) directory. It stores your OAuth account, personal MCP servers, and per-project trust in [`~/.claude.json`](/docs/en/settings-reference#global-config-settings), a separate file outside that directory, so mounting a volume at `~/.claude` alone doesn't keep you signed in. Mount a named volume at `~/.claude` and set [`CLAUDE_CONFIG_DIR`](/docs/en/env-vars) to the same path so Claude Code writes `.claude.json` inside the volume. +By default, the container's home directory is discarded on rebuild, so engineers must sign in again each time. Claude Code stores its authentication token, user settings, and session history under the [`~/.claude`](/docs/en/claude-directory) directory. It stores your account details, personal MCP servers, and per-project trust in a separate file outside that directory: [`~/.claude.json`](/docs/en/settings-reference#global-config-settings). -The following example mounts the volume and sets `CLAUDE_CONFIG_DIR` for a container whose `remoteUser` is `node`: +To keep the directory and the file, mount a named volume at `~/.claude` and set [`CLAUDE_CONFIG_DIR`](/docs/en/env-vars) to the same path so Claude Code writes `.claude.json` inside the volume. The following example mounts the volume and sets `CLAUDE_CONFIG_DIR` for a container whose `remoteUser` is `node`: ```json devcontainer.json theme={null} "mounts": [ @@ -98,6 +98,10 @@ The following example mounts the volume and sets `CLAUDE_CONFIG_DIR` for a conta Replace `/home/node` with the home directory of your container's `remoteUser`. If you already set `containerEnv`, for example in [Enforce organization policy](#enforce-organization-policy), add `CLAUDE_CONFIG_DIR` to that object rather than adding a second one. +> [!NOTE] +> +> If Claude Code repeats first-launch setup after each rebuild despite the mounted volume, check that `containerEnv` in `devcontainer.json` sets `CLAUDE_CONFIG_DIR` to the volume's mount path. Without `CLAUDE_CONFIG_DIR`, `~/.claude.json` stays in the home directory and is discarded on rebuild, along with its record that you completed setup. + To isolate state per project rather than sharing one volume across all repositories, include the `${devcontainerId}` variable in the source name. The [reference configuration](https://github.com/anthropics/claude-code/blob/main/.devcontainer/devcontainer.json) uses `source=claude-code-config-${devcontainerId}` for this purpose. In GitHub Codespaces, `~/.claude` persists when you stop and start a codespace but is cleared when you rebuild the container, so the configuration above applies there too. diff --git a/content/en/docs/claude-code/env-vars.md b/content/en/docs/claude-code/env-vars.md index 2eac4dfb7d..abbed77165 100644 --- a/content/en/docs/claude-code/env-vars.md +++ b/content/en/docs/claude-code/env-vars.md @@ -459,7 +459,7 @@ Numeric variables such as timeouts, token budgets, and retry counts accept scien | `ENABLE_BETA_TRACING_DETAILED` | Set to `1`, and set `BETA_TRACING_ENDPOINT` to your OTLP/HTTP collector endpoint, to turn on [detailed beta tracing](/docs/en/monitoring-usage#traces-beta), which adds content-bearing span attributes and the `claude_code.hook` span. Interactive CLI sessions also require your organization to be allowlisted for the beta. Both variables are ignored in [project and local settings](/docs/en/settings-reference#variables-claude-code-ignores-in-env) | | `ENABLE_CLAUDEAI_MCP_SERVERS` | Set to `false` to stop Claude Code from fetching [claude.ai MCP servers](/docs/en/mcp#use-mcp-servers-from-claude-ai). Enabled by default for logged-in users. To disable per-project or per-org, set [`disableClaudeAiConnectors`](/docs/en/settings-reference#disableclaudeaiconnectors) in settings instead | | `ENABLE_PROMPT_CACHING_1H` | Set to `1` to request a 1-hour [prompt cache TTL](/docs/en/prompt-caching#cache-lifetime) instead of the default 5 minutes. Intended for API key, [Amazon Bedrock](/docs/en/amazon-bedrock), [Google Cloud's Agent Platform](/docs/en/google-vertex-ai), [Microsoft Foundry](/docs/en/microsoft-foundry), and [Claude Platform on AWS](/docs/en/claude-platform-on-aws) users. For subscription users within included usage, Claude Code requests the 1-hour TTL automatically on the [main conversation](/docs/en/prompt-caching#which-ttl-each-request-gets). Subscription users drawing on [usage credits](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans) can set it to keep the 1-hour TTL. 1-hour cache writes are billed at a higher rate. To choose the TTL separately for the main conversation and for requests outside it, use `CLAUDE_CODE_PROMPT_CACHE_TTL` and `CLAUDE_CODE_SUBAGENT_PROMPT_CACHE_TTL`, which take precedence over this variable | -| `ENABLE_PROMPT_CACHING_1H_BEDROCK` | Deprecated. Use `ENABLE_PROMPT_CACHING_1H` instead | +| `ENABLE_PROMPT_CACHING_1H_BEDROCK` | Deprecated. Use `ENABLE_PROMPT_CACHING_1H` instead. Has no effect on [Claude apps gateway](/docs/en/claude-apps-gateway) sessions, even when the gateway routes to Amazon Bedrock | | `ENABLE_TOOL_SEARCH` | Controls [MCP tool search](/docs/en/mcp#scale-with-mcp-tool-search). Unset or `true` defers MCP tools, except in the [cases that keep tool search off](/docs/en/mcp#configure-tool-search). `auto` turns tool search on once definitions reach 10% of the context window. `auto:N` sets a custom threshold, such as `auto:5` for 5%. `false` loads all tools upfront. If a gateway rejects tool search, see [Tool search through an LLM gateway](/docs/en/mcp#tool-search-through-a-gateway) | | `FORCE_AUTOUPDATE_PLUGINS` | Set to `1` to force plugin auto-updates even when the main auto-updater is disabled via `DISABLE_AUTOUPDATER` | | `FORCE_HYPERLINK` | Set to `1` to enable clickable OSC 8 hyperlinks when your terminal supports them but isn't auto-detected, or `0` to disable them. When unset, Claude Code enables hyperlinks only when it detects terminal support. Claude Code parses this value as a number, not a Boolean, so a value such as `false`, `no`, or `off` enables hyperlinks rather than disabling them. The footer [PR or merge request badge](/docs/en/interactive-mode#pr-review-status) renders as a hyperlink even when Claude Code can't detect terminal support, such as over SSH. Set `0` to render the badge as plain text | diff --git a/content/en/docs/claude-code/errors.md b/content/en/docs/claude-code/errors.md index 2f92f8e1ef..2cdf227f26 100644 --- a/content/en/docs/claude-code/errors.md +++ b/content/en/docs/claude-code/errors.md @@ -25,6 +25,7 @@ Match the message you see to a section below. | `Opus is experiencing high load` / `Fable is experiencing high load` | [Server errors](#api-error-repeated-529-overloaded-errors) | | `Request timed out` | [Server errors](#request-timed-out), or [Network](#unable-to-connect-to-api) if the message mentions your internet connection | | `API Error: No response from API` | [Server errors](#no-response-from-api) | +| `API Error: Stream idle timeout - no chunks received` | [Streaming idle watchdogs](/docs/en/network-config#streaming-idle-watchdogs), or [Long thinking ends in proxy timeouts](/docs/en/claude-apps-gateway-deploy#long-thinking-ends-in-proxy-timeouts) behind a Claude apps gateway | | `Server error mid-response. The response above may be incomplete.` | [Server errors](#the-response-above-may-be-incomplete) | | `Connection lost mid-response` / `Your computer went to sleep mid-response` / `The response stopped arriving` | [Server errors](#the-response-above-may-be-incomplete) | | `Connection closed mid-response` / `Response stalled mid-stream` | [Server errors](#the-response-above-may-be-incomplete) | @@ -33,6 +34,7 @@ Match the message you see to a section below. | `Connection lost before a response was produced` / `Your computer went to sleep before a response was produced` / `The response stalled before a response was produced` | [Automatic retries](#automatic-retries) | | `Connection closed while thinking` / `Response stalled while thinking` | [Automatic retries](#automatic-retries) | | `Connection lost while your computer was asleep` | [Automatic retries](#automatic-retries) | +| `The model's tool call could not be parsed (retry also failed).` | [Automatic retries](#automatic-retries) | | ` is temporarily unavailable, so auto mode cannot determine the safety of...` | [Server errors](#auto-mode-cannot-determine-the-safety-of-an-action) | | `Auto mode could not evaluate this action and is blocking it for safety` | [Server errors](#auto-mode-cannot-determine-the-safety-of-an-action) | | `Not run · auto mode's check had no usable answer` | [Server errors](#auto-mode-cannot-determine-the-safety-of-an-action) | @@ -394,6 +396,7 @@ Match the message you see to a section below. | `is a network path, which cannot be added as a working directory` | [Configuration warnings](#working-directory-is-a-network-path) | | `Remote managed settings failed to load ()` | [Configuration warnings](#remote-managed-settings-failed-to-load) | | `Managed settings were not approved; exiting without applying them.` | [Configuration warnings](#managed-settings-were-not-approved) | +| `Your organization's managed settings need your approval, which couldn't be asked for here.` | [Configuration warnings](#managed-settings-need-your-approval) | | `Claude Code can't start: your organization's managed settings block the default model` / `Claude Code can't start: your organization allows only the models listed in "availableModels"` | [Configuration warnings](#managed-settings-block-the-default-model) | | `Your organization's managed settings allow Claude Code to use: ` | [Configuration warnings](#managed-settings-dont-allow-this-api-provider) | | `Your organization's managed settings allow Claude Code to use no API provider at all` | [Configuration warnings](#managed-settings-dont-allow-this-api-provider) | @@ -443,6 +446,7 @@ Claude Code retries these failures: * A request rejected because the input plus `max_tokens` exceeds the context limit. Re-sending it unchanged would fail the same way, so Claude Code retries with a reduced `max_tokens`, and stops retrying and compacts instead in two cases: * When no reduction can fit, for example when the conversation itself nearly fills the context window. * When a retry can't shrink `max_tokens` any further. Before v2.1.218, Claude Code could re-send a reduced request that still didn't fit, such as when the extended thinking budget exceeded the remaining context, until the retry budget ran out. +* A response that says Claude is calling a tool but contains no tool call. Claude Code retries by asking Claude for the tool call, up to two times. If both retries fail the same way, you see `The model's tool call could not be parsed (retry also failed).` and the turn ends. To try again, send another message. Before v2.1.307, Claude Code retried once before ending the turn. * An expired or missing Google Cloud credential on [Google Cloud's Agent Platform](/docs/en/google-vertex-ai), or AWS credentials that fail to load on your machine. Claude Code discards its cached credentials and retries up to two times, then reports the error so you can re-authenticate right away, as described under [Could not load AWS or Google Cloud credentials](#could-not-load-aws-or-google-cloud-credentials). Before v2.1.228, Claude Code retried a failing Google Cloud credential through the full retry budget before showing the error. * A `401` or `403` from the Anthropic API, directly or through an [LLM gateway](/docs/en/llm-gateway), while an [`apiKeyHelper`](/docs/en/settings-reference#apikeyhelper) script supplies the credential. Claude Code re-runs the script and retries with its fresh output, within the full retry budget. When the script itself fails on the re-run, Claude Code shows [Your apiKeyHelper script is failing](#your-apikeyhelper-script-is-failing) instead. @@ -2213,7 +2217,9 @@ Before v2.1.162, Claude Code attempted the compaction anyway and surfaced the ba * Trim large `CLAUDE.md` memory files, or move instructions into [path-scoped rules](/docs/en/memory#path-specific-rules) that load only when relevant * Auto-compact is on by default and normally prevents this error. If you turned it off in `/config` or with [`DISABLE_AUTO_COMPACT`](/docs/en/env-vars), turn it back on. If you keep it off, run `/compact` yourself before the window fills. * If the error appears near 200K tokens on a model that accepts more, one cause is a model ID that Claude Code doesn't recognize. Claude Code assumes a 200K window for such an ID, so to keep working past that point, [give it the model's real context window](/docs/en/model-config#correct-the-window-for-a-gateway-or-custom-model-id). + * If you use a custom [`ANTHROPIC_BASE_URL`](/docs/en/env-vars) and the error starts with `Prompt is too long · automatic compaction failed`, [set the model's context window](/docs/en/model-config#correct-the-window-for-a-gateway-or-custom-model-id) or [update](/docs/en/setup#update-claude-code) to v2.1.299 or later. Before v2.1.299, Claude Code ended the turn with that message near the assumed 200K window instead of sending the request. * If the error appeared right after you stopped Claude while it was compacting the conversation, your conversation is unchanged and still large enough to need compacting. Run `/compact` and send your message again. To keep the error from recurring, [update Claude Code](/docs/en/setup#update-claude-code) to v2.1.304 or later. Before v2.1.304, stopping at that moment could end the turn with this error. +* On v2.1.305, with many MCP tools and a direct connection to the Anthropic API, this error can hide an unrelated 400 or 422 error from the API. [Update Claude Code](/docs/en/setup#update-claude-code) to v2.1.306 or later to see the original error. See [Explore the context window](/docs/en/context-window) for an interactive view of how context fills up. @@ -3215,7 +3221,7 @@ Claude Code turns `claude import` on through a feature flag it fetches from Anth ### Could not read Claude Code config -You ran [`claude import`](/docs/en/cli-reference#cli-commands) while Claude Code couldn't parse `~/.claude.json`, the file where it stores your login and per-project state. The subcommand reads that file to check availability but doesn't show the recovery dialog the interactive session shows, so it exits with code 1. Before v2.1.222, `claude import` with an unreadable config file started an interactive session, whose recovery dialog handled the file. +You ran [`claude import`](/docs/en/cli-reference#cli-commands) while Claude Code couldn't parse `~/.claude.json`, the file where it stores your account details and per-project state. The subcommand reads that file to check availability but doesn't show the recovery dialog the interactive session shows, so it exits with code 1. Before v2.1.222, `claude import` with an unreadable config file started an interactive session, whose recovery dialog handled the file. ```text theme={null} Could not read Claude Code config — run `claude` with no arguments to recover it. @@ -5426,7 +5432,7 @@ Mapped drive letters and `\\wsl$` paths don't count as network paths. **What to do:** -* On Windows, map the share to a drive letter, for example with `net use Z: \\server\share`, and pass the drive at launch with `claude --add-dir Z:\`. +* On Windows, map the share to a drive letter and pass the drive at launch. In PowerShell, for example, run `net use Z: \\server\share` and then `claude --add-dir Z:\`. * On macOS or Linux, mount the share at a local path and add that path instead. * If the path is in `permissions.additionalDirectories`, remove it from the settings file that lists it. @@ -5464,6 +5470,18 @@ Managed settings were not approved; exiting without applying them. * Start Claude Code again and approve the dialog to continue under your organization's settings. A declined dialog isn't remembered, so it appears again at the next start. * If you're unsure about a setting the dialog lists, ask whoever maintains your organization's managed settings before approving +### Managed settings need your approval + +Your organization's [server-managed settings](/docs/en/server-managed-settings) include settings that need your approval in the [security approval dialog](/docs/en/server-managed-settings#security-approval-dialogs). The `claude plugin` command you ran couldn't read from the keyboard, so it couldn't show that dialog. That happens when you pipe or redirect its input and, on macOS and Linux, it also can't open `/dev/tty`. The command stopped before making any changes: + +```text theme={null} +Your organization's managed settings need your approval, which couldn't be asked for here. Run `claude` in a terminal and approve them, then run this command again. +``` + +**What to do:** + +* Run `claude` in a terminal and approve the settings when the dialog appears, then run the same `claude plugin` command again. Claude Code keeps the approval and the approved settings in your [configuration directory](/docs/en/server-managed-settings#approval-memory). If the command that stopped ran as another user or with `CLAUDE_CONFIG_DIR` set, run `claude` the same way so that both use the same directory. + ### Managed settings block the default model Your organization's [managed settings](/docs/en/managed-settings) block the model the Default option resolves to and every model it could step down to. A session that would start on the Default option exits at startup instead of running a blocked model. Which message you see depends on the setting that blocks it. When a [`deniedModels`](/docs/en/model-config#block-specific-models-or-versions) list blocks it, the message reads: diff --git a/content/en/docs/claude-code/features-overview.md b/content/en/docs/claude-code/features-overview.md index 0319d5d438..1e5cf855e6 100644 --- a/content/en/docs/claude-code/features-overview.md +++ b/content/en/docs/claude-code/features-overview.md @@ -148,7 +148,7 @@ Both do work outside your main conversation. With subagents, Claude decides turn * **Subagents** are workers Claude spawns, each returning a summary to the conversation that spawned it * **[Dynamic workflows](/docs/en/workflows)** are scripts Claude writes that run many subagents in the background and return one result -**Use a subagent** when you need a quick, focused worker: research a question, verify a claim, review a file. The subagent does the work and returns a summary, so your main conversation stays clean. Subagents that Claude named when it spawned them can also [message each other](/docs/en/sub-agents#what-loads-at-startup). +**Use a subagent** when you need a quick, focused worker: research a question, verify a claim, review a file. The subagent does the work and returns a summary, so your main conversation stays clean. Subagents that Claude [named](/docs/en/sub-agents#subagent-names) when it spawned them can also [message each other](/docs/en/sub-agents#what-loads-at-startup). **Use a dynamic workflow** when a job [outgrows a handful of subagents](/docs/en/workflows#when-to-use-a-workflow), or when you want the findings cross-checked before you see them, such as a codebase-wide audit, a large migration, or a plan drafted from several angles. To start one, [ask for a workflow in your prompt](/docs/en/workflows#ask-for-a-workflow-in-your-prompt). diff --git a/content/en/docs/claude-code/fullscreen.md b/content/en/docs/claude-code/fullscreen.md index 4ce1e0777a..66ef10cc87 100644 --- a/content/en/docs/claude-code/fullscreen.md +++ b/content/en/docs/claude-code/fullscreen.md @@ -32,6 +32,7 @@ Claude Code carries these into the relaunched session: * Your [permission mode](/docs/en/permission-modes) and [effort level](/docs/en/model-config#adjust-effort-level) * The model you last picked with [`/model`](/docs/en/model-config#setting-your-model) * Rules you passed with [`--allowed-tools` or `--disallowed-tools`](/docs/en/cli-reference#cli-flags), and your `--agent`, `--agents`, `--append-system-prompt`, and `--system-prompt-snapshot` flags +* A `--chrome` or `--no-chrome` flag you launched with, so [Chrome integration](/docs/en/chrome) stays on or off as you chose for this session Claude Code declines to relaunch if the session has a restriction it can't pass to the restarted process. Restrictions it can't pass include: diff --git a/content/en/docs/claude-code/hooks-guide.md b/content/en/docs/claude-code/hooks-guide.md index f44a43c3a9..f14f4181ac 100644 --- a/content/en/docs/claude-code/hooks-guide.md +++ b/content/en/docs/claude-code/hooks-guide.md @@ -980,6 +980,7 @@ With a hook in a settings file or a plugin's `hooks/hooks.json` you can't loosen The hook is configured but never executes. * Run `/hooks` and confirm the hook appears under the correct event +* For a hook in a skill's frontmatter, invoke the skill or ask Claude to, then run `/hooks` again. `/hooks` doesn't list hooks from a skill that hasn't been invoked in the session. If `/hooks` still doesn't list the hook, check for other causes, such as [frontmatter that didn't parse](/docs/en/skills#skill-not-triggering) or one of the [limits on skill hooks](/docs/en/hooks#limits-on-skill-hooks) * Check that the matcher pattern matches the tool name exactly. Matchers are case-sensitive * Verify you're triggering the right event type: `PreToolUse` fires before tool execution, `PostToolUse` fires after. A `PermissionRequest` hook fires when Claude Code is about to ask you for permission; see the [limitations](#limitations) for the non-interactive cases diff --git a/content/en/docs/claude-code/hooks.md b/content/en/docs/claude-code/hooks.md index 1b45beca0e..0e2f7c079c 100644 --- a/content/en/docs/claude-code/hooks.md +++ b/content/en/docs/claude-code/hooks.md @@ -681,6 +681,22 @@ Frontmatter hooks in a project skill follow the same [workspace trust rule as ho Frontmatter hooks in a project subagent run only after you accept the [workspace trust dialog](/docs/en/permissions#project-allow-rules-and-workspace-trust) for the folder the agent file came from. A `-p` session doesn't count as accepting it. [What runs before you trust a folder](/docs/en/permissions#what-runs-before-you-trust-a-folder) compares this with the settings-file rule, and the subagents page lists [which scopes are exempt](/docs/en/sub-agents#hooks-in-subagent-frontmatter). Before v2.1.218, these hooks could run from folders you hadn't trusted. +#### Limits on skill hooks + +When a skill's frontmatter hooks don't fire after you or Claude invoke the skill, run [`/hooks`](#the-%2Fhooks-menu) in that session. If it lists them, see [Hook not firing](/docs/en/hooks-guide#hook-not-firing). If it lists none of them, the skill may be under a plugin-only lock or past a hook limit, and runs without any of its frontmatter hooks. Check for each case: + +* **Plugin-only lock**: your organization's administrator can lock hooks to plugins and managed settings with the [`strictPluginOnlyCustomization`](/docs/en/settings-reference#strictpluginonlycustomization-hooks) managed setting. A skill keeps its frontmatter hooks under that lock only if it's a plugin skill, a [bundled skill](/docs/en/skills#bundled-skills), or a skill in the [managed settings directory](/docs/en/managed-settings#delivery-mechanisms). The hooks in your own settings files don't run either. + * **Check**: type `/status` in a Claude Code session. If the [`Setting sources` line](/docs/en/settings#check-what-your-organization-enforces) includes `Enterprise managed settings`, ask your administrator whether `strictPluginOnlyCustomization` locks hooks. + * **Fix**: move the skill into a [plugin](/docs/en/plugins/create#convert-an-existing-claude-setup), because plugin skills keep their frontmatter hooks. List the plugin in a [marketplace](/docs/en/plugins/create-marketplace#create-a-marketplace), then install it from there. If Claude Code refuses the marketplace with [`is blocked by enterprise policy`](/docs/en/plugins/troubleshooting#marketplace-source-is-blocked-by-enterprise-policy), ask your administrator to allow that marketplace. +* **Hook limit**: in Claude Code v2.1.304 or later, each source of skills has its own limit per session. Your project, your personal skills folder, and each plugin count as separate sources. The skills from one source can register at most 1,024 hooks. Those hooks' matchers can total at most 16,384 characters. A matcher with several hooks under it counts once for each hook. + * **Check**: repeat the session where the hook didn't fire, with debug logging on: + 1. Start a new session from your shell with `claude --debug`. If you don't start sessions from a shell, type [`/debug`](/docs/en/commands#all-commands) first in the new session instead. + 2. Invoke the same skills in the same order, including the ones Claude invoked, because both totals build up skill by skill. Ask Claude to invoke any skill you can't type as a command. + 3. Search the [debug log](#debug-hooks) for `registers none of its hooks`. A line containing that text names the skill that went past the limit. + * **Fix**: declare fewer hooks or shorter matchers in that skill or in the other skills from its source, then start a new session. If those skills aren't yours to edit, ask their author for that change. Until then, start a new session and invoke the skill you need before any other skill from its source. + +If neither case is yours, check for [frontmatter that didn't parse](/docs/en/skills#skill-not-triggering). + ### The `/hooks` menu Type `/hooks` in Claude Code to open a read-only browser for your configured hooks. The list labels each hook with where it comes from, such as user settings, project settings, local settings, a plugin, or the current session. diff --git a/content/en/docs/claude-code/iam.md b/content/en/docs/claude-code/iam.md index df04607a8c..fb6c545568 100644 --- a/content/en/docs/claude-code/iam.md +++ b/content/en/docs/claude-code/iam.md @@ -10,7 +10,10 @@ Claude Code supports multiple authentication methods depending on your setup. In ## Log in to Claude Code -After [installing Claude Code](/docs/en/setup#install-claude-code), run `claude` in your terminal. On first launch, Claude Code opens a browser window for you to log in. If you've set the `ANTHROPIC_API_KEY` environment variable and you approve the key when Claude Code asks whether to use it, Claude Code skips the login prompt. +After [installing Claude Code](/docs/en/setup#install-claude-code), run `claude` in your terminal. Claude Code opens a browser window for you to log in on first launch, except in cases such as these, where it can skip the login prompt: + +* **API key**: you've set the `ANTHROPIC_API_KEY` environment variable and you approve the key when Claude Code asks whether to use it +* **Earlier sign-in**: you ran [`claude auth login`](/docs/en/cli-reference#cli-commands) in your shell before your first session, or you rebuilt a dev container that keeps your credentials in a [volume](/docs/en/devcontainer#persist-authentication-and-settings-across-rebuilds). If you see the login prompt anyway, [check what can cause it](#login-prompt-still-appears-after-an-earlier-sign-in). If the browser doesn't open automatically, press `c` to copy the login URL to your clipboard, then paste it into your browser. @@ -32,6 +35,15 @@ To log out and re-authenticate, type `/logout` at the Claude Code prompt. Loggin If you're having trouble logging in, see [authentication troubleshooting](/docs/en/troubleshoot-install#login-and-authentication). +### Login prompt still appears after an earlier sign-in + +If you signed in earlier and first-launch setup shows the login prompt instead of [skipping it](#log-in-to-claude-code), check for causes such as these: + +* **Expired sign-in**: your earlier sign-in expired and Claude Code can't refresh it. Log in again at the prompt. +* **Login restricted to an organization**: an administrator set [`forceLoginOrgUUID`](/docs/en/settings-reference#forceloginorguuid) in managed settings to [require logins from specific organizations](#restrict-login-to-your-organization). The prompt appears whether or not your account belongs to one of them. Log in with an account in a required organization. If you don't have one, ask your administrator to add you. +* **Required login method**: your sign-in isn't the kind that [`forceLoginMethod`](/docs/en/settings-reference#forceloginmethod) in a settings file requires. With `"claudeai"`, an API key from an earlier Claude Console login doesn't count as an existing sign-in. With `"console"`, a claude.ai account doesn't. Log in with the kind of account that setting names. +* **Older version**: before v2.1.290, the prompt appeared during setup whether or not you were signed in. [Update Claude Code](/docs/en/setup#update-claude-code) to skip it. + ### Log in with multiple accounts To stay signed in to multiple accounts at once, such as work and personal accounts, give each account its own configuration directory. When you start `claude`, set the [`CLAUDE_CONFIG_DIR`](/docs/en/env-vars#variables) environment variable to the directory for the account you want to use. Each directory has its own settings, session history, and claude.ai login or API key. For example, in Bash or Zsh, add this alias to `~/.bashrc` or `~/.zshrc` so that `claude-work` uses your work account while `claude` keeps your personal one: diff --git a/content/en/docs/claude-code/interactive-mode.md b/content/en/docs/claude-code/interactive-mode.md index 1a15865807..452222d7f7 100644 --- a/content/en/docs/claude-code/interactive-mode.md +++ b/content/en/docs/claude-code/interactive-mode.md @@ -262,6 +262,12 @@ Press `v` for character-wise selection or `V` for line-wise selection. Motions e Block-wise visual mode with `Ctrl+V` is not supported. +### Cancel a question in vim mode + +When you're typing your own answer in the `Other` row of a [question Claude asks](/docs/en/tools-reference#askuserquestion-tool-behavior), press `Esc` twice to cancel the question. + +To cancel with a single key press instead, [bind another key to cancel the question](/docs/en/keybindings#cancel-a-question-with-one-key-press). + ## Command history Claude Code keeps a history of the prompts you type, and Up-arrow recall reaches prompts from past sessions of the same project: @@ -393,6 +399,15 @@ Claude Code runs some commands as soon as you send them instead of queueing them * [`/effort`](/docs/en/model-config#adjust-effort-level): once you confirm the [cache warning](/docs/en/prompt-caching#changing-effort-level), if Claude Code shows one, Claude Code applies your change to the next request it makes in that turn * [`/fast`](/docs/en/fast-mode#toggle-fast-mode): Claude Code keeps the fast mode setting that was active when the turn started, so your speed change applies from your next turn. If your current model doesn't support fast mode, turning it on also [switches your model](/docs/en/prompt-caching#turning-on-fast-mode), and Claude Code uses the new model from its next request in that turn +### Background a session with messages queued + +When the session moves to the background after you [press `←`](/docs/en/agent-view#switch-sessions-without-leaving-the-terminal), the messages you had queued move with it. Claude reads them there in the order you sent them. + +Commands and `!` shell commands can't move, and neither can some messages, such as one with an [IDE selection](/docs/en/vs-code#the-built-in-ide-mcp-server) attached. If you press `←` while one of them is queued, the session stays in the foreground and a notice that begins `Cannot open agents` appears. To background the session, get the entry out of the queue and then press `←` again: + +* **Commands and `!` shell commands**: wait for them to run at the end of the turn, or [take them back](#take-back-what-you-queued) and clear the input box. While anything else is queued, you can't take `!` shell commands back, so wait for them to run. +* **Messages that can't move**: wait until Claude has read them + ### Take back what you queued Press `Up` from the first line of the input box to take back the queued messages and commands. Claude Code removes them from the queue and puts them in the input box, one per line, ahead of any text you had typed. Edit the text and press `Enter` to queue it again as one entry, or clear the input box to drop it. diff --git a/content/en/docs/claude-code/keybindings.md b/content/en/docs/claude-code/keybindings.md index 1b8ebf26a5..992d15ef81 100644 --- a/content/en/docs/claude-code/keybindings.md +++ b/content/en/docs/claude-code/keybindings.md @@ -689,6 +689,27 @@ When vim mode is enabled via `/config` → Editor mode, keybindings and vim mode In the `Other` row of a question Claude asks, Escape doesn't cancel the question right away in vim mode. Except in [screen reader mode](/docs/en/accessibility), the row starts in INSERT mode each time you focus it. When you press Escape in the `Other` row, the row switches to NORMAL mode or drops a half-typed vim command, and the question stays open. Press Escape again in NORMAL mode to cancel the question. +### Cancel a question with one key press + +To cancel a question with one key press in vim mode, bind another key to `select:cancel` in the `Select` context. You can cancel this way from the `Other` row of a question where you select one option. In [screen reader mode](/docs/en/accessibility) or in a question where you can select several options, the bound key doesn't cancel, so cancel with Escape instead. + +Pick a key that you press with Ctrl or Alt. A bare letter or digit [goes to the `Other` row](#text-fields) instead and doesn't reach your bindings. For example, to bind `Ctrl+Q`, add this to `~/.claude/keybindings.json`: + +```json theme={null} +{ + "bindings": [ + { + "context": "Select", + "bindings": { + "ctrl+q": "select:cancel" + } + } + ] +} +``` + +After you save the file, press `Ctrl+Q` in the `Other` row of a question where you select one option. The question closes whether the row is in INSERT or NORMAL mode. + ## Validation Claude Code validates your keybindings and writes a warning to the debug log for: diff --git a/content/en/docs/claude-code/large-codebases.md b/content/en/docs/claude-code/large-codebases.md index 7d999cacec..2a61e3363e 100644 --- a/content/en/docs/claude-code/large-codebases.md +++ b/content/en/docs/claude-code/large-codebases.md @@ -349,7 +349,7 @@ Each route file has a corresponding `.test.ts` file. A different subdirectory holds different skills the same way: `packages/web/.claude/skills/component-patterns/` describes the frontend's component conventions instead of testing. When Claude works on a file in `packages/api/`, it loads the api-testing skill. When it works in `packages/web/`, it loads component-patterns instead. Neither directory's skills load during the other's tasks. -You can also scope a skill by file pattern instead of by placement. The [`paths` frontmatter field](/docs/en/skills#frontmatter-reference) takes glob patterns, and Claude loads the skill automatically only when it works with matching files. Use this for a skill that lives in the repository root's `.claude/skills/` but applies only to certain files wherever they appear, such as a database-migration skill scoped to `**/migrations/**`. +You can also scope a skill by file pattern instead of by placement. The [`paths` frontmatter field](/docs/en/skills#frontmatter-reference) takes glob patterns, and Claude loads the skill automatically only when it works with matching files. Use this for a skill that lives in the repository root's `.claude/skills/` but applies only to certain files, such as a database-migration skill scoped to `**/migrations/**`. For more on creating and organizing skills, see [Skills](/docs/en/skills). diff --git a/content/en/docs/claude-code/llm-gateway-protocol.md b/content/en/docs/claude-code/llm-gateway-protocol.md index 8b1c086752..a7732f4a57 100644 --- a/content/en/docs/claude-code/llm-gateway-protocol.md +++ b/content/en/docs/claude-code/llm-gateway-protocol.md @@ -101,7 +101,7 @@ The table below compares the three connection methods, one behavior per row. It | Model IDs in requests by default | The provider's form, such as `us.anthropic.claude-opus-4-8` on Amazon Bedrock | Anthropic IDs, such as `claude-opus-4-8` | Anthropic IDs | | `anthropic-beta` values sent | The subset Amazon Bedrock and Agent Platform accept | The full set described under [feature pass-through](#feature-pass-through), unless the developer sets [`CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS`](#disable-pre-release-capabilities) | The subset Amazon Bedrock and Agent Platform accept | | Request fields for a model ID Claude Code doesn't recognize, such as a gateway alias | Thinking with a fixed budget rather than adaptive reasoning, and no effort or context management fields. Claude Code still sends [mid-conversation system messages](#feature-pass-through) | Everything current Claude models accept on the Claude API, including adaptive reasoning, effort, and context management, which an Amazon Bedrock or Agent Platform upstream can reject | Same as the Amazon Bedrock or Agent Platform format | -| One-hour [prompt cache TTL](/docs/en/prompt-caching#choose-the-ttl-yourself) when a developer opts in | Requested through the `ttl` field in `cache_control`, with no beta value | Requested through the `ttl` field plus an `extended-cache-ttl` value in `anthropic-beta`, which you must forward | See the Claude apps gateway [availability and limitations](/docs/en/claude-apps-gateway#availability-and-limitations) table | +| One-hour [prompt cache TTL](/docs/en/prompt-caching#choose-the-ttl-yourself) when a developer opts in | Requested through the `ttl` field in `cache_control`, with no beta value | Requested through the `ttl` field plus an `extended-cache-ttl` value in `anthropic-beta`, which you must forward | Requested through the `ttl` field, with no beta value. See [One-hour prompt cache](/docs/en/claude-apps-gateway-config#one-hour-prompt-cache) | | Model for [background tasks](/docs/en/costs#background-token-usage) unless `ANTHROPIC_DEFAULT_HAIKU_MODEL` pins one | The default Sonnet model, or the main model once one is selected, as the [Amazon Bedrock](/docs/en/amazon-bedrock#4-pin-model-versions) and [Agent Platform](/docs/en/google-vertex-ai#5-pin-model-versions) pages describe | The main model, or the default Haiku model when `ANTHROPIC_API_KEY` or `apiKeyHelper` supplies an Anthropic Console key and `ANTHROPIC_AUTH_TOKEN` is unset | The main model | For the features each connection supports and the telemetry it sends to Anthropic by default, see [Feature availability](/docs/en/feature-availability#availability-by-model-provider) and [Default behaviors by API provider](/docs/en/data-usage#default-behaviors-by-api-provider). diff --git a/content/en/docs/claude-code/managed-mcp.md b/content/en/docs/claude-code/managed-mcp.md index b397f7a0e6..a01be59f2f 100644 --- a/content/en/docs/claude-code/managed-mcp.md +++ b/content/en/docs/claude-code/managed-mcp.md @@ -33,7 +33,7 @@ Claude Code supports a range of restriction levels. Each pattern uses one or mor | **Fixed deployment** | Every user gets the same servers and can't add others | `managed-mcp.json` with the servers you want | | **Provided servers** | Every user gets the remote servers you list and keeps their own | `managedMcpServers` in managed settings | | **Approved catalog** | Publish a list of approved servers; users add the ones they want, anything else is blocked | `allowedMcpServers` + `allowManagedMcpServersOnly: true` | -| **Plugin servers only** | Users can't add servers through `~/.claude.json` or `.mcp.json`; plugin servers still load | [`strictPluginOnlyCustomization`](/docs/en/settings-reference#strictpluginonlycustomization) with `mcp` in the list | +| **Plugin servers only** | Users can't add servers through `~/.claude.json` or `.mcp.json`; [skills-directory plugins](/docs/en/plugins/loading#skills-directory-plugins-blocked-by-managed-settings) stop loading as plugins, and servers from other plugins still load | [`strictPluginOnlyCustomization`](/docs/en/settings-reference#strictpluginonlycustomization) with `mcp` in the list | | **Soft allowlist** | Enforce an allowlist that users can broaden in their own settings | `allowedMcpServers` without `allowManagedMcpServersOnly` | | **Denylist only** | Block known-bad servers, allow everything else | `deniedMcpServers` | | **No restrictions** | Users add anything | Don't deploy any managed MCP configuration | diff --git a/content/en/docs/claude-code/mcp-quickstart.md b/content/en/docs/claude-code/mcp-quickstart.md index f949d55faf..74bcbceef1 100644 --- a/content/en/docs/claude-code/mcp-quickstart.md +++ b/content/en/docs/claude-code/mcp-quickstart.md @@ -278,7 +278,7 @@ This guide uses the `claude mcp` CLI commands, but every Claude Code surface can * **Claude Code desktop app**: add servers through the [Connectors UI](/docs/en/desktop#connect-external-tools). * **Claude Desktop chat app**: a separate app from Claude Code. To copy servers from its `claude_desktop_config.json` into the CLI, run `claude mcp add-from-claude-desktop` on macOS or WSL. * **VS Code**: see [Connect to external tools with MCP](/docs/en/vs-code#connect-to-external-tools-with-mcp). -* **Cloud sessions**: outside a [project](/docs/en/claude-projects#what-threads-pick-up-from-your-repositories), commit a `.mcp.json` to your repository; a session with one repository loads it. Cloud threads in a project use your claude.ai connectors instead. See [Edit .mcp.json directly](#edit-mcp-json-directly) and [What carries over from your setup](/docs/en/cloud-environments#what-carries-over-from-your-setup). +* **Cloud sessions**: outside a [project](/docs/en/claude-projects#what-threads-pick-up-from-your-repositories)'s threads, commit a `.mcp.json` to your repository; a session with one repository loads it. Cloud threads in a project use your claude.ai connectors instead. See [Edit .mcp.json directly](#edit-mcp-json-directly) and [What carries over from your setup](/docs/en/cloud-environments#what-carries-over-from-your-setup). * **Claude.ai**: connectors you add at [claude.ai/customize/connectors](https://claude.ai/customize/connectors) load automatically in the CLI when you sign in with that account. See [Use MCP servers from Claude.ai](/docs/en/mcp#use-mcp-servers-from-claude-ai). ## Troubleshooting diff --git a/content/en/docs/claude-code/mcp.md b/content/en/docs/claude-code/mcp.md index 9483ab0286..2e32e21fcb 100644 --- a/content/en/docs/claude-code/mcp.md +++ b/content/en/docs/claude-code/mcp.md @@ -373,7 +373,9 @@ Claude Code reconnects a remote server that drops mid-session and retries an HTT Claude Code first tries to reconnect a dropped remote server up to five times with exponential backoff, starting at a one-second delay and doubling it each time: * **In an interactive session**: `/mcp` shows the server as pending while Claude Code reconnects. After five failed attempts, Claude Code marks the server as failed, or as needing authentication when the server needs authorizing again. When it marks the server as failed, you see an `MCP server "" disconnected · open /mcp to reconnect` notification. You can retry manually from `/mcp`. -* **In [`claude -p`](/docs/en/headless) runs and [Agent SDK](/docs/en/agent-sdk/overview) sessions**: Claude Code makes the same five attempts, with no `/mcp` panel to show them. When an HTTP or SSE server's attempts fail with a transient error, it keeps retrying in the background for up to about half an hour, and the server and its tools become available again when a retry connects. +* **In [`claude -p`](/docs/en/headless) runs and [Agent SDK](/docs/en/agent-sdk/overview) sessions**: Claude Code makes the same five attempts, with no `/mcp` panel to show them. If all five fail, the run continues without the server's tools: + * **After a transient error, such as a 5xx response or a timeout**: Claude Code keeps retrying an HTTP or SSE server in the background. Retries last up to about half an hour, and the server's tools become available again when one connects. Until then, an Agent SDK session reports the [status](/docs/en/agent-sdk/mcp#error-handling) `failed`, and your code can [reconnect the server](/docs/en/agent-sdk/mcp#error-handling). To reconnect it in `claude -p`, start the run again. + * **When the server [needs you to sign in again](#authenticate-with-remote-mcp-servers)**: Claude Code stops retrying, and an Agent SDK session reports the server's status as `needs-auth`. Sign in with [`claude mcp login `](#authenticate-from-the-command-line) in your shell. Then start the run again or, in an Agent SDK session, [reconnect the server](/docs/en/agent-sdk/mcp#error-handling) instead. #### Failed first connections @@ -597,7 +599,7 @@ The resulting `.mcp.json` file follows a standardized format: For security reasons, Claude Code prompts for approval in interactive sessions before using project-scoped servers from `.mcp.json` files. To reset those approval choices, run `claude mcp reset-project-choices`. -In `claude -p` runs, [Agent SDK](/docs/en/headless) sessions, and [cloud sessions](/docs/en/claude-code-on-the-web) outside a [project](/docs/en/claude-projects#what-threads-pick-up-from-your-repositories), Claude Code can't show that prompt: it loads project-scoped servers without asking. Claude Code also skips the prompt in a session you start in `bypassPermissions` mode with [`skipDangerousModePermissionPrompt`](/docs/en/settings-reference#skipdangerousmodepermissionprompt) set in your user settings or in managed settings. To keep a server out anyway: +In `claude -p` runs, [Agent SDK](/docs/en/headless) sessions, and [cloud sessions](/docs/en/claude-code-on-the-web) outside a [project](/docs/en/claude-projects#what-threads-pick-up-from-your-repositories)'s threads, Claude Code can't show that prompt: it loads project-scoped servers without asking. Claude Code also skips the prompt in a session you start in `bypassPermissions` mode with [`skipDangerousModePermissionPrompt`](/docs/en/settings-reference#skipdangerousmodepermissionprompt) set in your user settings or in managed settings. To keep a server out anyway: * Add it to [`disabledMcpjsonServers`](/docs/en/settings-reference#disabledmcpjsonservers), which blocks it in every permission mode. * Exclude project settings entirely with [`--setting-sources`](/docs/en/cli-reference#cli-flags) or the SDK's `settingSources` option. @@ -1045,6 +1047,18 @@ Claude Code executes a `headersHelper` as an arbitrary shell command. For a serv Claude Code applies the same rule to a server declared inline in an [agent file](/docs/en/sub-agents#scope-mcp-servers-to-a-subagent), checking where that agent file came from: your project, for a file in its `.claude/agents/` directory, or an `--add-dir` directory. Until you [trust that project or directory itself](/docs/en/permissions#what-runs-before-you-trust-a-folder), Claude Code doesn't load the server at all, so its helper never runs either. +### Sign in to an MCP server behind a gateway that requires a header + +OAuth sign-in to an MCP server fails when a gateway requires a header, such as `X-API-Key`, and Claude Code doesn't send it. To have Claude Code send that header, add it to the server's configuration and use Claude Code v2.1.299 or later: + +* **A server whose [configuration](#mcp-installation-scopes) you can edit**: set it in [`headers`](#example-with-variable-expansion) or return it from a [`headersHelper`](#use-dynamic-headers-for-custom-authentication) +* **A server that [managed MCP](/docs/en/managed-mcp) or a [plugin](#plugin-provided-mcp-servers) supplies**: ask your administrator or the plugin's author to add the header to the server's entry + +Claude Code then adds the configured headers except `Authorization` to the sign-in, token refresh, and token revocation requests it sends to the server's origin. The server's origin is the scheme, host, and port in its `url`. A gateway that requires the header can still stop sign-in at the authorization page or at an authorization server on another origin: + +* **The authorization page**: you sign in on this page in your browser, which doesn't send the configured headers. If your browser gets the gateway's error instead of the page, ask whoever runs the gateway to let the page through without the header. +* **An authorization server on another origin**: if a gateway in front of that server requires the header too, sign-in fails there. Ask whoever runs that gateway to let OAuth requests through without the header. + ## Add MCP servers from JSON configuration If you have a JSON configuration for an MCP server, you can add it directly: @@ -1183,7 +1197,7 @@ Which settings govern a claude.ai connector depends on where your session runs, Your organization can set per-tool controls on [claude.ai connectors](https://claude.com/docs/connectors). Claude Code reads these settings at startup and enforces them locally, except in the desktop app's [local and SSH sessions](#how-connectors-reach-claude-code). There, the desktop app withholds `blocked` tools before it delivers a connector, and the `ask` setting doesn't reach Claude Code, so it applies the session's ordinary [permission rules](/docs/en/permissions) to those tools instead of prompting on every call. In sessions where Claude Code fetches connectors itself, run `/mcp` to see which setting applies to each tool on a connector. -* **Tool set to `ask`**: Claude Code prompts on every call with the reason `Your organization requires approval for this tool`. The prompt appears even in `acceptEdits`, `auto`, and `bypassPermissions` [permission modes](/docs/en/permissions#permission-modes), and never offers an option to remember your choice. [Allow rules](/docs/en/permissions) that match the tool don't skip the prompt either. In `dontAsk` mode, which never prompts, Claude Code denies the call instead. +* **Tool set to `ask`**: Claude Code prompts on every call with the reason `Your organization requires approval for this tool`. The prompt appears even in `acceptEdits`, `auto`, and `bypassPermissions` [permission modes](/docs/en/permissions#permission-modes). In the terminal, the prompt has no option to remember your choice. [Allow rules](/docs/en/permissions) that match the tool don't skip the prompt either. In `dontAsk` mode, which never prompts, Claude Code denies the call instead. * **Tool set to `blocked`**: Claude Code filters the tool out before Claude sees it, so it never appears in Claude's tool list. In sessions where Claude Code fetches connectors itself, the `/mcp` tool list still shows the tool, marked `disabled by your organization`. The desktop app and claude.ai chat apply the same `blocked` setting, so Claude can't use a blocked tool there either, and you can't withhold a tool from the desktop app's sessions while keeping it available in chat. The desktop app skips a connector whose tools are all blocked. @@ -1268,7 +1282,20 @@ You can use this in Claude Desktop by adding this configuration to claude\_deskt > * In Claude Desktop, try asking Claude to read files in a directory, make edits, and more. > * This MCP server only exposes Claude Code's tools to your MCP client, so your own client is responsible for implementing user confirmation for individual tool calls. -When the JSON text in a Bash or PowerShell tool call's result includes a `backgroundOutputPath` field, the call left its command running [in the background](/docs/en/tools-reference#background-commands), such as when the call set `run_in_background: true` or the command reached its timeout. The field gives the path of the command's output file. Nothing notifies your client when the command finishes, and the file gets no closing line when it does, so reading the file shows the output written so far. To detect the end, append a marker to the command, such as `npm test; echo DONE`, and look for it in the file. The `backgroundOutputPath` field requires Claude Code v2.1.295 or later. +### Read a background command's output as an MCP client + +A `backgroundOutputPath` field in a Bash or PowerShell result from `claude mcp serve` means the call left its command running [in the background](/docs/en/tools-reference#background-commands). A command runs in the background when your client sets `run_in_background: true` on the call. A foreground command can also [move to the background](/docs/en/tools-reference#foreground-commands-that-move-to-the-background) when it reaches its timeout. + +The field is in the result's JSON text and holds the path of the command's output file. + +* **To read the output so far**: open the file at that path from your client, or pass the path as `file_path` to the server's [`Read`](/docs/en/tools-reference#read-tool-behavior) tool +* **To tell when the command has finished**: append an `echo` of a fixed string to the `command` value, as in `npm test; echo DONE`. The command has finished once that string appears in the file. Without the string, nothing marks the end, because Claude Code adds no closing line to the file and doesn't notify your client. +* **To read the end of long output**: `Read` with only `file_path` returns the [first page](/docs/en/tools-reference#large-files), or fails when the file exceeds the size limit. Pass `offset` and `limit` as well, which works at any file size: + 1. Call `Read` with `offset` and `limit` both set to `1`, and take `totalLines` from the result + 2. Call `Read` again with `offset` set to `totalLines` minus nine and `limit` set to `10` + 3. Look for your `echo` string in the last ten lines, which the second call returns + +The `backgroundOutputPath` field requires Claude Code v2.1.295 or later. ## MCP output limits and warnings diff --git a/content/en/docs/claude-code/memory.md b/content/en/docs/claude-code/memory.md index 39d9b96699..34edbe31cd 100644 --- a/content/en/docs/claude-code/memory.md +++ b/content/en/docs/claude-code/memory.md @@ -208,6 +208,13 @@ paths: Rules without a `paths` field are loaded unconditionally and apply to all files. A path-scoped rule loads when Claude uses the Read, Write, or Edit tool on a matching file. It also loads when Claude views a matching file with a Bash command that [counts as a read](/docs/en/tools-reference#edit-tool-behavior), such as `cat` or `head` on a single file. Matching also works when Claude reaches a file through a symlinked path to the project directory, for example in a symlinked checkout. +Each pattern is relative to the rule's base directory: + +* **Project rules**: the directory that contains the rule's `.claude` folder +* **[User-level rules](#user-level-rules)**: the session's [primary working directory](/docs/en/permissions#working-directories) + +To have path-scoped rules load for files in a sibling git worktree, start Claude Code in that worktree or [move the session there with `/cd`](/docs/en/permissions#move-the-session-to-another-directory). + Use glob patterns in the `paths` field to match files by extension, directory, or any combination: | Pattern | Matches | diff --git a/content/en/docs/claude-code/monitoring-usage.md b/content/en/docs/claude-code/monitoring-usage.md index f8432baa8f..25a6df8695 100644 --- a/content/en/docs/claude-code/monitoring-usage.md +++ b/content/en/docs/claude-code/monitoring-usage.md @@ -1132,7 +1132,7 @@ Logged once per enabled plugin at session start. Use this event to inventory whi * `plugin.scope`: provenance category for the plugin: `"official"`, `"community"`, `"org"`, `"user-local"`, or `"default-bundle"` * `enabled_via`: how the plugin came to be enabled: `"default-enable"`, `"org-policy"`, `"admin-install"`, `"seed-mount"`, or `"user-install"`. The `"admin-install"` value means the plugin is set to required or auto-install for your organization in [**Organization settings > Plugins & skills**](https://claude.ai/admin-settings/skills?tab=inventory). Before v2.1.246, Claude Code reported these plugins as `"user-install"` or `"seed-mount"` * `plugin_id_hash`: deterministic hash of the plugin name and marketplace, sent only to your configured exporter. Lets you count the distinct third-party plugins loaded across your fleet without recording their names. For [plugins synced from claude.ai](/docs/en/plugins/loading#synced-plugins), Claude Code hashes the plugin name with the marketplace name that claude.ai reports for the plugin, or with `synced` otherwise. Before v2.1.246, Claude Code didn't use the marketplace name claude.ai reports in the hash -* `has_hooks`: whether the plugin contributes hooks +* `has_hooks`: whether the plugin contributes hooks, through [hook configuration](/docs/en/plugins/components#hooks) or as a [mod](/docs/en/plugins/mods/overview#how-a-mod-works) * `has_mcp`: whether the plugin contributes MCP servers * `host_owned_mcp`: `true` when the SDK host manages this plugin's MCP connections and Claude Code skipped reading the plugin's MCP server configuration, `false` otherwise * `skill_path_count`: number of skill directories the plugin declares diff --git a/content/en/docs/claude-code/network-config.md b/content/en/docs/claude-code/network-config.md index 83cbe1c403..d749a0b300 100644 --- a/content/en/docs/claude-code/network-config.md +++ b/content/en/docs/claude-code/network-config.md @@ -189,7 +189,7 @@ Claude Code runs four independent timers that abort a streaming model response w | Timer | Aborts when | Runs on | Default timeout | | :- | :- | :- | :- | | First-byte deadline | No response headers arrive after Claude Code sends the request | Direct Anthropic API and [Claude Platform on AWS](/docs/en/claude-platform-on-aws), including through an HTTPS proxy, but not when `ANTHROPIC_BASE_URL` or `ANTHROPIC_AWS_BASE_URL` routes them through a [gateway](/docs/en/gateways). Opt-in on Amazon Bedrock with `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`; doesn't run on Google Cloud's Agent Platform or Microsoft Foundry, or in a [Claude apps gateway](/docs/en/claude-apps-gateway) session | 180 seconds on the direct Anthropic API, 300 seconds elsewhere, plus one second per 32KB of request body | -| Event-level watchdog | No response events parse. Where the byte-level watchdog runs on a connection other than Amazon Bedrock, arriving bytes, including keep-alive pings, also reset this watchdog, for up to about five minutes without a parsed event | Every provider | 300 seconds | +| Event-level watchdog | No response events parse. Where the byte-level watchdog runs on a connection other than Amazon Bedrock, arriving bytes, including keep-alive pings, also reset this watchdog, for a limited time without a parsed event. That time is about five minutes when bytes arrive at least every 10 seconds. On a Claude apps gateway's 15-second pings it is about 7.5 minutes, so a pings-only stream ends after about 12.5 minutes at the default timeout. | Every provider | 300 seconds | | Byte-level watchdog | No bytes arrive on the wire, including SSE keep-alive pings | Direct Anthropic API, [Claude Platform on AWS](/docs/en/claude-platform-on-aws), and [gateway](/docs/en/gateways) connections, including a custom `ANTHROPIC_BASE_URL`. Opt-in on Amazon Bedrock `vnd.amazon.eventstream` responses with `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`; doesn't run on Google Cloud's Agent Platform or Microsoft Foundry | 180 seconds on the direct Anthropic API. 300 seconds on Claude Platform on AWS, on Amazon Bedrock, in a [Claude apps gateway](/docs/en/claude-apps-gateway) session, and through a custom `ANTHROPIC_BASE_URL` | | Body idle timeout | No bytes arrive for 5 minutes, counting the wait for response headers | Providers other than the direct Anthropic API, Claude Platform on AWS, and Amazon Bedrock with `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1` set, unless [`API_FORCE_IDLE_TIMEOUT`](/docs/en/env-vars) changes that | 5 minutes | diff --git a/content/en/docs/claude-code/permission-modes.md b/content/en/docs/claude-code/permission-modes.md index 1287ee3978..ff4571e030 100644 --- a/content/en/docs/claude-code/permission-modes.md +++ b/content/en/docs/claude-code/permission-modes.md @@ -36,7 +36,7 @@ Claude Code doesn't auto-approve the following in any mode, including `bypassPer * Tools matched by an explicit [ask rule](/docs/en/permissions#manage-permissions) * Connector tools your organization [set to `ask`](/docs/en/mcp#organization-controls-on-connector-tools), in sessions where that setting reaches Claude Code * Tools that require user interaction: the built-in `AskUserQuestion` tool and MCP tools marked [`requiresUserInteraction`](/docs/en/mcp#require-approval-for-a-specific-tool) -* `rm` and `rmdir` removals targeting a [critical path](#critical-paths), which no allow rule or `PreToolUse` hook `"allow"` approves +* Recognized `rm` and `rmdir` [critical-path removals](#critical-paths), which no allow rule or `PreToolUse` hook `"allow"` approves * The [cross-session messaging safeguards](#skip-all-checks-with-bypasspermissions-mode) * Reads outside the working directories while [`permissions.blockReadsOutsideWorkingDirectories`](/docs/en/settings-reference#permissions-blockreadsoutsideworkingdirectories) is on: recognized file-reading Bash commands prompt even in auto mode and `bypassPermissions` mode, and so does any [unsandboxed retry](/docs/en/sandboxing#the-unsandboxed-retry-escape-hatch) that needs approval to run outside the sandbox. Requires Claude Code v2.1.257 or later. @@ -267,7 +267,14 @@ claude remote-control --permission-mode acceptEdits In addition to file edits, `acceptEdits` mode auto-approves common filesystem Bash commands: `mkdir`, `touch`, `rm`, `rmdir`, `mv`, `cp`, and `sed`. These commands are also auto-approved when prefixed with safe environment variables such as `LANG=C` or `NO_COLOR=1`, or process wrappers such as `timeout`, `nice`, or `nohup`. Like file edits, auto-approval applies only to paths inside your working directory or `additionalDirectories`. -Each path also goes through the [symlink check](/docs/en/permissions#symlinks), so a write that resolves outside that scope isn't auto-approved either. Paths outside that scope, writes to [protected paths](#protected-paths), `rm` and `rmdir` removals targeting a [critical path](#critical-paths), and all other Bash commands except the [built-in read-only set](/docs/en/permissions#read-only-commands) still prompt. +These still prompt: + +* Paths outside that scope +* Writes to [protected paths](#protected-paths) +* Recognized `rm` and `rmdir` [critical-path removals](#critical-paths) +* All other Bash commands except the [built-in read-only set](/docs/en/permissions#read-only-commands) + +Each path also goes through the [symlink check](/docs/en/permissions#symlinks), so a write that resolves outside that scope isn't auto-approved either. When the [PowerShell tool](/docs/en/tools-reference#powershell-tool) is enabled, `acceptEdits` mode also auto-approves `Set-Content`, `Add-Content`, `Clear-Content`, and `Remove-Item` on in-scope paths, along with their common aliases. The same scope and protected-path rules apply, and `Remove-Item` gets [its own check](#remove-item-in-powershell). A positional argument that contains a quote character, such as the apostrophe in `Set-Content .\notes.txt "It's done"`, still prompts even on in-scope paths, because Claude Code can't statically validate an argument whose quoted and unquoted readings differ. Pass the content through a named parameter such as `-Value` to avoid the prompt. @@ -323,7 +330,7 @@ With Claude Code v2.1.283 or later, auto mode is the [built-in starting permissi The classifier also reviews each message Claude sends to another agent with [`SendMessage`](/docs/en/tools-reference), whether plain text or a structured [agent team](/docs/en/agent-teams) message, before Claude Code delivers it, both in auto mode and in [plan mode while the classifier reviews commands](#analyze-before-you-edit-with-plan-mode); the send review requires Claude Code v2.1.222 or later. -By default, the classifier doesn't review `rm` and `rmdir` removals targeting a critical path, such as `rm -rf /` or `rm -rf ~`. [Critical paths](#critical-paths) covers what happens to them in each permission mode. +By default, the classifier doesn't review recognized `rm` and `rmdir` critical-path removals, such as `rm -rf /` or `rm -rf ~`. [Critical paths](#critical-paths) covers what happens to them in each permission mode. Auto mode also nudges Claude to keep working without stopping for clarifying questions, though Claude still asks when your prompt or a skill explicitly relies on it. For stronger autonomous behavior in a mode that still prompts you, set the [Proactive output style](/docs/en/output-styles) instead. @@ -563,7 +570,7 @@ The following sections cover the order Claude Code evaluates an action in, how t > > 1. Actions matching your [allow, ask, or deny rules](/docs/en/permissions#manage-permissions) resolve immediately, with these exceptions: > * Writes to [protected paths](#protected-paths) route to the classifier even when an allow rule matches. When the protected path is the file that a symlinked settings file points to, the write can prompt you instead, as the [protected paths](#protected-paths) list describes -> * No allow rule approves `rm` and `rmdir` removals targeting a [critical path](#critical-paths) +> * No allow rule approves recognized `rm` and `rmdir` [critical-path removals](#critical-paths) > * MCP tools marked [`requiresUserInteraction`](/docs/en/mcp#require-approval-for-a-specific-tool) prompt you directly even when an allow rule matches, and so do connector tools [your organization set to `ask`](/docs/en/mcp#organization-controls-on-connector-tools) in sessions where that setting reaches Claude Code > * A shell command that carries [per-command allowed domains](/docs/en/sandboxing#per-command-allowed-domains-in-auto-mode) also routes to the classifier even when an allow rule matches, because a rule approves the command, not its hosts > * Ask rules that match on a command's content, such as `Bash(git push *)`, fall back to a permission prompt @@ -623,7 +630,10 @@ Claude still runs actions that need no approval in Manual mode, such as file rea Claude Code denies calls matching your explicit [`ask` rules](/docs/en/permissions#manage-permissions) rather than prompting. It also denies the built-in `AskUserQuestion` tool even if your allow rules match it, and does the same to connector tools [your organization set to `ask`](/docs/en/mcp#organization-controls-on-connector-tools) in sessions where that setting reaches Claude Code. It denies MCP tools marked [`_meta["anthropic/requiresUserInteraction"]`](/docs/en/mcp#require-approval-for-a-specific-tool) the same way, because their approval card needs an answer this mode never collects. -`rm` and `rmdir` removals targeting a [critical path](#critical-paths), such as `rm -rf /` and `rm -rf ~`, are denied even when an allow rule matches them or a `PreToolUse` hook allows them. A read from a [network path](/docs/en/permissions#network-paths) is denied the same way. +An allow rule or `PreToolUse` hook can't approve these: + +* Recognized `rm` and `rmdir` [critical-path removals](#critical-paths), such as `rm -rf /` and `rm -rf ~` +* Reads from a [network path](/docs/en/permissions#network-paths) [Cloud sessions](/docs/en/claude-code-on-the-web) ignore `defaultMode: "dontAsk"`; see [bypassPermissions](#skip-all-checks-with-bypasspermissions-mode) for details. @@ -644,7 +654,7 @@ Two [cross-session messaging](/docs/en/cross-session-messaging) safeguards still * The [`isolatePeerMachines`](/docs/en/settings-reference#isolatepeermachines) approval prompt for messages to your sessions beyond this machine still appears. * When no [`crossSessionInbound`](/docs/en/cross-session-messaging#control-inbound-messages) value applies, Claude Code holds an inbound message from another of your sessions for your approval, and delivers without asking only when the sending session identifies itself as also bypassing permission prompts. If you leave the permission mode while messages are held, Claude Code re-applies the inbound rules and delivers any held message they now accept. -In interactive terminal sessions with bypass permissions available, Claude Code also doesn't enforce [plan mode's](#analyze-before-you-edit-with-plan-mode) blocks. Claude is still instructed to plan without editing, but a file edit or shell command it attempts during planning runs without prompting. Explicit [ask rules](/docs/en/permissions#manage-permissions) and `rm` and `rmdir` removals targeting a [critical path](#critical-paths) still prompt. +In interactive terminal sessions with bypass permissions available, Claude Code also doesn't enforce [plan mode's](#analyze-before-you-edit-with-plan-mode) blocks. Claude is still instructed to plan without editing, but a file edit or shell command it attempts during planning runs without prompting. Explicit [ask rules](/docs/en/permissions#manage-permissions) and recognized `rm` and `rmdir` [critical-path removals](#critical-paths) still prompt. Plan mode keeps its blocks wherever Claude Code runs without an interactive terminal, including [non-interactive runs](/docs/en/headless) with `-p`, [Agent SDK](/docs/en/agent-sdk/permissions#plan-mode-plan) sessions, and conversations in the [VS Code extension](/docs/en/vs-code)'s chat panel. There, `--allow-dangerously-skip-permissions` makes `bypassPermissions` selectable later. @@ -703,6 +713,10 @@ Bypass permissions was requested at launch and ignored · if that was you, ~/.cl Add `"skipDangerousModePermissionPrompt": true` to `~/.claude/settings.json`, then start a new background session. +### `claude agents` shows the bypass permissions warning that interactive sessions skip + +If [`claude agents`](/docs/en/agent-view#dispatch-defaults) shows the [bypass permissions warning](#bypass-permissions-acceptance) although your interactive sessions skip it, check whether `skipDangerousModePermissionPrompt` is set in `.claude/settings.local.json` or a `--settings` file. Interactive sessions count the key there as your acceptance of the warning, and `claude agents` doesn't. Whether or not you find it there, accept the warning to add the key to `~/.claude/settings.json`, where `claude agents` looks for it. + ## Protected paths Writes to a small set of paths are never auto-approved, except in `bypassPermissions` mode and in interactive terminal sessions in plan mode with [bypass permissions](#skip-all-checks-with-bypasspermissions-mode) available. This prevents accidental corruption of repository state and Claude's own configuration. @@ -759,11 +773,21 @@ Protected files: ## Critical paths -Critical paths are the directories Claude Code protects from `rm` and `rmdir` commands, such as the filesystem root, your home directory, and your working directory. +Critical paths are the directories Claude Code protects from `rm` and `rmdir` commands, such as the filesystem root, your home directory, and your working directory. Claude Code checks these commands before they run, and no [allow rule](/docs/en/permissions#manage-permissions) approves one whose target it recognizes as a critical path. The check can miss some commands, so it doesn't replace an operating-system control such as [sandboxing](/docs/en/sandboxing). + +A critical-path removal is an `rm` or `rmdir` command whose target Claude Code recognizes as a critical path. No [`PreToolUse` hook](/docs/en/permissions#extend-permissions-with-hooks) that returns `"allow"` approves one either. An allow rule or `PreToolUse` hook can't approve one even in the permission modes that skip other prompts. + +> [!WARNING] +> +> A command the check misses gets no special handling, so anything that approves Bash commands in your session can approve it with no prompt. That includes an allow rule, `bypassPermissions` mode, and the sandbox's [auto-allow mode](/docs/en/sandboxing#auto-allow-mode). The check applies to `rm` and `rmdir`, so other approved commands can delete critical paths too. + +These controls apply whether or not the check recognizes a command: -Claude Code never lets a [`permissions.allow`](/docs/en/permissions#manage-permissions) rule or a [`PreToolUse` hook](/docs/en/permissions#extend-permissions-with-hooks) that returns `"allow"` approve an `rm` or `rmdir` command that targets a critical path, even in modes that skip other prompts. This circuit breaker guards against model error. A matching deny rule still blocks the command outright. +* **Deny rules**: a [deny rule](/docs/en/permissions#manage-permissions) that matches the command blocks it, though a [mod](/docs/en/plugins/mods/overview) you installed can still approve [some of those calls](/docs/en/permissions#precedence-among-rules-hooks-and-mods) +* **Sandboxing**: [sandboxing](/docs/en/sandboxing) has the operating system limit which paths Bash commands can write to. Sandboxed commands can still delete your working directory +* **Strict sandbox mode**: by default a sandboxed command can be [retried outside the sandbox](/docs/en/sandboxing#the-unsandboxed-retry-escape-hatch), and an allow rule or `bypassPermissions` mode can approve that retry with no prompt. [Strict sandbox mode](/docs/en/sandboxing#turn-off-the-retry-with-strict-sandbox-mode) turns the retry off -What happens instead [depends on your permission mode](#critical-path-removals-in-each-permission-mode). `Remove-Item` and the `cmd` removal built-ins have their own checks, covered in [Remove-Item in PowerShell](#remove-item-in-powershell). +What happens to a removal that Claude Code recognizes [depends on your permission mode](#critical-path-removals-in-each-permission-mode). `Remove-Item` and the `cmd` removal built-ins have their own checks, covered in [Remove-Item in PowerShell](#remove-item-in-powershell). ### Which paths are critical diff --git a/content/en/docs/claude-code/plugins/cli-reference.md b/content/en/docs/claude-code/plugins/cli-reference.md index 529d17d976..3367593be6 100644 --- a/content/en/docs/claude-code/plugins/cli-reference.md +++ b/content/en/docs/claude-code/plugins/cli-reference.md @@ -32,7 +32,7 @@ Every subcommand shares these exit codes, plugin arguments, and scope values: ### plugin init -Scaffold a new plugin at `~/.claude/skills//`. It loads in your next session as `@skills-dir` with no install step. +Scaffold a new plugin at `~/.claude/skills//`. Unless your administrator has [blocked skills-directory plugins](/docs/en/plugins/loading#skills-directory-plugins-blocked-by-managed-settings), it loads in your next session as `@skills-dir` with no install step. `new` is an alias for `init`. @@ -66,7 +66,7 @@ Claude Code exits `1` without writing when it can't scaffold safely, and the mes * An unknown `--with` value * An existing scaffold at the target without `--force` -* A managed setting that blocks skills-directory plugins +* A managed marketplace allowlist without the `skills-dir` source, or a blocklist that names it. The message is [`Plugins from ~/.claude/skills/ are blocked by your organization's managed settings`](/docs/en/plugins/troubleshooting#plugins-from-claude-skills-are-blocked-by-your-organizations-managed-s). ### plugin install diff --git a/content/en/docs/claude-code/plugins/components.md b/content/en/docs/claude-code/plugins/components.md index 31806004fe..d1b4d9aac0 100644 --- a/content/en/docs/claude-code/plugins/components.md +++ b/content/en/docs/claude-code/plugins/components.md @@ -323,6 +323,7 @@ A plugin agent's frontmatter follows these rules: * **Supported fields**: `name`, `description`, `model`, `effort`, `maxTurns`, `autoCompactWindow`, `tools`, `disallowedTools`, `skills`, `memory`, `background`, `omitClaudeMd`, `isolation`, `color`, and the `cacheTtl` key of `experimental`. The only valid `isolation` value is `"worktree"`. See [supported frontmatter fields](/docs/en/sub-agents#supported-frontmatter-fields) for what each one does * **Ignored fields**: `permissionMode`, `hooks`, `mcpServers`, and `initialPrompt`. An agent file can't add hooks or MCP servers on its own, so add those as plugin [hooks](#hooks) and [MCP servers](#mcp-servers) instead +* **A `name` longer than 256 characters**: Claude Code ignores it and names the agent after its file, as it does when the field is missing * **Frontmatter that doesn't parse**: the agent still loads with every field ignored. It's named after the file, and its description reads `Agent from my-plugin plugin`. Run [`claude plugin validate`](/docs/en/plugins/cli-reference#plugin-validate) in your shell to find these files For what each field does and the precedence rules, see [Subagents](/docs/en/sub-agents#supported-frontmatter-fields). diff --git a/content/en/docs/claude-code/plugins/create.md b/content/en/docs/claude-code/plugins/create.md index e03cc9a395..f2953ee546 100644 --- a/content/en/docs/claude-code/plugins/create.md +++ b/content/en/docs/claude-code/plugins/create.md @@ -163,7 +163,7 @@ You don't need a [marketplace](/docs/en/plugins/overview#get-plugins-from-a-mark * [`--plugin-dir`](#load-a-directory-or-archive-for-one-session): loads a directory or `.zip` archive for one session. * [`--plugin-url`](#fetch-an-archive-from-a-url-for-one-session): fetches a `.zip` archive from a URL for one session. -* [`claude plugin init`](#scaffold-a-plugin-that-loads-every-session): scaffolds a plugin under `~/.claude/skills/` that loads every session. +* [`claude plugin init`](#scaffold-a-plugin-that-loads-every-session): scaffolds a plugin under `~/.claude/skills/` that loads across sessions. If two plugins loaded in different ways share a name, see [Name conflicts](/docs/en/plugins/loading#name-conflicts) for which one Claude Code keeps. @@ -216,7 +216,7 @@ Managed settings can turn off `--plugin-dir` and `CLAUDE_CODE_PLUGIN_DIRS`. See ### Make a plugin load in every session -Your personal skills directory is `~/.claude/skills/`. Claude Code loads any folder there that contains a `.claude-plugin/plugin.json` as a plugin in every session, with no flag and no install step. `claude plugin init` scaffolds one of these plugins for you. +Your personal skills directory is `~/.claude/skills/`, and a folder there that contains a `.claude-plugin/plugin.json` is a skills-directory plugin. Unless your administrator has [blocked skills-directory plugins](/docs/en/plugins/loading#skills-directory-plugins-blocked-by-managed-settings), Claude Code loads each one when a session starts, with no flag and no install step. `claude plugin init` scaffolds one for you. #### Scaffold the plugin with `claude plugin init` @@ -240,7 +240,7 @@ To stop loading a scaffolded plugin, delete its directory, or run `claude plugin #### Share the plugin through a repository -`claude plugin init` writes the plugin to your personal skills directory at `~/.claude/skills/`, so it loads for you in every project. To make a plugin load for everyone in one repository, create the same layout yourself at `/.claude/skills//`, including its `.claude-plugin/plugin.json`. See [Plugins shared through a repository](/docs/en/plugins/loading#plugins-shared-through-a-repository) for the conditions under which Claude Code loads it. +`claude plugin init` writes the plugin to your personal skills directory at `~/.claude/skills/`, which all your projects on this machine share. To make a plugin load for everyone in one repository, create the same layout yourself at `/.claude/skills//`, including its `.claude-plugin/plugin.json`. See [Plugins shared through a repository](/docs/en/plugins/loading#plugins-shared-through-a-repository) for the conditions under which Claude Code loads it. ## Test and debug @@ -250,6 +250,7 @@ When a change to your plugin doesn't show up, work through these checks in order 2. In the running session, run `/reload-plugins` to apply edits you made on disk. It prints one `Reloaded:` line with counts. Then confirm a skill loaded by typing its `/plugin-name:skill` command, or by finding the plugin in the `/plugin` **Installed** tab. 3. In the same session, run `/plugin`. The **Installed** tab lists your plugin and, in the plugin's details, the components Claude Code found. The **Errors** tab lists what failed to load and why, such as a path in your manifest that doesn't exist. 4. Back in your shell, run `claude plugin list`. It prints session-only and skills-directory plugins in their own sections with `Status: ✔ loaded` or the load error. To include the plugin you're developing, pass `--plugin-dir` with its path before `plugin list`. +5. If your plugin is in a skills directory and `claude plugin list` doesn't print it, with no error there or in `/plugin`, see [Skills-directory plugins blocked by managed settings](/docs/en/plugins/loading#skills-directory-plugins-blocked-by-managed-settings). To check an MCP server, run `/mcp` in the session to see the server's status. When the server is healthy, `/mcp` lists it as connected. If it isn't, see [MCP servers that don't start](/docs/en/plugins/troubleshooting#invalid-mcp-server-config-for-and-mcp-servers-that-dont-start). diff --git a/content/en/docs/claude-code/plugins/loading.md b/content/en/docs/claude-code/plugins/loading.md index 9662a3d105..b62aa7b034 100644 --- a/content/en/docs/claude-code/plugins/loading.md +++ b/content/en/docs/claude-code/plugins/loading.md @@ -21,6 +21,7 @@ Start with [Check which stage a plugin reached](#check-which-stage-a-plugin-reac * An update changed nothing: [Versions and updates](#versions-and-updates) * You're looking at the files under `~/.claude/plugins/`: [Find plugins on disk](#find-plugins-on-disk) * A `--plugin-dir` plugin didn't load, or a same-named plugin loaded instead: [Name conflicts](#name-conflicts) +* A plugin under `~/.claude/skills/` or `.claude/skills/` didn't load, and no error says why: [Skills-directory plugins blocked by managed settings](#skills-directory-plugins-blocked-by-managed-settings) ## Check which stage a plugin reached @@ -70,11 +71,7 @@ To share a plugin through a repository, list it under `enabledPlugins` in `.clau A cloud session doesn't add the marketplaces a repository lists under [`extraKnownMarketplaces`](/docs/en/settings-reference#extraknownmarketplaces), because that requires the workspace trust dialog, which a cloud session never shows. -If a plugin in your repository's `.claude/skills/` doesn't load, check where you started the session and whether you trusted the folder: - -* **In a subdirectory**: a plugin at the repository root doesn't load. Claude Code reads the `.claude/skills/` of the session's [primary working directory](/docs/en/permissions#working-directories) and, unlike plain skills and commands, doesn't [search parent directories](/docs/en/skills#discovery-from-parent-and-nested-directories) for plugins. Launch from the repository root instead, or [move the session there with `/cd`](/docs/en/permissions#move-the-session-to-another-directory) on v2.1.246 or later -* **From the desktop app, in a worktree**: the plugin loads from the main checkout's `.claude/skills/` rather than the worktree's. See [What worktrees share with the main checkout](/docs/en/worktrees#what-worktrees-share-with-the-main-checkout) -* **In a folder you haven't trusted**: the plugin loads only after you accept the [workspace trust dialog](/docs/en/permissions#what-runs-before-you-trust-a-folder) for that folder +#### Trust check and component limits for repository plugins A project-scope plugin is checked into the repository and reaches every collaborator who clones it. Because that content comes from the repository rather than from you, it loads only after the same trust check that applies to project allow rules in `.claude/settings.json`. Trusting a parent folder or running with `-p` isn't enough. Components that run code are restricted further: @@ -82,10 +79,33 @@ A project-scope plugin is checked into the repository and reaches every collabor * MCP servers it declares as an [MCP bundle](/docs/en/plugins/manifest-reference#mcpservers), a `.mcpb` or `.dxt` file, or from a file outside the plugin directory are skipped. Declare them inline or in a `.mcp.json` inside the plugin directory * [Background monitors](/docs/en/plugins/components#monitors) do not load -Personal-scope plugins have none of these restrictions. +Neither the trust check nor these component limits apply to a plugin under your own `~/.claude/skills/`. For how to write `--plugin-dir` and skills-directory plugins, see [Create plugins](/docs/en/plugins/create). +#### Check why a repository plugin didn't load + +If a plugin in your repository's `.claude/skills/` doesn't load, check for these causes: + +* **In a subdirectory**: a plugin at the repository root doesn't load. Claude Code reads the `.claude/skills/` of the session's [primary working directory](/docs/en/permissions#working-directories) and, unlike plain skills and commands, doesn't [search parent directories](/docs/en/skills#discovery-from-parent-and-nested-directories) for plugins. Launch from the repository root instead, or [move the session there with `/cd`](/docs/en/permissions#move-the-session-to-another-directory) on v2.1.246 or later +* **From the desktop app, in a worktree**: the plugin loads from the main checkout's `.claude/skills/` rather than the worktree's. See [What worktrees share with the main checkout](/docs/en/worktrees#what-worktrees-share-with-the-main-checkout) +* **In a folder you haven't trusted**: the plugin loads only after you accept the [workspace trust dialog](/docs/en/permissions#what-runs-before-you-trust-a-folder) for that folder +* **In an organization that manages Claude Code**: see [Skills-directory plugins blocked by managed settings](#skills-directory-plugins-blocked-by-managed-settings) + +### Skills-directory plugins blocked by managed settings + +If a plugin folder in `~/.claude/skills/` or a project's `.claude/skills/` didn't load and you see no error, your administrator may have blocked it through [managed settings](/docs/en/managed-settings). These folders come from you or your repository rather than from a marketplace, so Claude Code skips them when your administrator sets one of these restrictions: + +* **Customization locked to plugins**: [`strictPluginOnlyCustomization`](/docs/en/settings-reference#strictpluginonlycustomization) set to `true` or to an array naming one or more kinds of customization to lock. The whole plugin is skipped when any one kind is locked, such as `mcp`, whichever components it has. +* **Marketplace sources restricted**: a [`strictKnownMarketplaces`](/docs/en/settings-reference#strictknownmarketplaces) allowlist without a `{ "source": "skills-dir" }` entry, or a [`blockedMarketplaces`](/docs/en/settings-reference#blockedmarketplaces) list with one. + +`/plugin` and `claude plugin list` show no plugin and no error for a skipped folder. Its `/:` commands and agents are missing, as are its hooks and MCP servers. + +Unless skills are among the locked kinds, a `SKILL.md` at the folder's root still loads as a plain skill. In that case `/` keeps working, and the `/plugin` **Installed** tab lists that skill under **Skills**. + +* **Confirm the cause**: run `/status` in a Claude Code session. If the `Setting sources` line lists `Enterprise managed settings`, ask your administrator whether one of these settings applies to you. If it doesn't, see [Check why a repository plugin didn't load](#check-why-a-repository-plugin-didnt-load) for other causes. +* **Load the whole plugin**: add it to a [marketplace](/docs/en/plugins/create-marketplace#create-a-marketplace) your organization allows and install it from there. To load it for one session instead, start `claude` from your shell with [`--plugin-dir`](/docs/en/plugins/cli-reference#flags-that-load-a-plugin-for-one-session) and the folder's path, which works unless your administrator has also turned off that flag. + ### Plugins synced from claude.ai A plugin you turn on for your claude.ai account also loads in Claude Code, alongside the plugins you install from marketplaces. That includes plugins your organization turns on for its members. Each of these plugins loads as `@synced`, with no marketplace and no [install record](#check-which-stage-a-plugin-reached). @@ -99,11 +119,15 @@ Synced plugins load in Cowork sessions and in terminal sessions where you sign i * **[Cowork](https://claude.com/product/cowork)**: Claude Code downloads them into the session's own environment when the session starts * **Terminal sessions**: each time you start Claude Code, it syncs once in the background, downloading new and updated plugins and removing the ones that you or your organization turned off. Syncing in terminal sessions requires Claude Code v2.1.273 or later +#### Sync timing in cloud Cowork sessions + +If you turn a plugin on or off for your claude.ai account during a Cowork session that runs in the cloud, keep working in that session. If nothing has changed after a few messages, start a new session. + #### Sync timing in terminal sessions Because the terminal sync runs in the background, it can finish after your session has started. When it adds, updates, or removes a synced plugin in an interactive session, you see `Plugins changed. Run /reload-plugins to activate.` Run `/reload-plugins` to load the change in that session, or leave it for the next time you start Claude Code. -If you enable a plugin on claude.ai while a session is running, the plugin downloads the next time you start Claude Code. +If you turn a plugin on or off for your claude.ai account during a terminal session, Claude Code downloads or removes it the next time you start Claude Code. #### Sign-in requirements for terminal sync diff --git a/content/en/docs/claude-code/plugins/marketplace-reference.md b/content/en/docs/claude-code/plugins/marketplace-reference.md index 276aca55ff..cb264cb73b 100644 --- a/content/en/docs/claude-code/plugins/marketplace-reference.md +++ b/content/en/docs/claude-code/plugins/marketplace-reference.md @@ -360,7 +360,7 @@ The table lists every marketplace source type with its fields, the `claude plugi | `file` | `path` | A path to a `.json` file | Loads | Allows the same path | Blocks the same path | | `directory` | `path` | A path to a directory | Loads | Allows the same path | Blocks the same path | | `settings` | `name`, `plugins`, `owner` | Not produced | Loads | Allows an entry with the same `name` and identical `plugins` | Blocks the same `name` | -| `skills-dir` | none | Not produced | Fails to load: `Unsupported marketplace source type` | Keeps [skills-directory plugins](/docs/en/plugins/org#keep-skills-directory-plugins-loading) loading while an allowlist is set. See [Source values valid only in policy lists](#source-values-valid-only-in-policy-lists) | Stops skills-directory plugins from loading | +| `skills-dir` | none | Not produced | Fails to load: `Unsupported marketplace source type` | Allows [skills-directory plugins](/docs/en/plugins/org#keep-skills-directory-plugins-loading). See [Source values valid only in policy lists](#source-values-valid-only-in-policy-lists) | Stops skills-directory plugins from loading | | `hostPattern` | `hostPattern` | Not produced | Fails to load: `Unsupported marketplace source type` | Allows `github`, `git`, and `url` sources whose host matches | Blocks those sources | | `pathPattern` | `pathPattern` | Not produced | Fails to load: `Unsupported marketplace source type` | Allows `file` and `directory` sources whose `path` matches | Blocks those sources | @@ -389,7 +389,7 @@ The table lists each marketplace source field that has a default, a constraint, `hostPattern`, `pathPattern`, `skills-dir`, and the `owner/*` form of `repo` are valid only in the two policy lists, `strictKnownMarketplaces` and `blockedMarketplaces`: * **`hostPattern` and `pathPattern`**: regular expressions Claude Code tests against a source before it fetches from it. -* **`skills-dir`**: not a source. If you set `strictKnownMarketplaces` at all, [skills-directory plugins](/docs/en/plugins/org#keep-skills-directory-plugins-loading) stop loading until you add `{"source": "skills-dir"}` to that list. +* **`skills-dir`**: not a source. If you set `strictKnownMarketplaces` without a `{"source": "skills-dir"}` entry, [skills-directory plugins](/docs/en/plugins/org#keep-skills-directory-plugins-loading) stop loading. If you lock any customization type with [`strictPluginOnlyCustomization`](/docs/en/settings-reference#strictpluginonlycustomization), they stop loading whether or not the entry is present. * **`owner/*`**: as a `github` `repo` value, matches every repository under exactly that GitHub owner. Requires Claude Code v2.1.223 or later. For match order, exact-`ref` semantics, and recipes, see [Manage plugins for your organization](/docs/en/plugins/org). diff --git a/content/en/docs/claude-code/plugins/mods/interface.md b/content/en/docs/claude-code/plugins/mods/interface.md index fde28fab44..8407b5a8aa 100644 --- a/content/en/docs/claude-code/plugins/mods/interface.md +++ b/content/en/docs/claude-code/plugins/mods/interface.md @@ -595,7 +595,7 @@ on('ui.render', { component: 'Pane' }, async ($, e, next) => { key: 'new-note', label: 'Note', placeholder: 'Type a note and press Enter', - // Draw the field empty each time, which clears it after a submit + // The text the field starts with value: '', submitLabel: 'add', autoFocus: true, @@ -639,9 +639,7 @@ To try the pane: * **Add a note**: type a line and press Enter. The line appears as a new row, and the field empties. * **Delete a note**: press Tab until the note's `x` button has the focus, then press Enter. The `x` is the button's label and not a hotkey, so typing the letter doesn't press it. -Each change follows the same render cycle as `hello-tabs`: the callback changes `notes`, calls `redraw`, and saves the list to `$.store`. - -The field empties after each submit because of its `value` prop. `value` is the text the field holds when it's drawn, and the user's typing replaces it until your hook draws the field again. The example always draws the field with `''`. +Each change follows the same render cycle as `hello-tabs`: the callback changes `notes`, calls `redraw`, and saves the list to `$.store`. If your hook draws the pane again while the user is typing a note, the field keeps their text as long as the hook passes the same `value` each time. To replace their text with your own, pass a different `value`. The example saves the notes and doesn't load them. To bring them back in the next session, read them in a `session.start` hook, the way `hello-tabs` reads `count`. @@ -651,6 +649,7 @@ These props make up the field's line, `Note: Type a note and press Enter ⏎ add | :- | :- | :- | | `label` | `Note` | The text before the field. The terminal draws `: ` after it. | | `placeholder` | `Type a note and press Enter` | Dim text that shows while the field is empty | +| `value` | `''` | The text the field starts with. It's empty here, so the placeholder shows. | | `submitLabel` | `add` | The word after `⏎` that says what Enter does | Submitting an `Input` doesn't start a turn unless your callback calls [`$.prompt.submit`](/docs/en/plugins/mods/api#start-a-turn-from-a-background-job). diff --git a/content/en/docs/claude-code/plugins/mods/troubleshoot.md b/content/en/docs/claude-code/plugins/mods/troubleshoot.md index 826f25c9e3..abcc89e0f6 100644 --- a/content/en/docs/claude-code/plugins/mods/troubleshoot.md +++ b/content/en/docs/claude-code/plugins/mods/troubleshoot.md @@ -88,6 +88,8 @@ The line starts with the mod's name, then `hooks module did not load:` and a rea Fix the error the reason names. +If the reason ends with `; the version loaded before is unloaded`, no version of the mod is running now. Once you fix the error, run [`/reload-plugins`](/docs/en/plugins/cli-reference#reload-plugins) in the session to load the mod again. If you installed the mod and didn't write it, ask its author to fix the error. + ### `options do not fit plugin.json userConfig` The line starts with the mod's name, then `hooks module did not load: options do not fit plugin.json userConfig:` and a reason. An option fails validation against its [`userConfig`](/docs/en/plugins/components#user-configuration) field, such as a number above the field's `max`, or a required field has no value. @@ -100,6 +102,15 @@ The line starts with the mod's name, then `hooks module did not load:`, the file Rewrite the code so its scopes nest less deeply. +### `the parser stopped` or `the engine ran out of stack loading the file` + +Code in one file of the hooks module is nested so deeply that Claude Code ran out of stack reading it. The line starts with the mod's name and `hooks module did not load:`, then gives that file's name and one of these reasons: + +* `code nested too deep to scan (the parser stopped: )` +* `the engine ran out of stack loading the file (code nested too deep): ` + +The reason gives no line number and doesn't say what kind of code is nested, so look through the file yourself for its most deeply nested part. Rewrite that part to nest less. If you installed the mod and didn't write it, ask its author to. + ### No mod loads in a directory you opened for the first time You haven't answered the trust prompt for the directory. diff --git a/content/en/docs/claude-code/plugins/org.md b/content/en/docs/claude-code/plugins/org.md index 2df9881a46..f935d03e3f 100644 --- a/content/en/docs/claude-code/plugins/org.md +++ b/content/en/docs/claude-code/plugins/org.md @@ -185,7 +185,7 @@ The table lists each plugin policy key, what it enforces, and what it can't do. | `disableSideloadFlags` | Rejects `--plugin-dir`, `--plugin-url`, `--agents`, the Agent SDK `plugins` option, and non-SDK `--mcp-config` at startup, and rejects folders named in the [`CLAUDE_CODE_PLUGIN_DIRS`](/docs/en/env-vars#variables) variable the same way | Doesn't restrict `.mcp.json`, `claude mcp add`, or SDK-provided servers. Pair it with [`allowedMcpServers`](/docs/en/managed-mcp) | | `disableCommandPluginSources` | Blocks plugins with a `command` source from installing, updating, or loading. A `command` source is one whose plugin directory is produced by running a command on the machine. When unset, it takes the value of `allowManagedHooksOnly` | Doesn't affect other source types | | `allowManagedHooksOnly` | Restricts which hooks run. See [`allowManagedHooksOnly`](/docs/en/settings-reference#allowmanagedhooksonly) | Doesn't trust hooks from plugins users enable themselves | -| `strictPluginOnlyCustomization` | Blocks skills, agents, hooks, and MCP servers that don't come from a plugin, managed settings, or Claude Code's built-ins. Set `true` to cover all four types, or an array of `skills`, `agents`, `hooks`, and `mcp` values such as `["skills", "hooks"]` to cover some | Doesn't restrict which plugins users install. Pair it with `strictKnownMarketplaces` | +| `strictPluginOnlyCustomization` | Blocks skills, agents, hooks, and MCP servers that don't come from a plugin, managed settings, or Claude Code's built-ins. It also stops [skills-directory plugins](#keep-skills-directory-plugins-loading) loading. Set `true` to cover all four types, or an array of `skills`, `agents`, `hooks`, and `mcp` values such as `["skills", "hooks"]` to cover some | Doesn't restrict which plugins users install. Pair it with `strictKnownMarketplaces` | | `pluginSuggestionMarketplaces` | Marketplaces whose plugins may appear as install suggestions. See [Recommend plugins](#recommend-plugins) | Doesn't affect the built-in tips | | `pluginTrustMessage` | Appends your text to the trust warning that `/plugin` shows before a plugin installs | Doesn't change the warning's own text | | `allowedChannelPlugins` | Replaces the default list of plugins allowed to push channel messages. Requires `channelsEnabled: true` | See [Restrict which channel plugins can run](/docs/en/channels#restrict-which-channel-plugins-can-run) | @@ -219,7 +219,7 @@ Set the allowlist to a list of these source objects. Most entries match exactly, * **`file` and `directory`**: `{ "source": "file", "path": "/opt/marketplace/marketplace.json" }` or `{ "source": "directory", "path": "/opt/marketplace/plugins" }`, with absolute paths. * **`hostPattern`**: `{ "source": "hostPattern", "hostPattern": "^github\\.example\\.com$" }`, matched against the host of `github`, `git`, and `url` sources. The pattern matches anywhere in the hostname, so anchor it with `^` and `$` as shown to match the whole host. A `github` source always counts as `github.com`. Use a `hostPattern` entry for a GitHub Enterprise Server or GitLab host where developers create their own marketplaces. The [GHES page](/docs/en/github-enterprise-server#allowlist-ghes-marketplaces-in-managed-settings) has the worked example. * **`pathPattern`**: `{ "source": "pathPattern", "pathPattern": "^/opt/approved/" }`, matched against the `path` of `file` and `directory` sources. The pattern matches anywhere in the path, so start it with `^` to pin a directory prefix. `".*"` allows every local path. -* **`skills-dir`**: `{ "source": "skills-dir" }` keeps [skills-directory plugins](#keep-skills-directory-plugins-loading) loading while an allowlist is set, and matches no marketplace. +* **`skills-dir`**: `{ "source": "skills-dir" }` matches no marketplace. For what it does, see [Keep skills-directory plugins loading](#keep-skills-directory-plugins-loading). #### How entries match @@ -233,7 +233,7 @@ Owner-wildcard entries follow the exact rules for `ref` and match any `path` ins #### Keep skills-directory plugins loading -Skills-directory plugins are the plugins users keep under `~/.claude/skills/` or a project's `.claude/skills/` in folders that carry a `.claude-plugin/plugin.json`. If you set any allowlist without a `{ "source": "skills-dir" }` entry, they stop loading. Plain [skills](/docs/en/skills), meaning a `SKILL.md` without that manifest, keep loading. +Skills-directory plugins are the plugins users keep under `~/.claude/skills/` or a project's `.claude/skills/` in folders that carry a `.claude-plugin/plugin.json`. If you set any allowlist without a `{ "source": "skills-dir" }` entry, they stop loading. If you lock any customization type with [`strictPluginOnlyCustomization`](/docs/en/settings-reference#strictpluginonlycustomization), they stop loading whether or not the entry is present. The allowlist doesn't apply to plain [skills](/docs/en/skills), meaning a `SKILL.md` without that manifest. #### Marketplaces hosted on claude.ai @@ -299,7 +299,7 @@ Most organizations allow the official marketplace and their own, and register bo On a machine with this policy, adding any source outside the list, for example `/plugin marketplace add https://example.com/other-marketplace.git`, fails with a message containing `is blocked by enterprise policy` followed by the allowed sources. `claude --plugin-dir ./x` exits with a message naming `disableSideloadFlags`. -The `{ "source": "skills-dir" }` entry keeps [skills-directory plugins](#keep-skills-directory-plugins-loading) loading under this allowlist. Remove that entry and they stop loading. +If you remove the `{ "source": "skills-dir" }` entry from this allowlist, [skills-directory plugins](#keep-skills-directory-plugins-loading) stop loading. Register both marketplaces with explicit `extraKnownMarketplaces` entries, as this policy does, rather than relying on the allowlist or on the official marketplace registering itself: diff --git a/content/en/docs/claude-code/plugins/publish.md b/content/en/docs/claude-code/plugins/publish.md index bf3074a5b4..024debdec8 100644 --- a/content/en/docs/claude-code/plugins/publish.md +++ b/content/en/docs/claude-code/plugins/publish.md @@ -70,7 +70,7 @@ If you have an eval suite, run `claude plugin eval` in your shell. It runs the p If the plugin is in a git repository, people can clone it and load the checkout, or start Claude Code from their shell with `--plugin-url` pointed at a `.zip` you attach to a release. To get your next version they pull or download again. If it isn't in a repository, send them the directory or a `.zip` of it. They load it in one of two ways: * **For one session**: they start Claude Code from their shell with `claude --plugin-dir ./deploy-helper`, where the path is the clone, the unzipped folder, or the `.zip` itself. See [Flags that load a plugin for one session](/docs/en/plugins/cli-reference#flags-that-load-a-plugin-for-one-session). -* **For every session**: they move the plugin directory, with its `.claude-plugin/plugin.json`, under `~/.claude/skills/` so Claude Code [loads it in every session](/docs/en/plugins/loading#find-where-a-plugin-came-from). +* **For every session**: they move the plugin directory, with its `.claude-plugin/plugin.json`, under `~/.claude/skills/`. From then on Claude Code loads it at startup, unless their administrator has [blocked skills-directory plugins](/docs/en/plugins/loading#skills-directory-plugins-blocked-by-managed-settings). Adding a `.claude-plugin/marketplace.json` to that same repository is what lets people install by name and update with a command; see [Publish through your own marketplace](#publish-through-your-own-marketplace). diff --git a/content/en/docs/claude-code/prompt-caching.md b/content/en/docs/claude-code/prompt-caching.md index 8f348ddc1c..80c39878d1 100644 --- a/content/en/docs/claude-code/prompt-caching.md +++ b/content/en/docs/claude-code/prompt-caching.md @@ -299,7 +299,11 @@ Set `FORCE_PROMPT_CACHING_5M=1` when you're debugging cache behavior, comparing To confirm which TTL your main conversation's cache writes used, run `claude -p "hello" --output-format json` and read `usage.cache_creation` in the result. Claude Code reports one-hour cache writes under `ephemeral_1h_input_tokens` and five-minute cache writes under `ephemeral_5m_input_tokens`. -Through an LLM gateway you set with `ANTHROPIC_BASE_URL`, part of the one-hour request travels in the `anthropic-beta` header, so configure the gateway to [forward that header unchanged](/docs/en/llm-gateway-protocol#request-headers). The one-hour TTL isn't available through the [Claude apps gateway](/docs/en/claude-apps-gateway#availability-and-limitations). On Amazon Bedrock, prompt caching support, minimum cacheable prefix length, and one-hour TTL availability all vary by model. If cache token counts stay at zero, check [supported models, regions, and limits](https://docs.aws.amazon.com/bedrock/latest/userguide/prompt-caching.html#prompt-caching-models) in the Amazon Bedrock documentation. +To get one hour through a gateway or on Amazon Bedrock: + +* **LLM gateway you set with `ANTHROPIC_BASE_URL`**: part of the one-hour request travels in the `anthropic-beta` header, so configure the gateway to [forward that header unchanged](/docs/en/llm-gateway-protocol#request-headers) +* **[Claude apps gateway](/docs/en/claude-apps-gateway)**: ask your administrator to request the one-hour TTL in a [gateway policy](/docs/en/claude-apps-gateway-config#one-hour-prompt-cache) +* **Amazon Bedrock**: prompt caching support, minimum cacheable prefix length, and one-hour TTL availability all vary by model. If cache token counts stay at zero, check [supported models, regions, and limits](https://docs.aws.amazon.com/bedrock/latest/userguide/prompt-caching.html#prompt-caching-models) in the Amazon Bedrock documentation. ## Cache scope diff --git a/content/en/docs/claude-code/routines.md b/content/en/docs/claude-code/routines.md index d80e30402b..cbc7bd4356 100644 --- a/content/en/docs/claude-code/routines.md +++ b/content/en/docs/claude-code/routines.md @@ -50,7 +50,7 @@ Each example pairs a trigger type with the kind of work scheduled tasks are suit Create a scheduled task from the web at [claude.ai/code/routines](https://claude.ai/code/routines), from the Desktop app, or from the CLI. All three surfaces write to the same cloud account, so a scheduled task you create in one shows up in the others immediately. In the Desktop app's **Code** tab, click **Scheduled** in the sidebar or in the sidebar's **More** menu, then **New task**, and continue with [Create from the web](#create-from-the-web). -Scheduled tasks run autonomously as full Claude Code cloud sessions. You don't choose a permission mode. The session runs shell commands, uses [skills](/docs/en/skills), and calls any connectors you include, all without stopping for approval apart from some [artifact actions](#when-a-run-publishes-an-artifact-without-asking). Outside a [project](/docs/en/claude-projects#what-threads-pick-up-from-your-repositories), those skills include the ones committed to the cloned repository. +Scheduled tasks run autonomously as full Claude Code cloud sessions. You don't choose a permission mode. The session runs shell commands, uses [skills](/docs/en/skills), and calls any connectors you include, all without stopping for approval apart from some [artifact actions](#when-a-run-publishes-an-artifact-without-asking). Outside a [project](/docs/en/claude-projects#what-threads-pick-up-from-your-repositories)'s threads, those skills include the ones committed to the cloned repository. What a scheduled task can reach is determined by: @@ -118,7 +118,7 @@ Switch to the **Connectors** tab of **Advanced settings**. All of your connected Click **Create**. The dialog closes and the new task's detail page opens. The task runs the next time one of its triggers matches. To start a run immediately, click **Run now** on the detail page. -Each run creates a new session alongside your other sessions, where you can see what Claude did, review changes, and create a pull request. +To see what a run did, click it in the **History** list on the detail page. The run [opens as a full session](#view-and-interact-with-runs), a new one for each run, where you can see what Claude did, review changes, and create a pull request. #### Dialog with Repositories and Environment in the main view @@ -149,9 +149,9 @@ When a task has two or more triggers, each one has a trash icon in that dialog. A schedule trigger runs the task on a recurring cadence, or once at a specific future time. In the task's creation or edit dialog on the web, pick a preset frequency such as hourly, daily, or weekly: -* **Time zone**: times are entered in your local zone and converted automatically, so the task runs at that wall-clock time regardless of where the cloud infrastructure is located. * **Runs on the hour**: if you schedule a run exactly on the hour, such as 9:00, it can start several minutes late. To start close to the scheduled time, pick a few minutes past the hour, for example 9:07. -* **Custom intervals**: for a custom interval such as every two hours, pick the closest preset in the dialog, then run `/schedule update` in the CLI to set a specific cron expression. The minimum interval is one hour; expressions that run more frequently are rejected. +* **Custom intervals**: for a cadence the presets lack, create the task and select **Custom** in its [edit dialog](#edit-and-control-scheduled-tasks). Then enter a cron expression, such as `0 */2 * * *` for every two hours. To set one from the CLI, run [`/schedule update`](#manage-scheduled-tasks-from-the-cli). Expressions that run more often than once per hour are rejected. +* **Time zone**: when you pick a preset frequency, enter the time in your local time zone. #### Schedule a one-off run @@ -161,7 +161,7 @@ A one-off schedule runs the task a single time at a specific timestamp. For exam * Open a cleanup PR after a rollout finishes * Start follow-up work after an upstream change ships -After the task runs, it turns itself off and the web UI marks it as **Completed**. To run it again, open the task's edit dialog on the web, which offers **One-time** for a one-off task, and set a new time. +After the task runs, it turns itself off and the web UI marks it as **Completed**. To run it again, open the task's [edit dialog](#edit-and-control-scheduled-tasks) on the web and select **One-time** or **Once**, whichever label your dialog shows. Then set a new date and time in your local time zone and save. Create a one-off run from the CLI by describing the time in natural language. Claude resolves the phrase against the current time and confirms the absolute timestamp before saving. @@ -173,8 +173,6 @@ Create a one-off run from the CLI by describing the time in natural language. Cl /schedule in 2 weeks, open a cleanup PR that removes the feature flag ``` -The same local-to-UTC conversion as recurring schedules applies to one-off timestamps. - One-off runs count against the same hourly limit as other scheduled runs. See [Usage and limits](#usage-and-limits) for details. ### Add an API trigger @@ -358,7 +356,7 @@ Scheduled tasks can use your connected MCP connectors to read from and write to Connectors are the [claude.ai integrations](/docs/en/mcp#use-mcp-servers-from-claude-ai) on your account. MCP servers you added locally in the CLI with `claude mcp add` are stored on your machine rather than your claude.ai account, so they do not appear in the connectors list. To use one of those servers in a scheduled task: * **As a connector**: add it as a connector at [claude.ai/customize/connectors](https://claude.ai/customize/connectors) -* **In the repository**: for a scheduled task with one repository outside a [project](/docs/en/claude-projects#what-threads-pick-up-from-your-repositories), you can instead declare the server in a committed [`.mcp.json`](/docs/en/mcp#project-scope). A scheduled task in a project doesn't load `.mcp.json`, so add the server as a connector +* **In the repository**: for a scheduled task with one repository, you can instead declare the server in a committed [`.mcp.json`](/docs/en/mcp#project-scope), unless the task runs as threads in a [project](/docs/en/claude-projects#what-threads-pick-up-from-your-repositories). If it does, add the server as a connector. When you create a scheduled task, all of your currently connected connectors are included by default. Remove any that aren't needed to limit which tools Claude has access to during the run. You can also add connectors directly from the task's creation or edit dialog. diff --git a/content/en/docs/claude-code/sandboxing.md b/content/en/docs/claude-code/sandboxing.md index f1ea7db294..f8e42f40b4 100644 --- a/content/en/docs/claude-code/sandboxing.md +++ b/content/en/docs/claude-code/sandboxing.md @@ -363,7 +363,7 @@ The sandbox has two independent layers: [filesystem isolation](#filesystem-isola Because turning filesystem isolation off widens what sandboxed commands can do, Claude Code honors `filesystem.disabled` from these settings sources only: * User settings, managed settings, and the `--settings` CLI flag can set it. Project settings in `.claude/settings.json` and `.claude/settings.local.json` can't, so a checked-out project can't switch filesystem isolation off. -* When managed settings configure `sandbox.filesystem` at all, or list any `sandbox.credentials.files` entry with `"mode": "deny"`, only managed settings can set the key. This keeps administrator-deployed filesystem restrictions in force; to relax such a deployment, set `"disabled": true` in managed settings. +* When managed settings configure `sandbox.filesystem` at all, or list any `sandbox.credentials.files` entry with `"mode": "deny"`, only managed settings can set the key. This keeps developers from turning filesystem isolation off in such a deployment; to turn it off for everyone, set `"disabled": true` in managed settings. * When [`CLAUDE_CODE_SUBPROCESS_ENV_SCRUB`](/docs/en/env-vars) is set, Claude Code ignores `filesystem.disabled` from every source, including managed settings, and keeps filesystem isolation on. A [valid](/docs/en/settings-reference#invalid-credential-entries-in-managed-settings) `mask` entry doesn't lock the key, even when Claude Code [falls back to `deny`](#mask-credential-files) for it at startup. List a path that can't be masked, such as a credential directory, as an explicit `deny` entry in managed settings, which locks the key. @@ -542,7 +542,13 @@ Inside the directories that sandboxed commands can write to, the sandbox still d If a symlink appears at a protected settings file's path during the session, the sandbox also denies writes to the file it points to, starting with the next command. -There is no way to exempt one of these paths: an `allowWrite` entry or an `Edit` allow rule that covers the path doesn't lift the protection. The only way to turn the protection off is [`filesystem.disabled`](#disable-filesystem-isolation), which turns off filesystem isolation for every path. To see most of these paths resolved for your machine, run `/sandbox` and open the **Config** tab, which lists them under **Denied within allowed**, mixed in with your own `denyWrite` entries. +If you add an `allowWrite` entry or an `Edit` allow rule that covers one of these paths, the protection still applies. To turn the protection off, set [`filesystem.disabled`](#disable-filesystem-isolation), which also turns off the rest of filesystem isolation. + +> [!WARNING] +> +> If you set [`allowNestedUserNamespaces`](/docs/en/settings-reference#sandbox-allownestedusernamespaces) to `true` on Linux or WSL2, don't rely on protected paths: code from a sandboxed command can end up running outside the sandbox. + +To see most of these paths resolved for your machine, run `/sandbox` and open the **Config** tab, which lists them under **Denied within allowed**, mixed in with your own `denyWrite` entries. If `git merge` or `git checkout` fails with `unable to unlink old` on one of these paths, see [A git command fails with `unable to unlink old`](#a-git-command-fails-with-unable-to-unlink-old). @@ -725,12 +731,11 @@ Unless managed settings set them, a developer's user settings or `--settings` ca * [`network.allowAllUnixSockets`](/docs/en/settings-reference#sandbox-network-allowallunixsockets) * [`network.allowLocalBinding`](/docs/en/settings-reference#sandbox-network-allowlocalbinding) * [`allowAppleEvents`](/docs/en/settings-reference#sandbox-allowappleevents), which a repository can't turn on +* [`allowNestedUserNamespaces`](/docs/en/settings-reference#sandbox-allownestedusernamespaces), which a repository can't turn on -Set `allowManagedReadPathsOnly` to `true` in managed settings so that only `allowRead` entries from managed settings are honored. This prevents developers from widening read access beyond the organization-approved paths. +Set `allowManagedReadPathsOnly` to `true` in managed settings so that only `allowRead` entries from managed settings are honored. This prevents developers from widening read access beyond the organization-approved paths. To lock network domains to the managed values the same way, set [`allowManagedDomainsOnly`](/docs/en/settings-reference#sandbox-network-allowmanageddomainsonly). With `allowManagedDomainsOnly` on, only managed settings can set a [proxy port](#custom-proxy-configuration). -To lock network domains to the managed values the same way, set [`allowManagedDomainsOnly`](/docs/en/settings-reference#sandbox-network-allowmanageddomainsonly). With the lock on, only managed settings can set a [proxy port](#custom-proxy-configuration). - -When managed settings configure `sandbox.filesystem` or list any `sandbox.credentials.files` entry with `"mode": "deny"`, only managed settings can set [`filesystem.disabled`](#disable-filesystem-isolation), so developers can't switch off administrator-deployed filesystem restrictions. A [valid](/docs/en/settings-reference#invalid-credential-entries-in-managed-settings) `mask` entry doesn't lock the key. See [Which settings can disable it](#which-settings-can-disable-it). +When managed settings configure `sandbox.filesystem` or list any `sandbox.credentials.files` entry with `"mode": "deny"`, only managed settings can set [`filesystem.disabled`](#disable-filesystem-isolation), so developers can't turn filesystem isolation off with that key. A [valid](/docs/en/settings-reference#invalid-credential-entries-in-managed-settings) `mask` entry doesn't lock the key. See [Which settings can disable it](#which-settings-can-disable-it). #### Repository settings under an admin-required sandbox @@ -836,6 +841,28 @@ Enabling `allowAppleEvents` removes code-execution isolation, since sandboxed co `docker` is incompatible with the sandbox. Take the `docker` commands you need out of the sandbox with an `excludedCommands` pattern such as `docker compose *`. [Run commands outside the sandbox with `excludedCommands`](#run-commands-outside-the-sandbox-with-excludedcommands) explains what an excluded `docker` command can reach. A narrower pattern takes fewer commands out of the sandbox. +### Chromium or rootless Podman fails inside the sandbox on Linux + +On Linux and WSL2, commands in the sandbox can't create user namespaces by default, so tools that rely on them fail: + +* Chromium exits with `No usable sandbox!` +* `unshare -U true` prints `unshare: unshare failed: Operation not permitted`. With [`allowAllUnixSockets`](/docs/en/settings-reference#sandbox-network-allowallunixsockets) on, it can print `No space left on device` instead +* Rootless Podman prints `cannot clone: Operation not permitted`, or stops earlier with `read-only file system` on one of its own folders + +In a session with [`CLAUDE_CODE_SUBPROCESS_ENV_SCRUB`](/docs/en/env-vars#variables) set to `1`, start Chromium or Electron with `--no-sandbox`, and run any other tool yourself outside Claude Code. In that session, [every command runs sandboxed](#turn-off-the-retry-with-strict-sandbox-mode), and the settings that the other fixes below name have no effect. + +Each fix works for the tools it names and gives up some isolation: + +* For Chromium or Electron, start the browser with `--no-sandbox`. The Claude Code sandbox stays as it is, but the browser runs web content without its own sandbox. +* For rootless Podman, Buildah, or a script or test command that runs a browser or `unshare`, add a pattern to [`sandbox.excludedCommands`](#run-commands-outside-the-sandbox-with-excludedcommands), such as `podman *`. Commands that match run outside the sandbox with your full access, and Claude can edit a script in your working directory before running it. The pattern has to match the command Claude runs, so for a browser, match the test command rather than the browser. +* To keep Chromium's or Electron's own sandbox, or to run a nested bubblewrap or `unshare`, set [`sandbox.allowNestedUserNamespaces`](/docs/en/settings-reference#sandbox-allownestedusernamespaces) to `true` in `~/.claude/settings.json`, not the project's `.claude/settings.json`. Requires Claude Code v2.1.305 or later. A command that begins with `unshare` stays sandboxed whatever `excludedCommands` pattern you list, because `unshare` can start any other program. This setting alone isn't enough for rootless Podman or Buildah, which the sandbox stops in other ways too. + +> [!WARNING] +> +> If you set `allowNestedUserNamespaces` to `true`, you turn off a security boundary: code from a sandboxed command can end up running outside the sandbox. +> +> Don't rely on any of the sandbox's restrictions, including [protected paths](#protected-paths) and [`credentials.files`](/docs/en/settings-reference#sandbox-credentials-files) entries, to stop a malicious command. In [auto-allow mode](#auto-allow-mode), that command can run without a permission prompt. If your organization has a security team, check with them before you turn this setting on. + ### `pbcopy`, `xclip`, or `wl-copy` doesn't update the clipboard The `pbcopy`, `xclip`, and `wl-copy` clipboard utilities can fail to reach the system clipboard from inside the sandbox, in which case the text piped to them doesn't arrive. @@ -1008,6 +1035,7 @@ Sandboxing reduces risk but is not a complete isolation boundary. Review the lim * **Filesystem permission escalation**: overly broad filesystem write permissions can enable privilege escalation attacks. Allowing writes to directories containing executables in `$PATH`, system configuration directories, or user shell configuration files such as `.bashrc` or `.zshrc` can lead to code execution in different security contexts when other users or system processes access these files. * **Linux sandbox strength**: the Linux implementation provides strong filesystem and network isolation but includes an `enableWeakerNestedSandbox` mode that enables it to work inside Docker environments without privileged namespaces. This option considerably weakens security and should only be used when additional isolation is otherwise enforced. * **Apple Events on macOS**: the macOS sandbox blocks Apple Events by default. The `allowAppleEvents` setting lifts this restriction so tools such as `open` and `osascript` work, but it removes code-execution isolation: sandboxed commands can launch other applications unsandboxed with no user prompt, and can send AppleScript commands to running applications, subject to the per-app macOS automation-consent prompt (TCC). It is only honored from user, managed, or CLI settings. Project settings cannot enable it. +* **User namespaces on Linux and WSL2**: by default, sandboxed commands can't create user namespaces. If you set [`allowNestedUserNamespaces`](/docs/en/settings-reference#sandbox-allownestedusernamespaces) to `true`, you turn off a security boundary: code from a sandboxed command can end up running outside the sandbox. Before you turn this setting on, read the warning in [Chromium or rootless Podman fails inside the sandbox on Linux](#chromium-or-rootless-podman-fails-inside-the-sandbox-on-linux). ### Scope diff --git a/content/en/docs/claude-code/scheduled-tasks.md b/content/en/docs/claude-code/scheduled-tasks.md index 18dc4ae295..0e84558075 100644 --- a/content/en/docs/claude-code/scheduled-tasks.md +++ b/content/en/docs/claude-code/scheduled-tasks.md @@ -30,8 +30,8 @@ Claude Code offers three ways to schedule recurring or one-off work: | Access to local files | No (fresh clone) | Yes | Yes | | MCP servers | Connectors configured per task | [Config files](/docs/en/mcp) and connectors | Inherits from session | | Permission prompts | No (runs autonomously) | Configurable per task | Inherits from session | -| Customizable schedule | Via `/schedule` in the CLI | Yes | Yes | -| Minimum interval | 1 hour | 1 minute | 1 minute | +| Customizable schedule | Yes | Yes | Yes | +| Minimum interval | 1 hour | 1 minute when Claude sets it, [1 hour in the forms](/docs/en/desktop-scheduled-tasks#schedule-options) | 1 minute | > [!TIP] > diff --git a/content/en/docs/claude-code/self-hosted-environments-configuration.md b/content/en/docs/claude-code/self-hosted-environments-configuration.md index bfbacda98f..4dacc9b2b3 100644 --- a/content/en/docs/claude-code/self-hosted-environments-configuration.md +++ b/content/en/docs/claude-code/self-hosted-environments-configuration.md @@ -146,6 +146,8 @@ The runner doesn't pass a git credential to the hook. The `decode-token` subcomm The hook fails when it exits non-zero, or exits 0 without leaving a usable checkout behind: * **A repository the session pushes results to**: the runner fails the session, and on a non-zero exit surfaces the tail of the script's stderr to the user. Write the reason to stderr as one short line, write it last, and then exit non-zero. Don't print secrets to stderr, and remove `set -x` before you deploy the hook. + + If git's `couldn't find remote ref` appears in roughly the last 4 KB of the hook's stderr, the runner reports a deleted branch instead. The session's error message then says the branch no longer exists on the remote and asks the user to restore it. If that branch exists, see [A session fails with `no longer exists on the remote` or `couldn't find remote ref`](/docs/en/self-hosted-environments-deploy#no-longer-exists-on-the-remote). * **A repository the session only reads from**, such as a repository added to a running session: the runner logs a `[runner:warn]` line with the failure detail, posts a `Skipped` step to the session, removes whatever the hook left at the checkout path, and continues with the remaining repositories. If skipping leaves the session with no repository at all, the runner fails the session anyway. When the hook succeeds, the runner removes the checkout path after the session ends. @@ -684,7 +686,7 @@ When Anthropic's control plane supplies a session with [Claude Code hooks](/docs * **Who authors them**: the control plane populates the scripts from fixed constants in its own deployment, never from per-session or third-party input. * **What still governs them**: hooks delivered through `--settings` enter the ordinary merged hook configuration, not the managed tier, so your managed settings still apply. `disableAllHooks` disables them, and they are not among the categories [`allowManagedHooksOnly`](/docs/en/settings-reference#allowmanagedhooksonly) keeps loaded. -When a person starts their own session, Claude Code also downloads the [skills enabled for their claude.ai account](/docs/en/skills#skills-in-cowork-and-cloud-sessions) into that session's config directory. A [cloud scheduled task](/docs/en/routines) run doesn't get its owner's skills, and a session that [sends model requests to Bedrock or Agent Platform](#send-model-requests-to-bedrock-or-agent-platform) doesn't download any. For a skill those sessions need, add it to your runner image or, outside a [project](/docs/en/claude-projects#what-threads-pick-up-from-your-repositories), commit it to the repository's `.claude/skills/`. +When a person starts their own session, Claude Code downloads the [skills enabled for their claude.ai account](/docs/en/skills#skills-in-cowork-and-cloud-sessions) into that session's config directory. A [cloud scheduled task](/docs/en/routines) run doesn't get its owner's skills, and a session that [sends model requests to Bedrock or Agent Platform](#send-model-requests-to-bedrock-or-agent-platform) doesn't download any. For a skill those sessions need, add it to your runner image or, outside a [project](/docs/en/claude-projects#what-threads-pick-up-from-your-repositories) thread, commit it to the repository's `.claude/skills/`. Outside [Claude Tag](https://claude.com/docs/claude-tag/overview) sessions, a session in a self-hosted environment runs with [auto memory](/docs/en/memory#auto-memory) off by default. For instructions that should carry across sessions, use the `CLAUDE.md` in your runner image or in the repository. diff --git a/content/en/docs/claude-code/self-hosted-environments-deploy.md b/content/en/docs/claude-code/self-hosted-environments-deploy.md index 5acd7d3eed..04852e1776 100644 --- a/content/en/docs/claude-code/self-hosted-environments-deploy.md +++ b/content/en/docs/claude-code/self-hosted-environments-deploy.md @@ -301,7 +301,7 @@ When git on the runner must trust a private certificate authority (CA), such as For git connections that carry a session's token to Anthropic-managed git, the runner applies the two variables as follows. A [`command` hook](/docs/en/self-hosted-environments-configuration#command) starts with the session's environment, so it gets what git inside the session gets: * **`GIT_SSL_CAINFO`**: what git checks Anthropic-managed git against depends on where git runs: - * **Runner's own clone and fetches**: run without the variable and check Anthropic-managed git against a per-session certificate file the runner writes. That file holds the runner host's system CA bundle plus the certificates from your file. + * **Runner's own clone and fetches**: run without the variable and check Anthropic-managed git against a per-session certificate file the runner writes. The runner builds that file from the runner host's system CA bundle and the certificates in your file. * **Git inside the session**: gets `http.sslCAInfo` configuration naming your file in place of the variable, plus `http..sslCAInfo` entries that check Anthropic-managed git against the per-session file. * **`checkout` and `post-session` hooks**: inherit the variable unchanged. * **`GIT_SSL_NO_VERIFY`**: which certificate checks stay off depends on where git runs: @@ -671,7 +671,17 @@ Common issues: * **Sessions fail to start on a runner that set `--use-anthropic-git-proxy`**: look in the runner's log for `access denied by the git proxy`, or for a git error that names an `api.anthropic.com` address containing `/git_proxy/`. To tell whether Anthropic served the session and fix the cause, see [When sessions fail to start on a runner with the git proxy](#when-anthropic-doesnt-serve-a-session). * **Sessions can't reach the network through an authenticating egress proxy**: when the source you set with [`--proxy-authorization-command` or `--proxy-authorization-file`](#authenticate-to-an-egress-proxy) fails, times out after 30 seconds, or yields an empty value, the runner answers that connection `502 Bad Gateway` and logs why. The runner redacts the command's stderr in that log and never logs the header value. With `--proxy-authorization-command`, run the command yourself on the host to confirm it prints the whole header value on stdout. If the runner instead exits at startup with `could not start the proxy-authorization listener`, it couldn't open its loopback listener. * **Runner logs `Poll failed` lines containing `rejecting the malformed poll response`**: the runner received a work-poll response whose body isn't the queue's expected JSON, most often because something between the runner and `api.anthropic.com`, such as an intercepting proxy or a captive portal, answered with its own page. The runner rejects the response, counts it under the `transport` kind of the `claude_code_self_hosted_runner_poll_errors_total` [metric](/docs/en/self-hosted-environments-reference#prometheus-metrics), and retries on the failed-poll schedule described in [Session lifecycle](/docs/en/self-hosted-environments#session-lifecycle). The runner keeps serving its live sessions. Configure the proxy to pass responses from `api.anthropic.com` through unaltered. Before v2.1.246, the runner read such a response as an empty work queue, which could end its live sessions or make it exit. -* **A session's branch no longer exists on the remote**: for a git source the session only reads from, the runner skips that source and continues on the remaining ones. For the source the session pushes results to, a deleted branch, typically because it was merged and auto-deleted, fails the session with an error naming the repository and branch and asking you to restore the branch and retry. The runner fails the session with the same error when skipping would leave it with no repository at all. Before v2.1.228, such a session started in an empty directory. +* **A session fails with `no longer exists on the remote` or `couldn't find remote ref`**: the runner reads git's `couldn't find remote ref` as a deleted branch. The branch can still exist. Look for it on your git host, under exactly the name in the message, then check each cause that fits: + + * **The branch is gone**: typically because it was merged and auto-deleted. Restore it, as the message asks. + * **The branch exists and you don't administer the runner**: send the runner's administrator the full message and tell them the branch exists. + * **The branch exists and the runner has a `checkout` hook**: a git command in your hook can print `couldn't find remote ref` to stderr before the hook exits non-zero. Find that command, and correct the ref it asks for or the remote it fetches from. The runner passes your hook the revision the session asked for as [`CLAUDE_RUNNER_REPO_REF`](/docs/en/self-hosted-environments-configuration#checkout). + * **The branch exists and the runner has no `checkout` hook**: the runner fetches the branch itself. If a [`--git-host-rewrite`](#rewrite-git-urls-for-private-networks) applies to the repository, confirm that the host it rewrites to has the branch under the same name, and push the branch there if it doesn't. + * **The branch exists and the runner is older than v2.1.301**: upgrade the runner as described in [Pin the version](#pin-the-version), so that a different failure shows its own error. Before v2.1.301, other failures with `couldn't find remote ref` in their error output were also reported as a deleted branch. + + Once the runner is upgraded or the cause is fixed, retry the session or start a new one. If none of these checks finds the cause, [report an issue](#report-an-issue). + + For the source the session pushes results to, a deleted branch fails the session. For a git source the session only reads from, the runner skips that source and continues on the remaining ones. The runner fails the session with the same error when skipping would leave it with no repository at all. Before v2.1.228, such a session started in an empty directory. * **A session starts without one of its repositories**: on a runner with no [`checkout` hook](/docs/en/self-hosted-environments-configuration#checkout), the git host can refuse the runner's access check for a repository the session only reads from. The runner then skips that repository, logs a `[runner:warn] could not access context source` line naming the refusal, and starts the session on the remaining ones. The runner skips only a clear refusal: the host answers that the repository wasn't found, git finds no credentials for the host, or authentication fails. A network failure, a timeout, or an HTTP `403` still fails the session start, as does a refusal for a repository the session pushes results to. The runner still fails a session that skipping would leave with no repository at all. With [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy), the runner skips only a repository the git proxy itself denies. diff --git a/content/en/docs/claude-code/server-managed-settings.md b/content/en/docs/claude-code/server-managed-settings.md index 1a6921f077..86bed58c75 100644 --- a/content/en/docs/claude-code/server-managed-settings.md +++ b/content/en/docs/claude-code/server-managed-settings.md @@ -251,7 +251,7 @@ Certain settings that could pose security risks require explicit user approval b * **Shell command settings**: settings that execute shell commands, such as `apiKeyHelper`, `statusLine`, and `otelHeadersHelper` * **Sandbox binary settings**: `sandbox.bwrapPath`, `sandbox.socatPath`, and `sandbox.ripgrep`. Each of these settings points at an executable, and Claude Code runs that executable -* **Sandbox network and isolation settings**: [sandbox](/docs/en/sandboxing) settings that let the sandbox proxy read, reroute, or authenticate traffic, or that weaken the sandbox's isolation: `sandbox.network.tlsTerminate`, `sandbox.network.httpProxyPort`, `sandbox.network.socksProxyPort`, `sandbox.credentials`, `sandbox.allowAppleEvents`, `sandbox.enableWeakerNestedSandbox`, `sandbox.enableWeakerNetworkIsolation`, `sandbox.filesystem.disabled`, `sandbox.network.allowAllUnixSockets`, `sandbox.network.allowUnixSockets`, and `sandbox.network.allowMachLookup`. A `sandbox.credentials` block that contains only `deny` rules doesn't need approval, since it restricts the sandbox without giving the proxy a credential. Before v2.1.251, Claude Code applied these settings without approval +* **Sandbox network and isolation settings**: [sandbox](/docs/en/sandboxing) settings that let the sandbox proxy read, reroute, or authenticate traffic, or that weaken the sandbox's isolation: `sandbox.network.tlsTerminate`, `sandbox.network.httpProxyPort`, `sandbox.network.socksProxyPort`, `sandbox.credentials`, `sandbox.allowAppleEvents`, `sandbox.allowNestedUserNamespaces`, `sandbox.enableWeakerNestedSandbox`, `sandbox.enableWeakerNetworkIsolation`, `sandbox.filesystem.disabled`, `sandbox.network.allowAllUnixSockets`, `sandbox.network.allowUnixSockets`, and `sandbox.network.allowMachLookup`. A `sandbox.credentials` block that contains only `deny` rules doesn't need approval, since it restricts the sandbox without giving the proxy a credential. Before v2.1.251, Claude Code applied these settings without approval * **Custom environment variables**: delivered `env` variables that require the user's approval, such as proxy and base-URL variables; see [Environment variables and the approval dialog](#environment-variables-and-the-approval-dialog) * **Hook configurations**: any hook definition @@ -282,6 +282,9 @@ Claude Code can't always show the dialog. Each case below says which settings ap * **An interactive session that can't show the dialog**: Claude Code doesn't apply the delivered settings and keeps the last-approved settings. The dialog appears in the next session that can show it. * **`claude install` or `claude update`**: Claude Code doesn't show the dialog during either command. The command runs with the last-approved settings, and the dialog appears in your next interactive session. If Claude Code waits for the settings fetch at startup, such as with [`forceRemoteSettingsRefresh`](#enforce-fail-closed-startup) set or on a [Claude apps gateway](/docs/en/claude-apps-gateway) deployment, it shows the dialog during the command instead, and an install run from a pipe fails; see [`Raw mode is not supported` during install](/docs/en/troubleshoot-install#raw-mode-is-not-supported-during-install). Before v2.1.246, Claude Code tried to show the dialog during these commands too. +* **A `claude plugin` command that prints to a terminal but can't read from the keyboard**: when Claude Code doesn't wait for the settings fetch at startup, the command doesn't apply the delivered settings. Without [cached settings](#fetch-and-caching-behavior), a command that changes your plugins or marketplaces [stops with an error](/docs/en/errors#managed-settings-need-your-approval). With cached settings, it runs with the last-approved settings. The dialog appears when you next run `claude` in a terminal. + + The command can't read from the keyboard when you pipe or redirect its input and, on macOS and Linux, it also can't open `/dev/tty`. If you pipe or redirect its output too, the run is non-interactive instead, and the delivered settings apply for that run only. * **An error closes the dialog before you answer**: Claude Code doesn't apply the delivered settings and keeps the last-approved settings. It shows the dialog again in the next session that can show it. * **A non-interactive run**, such as `claude -p`, an Agent SDK session, or a session in the VS Code extension's chat panel or the desktop app's Code tab: Claude Code can't show the dialog, so when the delivered settings would require approval, it applies them for that run only. It doesn't record them as approved or write them to the [local cache](#fetch-and-caching-behavior), and the next interactive session shows the dialog. Until a user approves in an interactive session, each non-interactive run fetches the settings again at startup. Before v2.1.207, a non-interactive run saved the settings as approved, so later interactive sessions never showed the dialog for them. @@ -291,11 +294,17 @@ Claude Code applies some delivered `env` variables without showing the user the * Feature and command toggles * Model selection and behavior settings, such as `ANTHROPIC_MODEL`, `DISABLE_PROMPT_CACHING`, and `CLAUDE_CODE_EFFORT_LEVEL` -* Context window and compaction settings, such as `DISABLE_AUTO_COMPACT` +* Context window and compaction settings, such as `DISABLE_AUTO_COMPACT`, but not `CLAUDE_CODE_DISABLE_1M_CONTEXT` * Terminal UI and accessibility options * Numeric limits, budgets, and timeouts -Other delivered variables can require the user's approval before they take effect; a non-empty proxy, base-URL, or `OTEL_EXPORTER_OTLP_ENDPOINT` value always does. When a delivered variable needs approval, the dialog names it, so the user sees exactly what the policy is asking to set. Before v2.1.218, Claude Code applied fewer variables without asking the user, so settings such as `DISABLE_AUTO_COMPACT` triggered the dialog at any non-empty value. +Other delivered variables can require the user's approval before they take effect. For example, in interactive sessions these always do, at any non-empty value: + +* A proxy or base-URL variable +* `OTEL_EXPORTER_OTLP_ENDPOINT` +* `CLAUDE_CODE_DISABLE_1M_CONTEXT` + +When a delivered variable needs approval, the dialog names it, so the user sees exactly what the policy is asking to set. Before v2.1.218, Claude Code applied fewer variables without asking the user, so settings such as `DISABLE_AUTO_COMPACT` triggered the dialog at any non-empty value. Claude Code decides whether four privacy toggles need approval by the delivered value rather than by the variable name: `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`, `DISABLE_ERROR_REPORTING`, `DISABLE_TELEMETRY`, and `DO_NOT_TRACK`. A truthy value such as `1` or `true` only turns tracking, reporting, or other nonessential traffic off, so Claude Code applies it without asking the user. For any other non-empty value, Claude Code shows the dialog. Before v2.1.218, all of them except `DO_NOT_TRACK` applied without approval at any value, and `DO_NOT_TRACK` triggered the dialog at any non-empty value. diff --git a/content/en/docs/claude-code/settings-example.md b/content/en/docs/claude-code/settings-example.md index 2937cc4e03..1dd7f46085 100644 --- a/content/en/docs/claude-code/settings-example.md +++ b/content/en/docs/claude-code/settings-example.md @@ -94,7 +94,7 @@ The same file with a comment above each key. Read it here; copy from the other t One team's shared settings, committed to the repository so everyone who clones it gets the same permissions, hooks, and plugin marketplace. Save a file like this at `.claude/settings.json` at the top of the repository. What to know before you commit one: -* **Cloud sessions outside a [project](/docs/en/claude-projects#what-threads-pick-up-from-your-repositories) read it too.** A [cloud session](/docs/en/settings#settings-in-cloud-sessions) with one repository starts inside the clone, so the committed file applies there as well. +* **Cloud sessions outside a [project](/docs/en/claude-projects#what-threads-pick-up-from-your-repositories)'s threads read it too.** A [cloud session](/docs/en/settings#settings-in-cloud-sessions) with one repository starts inside the clone, so the committed file applies there as well. * **Telemetry goes in managed or personal settings.** Claude Code ignores the [OpenTelemetry exporter variables](/docs/en/settings-reference#variables-claude-code-ignores-in-env) in a repository's settings files, apart from some values that turn telemetry off. Set them in [managed settings](/docs/en/monitoring-usage#administrator-configuration) for your organization, or in each person's `~/.claude/settings.json`. * **Allow rules wait for trust.** Allow rules and `extraKnownMarketplaces` entries take effect after each person [trusts this folder itself](/docs/en/permissions#project-allow-rules-and-workspace-trust), not only a parent folder; deny and ask rules apply in every session, trusted or not. * **The hook is a script in the repo.** This file's hook runs `.claude/hooks/block-rm.sh`; [How a hook resolves](/docs/en/hooks#how-a-hook-resolves) walks through writing it. diff --git a/content/en/docs/claude-code/settings-reference.md b/content/en/docs/claude-code/settings-reference.md index 24b0602055..7f6620e556 100644 --- a/content/en/docs/claude-code/settings-reference.md +++ b/content/en/docs/claude-code/settings-reference.md @@ -171,6 +171,7 @@ Every key below links to its entry. Scope lists the [files](/docs/en/settings#se | [`respondToBashCommands`](#respondtobashcommands) | Stop Claude from responding after a [`!` shell command](/docs/en/interactive-mode#shell-mode-with-prefix) runs | Interface and terminal | Any file | | [`sandbox`](#sandbox) | [Isolate Bash commands](/docs/en/sandboxing) from your filesystem and network on macOS, Linux, and WSL2 | Sandbox settings | Any file | | [`sandbox.allowAppleEvents`](#sandbox-allowappleevents) | Let [sandboxed](/docs/en/sandboxing) commands send Apple Events on macOS | Sandbox settings | User or managed | +| [`sandbox.allowNestedUserNamespaces`](#sandbox-allownestedusernamespaces) | Let [sandboxed](/docs/en/sandboxing#chromium-or-rootless-podman-fails-inside-the-sandbox-on-linux) commands create user namespaces on Linux and WSL2 | Sandbox settings | User or managed | | [`sandbox.allowUnsandboxedCommands`](#sandbox-allowunsandboxedcommands) | Let Claude retry a blocked command outside the [sandbox](/docs/en/sandboxing#the-unsandboxed-retry-escape-hatch), or forbid it | Sandbox settings | Any file | | [`sandbox.autoAllowBashIfSandboxed`](#sandbox-autoallowbashifsandboxed) | Run [sandboxed](/docs/en/sandboxing#auto-allow-mode) commands without a permission prompt | Sandbox settings | Any file | | [`sandbox.bwrapPath`](#sandbox-bwrappath) | Point the [sandbox](/docs/en/sandboxing) at a bubblewrap binary outside `PATH` | Sandbox settings | Managed | @@ -1172,7 +1173,7 @@ Isolate the commands Claude runs from your filesystem, your network, and your cr Isolate the Bash commands Claude runs from your filesystem and network with [sandboxing](/docs/en/sandboxing). Turn the sandbox on with `enabled`, then narrow or widen what sandboxed commands can touch with the `filesystem`, `network`, and `credentials` sub-objects. The sandbox runs on macOS, Linux, and WSL2. * **Scope**: [`Any file`](#scopes) -* **Type**: object with `enabled`, `failIfUnavailable`, `autoAllowBashIfSandboxed`, `excludedCommands`, `allowUnsandboxedCommands`, `enableWeakerNestedSandbox`, `enableWeakerNetworkIsolation`, `allowAppleEvents`, `bwrapPath`, `socatPath`, `ignoreViolations`, and `ripgrep`, plus the `filesystem`, `network`, and `credentials` objects +* **Type**: object with `enabled`, `failIfUnavailable`, `autoAllowBashIfSandboxed`, `excludedCommands`, `allowUnsandboxedCommands`, `enableWeakerNestedSandbox`, `enableWeakerNetworkIsolation`, `allowAppleEvents`, `allowNestedUserNamespaces`, `bwrapPath`, `socatPath`, `ignoreViolations`, and `ripgrep`, plus the `filesystem`, `network`, and `credentials` objects * **Default**: unset, so Claude Code runs commands without a sandbox This turns the sandbox on, skips permission prompts for sandboxed commands, runs `docker` outside the sandbox, opens two extra write paths, hides your AWS credentials file, and pre-allows GitHub and npm: @@ -1594,6 +1595,29 @@ Let sandboxed commands on macOS send Apple Events, which `open`, `osascript`, an To keep isolation and still run one such tool, add it to [`excludedCommands`](#sandbox-excludedcommands) instead. See [Apple Events on macOS](/docs/en/sandboxing#security-limitations). +### `sandbox.allowNestedUserNamespaces` + +Let sandboxed commands on Linux and WSL2 create user namespaces, which Chromium's and Electron's own sandbox, a nested bubblewrap, and `unshare` need. If you set this key to `true`, you turn off a security boundary: code from a sandboxed command can end up running outside the sandbox. For rootless Podman or Buildah, use [`excludedCommands`](#sandbox-excludedcommands) instead, because the sandbox stops them in other ways too. Requires Claude Code v2.1.305 or later. + +* **Scope**: [`User or managed`](#scopes). A `true` counts from `~/.claude/settings.json`, JSON passed with `--settings`, or [managed settings](/docs/en/managed-settings). Claude Code ignores a `true` in a project's `.claude/settings.json` or `.claude/settings.local.json`. In a session with [`CLAUDE_CODE_SUBPROCESS_ENV_SCRUB`](/docs/en/env-vars#variables) set to `1`, Claude Code ignores a `true` from every source. A `false` counts from any file, by [settings precedence](/docs/en/settings#settings-precedence). +* **Type**: Boolean + * `true`: sandboxed commands can create user namespaces + * `false`: this key allows nothing extra, and the sandbox's default applies +* **Default**: `false` + +```json settings.json theme={null} +{ + "sandbox": { + "enabled": true, + "allowNestedUserNamespaces": true + } +} +``` + +With this key on, don't rely on any of the sandbox's restrictions, including [protected paths](/docs/en/sandboxing#protected-paths) and [`credentials.files`](#sandbox-credentials-files) entries, to stop a malicious command. In [auto-allow mode](/docs/en/sandboxing#auto-allow-mode), that command can run without a permission prompt. If your organization has a security team, check with them before you turn the key on. + +To find the fix for your tool, see [Chromium or rootless Podman fails inside the sandbox on Linux](/docs/en/sandboxing#chromium-or-rootless-podman-fails-inside-the-sandbox-on-linux). + ### `sandbox.ripgrep` Point the sandbox at a ripgrep binary of your own instead of the one Claude Code uses, for example when your platform needs a differently built `rg`. @@ -3881,7 +3905,7 @@ Each entry below shows one allowlist entry per source type and the fields it acc | `directory` | `{ "source": "directory", "path": "/opt/acme-corp/approved-marketplaces" }` | `path` required, the absolute path to a directory containing `.claude-plugin/marketplace.json` | | `hostPattern` | `{ "source": "hostPattern", "hostPattern": "^github\\.example\\.com$" }` | `hostPattern` required, a regex matched anywhere in the marketplace host; anchor it with `^` and `$` to match the whole host | | `pathPattern` | `{ "source": "pathPattern", "pathPattern": "^/opt/approved/" }` | `pathPattern` required, a regex matched anywhere in the `path` of `file` and `directory` sources; start it with `^` to pin a prefix | -| `skills-dir` | `{ "source": "skills-dir" }` | No fields. Opts the `~/.claude/skills/` plugin scan back in | +| `skills-dir` | `{ "source": "skills-dir" }` | No fields | Three source types carry rules beyond the table: @@ -3895,7 +3919,7 @@ Three source types carry rules beyond the table: `file` and `directory` sources have no host and never match a `hostPattern` entry. * **`pathPattern`**: use it to allow filesystem marketplaces alongside `hostPattern` entries for network sources. `".*"` allows every local path; a narrower pattern such as `"^/opt/approved/"` restricts to a directory. -Any allowlist, even an empty one, also stops Claude Code loading [`@skills-dir` plugins](/docs/en/plugins/loading#plugins-shared-through-a-repository) from `~/.claude/skills/`. Add the `{ "source": "skills-dir" }` entry to keep loading them; the entry has no meaning outside this key and `blockedMarketplaces`. +Any allowlist, even an empty one, also stops Claude Code loading [`@skills-dir` plugins](/docs/en/plugins/loading#plugins-shared-through-a-repository) from `~/.claude/skills/`. To keep loading them, add the `{ "source": "skills-dir" }` entry and leave [`strictPluginOnlyCustomization`](#strictpluginonlycustomization) unset. The entry has no meaning outside this key and `blockedMarketplaces`. #### Owner wildcards @@ -4001,11 +4025,13 @@ This example locks skills and hooks and leaves agents and MCP servers unlocked: } ``` -The four sub-key entries below list what each surface blocks and what still loads. Claude Code ignores surface names it doesn't recognize rather than failing the settings file, so you can add new surface names before every client has updated. +If you lock any surface, Claude Code also stops loading [skills-directory plugins](/docs/en/plugins/loading#skills-directory-plugins-blocked-by-managed-settings), the plugin folders that users keep under `~/.claude/skills/` or `.claude/skills/`. Users place those folders themselves rather than installing them from a marketplace, so Claude Code treats them as user customization under this setting. + +The four sub-key entries below list what else each surface blocks and what still loads. Claude Code ignores surface names it doesn't recognize rather than failing the settings file, so you can add new surface names before every client has updated. ### `strictPluginOnlyCustomization.skills` -Lock the `skills` surface. Claude Code stops loading skills from `~/.claude/skills/` and `.claude/skills/`, custom commands from `~/.claude/commands/` and `.claude/commands/`, skills and commands under `--add-dir` directories, and skills synced from your claude.ai account. It keeps loading plugin skills, bundled skills, and skills in the managed policy directory. +Lock the `skills` surface. Claude Code stops loading skills from `~/.claude/skills/` and `.claude/skills/`, custom commands from `~/.claude/commands/` and `.claude/commands/`, skills and commands under `--add-dir` directories, and skills synced from your claude.ai account. It keeps loading bundled skills, skills in the managed policy directory, and skills from plugins other than [skills-directory plugins](/docs/en/plugins/loading#skills-directory-plugins-blocked-by-managed-settings). * **Scope**: [`Managed`](#scopes) * **Type**: the string `"skills"` in the [`strictPluginOnlyCustomization`](#strictpluginonlycustomization) array @@ -4019,7 +4045,7 @@ Lock the `skills` surface. Claude Code stops loading skills from `~/.claude/skil ### `strictPluginOnlyCustomization.agents` -Lock the `agents` surface. Claude Code stops loading agents from `~/.claude/agents/`, `.claude/agents/`, and `--add-dir` directories. It keeps loading plugin agents, built-in agents, and agents in the managed policy directory. +Lock the `agents` surface. Claude Code stops loading agents from `~/.claude/agents/`, `.claude/agents/`, and `--add-dir` directories. It keeps loading built-in agents, agents in the managed policy directory, and agents from plugins other than [skills-directory plugins](/docs/en/plugins/loading#skills-directory-plugins-blocked-by-managed-settings). * **Scope**: [`Managed`](#scopes) * **Type**: the string `"agents"` in the [`strictPluginOnlyCustomization`](#strictpluginonlycustomization) array @@ -4038,7 +4064,7 @@ Lock the `hooks` surface: * **Stops running**: * Hooks from user, project, and local `settings.json` * Frontmatter hooks in skills, custom commands, and agents, from the sources that a [`skills`](#strictpluginonlycustomization-skills) or [`agents`](#strictpluginonlycustomization-agents) lock would block -* **Keeps running**: plugin hooks and hooks in managed settings +* **Keeps running**: hooks in managed settings, and hooks from plugins other than [skills-directory plugins](/docs/en/plugins/loading#skills-directory-plugins-blocked-by-managed-settings) Skills, custom commands, and agents whose frontmatter hooks stop running still load while their own surface isn't locked. @@ -4054,7 +4080,7 @@ Skills, custom commands, and agents whose frontmatter hooks stop running still l ### `strictPluginOnlyCustomization.mcp` -Lock the `mcp` surface. Claude Code stops loading MCP servers from `~/.claude.json` and `.mcp.json`, and keeps loading plugin MCP servers, [`managed-mcp.json`](/docs/en/managed-mcp) servers, and servers from [`managedMcpServers`](#managedmcpservers). +Lock the `mcp` surface. Claude Code stops loading MCP servers from `~/.claude.json` and `.mcp.json`. It keeps loading [`managed-mcp.json`](/docs/en/managed-mcp) servers, servers from [`managedMcpServers`](#managedmcpservers), and MCP servers from plugins other than [skills-directory plugins](/docs/en/plugins/loading#skills-directory-plugins-blocked-by-managed-settings). * **Scope**: [`Managed`](#scopes) * **Type**: the string `"mcp"` in the [`strictPluginOnlyCustomization`](#strictpluginonlycustomization) array @@ -4312,7 +4338,7 @@ Built-in servers such as Claude in Chrome, the `ide` server Claude Code connects Servers your organization delivers are also exempt from the allowlist, and the denylist still applies to them. The exemption covers every [`managedMcpServers`](#managedmcpservers) entry, and any [`managed-mcp.json`](/docs/en/managed-mcp#exclusive-control-with-managed-mcp-json) entry whose values use no `${VAR}` expansion. See [How a server is evaluated](/docs/en/managed-mcp#how-a-server-is-evaluated) for the full check order. Before v2.1.259, servers from `managed-mcp.json` had to match too. * **Scope**: [`Any file`](#scopes). Entries from every file merge into one allowlist unless [`allowManagedMcpServersOnly`](#allowmanagedmcpserversonly) is set. Deploy it in managed settings to enforce it. -* **Type**: array of objects, each with exactly one key: `serverName`, a string limited to letters, numbers, hyphens, and underscores; `serverCommand`, an array of the command and its arguments matched exactly; or `serverUrl`, a URL pattern with `*` wildcards +* **Type**: array of objects, each with exactly one key. Use `serverName`, a string limited to letters, numbers, hyphens, and underscores; `serverCommand`, an array of the command and its arguments matched exactly; or `serverUrl`, a URL pattern with `*` wildcards * **Default**: unset, so every server is allowed; an empty array blocks every server users add This example allows only the stdio server that the listed `npx` command starts: @@ -4702,7 +4728,7 @@ Configure Remote Control, cloud environments, the desktop app, and the notificat ### `agentPushNotifEnabled` -Allow Claude to send a push notification to your phone when it decides one is worth sending, for example when a long task finishes. Claude Code syncs this choice to your account, and pushes arrive while [Remote Control](/docs/en/remote-control) is connected. Appears in `/config` as **Push when Claude decides**. +Allow Claude to send a push notification to your phone when it decides one is worth sending, for example when a long task finishes. Claude can send one while [Remote Control](/docs/en/remote-control) is connected. Appears in `/config` as **Push when Claude decides**. When you change it there, Claude Code also saves the value to your account. * **Scope**: [`Any file`](#scopes). Claude Code also reads a value left in `~/.claude.json` by older versions. * **Type**: Boolean @@ -4716,6 +4742,8 @@ Allow Claude to send a push notification to your phone when it decides one is wo } ``` +If you run sessions under a [`claude remote-control`](/docs/en/remote-control#start-a-remote-control-session) server, they follow the value saved to your account rather than this key. To change that value, run `/config` in a Claude Code session in your terminal and turn **Push when Claude decides** on or off. If the toggle already shows the value you want, change it and change it back so that Claude Code saves that value to your account. + See [Mobile push notifications](/docs/en/remote-control#mobile-push-notifications). ### `awaySummaryEnabled` diff --git a/content/en/docs/claude-code/settings.md b/content/en/docs/claude-code/settings.md index 30ca28e6dd..9e9b130e0d 100644 --- a/content/en/docs/claude-code/settings.md +++ b/content/en/docs/claude-code/settings.md @@ -62,7 +62,7 @@ Installing Claude Code doesn't create any settings file. If your machine or proj > > On Windows, `~/.claude` means `%USERPROFILE%\.claude`. To keep the home-directory files somewhere else, set [`CLAUDE_CONFIG_DIR`](/docs/en/env-vars); Claude Code then stores your settings, session history, and plugins there instead. -Claude Code also keeps a fifth file, [`~/.claude.json`](/docs/en/claude-directory#ce-claude-json), that it writes for itself; you don't need to edit it. It holds your sign-in session, [MCP server](/docs/en/mcp) configurations, per-project state such as trust decisions, and the [global config keys](/docs/en/settings-reference#global-config-settings) that `/config` writes for you. +Claude Code also keeps a fifth file, [`~/.claude.json`](/docs/en/claude-directory#ce-claude-json), that it writes for itself; you don't need to edit it. It holds your account details, [MCP server](/docs/en/mcp) configurations, per-project state such as trust decisions, and the [global config keys](/docs/en/settings-reference#global-config-settings) that `/config` writes for you. ### Share settings with your team @@ -322,11 +322,11 @@ An app that runs Claude Code inside itself and sets [`CLAUDE_CODE_PROVIDER_MANAG A [cloud session](/docs/en/claude-code-on-the-web) runs in a [cloud environment](/docs/en/cloud-environments) on a fresh clone of your repository, not on your machine. That changes which settings reach it: * **Cloud threads in a project**: in a cloud thread in a [project](/docs/en/claude-projects#what-threads-pick-up-from-your-repositories), none of a repository's `.claude/settings.json` permission rules, hooks, or `env` apply, however many repositories the project has. [What threads pick up from your repositories](/docs/en/claude-projects#what-threads-pick-up-from-your-repositories) lists what to use instead. -* **Shared project settings** (`.claude/settings.json`): read in a session with one repository outside a project, because the file is part of the clone and the session starts inside it. Commit a setting there to apply it in those sessions. +* **Shared project settings** (`.claude/settings.json`): read in a session with one repository outside a project's threads, because the file is part of the clone and the session starts inside it. Commit a setting there to apply it in those sessions. * **Shared project settings with several repositories**: in an Anthropic-hosted environment, a session with several repositories starts above the clones and reads only the `enabledPlugins` and `extraKnownMarketplaces` keys from each repository's `.claude/settings.json`, not permission rules, hooks, `env`, or other keys. The marketplaces and plugins those two keys declare still [don't load in a cloud session](/docs/en/cloud-environments#what-carries-over-from-your-setup). For a self-hosted environment, see [which repository's settings apply](/docs/en/self-hosted-environments-configuration#repository-settings-in-sessions-with-several-repositories). * **User and project local settings** (`~/.claude/settings.json` and `.claude/settings.local.json`): not read. Both stay on your machine, and the local file isn't in the clone. * **Managed settings**: a `managed-settings.json` file or MDM profile on your device doesn't reach a cloud session. Your organization's [server-managed settings](/docs/en/server-managed-settings) do; [surface coverage](/docs/en/model-config#surface-coverage) lists which cloud sessions receive them. A [self-hosted environment](/docs/en/self-hosted-environments) also reads the managed settings file in its runner image. [How Claude Code combines managed sources](/docs/en/managed-settings#how-claude-code-combines-managed-sources) says when that file applies. -* **`/config`**: in your browser at claude.ai/code, opens the Claude Code section of your claude.ai settings instead of changing a value. To change a setting for a cloud session, set an [environment variable](/docs/en/cloud-environments#set-environment-variables) on the environment. In a session with one repository outside a project, you can instead commit the key to that repository's `.claude/settings.json`. +* **`/config`**: in your browser at claude.ai/code, opens the Claude Code section of your claude.ai settings instead of changing a value. To change a setting for a cloud session, set an [environment variable](/docs/en/cloud-environments#set-environment-variables) on the environment. In a session with one repository outside a project's threads, you can instead commit the key to that repository's `.claude/settings.json`. [What carries over from your setup](/docs/en/cloud-environments#what-carries-over-from-your-setup) lists the rest: `CLAUDE.md`, skills, MCP servers, plugins, and credentials. diff --git a/content/en/docs/claude-code/skills.md b/content/en/docs/claude-code/skills.md index 8e7042c628..78916b5564 100644 --- a/content/en/docs/claude-code/skills.md +++ b/content/en/docs/claude-code/skills.md @@ -84,6 +84,7 @@ To start one of the skill's workflows, type a subcommand after the skill name at | :- | :- | :- | | `migrate` | Update your existing Claude API code to a newer model | Earlier than v2.1.221 | | `upgrade` | Move your project's Anthropic SDK dependency across a major version, currently the Python `anthropic` package from 0.x to 1.x | v2.1.236 or later | +| `api-version` | Update your Claude API code for a newer [API version](https://platform.claude.com/docs/en/api/versioning), then switch your requests to that version | v2.1.307 or later | | `managed-agents-onboard` | Walk through creating a new Managed Agent | Earlier than v2.1.221 | | `managed-agents-onboard ` | Build the Managed Agent that the page at the URL describes, such as a page in the [Managed Agents docs](https://platform.claude.com/docs/en/managed-agents/overview) | v2.1.290 or later | | `managed-agents-onboard ` | Build one of the Console's quickstart templates, such as `deep-researcher`. If you give one word that isn't a template name, Claude lists the valid names | v2.1.290 or later | @@ -169,7 +170,7 @@ Skill folders also follow these rules: * **Reserved name `anthropic-skills`**: outside a plugin, a skill folder or command file whose name is `anthropic-skills` or starts with `anthropic-skills:` doesn't load. See [Names reserved for synced skills](#names-reserved-for-synced-skills). * **Characters in the name**: outside a plugin, a skill folder doesn't load when its name has a character such as a zero-width space or `<`. See [Characters a skill name can't hold](#characters-a-skill-name-cant-hold). * **Command files**: a Markdown file in `.claude/commands/` is the older format and still works. It supports the same [frontmatter](#frontmatter-reference) except `name` and `paths`. To find the name you type to invoke it, see [How a skill gets its command name](#how-a-skill-gets-its-command-name). Prefer a skill for new work, since skills also support [supporting files](#add-supporting-files). -* **Skill folder as a plugin**: add a `.claude-plugin/plugin.json` to a skill folder and it loads as a [plugin](/docs/en/plugins/loading#plugins-shared-through-a-repository) named `@skills-dir`, so it can bundle agents, hooks, and MCP servers. In a project's `.claude/skills/`, this requires accepting the workspace trust dialog first. +* **Skill folder as a plugin**: add a `.claude-plugin/plugin.json` to a personal or project skill folder and Claude Code can load it as a [plugin](/docs/en/plugins/loading#plugins-shared-through-a-repository) named `@skills-dir` with its own agents, hooks, and MCP servers. In a project's `.claude/skills/`, this requires accepting the workspace trust dialog first, and in either location it requires that your administrator hasn't [blocked skills-directory plugins](/docs/en/plugins/loading#skills-directory-plugins-blocked-by-managed-settings). ### Load skills in monorepos and subdirectories @@ -398,8 +399,8 @@ Boolean fields accept `yes`, `no`, `on`, `off`, `1`, and `0` in any letter case, | `context` | No | Set to `fork` to run in a forked subagent context. See [Run skills in a subagent](#run-skills-in-a-subagent). | | `agent` | No | Which subagent type to use when `context: fork` is set. | | `background` | No | Only applies with `context: fork`. Set to `false` to wait for the forked subagent's result in the turn that invoked the skill, instead of [running it in the background](#run-skills-in-a-subagent). Default: `true`. Requires Claude Code v2.1.218 or later. | -| `hooks` | No | Hooks that Claude Code registers when the skill is invoked and keeps running for the rest of the session. See [Hooks in skills and agents](/docs/en/hooks#hooks-in-skills-and-agents) for the configuration format and the `once` option. | -| `paths` | No | Glob patterns that limit when this skill is activated. Accepts a comma-separated string or a YAML list. When set, Claude loads the skill automatically only when working with files matching the patterns. Uses the same format as [path-specific rules](/docs/en/memory#path-specific-rules). | +| `hooks` | No | Hooks that Claude Code registers when the skill is invoked and keeps running for the rest of the session. See [Hooks in skills and agents](/docs/en/hooks#hooks-in-skills-and-agents) for the configuration format, the `once` option, and the [limits on skill hooks](/docs/en/hooks#limits-on-skill-hooks). | +| `paths` | No | Glob patterns that limit when this skill is activated. Accepts a comma-separated string or a YAML list. When set, Claude loads the skill automatically only when working with files matching the patterns. Patterns are relative to Claude's current working directory, and files outside that directory don't match. Uses the same glob format as [path-specific rules](/docs/en/memory#path-specific-rules). | | `shell` | No | Shell to use for `` !`command` `` and ` ```! ` blocks in this skill. Accepts `bash` (default) or `powershell`. Setting `powershell` runs inline shell commands via PowerShell when the [PowerShell tool](/en/tools-reference#powershell-tool) is enabled: it's on by default on Windows without Git Bash, on by default with Git Bash for claude.ai and Console accounts, and needs `CLAUDE_CODE_USE_POWERSHELL_TOOL=1` in Amazon Bedrock, Google Cloud's Agent Platform, and Microsoft Foundry sessions and on macOS, Linux, and WSL. Set it to `0` to turn the tool off. | | `metadata` | No | Free-form YAML map for your own key-value data, such as entitlement or catalog fields, read by your own tooling from `SKILL.md`. Claude Code doesn't act on its contents, and drops a value that isn't a map. Don't reuse frontmatter field names such as `paths` as keys. | | `license` | No | License covering the skill. Part of the [Agent Skills](https://agentskills.io) spec; see [Using skill frontmatter outside Claude Code](#using-skill-frontmatter-outside-claude-code). Claude Code accepts the field but doesn't act on it. | @@ -749,14 +750,14 @@ The PowerShell tool applies the same timeout, backgrounding, and output-ceiling #### When an injected command fails -A failed command aborts the entire skill invocation, not just its own placeholder. Claude never sees the skill content for that invocation. The abort shows `Shell command failed for pattern "..."`. The error message includes the command's output under `[stderr]`. +A failed command aborts the entire skill invocation, not just its own placeholder. Claude never sees the skill content for that invocation. The abort shows `Shell command failed for pattern "..."`. The error message includes the command's output. With the default `bash` shell, any non-zero exit code counts as a failure. One carveout applies: Claude Code treats exit code 1 from [search and comparison commands](/docs/en/tools-reference#output-limits) as a normal result and injects their output. Exit codes of 2 or higher fail even for those commands. Which commands get the carveout depends on the shell: * Default `bash` shell: the commands listed under [Output limits](/docs/en/tools-reference#output-limits) -* `shell: powershell`, when the PowerShell tool is enabled: a [different set](/docs/en/tools-reference#shell-selection-in-settings-hooks-and-skills) that includes `grep` and `git diff` but not `find` or `diff` +* `shell: powershell`, when the PowerShell tool is enabled: a [different set](/docs/en/tools-reference#exit-code-1-from-searches-and-git-diff-in-powershell) that includes `grep` and `git diff` but not `find` or `diff` With the default `bash` shell, append `|| true` to any other command you expect to exit non-zero. A check script that exits 1 when it finds problems is one example. @@ -1178,6 +1179,7 @@ If Claude doesn't use your skill when expected: 3. Try rephrasing your request to match the description more closely 4. Invoke it directly with `/skill-name` if the skill is user-invocable 5. If `/skill-name` isn't recognized either, check whether Claude Code [refused the skill's name](#characters-a-skill-name-cant-hold) +6. If the skill sets `paths`, check that the files Claude reads, edits, or writes are inside Claude's current working directory. The skill doesn't activate for files outside it, such as those in a sibling git worktree, even one you added with `/add-dir`. To have the skill activate for those files, start Claude Code in that worktree or [move the session there with `/cd`](/docs/en/permissions#move-the-session-to-another-directory). If the frontmatter YAML is malformed, Claude Code loads the skill body with empty metadata, so `/skill-name` still works but Claude can't match against your `description`. Run with `--debug` to see the parse error. diff --git a/content/en/docs/claude-code/slash-commands.md b/content/en/docs/claude-code/slash-commands.md index 8e7042c628..78916b5564 100644 --- a/content/en/docs/claude-code/slash-commands.md +++ b/content/en/docs/claude-code/slash-commands.md @@ -84,6 +84,7 @@ To start one of the skill's workflows, type a subcommand after the skill name at | :- | :- | :- | | `migrate` | Update your existing Claude API code to a newer model | Earlier than v2.1.221 | | `upgrade` | Move your project's Anthropic SDK dependency across a major version, currently the Python `anthropic` package from 0.x to 1.x | v2.1.236 or later | +| `api-version` | Update your Claude API code for a newer [API version](https://platform.claude.com/docs/en/api/versioning), then switch your requests to that version | v2.1.307 or later | | `managed-agents-onboard` | Walk through creating a new Managed Agent | Earlier than v2.1.221 | | `managed-agents-onboard ` | Build the Managed Agent that the page at the URL describes, such as a page in the [Managed Agents docs](https://platform.claude.com/docs/en/managed-agents/overview) | v2.1.290 or later | | `managed-agents-onboard ` | Build one of the Console's quickstart templates, such as `deep-researcher`. If you give one word that isn't a template name, Claude lists the valid names | v2.1.290 or later | @@ -169,7 +170,7 @@ Skill folders also follow these rules: * **Reserved name `anthropic-skills`**: outside a plugin, a skill folder or command file whose name is `anthropic-skills` or starts with `anthropic-skills:` doesn't load. See [Names reserved for synced skills](#names-reserved-for-synced-skills). * **Characters in the name**: outside a plugin, a skill folder doesn't load when its name has a character such as a zero-width space or `<`. See [Characters a skill name can't hold](#characters-a-skill-name-cant-hold). * **Command files**: a Markdown file in `.claude/commands/` is the older format and still works. It supports the same [frontmatter](#frontmatter-reference) except `name` and `paths`. To find the name you type to invoke it, see [How a skill gets its command name](#how-a-skill-gets-its-command-name). Prefer a skill for new work, since skills also support [supporting files](#add-supporting-files). -* **Skill folder as a plugin**: add a `.claude-plugin/plugin.json` to a skill folder and it loads as a [plugin](/docs/en/plugins/loading#plugins-shared-through-a-repository) named `@skills-dir`, so it can bundle agents, hooks, and MCP servers. In a project's `.claude/skills/`, this requires accepting the workspace trust dialog first. +* **Skill folder as a plugin**: add a `.claude-plugin/plugin.json` to a personal or project skill folder and Claude Code can load it as a [plugin](/docs/en/plugins/loading#plugins-shared-through-a-repository) named `@skills-dir` with its own agents, hooks, and MCP servers. In a project's `.claude/skills/`, this requires accepting the workspace trust dialog first, and in either location it requires that your administrator hasn't [blocked skills-directory plugins](/docs/en/plugins/loading#skills-directory-plugins-blocked-by-managed-settings). ### Load skills in monorepos and subdirectories @@ -398,8 +399,8 @@ Boolean fields accept `yes`, `no`, `on`, `off`, `1`, and `0` in any letter case, | `context` | No | Set to `fork` to run in a forked subagent context. See [Run skills in a subagent](#run-skills-in-a-subagent). | | `agent` | No | Which subagent type to use when `context: fork` is set. | | `background` | No | Only applies with `context: fork`. Set to `false` to wait for the forked subagent's result in the turn that invoked the skill, instead of [running it in the background](#run-skills-in-a-subagent). Default: `true`. Requires Claude Code v2.1.218 or later. | -| `hooks` | No | Hooks that Claude Code registers when the skill is invoked and keeps running for the rest of the session. See [Hooks in skills and agents](/docs/en/hooks#hooks-in-skills-and-agents) for the configuration format and the `once` option. | -| `paths` | No | Glob patterns that limit when this skill is activated. Accepts a comma-separated string or a YAML list. When set, Claude loads the skill automatically only when working with files matching the patterns. Uses the same format as [path-specific rules](/docs/en/memory#path-specific-rules). | +| `hooks` | No | Hooks that Claude Code registers when the skill is invoked and keeps running for the rest of the session. See [Hooks in skills and agents](/docs/en/hooks#hooks-in-skills-and-agents) for the configuration format, the `once` option, and the [limits on skill hooks](/docs/en/hooks#limits-on-skill-hooks). | +| `paths` | No | Glob patterns that limit when this skill is activated. Accepts a comma-separated string or a YAML list. When set, Claude loads the skill automatically only when working with files matching the patterns. Patterns are relative to Claude's current working directory, and files outside that directory don't match. Uses the same glob format as [path-specific rules](/docs/en/memory#path-specific-rules). | | `shell` | No | Shell to use for `` !`command` `` and ` ```! ` blocks in this skill. Accepts `bash` (default) or `powershell`. Setting `powershell` runs inline shell commands via PowerShell when the [PowerShell tool](/en/tools-reference#powershell-tool) is enabled: it's on by default on Windows without Git Bash, on by default with Git Bash for claude.ai and Console accounts, and needs `CLAUDE_CODE_USE_POWERSHELL_TOOL=1` in Amazon Bedrock, Google Cloud's Agent Platform, and Microsoft Foundry sessions and on macOS, Linux, and WSL. Set it to `0` to turn the tool off. | | `metadata` | No | Free-form YAML map for your own key-value data, such as entitlement or catalog fields, read by your own tooling from `SKILL.md`. Claude Code doesn't act on its contents, and drops a value that isn't a map. Don't reuse frontmatter field names such as `paths` as keys. | | `license` | No | License covering the skill. Part of the [Agent Skills](https://agentskills.io) spec; see [Using skill frontmatter outside Claude Code](#using-skill-frontmatter-outside-claude-code). Claude Code accepts the field but doesn't act on it. | @@ -749,14 +750,14 @@ The PowerShell tool applies the same timeout, backgrounding, and output-ceiling #### When an injected command fails -A failed command aborts the entire skill invocation, not just its own placeholder. Claude never sees the skill content for that invocation. The abort shows `Shell command failed for pattern "..."`. The error message includes the command's output under `[stderr]`. +A failed command aborts the entire skill invocation, not just its own placeholder. Claude never sees the skill content for that invocation. The abort shows `Shell command failed for pattern "..."`. The error message includes the command's output. With the default `bash` shell, any non-zero exit code counts as a failure. One carveout applies: Claude Code treats exit code 1 from [search and comparison commands](/docs/en/tools-reference#output-limits) as a normal result and injects their output. Exit codes of 2 or higher fail even for those commands. Which commands get the carveout depends on the shell: * Default `bash` shell: the commands listed under [Output limits](/docs/en/tools-reference#output-limits) -* `shell: powershell`, when the PowerShell tool is enabled: a [different set](/docs/en/tools-reference#shell-selection-in-settings-hooks-and-skills) that includes `grep` and `git diff` but not `find` or `diff` +* `shell: powershell`, when the PowerShell tool is enabled: a [different set](/docs/en/tools-reference#exit-code-1-from-searches-and-git-diff-in-powershell) that includes `grep` and `git diff` but not `find` or `diff` With the default `bash` shell, append `|| true` to any other command you expect to exit non-zero. A check script that exits 1 when it finds problems is one example. @@ -1178,6 +1179,7 @@ If Claude doesn't use your skill when expected: 3. Try rephrasing your request to match the description more closely 4. Invoke it directly with `/skill-name` if the skill is user-invocable 5. If `/skill-name` isn't recognized either, check whether Claude Code [refused the skill's name](#characters-a-skill-name-cant-hold) +6. If the skill sets `paths`, check that the files Claude reads, edits, or writes are inside Claude's current working directory. The skill doesn't activate for files outside it, such as those in a sibling git worktree, even one you added with `/add-dir`. To have the skill activate for those files, start Claude Code in that worktree or [move the session there with `/cd`](/docs/en/permissions#move-the-session-to-another-directory). If the frontmatter YAML is malformed, Claude Code loads the skill body with empty metadata, so `/skill-name` still works but Claude can't match against your `description`. Run with `--debug` to see the parse error. diff --git a/content/en/docs/claude-code/sub-agents.md b/content/en/docs/claude-code/sub-agents.md index fba53b16e1..09c99870cf 100644 --- a/content/en/docs/claude-code/sub-agents.md +++ b/content/en/docs/claude-code/sub-agents.md @@ -489,6 +489,13 @@ disallowedTools: mcp__github A `disallowedTools` entry with a specifier, such as `Bash(git push *)`, still removes the whole tool from the subagent, not only the matching commands. To keep Bash and block specific commands, add a [Bash deny rule](/docs/en/permissions#bash) such as `Bash(git push *)` to `permissions.deny` in your settings. The rule applies to the main conversation and to subagents. +##### MCP server names that contain a double underscore + +If a subagent gets none of the tools from an MCP server whose name contains `__`, such as `reports__v2`, check the subagent's `mcp__` entries: + +* **In `tools`**: write `mcp__` followed by the [server's whole name](/docs/en/permissions#mcp) and `__*`, as in `mcp__reports__v2__*`. Without the trailing `__*`, `mcp__reports__v2` matches none of that server's tools. +* **In `disallowedTools`**: look for `mcp__reports` or `mcp__reports__*`, the entries that withhold a server named `reports`. With either entry, the subagent loses every `reports__v2` tool as well, because those tool names also begin with `mcp__reports__`. To withhold only the `reports` server's tools, list them one by one instead, such as `mcp__reports__run_query`. + #### Restrict which subagents can be spawned When an agent runs as the main thread with `claude --agent`, it can spawn subagents using the Agent tool. To restrict which subagent types it can spawn, use `Agent(agent_type)` syntax in the `tools` field. @@ -955,7 +962,7 @@ A background subagent that completes stays listed in [`/tasks`](/docs/en/command ### Subagent names -Claude can give a subagent a name by passing a `name` parameter on the Agent tool call, and may do so on its own, without asking you first. The name makes the subagent addressable: Claude can [message or resume it by name](#resume-subagents) after it finishes. +If you start a session with [agent teams](/docs/en/agent-teams#enable-agent-teams) enabled, Claude can give a subagent a name by passing a `name` parameter on the Agent tool call. It may do so on its own, without asking you first. The name makes the subagent addressable: Claude can [message or resume it by name](#resume-subagents) after it finishes. In an interactive session with [agent teams](/docs/en/agent-teams) enabled, a subagent that Claude spawns from the main conversation with a `name` launches as a teammate instead, unless the call is a [fork](#fork-the-current-conversation) or passes `isolation` on the call itself. An `isolation` value in the subagent's frontmatter doesn't prevent it, and the teammate then runs in the main session's working directory. See [How Claude starts agent teams](/docs/en/agent-teams#how-claude-starts-agent-teams). diff --git a/content/en/docs/claude-code/tools-reference.md b/content/en/docs/claude-code/tools-reference.md index 462b5de7f6..5d262f48fe 100644 --- a/content/en/docs/claude-code/tools-reference.md +++ b/content/en/docs/claude-code/tools-reference.md @@ -476,7 +476,11 @@ PowerShell commands follow the [same main-session working-directory reset behavi PowerShell commands also receive the variables hooks persist through `CLAUDE_ENV_FILE`, under the conditions in [Persisted variables in PowerShell commands](/docs/en/hooks#persisted-variables-in-powershell-commands). Requires Claude Code v2.1.296 or later. -Exit code 1 from `grep`, `rg`, `egrep`, `fgrep`, `findstr`, and `git grep` means no matches. Exit code 1 from `git diff` means differences exist. Neither result is reported to Claude as a command failure. For `robocopy`, exit codes 0 through 7 are informational results, such as files copied or extra files detected. Exit codes of 8 or higher count as failures. +### Exit code 1 from searches and `git diff` in PowerShell + +If a `grep` or `rg` search that matches nothing shows `Error: Exit code 1` when Claude runs it in the PowerShell tool, the search didn't fail. You don't need to do anything. The error can appear when the search is part of a longer command. For example, when `rg` exits with code 1, `rg foo | Out-Null` shows the error and `rg foo` doesn't. + +The PowerShell tool can count exit code 1 as a normal result from `grep`, `rg`, `egrep`, `fgrep`, `findstr`, `git grep`, and `git diff`. The searches use exit code 1 to report no matches. From `git diff`, exit code 1 means the files differ. A command that shows the error when Claude runs it [counts as failed](/docs/en/skills#when-an-injected-command-fails) in a skill with `shell: powershell`. ### Windows encoding and exit codes @@ -484,7 +488,8 @@ Exit code 1 from `grep`, `rg`, `egrep`, `fgrep`, `findstr`, and `git grep` means * Claude Code encodes text piped to a native command's standard input as UTF-8 * Claude Code captures error output without ANSI escape sequences * A command whose child process waits on standard input receives end-of-file instead of hanging -* Exit code 1 from `where.exe` means no match, and from `fc.exe` and `diff.exe` it means the files differ, so when the command produces output, Claude Code treats that exit code as a valid negative answer rather than a command error. Claude Code still reports a silenced form, such as `where.exe /Q` or a redirect to `$null`, as a failure on exit code 1 +* If `where.exe` finds no match, or `fc.exe` or `diff.exe` finds that the files differ, the result can show `Error: Exit code 1` though the command didn't fail. You don't need to do anything. +* If a `robocopy` exit code from 1 through 7 shows as an error, the copy didn't fail and you don't need to do anything. `robocopy` exits with code 0 through 7 to report a result, such as files copied, and with 8 or higher when it fails. ### Preview limitations diff --git a/content/en/docs/claude-code/web-scheduled-tasks.md b/content/en/docs/claude-code/web-scheduled-tasks.md index d80e30402b..cbc7bd4356 100644 --- a/content/en/docs/claude-code/web-scheduled-tasks.md +++ b/content/en/docs/claude-code/web-scheduled-tasks.md @@ -50,7 +50,7 @@ Each example pairs a trigger type with the kind of work scheduled tasks are suit Create a scheduled task from the web at [claude.ai/code/routines](https://claude.ai/code/routines), from the Desktop app, or from the CLI. All three surfaces write to the same cloud account, so a scheduled task you create in one shows up in the others immediately. In the Desktop app's **Code** tab, click **Scheduled** in the sidebar or in the sidebar's **More** menu, then **New task**, and continue with [Create from the web](#create-from-the-web). -Scheduled tasks run autonomously as full Claude Code cloud sessions. You don't choose a permission mode. The session runs shell commands, uses [skills](/docs/en/skills), and calls any connectors you include, all without stopping for approval apart from some [artifact actions](#when-a-run-publishes-an-artifact-without-asking). Outside a [project](/docs/en/claude-projects#what-threads-pick-up-from-your-repositories), those skills include the ones committed to the cloned repository. +Scheduled tasks run autonomously as full Claude Code cloud sessions. You don't choose a permission mode. The session runs shell commands, uses [skills](/docs/en/skills), and calls any connectors you include, all without stopping for approval apart from some [artifact actions](#when-a-run-publishes-an-artifact-without-asking). Outside a [project](/docs/en/claude-projects#what-threads-pick-up-from-your-repositories)'s threads, those skills include the ones committed to the cloned repository. What a scheduled task can reach is determined by: @@ -118,7 +118,7 @@ Switch to the **Connectors** tab of **Advanced settings**. All of your connected Click **Create**. The dialog closes and the new task's detail page opens. The task runs the next time one of its triggers matches. To start a run immediately, click **Run now** on the detail page. -Each run creates a new session alongside your other sessions, where you can see what Claude did, review changes, and create a pull request. +To see what a run did, click it in the **History** list on the detail page. The run [opens as a full session](#view-and-interact-with-runs), a new one for each run, where you can see what Claude did, review changes, and create a pull request. #### Dialog with Repositories and Environment in the main view @@ -149,9 +149,9 @@ When a task has two or more triggers, each one has a trash icon in that dialog. A schedule trigger runs the task on a recurring cadence, or once at a specific future time. In the task's creation or edit dialog on the web, pick a preset frequency such as hourly, daily, or weekly: -* **Time zone**: times are entered in your local zone and converted automatically, so the task runs at that wall-clock time regardless of where the cloud infrastructure is located. * **Runs on the hour**: if you schedule a run exactly on the hour, such as 9:00, it can start several minutes late. To start close to the scheduled time, pick a few minutes past the hour, for example 9:07. -* **Custom intervals**: for a custom interval such as every two hours, pick the closest preset in the dialog, then run `/schedule update` in the CLI to set a specific cron expression. The minimum interval is one hour; expressions that run more frequently are rejected. +* **Custom intervals**: for a cadence the presets lack, create the task and select **Custom** in its [edit dialog](#edit-and-control-scheduled-tasks). Then enter a cron expression, such as `0 */2 * * *` for every two hours. To set one from the CLI, run [`/schedule update`](#manage-scheduled-tasks-from-the-cli). Expressions that run more often than once per hour are rejected. +* **Time zone**: when you pick a preset frequency, enter the time in your local time zone. #### Schedule a one-off run @@ -161,7 +161,7 @@ A one-off schedule runs the task a single time at a specific timestamp. For exam * Open a cleanup PR after a rollout finishes * Start follow-up work after an upstream change ships -After the task runs, it turns itself off and the web UI marks it as **Completed**. To run it again, open the task's edit dialog on the web, which offers **One-time** for a one-off task, and set a new time. +After the task runs, it turns itself off and the web UI marks it as **Completed**. To run it again, open the task's [edit dialog](#edit-and-control-scheduled-tasks) on the web and select **One-time** or **Once**, whichever label your dialog shows. Then set a new date and time in your local time zone and save. Create a one-off run from the CLI by describing the time in natural language. Claude resolves the phrase against the current time and confirms the absolute timestamp before saving. @@ -173,8 +173,6 @@ Create a one-off run from the CLI by describing the time in natural language. Cl /schedule in 2 weeks, open a cleanup PR that removes the feature flag ``` -The same local-to-UTC conversion as recurring schedules applies to one-off timestamps. - One-off runs count against the same hourly limit as other scheduled runs. See [Usage and limits](#usage-and-limits) for details. ### Add an API trigger @@ -358,7 +356,7 @@ Scheduled tasks can use your connected MCP connectors to read from and write to Connectors are the [claude.ai integrations](/docs/en/mcp#use-mcp-servers-from-claude-ai) on your account. MCP servers you added locally in the CLI with `claude mcp add` are stored on your machine rather than your claude.ai account, so they do not appear in the connectors list. To use one of those servers in a scheduled task: * **As a connector**: add it as a connector at [claude.ai/customize/connectors](https://claude.ai/customize/connectors) -* **In the repository**: for a scheduled task with one repository outside a [project](/docs/en/claude-projects#what-threads-pick-up-from-your-repositories), you can instead declare the server in a committed [`.mcp.json`](/docs/en/mcp#project-scope). A scheduled task in a project doesn't load `.mcp.json`, so add the server as a connector +* **In the repository**: for a scheduled task with one repository, you can instead declare the server in a committed [`.mcp.json`](/docs/en/mcp#project-scope), unless the task runs as threads in a [project](/docs/en/claude-projects#what-threads-pick-up-from-your-repositories). If it does, add the server as a connector. When you create a scheduled task, all of your currently connected connectors are included by default. Remove any that aren't needed to limit which tools Claude has access to during the run. You can also add connectors directly from the task's creation or edit dialog. diff --git a/content/en/get-started.md b/content/en/get-started.md index cff716452a..eb5d0059d4 100644 --- a/content/en/get-started.md +++ b/content/en/get-started.md @@ -6,7 +6,7 @@ description: Make your first API call to Claude and build a simple web search as ## Prerequisites -* A [Claude Console account](https://platform.claude.com) +* A [Claude Console account](https://platform.claude.com/) * An [API key](https://platform.claude.com/docs/en/get-api-key) ## Call the API @@ -44,7 +44,7 @@ description: Make your first API call to Claude and build a simple web search as Claude returns a JSON response containing the assistant's message: - ```json Output + ```text Output { "model": "claude-opus-5-5", "id": "msg_013mHbppMPd2PrVJzGMZPt2D", @@ -112,7 +112,7 @@ description: Make your first API call to Claude and build a simple web search as The CLI prints the JSON response: - ```json Output + ```text Output { "model": "claude-opus-5-5", "id": "msg_01N1ycuCkM5Mzd7WhTU4fwST", @@ -435,7 +435,7 @@ description: Make your first API call to Claude and build a simple web search as } dependencies { - implementation("com.anthropic:anthropic-java:3.0.0") + implementation("com.anthropic:anthropic-java:3.1.0") } application { @@ -461,7 +461,7 @@ description: Make your first API call to Claude and build a simple web search as com.anthropic anthropic-java - 3.0.0 + 3.1.0 diff --git a/content/en/manage-claude/access-transparency-log.md b/content/en/manage-claude/access-transparency-log.md index d0ef404180..bd0404c453 100644 --- a/content/en/manage-claude/access-transparency-log.md +++ b/content/en/manage-claude/access-transparency-log.md @@ -148,7 +148,7 @@ curl --fail-with-body -sS \ -H "anthropic-version: 2023-06-01" ``` -```json +```text { "type": "transparency_log_keys", "origin": "axt.anthropic.com/25f6429a-3293-49bf-afed-cb312911554b", @@ -193,7 +193,7 @@ Anthropic publishes the fingerprint of every key that signs checkpoints here, ou A planned rotation is announced on this page at least 30 days before the new key signs its first checkpoint. During that notice period the new key is listed in `log_keys` and in this table with its switch date. Retired keys stay listed with their service dates. A key that does not appear in this table is not legitimate, whatever `GET /keys` returns. Treat a checkpoint that verifies under no listed key as a verification failure, and report it to your Anthropic account representative or [Anthropic support](https://support.claude.com). -[`axt-verify`](https://platform.claude.com/docs/en/manage-claude/access-transparency-log#verify-with-axt-verify) carries the current key in each release and never reads a key from the API. Each release carries exactly one key. On the switch date, Anthropic starts signing with the new key and publishes the `axt-verify` release that carries it. On the same date Anthropic re-issues every organization's latest checkpoint under the new key, even for a log that has not grown. Upgrade on the switch date. Running the old release after the switch fails with exit status `1`, and so does running the new release before it. Either failure clears once you run the matching release. A verifier you maintain yourself needs the new fingerprint, with its switch date, added before that date. +`axt-verify` carries the current key in each release and never reads a key from the API (see [Verify with axt-verify](https://platform.claude.com/docs/en/manage-claude/access-transparency-log#verify-with-axt-verify)). Each release carries exactly one key. On the switch date, Anthropic starts signing with the new key and publishes the `axt-verify` release that carries it. On the same date Anthropic re-issues every organization's latest checkpoint under the new key, even for a log that has not grown. Upgrade on the switch date. Running the old release after the switch fails with exit status `1`, and so does running the new release before it. Either failure clears once you run the matching release. A verifier you maintain yourself needs the new fingerprint, with its switch date, added before that date. ### Fetch an inclusion proof @@ -212,7 +212,7 @@ curl --fail-with-body -sS -G \ -H "anthropic-version: 2023-06-01" ``` -```json +```text { "type": "transparency_log_inclusion_proof", "leaf_index": 41, @@ -258,7 +258,7 @@ curl --fail-with-body -sS -G \ -H "anthropic-version: 2023-06-01" ``` -```json +```text { "type": "transparency_log_consistency_proof", "hashes": [ @@ -337,7 +337,7 @@ The rules: For example, this access event as the Activity Feed serves it: -```json +```text wrap { "id": "activity_01GPXmAhizavrUuoXNn3tzeA", "type": "anthropic_access", diff --git a/content/en/manage-claude/access-transparency.md b/content/en/manage-claude/access-transparency.md index ad1984d00f..cebab676be 100644 --- a/content/en/manage-claude/access-transparency.md +++ b/content/en/manage-claude/access-transparency.md @@ -95,7 +95,7 @@ Each `anthropic_access` activity carries the standard Activity fields plus the f Example JSON message: -```json +```text wrap { "id": "activity_013b013744txqZtFHLUaRqLr", "type": "anthropic_access", @@ -132,7 +132,7 @@ curl --fail-with-body -sS -G \ Example JSON message: -```json +```text wrap { "id": "activity_01AbCdEfGhJkMnPqRsTuVwXy", "type": "cmek_preserve", @@ -211,11 +211,11 @@ For organizations that also enable CMEK, your cloud KMS audit log (CloudTrail, C No. Automated processing does not generate `anthropic_access` events; you will see an `anthropic_access` event only if a human reviewer subsequently views the content. Separately, a `cmek_preserve` event is written when content is preserved, whether the preservation was initiated by a human reviewer or an automated safety pipeline. - + Access Transparency is not available for platform deployments. Contact your Anthropic account representative to discuss your use case. - + Access Transparency is not guaranteed to be retroactive. It covers human access to content written to the Claude API on or after your enrollment date. You might see events for access to content that was written before enrollment. diff --git a/content/en/manage-claude/admin-api.md b/content/en/manage-claude/admin-api.md index 15c969f673..b06a646182 100644 --- a/content/en/manage-claude/admin-api.md +++ b/content/en/manage-claude/admin-api.md @@ -1704,7 +1704,7 @@ The `/v1/organizations/me` endpoint returns the organization that your credentia ``` -```json +```text wrap { "id": "12345678-1234-5678-1234-567812345678", "type": "organization", diff --git a/content/en/manage-claude/api-and-data-retention.md b/content/en/manage-claude/api-and-data-retention.md index 5cc2d75e47..e3711e25ee 100644 --- a/content/en/manage-claude/api-and-data-retention.md +++ b/content/en/manage-claude/api-and-data-retention.md @@ -77,7 +77,7 @@ When using [structured outputs](https://platform.claude.com/docs/en/build-with-c Your signed BAA is the official source of truth for which features are covered. The API also enforces these restrictions automatically. When a HIPAA-enabled organization sends a request that includes a non-eligible feature, the API returns a `400` error to prevent accidental use of features not covered by your BAA: -```json +```text { "type": "error", "error": { @@ -125,7 +125,7 @@ Whichever path you use, confirm which features are supported in the [feature eli Claude Fable 5.1, Claude Mythos 5.1, Claude Fable 5, and Claude Mythos 5 are designated Covered Models (see the [Covered Models support article](https://support.claude.com/en/articles/15425695)) and require 30-day data retention; ZDR is therefore not available for any of them unless expressly authorized by Anthropic. On the Claude API, requests to Claude Fable 5 from an organization whose data retention configuration does not meet this requirement return a `400 invalid_request_error`: -```json +```text { "type": "error", "error": { @@ -170,7 +170,7 @@ Each eligibility column uses three values: | [1M token context window](https://platform.claude.com/docs/en/build-with-claude/context-windows) | `/v1/messages` | Yes | Yes | | | [Adaptive thinking](https://platform.claude.com/docs/en/build-with-claude/thinking) | `/v1/messages` | Yes | Yes | | | [Advisor tool](https://platform.claude.com/docs/en/agents-and-tools/tool-use/advisor-tool) | `/v1/messages`
with `advisor` tool | Yes | No | Advisor model output is returned in the API response; nothing is stored server-side after the response. | -| [Agent Skills](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/overview) | `/v1/skills`
`/v1/messages` with `skills` | No | No | Skill data retained per standard policy. See [Agent Skills data retention](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/overview#data-retention). | +| [Agent Skills](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/overview) | `/v1/skills`
`/v1/messages` with `skills` | No | No | Skill data retained according to standard policy. See [Agent Skills data retention](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/overview#data-retention). | | [Bash tool](https://platform.claude.com/docs/en/agents-and-tools/tool-use/bash-tool) | `/v1/messages`
with `bash` tool | Yes | Yes | Client-side tool run in your environment. | | [Batch processing](https://platform.claude.com/docs/en/build-with-claude/batch-processing) | `/v1/messages/batches` | No | No | 29-day retention; async storage required. See [Batch processing data retention](https://platform.claude.com/docs/en/build-with-claude/batch-processing#data-retention). | | [Browser use](https://platform.claude.com/docs/en/agents-and-tools/tool-use/browser-use-tool) | `/v1/messages`
with `browser` toolset | Yes | No | Client-side tool. Anthropic does not run browser actions or retain page content beyond standard API handling. Not covered under HIPAA readiness; requests that include the browser use tool are not blocked. See [Browser use data retention](https://platform.claude.com/docs/en/agents-and-tools/tool-use/browser-use-tool#data-retention). | @@ -186,7 +186,7 @@ Each eligibility column uses three values: | [Fast mode](https://platform.claude.com/docs/en/build-with-claude/fast-mode) | `/v1/messages`
with `speed: "fast"` | Yes | Yes | Same Messages API endpoint with faster inference. ZDR applies regardless of speed setting. | | [Files API](https://platform.claude.com/docs/en/build-with-claude/files) | `/v1/files` | No | No | Files retained until explicitly deleted or they reach their configured expiration. See [Files API file lifecycle](https://platform.claude.com/docs/en/build-with-claude/files#data-retention). | | [Fine-grained tool streaming](https://platform.claude.com/docs/en/agents-and-tools/tool-use/fine-grained-tool-streaming) | `/v1/messages` | Yes | Yes | | -| [MCP connector](https://platform.claude.com/docs/en/agents-and-tools/mcp-connector) | `/v1/messages`
with `mcp_servers` | No | No | Data retained per standard policy. See [MCP connector data retention](https://platform.claude.com/docs/en/agents-and-tools/mcp-connector#data-retention). | +| [MCP connector](https://platform.claude.com/docs/en/agents-and-tools/mcp-connector) | `/v1/messages`
with `mcp_servers` | No | No | Data retained according to standard policy. See [MCP connector data retention](https://platform.claude.com/docs/en/agents-and-tools/mcp-connector#data-retention). | | [MCP tunnels](https://platform.claude.com/docs/en/agents-and-tools/mcp-tunnels/overview) | `/v1/tunnels` | No | No | Research preview. See [MCP tunnels security](https://platform.claude.com/docs/en/agents-and-tools/mcp-tunnels/security) for the data-flow boundary and subprocessor details. | | [Memory tool](https://platform.claude.com/docs/en/agents-and-tools/tool-use/memory-tool) | `/v1/messages`
with `memory` tool | Yes | Yes | Client-side memory storage where you control data retention. | | [Messages API](https://platform.claude.com/docs/en/build-with-claude/working-with-messages) | `/v1/messages` | Yes | Yes | Standard API calls for generating Claude responses. | @@ -201,7 +201,7 @@ Each eligibility column uses three values: | [Thinking](https://platform.claude.com/docs/en/build-with-claude/thinking) | `/v1/messages`
with `thinking` | Yes | Yes | | | [Token counting](https://platform.claude.com/docs/en/build-with-claude/token-counting) | `/v1/messages/count_tokens` | Yes | Yes | Count tokens before sending requests. | | [Tool search](https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-search-tool) | `/v1/messages`
with `tool_search` tool | Yes | No | Server-side tool run by Anthropic; the tool definitions in the request are searched in memory per call and nothing is stored after the response. | -| [User profiles](https://platform.claude.com/docs/en/manage-claude/user-profiles) | `/v1/user_profiles` | No | No | Profiles are metadata about your end customers and don't contain prompts or outputs. The profile data you send is retained per standard policy until you delete the profile. Not covered under HIPAA readiness; requests to `/v1/user_profiles` are not blocked. See [What a profile contains and how Anthropic uses it](https://platform.claude.com/docs/en/manage-claude/user-profiles#what-a-profile-contains-and-how-anthropic-uses-it). | +| [User profiles](https://platform.claude.com/docs/en/manage-claude/user-profiles) | `/v1/user_profiles` | No | No | Profiles are metadata about your end customers and don't contain prompts or outputs. The profile data you send is retained according to standard policy until you delete the profile. Not covered under HIPAA readiness; requests to `/v1/user_profiles` are not blocked. See [What a profile contains and how Anthropic uses it](https://platform.claude.com/docs/en/manage-claude/user-profiles#what-a-profile-contains-and-how-anthropic-uses-it). | | [Web fetch](https://platform.claude.com/docs/en/agents-and-tools/tool-use/web-fetch-tool) | `/v1/messages`
with `web_fetch` tool | Yes | No | Fetched web content returned in the API response. [Dynamic filtering for web fetch](https://platform.claude.com/docs/en/agents-and-tools/tool-use/web-fetch-tool#dynamic-filtering) is not eligible for ZDR or HIPAA. Website publishers might retain request data (such as fetched URLs and request metadata) according to their own policies. | | [Web search](https://platform.claude.com/docs/en/agents-and-tools/tool-use/web-search-tool) | `/v1/messages`
with `web_search` tool | Yes | Yes | Real-time web search results returned in the API response. [Dynamic filtering for web search](https://platform.claude.com/docs/en/agents-and-tools/tool-use/web-search-tool#dynamic-filtering) is not eligible for ZDR or HIPAA. | diff --git a/content/en/manage-claude/authentication.md b/content/en/manage-claude/authentication.md index 26434b5842..dee63e6542 100644 --- a/content/en/manage-claude/authentication.md +++ b/content/en/manage-claude/authentication.md @@ -48,7 +48,7 @@ content-type: application/json The legacy `x-api-key: YOUR_API_KEY` header is still supported in place of `Authorization`. -Store API keys in a secrets manager, rotate them periodically, and disable or delete any key you suspect has leaked. On the [API keys page](https://platform.claude.com/settings/keys) in the Claude Console, **Disable** is reversible (the Admin API reports the key's `status` as `"inactive"`, and **Re-enable** returns it to `"active"`), while **Delete** is permanent: the key is archived and still appears in [List API Keys](https://platform.claude.com/docs/en/api/organization/api_keys/list) with `status: "archived"`. Expired keys can only be deleted. You can also set an [expiration](https://platform.claude.com/docs/en/manage-claude/authentication#key-expiration) when you create a key to limit how long a leaked credential stays usable. +Store API keys in a secrets manager, rotate them periodically, and disable or delete any key you suspect has leaked. On the [API keys](https://platform.claude.com/settings/keys) page in the Claude Console, **Disable** is reversible (the Admin API reports the key's `status` as `"inactive"`, and **Re-enable** returns it to `"active"`), whereas **Delete** is permanent: the key is archived and still appears in [List API Keys](https://platform.claude.com/docs/en/api/organization/api_keys/list) with `status: "archived"`. Expired keys can only be deleted. You can also set an [expiration](https://platform.claude.com/docs/en/manage-claude/authentication#key-expiration) when you create a key to limit how long a leaked credential stays usable. ```bash cURL @@ -311,7 +311,7 @@ You can find a workspace's ID in the **ID** column on the [Workspaces](https://p If a request made with a key that isn't scoped to a workspace omits the header, the API returns a 400 `invalid_request_error`: -```json JSON +```text JSON { "type": "error", "error": { @@ -328,7 +328,7 @@ Workload Identity Federation selects a workspace at token exchange instead; see ### Key expiration -When you create an API key from the [API keys page](https://platform.claude.com/settings/keys) in the Claude Console, you choose an expiration: a preset (3 hours, 1 day, 7 days, or 30 days), a custom duration, or **Never** for keys you store in a secrets manager and rotate yourself. If your organization has a maximum expiration policy, the Console limits presets and custom durations to the policy maximum, and **Never** is unavailable. Existing keys keep their current behavior; expiration is set at creation time and cannot be changed afterward. The same expiration choice applies when you [create an Admin API key](https://platform.claude.com/docs/en/manage-claude/admin-api-keys) in the Claude Console. +When you create an API key from the [API keys](https://platform.claude.com/settings/keys) page in the Claude Console, you choose an expiration: a preset (3 hours, 1 day, 7 days, or 30 days), a custom duration, or **Never** for keys you store in a secrets manager and rotate yourself. If your organization has a maximum expiration policy, the Console limits presets and custom durations to the policy maximum, and **Never** is unavailable. Existing keys keep their current behavior; expiration is set at creation time and cannot be changed afterward. The same expiration choice applies when you [create an Admin API key](https://platform.claude.com/docs/en/manage-claude/admin-api-keys) in the Claude Console. Anthropic emails the key's creator as the expiration approaches: 7 days before expiration for keys created with a lifetime of at least 14 days, and 1 day before for keys with a lifetime of at least 7 days. Keys with shorter lifetimes expire without a warning email. @@ -348,7 +348,7 @@ To replace a workspace key with a personal or service account key: 1. **Decide the key type.** Your own tooling should use a personal key. A shared or unattended workload should use a service account key. 2. **Create a service account** if necessary. You might have to ask an organization admin to create one on the [Service accounts](https://platform.claude.com/settings/service-accounts) page (`platform.claude.com/settings/service-accounts`) in the Claude Console and add it to the relevant workspace. -3. **Create the new key.** Create it specifically for the integration's workspace unless multiple workspaces are needed. +3. **Create the new key.** Create it specifically for the integration's workspace unless the integration needs multiple workspaces. 4. **Deploy the new key.** Replace the old key wherever the integration reads it, typically the `ANTHROPIC_API_KEY` environment variable or a secrets manager entry. For a key that isn't scoped to a workspace, also send the `anthropic-workspace-id` header as shown in [Select a workspace](https://platform.claude.com/docs/en/manage-claude/authentication#select-a-workspace). 5. **Delete the old key.** Confirm that requests succeed, then delete the workspace key on the [API keys page](https://platform.claude.com/settings/keys) in the Claude Console. diff --git a/content/en/manage-claude/claude-code-analytics-api.md b/content/en/manage-claude/claude-code-analytics-api.md index 23bb59b726..4ae804eb63 100644 --- a/content/en/manage-claude/claude-code-analytics-api.md +++ b/content/en/manage-claude/claude-code-analytics-api.md @@ -147,7 +147,7 @@ For each Claude model used: The API returns data in the following format: -```json +```text wrap { "data": [ { diff --git a/content/en/manage-claude/compliance-activity-feed.md b/content/en/manage-claude/compliance-activity-feed.md index c609c07d0e..e794fa9d5a 100644 --- a/content/en/manage-claude/compliance-activity-feed.md +++ b/content/en/manage-claude/compliance-activity-feed.md @@ -23,7 +23,7 @@ curl --fail-with-body -sS \ -H "anthropic-version: 2023-06-01" ``` -```json Response +```text Response wrap { "data": [ { diff --git a/content/en/manage-claude/compliance-api-access.md b/content/en/manage-claude/compliance-api-access.md index cde81c62db..60e7d3be3f 100644 --- a/content/en/manage-claude/compliance-api-access.md +++ b/content/en/manage-claude/compliance-api-access.md @@ -129,7 +129,7 @@ To inspect the scopes on a key you already have, use one of the following signal * **Settings UI.** For a Compliance Access Key, open the **Keys** section in [claude.ai > Organization settings > API](https://claude.ai/admin-settings/api-access) and read the **Scopes** column for the key. Admin API keys, listed on the [Admin keys](https://platform.claude.com/settings/admin-keys) page (`platform.claude.com/settings/admin-keys`) in the Claude Console, have no selectable scopes. * **Error responses.** A call that exceeds the key's scopes returns a 403 with a message in the format `Missing required scopes. Got: [] Needed one of: []` (`Needed: [...]` on the delete endpoints). See [Handle Compliance API errors](https://platform.claude.com/docs/en/manage-claude/compliance-errors#403-forbidden) for the full error catalog. -```json +```text { "error": { "type": "permission_error", diff --git a/content/en/manage-claude/compliance-api.md b/content/en/manage-claude/compliance-api.md index 23534216df..0c90a5695f 100644 --- a/content/en/manage-claude/compliance-api.md +++ b/content/en/manage-claude/compliance-api.md @@ -21,7 +21,7 @@ curl --fail-with-body -sS \ A successful response returns a JSON object containing `data` (an array of `Activity` records), `has_more`, `first_id`, and `last_id`: -```json Response +```text Response wrap { "data": [ { diff --git a/content/en/manage-claude/compliance-content-data.md b/content/en/manage-claude/compliance-content-data.md index 7e07c61a6c..23df83522c 100644 --- a/content/en/manage-claude/compliance-content-data.md +++ b/content/en/manage-claude/compliance-content-data.md @@ -38,7 +38,7 @@ curl --fail-with-body -sS -G \ --data-urlencode "limit=100" ``` -```json Response +```text Response { "data": [ { @@ -92,7 +92,7 @@ curl --fail-with-body -sS \ The messages endpoint returns the chat's metadata plus a `chat_messages` array sorted by `created_at`. When `limit` is omitted, the full message set is returned in one response; pass `limit`, `after_id`, or `before_id` to page through very long chats. The endpoint also accepts `created_at.*` and `updated_at.*` range bounds (`gt`, `gte`, `lt`, `lte`) and an `order` parameter (`asc` or `desc`). See [Get chat messages](https://platform.claude.com/docs/en/api/compliance/apps/chats/messages/list) for the full parameter list. For user messages, `created_at` is when the message was sent; for assistant messages, it is when Claude finished generating the message. Each message carries its text content and, when present, any uploaded files (typically on user messages), any tool-generated files, and any artifacts the assistant produced or updated (typically on assistant messages): -```json Response +```text Response { "id": "claude_chat_01H5CWunD7RpVJ5bHa8RCkja", "name": "Product Requirements Discussion", @@ -232,7 +232,7 @@ curl --fail-with-body -sS -G \ -H "anthropic-version: 2023-06-01" ``` -```json Response +```text Response wrap { "data": [ { @@ -289,7 +289,7 @@ curl --fail-with-body -sS -X DELETE \ -H "anthropic-version: 2023-06-01" ``` -```json Response +```text Response wrap { "id": "claude_chat_01H5CWunD7RpVJ5bHa8RCkja", "type": "claude_chat_deleted" @@ -302,7 +302,7 @@ Each successful delete returns a small confirmation envelope with an `id` and a A project cannot be deleted while any chats remain attached to it. The API returns 409 with this body: -```json +```text { "error": { "type": "invalid_request_error", diff --git a/content/en/manage-claude/compliance-errors.md b/content/en/manage-claude/compliance-errors.md index 9fb76d9dd5..6d7be3f592 100644 --- a/content/en/manage-claude/compliance-errors.md +++ b/content/en/manage-claude/compliance-errors.md @@ -12,7 +12,7 @@ This page lists common Compliance API error responses by HTTP status code, with The Compliance API returns errors in the standard [Anthropic error format](https://platform.claude.com/docs/en/api/errors): a non-2xx status code, a `request-id` response header, and a JSON body with an `error` object containing `type` and `message`. Include the `request-id` header value when you escalate to support. -```json +```text { "error": { "type": "permission_error", @@ -423,7 +423,7 @@ Once your API key authenticates, Compliance API responses report the shared budg A 429 response also carries a `retry-after` header with the number of seconds to wait before sending the next request. This value might include a small safety margin beyond `anthropic-ratelimit-requests-reset`; honor `retry-after`. -```http +```text wrap HTTP/1.1 429 Too Many Requests date: Tue, 21 Apr 2026 14:38:02 GMT retry-after: 25 @@ -432,7 +432,7 @@ anthropic-ratelimit-requests-remaining: 0 anthropic-ratelimit-requests-reset: 2026-04-21T14:38:25Z ``` -```json +```text { "error": { "type": "rate_limit_error", diff --git a/content/en/manage-claude/compliance-faq.md b/content/en/manage-claude/compliance-faq.md index 1979a84e85..b2246c6c43 100644 --- a/content/en/manage-claude/compliance-faq.md +++ b/content/en/manage-claude/compliance-faq.md @@ -43,7 +43,7 @@ description: Answers to common questions about Compliance API access, scopes, re An Admin API key's only Compliance API scope is `read:compliance_activities`, which authorizes the Activity Feed only. Every other Compliance API endpoint requires a scope that only a Compliance Access Key created in claude.ai can carry. Calling a content or directory endpoint with an Admin API key returns a 403 naming the scope that endpoint family requires: `read:compliance_user_data` for chats, files, projects, project attachments, sessions, users, and group members, and `read:compliance_org_data` for organizations, roles, groups, and effective organization settings. For example, listing chats returns the following response. - ```json Response + ```text Response { "error": { "type": "permission_error", diff --git a/content/en/manage-claude/compliance-org-data.md b/content/en/manage-claude/compliance-org-data.md index 2b5113e676..eb2f226032 100644 --- a/content/en/manage-claude/compliance-org-data.md +++ b/content/en/manage-claude/compliance-org-data.md @@ -29,7 +29,7 @@ curl --fail-with-body -sS \ -H "anthropic-version: 2023-06-01" ``` -```json Response +```text Response wrap { "data": [ { @@ -80,7 +80,7 @@ curl --fail-with-body -sS -G \ --data-urlencode "limit=500" ``` -```json Response +```text Response wrap { "data": [ { @@ -115,7 +115,7 @@ curl --fail-with-body -sS \ -H "anthropic-version: 2023-06-01" ``` -```json Response +```text Response wrap { "data": [ { @@ -145,7 +145,7 @@ curl --fail-with-body -sS \ -H "anthropic-version: 2023-06-01" ``` -```json Response +```text Response { "data": [ { @@ -180,7 +180,7 @@ curl --fail-with-body -sS -G \ -H "anthropic-version: 2023-06-01" ``` -```json Response +```text Response wrap { "data": [ { @@ -207,7 +207,7 @@ curl --fail-with-body -sS -G \ -H "anthropic-version: 2023-06-01" ``` -```json Response +```text Response wrap { "data": [ { @@ -243,7 +243,7 @@ curl --fail-with-body -sS \ The response is a list of typed setting rows, and which rows appear varies by organization: a setting the organization's administrators cannot change, because it is controlled by Anthropic policy or not available to the organization, is omitted from the list. Treat a missing row as "not controllable by this organization's administrators", not as "off". The following abridged example shows three of the rows a response can contain: -```json Response +```text Response wrap { "type": "effective_organization_settings", "organization_id": "91012d09-e48b-438e-a489-1bebfd8fa6f9", @@ -287,7 +287,7 @@ The response is a list of typed setting rows, and which rows appear varies by or Each row carries `name`, `type`, and `value`; the `type` field (`boolean`, `integer`, `string_list`, `provisioning_mode`, or `data_retention`) tells you the shape of `value`. The full list of setting names, and the `value` schema for each type, is in [Get effective organization settings](https://platform.claude.com/docs/en/api/compliance/organizations/settings/retrieve) in the API reference. -The `api_keys` array lists every Compliance Access Key configured for your parent organization, so the same list is returned regardless of which linked organization you query. Each entry carries the key's `type` (`compliance_api_key`), `id`, `name`, `scopes`, `is_active` flag, `created_at` and `expires_at` timestamps, and `created_by_id` (the ID of the user who created the key; might be `null`). The key's secret value is never returned. Deactivated keys are included with `is_active: false` so you can review keys that previously had access, and keys that carry only the retired `read:compliance_org_settings` scope remain in the list for audit and cleanup visibility even though that scope no longer grants access. +The `api_keys` array lists every Compliance Access Key configured for your parent organization, so the same list is returned regardless of which linked organization you query. Each entry carries the key's `type` (`compliance_api_key`), `id`, `name`, `scopes`, `is_active` flag, `created_at` and `expires_at` timestamps, and `created_by_id` (the ID of the user who created the key, or `null`). The key's secret value is never returned. Deactivated keys are included with `is_active: false` so you can review keys that previously had access, and keys that carry only the retired `read:compliance_org_settings` scope remain in the list for audit and cleanup visibility even though that scope no longer grants access. The top-level `organization_id` is the organization's bare UUID: the same value as `uuid` in the organizations list, not the `org_`-prefixed form that `organization_id` carries on Activity Feed, chat, and project records (see the [organization identifier table](https://platform.claude.com/docs/en/manage-claude/compliance-org-data#list-organizations)). diff --git a/content/en/manage-claude/compliance-sessions.md b/content/en/manage-claude/compliance-sessions.md index 329f3d2c5c..63ff418a5f 100644 --- a/content/en/manage-claude/compliance-sessions.md +++ b/content/en/manage-claude/compliance-sessions.md @@ -77,7 +77,7 @@ curl --fail-with-body -sS -G \ --data-urlencode "limit=100" ``` -```json Response +```text Response wrap { "data": [ { @@ -164,7 +164,7 @@ curl --fail-with-body -sS \ -H "anthropic-version: 2023-06-01" ``` -```json Response +```text Response { "session": { "type": "compliance_local_session", @@ -316,7 +316,7 @@ curl --fail-with-body -sS -G \ --data-urlencode "limit=100" ``` -```json Response +```text Response wrap { "data": [ { @@ -381,7 +381,7 @@ curl --fail-with-body -sS \ -H "anthropic-version: 2023-06-01" ``` -```json Response +```text Response { "session": { "id": "cse_01WpQrStUvXyZaBcDeFgHjK6", diff --git a/content/en/manage-claude/data-residency.md b/content/en/manage-claude/data-residency.md index 0d528467aa..b27350ff05 100644 --- a/content/en/manage-claude/data-residency.md +++ b/content/en/manage-claude/data-residency.md @@ -7,7 +7,7 @@ description: Manage where model inference runs and where data is stored with geo Data residency controls let you manage where your data is processed and stored. Two independent settings govern this: * **Inference geo:** Controls where model inference runs, on a per-request basis. Set through the `inference_geo` API parameter or as a workspace default. -* **Workspace geo:** Controls where data is stored at rest and where endpoint processing (such as image transcoding and code execution) occurs. Configured at the workspace level in the [Claude Console](https://platform.claude.com). +* **Workspace geo:** Controls where data is stored at rest and where endpoint processing (such as image transcoding and code execution) occurs. Configured at the workspace level in the [Claude Console](https://platform.claude.com/). [Claude Managed Agents](https://platform.claude.com/docs/en/managed-agents/overview) supports geographic pinning at the agent level: `inference_geo` on an [agent's model configuration](https://platform.claude.com/docs/en/managed-agents/agent-setup#pin-the-inference-geo) pins the geography that serves model requests for sessions running that agent, with [per-session overrides](https://platform.claude.com/docs/en/managed-agents/sessions#pin-the-inference-geo-for-a-session) at session create. Agents without a pin follow the workspace's default inference geo on each request. Managed Agents also respects the Workspace geo configured in Console, and with [self-hosted sandboxes](https://platform.claude.com/docs/en/managed-agents/self-hosted-sandboxes), tool execution and the sandbox filesystem stay on infrastructure you control; the contents of attached [memory stores](https://platform.claude.com/docs/en/managed-agents/self-hosted-sandboxes-memory) remain stored by Anthropic and are copied to your sandbox for the session. @@ -188,7 +188,7 @@ The `inference_geo` parameter controls where model inference runs for a specific client = Anthropic::Client.new response = client.messages.create( - model: "claude-opus-5-5", + model: Anthropic::Model::CLAUDE_OPUS_5_5, max_tokens: 1024, inference_geo: "us", messages: [ @@ -208,7 +208,7 @@ The `inference_geo` parameter controls where model inference runs for a specific The response `usage` object includes an `inference_geo` field indicating where inference ran: -```json Output +```text Output wrap { "usage": { "input_tokens": 25, @@ -239,9 +239,9 @@ These settings can be configured through the Console or the [Admin API](https:// Workspace geo is set when you create a workspace and can't be changed afterward. Currently, `"us"` is the only available workspace geo. -To set workspace geo, create a new workspace in the [Console](https://platform.claude.com): +To set workspace geo, create a new workspace in the [Console](https://platform.claude.com/): -1. In the Console, go to the [Workspaces](https://platform.claude.com/settings/workspaces) page (`platform.claude.com/settings/workspaces`). +1. Go to [Workspaces in the Claude Console](https://platform.claude.com/settings/workspaces) (`platform.claude.com/settings/workspaces`). 2. Click **Create workspace** to open the [Create workspace](https://platform.claude.com/settings/workspaces/new) page (`platform.claude.com/settings/workspaces/new`) in the Console. 3. Enter a name, confirm the value in the **Workspace geo** field, and click **Create workspace**. @@ -307,7 +307,7 @@ Legacy models are unaffected by this migration. For current pricing on newer mod ## Next steps - + View data residency pricing details. diff --git a/content/en/manage-claude/inference-hooks-endpoint.md b/content/en/manage-claude/inference-hooks-endpoint.md index 65839f62a1..3ebb2dd949 100644 --- a/content/en/manage-claude/inference-hooks-endpoint.md +++ b/content/en/manage-claude/inference-hooks-endpoint.md @@ -258,7 +258,7 @@ Where `session_id` is set, it is the same on both frames. The tool call frame ha `tool_info` says who runs or provides the tool, not what the tool can reach. It is one of four kinds, told apart by its `type` field, and each kind carries its own fields. Anthropic sends the first of the following kinds that fits the tool. New kinds may appear: accept a `type` you don't recognize, and for such a kind rely only on `type`. -An optional field that doesn't apply is left out, never `null`, so a `tool_info` can be just `{"type": "client"}`. `tool_name` is chosen by whoever defined the tool, and a server's `toolset_name` by whoever wrote the request, so don't treat either as a trust boundary. +An optional field that doesn't apply is left out, never `null`, so a `tool_info` can be just `{"type": "client"}`. `tool_name` is chosen by whoever defined the tool, and a server's `toolset_name` by whoever wrote the request or named the connector. Don't treat either as a trust boundary. ### Platform tools @@ -301,12 +301,12 @@ claude.ai doesn't always name this tool `web_search`, so don't match on the name A third-party tool is one on a server that Anthropic knows of, such as a claude.ai connector or an MCP server that the request names in `mcp_servers`. This doesn't mean Anthropic has vetted the server. In voice mode, a call to a claude.ai connector's tool is `"client"` instead. -| Field | Present | Description | -| ----------------- | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `type` | Always | `"third_party"` | -| `toolset_name` | Optional | The name the request gives the server. | -| `origin` | Optional | The scheme, host, and non-default port of the server's URL. It can be a private or local address, `localhost` included. An absent `origin` means unknown, not safe. | -| `verified_origin` | Whenever `origin` is | `true` only when Anthropic's servers connect to the server themselves. Treat `false` as an origin that Anthropic hasn't confirmed. | +| Field | Present | Description | +| ----------------- | -------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `type` | Always | `"third_party"` | +| `toolset_name` | Optional | For a server in `mcp_servers`, the name the request gives the server. For any other server, such as a claude.ai connector, the server's name, copied from `tool_name`. | +| `origin` | Optional | The scheme, host, and non-default port of the server's URL. It can be a private or local address, `localhost` included. An absent `origin` means unknown, not safe. | +| `verified_origin` | Whenever `origin` is | `true` only when Anthropic's servers connect to the server themselves. Treat `false` as an origin that Anthropic hasn't confirmed. | A `tool_use` block for a tool on an MCP server that the request names `crm` in `mcp_servers`: @@ -327,6 +327,29 @@ A `tool_use` block for a tool on an MCP server that the request names `crm` in ` } ``` +A `tool_use` block for a tool on a Gmail connector, called in a claude.ai chat: + +```json +{ + "type": "tool_use", + "id": "toolu_01DeFgHiJkLmNoPqRsTuVwXy", + "tool_name": "mcp__Gmail__search_threads", + "input": { + "query": "from:cfo@example.com newer_than:30d" + }, + "tool_info": { + "type": "third_party", + "toolset_name": "Gmail", + "origin": "https://gmail.mcp.example.com", + "verified_origin": false + } +} +``` + +For a claude.ai connector, `verified_origin` can be `false` even when Anthropic's servers connect to the server themselves. + +A name copied from `tool_name` can differ from the name the user sees: `mcp__Google_Drive__search_files` gives `Google_Drive`, not `Google Drive`. It can also end in a short suffix (`Gmail-1a2b3c4d`), for example when another of the user's connectors has the same name. The name isn't a stable identifier and doesn't prove which server the tool is on. When `tool_name` has no server name in it, `toolset_name` is left out. + ### Client tools A client tool is any other tool, usually one that the application calling Claude runs. A tool that Anthropic defines but the calling application runs, such as bash or computer use, is a client tool too, and carries its versioned type in `tool_type`. A call to a tool the request doesn't declare is also `"client"`. diff --git a/content/en/manage-claude/opentelemetry/sdk.md b/content/en/manage-claude/opentelemetry/sdk.md index c61b2d9a8c..1830a0961a 100644 --- a/content/en/manage-claude/opentelemetry/sdk.md +++ b/content/en/manage-claude/opentelemetry/sdk.md @@ -84,14 +84,14 @@ Install or upgrade to the latest version of the Claude SDK: ```kotlin Gradle - implementation("com.anthropic:anthropic-java:3.0.0") + implementation("com.anthropic:anthropic-java:3.1.0") ``` ```xml Maven com.anthropic anthropic-java - 3.0.0 + 3.1.0 ``` diff --git a/content/en/manage-claude/organization-webhooks.md b/content/en/manage-claude/organization-webhooks.md index 6ca174913d..e7573e6ab1 100644 --- a/content/en/manage-claude/organization-webhooks.md +++ b/content/en/manage-claude/organization-webhooks.md @@ -85,7 +85,7 @@ An organization webhook endpoint has these fields: | `updated_at` | string | When the endpoint last changed. Set by Anthropic. | | `signing_secret` | string | A `whsec_`-prefixed secret, created with the endpoint. Only the responses that create the endpoint or replace the secret include it, so store it securely. | -```json +```text wrap { "id": "wep_011CZkZDf8HnUq2mTxRbVn4s", "url": "https://example.com/anthropic-webhooks", @@ -232,7 +232,7 @@ Send the `anthropic-beta: webhooks-2026-10-07` header with every request. The SD With no endpoints, the API returns an empty list: -```json +```text wrap { "data": [], "has_more": false diff --git a/content/en/manage-claude/plugins-api.md b/content/en/manage-claude/plugins-api.md index 5e37251ae5..77b15dba14 100644 --- a/content/en/manage-claude/plugins-api.md +++ b/content/en/manage-claude/plugins-api.md @@ -37,7 +37,7 @@ This release does not include standalone skills (skills a member writes in the s ## Prerequisites * Your organization must be on a Claude Enterprise plan. -* Your primary owner creates an Admin API key with the `read:plugins` scope, the `write:plugins` scope, or both in [claude.ai > Organization settings > API](https://claude.ai/admin-settings/api-access). See [Create an Admin API key](https://platform.claude.com/docs/en/manage-claude/admin-api-keys#create-a-key-for-a-claude-enterprise-organization). +* Your primary owner creates an Admin API key with the `read:plugins` scope, the `write:plugins` scope, or both in [claude.ai > Organization settings > API](https://claude.ai/admin-settings/api-access). See [Create a key for a Claude Enterprise organization](https://platform.claude.com/docs/en/manage-claude/admin-api-keys#create-a-key-for-a-claude-enterprise-organization). * Every request carries three headers: `x-api-key`, `anthropic-version: 2023-06-01`, and `anthropic-beta: ce-plugins-2026-09-01`. The SDK exposes these endpoints under `client.beta.organization` (csharp, go: `client.Beta.Organization`; java: `client.beta().organization()`; php: `$client->beta->organization`), and the [`ant` CLI](https://platform.claude.com/docs/en/cli-sdks-libraries/cli/quickstart) under `ant beta:organization`; they send the `anthropic-version` and `anthropic-beta` headers for you. The examples on this page use the SDK's default client, which, like the CLI, reads the Admin API key from the `ANTHROPIC_API_KEY` environment variable; the curl examples read the key from the same variable and pass it in the `x-api-key` header. Where an SDK or the CLI fetches more pages for you, `limit` sets the page size, not the total (see [Pagination](https://platform.claude.com/docs/en/manage-claude/plugins-api#pagination)). @@ -161,7 +161,7 @@ List the plugins in your organization's own marketplaces, newest first: ``` -```json +```text { "data": [ { @@ -216,7 +216,7 @@ Each of these read scopes (`read:plugins`, `read:org_audit`, and `read:complianc ### Reading another organization under the same parent -`read:plugins` and `write:plugins` keys read and write only the organization they were created in. If your company has several Claude organizations linked under one parent organization, a `read:org_audit` or `read:compliance_org_data` key that the parent's primary owner created for all linked organizations (see [Create an Admin API key](https://platform.claude.com/docs/en/manage-claude/admin-api-keys#create-a-key-for-a-claude-enterprise-organization)) can also read any of them that has access to this API: pass that organization's ID in the `organization_id` query parameter on any `GET` endpoint on this page. The ID is the organization UUID shown in claude.ai's settings (its `org_`-prefixed form is accepted too). Without the parameter, the key reads the organization it was created in. A `404` means the named organization is not under the key's parent or the API is not available to it; a value that is not a UUID or `org_` ID returns `400`. Any other key that names an organization other than its own gets `404`. Writes do not accept `organization_id`. +`read:plugins` and `write:plugins` keys read and write only the organization they were created in. If your company has several Claude organizations linked under one parent organization, a `read:org_audit` or `read:compliance_org_data` key that the parent's primary owner created for all linked organizations (see [Create a key for a Claude Enterprise organization](https://platform.claude.com/docs/en/manage-claude/admin-api-keys#create-a-key-for-a-claude-enterprise-organization)) can also read any of them that has access to this API: pass that organization's ID in the `organization_id` query parameter on any `GET` endpoint on this page. The ID is the organization UUID shown in claude.ai's settings (its `org_`-prefixed form is accepted too). Without the parameter, the key reads the organization it was created in. A `404` means the named organization is not under the key's parent or the API is not available to it; a value that is not a UUID or `org_` ID returns `400`. Any other key that names an organization other than its own gets `404`. Writes do not accept `organization_id`. ## Key concepts @@ -260,11 +260,11 @@ Every upload creates a new, immutable **version**, whether it comes from this AP * `latest_version_id`: the newest version * `served_version_id`: the version members are served -By default `served_version_pinned` is `false`: the served version normally follows the newest one. When content scanning is on, a version saved in claude.ai might **wait** for its content scan: it is stored but not served at once. This page uses "wait" only for a version saved in claude.ai, not for one that a member or an administrator publishes into a plugin. While scanning is on, a waiting version is served only after its scan completes with `pass` or `warn`. While a version waits, `served_version_id` names an earlier version than `latest_version_id`. Do not poll until the two IDs match: they might stay different, for example when the scan fails. +By default `served_version_pinned` is `false`: the served version normally follows the newest one. When content scanning is on, a version saved in claude.ai might **wait** for its content scan: it is stored but not served at once. This page uses "wait" only for a version saved in claude.ai, not for one that a member or an administrator publishes into a plugin. While scanning is on, a waiting version is served only when its `content_scan` reads `completed` with `pass` or `warn`. While a version waits, `served_version_id` names an earlier version than `latest_version_id`. Do not poll until the two IDs match: they might stay different, for example when the scan fails. Choosing a version with `POST /v1/organizations/plugins/{plugin_id}` **pins** the plugin (`served_version_pinned: true`). So does an administrator choosing a version in claude.ai, or accepting a member's request to publish into the plugin. From then on, new uploads are stored and advance `latest_version_id`, but members keep the pinned version until you point `served_version_id` at another one. A plugin whose two pointers differ has a stored version that is not being served. -This lets a release pipeline upload each build, test it, and then promote it. To have your pipeline determine when each build is served, pin the plugin once by setting `served_version_id` to its current version; from then on, promote each build you want served. With content scanning on, that first pin returns `409 scan_pending` until the current version's scan completes, and `400 scan_failed` if the scan completed with `fail` or `unknown`, or errored (`warn` is accepted). A pinned plugin cannot currently be unpinned, here or in claude.ai. +This lets a release pipeline upload each build, test it, and then promote it. To have your pipeline determine when each build is served, pin the plugin once by setting `served_version_id` to its current version; from then on, promote each build you want served. With content scanning on, that first pin returns `409 scan_pending` until the current version's scan completes, and `400 scan_failed` if the scan reads `fail` or `unknown`, or errored (`warn` is accepted). A pinned plugin cannot currently be unpinned, here or in claude.ai. To roll back, set `served_version_id` to an earlier version. Roll forward the same way. @@ -281,7 +281,7 @@ These rules describe organization-owned plugins. A member-owned plugin's served | `available` | The plugin can be installed on request. | | `not_available` | The plugin is hidden. | -A plugin can hold an organization-wide setting and one setting for each group (the role-based access control groups managed in [User management](https://platform.claude.com/docs/en/manage-claude/user-management#groups)). A member gets a value by these rules: +A plugin can hold an organization-wide setting and one setting for each group (the role-based access control [groups managed in User management](https://platform.claude.com/docs/en/manage-claude/user-management#groups)). A member gets a value by these rules: 1. The organization-wide value is the plugin's own organization-wide setting if it has one, otherwise its marketplace's default, otherwise `not_available`. The plugin reports this value in `organization_installation_preference`, with `organization_installation_preference_inherited: true` while it comes from the marketplace default. 2. A member who belongs to no group holding a setting for the plugin gets the organization-wide value. @@ -301,13 +301,17 @@ If your organization has turned off a kind of sharing in its claude.ai settings, Content scanning is an organization setting in claude.ai. When it is on, newly stored versions are scanned (claude.ai exempts a few) and the result is reported in `content_scan`; a version that was not scanned, for example one stored before scanning was turned on, has `content_scan: null`. Scanning is not offered to organizations that use customer-managed encryption keys or zero data retention. -While scanning is on, members are served a plugin only when its served version's scan is `completed` with `pass` or `warn`. While the scan runs, or after it fails, errors, or reaches no verdict, the plugin is withheld from members, and an earlier version is not served in its place. A version that was never scanned (`content_scan: null`) is served normally. +While scanning is on, members are served a plugin only when its served version's scan is `completed` with `pass` or `warn`. While the scan is `processing` or `errored`, or reads `fail` or `unknown`, the plugin is withheld from members, and an earlier version is not served in its place. A version that was never scanned (`content_scan: null`) is served normally. -A version you upload through this API never waits for its content scan. When it becomes the served version, members lose the plugin until its scan completes with `pass` or `warn`. If members should keep the current version while a new one is scanned, pin the plugin first (see [Versions and the served version](https://platform.claude.com/docs/en/manage-claude/plugins-api#versions-and-the-served-version)). +A version you upload through this API never waits for its content scan. When it becomes the served version, members lose the plugin until its `content_scan` reads `completed` with `pass` or `warn`. If members should keep the current version while a new one is scanned, pin the plugin first (see [Versions and the served version](https://platform.claude.com/docs/en/manage-claude/plugins-api#versions-and-the-served-version)). While a version saved in claude.ai waits for its scan, the served version does not change. When your API upload becomes the served version, any wait ends: the waiting version is served only if someone chooses it. To see a waiting version's scan, read the version (see [List a plugin's versions](https://platform.claude.com/docs/en/manage-claude/plugins-api#list-a-plugins-versions)). -After an upload, `content_scan.status` is `processing` and the verdict arrives asynchronously. Read the version to see it; the plugin object shows only its served version's scan. Changing the served version to a version whose scan is still running returns `409 scan_pending`; to one whose scan failed, `400 scan_failed`. +After an upload, `content_scan.status` is `processing` and the verdict arrives asynchronously. Read the version to see it; the plugin object shows only its served version's scan. While scanning is on, changing the served version to a version whose scan is still running returns `409 scan_pending`, and changing it to one whose scan reads `fail` or `unknown`, or errored, returns `400 scan_failed`. + +#### Failed scans an administrator allowed + +In claude.ai, an administrator can allow a version whose scan failed. This API can then report that scan as `completed` with `warn` and the failed scan's `reason`. While it does, the rules for `warn` apply: the version can be served to members, and you can make it the served version. Nothing in the response shows that it was allowed, so a `warn` is either a warning or a failed scan that an administrator allowed. Allowing a version whose scan reads `warn` does not change its `content_scan`. When a version stops being allowed, this API reports the verdict of its newest completed scan, and a served version whose scan reads `fail` or `unknown` is withheld from members. ### Reach @@ -352,7 +356,7 @@ Upload every tagged build from CI, and let the pipeline determine when a build i ### Roll a plugin out to a pilot group, then to everyone -1. Look up the pilot group's ID with `GET /v1/organizations/rbac_groups`. That call needs the `read:rbac_groups` scope, which requires a key created for all linked organizations (see [User management](https://platform.claude.com/docs/en/manage-claude/user-management#groups)). The next steps need `write:plugins`, which acts only on the organization its key was created in, so in an enterprise with several linked organizations, create this key in the organization that holds the plugin and give it both scopes, or use a second key created there for those steps. +1. Look up the pilot group's ID with `GET /v1/organizations/rbac_groups`. That call needs the `read:rbac_groups` scope, which requires a key created for all linked organizations (see [Groups in User management](https://platform.claude.com/docs/en/manage-claude/user-management#groups)). The next steps need `write:plugins`, which acts only on the organization its key was created in, so in an enterprise with several linked organizations, create this key in the organization that holds the plugin and give it both scopes, or use a second key created there for those steps. 2. [Give the group its own setting](https://platform.claude.com/docs/en/manage-claude/plugins-api#set-an-installation-setting), for example `auto_install`, with `POST /v1/organizations/plugins/{plugin_id}/installation_settings/{target}`, where `{target}` is the group's `rbac_group_` ID, while the organization-wide value stays `not_available`. Only the group's members get the plugin. @@ -493,10 +497,10 @@ Upload every tagged build from CI, and let the pipeline determine when a build i ### Keep a security inventory in sync -Run a nightly job that flags plugins reaching outside the member's session or failing their content scan. +Run a nightly job that flags plugins that reach outside the member's session or whose content scan reads `warn`, `fail`, or `unknown`. -1. Page through [`GET /v1/organizations/plugins?limit=100`](https://platform.claude.com/docs/en/manage-claude/plugins-api#list-plugins) until `next_page` is `null` (see [Pagination](https://platform.claude.com/docs/en/manage-claude/plugins-api#pagination)). Read each plugin's `reach` and `content_scan` from that list on every run: a scan verdict that arrives later does not move `updated_at`. `updated_at` normally tells you which plugins have new content or a new served version since the last run (worth a fresh archive download). A waiting version (see [Versions and the served version](https://platform.claude.com/docs/en/manage-claude/plugins-api#versions-and-the-served-version)) moves `updated_at` when it becomes the served version, not necessarily when it is stored. To notice one, compare `latest_version_id` with the value from your last run. The full re-list is also what catches removals, because a plugin removed by a Git synchronization or an account deletion disappears without an event. -2. Flag each plugin whose `reach` is `remote` (it declares an MCP server or a CLI), or whose `content_scan.assessment` is `fail` or `unknown`. These fields describe the served version. To also check a newer version that is not served, list the plugin's versions when `latest_version_id` differs from `served_version_id` (see [List a plugin's versions](https://platform.claude.com/docs/en/manage-claude/plugins-api#list-a-plugins-versions)). +1. Page through [`GET /v1/organizations/plugins?limit=100`](https://platform.claude.com/docs/en/manage-claude/plugins-api#list-plugins) until `next_page` is `null` (see [Pagination](https://platform.claude.com/docs/en/manage-claude/plugins-api#pagination)). Read each plugin's `reach` and `content_scan` from that list on every run: a change to `content_scan` alone, such as a verdict that arrives later, does not move `updated_at`. `updated_at` normally tells you which plugins have new content or a new served version since the last run (worth a fresh archive download). A waiting version (see [Versions and the served version](https://platform.claude.com/docs/en/manage-claude/plugins-api#versions-and-the-served-version)) moves `updated_at` when it becomes the served version, not necessarily when it is stored. To notice one, compare `latest_version_id` with the value from your last run. The full re-list is also what catches removals, because a plugin removed by a Git synchronization or an account deletion disappears without an event. +2. Flag each plugin whose `reach` is `remote` (it declares an MCP server or a CLI), or whose `content_scan.assessment` is `warn`, `fail`, or `unknown`. A `warn` can also be a failed scan that an administrator allowed (see [Failed scans an administrator allowed](https://platform.claude.com/docs/en/manage-claude/plugins-api#failed-scans-an-administrator-allowed)); leave `warn` out only if you accept every failed scan that an administrator allows. These fields describe the served version. To also check a newer version that is not served, list the plugin's versions when `latest_version_id` differs from `served_version_id` (see [List a plugin's versions](https://platform.claude.com/docs/en/manage-claude/plugins-api#list-a-plugins-versions)). 3. For each flagged plugin, download the served version's archive for review with `GET /v1/organizations/plugins/{plugin_id}/versions/{served_version_id}/content` (see [Download a version's files](https://platform.claude.com/docs/en/manage-claude/plugins-api#download-a-versions-files)). Also download any unserved version that meets step 2's test, by its ID. 4. To take a plugin away from members while you review it, see [Delete a plugin](https://platform.claude.com/docs/en/manage-claude/plugins-api#delete-a-plugin) for the reversible (organization-owned) and permanent options. @@ -518,15 +522,15 @@ The plugin object describes a plugin in one of your organization's marketplaces | `content_scan` | The served version's scan result, an object with `status`, `assessment`, and `reason` (described after this table). `null` when it was never scanned. | | `components` | The served version's components, each `{"type", "name", "description"}` with `type` one of `skill`, `mcp_server`, `command`, `agent`, `hook`, or `cli`, listed in that type order and then by name. For an MCP server, `name` is its key in the manifest; for a hook, the event it runs on; for a CLI, the executable's name. `description` is always `null` for MCP servers, hooks, and CLIs. `null` when not recorded. | | `reach` | `contained`, `privileged`, or `remote`. See [Reach](https://platform.claude.com/docs/en/manage-claude/plugins-api#reach). | -| `updated_at` | Changes when the served version changes, when the plugin becomes pinned, and normally when a new version is stored. A waiting version (see [Versions and the served version](https://platform.claude.com/docs/en/manage-claude/plugins-api#versions-and-the-served-version)) changes it when it becomes the served version, not necessarily when it is stored. It does not change for installation settings, shares, or new scan results. | +| `updated_at` | Changes when the served version changes, when the plugin becomes pinned, and normally when a new version is stored. A waiting version (see [Versions and the served version](https://platform.claude.com/docs/en/manage-claude/plugins-api#versions-and-the-served-version)) changes it when it becomes the served version, not necessarily when it is stored. It does not change for installation settings, shares, or a change to `content_scan` alone. | The `content_scan` object: -| Field | Description | -| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `status` | `processing` while the scan runs, `completed` when it finished, or `errored` when it could not finish (or, occasionally, when its result could not be read for this response, in which case a later read may report it). Members are not served a version whose scan is `processing` or `errored`; uploading the content again as a new version gets a fresh scan. | -| `assessment` | Set when `status` is `completed`: `pass` (nothing found), `warn` (something found that does not block use), `fail` (something found that blocks use), or `unknown` (no verdict). Otherwise `null`. | -| `reason` | For `warn` and `fail`, the main concern, from the following list. Otherwise `null`, and also `null` on an older scan that predates reason recording. | +| Field | Description | +| ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `status` | `processing` while the scan runs, `completed` when it finished, or `errored` when it could not finish (or, occasionally, when its result could not be read for this response, in which case a later read may report it). Members are not served a version whose scan is `processing` or `errored`; uploading the content again as a new version gets a fresh scan. | +| `assessment` | Set when `status` is `completed`: `pass` (nothing found), `warn` (something found that does not block use, or a failed scan that an administrator allowed; see [Failed scans an administrator allowed](https://platform.claude.com/docs/en/manage-claude/plugins-api#failed-scans-an-administrator-allowed)), `fail` (something found that blocks use), or `unknown` (no verdict). Otherwise `null`. | +| `reason` | For `warn` and `fail`, the main concern, from the following list. Otherwise `null`, and also `null` on an older scan that predates reason recording. | | `reason` | Meaning | @@ -805,7 +809,7 @@ Upload an archive: ``` -```json +```text { "type": "plugin", "id": "plugin_01Hq3vX8kZcN2mB7pR4tY9wL", @@ -1252,7 +1256,7 @@ Besides a `400` for an upload that breaks the [upload requirements](https://plat ``` -```json +```text { "type": "plugin", "id": "plugin_01Hq3vX8kZcN2mB7pR4tY9wL", @@ -1389,7 +1393,7 @@ Deletion cannot be undone, and there is no per-version delete. To withhold an or ``` -```json +```text wrap { "type": "plugin_deleted", "id": "plugin_01Hq3vX8kZcN2mB7pR4tY9wL" } ``` @@ -1671,7 +1675,7 @@ A `{version}` that lacks the `pluginver_` prefix returns `400` (except the liter ``` -```json +```text { "type": "plugin_version", "id": "pluginver_01Jd5sK2nQ8wE4rT6yU1iO3p", @@ -1966,7 +1970,7 @@ Downloading a **member-owned** plugin's archive records a `claude_plugin_archive ## Plugin installation settings -These endpoints apply to organization-owned plugins. They return `404` for a member-owned plugin, which has [shares](https://platform.claude.com/docs/en/manage-claude/plugins-api#plugin-shares) instead. `{target}` is the literal `organization` for the plugin's organization-wide setting, or a group's `rbac_group_` ID for that group's setting; any other value returns `400`. Group IDs come from `GET /v1/organizations/rbac_groups` (scope `read:rbac_groups`; see [User management](https://platform.claude.com/docs/en/manage-claude/user-management#groups)). A setting has no `id` of its own: it is addressed by `(plugin_id, target)`, and no actor is recorded on it (the actor is on its `plugin_installation_preference_updated` activity event). +These endpoints apply to organization-owned plugins. They return `404` for a member-owned plugin, which has shares instead (see [Plugin shares](https://platform.claude.com/docs/en/manage-claude/plugins-api#plugin-shares)). `{target}` is the literal `organization` for the plugin's organization-wide setting, or a group's `rbac_group_` ID for that group's setting; any other value returns `400`. Group IDs come from `GET /v1/organizations/rbac_groups` (scope `read:rbac_groups`; see [Groups in User management](https://platform.claude.com/docs/en/manage-claude/user-management#groups)). A setting has no `id` of its own: it is addressed by `(plugin_id, target)`, and no actor is recorded on it (the actor is on its `plugin_installation_preference_updated` activity event). ### List a plugin's installation settings @@ -2214,7 +2218,7 @@ Send a plugin's installation-setting writes one at a time. If several writes for ``` -```json +```text { "type": "plugin_installation_setting", "plugin_id": "plugin_01Hq3vX8kZcN2mB7pR4tY9wL", @@ -2334,7 +2338,7 @@ Send a plugin's installation-setting writes one at a time. If several writes for ``` -```json +```text { "type": "plugin_installation_setting_deleted", "plugin_id": "plugin_01Hq3vX8kZcN2mB7pR4tY9wL", @@ -2450,7 +2454,7 @@ Shares exist only on member-owned plugins and are read-only in this API (see [Sh ``` -```json +```text { "data": [ { @@ -2468,7 +2472,7 @@ Shares exist only on member-owned plugins and are read-only in this API (see [Sh This API reads [marketplaces](https://platform.claude.com/docs/en/manage-claude/plugins-api#marketplaces) and sets an organization marketplace's default installation setting; marketplaces themselves are created, connected to a repository, and deleted in claude.ai. -```json +```text wrap { "type": "plugin_marketplace", "id": "marketplace_01VbNcMxZaSdFgHjKlQwErTy", @@ -2842,7 +2846,7 @@ Two endpoints report what a synchronization of the given marketplace content wou The repository, and any plugin source outside it on GitHub, are read anonymously, so a private repository or private plugin source is reported as not found. Plugin sources on hosts other than GitHub are not fetched; such a plugin normally gets a `marketplace_validate_source_not_checked` warning and is checked when the marketplace actually synchronizes. If the repository is, or the archive names, a marketplace that Anthropic synchronizes into every organization, stricter rules apply: every plugin source outside the marketplace must be pinned to a full commit SHA, unpinned or unsupported-host sources are reported as plugin errors, and the branch read defaults to the one that marketplace synchronizes from. -`validate_repository` takes a JSON body with two fields: `repository_url`, the `https://` URL of a public repository on github.com (required), and `ref`, a branch name or a full 40-character commit SHA (optional; when it is omitted or `null`, the branch a synchronization would read, usually the repository's default branch). `validate_archive` takes `multipart/form-data` with exactly one part, `archive`, sent as a file part with a file name: a `.zip` of the marketplace directory, at most 32 MB, with its contents at the root or wrapped in one folder (as a Git host's download produces), DEFLATE or STORE compression only. No other form field is accepted. +`validate_repository` takes a JSON body with two fields: `repository_url`, the `https://` URL of a public repository on github.com (required), and `ref`, a branch name or a full 40-character commit SHA (optional). When `ref` is omitted or `null`, it defaults to the branch a synchronization would read, usually the repository's default branch. `validate_archive` takes `multipart/form-data` with exactly one part, `archive`, sent as a file part with a file name: a `.zip` of the marketplace directory, at most 32 MB, with its contents at the root or wrapped in one folder (as a Git host's download produces), DEFLATE or STORE compression only. No other form field is accepted. Validate a public repository at a branch: @@ -2961,7 +2965,7 @@ Validate a public repository at a branch: ``` -```json +```text wrap { "type": "plugin_marketplace_validation_report", "valid": false, @@ -3163,7 +3167,7 @@ Error responses follow the standard shape documented in [Claude API errors](http When one status has several causes that you would handle differently, the error also carries `error.details.error_code`, and `error.details.plugin_id` or `error.details.plugin_version_id` when the cause involves one: -```json +```text wrap { "type": "error", "error": { @@ -3184,8 +3188,9 @@ When one status has several causes that you would handle differently, the error | `skill_name_taken` | 409 | The plugin is in the library marketplace and one of its skills has the same name as an organization skill (a skill an administrator uploaded for the whole organization in claude.ai). `details.skill_name` names it. Rename or remove one of them. | | `registration_pending` | 503 | The files were stored, but the plugin's skills could not yet be made available to members. See [Retrying uploads](https://platform.claude.com/docs/en/manage-claude/plugins-api#retrying-uploads). | | `scan_pending` | 409 | The version's content scan is still running. Retry once it finishes. | -| `scan_failed` | 400 | The version's content scan failed, errored, or reached no verdict, so it cannot be served. Choose another version. | +| `scan_failed` | 400 | The version's content scan reads `fail` or `unknown`, or errored, so it cannot be served. Choose another version. | | `cmek_key_disabled`, `cmek_key_network_blocked` | 400 | Your organization's customer-managed encryption key is unavailable. See [Customer-managed encryption keys](https://platform.claude.com/docs/en/manage-claude/plugins-api#customer-managed-encryption-keys). | +| `unsupported_charset` | 400 | On an upload or `validate_archive`, the request's `Content-Type` header names a charset other than UTF-8, ISO-8859-1, or US-ASCII. Send the request with no charset, or with one of these. | New codes may be added. Treat a code you do not recognize the way you treat its status. diff --git a/content/en/manage-claude/rate-limits-api.md b/content/en/manage-claude/rate-limits-api.md index e75ab72e40..18f25570a1 100644 --- a/content/en/manage-claude/rate-limits-api.md +++ b/content/en/manage-claude/rate-limits-api.md @@ -493,7 +493,7 @@ By default, the response only includes overrides, so anything missing from it is For complete parameter details and response schemas, see the [Workspace Rate Limits API reference](https://platform.claude.com/docs/en/api/organization/workspaces/rate_limits/list). - To retrieve your organization's workspace IDs, use the [List Workspaces](https://platform.claude.com/docs/en/api/organization/workspaces/list) endpoint, or find them on the [Workspaces](https://platform.claude.com/settings/workspaces) page in the Claude Console. List Workspaces includes the default workspace only when you pass `include_default=true`. + To retrieve your organization's workspace IDs, use the [List Workspaces](https://platform.claude.com/docs/en/api/organization/workspaces/list) endpoint, or find them under [Workspaces in the Claude Console](https://platform.claude.com/settings/workspaces). List Workspaces includes the default workspace only when you pass `include_default=true`. diff --git a/content/en/manage-claude/spend-limits-api.md b/content/en/manage-claude/spend-limits-api.md index 1f9edd0952..6eb1052526 100644 --- a/content/en/manage-claude/spend-limits-api.md +++ b/content/en/manage-claude/spend-limits-api.md @@ -372,7 +372,7 @@ For complete parameter details and response schemas, see [List effective spend l ``` -```json +```text wrap { "data": [ { @@ -511,7 +511,10 @@ For complete parameter details and response schemas, see [Create a spend limit]( -H "content-type: application/json" \ -H "x-api-key: $ANTHROPIC_API_KEY" \ -H "anthropic-version: 2023-06-01" \ - -d '{"scope": {"type": "user", "user_id": "user_01AbCdEfGh"}, "amount": "75000"}' + -d '{ + "scope": {"type": "user", "user_id": "user_01AbCdEfGh"}, + "amount": "75000" + }' ``` ```bash CLI @@ -622,7 +625,7 @@ For complete parameter details and response schemas, see [Create a spend limit]( ``` -```json +```text wrap { "type": "spend_limit", "id": "spl_01RsTuVwXyZaBcDeFgHiJk", @@ -2016,7 +2019,11 @@ Give an incident responder room to work while an incident is open: raise their s -H "content-type: application/json" \ -H "x-api-key: $ANTHROPIC_API_KEY" \ -H "anthropic-version: 2023-06-01" \ - -d '{"scope": {"type": "user", "user_id": "user_01AbCdEfGh"}, "amount": "500000", "period": "monthly"}' + -d '{ + "scope": {"type": "user", "user_id": "user_01AbCdEfGh"}, + "amount": "500000", + "period": "monthly" + }' ``` ```bash CLI diff --git a/content/en/manage-claude/usage-cost-api.md b/content/en/manage-claude/usage-cost-api.md index b25f76b489..a6c2f5bc24 100644 --- a/content/en/manage-claude/usage-cost-api.md +++ b/content/en/manage-claude/usage-cost-api.md @@ -102,10 +102,10 @@ Track token consumption across your organization with detailed breakdowns by mod ### Key concepts -* **Time buckets:** Aggregate usage data in fixed intervals (`1m`, `1h`, or `1d`) -* **Token tracking:** Measure uncached input, cached input, cache creation, and output tokens -* **Filtering & grouping:** Filter by API key, workspace, model, service tier, context window, [data residency](https://platform.claude.com/docs/en/manage-claude/data-residency), or speed, and group results by these dimensions -* **Server tool usage:** Track usage of server-side tools such as web search +* **Time buckets:** Aggregate usage data in fixed intervals (`1m`, `1h`, or `1d`). +* **Token tracking:** Measure uncached input, cached input, cache creation, and output tokens. +* **Filtering & grouping:** Filter by API key, workspace, model, service tier, context window, [data residency](https://platform.claude.com/docs/en/manage-claude/data-residency), or speed, and group results by these dimensions. +* **Server tool usage:** Track usage of server-side tools such as web search. For complete parameter details and response schemas, see the [Usage API reference](https://platform.claude.com/docs/en/api/beta/organization/usage_report/retrieve_messages). @@ -232,10 +232,10 @@ Retrieve service-level cost breakdowns in USD with the `/v1/organizations/cost_r ### Key concepts -* **Currency:** All costs in USD, reported as decimal strings in lowest units (cents) -* **Cost types:** Track token usage, web search, and code execution costs -* **Grouping:** Group costs by workspace or description for detailed breakdowns. When grouping by `description`, responses include parsed fields such as `model` and `inference_geo` -* **Time buckets:** Daily granularity only (`1d`) +* **Currency:** All costs are in USD, reported as decimal strings in lowest units (cents). +* **Cost types:** Track token usage, web search, and code execution costs. +* **Grouping:** Group costs by workspace or description for detailed breakdowns. When grouping by `description`, responses include parsed fields such as `model` and `inference_geo`. +* **Time buckets:** Only daily granularity (`1d`) is available. For complete parameter details and response schemas, see the [Cost API reference](https://platform.claude.com/docs/en/api/beta/organization/cost_report/retrieve). diff --git a/content/en/manage-claude/user-management.md b/content/en/manage-claude/user-management.md index e5fef6f87b..915b71dbe2 100644 --- a/content/en/manage-claude/user-management.md +++ b/content/en/manage-claude/user-management.md @@ -147,7 +147,7 @@ List the organization's members, newest first: ``` -```json +```text wrap { "data": [ { @@ -604,7 +604,7 @@ For complete parameter details and response schemas, see [Remove user](https://p ``` -```json +```text wrap { "type": "user_deleted", "id": "user_01AbCdEfGhIjKlMnOpQrSt" @@ -764,7 +764,7 @@ For complete parameter details and response schemas, see [Create invite](https:/ ``` -```json +```text wrap { "type": "invite", "id": "invite_01QrStUvWxYzAbCdEfGhIj", @@ -1161,7 +1161,7 @@ For complete parameter details and response schemas, see [List groups](https://p ``` -```json +```text wrap { "data": [ { @@ -1380,7 +1380,7 @@ For complete parameter details and response schemas, see [Create group](https:// ``` -```json +```text wrap { "type": "rbac_group", "id": "rbac_group_01UvWxYzAbCdEfGhIjKlMn", @@ -1595,7 +1595,7 @@ For complete parameter details and response schemas, see [Delete group](https:// ``` -```json +```text wrap { "id": "rbac_group_01UvWxYzAbCdEfGhIjKlMn", "type": "rbac_group_deleted" @@ -1722,7 +1722,7 @@ For complete parameter details and response schemas, see [List group members](ht ``` -```json +```text wrap { "data": [ { @@ -1856,7 +1856,7 @@ For complete parameter details and response schemas, see [Add group member](http ``` -```json +```text wrap { "type": "rbac_group_member", "rbac_group_id": "rbac_group_01UvWxYzAbCdEfGhIjKlMn", @@ -1975,7 +1975,7 @@ For complete parameter details and response schemas, see [Remove group member](h ``` -```json +```text wrap { "rbac_group_id": "rbac_group_01UvWxYzAbCdEfGhIjKlMn", "group_id": "rbac_group_01UvWxYzAbCdEfGhIjKlMn", @@ -2091,7 +2091,7 @@ For complete parameter details and response schemas, see [List roles](https://pl ``` -```json +```text wrap { "data": [ { @@ -2321,7 +2321,7 @@ For complete parameter details and response schemas, see [List role permissions] ``` -```json +```text wrap { "data": [ { @@ -2474,7 +2474,7 @@ No. The API assigns only `user` and `managed`, on invite creation and role updat ### Can I create or modify groups through the API? -Yes, with the `write:rbac_groups` scope: create, rename, and delete groups, and add or remove their members. Two things the API cannot change: groups provisioned by your identity provider (`source_type: "scim"`), whose name and membership are owned by the identity provider, and custom roles, which are managed in claude.ai organization settings (the API [reads them](https://platform.claude.com/docs/en/manage-claude/user-management#custom-roles)). +Yes, with the `write:rbac_groups` scope: create, rename, and delete groups, and add or remove their members. Two things the API cannot change: groups provisioned by your identity provider (`source_type: "scim"`), whose name and membership are owned by the identity provider, and [custom roles](https://platform.claude.com/docs/en/manage-claude/user-management#custom-roles), which are managed in claude.ai organization settings (the API reads them). ### Does an unaccepted invite consume a seat? diff --git a/content/en/manage-claude/user-profiles-verification-portal.md b/content/en/manage-claude/user-profiles-verification-portal.md index 99e2f24d9b..456bec56d6 100644 --- a/content/en/manage-claude/user-profiles-verification-portal.md +++ b/content/en/manage-claude/user-profiles-verification-portal.md @@ -127,7 +127,7 @@ The call returns a `404` if creating enrollment links isn't enabled for your org The response contains the link and the time it stops working: -```json +```text wrap { "type": "user_profile_action_url", "url": "https://portal.anthropic.com/enroll?enrollment_token=...", diff --git a/content/en/manage-claude/user-profiles.md b/content/en/manage-claude/user-profiles.md index d2cf6268f6..27f750efab 100644 --- a/content/en/manage-claude/user-profiles.md +++ b/content/en/manage-claude/user-profiles.md @@ -181,7 +181,7 @@ The following example registers a company that buys API access through a gateway The response is the new profile: -```json +```text wrap { "type": "user_profile", "id": "uprof_011CZkZCu8hGbp5mYRQgUmz9", @@ -403,7 +403,7 @@ A `passthrough` profile identifies a company, not the person making the request. A profile's `enforcement_status` and `enforcement_actions` fields report the enforcement actions that Anthropic has open on the end customer. An enforcement action is a restriction or a ban. Every response that returns a profile includes both fields: create, retrieve, update, and each profile in a list. Send these requests with no `user-profiles-` value in the `anthropic-beta` header, because `user-profiles-2026-09-04` and earlier values leave the fields out. The following example shows the fields on a retrieved profile, with the other fields left out: -```json +```text wrap { "type": "user_profile", "id": "uprof_011CZkZCu8hGbp5mYRQgUmz9", diff --git a/content/en/manage-claude/wif-admin-api.md b/content/en/manage-claude/wif-admin-api.md index 8b845802c6..146f6ea3ae 100644 --- a/content/en/manage-claude/wif-admin-api.md +++ b/content/en/manage-claude/wif-admin-api.md @@ -471,7 +471,7 @@ Archive a service account: The create endpoint returns the new service account: -```json +```text wrap { "id": "svac_...", "name": "inference-worker", @@ -1242,7 +1242,7 @@ Archive a rule: The list endpoint returns a page of rules and the cursor for the next page: -```json +```text wrap { "data": [{ "id": "fdrl_...", "name": "gha-deploy", "...": "..." }], "next_page": "..." diff --git a/content/en/manage-claude/wif-providers/azure.md b/content/en/manage-claude/wif-providers/azure.md index 3bd3224d44..9279fba39f 100644 --- a/content/en/manage-claude/wif-providers/azure.md +++ b/content/en/manage-claude/wif-providers/azure.md @@ -673,7 +673,7 @@ Use this path when your workload runs in an AKS pod. Entra Workload Identity fed
- The `azure-workload-identity` webhook reads the `azure.workload.identity/client-id` annotation to inject `AZURE_CLIENT_ID` into the pod, which the samples in [Acquire and use the token](https://platform.claude.com/docs/en/manage-claude/wif-providers/azure#acquire-and-use-the-token-2) read from the environment. + The `azure-workload-identity` webhook reads the `azure.workload.identity/client-id` annotation to inject `AZURE_CLIENT_ID` into the pod, which the samples in [Acquire and use the token on AKS](https://platform.claude.com/docs/en/manage-claude/wif-providers/azure#acquire-and-use-the-token-2) read from the environment. ```yaml apiVersion: v1 @@ -720,7 +720,7 @@ Use this path when your workload runs in an AKS pod. Entra Workload Identity fed - The token your Anthropic federation rule sees is not the projected file; it is the Entra-issued token returned by the `client_credentials` exchange. From inside a labeled pod, run step 1 of the cURL sample in [Acquire and use the token](https://platform.claude.com/docs/en/manage-claude/wif-providers/azure#acquire-and-use-the-token-2) and decode the result. It carries the same claim shape as the managed identity path: + The token your Anthropic federation rule sees is not the projected file; it is the Entra-issued token returned by the `client_credentials` exchange. From inside a labeled pod, run step 1 of the cURL sample in [Acquire and use the token on AKS](https://platform.claude.com/docs/en/manage-claude/wif-providers/azure#acquire-and-use-the-token-2) and decode the result. It carries the same claim shape as the managed identity path: ```json { @@ -1241,10 +1241,10 @@ Two different client IDs appear in the samples. `` is the audience app r ### Verify the setup -From inside a labeled pod, run the cURL exchange shown in [Acquire and use the token](https://platform.claude.com/docs/en/manage-claude/wif-providers/azure#acquire-and-use-the-token-2) and confirm that `POST /v1/oauth/token` returns a `200` with an `access_token` beginning with `sk-ant-oat01-` and an `expires_in` value in seconds. If the exchange fails with the opaque `401` `authentication_error` response (message `Authentication failed`), check the [authentication history page](https://platform.claude.com/settings/workload-identity-federation?tab=history) in the Claude Console for the deny reason, then decode the Entra-issued token from step 1 (see [Troubleshoot a failed exchange](https://platform.claude.com/docs/en/manage-claude/wif-reference#troubleshoot-a-failed-exchange) for the command) and check the most common Azure-side causes: +From inside a labeled pod, run the cURL exchange shown in [Acquire and use the token on AKS](https://platform.claude.com/docs/en/manage-claude/wif-providers/azure#acquire-and-use-the-token-2) and confirm that `POST /v1/oauth/token` returns a `200` with an `access_token` beginning with `sk-ant-oat01-` and an `expires_in` value in seconds. If the exchange fails with the opaque `401` `authentication_error` response (message `Authentication failed`), check the [authentication history page](https://platform.claude.com/settings/workload-identity-federation?tab=history) in the Claude Console for the deny reason, then decode the Entra-issued token from step 1 (see [Troubleshoot a failed exchange](https://platform.claude.com/docs/en/manage-claude/wif-reference#troubleshoot-a-failed-exchange) for the command) and check the most common Azure-side causes: * **Issuer mismatch:** The registered `issuer_url` must match the token's `iss` claim exactly. A v2.0 token carries `https://login.microsoftonline.com//v2.0`; if the decoded `ver` claim is `1.0`, see [If your tokens are v1.0](https://platform.claude.com/docs/en/manage-claude/wif-providers/azure#if-your-tokens-are-v1-0). -* **Token lifetime:** If a tenant token-lifetime policy or CAE extends the `client_credentials` token past 7,500 seconds, raise the issuer's `max_jwt_lifetime_seconds` as described in [Configure Anthropic](https://platform.claude.com/docs/en/manage-claude/wif-providers/azure#configure-anthropic-2). +* **Token lifetime:** If a tenant token-lifetime policy or CAE extends the `client_credentials` token past 7,500 seconds, raise the issuer's `max_jwt_lifetime_seconds` as described in [Configure Anthropic for Entra Workload Identity on AKS](https://platform.claude.com/docs/en/manage-claude/wif-providers/azure#configure-anthropic-2). * **Audience mismatch:** The rule's `audience` must equal the token's `aud` exactly: the audience app registration's client ID for the v2.0 tokens this guide configures. * **Claim name mismatch:** A rule that matches on a claim the token does not carry never passes. v1.0 tokens carry the client ID in `appid`, not `azp`; see [If your tokens are v1.0](https://platform.claude.com/docs/en/manage-claude/wif-providers/azure#if-your-tokens-are-v1-0). diff --git a/content/en/manage-claude/wif-providers/gcp.md b/content/en/manage-claude/wif-providers/gcp.md index 40909531b6..e37954d5e8 100644 --- a/content/en/manage-claude/wif-providers/gcp.md +++ b/content/en/manage-claude/wif-providers/gcp.md @@ -101,7 +101,7 @@ The wizard creates these resources for you. Use the following values whether you } ``` -**Federation rule:** Match on both the `sub` and `email` claims. `email` is the readable service-account address; `sub` is the service account's numeric unique ID, which Google never reuses, so pinning it protects the rule if the service account is deleted and a new one is later created with the same email. Find the unique ID with `gcloud iam service-accounts describe SA_EMAIL --format='value(uniqueId)'`. +**Federation rule:** Match on both the `sub` and `email` claims. `email` is the readable service-account address; `sub` is the service account's numeric unique ID, which Google never reuses, so pinning it protects the rule if the service account is deleted and a new one is later created with the same email. Find the unique ID with `gcloud iam service-accounts describe inference-worker@my-project.iam.gserviceaccount.com --format='value(uniqueId)'`. ```json { diff --git a/content/en/manage-claude/wif-providers/github-actions.md b/content/en/manage-claude/wif-providers/github-actions.md index 2c508e5718..08a753a641 100644 --- a/content/en/manage-claude/wif-providers/github-actions.md +++ b/content/en/manage-claude/wif-providers/github-actions.md @@ -311,7 +311,7 @@ Each GitHub-issued identity token expires roughly 5 minutes after issuance. The ## Verify the setup -A successful exchange returns an `access_token` beginning with `sk-ant-oat01-` and an `expires_in` value in seconds. A denied exchange returns an opaque `401` `authentication_error` with the fixed message `Authentication failed`, whichever check failed; in most cases the deny reason is recorded on the attempt's entry in the [authentication history page](https://platform.claude.com/settings/workload-identity-federation?tab=history) in the Claude Console, and [Troubleshoot a failed exchange](https://platform.claude.com/docs/en/manage-claude/wif-reference#troubleshoot-a-failed-exchange) walks the checks in order. The most common GitHub Actions-side cause is the `sub` claim format not matching (its trailing segment varies between `ref:...`, `environment:...`, and `pull_request` events); the history entry shows reason `match_subject_prefix`. +A successful exchange returns an `access_token` beginning with `sk-ant-oat01-` and an `expires_in` value in seconds. A denied exchange returns an opaque `401` `authentication_error` with the fixed message `Authentication failed`, whichever check failed; in most cases the deny reason is recorded on the attempt's entry in the [authentication history page](https://platform.claude.com/settings/workload-identity-federation?tab=history) in the Claude Console, and [Troubleshoot a failed exchange](https://platform.claude.com/docs/en/manage-claude/wif-reference#troubleshoot-a-failed-exchange) walks the checks in order. The most common GitHub Actions-side cause is the `sub` claim format not matching (its trailing segment varies among `ref:...`, `environment:...`, and `pull_request` events); the history entry shows reason `match_subject_prefix`. ## Restrict which workflows can authenticate diff --git a/content/en/manage-claude/wif-providers/spiffe.md b/content/en/manage-claude/wif-providers/spiffe.md index 0559c3ce67..c319cfebdb 100644 --- a/content/en/manage-claude/wif-providers/spiffe.md +++ b/content/en/manage-claude/wif-providers/spiffe.md @@ -85,10 +85,10 @@ Each workload that calls the Claude API needs a SPIRE registration entry that ma # Replace NODE_UID with the node's UID: # kubectl get node -o jsonpath='{.metadata.uid}' spire-server entry create \ - -spiffeID spiffe://prod.example.com/ns/inference/sa/worker \ - -parentID spiffe://prod.example.com/spire/agent/k8s_psat/prod-cluster/NODE_UID \ - -selector k8s:ns:inference \ - -selector k8s:sa:worker + -spiffeID spiffe://prod.example.com/ns/inference/sa/worker \ + -parentID spiffe://prod.example.com/spire/agent/k8s_psat/prod-cluster/NODE_UID \ + -selector k8s:ns:inference \ + -selector k8s:sa:worker ``` @@ -453,9 +453,9 @@ Before integrating the SDK, fetch a JWT-SVID directly from SPIRE Agent and confi ```bash CLI spire-agent api fetch jwt \ - -audience https://api.anthropic.com \ - -socketPath /run/spire/sockets/agent.sock \ - -output json \ + -audience https://api.anthropic.com \ + -socketPath /run/spire/sockets/agent.sock \ + -output json \ | jq -r '.[0].svids[0].svid' \ | jq -rR 'split(".")[1] | gsub("-";"+") | gsub("_";"/") | @base64d | fromjson' ``` @@ -475,7 +475,7 @@ Lock the rule's `match` block to the narrowest scope that fits your use case: * **Pin to one workload:** Set `subject_prefix` to the full SPIFFE ID with no trailing `*`. * **Always set an audience:** Require `audience` on the rule and configure spiffe-helper (or the Workload API call) with the same value so SVIDs minted for other relying parties are rejected. * **Scope by path segment:** Use `spiffe://prod.example.com/ns/inference/*` to grant every workload registered under a namespace, and create a separate rule and Anthropic service account for each namespace rather than widening one rule. -* **One issuer for each trust domain:** Each SPIRE trust domain has its own signing keys and OIDC Discovery Provider. Register each as a separate federation issuer and bind rules to the issuer that owns the SPIFFE IDs they match. +* **Register one issuer for each trust domain:** Each SPIRE trust domain has its own signing keys and OIDC Discovery Provider. Register each as a separate federation issuer and bind rules to the issuer that owns the SPIFFE IDs they match. ## Next steps diff --git a/content/en/manage-claude/workload-identity-federation.md b/content/en/manage-claude/workload-identity-federation.md index 2e2940ba32..27554c218a 100644 --- a/content/en/manage-claude/workload-identity-federation.md +++ b/content/en/manage-claude/workload-identity-federation.md @@ -371,7 +371,7 @@ The SDK caches the token and refreshes it on a two-tier schedule modeled on `bot Because the SDK re-reads `ANTHROPIC_IDENTITY_TOKEN_FILE` on every exchange, it transparently picks up rotated projected tokens (Kubernetes service-account tokens, for example, rotate well before their `exp`). -By default, identity tokens that carry a `jti` claim are single-use: each exchange must present a JWT that has not been exchanged before, and re-presenting one fails with the reason `jti_reused` on the [authentication history page](https://platform.claude.com/settings/workload-identity-federation?tab=history) in the Claude Console. If your workload fetches its own tokens from your identity provider, mint a fresh JWT for each exchange instead of reusing a cached one (retry loops are the common culprit). The same applies to a token read from `ANTHROPIC_IDENTITY_TOKEN_FILE`: the SDK re-reads the file on every exchange, so the file must hold a new token before each refresh. A refresh that re-reads an unrotated token, or a restarted process that re-presents a token it already exchanged, is rejected the same way. Rotating the token well within the minted token's lifetime keeps the file ahead of the refresh schedule; if your token source cannot rotate that often, you can disable `check_jti` for that issuer as a last resort (this removes replay protection for every rule on the issuer). See [JWT verification](https://platform.claude.com/docs/en/manage-claude/wif-reference#jwt-verification) for details. +By default, identity tokens that carry a `jti` claim are single-use: each exchange must present a JWT that has not been exchanged before, and re-presenting one fails with the reason `jti_reused` on the [authentication history page](https://platform.claude.com/settings/workload-identity-federation?tab=history) in the Claude Console. If your workload fetches its own tokens from your identity provider, mint a fresh JWT for each exchange instead of reusing a cached one (retry loops are the usual cause of reuse). The same applies to a token read from `ANTHROPIC_IDENTITY_TOKEN_FILE`: the SDK re-reads the file on every exchange, so the file must hold a new token before each refresh. A refresh that re-reads an unrotated token, or a restarted process that re-presents a token it already exchanged, is rejected the same way. Rotating the token well within the minted token's lifetime keeps the file ahead of the refresh schedule; if your token source cannot rotate that often, you can disable `check_jti` for that issuer as a last resort (this removes replay protection for every rule on the issuer). See [JWT verification](https://platform.claude.com/docs/en/manage-claude/wif-reference#jwt-verification) for details. ## Identity providers diff --git a/content/en/manage-claude/workspaces.md b/content/en/manage-claude/workspaces.md index 816c1fd6ba..fa5be5ab5a 100644 --- a/content/en/manage-claude/workspaces.md +++ b/content/en/manage-claude/workspaces.md @@ -12,10 +12,10 @@ Every organization has a **Default Workspace** that cannot be renamed, archived, Key characteristics: -* **Workspace identifiers** use the `wrkspc_` prefix (for example, `wrkspc_01JwQvzr7rXLA5AGx3HKfFUJ`) -* **Maximum 100 workspaces** for each organization by default (archived workspaces don't count); contact your account team if you need more -* **Default Workspace** has a `wrkspc_` ID like any other workspace (returned in the [`anthropic-workspace-id` response header](https://platform.claude.com/docs/en/manage-claude/workspaces#identify-the-workspace-behind-an-api-response) and accepted by [Get Workspace](https://platform.claude.com/docs/en/api/organization/workspaces/retrieve)), but it appears in [List Workspaces](https://platform.claude.com/docs/en/api/organization/workspaces/list) results only when you pass `include_default=true`, and usage reports and cost reports show `null` for its `workspace_id` (an API key's `scope` field carries the real ID for a key bound to the Default Workspace) -* **API keys** can be scoped to a single workspace. In this case, they can only access resources within that workspace. Other API keys aren't scoped to a workspace. With one of these keys, send a [workspace ID header](https://platform.claude.com/docs/en/manage-claude/authentication#select-a-workspace) on each request to choose the workspace. The key's user or service account must have access to that workspace +* **Workspace identifiers** use the `wrkspc_` prefix (for example, `wrkspc_01JwQvzr7rXLA5AGx3HKfFUJ`). +* **Maximum 100 workspaces** for each organization by default (archived workspaces don't count). Contact your account team if you need more. +* **Default Workspace** has a `wrkspc_` ID like any other workspace (returned in the [`anthropic-workspace-id` response header](https://platform.claude.com/docs/en/manage-claude/workspaces#identify-the-workspace-behind-an-api-response) and accepted by [Get Workspace](https://platform.claude.com/docs/en/api/organization/workspaces/retrieve)), but it appears in [List Workspaces](https://platform.claude.com/docs/en/api/organization/workspaces/list) results only when you pass `include_default=true`, and usage reports and cost reports show `null` for its `workspace_id` (an API key's `scope` field carries the real ID for a key bound to the Default Workspace). +* **API keys** can be scoped to a single workspace. In this case, they can only access resources within that workspace. Other API keys aren't scoped to a workspace. With one of these keys, send a [workspace ID header](https://platform.claude.com/docs/en/manage-claude/authentication#select-a-workspace) on each request to choose the workspace. The key's user or service account must have access to that workspace. ### Claude Code workspace @@ -25,7 +25,7 @@ The Claude Code workspace keeps Claude Code traffic separate from your other API * Claude Code mints a per-user API key in this workspace at sign-in. You cannot create keys in it manually from the Console. * A Claude Code key stops working if its owner is removed from the workspace or organization, unlike a workspace key. -* Claude Code usage is rate-limited separately, and admins can cap its share of the organization's limits on the [Rate limits](https://platform.claude.com/usage/limits) page in the Claude Console. +* Claude Code usage is rate-limited separately, and admins can cap its share of the organization's limits under [Rate limits in the Claude Console](https://platform.claude.com/usage/limits). * It is the only workspace that supports per-user monthly spend limits. @@ -122,7 +122,7 @@ To modify a workspace's name or color: You set a workspace's rate limits and spend limits in different places: -* **Rate limits:** On the [Rate limits](https://platform.claude.com/usage/limits) page in the Claude Console, select the workspace from the **Workspace** dropdown menu and click **Edit** next to a model to set limits for requests per minute, input tokens, or output tokens. +* **Rate limits:** Under [Rate limits in the Claude Console](https://platform.claude.com/usage/limits), select the workspace from the **Workspace** dropdown menu and click **Edit** next to a model to set limits for requests per minute, input tokens, or output tokens. * **Spend limits:** On the [Workspaces](https://platform.claude.com/settings/workspaces) page in the Claude Console, select the workspace. In the panel that opens, click **Spend limits** to cap monthly spending and configure alerts when spending reaches certain thresholds. #### Archive a workspace @@ -362,7 +362,8 @@ Archive a workspace: ``` ```bash CLI - ant organization:workspaces archive --workspace-id wrkspc_01JwQvzr7rXLA5AGx3HKfFUJ + ant organization:workspaces archive \ + --workspace-id wrkspc_01JwQvzr7rXLA5AGx3HKfFUJ ``` ```python Python @@ -848,7 +849,7 @@ To look up your organization's workspace IDs, call the [List Workspaces](https:/ Claude API responses include an `anthropic-workspace-id` header alongside the `request-id` and `anthropic-organization-id` [response headers](https://platform.claude.com/docs/en/api/overview#response-headers). Its value is the `wrkspc_`-prefixed ID of the workspace that the request's API key or access token resolved to, including when that workspace is the Default Workspace. For example, a successful response includes headers like these: -```http +```text wrap HTTP/1.1 200 OK request-id: req_018EeWyXxfu5pfWkrYcMdjWG anthropic-organization-id: 0d0e7a3b-52f1-4c7e-9a51-3f6f2f7c1b9e @@ -1022,7 +1023,7 @@ You can set custom spend and rate limits for each workspace to protect against o You can set workspace limits lower than (but not higher than) your organization's limits: * **Spend limits:** Cap monthly spending for a workspace. To set these, go to the [Workspaces](https://platform.claude.com/settings/workspaces) page (`platform.claude.com/settings/workspaces`) in the Claude Console and select the workspace. In the panel that opens, click **Spend limits**. -* **Rate limits:** Limit requests per minute, input tokens per minute, or output tokens per minute. To set these, go to the [Rate limits](https://platform.claude.com/usage/limits) page in the Claude Console, select the workspace from the **Workspace** dropdown menu, and click **Edit** next to a model. +* **Rate limits:** Limit requests per minute, input tokens per minute, or output tokens per minute. To set these, go to [Rate limits in the Claude Console](https://platform.claude.com/usage/limits), select the workspace from the **Workspace** dropdown menu, and click **Edit** next to a model. - You cannot set spend limits on the Default Workspace. diff --git a/content/en/managed-agents/agent-setup.md b/content/en/managed-agents/agent-setup.md index 7c07a9b27e..5824082d9a 100644 --- a/content/en/managed-agents/agent-setup.md +++ b/content/en/managed-agents/agent-setup.md @@ -16,17 +16,17 @@ Create the agent once as a reusable resource and reference it by ID each time yo ## Agent configuration fields -| Field | Description | -| ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `name` (csharp, go: `Name`) | Required. A human-readable name for the agent. | -| `model` (csharp, go: `Model`) | Required. The Claude [model](https://platform.claude.com/docs/en/models/overview) that powers the agent. Accepts a model ID string or an object, for example `{"id": "claude-opus-5-5"}`. Claude 4.5 and later models are supported. The object form also accepts `speed`, `effort`, and `inference_geo` fields; see the tips under [Create an agent](https://platform.claude.com/docs/en/managed-agents/agent-setup#create-an-agent), [Effort levels](https://platform.claude.com/docs/en/build-with-claude/effort#effort-levels), and [Pin the inference geo](https://platform.claude.com/docs/en/managed-agents/agent-setup#pin-the-inference-geo). | -| `system` (csharp, go: `System`; ruby: `system_`) | A [system prompt](https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/claude-prompting-best-practices#give-claude-a-role) that defines the agent's behavior and persona. The system prompt is distinct from [user messages](https://platform.claude.com/docs/en/managed-agents/reference#event-types), which should describe the work to be done. | -| `tools` (csharp, go: `Tools`) | The tools available to the agent. Combines [pre-built agent tools](https://platform.claude.com/docs/en/managed-agents/tools), [MCP tools](https://platform.claude.com/docs/en/managed-agents/mcp-connector), and [custom tools](https://platform.claude.com/docs/en/managed-agents/tools#custom-tools). | -| `mcp_servers` (java, php: `mcpServers`; csharp: `McpServers`; go: `MCPServers`) | [MCP servers](https://platform.claude.com/docs/en/managed-agents/mcp-connector) that provide standardized third-party capabilities. | -| `skills` (csharp, go: `Skills`) | [Skills](https://platform.claude.com/docs/en/managed-agents/skills) that supply domain-specific context with progressive disclosure. | -| `multiagent` (csharp, go: `Multiagent`) | Lets the agent hand work to other agents, as subagents or in [dynamic workflows](https://platform.claude.com/docs/en/managed-agents/multiagent-orchestration#dynamic-workflows), and optionally consult an [advisor](https://platform.claude.com/docs/en/managed-agents/multiagent-orchestration#give-the-session-an-advisor) model. With the `multiagent_20261001` type, dynamic workflows are on unless you disable them. See [Multiagent orchestration](https://platform.claude.com/docs/en/managed-agents/multiagent-orchestration). | -| `description` (csharp, go: `Description`) | A description of what the agent does. | -| `metadata` (csharp, go: `Metadata`) | Arbitrary key-value pairs for your own tracking. | +| Field | Description | +| ------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `name` (csharp, go: `Name`) | Required. A human-readable name for the agent. | +| `model` (csharp, go: `Model`) | Required. The Claude [model](https://platform.claude.com/docs/en/models/overview) that powers the agent. Accepts a model ID string or an object, for example `{"id": "claude-opus-5-5"}`. Claude 4.5 and later models are supported. The object form also accepts `speed` (csharp, go: `Speed`), `effort` (csharp, go: `Effort`), and `inference_geo` (java, php: `inferenceGeo`; csharp, go: `InferenceGeo`) fields; see the tips under [Create an agent](https://platform.claude.com/docs/en/managed-agents/agent-setup#create-an-agent), [Effort levels](https://platform.claude.com/docs/en/build-with-claude/effort#effort-levels), and [Pin the inference geo](https://platform.claude.com/docs/en/managed-agents/agent-setup#pin-the-inference-geo). | +| `system` (csharp, go: `System`; ruby: `system_`) | A [system prompt](https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/claude-prompting-best-practices#give-claude-a-role) that defines the agent's behavior and persona. The system prompt is distinct from [user messages](https://platform.claude.com/docs/en/managed-agents/reference#event-types), which should describe the work to be done. | +| `tools` (csharp, go: `Tools`) | The tools available to the agent. Combines [pre-built agent tools](https://platform.claude.com/docs/en/managed-agents/tools), [MCP tools](https://platform.claude.com/docs/en/managed-agents/mcp-connector), and [custom tools](https://platform.claude.com/docs/en/managed-agents/tools#custom-tools). | +| `mcp_servers` (java, php: `mcpServers`; csharp: `McpServers`; go: `MCPServers`) | [MCP servers](https://platform.claude.com/docs/en/managed-agents/mcp-connector) that provide standardized third-party capabilities. | +| `skills` (csharp, go: `Skills`) | [Skills](https://platform.claude.com/docs/en/managed-agents/skills) that supply domain-specific context with progressive disclosure. | +| `multiagent` (csharp, go: `Multiagent`) | Lets the agent hand work to other agents, as subagents or in [dynamic workflows](https://platform.claude.com/docs/en/managed-agents/multiagent-orchestration#dynamic-workflows), and optionally consult an [advisor](https://platform.claude.com/docs/en/managed-agents/multiagent-orchestration#give-the-session-an-advisor) model. With the `multiagent_20261001` type, dynamic workflows are on unless you disable them. See [Multiagent orchestration](https://platform.claude.com/docs/en/managed-agents/multiagent-orchestration). | +| `description` (csharp, go: `Description`) | A description of what the agent does. | +| `metadata` (csharp, go: `Metadata`) | Arbitrary key-value pairs for your own tracking. | You can also override `model` (csharp, go: `Model`), `system` (csharp, go: `System`; ruby: `system_`), `tools` (csharp, go: `Tools`), `mcp_servers` (java, php: `mcpServers`; csharp: `McpServers`; go: `MCPServers`), and `skills` (csharp, go: `Skills`) for a single session without changing the agent. A `model` (csharp, go: `Model`) override replaces the agent's `model` (csharp, go: `Model`) object in full, so the agent's own `effort` (csharp, go: `Effort`) isn't carried over. To run the session at a specific effort level, set `effort` (csharp, go: `Effort`) inside the override's `model` (csharp, go: `Model`) object. See [Override agent configuration for a session](https://platform.claude.com/docs/en/managed-agents/sessions#override-agent-configuration-for-a-session). @@ -145,7 +145,7 @@ The examples use curl, the `ant` CLI, or the SDK. If you haven't set one up, the ```ruby Ruby agent = client.beta.agents.create( name: "Coding Assistant", - model: "claude-opus-5-5", + model: Anthropic::Beta::BetaManagedAgentsModel::CLAUDE_OPUS_5_5, system_: "You are a helpful coding agent.", tools: [{type: "agent_toolset_20260401"}] ) @@ -154,7 +154,7 @@ The examples use curl, the `ant` CLI, or the SDK. If you haven't set one up, the The response echoes your configuration and adds `id`, `type`, `version`, `created_at`, `updated_at`, and `archived_at` fields, and fills in `model` fields you omit, such as `effort`, with their defaults. The `version` starts at 1 and increments each time an update changes the agent. -```json +```text wrap { "id": "agent_01HqR2k7vXbZ9mNpL3wYcT8f", "type": "agent", @@ -445,7 +445,7 @@ With the CLI, edit the agent's file and run `ant apply` again; apply supplies `v ``` -The preceding example supplies `version` from the create response, so the update only applies if nothing else has changed the agent since you read it. To apply an update unconditionally, omit `version` from the request: +The preceding example supplies `version` (csharp, go: `Version`) from the create response, so the update only applies if nothing else has changed the agent since you read it. To apply an update unconditionally, omit `version` (csharp, go: `Version`) from the request: ```bash cURL diff --git a/content/en/managed-agents/define-outcomes.md b/content/en/managed-agents/define-outcomes.md index 1f94b38b97..b2f3461d7a 100644 --- a/content/en/managed-agents/define-outcomes.md +++ b/content/en/managed-agents/define-outcomes.md @@ -300,7 +300,7 @@ The following examples create a [session](https://platform.claude.com/docs/en/ma "title": "Financial analysis on Costco" }' - # Define the outcome: SESSION_ID is the id from the create response + # Define the outcome: SESSION_ID is the ID from the create response # The agent starts working when it receives the event curl -fsSL "https://api.anthropic.com/v1/sessions/$SESSION_ID/events" \ -H "x-api-key: $ANTHROPIC_API_KEY" \ @@ -327,7 +327,7 @@ The following examples create a [session](https://platform.claude.com/docs/en/ma --environment-id "$ENVIRONMENT_ID" \ --title "Financial analysis on Costco" - # Define the outcome: SESSION_ID is the id from the create response + # Define the outcome: SESSION_ID is the ID from the create response # The agent starts working when it receives the event ant beta:sessions:events send --session-id "$SESSION_ID" < ```bash cURL diff --git a/content/en/managed-agents/dreams.md b/content/en/managed-agents/dreams.md index 411161519c..48d23050c0 100644 --- a/content/en/managed-agents/dreams.md +++ b/content/en/managed-agents/dreams.md @@ -154,7 +154,7 @@ Dreaming inputs include the pre-existing memory store and an array of sessions. The response is the full `dream` resource with `status: "pending"`: -```json +```text { "type": "dream", "id": "drm_01AbCDefGhIjKlMnOpQrStUv", diff --git a/content/en/managed-agents/event-deltas.md b/content/en/managed-agents/event-deltas.md index d7f09d285f..df6f77939d 100644 --- a/content/en/managed-agents/event-deltas.md +++ b/content/en/managed-agents/event-deltas.md @@ -31,7 +31,7 @@ A subagent's previews appear on [that subagent's own thread stream](https://plat When a previewed event starts, the stream emits an `event_start` carrying the upcoming event's type and `id`: -```json +```text wrap { "type": "event_start", "event": { @@ -43,7 +43,7 @@ When a previewed event starts, the stream emits an `event_start` carrying the up For `agent.message`, the start is followed by `event_delta` events carrying incremental text. Each delta names the event it extends in `event_id` and the content block it extends in `delta.index`: -```json +```text wrap { "type": "event_delta", "event_id": "sevt_01abc...", @@ -68,7 +68,7 @@ Unlike persisted events, `event_start` and `event_delta` have no `id` or `proces ## Accumulate and reconcile -Every SDK that supports event deltas includes an [accumulator helper](https://platform.claude.com/docs/en/managed-agents/event-deltas#sdk-accumulator-helpers) that handles the `index` bookkeeping for you. The manual pattern in this section works in every language when you need custom bookkeeping. Apply it to the generated event types. +Every SDK that supports event deltas includes an [accumulator helper](https://platform.claude.com/docs/en/managed-agents/event-deltas#sdk-accumulator-helpers) that handles the `index` (csharp, go: `Index`) bookkeeping for you. The manual pattern in this section works in every language when you need custom bookkeeping. Apply it to the generated event types. In the manual pattern, hold preview text in a temporary map keyed by `(event_id, index)`, and treat the buffered event as the record. Reconcile the two for each model request. @@ -580,7 +580,7 @@ A thread stream's path ends in `/threads/{thread_id}/stream`. `/events/stream` e ```bash CLI # The thread stream takes the same event_deltas parameter as the session stream, - # one --event-delta flag per event type to preview. + # one --event-delta flag for each event type to preview. ant beta:sessions:threads:events stream \ --session-id "$SESSION_ID" \ --thread-id "$THREAD_ID" \ diff --git a/content/en/managed-agents/events-and-streaming.md b/content/en/managed-agents/events-and-streaming.md index f861b9e621..049b95272d 100644 --- a/content/en/managed-agents/events-and-streaming.md +++ b/content/en/managed-agents/events-and-streaming.md @@ -1248,7 +1248,7 @@ Sessions persist between interactions. To resume a session, send a `user.message ``` ```ruby Ruby - # Resuming a session is just sending the next event to it. In production, + # To resume a session, send it the next event. In production, # pass the session ID you stored when the session was created. client.beta.sessions.events.send_( session.id, diff --git a/content/en/managed-agents/files.md b/content/en/managed-agents/files.md index 4074d832f0..811b0005c5 100644 --- a/content/en/managed-agents/files.md +++ b/content/en/managed-agents/files.md @@ -558,7 +558,7 @@ List all resources on a session with `GET /v1/sessions/{session_id}/resources` ( ## Listing and downloading session files -Use the [Files API](https://platform.claude.com/docs/en/build-with-claude/files) to list files scoped to a session and download them. Files the agent writes to `/mnt/session/outputs/` appear in the list shortly after the agent finishes writing them, sometimes a few seconds after the session goes idle. If an output file you expect is missing, list again after a short delay; once it appears in the list, its upload has finished. +Use the [Files API](https://platform.claude.com/docs/en/build-with-claude/files) to list files scoped to a session and download them. Files the agent writes to `/mnt/session/outputs/` appear in the list shortly after the agent finishes writing them, sometimes a few seconds after the session goes idle. If an output file you expect is missing, list again after a short delay; once it appears in the list, its upload is complete. Filtering by `scope_id` (java: `scopeId`; php: `scopeID`; csharp, go: `ScopeID`) requires the `managed-agents-2026-04-01` beta header, so the list examples call `GET /v1/files` (python, typescript, ruby: `client.beta.files.list()`; go, csharp: `client.Beta.Files.List()`; java: `client.beta().files().list()`; php: `$client->beta->files->list()`; cli: `ant beta:files list`) and pass that header explicitly. diff --git a/content/en/managed-agents/memory.md b/content/en/managed-agents/memory.md index bc7726b0c0..41b66710fe 100644 --- a/content/en/managed-agents/memory.md +++ b/content/en/managed-agents/memory.md @@ -370,9 +370,9 @@ You can configure `access` (csharp, go: `Access`) as well. It defaults to `read_ A maximum of **8 memory stores** is supported for each session. Attach multiple stores when different parts of memory have different owners or access rules. Common reasons: -* **Shared reference material:** one read-only store attached to many sessions (standards, conventions, domain knowledge), kept separate from each session's own read-write store. -* **Mapping to your product's structure:** one store for each end user, team, or project, while sharing a single agent configuration. -* **Different lifecycles:** a store that outlives any single session, or one you want to archive on its own schedule. +* **Shared reference material:** one read-only store attached to many sessions (standards, conventions, domain knowledge), kept separate from each session's own read-write store +* **Mapping to your product's structure:** one store for each end user, team, or project, while sharing a single agent configuration +* **Different lifecycles:** a store that outlives any single session, or one you want to archive on its own schedule ### How the agent accesses memory diff --git a/content/en/managed-agents/migration.md b/content/en/managed-agents/migration.md index 7d4c4e830f..181e77c7fd 100644 --- a/content/en/managed-agents/migration.md +++ b/content/en/managed-agents/migration.md @@ -1157,7 +1157,7 @@ If you built with the [Claude Agent SDK](https://code.claude.com/docs/en/agent-s agent = client.beta.agents.create( name: "weather-agent", - model: "claude-opus-5-5", + model: Anthropic::Beta::BetaManagedAgentsModel::CLAUDE_OPUS_5_5, system_: "You are a concise weather assistant.", tools: [ { diff --git a/content/en/managed-agents/multiagent-orchestration.md b/content/en/managed-agents/multiagent-orchestration.md index 5b6176d44c..64ca4c1298 100644 --- a/content/en/managed-agents/multiagent-orchestration.md +++ b/content/en/managed-agents/multiagent-orchestration.md @@ -318,7 +318,7 @@ When [defining your agent](https://platform.claude.com/docs/en/managed-agents/ag ```ruby Ruby lead_agent = client.beta.agents.create( name: "Engineering Lead", - model: "claude-opus-5-5", + model: Anthropic::Beta::BetaManagedAgentsModel::CLAUDE_OPUS_5_5, system: "You coordinate engineering work. Delegate code review to the reviewer agent and test writing to the test agent.", tools: [ {type: "agent_toolset_20260401"} @@ -457,7 +457,7 @@ Create the researcher, which declares the GitHub MCP server, and the agent that "tools": [{"type": "mcp_toolset", "mcp_server_name": "github"}] }' - # Create the agent that delegates to it: research_agent_id is the id from the first response + # Create the agent that delegates to it: research_agent_id is the ID from the first response curl --fail-with-body -sS https://api.anthropic.com/v1/agents \ -H "x-api-key: $ANTHROPIC_API_KEY" \ -H "anthropic-version: 2023-06-01" \ @@ -846,7 +846,7 @@ With dynamic workflows, an agent can take on work with many pieces, such as revi ### Turn on dynamic workflows -When [defining your agent](https://platform.claude.com/docs/en/managed-agents/agent-setup), set `multiagent.type` to `"multiagent_20261001"` and enable `workflows`. Dynamic workflows and delegating (`subagents`) are both on by default with this type. For dynamic workflows only, add `"subagents": {"type": "disabled"}`. +When [defining your agent](https://platform.claude.com/docs/en/managed-agents/agent-setup), set `multiagent.type` to `"multiagent_20261001"` and enable `workflows` (csharp, go: `Workflows`). Dynamic workflows and delegating (`subagents` (csharp, go: `Subagents`)) are both on by default with this type. For dynamic workflows only, also set `subagents` (csharp, go: `Subagents`) to `{"type": "disabled"}`. Before you change an existing agent's `multiagent.type`, see [how to move an agent to this type](https://platform.claude.com/docs/en/managed-agents/multiagent-orchestration#move-from-the-coordinator-type). @@ -976,7 +976,7 @@ Before you change an existing agent's `multiagent.type`, see [how to move an age ```ruby Ruby agent = client.beta.agents.create( name: "Contract Reviewer", - model: "claude-opus-5-5", + model: Anthropic::Beta::BetaManagedAgentsModel::CLAUDE_OPUS_5_5, system_: "You review contracts. When you're asked to review more than a few contracts, start a workflow run that reads them in parallel and combines the findings. Review one or two contracts yourself, without a run.", tools: [ {type: "agent_toolset_20260401"} @@ -1026,9 +1026,9 @@ Keep the following in mind: * A setting or field you send as `null` takes its default, and so does everything inside it, whatever you had stored. * A `predefined_agents` (java, php: `predefinedAgents`; csharp, go: `PredefinedAgents`) list you send replaces the stored list. * A setting you send with a different `type` replaces the stored setting, and the fields you leave out of it take their defaults. - * Every object you send needs its `type`, and an enabled `advisor` needs its `model`. + * Every object you send needs its `type`, and an enabled `advisor` (csharp, go: `Advisor`) needs its `model` (csharp, go: `Model`). -* **Turning it off:** Set `workflows` to `{"type": "disabled"}`. It stays off until an update turns it on again. Sending `null` turns it on, because its default is enabled. The same applies to `subagents`. +* **Turning it off:** Set `workflows` (csharp, go: `Workflows`) to `{"type": "disabled"}`. It stays off until an update turns it on again. Sending `null` turns it on, because its default is enabled. The same applies to `subagents` (csharp, go: `Subagents`). * **Existing sessions:** A session copies the setting when it is created, so changing the agent later doesn't change a session that already exists. @@ -1061,7 +1061,7 @@ For a run's events, interrupting a session with runs open, what changes while a ## Give the session an advisor -An enabled `advisor` setting in the agent's `multiagent` (csharp, go: `Multiagent`) block gives the session's primary thread an **advisor:** a model it can consult mid-turn for strategic guidance, such as planning an approach, getting unstuck, or reviewing work before finishing. The setting is disabled by default. To enable it, set `advisor` to `{"type": "enabled", "model": "..."}`, which has exactly two fields, `type` and `model`: +An enabled `advisor` (csharp, go: `Advisor`) setting in the agent's `multiagent` (csharp, go: `Multiagent`) block gives the session's primary thread an **advisor:** a model it can consult mid-turn for strategic guidance, such as planning an approach, moving past an obstacle, or reviewing work before finishing. The setting is disabled by default. To enable it, set `advisor` (csharp, go: `Advisor`) to `{"type": "enabled", "model": "..."}`, which has exactly two fields, `type` and `model`: ```bash cURL @@ -1197,7 +1197,7 @@ An enabled `advisor` setting in the agent's `multiagent` (csharp, go: `Multiagen ```ruby Ruby agent = client.beta.agents.create( name: "Backend engineer", - model: "claude-sonnet-5", + model: Anthropic::Beta::BetaManagedAgentsModel::CLAUDE_SONNET_5, system_: "You implement backend features end to end. Consult the advisor before major backend design decisions.", multiagent: { type: "multiagent_20261001", @@ -1242,7 +1242,7 @@ Prompt caching on the advisor's side is automatic; there is nothing to configure ### Removing the advisor -To remove the advisor, [update the agent](https://platform.claude.com/docs/en/managed-agents/agent-setup#update-an-agent) with `advisor` set to `{"type": "disabled"}`. On an agent that already has the `multiagent_20261001` type, a setting that the update leaves out keeps its stored value, so you don't need to send `subagents` or `workflows` again. For the same reason, an update that leaves `advisor` out keeps the advisor. Before you change an existing agent's `multiagent.type`, see [how to move an agent to this type](https://platform.claude.com/docs/en/managed-agents/multiagent-orchestration#move-from-the-coordinator-type). +To remove the advisor, [update the agent](https://platform.claude.com/docs/en/managed-agents/agent-setup#update-an-agent) with `advisor` (csharp, go: `Advisor`) set to `{"type": "disabled"}`. On an agent that already has the `multiagent_20261001` type, a setting that the update leaves out keeps its stored value, so you don't need to send `subagents` (csharp, go: `Subagents`) or `workflows` (csharp, go: `Workflows`) again. For the same reason, an update that leaves `advisor` (csharp, go: `Advisor`) out keeps the advisor. Before you change an existing agent's `multiagent.type`, see [how to move an agent to this type](https://platform.claude.com/docs/en/managed-agents/multiagent-orchestration#move-from-the-coordinator-type). ## Move from the `coordinator` type diff --git a/content/en/managed-agents/permission-policies.md b/content/en/managed-agents/permission-policies.md index 6b62676b5e..070b39b1d3 100644 --- a/content/en/managed-agents/permission-policies.md +++ b/content/en/managed-agents/permission-policies.md @@ -993,7 +993,7 @@ Under any permission policy, each `agent.tool_use` and `agent.mcp_tool_use` even For example, when `bash` is under `auto` and the server evaluates a call as high-risk, the denied call appears on the event stream as follows: -```json +```text wrap { "type": "agent.tool_use", "id": "sevt_01pqr...", @@ -1040,7 +1040,7 @@ A tool call evaluates to `ask` under an `always_ask` policy, or under `auto` whe For example, a `bash` call paused under an `always_ask` policy appears on the stream as follows: -```json +```text wrap { "type": "agent.tool_use", "id": "sevt_01def...", @@ -1060,7 +1060,7 @@ If you send a `user.tool_confirmation` for an event whose `evaluated_permission` To answer interactively instead, use `ant beta:sessions connect`, which shows the waiting call and sends this event when you allow or deny it. See [Connect to a Managed Agents session from your terminal](https://platform.claude.com/docs/en/cli-sdks-libraries/cli/sessions-connect#follow-and-steer-the-session). -In the following examples, the tool-use event IDs come from the `stop_reason.event_ids` array of the `session.status_idle` event. Learn more about receiving events in the [Session event stream](https://platform.claude.com/docs/en/managed-agents/events-and-streaming#stream-events) guide, or [subscribe to webhooks](https://platform.claude.com/docs/en/managed-agents/webhooks) to be notified when a session pauses for input. +In the following examples, the tool-use event IDs come from the `stop_reason.event_ids` array of the `session.status_idle` event. Learn more about [receiving events](https://platform.claude.com/docs/en/managed-agents/events-and-streaming#stream-events) in the Session event stream guide, or [subscribe to webhooks](https://platform.claude.com/docs/en/managed-agents/webhooks) to be notified when a session pauses for input. ```bash cURL @@ -1309,7 +1309,7 @@ In the following examples, the tool-use event IDs come from the `stop_reason.eve ## Custom tools -Permission policies do not apply to custom tools. When the agent invokes a custom tool, your application receives an `agent.custom_tool_use` event and is responsible for deciding whether to run it before sending back a `user.custom_tool_result`. See [Answer tool calls that pause the session](https://platform.claude.com/docs/en/managed-agents/events-and-streaming#answer-tool-calls-that-pause-the-session) for the full flow. +Permission policies do not apply to custom tools. When the agent calls a custom tool, your application receives an `agent.custom_tool_use` event and is responsible for deciding whether to run it before sending back a `user.custom_tool_result`. See [Answer tool calls that pause the session](https://platform.claude.com/docs/en/managed-agents/events-and-streaming#answer-tool-calls-that-pause-the-session) for the full flow. ## Next steps diff --git a/content/en/managed-agents/quickstart.md b/content/en/managed-agents/quickstart.md index d3d21ec65b..d5e5e2aa08 100644 --- a/content/en/managed-agents/quickstart.md +++ b/content/en/managed-agents/quickstart.md @@ -33,7 +33,7 @@ This guide walks you through creating an agent, setting up an environment, start ## Prerequisites -* A [Claude Console account](https://platform.claude.com) +* A [Claude Console account](https://platform.claude.com/) * An [API key](https://platform.claude.com/settings/keys) from the Console ## Install the CLI @@ -49,7 +49,7 @@ This guide walks you through creating an agent, setting up an environment, start For Linux environments, download the release binary directly. ```bash - VERSION=2.0.0 + VERSION=2.1.0 OS=$(uname -s | tr '[:upper:]' '[:lower:]') case $(uname -m) in x86_64) ARCH=amd64 ;; @@ -100,7 +100,7 @@ ant --version ```groovy Gradle - implementation("com.anthropic:anthropic-java:3.0.0") + implementation("com.anthropic:anthropic-java:3.1.0") ``` @@ -343,7 +343,7 @@ export ANTHROPIC_API_KEY="your-api-key-here" agent = client.beta.agents.create( name: "Coding Assistant", - model: "claude-opus-5-5", + model: Anthropic::Beta::BetaManagedAgentsModel::CLAUDE_OPUS_5_5, system_: "You are a helpful coding assistant. Write clean, well-documented code.", tools: [{type: "agent_toolset_20260401"}] ) diff --git a/content/en/managed-agents/scheduled-deployments.md b/content/en/managed-agents/scheduled-deployments.md index f1dc257a02..c248086384 100644 --- a/content/en/managed-agents/scheduled-deployments.md +++ b/content/en/managed-agents/scheduled-deployments.md @@ -224,7 +224,7 @@ When creating a deployment, you pass the [session configurations](https://platfo The response includes a deployment object with a populated `schedule.upcoming_runs_at` with the next upcoming fire times, to confirm your schedule was set correctly. -```json +```text wrap { "id": "depl_01xyz", "status": "active", @@ -578,7 +578,7 @@ You can additionally filter on deployment runs with errors: A failed run includes an `error` with a `type` describing why session creation was rejected (for example, `environment_archived_error`, `agent_archived_error`, or `session_rate_limited_error`). See the [List Deployment Runs](https://platform.claude.com/docs/en/api/beta/deployment_runs/list) reference for all filter parameters and the response schema. -```json +```text { "type": "deployment_run", "id": "drun_01abc124", diff --git a/content/en/managed-agents/secure-deployment.md b/content/en/managed-agents/secure-deployment.md index bfd1274419..474be96945 100644 --- a/content/en/managed-agents/secure-deployment.md +++ b/content/en/managed-agents/secure-deployment.md @@ -226,7 +226,7 @@ If the agent keeps `bash`, set the `bash` tool's [permission policy](https://pla After you tighten an environment, start new sessions and stop the ones that were already running. A session that is already running can keep the old limits until it ends. See [Set limits and a way to stop](https://platform.claude.com/docs/en/managed-agents/secure-deployment#set-limits-and-a-way-to-stop). -See [Cloud environment setup](https://platform.claude.com/docs/en/managed-agents/environments#networking) for every networking setting. +See [Networking in Cloud environment setup](https://platform.claude.com/docs/en/managed-agents/environments#networking) for every networking setting. ## Keep credentials in vaults @@ -806,7 +806,7 @@ The split uses three agents: | Agent | Reads | Holds | Passes on | | -------------------------------------- | ------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------- | | Lead (the agent that the session runs) | Your message, and what the other agents send back | No built-in tools. The `predefined_agents` (java, php: `predefinedAgents`; csharp, go: `PredefinedAgents`) list of its `subagents` (csharp, go: `Subagents`) names the fetcher and the writer | A task to each agent | -| Fetcher | Web pages and search results | `web_fetch` and `web_search` only, each with `allowed_domains` (java, php: `allowedDomains`; csharp, go: `AllowedDomains`) | Short results, in a format you ask for in its system prompt | +| Fetcher | Webpages and search results | `web_fetch` and `web_search` only, each with `allowed_domains` (java, php: `allowedDomains`; csharp, go: `AllowedDomains`) | Short results, in a format you ask for in its system prompt | | Writer | The task from the lead | The tools that write files, run commands, or change records, on `auto` or `always_ask`. No web tools | Its result | The fetcher's results are built from untrusted pages, and the lead can pass their text on to the writer. Keep `auto` or `always_ask` on the writer's tools. The fetcher can still send some of what it reads to the sites on its `web_fetch` list, and to the search provider in its queries. @@ -822,7 +822,7 @@ Set a budget when you create each session, and decide in advance how you stop an | Session budget | A cap on spend at public list prices. At the cap, the session and each [thread](https://platform.claude.com/docs/en/managed-agents/session-threads) pause. Requests in progress can complete and their tool calls still run, so spend can pass the cap. See [When a session reaches its budget](https://platform.claude.com/docs/en/managed-agents/budgets#when-a-session-reaches-its-budget) | | Deployment budget | The same cap, applied to each session a deployment starts | | [`user.interrupt` event](https://platform.claude.com/docs/en/managed-agents/events-and-streaming#interrupt-the-agent) | Stops the model response immediately. A running tool call can complete first. The session goes `idle`, unless a workflow run keeps it `running`, and resumes on your next message. An interrupt ends no workflow run | -| Archive or delete a session | Archiving keeps the history and blocks new events. Deleting removes the record, events, and sandbox | +| Archive or delete a session | Archiving keeps the history and blocks new events. Deleting is permanent. It deletes the record, events, and sandbox | | Pause or archive a deployment | Pausing stops new scheduled runs but still allows manual runs. Archiving ends the schedule permanently. Sessions already running keep running | | Archive or delete a vault or credential | Removes the secret from running sessions without a restart. Allow for a delay. The sessions keep running, so interrupt them too. A token the agent already fetched with the secret stays in the sandbox | @@ -837,7 +837,7 @@ To stop a running agent, follow these steps: An interrupt does not undo what the agent already did or sent. Archiving an agent does not stop its running sessions. -A budget's `max_list_cost.amount` (java, php: `maxListCost.amount`; csharp, go: `MaxListCost.Amount`) is a whole number of US cents written as a string, so `"125"` means $1.25. See [Set a budget at session creation](https://platform.claude.com/docs/en/managed-agents/budgets#set-a-budget-at-session-creation). +A budget's `max_list_cost.amount` (java, php: `maxListCost.amount`; csharp, go: `MaxListCost.Amount`) is a whole number of US cents written as a string, so `"125"` means $1.25 USD. See [Set a budget at session creation](https://platform.claude.com/docs/en/managed-agents/budgets#set-a-budget-at-session-creation). You cannot add a budget to a session created without one. To change or remove a cap, see [Resume a session at its budget](https://platform.claude.com/docs/en/managed-agents/budgets#resume-a-session-at-its-budget). After you remove a session's cap, you cannot set a new one. diff --git a/content/en/managed-agents/self-hosted-sandboxes-workers.md b/content/en/managed-agents/self-hosted-sandboxes-workers.md index 79ba2de8b0..48c674345f 100644 --- a/content/en/managed-agents/self-hosted-sandboxes-workers.md +++ b/content/en/managed-agents/self-hosted-sandboxes-workers.md @@ -157,7 +157,7 @@ Start a worker that polls the queue continuously. It authenticates with the [env - In the [Console](https://platform.claude.com/settings/workspaces/default/webhooks), define a webhook endpoint that listens for `session.status_run_started` events. See [Webhooks](https://platform.claude.com/docs/en/managed-agents/webhooks) for details. + In the [Claude Console](https://platform.claude.com/settings/workspaces/default/webhooks), define a webhook endpoint that listens for `session.status_run_started` events. See [Webhooks](https://platform.claude.com/docs/en/managed-agents/webhooks) for details. @@ -437,7 +437,7 @@ A poller on the host claims work and calls your script once for each work item. ```dockerfile FROM your-base-image - ARG ANT_VERSION=2.0.0 + ARG ANT_VERSION=2.1.0 ARG TARGETARCH RUN ARCH=$([ "$TARGETARCH" = "arm64" ] && echo arm64 || echo amd64) && \ curl -fsSL "https://github.com/anthropics/anthropic-cli/releases/download/v${ANT_VERSION}/ant_${ANT_VERSION}_linux_${ARCH}.tar.gz" \ @@ -453,7 +453,7 @@ A poller on the host claims work and calls your script once for each work item. ```bash #!/bin/bash - # spawn.sh: called once per claimed work item + # spawn.sh: called once for each claimed work item # The claimed work item arrives as JSON on stdin. ANTHROPIC_WORK_SECRET="$(jq -r '.secret // empty')" export ANTHROPIC_WORK_SECRET diff --git a/content/en/managed-agents/self-hosted-sandboxes.md b/content/en/managed-agents/self-hosted-sandboxes.md index e2734550fe..9c3dd8f626 100644 --- a/content/en/managed-agents/self-hosted-sandboxes.md +++ b/content/en/managed-agents/self-hosted-sandboxes.md @@ -184,7 +184,7 @@ This quickstart runs one always-on worker with the `ant` CLI, sends it a session For Linux environments, download the release binary directly. ```bash - VERSION=2.0.0 + VERSION=2.1.0 OS=$(uname -s | tr '[:upper:]' '[:lower:]') case $(uname -m) in x86_64) ARCH=amd64 ;; @@ -313,7 +313,7 @@ This quickstart runs one always-on worker with the `ant` CLI, sends it a session "environment_id": "'"$ANTHROPIC_ENVIRONMENT_ID"'" }' - # Send it a task: SESSION_ID is the id from the create response + # Send it a task: SESSION_ID is the ID from the create response curl -sS --fail-with-body "https://api.anthropic.com/v1/sessions/$SESSION_ID/events" \ -H "x-api-key: $ANTHROPIC_API_KEY" \ -H "anthropic-version: 2023-06-01" \ @@ -340,7 +340,7 @@ This quickstart runs one always-on worker with the `ant` CLI, sends it a session --agent "$AGENT_ID" \ --environment-id "$ANTHROPIC_ENVIRONMENT_ID" - # Send it a task: SESSION_ID is the id from the create response + # Send it a task: SESSION_ID is the ID from the create response ant beta:sessions:events send --session-id "$SESSION_ID" <<'YAML' events: - type: user.message @@ -551,7 +551,7 @@ These pages describe how to build a worker on any sandboxing platform. Platform- Run the SDK worker, trigger workers from webhooks, or give each session its own sandbox.
- + Prepare the host, configure sync, and handle read-only stores and conflicts. diff --git a/content/en/managed-agents/session-observability.md b/content/en/managed-agents/session-observability.md index e7d85cf1d6..cc83a6635f 100644 --- a/content/en/managed-agents/session-observability.md +++ b/content/en/managed-agents/session-observability.md @@ -38,7 +38,7 @@ With `ant beta:sessions connect`, you can open the same viewer from the `ant` CL The session object includes a `usage` field with the session's cumulative usage: token counts, server tool use, active time, and the tracked list cost. Fetch the session after it goes idle to read the latest totals. -```json +```text wrap { "id": "sesn_01...", "status": "idle", @@ -79,7 +79,7 @@ The session's `stats` object has its own `active_seconds`, which sums each threa ### Per-thread usage -Each [session thread](https://platform.claude.com/docs/en/managed-agents/session-threads)'s own `usage` carries `list_cost` and `active_seconds` too. Per-thread figures are rounded independently and exclude the session's running-time cost, so they don't sum exactly to the session's `list_cost`. The session figure is the authoritative one. +Each [session thread](https://platform.claude.com/docs/en/managed-agents/session-threads)'s own `usage` (csharp, go: `Usage`) carries `list_cost` (java, php: `listCost`; csharp, go: `ListCost`) and `active_seconds` (java, php: `activeSeconds`; csharp, go: `ActiveSeconds`) too. Per-thread figures are rounded independently and exclude the session's running-time cost, so they don't sum exactly to the session's `list_cost` (java, php: `listCost`; csharp, go: `ListCost`). The session figure is the authoritative one. ### Read usage from the stream diff --git a/content/en/managed-agents/session-operations.md b/content/en/managed-agents/session-operations.md index 4baf1ab65f..0fe95f862f 100644 --- a/content/en/managed-agents/session-operations.md +++ b/content/en/managed-agents/session-operations.md @@ -277,10 +277,7 @@ A `page` cursor is opaque and encodes the `order` of the request that produced i ```bash CLI # --format raw returns one page envelope with its prev_page and next_page # cursors; the default output auto-paginates and emits only the sessions. - ant beta:sessions list \ - --agent-id "$AGENT_ID" \ - --limit 1 \ - --format raw + ant beta:sessions list --agent-id "$AGENT_ID" --limit 1 --format raw # Pass next_page back as --page to fetch the next page, or prev_page to go back. ``` @@ -504,8 +501,7 @@ Archive a session to prevent new events from being sent while preserving its his ``` ```bash CLI - ant beta:sessions archive \ - --session-id "$SESSION_ID" + ant beta:sessions archive --session-id "$SESSION_ID" ``` ```python Python @@ -542,7 +538,7 @@ Archive a session to prevent new events from being sent while preserving its his ## Deleting a session -Delete a session to permanently remove its record, events, and associated sandbox. A `running` session cannot be deleted; to delete one, send a [`user.interrupt` event](https://platform.claude.com/docs/en/managed-agents/events-and-streaming#interrupt-the-agent) by itself and wait for the session to become `idle`. If a [workflow run](https://platform.claude.com/docs/en/managed-agents/workflow-runs#while-a-run-is-open) is open, deleting might return a 400 error, even when the session is `idle`, or it might succeed. After a delete that succeeds, no `workflow_run` event reports the end of the session's runs. Before you delete, send a `user.message` that [asks the agent to stop its runs](https://platform.claude.com/docs/en/managed-agents/workflow-runs#interrupt-a-session-with-runs-open), or wait until each run has ended. Then delete the session once it's `idle`. +Deleting a session is permanent. It deletes the session's record, events, and associated sandbox. A `running` session cannot be deleted; to delete one, send a [`user.interrupt` event](https://platform.claude.com/docs/en/managed-agents/events-and-streaming#interrupt-the-agent) by itself and wait for the session to become `idle`. If a [workflow run](https://platform.claude.com/docs/en/managed-agents/workflow-runs#while-a-run-is-open) is open, deleting might return a 400 error, even when the session is `idle`, or it might succeed. After a delete that succeeds, no `workflow_run` event reports the end of the session's runs. Before you delete, send a `user.message` that [asks the agent to stop its runs](https://platform.claude.com/docs/en/managed-agents/workflow-runs#interrupt-a-session-with-runs-open), or wait until each run has ended. Then delete the session once it's `idle`. Memory stores, vaults, skills, environments, and agents are independent resources and are not affected by session deletion. Files you uploaded through the Files API are also unaffected, but files the session itself produced are scoped to it and are permanently deleted along with its filesystem. Download anything you need to keep before deleting the session. An output file written at the end of the last turn can take a few seconds after the session goes idle to appear in the [session's file list](https://platform.claude.com/docs/en/managed-agents/files#listing-and-downloading-session-files), so check that the files you expect are listed first. @@ -555,8 +551,7 @@ Memory stores, vaults, skills, environments, and agents are independent resource ``` ```bash CLI - ant beta:sessions delete \ - --session-id "$SESSION_ID" + ant beta:sessions delete --session-id "$SESSION_ID" ``` ```python Python diff --git a/content/en/managed-agents/session-threads.md b/content/en/managed-agents/session-threads.md index dfa799ffa6..916c1276e6 100644 --- a/content/en/managed-agents/session-threads.md +++ b/content/en/managed-agents/session-threads.md @@ -117,7 +117,11 @@ Send `user.interrupt` with `session_thread_id` (java: `sessionThreadId`; php: `s -H "anthropic-version: 2023-06-01" \ -H "anthropic-beta: managed-agents-2026-04-01" \ -H "content-type: application/json" \ - -d '{"events": [{"type": "user.interrupt", "session_thread_id": "'"$THREAD_ID"'"}]}' + -d '{ + "events": [ + {"type": "user.interrupt", "session_thread_id": "'"$THREAD_ID"'"} + ] + }' ``` ```bash CLI @@ -263,7 +267,11 @@ Archive only succeeds if the thread is `idle`. A thread parked on `requires_acti -H "anthropic-version: 2023-06-01" \ -H "anthropic-beta: managed-agents-2026-04-01" \ -H "content-type: application/json" \ - -d '{"events": [{"type": "user.interrupt", "session_thread_id": "'"$THREAD_ID"'"}]}' + -d '{ + "events": [ + {"type": "user.interrupt", "session_thread_id": "'"$THREAD_ID"'"} + ] + }' curl -fsS -X POST "https://api.anthropic.com/v1/sessions/$SESSION_ID/threads/$THREAD_ID/archive" \ -H "x-api-key: $ANTHROPIC_API_KEY" \ @@ -645,7 +653,7 @@ A thread's stream doesn't replay earlier events. Right after `session.thread_cre If a subagent needs something from your client, such as [permission](https://platform.claude.com/docs/en/managed-agents/events-and-streaming#tool-confirmation) to run a tool call or the [result of a custom tool](https://platform.claude.com/docs/en/managed-agents/events-and-streaming#handling-custom-tool-calls), the event is cross-posted to the **primary thread** with `session_thread_id` identifying the originating session thread. A tool call needs your permission under `always_ask`, or under [`auto`](https://platform.claude.com/docs/en/managed-agents/permission-policies#let-the-server-evaluate-each-call-with-auto) when the server reaches no determination. -```json +```text wrap { "type": "session.thread_status_idle", "id": "sevt_01ABC...", diff --git a/content/en/managed-agents/sessions.md b/content/en/managed-agents/sessions.md index 4d8ea291c8..e447cf5f40 100644 --- a/content/en/managed-agents/sessions.md +++ b/content/en/managed-agents/sessions.md @@ -30,9 +30,7 @@ A session requires an `agent` ID and an `environment` ID. Agents are versioned r ``` ```bash CLI - ant beta:sessions create \ - --agent "$AGENT_ID" \ - --environment-id "$ENVIRONMENT_ID" + ant beta:sessions create --agent "$AGENT_ID" --environment-id "$ENVIRONMENT_ID" ``` ```python Python @@ -436,8 +434,8 @@ Each overridable field follows the same three rules: * **Set the field to `null`, or to an empty array for list fields:** The session runs with that field cleared. This rule applies in full to `system` (csharp, go: `System`; ruby: `system_`) and `skills` (csharp, go: `Skills`). There are three exceptions: - * `model` is never clearable. A session always needs a model, so `model: null` returns a 400 `agent_model_required` error. - * Clearing `tools` returns a 400 error when the session's effective `skills` (csharp, go: `Skills`) is non-empty, because skills require the `read` tool. Otherwise, `tools: null` and `tools: []` clear the field. + * `model` (csharp, go: `Model`) is never clearable. A session always needs a model, so setting `model` (csharp, go: `Model`) to `null` returns a 400 `agent_model_required` error. + * Clearing `tools` (csharp, go: `Tools`) returns a 400 error when the session's effective `skills` (csharp, go: `Skills`) is non-empty, because skills require the `read` tool. Otherwise, setting `tools` (csharp, go: `Tools`) to `null` or to an empty array clears the field. * Clearing `mcp_servers` (java, php: `mcpServers`; csharp: `McpServers`; go: `MCPServers`) returns a 400 error when the session's effective `tools` (csharp, go: `Tools`) still contains an `mcp_toolset` that references one of the agent's servers. Override `tools` (csharp, go: `Tools`) in the same request to remove those `mcp_toolset` entries, then clear `mcp_servers` (java, php: `mcpServers`; csharp: `McpServers`; go: `MCPServers`). * **Set the field to a value:** The value replaces the agent's value in full. Overrides never merge with the agent's configuration, so a `tools` (csharp, go: `Tools`) override must list every tool the session should have. Likewise, a `model` (csharp, go: `Model`) override replaces the agent's `model` (csharp, go: `Model`) object in full, so the agent's own `effort` (csharp, go: `Effort`) isn't carried over. To run the session at a specific effort level, set `effort` (csharp, go: `Effort`) inside the override's `model` (csharp, go: `Model`) object. A level the model doesn't support returns a 400 error, and a `model` (csharp, go: `Model`) override without `effort` (csharp, go: `Effort`) runs at that model's default effort level. @@ -468,7 +466,7 @@ The following example starts a session that overrides the model and clears the s ```bash CLI # The response's `agent` is the resolved snapshot: each override replaces that - # field for this session only, and the agent resource keeps its id and version. + # field for this session only, and the agent resource keeps its ID and version. ant beta:sessions create < Repository skills are agent instructions, so a mounted repository is part of your agent's trust boundary. Anyone who can commit to the repository (a merged external pull request, a compromised dependency, a contributor) can add or change a skill, the platform loads it at session start without a review step, and session tools such as `bash` and `web_fetch` give those instructions real reach. Mount only repositories you trust, and review `.claude/skills` before mounting a repository that accepts outside contributions. diff --git a/content/en/managed-agents/tools-web-restrictions.md b/content/en/managed-agents/tools-web-restrictions.md index 9dcd94a4b7..fd7694e499 100644 --- a/content/en/managed-agents/tools-web-restrictions.md +++ b/content/en/managed-agents/tools-web-restrictions.md @@ -23,6 +23,8 @@ Each tool carries its own list, so `web_search` and `web_fetch` can have differe Your organization's web search settings on the [**Capabilities**](https://platform.claude.com/settings/capabilities) page of the Claude Console also apply to `web_search` in a session. If an administrator disables web search, `web_search` calls return an error result to the agent, and the session continues. If the organization restricts web search domains, the agent receives only the search results that both the organization's domain restrictions and the agent's per-tool lists allow. +Your organization's web fetch settings on the same page also apply to `web_fetch` in a session. If an administrator turns off web fetch, `web_fetch` calls return an error result to the agent, and the session continues. If the organization sets allowed or blocked domains for web fetch, a URL must pass the organization's list and the agent's per-tool lists, and so must any URL a redirect leads to. A `web_fetch` call for a URL that any of them excludes also returns an error result to the agent. + ## Set domain lists on an agent The following example creates an agent that limits `web_search` to two sites and blocks one host for `web_fetch`. It also sets `user_location` (java, php: `userLocation`; csharp, go: `UserLocation`) and `max_content_tokens` (java, php: `maxContentTokens`; csharp, go: `MaxContentTokens`), which [Settings](https://platform.claude.com/docs/en/managed-agents/tools-web-restrictions#settings) describes. The response echoes the `configs` (csharp, go: `Configs`) array. @@ -460,7 +462,7 @@ To continue the session: In a [multiagent session](https://platform.claude.com/docs/en/managed-agents/multiagent-orchestration), every domain list that applies to a thread is enforced at the same time. An agent listed in the `predefined_agents` (java, php: `predefinedAgents`; csharp, go: `PredefinedAgents`) list of `subagents` (csharp, go: `Subagents`) is bound by three sets of per-tool lists: -* Its own `allowed_domains` and `blocked_domains` +* Its own `allowed_domains` (java, php: `allowedDomains`; csharp, go: `AllowedDomains`) and `blocked_domains` (java, php: `blockedDomains`; csharp, go: `BlockedDomains`) * Those of any agent that called it * The current lists of the agent that the session runs @@ -474,12 +476,12 @@ The settings combine as follows: A listed agent can therefore narrow what a tool reaches but never widen it: -* A listed agent that sets `blocked_domains` keeps the `allowed_domains` of the session's agent and blocks those hosts within it. -* A listed agent that sets its own `allowed_domains` can reach only the hosts that both its list and the list of the session's agent cover. +* A listed agent that sets `blocked_domains` (java, php: `blockedDomains`; csharp, go: `BlockedDomains`) keeps the `allowed_domains` (java, php: `allowedDomains`; csharp, go: `AllowedDomains`) of the session's agent and blocks those hosts within it. +* A listed agent that sets its own `allowed_domains` (java, php: `allowedDomains`; csharp, go: `AllowedDomains`) can reach only the hosts that both its list and the list of the session's agent cover. A `{"type": "self"}` entry in the `predefined_agents` (java, php: `predefinedAgents`; csharp, go: `PredefinedAgents`) list of `subagents` (csharp, go: `Subagents`) has no web settings of its own and follows the current settings of the session's agent. -If the combined `allowed_domains` lists have no domain in common, the tool stays available to that agent, but every call fails. Each call returns a `url_not_allowed` error stating that no domain is permitted. The tool description tells the model the same. To avoid this, keep each listed agent's `allowed_domains` inside the `allowed_domains` of the session's agent. +If the combined `allowed_domains` (java, php: `allowedDomains`; csharp, go: `AllowedDomains`) lists have no domain in common, the tool stays available to that agent, but every call fails. Each call returns a `url_not_allowed` error stating that no domain is allowed. The tool description tells the model the same. To avoid this, keep each listed agent's `allowed_domains` (java, php: `allowedDomains`; csharp, go: `AllowedDomains`) inside the `allowed_domains` (java, php: `allowedDomains`; csharp, go: `AllowedDomains`) of the session's agent. The grader in [outcome-driven sessions](https://platform.claude.com/docs/en/managed-agents/define-outcomes) runs without `web_search` and `web_fetch`, regardless of these settings. diff --git a/content/en/managed-agents/tools.md b/content/en/managed-agents/tools.md index 40669c0109..329da6a0da 100644 --- a/content/en/managed-agents/tools.md +++ b/content/en/managed-agents/tools.md @@ -481,7 +481,7 @@ The following example creates an agent with the built-in toolset and one custom A custom tool's name can't start with `mcp__` or `ant__`, or match the name of a built-in agent tool. A request that breaks this rule returns a 400 error. An agent that already has a custom tool whose name starts with `ant__` accepts an update only if the update sends `tools` (csharp, go: `Tools`) without that name, so rename or remove the tool in your next update. A new session is refused with a 400 error if such a tool is on its agent (after any [overrides](https://platform.claude.com/docs/en/managed-agents/sessions#override-agent-configuration-for-a-session)), on an agent in the `predefined_agents` (java, php: `predefinedAgents`; csharp, go: `PredefinedAgents`) list of `subagents` (csharp, go: `Subagents`), or on an agent in the `predefined_agents` (java, php: `predefinedAgents`; csharp, go: `PredefinedAgents`) list of `workflows` (csharp, go: `Workflows`). Sessions that already exist aren't affected. -The agent calls its custom tools during a session. To receive the calls and return results, see [Session event stream](https://platform.claude.com/docs/en/managed-agents/events-and-streaming#handling-custom-tool-calls). +The agent calls its custom tools during a session. To receive the calls and return results, see [Answer tool calls that pause the session](https://platform.claude.com/docs/en/managed-agents/events-and-streaming#handling-custom-tool-calls). For sessions that run in a self-hosted sandbox, the environment worker can [serve custom tools from the sandbox](https://platform.claude.com/docs/en/managed-agents/self-hosted-sandboxes-custom-tools). These can include tools that wrap an MCP server inside your network. diff --git a/content/en/managed-agents/vaults.md b/content/en/managed-agents/vaults.md index 044f0d6c7a..77f33a93a2 100644 --- a/content/en/managed-agents/vaults.md +++ b/content/en/managed-agents/vaults.md @@ -115,7 +115,7 @@ A vault is the collection of `credentials` associated with an end user. Give it The response is the full vault record: -```json +```text wrap { "type": "vault", "id": "vlt_01ABC...", @@ -693,7 +693,7 @@ To get the same behavior with a self-hosted sandbox, you can run your own proxy The credential's `injection_location` (java, php: `injectionLocation`; csharp, go: `InjectionLocation`) controls which parts of an outbound request the secret is substituted into. It is an optional object, a sibling of `networking` (csharp, go: `Networking`), with two Boolean fields: `header` (csharp, go: `Header`) (request headers) and `body` (csharp, go: `Body`) (request body). `injection_location` (java, php: `injectionLocation`; csharp, go: `InjectionLocation`) is independent of `allowed_hosts` (java, php: `allowedHosts`; csharp, go: `AllowedHosts`) in `networking` (csharp, go: `Networking`): `allowed_hosts` (java, php: `allowedHosts`; csharp, go: `AllowedHosts`) scopes which hosts the secret is substituted for, and `injection_location` (java, php: `injectionLocation`; csharp, go: `InjectionLocation`) scopes which parts of the request it is substituted into. - `injection_location` behaves differently on create and on update: + `injection_location` (java, php: `injectionLocation`; csharp, go: `InjectionLocation`) behaves differently on create and on update: | Operation | `injection_location` behavior | | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | @@ -708,7 +708,7 @@ To get the same behavior with a self-hosted sandbox, you can run your own proxy Credentials created in the Claude Console enable header injection only. If your client sends the secret in the request body, such as a form-encoded token request, the placeholder passes through literally and the service rejects it with its own authentication error. Enable body injection in the Console form when you create the credential, or update the credential with `{"injection_location": {"body": true}}`. - The substitution happens at egress, not inside the sandbox. Anything that processes the credential locally sees the opaque placeholder, not the real value: clients that validate the credential format at startup might reject it, and clients that compute a request signature from the secret (for example, AWS SigV4) produce an invalid signature. Environment variable credentials work for clients that send the secret value verbatim in an outbound request, in a location the credential's `injection_location` (java, php: `injectionLocation`; csharp, go: `InjectionLocation`) enables. + The substitution occurs at egress, not inside the sandbox. Anything that processes the credential locally sees the opaque placeholder, not the real value: clients that validate the credential format at startup might reject it, and clients that compute a request signature from the secret (for example, AWS SigV4) produce an invalid signature. Environment variable credentials work for clients that send the secret value verbatim in an outbound request, in a location the credential's `injection_location` (java, php: `injectionLocation`; csharp, go: `InjectionLocation`) enables. Substitution is outbound only. If a client uses the stored secret to fetch a session token (for example, an OAuth client-credentials grant), the returned token arrives in the sandbox unredacted. For exchange-based flows, perform the exchange yourself and store the resulting token in the vault instead. @@ -1070,7 +1070,7 @@ The top-level `status` (csharp, go: `Status`) tells you what to do next: The response is a `vault_credential_validation` object. `mcp_probe` includes the failed MCP handshake step; `refresh` includes the outcome of the attempted refresh. -```json +```text wrap { "type": "vault_credential_validation", "credential_id": "vcrd_01ABC...", diff --git a/content/en/managed-agents/webhooks.md b/content/en/managed-agents/webhooks.md index 2bea3f039f..c9164eb815 100644 --- a/content/en/managed-agents/webhooks.md +++ b/content/en/managed-agents/webhooks.md @@ -427,7 +427,7 @@ The top-level `event.id` is unique for each event, not for each delivery. If you * **Subscription scope:** An event is delivered only to endpoints subscribed to its type at the moment it's emitted. An event emitted while no endpoint is subscribed to its type is never delivered, and subscribing later doesn't backfill it, so subscribe to an event type before you need it. -* **Ordering is not guaranteed.** Events aren't delivered in the order they occurred: `session.status_idled` might arrive before `session.outcome_evaluation_ended` even if the outcome was produced first, and a `.deleted` event can arrive before the `.archived` event for the same resource. Drive your state from the resource you fetch, not from the order events arrive in. +* **Ordering:** Events aren't guaranteed to be delivered in the order they occurred: `session.status_idled` might arrive before `session.outcome_evaluation_ended` even if the outcome was produced first, and a `.deleted` event can arrive before the `.archived` event for the same resource. Drive your state from the resource you fetch, not from the order events arrive in. * **Retries:** For each endpoint and event, Anthropic makes up to three delivery attempts (a response that triggers auto-disable, described later in this section, is never retried) with jittered exponential backoff between 5 and 120 seconds. Every attempt delivers the same `event.id`. After the last attempt fails, the event is dropped: it isn't queued for later delivery and there's no signal that it was lost. Webhooks aren't a durable log, so if you need to observe every transition, reconcile by listing or fetching the resource through the API. diff --git a/content/en/managed-agents/workflow-runs.md b/content/en/managed-agents/workflow-runs.md index 3ccdb1aab6..3622af5c0e 100644 --- a/content/en/managed-agents/workflow-runs.md +++ b/content/en/managed-agents/workflow-runs.md @@ -85,7 +85,7 @@ For example, you ask the [contract-review agent](https://platform.claude.com/doc The run's first event lists its phases: -```json +```text { "type": "workflow_run.created", "id": "sevt_01abc...", @@ -106,7 +106,7 @@ The run's first event lists its phases: Each phase event names its phase by `workflow_run_phase_id`. That is an `id` in `phases`, but the API doesn't guarantee it: -```json +```text wrap { "type": "workflow_run.phase_started", "id": "sevt_01def...", @@ -118,7 +118,7 @@ Each phase event names its phase by `workflow_run_phase_id`. That is an `id` in The run's last event reports how it ended: -```json +```text wrap { "type": "workflow_run.status_ended", "id": "sevt_01ghi...", diff --git a/content/en/models/fable-5-1/migration-guide.md b/content/en/models/fable-5-1/migration-guide.md index f4838c0d94..3af989f2fc 100644 --- a/content/en/models/fable-5-1/migration-guide.md +++ b/content/en/models/fable-5-1/migration-guide.md @@ -40,7 +40,7 @@ Where the two models diverge: ## Migrating to Claude Fable 5.1 from Claude Fable 5 -Migration is mostly drop-in. The API surface, limits, per-token pricing, tokenizer, always-on adaptive thinking, refusal handling, and `stop_details` categories all match Claude Fable 5. What changes: forced tool choice returns a 400 error; only Claude Fable 5.1 and Claude Mythos 5.1 read Claude Fable 5.1's thinking blocks, and only in the conversation that produced them; cache reads cost less; the advisor tool (beta) accepts fewer advisors; and agent-loop behavior differs in three ways. The same changes apply to [Claude Mythos 5.1](https://platform.claude.com/docs/en/models/fable-5-1/migration-guide#migrating-from-claude-mythos-5-to-claude-mythos-5-1), except the conversation check on thinking blocks, which Claude Mythos 5.1 doesn't run. +Migration is mostly drop-in. The API surface, limits, per-token pricing, tokenizer, always-on adaptive thinking, refusal handling, and `stop_details` categories all match Claude Fable 5. What changes: forced tool choice returns a 400 error; only Claude Fable 5.1 and Claude Mythos 5.1 read Claude Fable 5.1's thinking blocks, and only in the conversation that produced them; cache reads cost less; the advisor tool (beta) accepts fewer advisors; and agent-loop behavior differs in three ways. The same changes apply to the [Claude Mythos 5.1 migration](https://platform.claude.com/docs/en/models/fable-5-1/migration-guide#migrating-from-claude-mythos-5-to-claude-mythos-5-1), except the conversation check on thinking blocks, which Claude Mythos 5.1 doesn't run. ### Update your model name @@ -956,8 +956,7 @@ model = "claude-mythos-5-1" # After ``` ```bash CLI - ant beta:messages create \ - --beta thinking-binding-controls-2026-08-01 <<'YAML' + ant beta:messages create --beta thinking-binding-controls-2026-08-01 <<'YAML' model: claude-fable-5-1 max_tokens: 16000 thinking: diff --git a/content/en/models/fable-5-1/overview.md b/content/en/models/fable-5-1/overview.md index a852dc0194..ff09e21576 100644 --- a/content/en/models/fable-5-1/overview.md +++ b/content/en/models/fable-5-1/overview.md @@ -18,7 +18,7 @@ Context window: 1M tokens · Max output: 128K tokens · Input pricing: $10 / MTo Claude Fable 5.1 extends Claude Fable 5 at the same input and output prices, with cache reads at a quarter of the cost, and brings stronger long-running agentic coding, multistep research, and document, spreadsheet, and slide work. For most workloads, start with Claude Opus 5.5 (see [Choosing a model](https://platform.claude.com/docs/en/about-claude/models/choosing-a-model)). Use Claude Fable 5.1 for demanding reasoning and long-horizon agentic work, or when your evals on Claude Opus 5.5 at higher effort still don't meet your requirements. Claude Mythos 5.1 offers the same capabilities only to organizations verified through Anthropic's verification programs, such as the [Cyber Verification Program](https://support.claude.com/en/articles/14604842). -If you already call Claude Fable 5, four changes are breaking: [forced tool use returns an error](https://platform.claude.com/docs/en/models/fable-5-1/whats-new-fable-5-1#forced-tool-use-is-not-supported), [only Claude Fable 5.1 and Claude Mythos 5.1 can read Claude Fable 5.1's thinking blocks](https://platform.claude.com/docs/en/models/fable-5-1/whats-new-fable-5-1#thinking-blocks-are-tied-to-the-model-that-produced-them), [editing earlier turns invalidates thinking blocks](https://platform.claude.com/docs/en/models/fable-5-1/whats-new-fable-5-1#editing-earlier-turns-invalidates-thinking-blocks), and [some advisor tool pairings are not supported](https://platform.claude.com/docs/en/models/fable-5-1/whats-new-fable-5-1#advisor-tool-pairings). Five are additive: [per-message effort](https://platform.claude.com/docs/en/models/fable-5-1/whats-new-fable-5-1#change-effort-mid-conversation-beta) (beta), [turn-scoped system messages](https://platform.claude.com/docs/en/models/fable-5-1/whats-new-fable-5-1#turn-scoped-system-messages-beta) (beta), [readable progress updates between tool calls](https://platform.claude.com/docs/en/models/fable-5-1/whats-new-fable-5-1#progress-updates-between-tool-calls-beta) (`display: "updates"`, beta), a [lower cache read price](https://platform.claude.com/docs/en/models/fable-5-1/whats-new-fable-5-1#pricing), and [content provenance](https://platform.claude.com/docs/en/models/fable-5-1/whats-new-fable-5-1#content-provenance). +If you already call Claude Fable 5, four changes are breaking: [forced tool use returns an error](https://platform.claude.com/docs/en/models/fable-5-1/whats-new-fable-5-1#forced-tool-use-is-not-supported), only Claude Fable 5.1 and Claude Mythos 5.1 can [read Claude Fable 5.1's thinking blocks](https://platform.claude.com/docs/en/models/fable-5-1/whats-new-fable-5-1#thinking-blocks-are-tied-to-the-model-that-produced-them), [editing earlier turns invalidates thinking blocks](https://platform.claude.com/docs/en/models/fable-5-1/whats-new-fable-5-1#editing-earlier-turns-invalidates-thinking-blocks), and [some advisor tool pairings are not supported](https://platform.claude.com/docs/en/models/fable-5-1/whats-new-fable-5-1#advisor-tool-pairings). Five are additive: [mid-conversation effort changes](https://platform.claude.com/docs/en/models/fable-5-1/whats-new-fable-5-1#change-effort-mid-conversation-beta) (beta), [turn-scoped system messages](https://platform.claude.com/docs/en/models/fable-5-1/whats-new-fable-5-1#turn-scoped-system-messages-beta) (beta), [readable progress updates between tool calls](https://platform.claude.com/docs/en/models/fable-5-1/whats-new-fable-5-1#progress-updates-between-tool-calls-beta) (`display: "updates"`, beta), a [lower cache read price](https://platform.claude.com/docs/en/models/fable-5-1/whats-new-fable-5-1#pricing), and [content provenance](https://platform.claude.com/docs/en/models/fable-5-1/whats-new-fable-5-1#content-provenance). [What's new in Claude Fable 5.1](https://platform.claude.com/docs/en/models/fable-5-1/whats-new-fable-5-1) diff --git a/content/en/models/fable-5-1/whats-new-fable-5-1.md b/content/en/models/fable-5-1/whats-new-fable-5-1.md index 254da23e8b..3800cca7cf 100644 --- a/content/en/models/fable-5-1/whats-new-fable-5-1.md +++ b/content/en/models/fable-5-1/whats-new-fable-5-1.md @@ -6,7 +6,7 @@ description: Overview of new features, breaking changes, and capability improvem Claude Fable 5.1 extends Claude Fable 5 at the same input and output prices, with cache reads at a quarter of the cost, and brings stronger long-running agentic coding, multistep research, and document, spreadsheet, and slide work. For most workloads, start with Claude Opus 5.5 (see [Choosing a model](https://platform.claude.com/docs/en/about-claude/models/choosing-a-model)). Use Claude Fable 5.1 for demanding reasoning and long-horizon agentic work, or when your evals on Claude Opus 5.5 at higher effort still don't meet your requirements. Claude Mythos 5.1 offers the same capabilities only to organizations verified through Anthropic's verification programs, such as the [Cyber Verification Program](https://support.claude.com/en/articles/14604842). -If you already call Claude Fable 5, four changes are breaking: [forced tool use returns an error](https://platform.claude.com/docs/en/models/fable-5-1/whats-new-fable-5-1#forced-tool-use-is-not-supported), [only Claude Fable 5.1 and Claude Mythos 5.1 can read Claude Fable 5.1's thinking blocks](https://platform.claude.com/docs/en/models/fable-5-1/whats-new-fable-5-1#thinking-blocks-are-tied-to-the-model-that-produced-them), [editing earlier turns invalidates thinking blocks](https://platform.claude.com/docs/en/models/fable-5-1/whats-new-fable-5-1#editing-earlier-turns-invalidates-thinking-blocks), and [some advisor tool pairings are not supported](https://platform.claude.com/docs/en/models/fable-5-1/whats-new-fable-5-1#advisor-tool-pairings). Five are additive: [per-message effort](https://platform.claude.com/docs/en/models/fable-5-1/whats-new-fable-5-1#change-effort-mid-conversation-beta) (beta), [turn-scoped system messages](https://platform.claude.com/docs/en/models/fable-5-1/whats-new-fable-5-1#turn-scoped-system-messages-beta) (beta), [readable progress updates between tool calls](https://platform.claude.com/docs/en/models/fable-5-1/whats-new-fable-5-1#progress-updates-between-tool-calls-beta) (`display: "updates"`, beta), a [lower cache read price](https://platform.claude.com/docs/en/models/fable-5-1/whats-new-fable-5-1#pricing), and [content provenance](https://platform.claude.com/docs/en/models/fable-5-1/whats-new-fable-5-1#content-provenance). +If you already call Claude Fable 5, four changes are breaking: [forced tool use returns an error](https://platform.claude.com/docs/en/models/fable-5-1/whats-new-fable-5-1#forced-tool-use-is-not-supported), only Claude Fable 5.1 and Claude Mythos 5.1 can [read Claude Fable 5.1's thinking blocks](https://platform.claude.com/docs/en/models/fable-5-1/whats-new-fable-5-1#thinking-blocks-are-tied-to-the-model-that-produced-them), [editing earlier turns invalidates thinking blocks](https://platform.claude.com/docs/en/models/fable-5-1/whats-new-fable-5-1#editing-earlier-turns-invalidates-thinking-blocks), and [some advisor tool pairings are not supported](https://platform.claude.com/docs/en/models/fable-5-1/whats-new-fable-5-1#advisor-tool-pairings). Five are additive: [mid-conversation effort changes](https://platform.claude.com/docs/en/models/fable-5-1/whats-new-fable-5-1#change-effort-mid-conversation-beta) (beta), [turn-scoped system messages](https://platform.claude.com/docs/en/models/fable-5-1/whats-new-fable-5-1#turn-scoped-system-messages-beta) (beta), [readable progress updates between tool calls](https://platform.claude.com/docs/en/models/fable-5-1/whats-new-fable-5-1#progress-updates-between-tool-calls-beta) (`display: "updates"`, beta), a [lower cache read price](https://platform.claude.com/docs/en/models/fable-5-1/whats-new-fable-5-1#pricing), and [content provenance](https://platform.claude.com/docs/en/models/fable-5-1/whats-new-fable-5-1#content-provenance). ## Models @@ -59,7 +59,7 @@ These keep later blocks valid: removing a leading run of thinking blocks (oldest Where the check is enforced, a request that replays an invalidated block is rejected with a 400 whose message says `The block is bound to a different conversation`. To drop the block and continue instead, send the `thinking-binding-controls-2026-08-01` beta header with `thinking.block_binding.prefix_mismatch_behavior: "drop_block"`. The drop is reported in `input_transformations` with `reason: "prefix_binding_mismatch"`. -To keep thinking valid across a long session, treat the conversation as append-only. Add instructions with a [mid-conversation system message](https://platform.claude.com/docs/en/build-with-claude/mid-conversation-system-messages) ([turn-scoped](https://platform.claude.com/docs/en/models/fable-5-1/whats-new-fable-5-1#turn-scoped-system-messages-beta) if it should apply to one turn only) and change tools with [mid-conversation tool changes](https://platform.claude.com/docs/en/build-with-claude/mid-conversation-system-messages#mid-conversation-tool-changes) rather than editing `system` or `tools`. Trim context with server-side [context editing](https://platform.claude.com/docs/en/build-with-claude/context-editing) or [compaction](https://platform.claude.com/docs/en/build-with-claude/compaction), which don't count as edits. These patterns also keep the [prompt cache](https://platform.claude.com/docs/en/build-with-claude/prompt-caching) warm. To find out whether your integration edits history, run a session with `prefix_mismatch_behavior: "drop_block"` and log `input_transformations`: the [migration guide](https://platform.claude.com/docs/en/models/fable-5-1/migration-guide#fable-5-1-preserved-thinking) has the three-step check. See [Keeping the prefix unchanged](https://platform.claude.com/docs/en/build-with-claude/preserved-thinking#prefix-check) for the full rules. +To keep thinking valid across a long session, treat the conversation as append-only. Add instructions with a [mid-conversation system message](https://platform.claude.com/docs/en/build-with-claude/mid-conversation-system-messages) (a [turn-scoped system message](https://platform.claude.com/docs/en/models/fable-5-1/whats-new-fable-5-1#turn-scoped-system-messages-beta) if it should apply to one turn only) and change tools with [mid-conversation tool changes](https://platform.claude.com/docs/en/build-with-claude/mid-conversation-system-messages#mid-conversation-tool-changes) rather than editing `system` or `tools`. Trim context with server-side [context editing](https://platform.claude.com/docs/en/build-with-claude/context-editing) or [compaction](https://platform.claude.com/docs/en/build-with-claude/compaction), which don't count as edits. These patterns also keep the [prompt cache](https://platform.claude.com/docs/en/build-with-claude/prompt-caching) warm. To find out whether your integration edits history, run a session with `prefix_mismatch_behavior: "drop_block"` and log `input_transformations`: the migration guide has the three-step [history-editing check](https://platform.claude.com/docs/en/models/fable-5-1/migration-guide#fable-5-1-preserved-thinking). See [Keeping the prefix unchanged](https://platform.claude.com/docs/en/build-with-claude/preserved-thinking#prefix-check) for the full rules. ### Some advisor tool pairings are not supported @@ -93,7 +93,8 @@ On Claude Fable 5.1 you can change the [effort](https://platform.claude.com/docs ``` ```bash CLI - ant beta:messages create --beta mid-conversation-output-config-2026-07-01 <<'YAML' + ant beta:messages create \ + --beta mid-conversation-output-config-2026-07-01 <<'YAML' model: claude-fable-5-1 max_tokens: 4096 output_config: @@ -341,7 +342,7 @@ See [Per-message effort](https://platform.claude.com/docs/en/build-with-claude/e ### Turn-scoped system messages (beta) -A [mid-conversation system message](https://platform.claude.com/docs/en/build-with-claude/mid-conversation-system-messages) can be scoped to one turn. Set `clear_at: "next_user_message"` on a `role: "system"` message and its text carries system-prompt authority for the current turn, then stops rendering once a later `user` message exists. The message stays in `messages` and you keep sending it back verbatim, so nothing earlier in the conversation changes. The [prompt cache](https://platform.claude.com/docs/en/build-with-claude/prompt-caching) keeps matching, later [thinking blocks stay valid](https://platform.claude.com/docs/en/build-with-claude/thinking#preserved-in-conversation), and a cleared message costs no input tokens. Use it for per-turn reminders in a tool loop ("check your inbox before running more code," "the user can't see that tool output") instead of injecting text into the history and deleting it on the next request. Turn-scoped system messages are in beta: include the `mid-conversation-system-clear-at-2026-08-21` beta header. See [Turn-scoped system messages](https://platform.claude.com/docs/en/build-with-claude/mid-conversation-system-messages#turn-scoped-system-messages). +A [mid-conversation system message](https://platform.claude.com/docs/en/build-with-claude/mid-conversation-system-messages) can be scoped to one turn. Set `clear_at: "next_user_message"` on a `role: "system"` message and its text carries system-prompt authority for the current turn, then stops rendering once a later `user` message exists. The message stays in `messages` and you keep sending it back verbatim, so nothing earlier in the conversation changes. The [prompt cache](https://platform.claude.com/docs/en/build-with-claude/prompt-caching) keeps matching, later [thinking blocks stay valid](https://platform.claude.com/docs/en/build-with-claude/thinking#preserved-in-conversation), and a cleared message costs no input tokens. Use it for per-turn reminders in a tool loop ("check your inbox before running more code," "the user can't see that tool output") instead of injecting text into the history and deleting it on the next request. Turn-scoped system messages are in beta: include the `mid-conversation-system-clear-at-2026-08-21` beta header. See [how turn-scoped system messages work](https://platform.claude.com/docs/en/build-with-claude/mid-conversation-system-messages#turn-scoped-system-messages) in Mid-conversation system messages and tool changes. ```json { @@ -391,12 +392,12 @@ These Messages API behaviors carry over from Claude Fable 5 unchanged: Claude Fable 5.1 improves on Claude Fable 5, and the gap is widest at higher [effort](https://platform.claude.com/docs/en/build-with-claude/effort) levels. The gains concentrate in six areas: -* **Agentic coding over long sessions**, including multifile features, large refactors and migrations, debugging, and code review across sessions that run for hours. -* **Knowledge work with documents, spreadsheets, and slides**, taking an analysis from a first question to a finished document, live-formula spreadsheet, or slide deck built from a blank page. -* **Research and search**, with higher accuracy on multistep web research and deep-research tasks that follow up on what they find. -* **Vision**, reading dense charts, filings, and tables nested in PDFs, including with crop-and-zoom tools on charts. -* **Long-context work**, reasoning over and connecting details across the full [1M token context window](https://platform.claude.com/docs/en/build-with-claude/context-windows). -* **Computer use**, operating a browser and desktop applications more reliably and recovering from failed steps. +* **Agentic coding over long sessions**, including multifile features, large refactors and migrations, debugging, and code review across sessions that run for hours +* **Knowledge work with documents, spreadsheets, and slides**, taking an analysis from a first question to a finished document, live-formula spreadsheet, or slide deck built from a blank page +* **Research and search**, with higher accuracy on multistep web research and deep-research tasks that follow up on what they find +* **Vision**, reading dense charts, filings, and tables nested in PDFs, including with crop-and-zoom tools on charts +* **Long-context work**, reasoning over and connecting details across the full [1M token context window](https://platform.claude.com/docs/en/build-with-claude/context-windows) +* **Computer use**, operating a browser and desktop applications more reliably and recovering from failed steps Multilingual performance is comparable to Claude Fable 5. @@ -480,7 +481,7 @@ Then review these items: 2. If you use the advisor tool (beta), choose an advisor at least as capable as Claude Fable 5.1. See [Some advisor tool pairings are not supported](https://platform.claude.com/docs/en/models/fable-5-1/whats-new-fable-5-1#advisor-tool-pairings). 3. Pass thinking blocks back unchanged and keep the history append-only. If your code builds the `messages` array itself, run the [history-editing check](https://platform.claude.com/docs/en/models/fable-5-1/migration-guide#fable-5-1-preserved-thinking): move per-turn reminders you currently inject and delete to [turn-scoped system messages](https://platform.claude.com/docs/en/models/fable-5-1/whats-new-fable-5-1#turn-scoped-system-messages-beta), move `system` and `tools` changes to mid-conversation system messages, trim context server-side or strip thinking blocks from turns you carry across a client-side summary, then pick a production [`prefix_mismatch_behavior`](https://platform.claude.com/docs/en/build-with-claude/thinking#preserved-thinking-controls) and monitor `input_transformations`. 4. Re-tune effort from the default (`high`), and consider [changing it mid-conversation](https://platform.claude.com/docs/en/models/fable-5-1/whats-new-fable-5-1#change-effort-mid-conversation-beta) instead of holding one level for the whole session. -5. In agent loops, watch for one tool call per turn where Claude Fable 5 batched several, and add the per-turn note from [Prompting Claude Fable 5.1](https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/prompting-claude-fable-5-1). +5. In agent loops, watch for one tool call in each turn where Claude Fable 5 batched several, and add the per-turn note from [Prompting Claude Fable 5.1](https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/prompting-claude-fable-5-1). 6. Re-run your evals. Refusal handling, fallback, fallback credit, and the tokenizer carry over unchanged. Cache reads cost less (see [cache read prices](https://platform.claude.com/docs/en/models/fable-5-1/whats-new-fable-5-1#pricing)), and default behavior differs in the ways listed under [Changed from Claude Fable 5](https://platform.claude.com/docs/en/models/fable-5-1/whats-new-fable-5-1#changed-from-claude-fable-5). See the [migration guide](https://platform.claude.com/docs/en/models/fable-5-1/migration-guide) for step-by-step instructions, including from Claude Opus 5 and earlier models. diff --git a/content/en/models/opus-5-5/migration-guide.md b/content/en/models/opus-5-5/migration-guide.md index bbe9d198b6..7f7b3cb154 100644 --- a/content/en/models/opus-5-5/migration-guide.md +++ b/content/en/models/opus-5-5/migration-guide.md @@ -362,7 +362,7 @@ model = "claude-opus-5-5" # After ### Breaking changes -Each change is explained in [What's new in Claude Opus 5.5](https://platform.claude.com/docs/en/models/opus-5-5/whats-new-opus-5-5#breaking-changes); this section gives the code change for each. +Each change is explained under [Breaking changes](https://platform.claude.com/docs/en/models/opus-5-5/whats-new-opus-5-5#breaking-changes) in What's new in Claude Opus 5.5; this section gives the code change for each. #### Thinking can't be disabled @@ -1504,7 +1504,7 @@ This section adds what changed in Claude Opus 4.7, with `claude-opus-4-6` as the [`/v1/messages/count_tokens`](https://platform.claude.com/docs/en/build-with-claude/token-counting) returns a different number of tokens for Claude Opus 5.5 than it did for Claude Opus 4.6. Token efficiency can vary by workload shape. - Update your `max_tokens` parameters to give additional headroom, including compaction triggers, and re-test any code path that estimates tokens client-side or assumes a fixed token-to-character ratio. Use the [Token counting endpoint](https://platform.claude.com/docs/en/build-with-claude/token-counting) to verify. Prompting interventions, [`task_budget`](https://platform.claude.com/docs/en/build-with-claude/task-budgets), and [`effort`](https://platform.claude.com/docs/en/build-with-claude/effort) can help control costs; these controls might trade off model intelligence. + Update your `max_tokens` parameters to give additional headroom, including compaction triggers, and re-test any code path that estimates tokens client-side or assumes a fixed token-to-character ratio. Use the [Token counting](https://platform.claude.com/docs/en/build-with-claude/token-counting) endpoint to verify. Prompting interventions, [`task_budget`](https://platform.claude.com/docs/en/build-with-claude/task-budgets), and [`effort`](https://platform.claude.com/docs/en/build-with-claude/effort) can help control costs; these controls might trade off model intelligence. 5. **Prefill removal (already in effect on Claude Opus 4.6):** Prefilling assistant messages returns a 400 error on Claude Opus 4.6 and later Opus models, including Claude Opus 5.5, so this is a change only if you come from Claude Opus 4.5 or earlier. Use [structured outputs](https://platform.claude.com/docs/en/build-with-claude/structured-outputs) or system prompt instructions instead. @@ -1514,7 +1514,7 @@ Claude Opus 4.7 introduced behavioral differences from Claude Opus 4.6 that are 1. **Built-in progress updates in agentic traces:** Claude Opus 4.7 provides more regular, higher-quality updates to the user throughout long agentic traces. If you've added scaffolding to force interim status messages ("After every 3 tool calls, summarize progress"), try removing it. On Claude Opus 5.5 these updates arrive in `thinking` blocks, which are empty at the default `thinking.display`. To receive them, see [Text between tool calls is returned in thinking blocks](https://platform.claude.com/docs/en/models/opus-5-5/migration-guide#text-between-tool-calls). To shape their length and contents, see [User-facing progress updates](https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/prompting-claude-opus-5-5#user-facing-progress-updates). -2. **Real-time cybersecurity safeguards:** Newly added in Claude Opus 4.7, requests that involve prohibited or high-risk topics might lead to refusals. For legitimate security work such as penetration testing, vulnerability research, or red-teaming, apply to the [Cyber Verification Program](https://support.claude.com/en/articles/14604842-real-time-cyber-safeguards-on-claude-opus-and-sonnet) to request reduced restrictions. The application route depends on how you access Claude. +2. **Real-time cybersecurity safeguards:** These safeguards are new in Claude Opus 4.7: requests that involve prohibited or high-risk topics might lead to refusals. For legitimate security work such as penetration testing, vulnerability research, or red-teaming, apply to the [Cyber Verification Program](https://support.claude.com/en/articles/14604842-real-time-cyber-safeguards-on-claude-opus-and-sonnet) to request reduced restrictions. The application route depends on how you access Claude. 3. **High-resolution image support:** Claude Opus 4.7 is the first Claude model with high-resolution image support. Maximum image resolution is 2,576 pixels on the long edge, up from 1,568 pixels on prior models. This unlocks gains on vision-heavy workloads and is particularly valuable for computer use, screenshot understanding, and document analysis. diff --git a/content/en/models/opus-5-5/whats-new-opus-5-5.md b/content/en/models/opus-5-5/whats-new-opus-5-5.md index e9fab2ed97..7cb59696f4 100644 --- a/content/en/models/opus-5-5/whats-new-opus-5-5.md +++ b/content/en/models/opus-5-5/whats-new-opus-5-5.md @@ -80,8 +80,8 @@ Claude Opus 5.5 differs from Claude Opus 5 in several ways that show up without * **The default effort is `medium`.** A request that omits `effort` runs at `medium`; on Claude Opus 5 it ran at `high`. Set `effort` explicitly and re-run your sweep; see [Calibrate effort](https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/prompting-claude-opus-5-5#calibrate-effort). * **More thinking per turn at a given effort level.** At the same [effort](https://platform.claude.com/docs/en/build-with-claude/effort) setting the model tends to think more per turn than Claude Opus 5, most of all at `xhigh` and `max`. Re-run your effort sweep rather than carrying a setting over, and leave room in `max_tokens` for the thinking. See [Calibrate effort](https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/prompting-claude-opus-5-5#calibrate-effort). -* **Text between tool calls comes back in thinking blocks.** The short notes the model writes between tool calls arrive as [progress-update `thinking` blocks](https://platform.claude.com/docs/en/build-with-claude/thinking#progress-updates) rather than `text` blocks, so at the default `display: "omitted"` an application that streams them to its users goes quiet between tool calls, with no error. The [migration guide](https://platform.claude.com/docs/en/models/opus-5-5/migration-guide#text-between-tool-calls) has the fix for receiving them, and [User-facing progress updates](https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/prompting-claude-opus-5-5#user-facing-progress-updates) covers how to ask for more of them. -* **More safeguard categories.** The model runs a biology safety classifier in addition to the cybersecurity one. As on Claude Opus 5, requests that push it to reproduce its internal reasoning in the response text might be declined with the `reasoning_extraction` category. See [Refusals and fallback](https://platform.claude.com/docs/en/models/opus-5-5/whats-new-opus-5-5#refusals-and-fallback) and [Safeguard refusals](https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/prompting-claude-opus-5-5#safeguard-refusals). +* **Text between tool calls comes back in thinking blocks.** The short notes the model writes between tool calls arrive as [progress-update `thinking` blocks](https://platform.claude.com/docs/en/build-with-claude/thinking#progress-updates) rather than `text` blocks, so at the default `display: "omitted"` an application that streams them to its users goes quiet between tool calls, with no error. The migration guide explains [how to receive text between tool calls](https://platform.claude.com/docs/en/models/opus-5-5/migration-guide#text-between-tool-calls), and [User-facing progress updates](https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/prompting-claude-opus-5-5#user-facing-progress-updates) covers how to ask for more of them. +* **More safeguard categories.** The model runs a biology safety classifier in addition to the cybersecurity one. As on Claude Opus 5, requests that push it to reproduce its internal reasoning in the response text might be declined with the `reasoning_extraction` category. See [Refusals and fallback in Claude Opus 5.5](https://platform.claude.com/docs/en/models/opus-5-5/whats-new-opus-5-5#refusals-and-fallback) and [Safeguard refusals](https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/prompting-claude-opus-5-5#safeguard-refusals). * **Sharper reading of charts, diagrams, and screenshots.** The model reads values off dense charts and layout-dependent visuals much more precisely without tools, so prompt-side vision workarounds built for earlier models might no longer be needed; image tools still add accuracy on the densest inputs. See [Tools for complex visual inputs](https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/prompting-claude-opus-5-5#tools-for-complex-visual-inputs). If your Claude Opus 5 integration ran with thinking disabled, see [Prompts written for thinking disabled](https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/prompting-claude-opus-5-5#prompts-written-for-thinking-disabled) alongside the breaking change [Thinking can't be disabled](https://platform.claude.com/docs/en/models/opus-5-5/whats-new-opus-5-5#thinking-cant-be-disabled). For the capability gains in agentic coding and code review, knowledge work, communication, visual inputs, and computer use, see [Capabilities relevant to prompting](https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/prompting-claude-opus-5-5#capability-improvements). diff --git a/content/en/models/overview.md b/content/en/models/overview.md index f256d366b5..f6b35bc166 100644 --- a/content/en/models/overview.md +++ b/content/en/models/overview.md @@ -84,7 +84,7 @@ The top-level `code_execution` capability is a different check. It reports wheth Current Claude models excel in: * **Performance:** Top-tier results in reasoning, coding, multilingual tasks, long-context handling, honesty, and image processing. See [Prompting best practices](https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/claude-prompting-best-practices) for general and model-specific prompting guidance. -* **Engaging responses:** Claude models are ideal for applications that require rich, human-like interactions. If you prefer more concise responses, adjust your prompts to guide the model toward the desired output length. Refer to the [prompt engineering guides](https://platform.claude.com/docs/en/build-with-claude/prompt-engineering) for details. +* **Engaging responses:** Claude models are ideal for applications that require rich, human-like interactions. If you prefer more concise responses, adjust your prompts to guide the model toward the output length you want. Refer to the [prompt engineering guides](https://platform.claude.com/docs/en/build-with-claude/prompt-engineering) for details. * **Output quality:** When migrating from a previous model generation, you might notice larger improvements in overall performance. If you're on Claude Opus 5 or earlier, see the [Claude Opus 5.5 migration guide](https://platform.claude.com/docs/en/models/opus-5-5/migration-guide). ## Get started with Claude diff --git a/content/en/release-notes/overview.md b/content/en/release-notes/overview.md index 1fb8eb9870..09b022d07f 100644 --- a/content/en/release-notes/overview.md +++ b/content/en/release-notes/overview.md @@ -17,14 +17,16 @@ The Claude Platform release notes list changes to the Claude API, the client SDK * We've released API version `2026-10-21`. [Migrating to API version 2026-10-21](https://platform.claude.com/docs/en/api/migration-2026-10-21) shows how to upgrade. * We've released new versions of the [client SDKs](https://platform.claude.com/docs/en/cli-sdks-libraries/overview) and the [`ant` CLI](https://platform.claude.com/docs/en/cli-sdks-libraries/cli/quickstart) that send API version `2026-10-21` by default: Python SDK 2.0.0, TypeScript SDK 1.0.0, C# SDK 13.0.0, Go SDK 2.0.0, Java SDK 3.0.0, PHP SDK 1.0.0, Ruby SDK 2.0.0, and `ant` CLI 2.0.0. See [Switch to 2026-10-21](https://platform.claude.com/docs/en/api/migration-2026-10-21#upgrade). * The new SDK and CLI versions also have breaking changes that don't depend on the API version, and they are licensed under Apache 2.0 instead of the MIT License. See [SDK and CLI changes](https://platform.claude.com/docs/en/api/migration-2026-10-21#sdk-changes). - -- We've added the `enforcement_status` and `enforcement_actions` fields to [user profiles](https://platform.claude.com/docs/en/manage-claude/user-profiles), so you can see whether Anthropic has restricted or banned one of your end customers. To find the profiles that have an open restriction or ban, [list your profiles](https://platform.claude.com/docs/en/api/user_profiles/list) with the new `enforcement_status[]` filter. See [Check whether Anthropic has restricted or banned a profile](https://platform.claude.com/docs/en/manage-claude/user-profiles#check-whether-anthropic-has-restricted-or-banned-a-profile). +* We've added the `enforcement_status` and `enforcement_actions` fields to [user profiles](https://platform.claude.com/docs/en/manage-claude/user-profiles), so you can see whether Anthropic has restricted or banned one of your end customers. To find the profiles that have an open restriction or ban, [list your profiles](https://platform.claude.com/docs/en/api/user_profiles/list) with the new `enforcement_status[]` filter. See [Check whether Anthropic has restricted or banned a profile](https://platform.claude.com/docs/en/manage-claude/user-profiles#check-whether-anthropic-has-restricted-or-banned-a-profile). ### October 20, 2026 * [Inference hooks](https://platform.claude.com/docs/en/manage-claude/inference-hooks) are out of beta for Claude Enterprise organizations. * We've launched [user profiles](https://platform.claude.com/docs/en/manage-claude/user-profiles), so you can tell Anthropic which of your end customers each API request is for. If you operate a platform or gateway, or resell API access, a safety enforcement action can then apply to one end customer instead of your whole organization. The SDK and the `ant` CLI support the new [`/v1/user_profiles` endpoints](https://platform.claude.com/docs/en/api/user_profiles). * We've added [organization webhooks](https://platform.claude.com/docs/en/manage-claude/organization-webhooks) to the [Admin API](https://platform.claude.com/docs/en/manage-claude/admin-api), in beta with the `webhooks-2026-10-07` beta header. Its [`/v1/organizations/webhooks` endpoints](https://platform.claude.com/docs/en/api/beta/organization/webhooks) register webhook endpoints for two event types: one for when Anthropic restricts or bans one of your organization's user profiles, and one for when the restriction or ban ends. To request access, contact your Anthropic account team. +* Organization admins can now turn off web fetch for their organization on the [**Capabilities**](https://platform.claude.com/settings/capabilities) page of the Claude Console. With web fetch off, a Messages API request that includes the web fetch tool fails with a 400 error. In a Claude Managed Agents session, `web_fetch` calls return an error result to the agent instead. With web fetch on, admins can also set allowed or blocked domains for web fetch on the same page. See [Web fetch tool](https://platform.claude.com/docs/en/agents-and-tools/tool-use/web-fetch-tool#how-to-use-web-fetch) and [Domain filtering](https://platform.claude.com/docs/en/agents-and-tools/tool-use/server-tools#domain-filtering). +* In Claude Managed Agents, the [`web_fetch` tool](https://platform.claude.com/docs/en/managed-agents/tools#available-tools) now follows your organization's web fetch domain restrictions set on the [**Capabilities**](https://platform.claude.com/settings/capabilities) page of the Claude Console. A URL, including one reached by a redirect, must pass both the organization's list and the `allowed_domains` or `blocked_domains` list on the agent's `web_fetch` tool. See [Restrict web search and web fetch domains](https://platform.claude.com/docs/en/managed-agents/tools-web-restrictions). +* In Claude Managed Agents, sessions follow your organization's web search settings on the [**Capabilities**](https://platform.claude.com/settings/capabilities) page of the Claude Console: the **Allow web search** setting since October 6, and its web search domain restrictions since October 14. The agent receives only the search results that both the organization's domain restrictions and the `allowed_domains` or `blocked_domains` list on the agent's [`web_search` tool](https://platform.claude.com/docs/en/managed-agents/tools#available-tools) allow. See [Restrict web search and web fetch domains](https://platform.claude.com/docs/en/managed-agents/tools-web-restrictions). ### October 15, 2026 @@ -37,7 +39,6 @@ The Claude Platform release notes list changes to the Claude API, the client SDK * We've launched [OpenTelemetry export](https://platform.claude.com/docs/en/manage-claude/opentelemetry) in beta, so you can trace Messages API requests and Claude Managed Agents sessions in your observability platform. The Claude SDK emits spans in Python, TypeScript, C#, Go, Java, PHP, and Ruby. To get spans from the API, [add an OpenTelemetry destination](https://platform.claude.com/docs/en/manage-claude/opentelemetry/api#add-a-destination) in the Claude Console. * Claude Managed Agents [scheduled deployments](https://platform.claude.com/docs/en/managed-agents/scheduled-deployments) are now available on [Claude Platform on AWS](https://platform.claude.com/docs/en/build-with-claude/claude-platform-on-aws#claude-managed-agents). -* In Claude Managed Agents, the [`web_search` tool](https://platform.claude.com/docs/en/managed-agents/tools#available-tools) now follows your organization's web search domain restrictions set in the Claude Console. The agent receives only the search results that both the organization's domain restrictions and the `allowed_domains` or `blocked_domains` list on the agent's `web_search` tool allow. Sessions have followed the organization's **Allow web search** setting since October 6. See [Restrict web search and web fetch domains](https://platform.claude.com/docs/en/managed-agents/tools-web-restrictions). ### October 9, 2026 diff --git a/content/en/release-notes/system-prompts/claude-fable-5-1.md b/content/en/release-notes/system-prompts/claude-fable-5-1.md index 7b281c7013..aa72e8147d 100644 --- a/content/en/release-notes/system-prompts/claude-fable-5-1.md +++ b/content/en/release-notes/system-prompts/claude-fable-5-1.md @@ -1,7 +1,7 @@ --- title: Claude Fable 5.1 system prompts url: https://platform.claude.com/docs/en/release-notes/system-prompts/claude-fable-5-1 -description: See updates to the core system prompt for Claude Fable 5.1 on [claude.ai](https://claude.ai) and the [Claude iOS app](https://anthropic.com/ios) and [Claude Android app](https://anthropic.com/android). +description: See updates to the core system prompt for Claude Fable 5.1 on [claude.ai](https://claude.ai), the [Claude iOS app](https://anthropic.com/ios), and the [Claude Android app](https://anthropic.com/android). --- ## September 1, 2026 diff --git a/content/en/release-notes/system-prompts/claude-fable-5.md b/content/en/release-notes/system-prompts/claude-fable-5.md index b8f552e1e6..7ffe81e1a9 100644 --- a/content/en/release-notes/system-prompts/claude-fable-5.md +++ b/content/en/release-notes/system-prompts/claude-fable-5.md @@ -1,7 +1,7 @@ --- title: Claude Fable 5 system prompts url: https://platform.claude.com/docs/en/release-notes/system-prompts/claude-fable-5 -description: See updates to the core system prompt for Claude Fable 5 on [claude.ai](https://claude.ai) and the [Claude iOS app](https://anthropic.com/ios) and [Claude Android app](https://anthropic.com/android). +description: See updates to the core system prompt for Claude Fable 5 on [claude.ai](https://claude.ai), the [Claude iOS app](https://anthropic.com/ios), and the [Claude Android app](https://anthropic.com/android). --- ## June 9, 2026 diff --git a/content/en/release-notes/system-prompts/claude-haiku-3-5.md b/content/en/release-notes/system-prompts/claude-haiku-3-5.md index ae4e53c05e..fe88c20936 100644 --- a/content/en/release-notes/system-prompts/claude-haiku-3-5.md +++ b/content/en/release-notes/system-prompts/claude-haiku-3-5.md @@ -1,7 +1,7 @@ --- title: Claude Haiku 3.5 system prompts url: https://platform.claude.com/docs/en/release-notes/system-prompts/claude-haiku-3-5 -description: See updates to the core system prompt for Claude Haiku 3.5 on [claude.ai](https://claude.ai) and the [Claude iOS app](https://anthropic.com/ios) and [Claude Android app](https://anthropic.com/android). +description: See updates to the core system prompt for Claude Haiku 3.5 on [claude.ai](https://claude.ai), the [Claude iOS app](https://anthropic.com/ios), and the [Claude Android app](https://anthropic.com/android). --- ## October 22, 2024 diff --git a/content/en/release-notes/system-prompts/claude-haiku-3.md b/content/en/release-notes/system-prompts/claude-haiku-3.md index a1c5750ae0..f4bf796b66 100644 --- a/content/en/release-notes/system-prompts/claude-haiku-3.md +++ b/content/en/release-notes/system-prompts/claude-haiku-3.md @@ -1,7 +1,7 @@ --- title: Claude Haiku 3 system prompts url: https://platform.claude.com/docs/en/release-notes/system-prompts/claude-haiku-3 -description: See updates to the core system prompt for Claude Haiku 3 on [claude.ai](https://claude.ai) and the [Claude iOS app](https://anthropic.com/ios) and [Claude Android app](https://anthropic.com/android). +description: See updates to the core system prompt for Claude Haiku 3 on [claude.ai](https://claude.ai), the [Claude iOS app](https://anthropic.com/ios), and the [Claude Android app](https://anthropic.com/android). --- ## July 12, 2024 diff --git a/content/en/release-notes/system-prompts/claude-haiku-4-5.md b/content/en/release-notes/system-prompts/claude-haiku-4-5.md index 438fa367a5..5cd23c9e99 100644 --- a/content/en/release-notes/system-prompts/claude-haiku-4-5.md +++ b/content/en/release-notes/system-prompts/claude-haiku-4-5.md @@ -1,7 +1,7 @@ --- title: Claude Haiku 4.5 system prompts url: https://platform.claude.com/docs/en/release-notes/system-prompts/claude-haiku-4-5 -description: See updates to the core system prompt for Claude Haiku 4.5 on [claude.ai](https://claude.ai) and the [Claude iOS app](https://anthropic.com/ios) and [Claude Android app](https://anthropic.com/android). +description: See updates to the core system prompt for Claude Haiku 4.5 on [claude.ai](https://claude.ai), the [Claude iOS app](https://anthropic.com/ios), and the [Claude Android app](https://anthropic.com/android). --- Changes between the following dated versions are marked with `**` around the changed text. diff --git a/content/en/release-notes/system-prompts/claude-haiku-5-5.md b/content/en/release-notes/system-prompts/claude-haiku-5-5.md index d0f018f3e4..8b7daa32c5 100644 --- a/content/en/release-notes/system-prompts/claude-haiku-5-5.md +++ b/content/en/release-notes/system-prompts/claude-haiku-5-5.md @@ -1,7 +1,7 @@ --- title: Claude Haiku 5.5 system prompts url: https://platform.claude.com/docs/en/release-notes/system-prompts/claude-haiku-5-5 -description: See updates to the core system prompt for Claude Haiku 5.5 on [claude.ai](https://claude.ai) and the [Claude iOS app](https://anthropic.com/ios) and [Claude Android app](https://anthropic.com/android). +description: See updates to the core system prompt for Claude Haiku 5.5 on [claude.ai](https://claude.ai), the [Claude iOS app](https://anthropic.com/ios), and the [Claude Android app](https://anthropic.com/android). --- ## October 7, 2026 diff --git a/content/en/release-notes/system-prompts/claude-opus-3.md b/content/en/release-notes/system-prompts/claude-opus-3.md index 20962446f6..88cd4ed6ab 100644 --- a/content/en/release-notes/system-prompts/claude-opus-3.md +++ b/content/en/release-notes/system-prompts/claude-opus-3.md @@ -1,7 +1,7 @@ --- title: Claude Opus 3 system prompts url: https://platform.claude.com/docs/en/release-notes/system-prompts/claude-opus-3 -description: See updates to the core system prompt for Claude Opus 3 on [claude.ai](https://claude.ai) and the [Claude iOS app](https://anthropic.com/ios) and [Claude Android app](https://anthropic.com/android). +description: See updates to the core system prompt for Claude Opus 3 on [claude.ai](https://claude.ai), the [Claude iOS app](https://anthropic.com/ios), and the [Claude Android app](https://anthropic.com/android). --- ## July 12, 2024 diff --git a/content/en/release-notes/system-prompts/claude-opus-4-1.md b/content/en/release-notes/system-prompts/claude-opus-4-1.md index 36a9897965..b417febec1 100644 --- a/content/en/release-notes/system-prompts/claude-opus-4-1.md +++ b/content/en/release-notes/system-prompts/claude-opus-4-1.md @@ -1,7 +1,7 @@ --- title: Claude Opus 4.1 system prompts url: https://platform.claude.com/docs/en/release-notes/system-prompts/claude-opus-4-1 -description: See updates to the core system prompt for Claude Opus 4.1 on [claude.ai](https://claude.ai) and the [Claude iOS app](https://anthropic.com/ios) and [Claude Android app](https://anthropic.com/android). +description: See updates to the core system prompt for Claude Opus 4.1 on [claude.ai](https://claude.ai), the [Claude iOS app](https://anthropic.com/ios), and the [Claude Android app](https://anthropic.com/android). --- ## August 5, 2025 diff --git a/content/en/release-notes/system-prompts/claude-opus-4-5.md b/content/en/release-notes/system-prompts/claude-opus-4-5.md index 7ec7ed49a9..cafc81e482 100644 --- a/content/en/release-notes/system-prompts/claude-opus-4-5.md +++ b/content/en/release-notes/system-prompts/claude-opus-4-5.md @@ -1,7 +1,7 @@ --- title: Claude Opus 4.5 system prompts url: https://platform.claude.com/docs/en/release-notes/system-prompts/claude-opus-4-5 -description: See updates to the core system prompt for Claude Opus 4.5 on [claude.ai](https://claude.ai) and the [Claude iOS app](https://anthropic.com/ios) and [Claude Android app](https://anthropic.com/android). +description: See updates to the core system prompt for Claude Opus 4.5 on [claude.ai](https://claude.ai), the [Claude iOS app](https://anthropic.com/ios), and the [Claude Android app](https://anthropic.com/android). --- Changes between the following dated versions are marked with `**` around the changed text. diff --git a/content/en/release-notes/system-prompts/claude-opus-4-6.md b/content/en/release-notes/system-prompts/claude-opus-4-6.md index 24be806ce6..6224053efc 100644 --- a/content/en/release-notes/system-prompts/claude-opus-4-6.md +++ b/content/en/release-notes/system-prompts/claude-opus-4-6.md @@ -1,7 +1,7 @@ --- title: Claude Opus 4.6 system prompts url: https://platform.claude.com/docs/en/release-notes/system-prompts/claude-opus-4-6 -description: See updates to the core system prompt for Claude Opus 4.6 on [claude.ai](https://claude.ai) and the [Claude iOS app](https://anthropic.com/ios) and [Claude Android app](https://anthropic.com/android). +description: See updates to the core system prompt for Claude Opus 4.6 on [claude.ai](https://claude.ai), the [Claude iOS app](https://anthropic.com/ios), and the [Claude Android app](https://anthropic.com/android). --- ## February 5, 2026 diff --git a/content/en/release-notes/system-prompts/claude-opus-4-7.md b/content/en/release-notes/system-prompts/claude-opus-4-7.md index 83b3aff47e..522b0f6927 100644 --- a/content/en/release-notes/system-prompts/claude-opus-4-7.md +++ b/content/en/release-notes/system-prompts/claude-opus-4-7.md @@ -1,7 +1,7 @@ --- title: Claude Opus 4.7 system prompts url: https://platform.claude.com/docs/en/release-notes/system-prompts/claude-opus-4-7 -description: See updates to the core system prompt for Claude Opus 4.7 on [claude.ai](https://claude.ai) and the [Claude iOS app](https://anthropic.com/ios) and [Claude Android app](https://anthropic.com/android). +description: See updates to the core system prompt for Claude Opus 4.7 on [claude.ai](https://claude.ai), the [Claude iOS app](https://anthropic.com/ios), and the [Claude Android app](https://anthropic.com/android). --- ## April 16, 2026 diff --git a/content/en/release-notes/system-prompts/claude-opus-4-8.md b/content/en/release-notes/system-prompts/claude-opus-4-8.md index cf351257c8..4c1f702727 100644 --- a/content/en/release-notes/system-prompts/claude-opus-4-8.md +++ b/content/en/release-notes/system-prompts/claude-opus-4-8.md @@ -1,7 +1,7 @@ --- title: Claude Opus 4.8 system prompts url: https://platform.claude.com/docs/en/release-notes/system-prompts/claude-opus-4-8 -description: See updates to the core system prompt for Claude Opus 4.8 on [claude.ai](https://claude.ai) and the [Claude iOS app](https://anthropic.com/ios) and [Claude Android app](https://anthropic.com/android). +description: See updates to the core system prompt for Claude Opus 4.8 on [claude.ai](https://claude.ai), the [Claude iOS app](https://anthropic.com/ios), and the [Claude Android app](https://anthropic.com/android). --- ## May 28, 2026 diff --git a/content/en/release-notes/system-prompts/claude-opus-4.md b/content/en/release-notes/system-prompts/claude-opus-4.md index a152cb6086..7a5c0e1262 100644 --- a/content/en/release-notes/system-prompts/claude-opus-4.md +++ b/content/en/release-notes/system-prompts/claude-opus-4.md @@ -1,7 +1,7 @@ --- title: Claude Opus 4 system prompts url: https://platform.claude.com/docs/en/release-notes/system-prompts/claude-opus-4 -description: See updates to the core system prompt for Claude Opus 4 on [claude.ai](https://claude.ai) and the [Claude iOS app](https://anthropic.com/ios) and [Claude Android app](https://anthropic.com/android). +description: See updates to the core system prompt for Claude Opus 4 on [claude.ai](https://claude.ai), the [Claude iOS app](https://anthropic.com/ios), and the [Claude Android app](https://anthropic.com/android). --- ## August 5, 2025 diff --git a/content/en/release-notes/system-prompts/claude-opus-5-5.md b/content/en/release-notes/system-prompts/claude-opus-5-5.md index ebd3c05953..8d6cffde2b 100644 --- a/content/en/release-notes/system-prompts/claude-opus-5-5.md +++ b/content/en/release-notes/system-prompts/claude-opus-5-5.md @@ -1,7 +1,7 @@ --- title: Claude Opus 5.5 system prompts url: https://platform.claude.com/docs/en/release-notes/system-prompts/claude-opus-5-5 -description: See updates to the core system prompt for Claude Opus 5.5 on [claude.ai](https://claude.ai) and the [Claude iOS app](https://anthropic.com/ios) and [Claude Android app](https://anthropic.com/android). +description: See updates to the core system prompt for Claude Opus 5.5 on [claude.ai](https://claude.ai), the [Claude iOS app](https://anthropic.com/ios), and the [Claude Android app](https://anthropic.com/android). --- ## September 22, 2026 diff --git a/content/en/release-notes/system-prompts/claude-opus-5.md b/content/en/release-notes/system-prompts/claude-opus-5.md index 2d7d7186c5..c1179af201 100644 --- a/content/en/release-notes/system-prompts/claude-opus-5.md +++ b/content/en/release-notes/system-prompts/claude-opus-5.md @@ -1,7 +1,7 @@ --- title: Claude Opus 5 system prompts url: https://platform.claude.com/docs/en/release-notes/system-prompts/claude-opus-5 -description: See updates to the core system prompt for Claude Opus 5 on [claude.ai](https://claude.ai) and the [Claude iOS app](https://anthropic.com/ios) and [Claude Android app](https://anthropic.com/android). +description: See updates to the core system prompt for Claude Opus 5 on [claude.ai](https://claude.ai), the [Claude iOS app](https://anthropic.com/ios), and the [Claude Android app](https://anthropic.com/android). --- ## July 24, 2026 diff --git a/content/en/release-notes/system-prompts/claude-sonnet-3-5.md b/content/en/release-notes/system-prompts/claude-sonnet-3-5.md index 5c3c678640..9d1db666ce 100644 --- a/content/en/release-notes/system-prompts/claude-sonnet-3-5.md +++ b/content/en/release-notes/system-prompts/claude-sonnet-3-5.md @@ -1,7 +1,7 @@ --- title: Claude Sonnet 3.5 system prompts url: https://platform.claude.com/docs/en/release-notes/system-prompts/claude-sonnet-3-5 -description: See updates to the core system prompt for Claude Sonnet 3.5 on [claude.ai](https://claude.ai) and the [Claude iOS app](https://anthropic.com/ios) and [Claude Android app](https://anthropic.com/android). +description: See updates to the core system prompt for Claude Sonnet 3.5 on [claude.ai](https://claude.ai), the [Claude iOS app](https://anthropic.com/ios), and the [Claude Android app](https://anthropic.com/android). --- Changes between the following dated versions are marked with `**` around the changed text. diff --git a/content/en/release-notes/system-prompts/claude-sonnet-3-7.md b/content/en/release-notes/system-prompts/claude-sonnet-3-7.md index 3d527356c7..d8d996cb69 100644 --- a/content/en/release-notes/system-prompts/claude-sonnet-3-7.md +++ b/content/en/release-notes/system-prompts/claude-sonnet-3-7.md @@ -1,7 +1,7 @@ --- title: Claude Sonnet 3.7 system prompts url: https://platform.claude.com/docs/en/release-notes/system-prompts/claude-sonnet-3-7 -description: See updates to the core system prompt for Claude Sonnet 3.7 on [claude.ai](https://claude.ai) and the [Claude iOS app](https://anthropic.com/ios) and [Claude Android app](https://anthropic.com/android). +description: See updates to the core system prompt for Claude Sonnet 3.7 on [claude.ai](https://claude.ai), the [Claude iOS app](https://anthropic.com/ios), and the [Claude Android app](https://anthropic.com/android). --- ## February 24, 2025 diff --git a/content/en/release-notes/system-prompts/claude-sonnet-4-5.md b/content/en/release-notes/system-prompts/claude-sonnet-4-5.md index 2f9dc3ec17..d83b2049ab 100644 --- a/content/en/release-notes/system-prompts/claude-sonnet-4-5.md +++ b/content/en/release-notes/system-prompts/claude-sonnet-4-5.md @@ -1,7 +1,7 @@ --- title: Claude Sonnet 4.5 system prompts url: https://platform.claude.com/docs/en/release-notes/system-prompts/claude-sonnet-4-5 -description: See updates to the core system prompt for Claude Sonnet 4.5 on [claude.ai](https://claude.ai) and the [Claude iOS app](https://anthropic.com/ios) and [Claude Android app](https://anthropic.com/android). +description: See updates to the core system prompt for Claude Sonnet 4.5 on [claude.ai](https://claude.ai), the [Claude iOS app](https://anthropic.com/ios), and the [Claude Android app](https://anthropic.com/android). --- Changes between the following dated versions are marked with `**` around the changed text. diff --git a/content/en/release-notes/system-prompts/claude-sonnet-4-6.md b/content/en/release-notes/system-prompts/claude-sonnet-4-6.md index 351c8265c9..fdbd207491 100644 --- a/content/en/release-notes/system-prompts/claude-sonnet-4-6.md +++ b/content/en/release-notes/system-prompts/claude-sonnet-4-6.md @@ -1,7 +1,7 @@ --- title: Claude Sonnet 4.6 system prompts url: https://platform.claude.com/docs/en/release-notes/system-prompts/claude-sonnet-4-6 -description: See updates to the core system prompt for Claude Sonnet 4.6 on [claude.ai](https://claude.ai) and the [Claude iOS app](https://anthropic.com/ios) and [Claude Android app](https://anthropic.com/android). +description: See updates to the core system prompt for Claude Sonnet 4.6 on [claude.ai](https://claude.ai), the [Claude iOS app](https://anthropic.com/ios), and the [Claude Android app](https://anthropic.com/android). --- ## October 7, 2026 diff --git a/content/en/release-notes/system-prompts/claude-sonnet-4.md b/content/en/release-notes/system-prompts/claude-sonnet-4.md index a909dcdae2..a285cfee7d 100644 --- a/content/en/release-notes/system-prompts/claude-sonnet-4.md +++ b/content/en/release-notes/system-prompts/claude-sonnet-4.md @@ -1,7 +1,7 @@ --- title: Claude Sonnet 4 system prompts url: https://platform.claude.com/docs/en/release-notes/system-prompts/claude-sonnet-4 -description: See updates to the core system prompt for Claude Sonnet 4 on [claude.ai](https://claude.ai) and the [Claude iOS app](https://anthropic.com/ios) and [Claude Android app](https://anthropic.com/android). +description: See updates to the core system prompt for Claude Sonnet 4 on [claude.ai](https://claude.ai), the [Claude iOS app](https://anthropic.com/ios), and the [Claude Android app](https://anthropic.com/android). --- ## August 5, 2025 diff --git a/content/en/release-notes/system-prompts/claude-sonnet-5-5.md b/content/en/release-notes/system-prompts/claude-sonnet-5-5.md index 539707e1c6..56d9880465 100644 --- a/content/en/release-notes/system-prompts/claude-sonnet-5-5.md +++ b/content/en/release-notes/system-prompts/claude-sonnet-5-5.md @@ -1,7 +1,7 @@ --- title: Claude Sonnet 5.5 system prompts url: https://platform.claude.com/docs/en/release-notes/system-prompts/claude-sonnet-5-5 -description: See updates to the core system prompt for Claude Sonnet 5.5 on [claude.ai](https://claude.ai) and the [Claude iOS app](https://anthropic.com/ios) and [Claude Android app](https://anthropic.com/android). +description: See updates to the core system prompt for Claude Sonnet 5.5 on [claude.ai](https://claude.ai), the [Claude iOS app](https://anthropic.com/ios), and the [Claude Android app](https://anthropic.com/android). --- ## October 7, 2026 diff --git a/content/en/release-notes/system-prompts/claude-sonnet-5.md b/content/en/release-notes/system-prompts/claude-sonnet-5.md index da0da94e10..8183bc389d 100644 --- a/content/en/release-notes/system-prompts/claude-sonnet-5.md +++ b/content/en/release-notes/system-prompts/claude-sonnet-5.md @@ -1,7 +1,7 @@ --- title: Claude Sonnet 5 system prompts url: https://platform.claude.com/docs/en/release-notes/system-prompts/claude-sonnet-5 -description: See updates to the core system prompt for Claude Sonnet 5 on [claude.ai](https://claude.ai) and the [Claude iOS app](https://anthropic.com/ios) and [Claude Android app](https://anthropic.com/android). +description: See updates to the core system prompt for Claude Sonnet 5 on [claude.ai](https://claude.ai), the [Claude iOS app](https://anthropic.com/ios), and the [Claude Android app](https://anthropic.com/android). --- ## June 30, 2026 diff --git a/content/en/release-notes/system-prompts/overview.md b/content/en/release-notes/system-prompts/overview.md index a86c588f33..1b0c365ef9 100644 --- a/content/en/release-notes/system-prompts/overview.md +++ b/content/en/release-notes/system-prompts/overview.md @@ -1,7 +1,7 @@ --- title: System prompts url: https://platform.claude.com/docs/en/release-notes/system-prompts/overview -description: See updates to the core system prompts on [claude.ai](https://claude.ai) and the [Claude iOS app](https://anthropic.com/ios) and [Claude Android app](https://anthropic.com/android). +description: See updates to the core system prompts on [claude.ai](https://claude.ai), the [Claude iOS app](https://anthropic.com/ios), and the [Claude Android app](https://anthropic.com/android). --- Claude's web interface ([claude.ai](https://claude.ai)) and mobile apps use a system prompt to provide up-to-date information, such as the current date, to Claude at the start of every conversation. The system prompt also encourages certain behaviors, such as always providing code snippets in Markdown. This prompt is periodically updated to improve Claude's responses. These system prompt updates do not apply to the Claude API. Some models have multiple dated entries on their pages. diff --git a/content/en/test-and-evaluate/develop-tests.md b/content/en/test-and-evaluate/develop-tests.md index 5c097f8653..3b1e00f904 100644 --- a/content/en/test-and-evaluate/develop-tests.md +++ b/content/en/test-and-evaluate/develop-tests.md @@ -98,10 +98,10 @@ Here are some criteria that might be important for your use case. This list is n Most use cases need multidimensional evaluation along several success criteria. - | | Criteria | - | ---- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | - | Bad | The model should classify sentiments well | - | Good | On a held-out test set of 10,000 diverse Twitter posts, the sentiment analysis model should achieve:
- an F1 score of at least 0.85
- 99.5% of outputs are non-toxic
- 90% of errors would cause inconvenience, not egregious error\*
- 95% response time \< 200ms | + | | Criteria | + | ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | + | Bad | The model should classify sentiments well | + | Good | On a held-out test set of 10,000 diverse Twitter posts, the sentiment analysis model should achieve:
- an F1 score of at least 0.85
- 99.5% non-toxic outputs
- 90% of errors would cause inconvenience, not egregious error\*
- 95% response time \< 200ms | \*In reality, you would also define what "inconvenience" and "egregious" mean.
@@ -125,7 +125,7 @@ Most use cases need multidimensional evaluation along several success criteria. ### Example evals - + **What it measures:** Exact match evals measure whether the model's output matches a predefined correct answer, typically after normalizing whitespace and case. It's a simple, unambiguous metric that's perfect for tasks with clear-cut, categorical answers such as sentiment analysis (positive, negative, neutral). **Example eval test cases:** 1,000 tweets with human-labeled sentiments. @@ -487,7 +487,7 @@ Most use cases need multidimensional evaluation along several success criteria. - + **What it measures:** Cosine similarity measures the similarity between two vectors (in this case, sentence embeddings of the model's output using [Sentence-BERT (SBERT)](https://sbert.net/)) by computing the cosine of the angle between them. Values closer to 1 indicate higher similarity. It's ideal for evaluating consistency because similar questions should yield semantically similar answers, even if the wording varies. **Example eval test cases:** 50 groups with a few paraphrased versions each. @@ -1033,7 +1033,7 @@ Most use cases need multidimensional evaluation along several success criteria. - + **What it measures:** ROUGE-L (Recall-Oriented Understudy for Gisting Evaluation - Longest Common Subsequence) evaluates the quality of generated summaries. It measures the length of the longest common subsequence between the candidate and reference summaries. High ROUGE-L scores indicate that the generated summary captures key information in a coherent order. **Example eval test cases:** 200 articles with reference summaries. @@ -1560,7 +1560,7 @@ Most use cases need multidimensional evaluation along several success criteria. - + **What it measures:** The LLM-based Likert scale is a psychometric scale that uses an LLM to judge subjective attitudes or perceptions. Here, it's used to rate the tone of responses on a scale from 1 to 5. It's ideal for evaluating nuanced aspects such as empathy, professionalism, or patience that are difficult to quantify with traditional metrics. **Example eval test cases:** 100 customer inquiries with target tone (empathetic, patient, professional). @@ -2031,7 +2031,7 @@ Most use cases need multidimensional evaluation along several success criteria. - + **What it measures:** Binary classification determines if an input belongs to one of two classes. Here, it's used to classify whether a response contains PHI. This method can account for context and identify subtle or implicit forms of PHI that rule-based systems might miss. **Example eval test cases:** 500 simulated patient queries, some with PHI. @@ -2584,7 +2584,7 @@ Most use cases need multidimensional evaluation along several success criteria. - + **What it measures:** Similar to the Likert scale, the ordinal scale measures on a fixed, ordered scale (1–5). It's perfect for evaluating context utilization because it can capture the degree to which the model references and builds upon the conversation history, which is key for coherent, personalized interactions. **Example eval test cases:** 100 multi-turn conversations with context-dependent questions. @@ -3240,7 +3240,7 @@ When deciding which method to use to grade evals, choose the fastest, most relia A given use case, or even a specific success criterion for that use case, might require several rubrics for holistic evaluation. -* **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. +* **Be 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. * **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. diff --git a/content/en/test-and-evaluate/strengthen-guardrails/handle-streaming-refusals.md b/content/en/test-and-evaluate/strengthen-guardrails/handle-streaming-refusals.md index 1795a53ed5..e870bc1729 100644 --- a/content/en/test-and-evaluate/strengthen-guardrails/handle-streaming-refusals.md +++ b/content/en/test-and-evaluate/strengthen-guardrails/handle-streaming-refusals.md @@ -14,7 +14,7 @@ Starting with Claude 4 models, streaming responses from Claude's API return **`s When streaming classifiers detect content that violates Anthropic's policies, the API returns this response: -```json +```text { "role": "assistant", "content": [ diff --git a/content/en/test-and-evaluate/strengthen-guardrails/increase-consistency.md b/content/en/test-and-evaluate/strengthen-guardrails/increase-consistency.md index 0c9c3e4b2a..982318769a 100644 --- a/content/en/test-and-evaluate/strengthen-guardrails/increase-consistency.md +++ b/content/en/test-and-evaluate/strengthen-guardrails/increase-consistency.md @@ -316,7 +316,7 @@ For tasks requiring consistent context (for example, chatbots, knowledge bases), ## Chain prompts for complex tasks -Break down complex tasks into smaller, consistent subtasks. Each subtask gets Claude's full attention, reducing inconsistency errors across scaled workflows. +Break down complex tasks into smaller, consistent subtasks. Each prompt then covers a single subtask, reducing inconsistency errors across scaled workflows. ## Keep Claude in character diff --git a/content/en/test-and-evaluate/strengthen-guardrails/reduce-latency.md b/content/en/test-and-evaluate/strengthen-guardrails/reduce-latency.md index b0580aa58d..86cdf20eb8 100644 --- a/content/en/test-and-evaluate/strengthen-guardrails/reduce-latency.md +++ b/content/en/test-and-evaluate/strengthen-guardrails/reduce-latency.md @@ -187,7 +187,7 @@ For speed-critical applications, **Claude Haiku 5.5** offers the fastest respons # For time-sensitive applications, use Claude Haiku 5.5 at low effort message = client.messages.create( - model: "claude-haiku-5-5", + model: Anthropic::Model::CLAUDE_HAIKU_5_5, max_tokens: 1024, output_config: { effort: :low }, messages: [{ role: "user", content: "Summarize this customer feedback in 2 sentences: [feedback text]" }] diff --git a/content/github/anthropic-sdk-python/CHANGELOG.md b/content/github/anthropic-sdk-python/CHANGELOG.md index c24a4f72e9..e807616944 100644 --- a/content/github/anthropic-sdk-python/CHANGELOG.md +++ b/content/github/anthropic-sdk-python/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## [2.1.0](https://github.com/anthropics/anthropic-sdk-python/compare/v2.0.0...v2.1.0) (2026-10-21) + +### Features + +* **api:** add enforcement status, actions and filter to user profiles + ## [2.0.0](https://github.com/anthropics/anthropic-sdk-python/compare/v1.17.0...v2.0.0) (2026-10-21) ### ⚠ BREAKING CHANGES diff --git a/content/github/anthropic-sdk-python/api.md b/content/github/anthropic-sdk-python/api.md index f20d53a503..8983268b5b 100644 --- a/content/github/anthropic-sdk-python/api.md +++ b/content/github/anthropic-sdk-python/api.md @@ -564,6 +564,12 @@ from anthropic.types import ( UserProfileCyberTier, UserProfileEfsFeature, UserProfileEfsProgram, + UserProfileEnforcementAction, + UserProfileEnforcementActionBan, + UserProfileEnforcementActionNextStep, + UserProfileEnforcementActionReason, + UserProfileEnforcementActionRestriction, + UserProfileEnforcementStatus, UserProfileExternalUserAccountStatus, UserProfileExternalUserDetails, UserProfileExternalUserDetailsParams, diff --git a/content/github/anthropic-sdk-typescript/CHANGELOG.md b/content/github/anthropic-sdk-typescript/CHANGELOG.md index e08505e915..adb01d8419 100644 --- a/content/github/anthropic-sdk-typescript/CHANGELOG.md +++ b/content/github/anthropic-sdk-typescript/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## [1.1.0](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v1.0.0...sdk-v1.1.0) (2026-10-21) + +### Features + +* **api:** add enforcement status, actions and filter to user profiles + ## [1.0.0](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.137.0...sdk-v1.0.0) (2026-10-21) ### ⚠ BREAKING CHANGES diff --git a/content/github/anthropic-sdk-typescript/api.md b/content/github/anthropic-sdk-typescript/api.md index e589938700..ccc9dc822e 100644 --- a/content/github/anthropic-sdk-typescript/api.md +++ b/content/github/anthropic-sdk-typescript/api.md @@ -546,6 +546,12 @@ Types: - UserProfileCyberTier - UserProfileEfsFeature - UserProfileEfsProgram +- UserProfileEnforcementAction +- UserProfileEnforcementActionBan +- UserProfileEnforcementActionNextStep +- UserProfileEnforcementActionReason +- UserProfileEnforcementActionRestriction +- UserProfileEnforcementStatus - UserProfileExternalUserAccountStatus - UserProfileExternalUserDetails - UserProfileExternalUserDetailsParams diff --git a/content/github/claude-plugins-official/.claude-plugin/marketplace.json b/content/github/claude-plugins-official/.claude-plugin/marketplace.json index 745aa93b0e..783b9b98c3 100644 --- a/content/github/claude-plugins-official/.claude-plugin/marketplace.json +++ b/content/github/claude-plugins-official/.claude-plugin/marketplace.json @@ -3485,7 +3485,7 @@ { "name": "security-guidance", "description": "Security review for Claude-generated code. Pattern-based warnings on edits, LLM-powered diff review on Stop, and an agentic commit reviewer that catches injection, XSS, SSRF, hardcoded secrets, and 25+ other vulnerability classes.", - "version": "2.0.15", + "version": "2.0.16", "author": { "name": "Anthropic", "email": "support@anthropic.com" diff --git a/content/github/claude-plugins-official/plugins/security-guidance/.claude-plugin/plugin.json b/content/github/claude-plugins-official/plugins/security-guidance/.claude-plugin/plugin.json index 75e5971641..74b161db0b 100644 --- a/content/github/claude-plugins-official/plugins/security-guidance/.claude-plugin/plugin.json +++ b/content/github/claude-plugins-official/plugins/security-guidance/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "security-guidance", - "version": "2.0.15", + "version": "2.0.16", "description": "Security review for Claude-generated code. Pattern-based warnings on edits, LLM-powered diff review on Stop, and an agentic commit reviewer that catches injection, XSS, SSRF, hardcoded secrets, and 25+ other vulnerability classes.", "author": { "name": "David Dworken", diff --git a/content/support/10310342-how-do-i-log-out-of-all-active-sessions.md b/content/support/10310342-how-do-i-log-out-of-all-active-sessions.md index a5f1b25562..7d45a2a6c1 100644 --- a/content/support/10310342-how-do-i-log-out-of-all-active-sessions.md +++ b/content/support/10310342-how-do-i-log-out-of-all-active-sessions.md @@ -38,7 +38,7 @@ To regain access to your account on any device, you'll need to authenticate agai If you used your Claude account to authenticate into Claude Code, you can manage your authorization tokens by navigating to **[Settings > Claude Code](https://claude.ai/settings/claude-code)**. To remove a token and log out of Claude Code, click the trash can icon. -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1608263923/b4fa7d6f6f08f2adffb4ea63bc58/image+%287%29.png?expires=1792613700&signature=5cd73159f83c075910a773233f2711262e7501b0bf7c2f8dc3e0b27725f26c9f&req=dSYnHst4nohdWvMW1HO4zVuHix7712S8AQofdwM8qVepvKQMBA3rS%2Bc48%2BVT%0AX7VQ0bQe86PaZzUA9AQ%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1608263923/b4fa7d6f6f08f2adffb4ea63bc58/image+%287%29.png?expires=1792648800&signature=7be66c3e23607bdb814a003e2da35b114e904bc16fffe88cf301980570941efa&req=dSYnHst4nohdWvMW1HO4zVuHix770m%2BzAQofdwM8qVdVg147V9aDGjJyN6gV%0AgLuxuSNUByQUF1mReIw%3D%0A) ## Unable to access your account? diff --git a/content/support/10504844-manage-user-feedback-settings-on-team-and-enterprise-plans.md b/content/support/10504844-manage-user-feedback-settings-on-team-and-enterprise-plans.md index 5a0deaa10a..ab3c3f940d 100644 --- a/content/support/10504844-manage-user-feedback-settings-on-team-and-enterprise-plans.md +++ b/content/support/10504844-manage-user-feedback-settings-on-team-and-enterprise-plans.md @@ -6,6 +6,6 @@ As a Primary Owner or Owner of a Team or Enterprise plan, you can manage the abi 2. Use the toggle to change the **Rate chats** setting for your organization: -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2058292603/75752add0bed6a9f3ab217f01708/CleanShot%2B2026-02-12%2Bat%2B08_55_14-402x.png?expires=1792613700&signature=7090f91229857591eabbdc37f40f79dee35de64c1c34988348d6278bded6b02a&req=diAiHst3n4dfWvMW1HO4zYGm8yUaEavL085gFtEpvcQq7kLozGfZyV%2FnXDZu%0AhBRyjOsSrEyfb0GY804%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2058292603/75752add0bed6a9f3ab217f01708/CleanShot%2B2026-02-12%2Bat%2B08_55_14-402x.png?expires=1792648800&signature=6d5d2b9642b01b0449c094a530bfda1f8e6ed873107dc66976087021c5e001c5&req=diAiHst3n4dfWvMW1HO4zYGm8yUaFKDE085gFtEpvcTVoO8wZb9UJNdUU5Hz%0AJ4pfHKpvEx2OieWZuSI%3D%0A) More information on how Anthropic collects, uses, and stores feedback data can be found in our Privacy Center: **[How long do you store my organization’s data?](https://privacy.claude.com/en/articles/7996866-how-long-do-you-store-my-organization-s-data)** \ No newline at end of file diff --git a/content/support/10593882-share-and-unshare-chats.md b/content/support/10593882-share-and-unshare-chats.md index 0fef88ad25..8b4cacf4b8 100644 --- a/content/support/10593882-share-and-unshare-chats.md +++ b/content/support/10593882-share-and-unshare-chats.md @@ -38,12 +38,12 @@ To unshare a chat: Users on free, Pro, or Max plans can review a log of shared chats by navigating to **[Settings > Privacy](https://claude.ai/settings/data-privacy-controls)**. Find the **Privacy settings** section and click “Manage” next to **Shared chats:** -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1921669913/7cc7be48cfc7a18f9f469d6cd83c/CleanShot+2026-01-08+at+10_20_43%402x.png?expires=1792613700&signature=0b2897c0d8605bad10c55c30bb726c14e4f59c92232f699632179f2a6bce66e1&req=dSklF894lIheWvMW1HO4zWn5HjEbY0Zsc9cNIYuX0GFSRbatG6mxhu0Hzs%2FO%0AgTtTLzI%2Fx3PvxAppE9c%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1921669913/7cc7be48cfc7a18f9f469d6cd83c/CleanShot+2026-01-08+at+10_20_43%402x.png?expires=1792648800&signature=58b2c0c8389ad1d44c1f1cfd614d9bc41aa444246ba8e78b94259a903bbf2662&req=dSklF894lIheWvMW1HO4zWn5HjEbZk1jc9cNIYuX0GGJzH5rQuZxV5r%2BHdu%2F%0AN%2Fe1ff9SfUL%2BhsLEnAk%3D%0A) This will open a **Shared chats** modal listing the title, date shared, and link to each chat, allowing you to easily review and access all your previously-shared content. From here, you also have the option to click “Unshare” next to each listed chat to revoke access to the last snapshot you shared: -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1624243810/e6fe1d262597446c7fe21dff9f10/AD_4nXdW-GhByF8uKV7fCq9lTbkVB91FglSL6TSyXAOUk_MLcTV9YsEMBMkm9rgm1oXqv0k3sJh1JhlzZP6tHVkKbDJJ71pDRRtM3aVNG64MDuKDIzgmknh-XDZdNa7biTsTdwGoPr5GRg?expires=1792613700&signature=8584b85944eb8894c2a2c744ae2402d3b7b4d65b5c516801f5a0a55082de58fa&req=dSYlEst6noleWfMW1HO4ze44eSVnlRE5guvTv9woD7YPI8Zec3qsxWOq%2FW%2Fn%0AXXQv47QHfyCnzbok%2F%2FE%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1624243810/e6fe1d262597446c7fe21dff9f10/AD_4nXdW-GhByF8uKV7fCq9lTbkVB91FglSL6TSyXAOUk_MLcTV9YsEMBMkm9rgm1oXqv0k3sJh1JhlzZP6tHVkKbDJJ71pDRRtM3aVNG64MDuKDIzgmknh-XDZdNa7biTsTdwGoPr5GRg?expires=1792648800&signature=244c77caba6d5f0a3d30913a66304a2bdb19690d314a4b6866860b158aa8401d&req=dSYlEst6noleWfMW1HO4ze44eSVnkBo2guvTv9woD7auC5s%2B5PNbAzhmsD2I%0Am%2Bpso7SlqYelZftI5F8%3D%0A) If you don’t have any shared chat snapshots, the **Shared chats** modal will show “No shared content found”: -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1624243808/b025db8e598f0c88fb16d83d48d5/AD_4nXeUwCKnmFzzrjMHhfr5By4zk5pJlkEn3wbJ8-aNfu13Yl99IjBywpqPx9G07QRzpH1EwRY7uG7Q9m9fib98Gql1cIV7XwUCTzEgBNu79Ey8tCOS5CEVmwveIcEOxJ4fonBhe3g9MA?expires=1792613700&signature=61c9fdb1a16a00fe60b81f61f006a39f0f0df2106e102f073bc2bcce8e68196b&req=dSYlEst6nolfUfMW1HO4zdaFnMdygIq2DeZsm0Gz1HvCgPEvXj4U9u%2FDSo6w%0A1qkh2wTAQ3HtKp73XoY%3D%0A) \ No newline at end of file +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1624243808/b025db8e598f0c88fb16d83d48d5/AD_4nXeUwCKnmFzzrjMHhfr5By4zk5pJlkEn3wbJ8-aNfu13Yl99IjBywpqPx9G07QRzpH1EwRY7uG7Q9m9fib98Gql1cIV7XwUCTzEgBNu79Ey8tCOS5CEVmwveIcEOxJ4fonBhe3g9MA?expires=1792648800&signature=f46570ca41173deee322c026b8f25a1caafae4c94f10abd513a08abc679c40cc&req=dSYlEst6nolfUfMW1HO4zdaFnMdyhYG5DeZsm0Gz1Ht6IWOsrixDwF4f%2Fg3A%0ANX7TATsd2pPGvgbwIX4%3D%0A) \ No newline at end of file diff --git a/content/support/10949351-getting-started-with-local-mcp-servers-on-claude-desktop.md b/content/support/10949351-getting-started-with-local-mcp-servers-on-claude-desktop.md index 29931f718c..aa9f42b134 100644 --- a/content/support/10949351-getting-started-with-local-mcp-servers-on-claude-desktop.md +++ b/content/support/10949351-getting-started-with-local-mcp-servers-on-claude-desktop.md @@ -48,7 +48,7 @@ for specific instructions. Custom desktop extensions uploads allow Team and Enterprise plans to leverage organization-specific workflows that aren’t available in the public directory. After creating a custom desktop extension, Owners and Primary Owners can navigate to Settings > Extensions within Claude Desktop and click “Advanced settings” to access the **Extension Developer** section: -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1681607607/ba6e379d2769d190f0970a0adaed/AD_4nXd4aZkqjJFpiXMPF28Pih7HmSJ9pPsnoWAfVgiLdFRFiTkO92YtXteIjvDHaPl7T0tjfpRTBOlyrMbQ_aciCNDgfIuEvV3szmKvt72x5O51DMSClXOYWk1JIRIzylwkj3joXqZcLw?expires=1792613700&signature=f0f223b601c324f5d551bb6c446fcfe032e40636031148a4b08d33ba2aef0f37&req=dSYvF89%2BmodfXvMW1HO4zWbPxUJ5Nj41Hn9K2IaIG2KkQRiQ7IMUvSXTBUgE%0AB4x5KNTtUkvT8Je%2Bqsk%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1681607607/ba6e379d2769d190f0970a0adaed/AD_4nXd4aZkqjJFpiXMPF28Pih7HmSJ9pPsnoWAfVgiLdFRFiTkO92YtXteIjvDHaPl7T0tjfpRTBOlyrMbQ_aciCNDgfIuEvV3szmKvt72x5O51DMSClXOYWk1JIRIzylwkj3joXqZcLw?expires=1792648800&signature=d69e5db84e4a10ffc3a070df1b82c14dc8a889738c6a7d1beb2a6350cbffa7fe&req=dSYvF89%2BmodfXvMW1HO4zWbPxUJ5MzU6Hn9K2IaIG2Ipm3UIXR%2Fh1Hul4rG7%0AeMZeipTyb9DHDFnrIG8%3D%0A) Click “Install Extension…” and select the .mcpb file. Follow the prompts to install and configure your custom desktop extension. For more in-depth information, please refer to our [desktop extension developer documentation](https://github.com/anthropics/mcpb). diff --git a/content/support/11101966-use-voice-mode.md b/content/support/11101966-use-voice-mode.md index f8d18eb333..38015700a8 100644 --- a/content/support/11101966-use-voice-mode.md +++ b/content/support/11101966-use-voice-mode.md @@ -24,7 +24,7 @@ Voice mode transforms how you interact with Claude by: 2. Tap the sound wave symbol in the lower right corner of the chat window to activate voice mode: -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2042358620/1bf2311353615c1c494da1312a17/124b93a8-0a9b-4c84-9d1f-ede6ca3498dd?expires=1792613700&signature=0219a842d3c606bd686c584f34df870497c4052332f575b44564676351eecc16&req=diAjFMp7lYddWfMW1HO4zZyGr8x0ulQXF6uXnTLMvvArKAyapqRLkyWg1aGK%0AhuhV%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2042358620/1bf2311353615c1c494da1312a17/124b93a8-0a9b-4c84-9d1f-ede6ca3498dd?expires=1792648800&signature=29d2b028dd7b99981bc15a79b32aeb7a3ad106002bd72fd770d00fc622f72ec5&req=diAjFMp7lYddWfMW1HO4zZyGr8x0v18YF6uXnTLMvvDgy%2BnOQYZcR4voeRMn%0ALYA8%0A) 3. Start talking and see your prompt automatically populate in the chat input. @@ -32,7 +32,7 @@ Voice mode transforms how you interact with Claude by: 5. Claude will remain in voice mode until you click the “Stop” button in the lower right corner of the chat window: -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2042352060/162f9e61f7fbeb689201dfc1cac1/6a7fafb2-31df-43be-a43f-0059d735e3c4?expires=1792613700&signature=b61191ad90901f6a5796e679a2d4feba542c46474ed44a4d84adec6288399b12&req=diAjFMp7n4FZWfMW1HO4zU6VRP%2FMSb9uxNdRzYWrfF4VfynWdBAVI2uK6lkk%0AMZfVylEbEx9ng3Y%2BEjE%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2042352060/162f9e61f7fbeb689201dfc1cac1/6a7fafb2-31df-43be-a43f-0059d735e3c4?expires=1792648800&signature=cde9db12ba46cc44c8bc41092e6568b146b47e67a719c6b368d9542e523ce4ef&req=diAjFMp7n4FZWfMW1HO4zU6VRP%2FMTLRhxNdRzYWrfF5P8SMNXzhXUFbiBEgN%0ARt7fXkqi3Fg2N9g92zA%3D%0A) ### On mobile (iOS and Android) @@ -40,7 +40,7 @@ Voice mode transforms how you interact with Claude by: 2. Tap the voice mode icon (sound wave symbol next to the microphone icon) in the text input field: -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2042359690/68879db64559ecf87991f73ce058/671ff972-9e08-4686-bc04-955dab4b2de3?expires=1792613700&signature=590cc875e8c09fed024bbcf8050be48ba0ae4976a0b8fae8bc7c144bc7c177ad&req=diAjFMp7lIdWWfMW1HO4zQTUIPZ8kdtJD%2FRXAPlQ7LZzS52SKnAEqC9D14iX%0AQV3L%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2042359690/68879db64559ecf87991f73ce058/671ff972-9e08-4686-bc04-955dab4b2de3?expires=1792648800&signature=e3c7c8dbee9cab65891530e86910b9e21114b945efe6b14299e865dd57d2ec81&req=diAjFMp7lIdWWfMW1HO4zQTUIPZ8lNBGD%2FRXAPlQ7LbTMpSGaxpeIdl%2B8Yv7%0AmMgl%0A) 3. Choose a voice to personalize your experience. @@ -78,7 +78,7 @@ To change the voice later: - **On mobile:** Click the settings button in the bottom left corner while chatting with Claude in voice mode, then tap your preferred voice and pace: -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2042352063/25eca25bcfd573ecab30dd53158c/074454a6-fa5a-4c49-8b19-02d434b4ca50?expires=1792613700&signature=b0246bd642475c8aabfa521b6ffaa4bf30d45aac6892126475efaac39b1c6008&req=diAjFMp7n4FZWvMW1HO4zZ3%2FGWiTYVMNy8OQfYsvK3zE25E5TxP0CdKK56yj%0AsJS0TXZitMLVu0HkB9o%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2042352063/25eca25bcfd573ecab30dd53158c/074454a6-fa5a-4c49-8b19-02d434b4ca50?expires=1792648800&signature=c6ba12f176a2a043bd7db9ac839bb5a6d32d232649d24d89ab4be8e87756186a&req=diAjFMp7n4FZWvMW1HO4zZ3%2FGWiTZFgCy8OQfYsvK3z2T1Hk688BD%2Ba7cpld%0A0akSK%2BlvbqRqMX4nOlQ%3D%0A) ## Choose a model diff --git a/content/support/11725453-set-up-the-claude-lti-in-canvas-by-instructure.md b/content/support/11725453-set-up-the-claude-lti-in-canvas-by-instructure.md index b16ea4ec46..43b66c5edc 100644 --- a/content/support/11725453-set-up-the-claude-lti-in-canvas-by-instructure.md +++ b/content/support/11725453-set-up-the-claude-lti-in-canvas-by-instructure.md @@ -44,7 +44,7 @@ This article provides information on how to enable the Claude LTI integration in 5. Click "Install" and refresh the course page. -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1611422430/c8e0875feac1f2c7cb033be74fc9/AD_4nXfLU_bui3EXcCjQ0qm70HD97neqjGayKeDer_t76utlci8gZSUjYRhw6ZSOlDdqSEcwXBzd_shAh7pQEJ-8OoE0O21DM5coOgxmO_WD5hlwiuwtS2iYXcTavhIRyQT5zKFWvfn3NA?expires=1792613700&signature=0eba1159d4996884daaaebf1a182e9c90e028ee61a383ae0b6d12e89a4e50082&req=dSYmF818n4VcWfMW1HO4zTEDa%2BkYmvCGEv2ojHLMylbJwtpVBNENrJdhUfLi%0AL36XtizQym8D%2FhdQe7k%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1611422430/c8e0875feac1f2c7cb033be74fc9/AD_4nXfLU_bui3EXcCjQ0qm70HD97neqjGayKeDer_t76utlci8gZSUjYRhw6ZSOlDdqSEcwXBzd_shAh7pQEJ-8OoE0O21DM5coOgxmO_WD5hlwiuwtS2iYXcTavhIRyQT5zKFWvfn3NA?expires=1792648800&signature=1a1f4dfdd39da7effecdd5b236bfa606a17a6777335443f475ee31efbd0767bb&req=dSYmF818n4VcWfMW1HO4zTEDa%2BkYn%2FuJEv2ojHLMylbdBy%2FzKJ5mVprEQaQD%0AycgoO8wWuwMvWMdiNmI%3D%0A) ## Turn on the Claude LTI Integration in Claude for Education organization settings diff --git a/content/support/11818288-why-am-i-being-asked-to-verify-my-payment-method.md b/content/support/11818288-why-am-i-being-asked-to-verify-my-payment-method.md index a79424cf78..26d6ed0315 100644 --- a/content/support/11818288-why-am-i-being-asked-to-verify-my-payment-method.md +++ b/content/support/11818288-why-am-i-being-asked-to-verify-my-payment-method.md @@ -2,7 +2,7 @@ If you see the following pop-up when you log in to your Claude account, you’ll need to click the “Verify now” button to verify your payment method: -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1631413861/42c3b13d7fc44a11a88ec2b9cd03/AD_4nXeMx8QXpeZZCkfAnVSwx8KZ9n4Vr2rvPdQddyE6ZNxch__F6ZqFs1G4ZmU52Wvb7gRlwRqquTLdw8IQv-gICDyP-MXqiQK_Oe7gX3SKsCKKt2IEpMx4qDeMeeZufMaJfv16XgOH5g?expires=1792613700&signature=34f9436137d958a21e560b786c186a6e025ce94824d238185ccf5db0a19a27c8&req=dSYkF81%2FnolZWPMW1HO4zf7%2BjUbo6YP1n6MrEicvimCSy%2BfzXuh5r9KoJeba%0AvGoLwHeo7q8axk%2F2CT8%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1631413861/42c3b13d7fc44a11a88ec2b9cd03/AD_4nXeMx8QXpeZZCkfAnVSwx8KZ9n4Vr2rvPdQddyE6ZNxch__F6ZqFs1G4ZmU52Wvb7gRlwRqquTLdw8IQv-gICDyP-MXqiQK_Oe7gX3SKsCKKt2IEpMx4qDeMeeZufMaJfv16XgOH5g?expires=1792648800&signature=3b29913939acd3224ce574cb3f92b94b5a5f59b6ca7ca12a55dce33631d4d93e&req=dSYkF81%2FnolZWPMW1HO4zf7%2BjUbo7Ij6n6MrEicvimAv6p%2F8NwElhIe4AgsP%0ASI9PyLUEviXmObkB0cw%3D%0A) ## What happens if I click “Remind me later?” diff --git a/content/support/11869629-use-claude-with-android-apps.md b/content/support/11869629-use-claude-with-android-apps.md index b713934f5e..34e1e28d5b 100644 --- a/content/support/11869629-use-claude-with-android-apps.md +++ b/content/support/11869629-use-claude-with-android-apps.md @@ -222,7 +222,7 @@ Permission requirements vary by feature: For features requiring permissions (like location or calendar access), Claude will request permission contextually with clear explanations of why the access is needed. You’ll be prompted to approve the action with three options: Allow once, Always allow, or Don't allow. -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1707351614/ccb910e4b87b1e96ad9a11bbd835/b57b2130-d8d6-4499-89f6-6c12de236fd4?expires=1792613700&signature=296be8b95c04c658f10f7f3b9ff912f9860969541b99b1094d76c5e87f6a4e1c&req=dScnEcp7nIdeXfMW1HO4zQe5G12J2ibzS5x65TIld%2FBOuuVLV4x%2FA00%2FK8JT%0AkxUK0WgZg3zC1aubAtw%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1707351614/ccb910e4b87b1e96ad9a11bbd835/b57b2130-d8d6-4499-89f6-6c12de236fd4?expires=1792648800&signature=2e5cad45f5aa91d61c4595b561fb02f9b5d33e6a518f5c8d9eca9c825558189f&req=dScnEcp7nIdeXfMW1HO4zQe5G12J3y38S5x65TIld%2FCmuhxsAbdeT%2Brm58HF%0AjySsQjvkbDz7g6ATEhw%3D%0A) These permissions can be managed at any time in your device settings by going to Settings > Apps > Claude > Permissions. Click into each permission listed under **Allowed** and **Not allowed** to make changes. You can toggle between “Allow only while using the app” or “Ask every time” to change Claude’s access, or remove permissions by choosing “Don’t allow.” Claude will only request permissions if needed for specific features, and you can always choose to decline while still using other capabilities. diff --git a/content/support/12005970-manage-usage-credits-for-team-and-seat-based-enterprise-plans.md b/content/support/12005970-manage-usage-credits-for-team-and-seat-based-enterprise-plans.md index 9c3d784bc3..900407cb3a 100644 --- a/content/support/12005970-manage-usage-credits-for-team-and-seat-based-enterprise-plans.md +++ b/content/support/12005970-manage-usage-credits-for-team-and-seat-based-enterprise-plans.md @@ -70,7 +70,7 @@ After navigating to **[Organization settings > Usage](https://claude.ai/admin-se The **Usage and spend limits** section will show the current limit (if any) or **Unlimited**. Clicking on "Adjust limit" opens a modal where you can either input an amount and click "Set spend limit," or click "Set to unlimited" to remove the organization-wide monthly spend limit. -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2149347604/936ac4eb025d3ef1f00c3b8a26b0/image.png?expires=1792613700&signature=a94876d8fc5e6acfebbdbab925d12ca5fead3a1505fbb0b7d288ae548f7ef4b2&req=diEjH8p6modfXfMW1HO4zQHwgqPRly2h6DwhVVpk1mBRFLXQMNZYkUYZhbGV%0AdQNmEwr6U4NeckG8uGU%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2149347604/936ac4eb025d3ef1f00c3b8a26b0/image.png?expires=1792648800&signature=a856bf356e1023a7cb49c864f7d61acc97ffe302d889356be2700bcf78991fc8&req=diEjH8p6modfXfMW1HO4zQHwgqPRkiau6DwhVVpk1mAro4bNCmx%2BHrSk%2BxL%2F%0AqogL53rgIywoVVniaew%3D%0A) Changes to your organization’s overall spend limit go into effect immediately. @@ -78,11 +78,11 @@ Changes to your organization’s overall spend limit go into effect immediately. Owners and Primary Owners on **seat-based Enterprise plans only** can set spend limits that apply to all users within a specific seat tier. -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2149351600/c5b979c366ac2738f60ea84e85b3/CleanShot+2026-03-10+at+15_37_41%402x.png?expires=1792613700&signature=68e8c1dfe063526f99b9c7b6964d84f054e5700845acf5c36e1927c253815302&req=diEjH8p7nIdfWfMW1HO4zYnqMYeSInOO0wfO62ivdG%2BDthaTTAvFV5TnT0k2%0AHKw04zYdUzpfYB45rq8%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2149351600/c5b979c366ac2738f60ea84e85b3/CleanShot+2026-03-10+at+15_37_41%402x.png?expires=1792648800&signature=5a744c1e0daf82bf8cef7b637884dd8b56b3d462a65962f56db16b91e1f521ab&req=diEjH8p7nIdfWfMW1HO4zYnqMYeSJ3iB0wfO62ivdG%2Bohe2EVb33ekkYwbs5%0AF9ZPWOnF2jAq66YDHd0%3D%0A) Select the "By group" tab to see **Standard seats** and **Premium seats** groups. Click the "..." icon next to the current limit, then "Edit limit." This opens a modal where you can either select "Set dollar amount" and input an amount, or click "Unlimited" to remove the limit for that seat type. Click "Set limit" to save your changes. -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2149362056/44993661ca2db771fe924d0346f6/image.png?expires=1792613700&signature=b8d3a6d08f601111d6bd00803535b5eefc6958b99cb81aec2fda83406a90f2a3&req=diEjH8p4n4FaX%2FMW1HO4zRzvvYcNcU5Bq7nEDCGq9G4jgjTzQG0McSxzA6er%0AmWBuePr%2F54Wc51qh0Tc%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2149362056/44993661ca2db771fe924d0346f6/image.png?expires=1792648800&signature=75f31c834a184f2f77854afca9dbdd2b8503e22286b803078941a96e94f36b8f&req=diEjH8p4n4FaX%2FMW1HO4zRzvvYcNdEVOq7nEDCGq9G4JRMXx59qIsQgo6kcE%0Aedij69EOuJlYhgQZmws%3D%0A) --- @@ -90,11 +90,11 @@ Select the "By group" tab to see **Standard seats** and **Premium seats** groups Owners and Primary Owners can also set individual monthly spend limits for each member by finding **Spend limits by user** and clicking the "..." button next to the user, then "Edit limit." -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2149370853/db66f5cd03683b9cc119d0dcd6b8/image.png?expires=1792613700&signature=aca0b48c12c3d623073af643de577b46be627c7fba8e0dd7b54c7cfe970f94b1&req=diEjH8p5nYlaWvMW1HO4zaPdGAVRVCxBe9HwvwG7ubhnb0mgSgkNK7Dhmx46%0AP1GfSksMMczRJrlLlQ0%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2149370853/db66f5cd03683b9cc119d0dcd6b8/image.png?expires=1792648800&signature=01dcb2145e3a749c2045981a46acbaf349be77aed6bd98571302422a03cf1d74&req=diEjH8p5nYlaWvMW1HO4zaPdGAVRUSdOe9HwvwG7ubiMG7kdoLFQRrLic%2F1w%0Arbbxyl%2BCnZoSScYentE%3D%0A) Enter the amount and click "Set limit." Alternatively, selecting "Set to unlimited" will remove that member's monthly spend limit (they will still be subject to any organization or seat-level spend limits). -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2149374028/97813fe3b515c2e839d8d92abd79/image.png?expires=1792613700&signature=b0659a6cbc49ffa374d745a430454b61c332062d39ff7c41641057e195c875c2&req=diEjH8p5mYFdUfMW1HO4zevsA%2FWMMuiNw6z2wGSwkbsCWUNuP4G9pualAleo%0A4zI6Xlf9CfA%2F26c1bcU%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2149374028/97813fe3b515c2e839d8d92abd79/image.png?expires=1792648800&signature=a54de716990b414fd1c3cb0b0e01a32cd63daedefa7c97c9969bc75e62d0e8a5&req=diEjH8p5mYFdUfMW1HO4zevsA%2FWMN%2BOCw6z2wGSwkbuOcT2RwzkEbYRScuiZ%0AXlP0MRr7CuP388O3vWo%3D%0A) This allows owners fine control over usage credits, so you can set limits for different members based on their roles or individual needs. Once a user reaches their defined spend limit, this will automatically pause their usage credits until the end of the month. They will need to wait for their usage limits to reset before using Claude again. diff --git a/content/support/12012173-get-started-with-claude-in-chrome.md b/content/support/12012173-get-started-with-claude-in-chrome.md index f6c935cc82..c560bbc9fa 100644 --- a/content/support/12012173-get-started-with-claude-in-chrome.md +++ b/content/support/12012173-get-started-with-claude-in-chrome.md @@ -38,7 +38,7 @@ Follow these steps to connect Claude in Chrome in your desktop app: 4. Toggle the connector on, then download and install the extension if you haven’t already. -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2604933811/ae37c41fc808dbdf48d135338334/6cc9ba4b-9d31-43a2-ab80-8048b5f9d791?expires=1792613700&signature=e85afe1e93ad4dfa0b6f0a1da1a8c6a1de12e7cc2824a996ab097be0fd0edddf&req=diYnEsB9noleWPMW1HO4zUOPbf7Al%2BGKnt%2F2nPMwUPiWCg4gnVPlEApZQJlw%0A0av8e%2BuW12i39Ft8zyI%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2604933811/ae37c41fc808dbdf48d135338334/6cc9ba4b-9d31-43a2-ab80-8048b5f9d791?expires=1792648800&signature=7de43c1bd3c27baa56d7adf434640f48341860622c2a92be670c5c9ae46667c2&req=diYnEsB9noleWPMW1HO4zUOPbf7AkuqFnt%2F2nPMwUPj65JM6oSUYF4deGWXC%0A9DEZ%2F0kodtOxeUa8Di8%3D%0A) Completing these steps will add Claude in Chrome to the “Connectors” drop-down on your chats with Claude. This is disabled by default, so you’ll need to enable it manually for each conversation. diff --git a/content/support/12111783-create-and-edit-files-with-claude.md b/content/support/12111783-create-and-edit-files-with-claude.md index c979cd3da3..c6385bce4e 100644 --- a/content/support/12111783-create-and-edit-files-with-claude.md +++ b/content/support/12111783-create-and-edit-files-with-claude.md @@ -48,7 +48,7 @@ These capabilities make it easy to produce professional documents by simply chat To give Claude access to external data sources, toggle **Allow network egress** on: -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2054774005/25bcfffba6c249cd128d6c3f6d52/CleanShot+2026-02-11+at+16_34_47%402x.png?expires=1792613700&signature=5c0fc6f653aaebd58dc7a31fe1409ba5bb794fcc65b01770729858ccfb6413f1&req=diAiEs55mYFfXPMW1HO4zYFJyg9DDZrJPQVowIiib2ml%2F8UteHn%2F4TGkqq35%0A%2FAVVHQ9UTwbHxXFzP%2FA%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2054774005/25bcfffba6c249cd128d6c3f6d52/CleanShot+2026-02-11+at+16_34_47%402x.png?expires=1792648800&signature=76589f840b17a310e172b0be606e63854c2effc793361c9bb382b6b87eda9b97&req=diAiEs55mYFfXPMW1HO4zYFJyg9DCJHGPQVowIiib2nCErX3G82QABLFtzmc%0AfZ2Fom5jCba5j%2BuJI%2BE%3D%0A) ### Enabling on Claude Mobile @@ -66,11 +66,11 @@ Team and Enterprise organization owners can control network access settings in * - **Allow network egress to package managers and specific domains:** Claude can access package managers plus additional domains you specify. Add domains individually to whitelist specific resources your organization needs: -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1789945362/ad72504d5429960f369b8b91b43c/86f06c0e-6eaa-4574-a4cb-2c38b273613a?expires=1792613700&signature=42d9ab33846b8ad2d2209d9ab2cbf00e8bf8ed379029e5ea0473d168cd861cab&req=dScvH8B6mIJZW%2FMW1HO4zXJcB29FlCpMpMW6Iph6YZfUz9glqfwnXeBJo2k8%0AD2p7Kf96wPU9REt4hlk%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1789945362/ad72504d5429960f369b8b91b43c/86f06c0e-6eaa-4574-a4cb-2c38b273613a?expires=1792648800&signature=f77a19ac61cecafa17796823bcc1b1dcdbca53100d0650b51335a513cfbfc170&req=dScvH8B6mIJZW%2FMW1HO4zXJcB29FkSFDpMW6Iph6YZe8oeWMUbISciT7cLhe%0AKf9byvT5knCuepIT0hs%3D%0A) **All domains:** Claude has full internet access except for domains on Anthropic's legal blocklist. While this provides maximum flexibility for file creation and analysis tasks, it’s also the riskiest option. Please review the **[security considerations below](#h_0ee9d698a1)** before enabling “All domains”: -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1789945361/e3188cb8edb9ca7c303615da6378/f1c99a7d-5956-48d5-9ec7-b7ae6c8c3d28?expires=1792613700&signature=d8b53e7f2d9b777ba2d81bf2334ad3224fd3dc88e3931435885d924be84a7631&req=dScvH8B6mIJZWPMW1HO4zdnseRaU7zylqgKIA6CM1tqhjMFZJOpM7JXPLedy%0AEMgQz9Qxkby2ovOPFIM%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1789945361/e3188cb8edb9ca7c303615da6378/f1c99a7d-5956-48d5-9ec7-b7ae6c8c3d28?expires=1792648800&signature=563cb00a013a49cf653608ca00bf3bfd19d7685cff0479deffa429e8c171043f&req=dScvH8B6mIJZWPMW1HO4zdnseRaU6jeqqgKIA6CM1tqK6RZ8LtGOUcZVsL76%0A4bm908onznhv9jFhLiA%3D%0A) --- diff --git a/content/support/12157520-claude-code-usage-analytics.md b/content/support/12157520-claude-code-usage-analytics.md index fe459e8938..1c84de9493 100644 --- a/content/support/12157520-claude-code-usage-analytics.md +++ b/content/support/12157520-claude-code-usage-analytics.md @@ -46,7 +46,7 @@ The **Usage** tab displays the following metrics for your organization. Data on - **Top commands**: The Claude Code commands used most often across your organization. -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1717579277/46c512f4b3ed05c359cecd78ed5c/e0ce2c19-39e2-411f-9a1f-cb1d46439a42?expires=1792627200&signature=b52c31a4540958b72902bef0417b236e65a9f362b435273a47a281b65dc8d34f&req=dScmEcx5lINYXvMW3nq%2BgSdYtUT0OzSiF2Tl%2FBjUoqJP8xvEf0aHlTfjhNby%0AQ8iMFnhJJyDB%2BDNWQj6p3rxoBS4%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1717579277/46c512f4b3ed05c359cecd78ed5c/e0ce2c19-39e2-411f-9a1f-cb1d46439a42?expires=1792648800&signature=6230cbb7bea0fc81c03439c2d9ae4030979dc96dda3166cff9d69ea9019d00ac&req=dScmEcx5lINYXvMW1HO4zfiEPqRWi3HGCX9h5MbdDjP2Oo6gVaHs0SuEf5Na%0AitLd5xTSu86H1DQ2ZTM%3D%0A) ### User-level metrics diff --git a/content/support/12260368-use-incognito-chats.md b/content/support/12260368-use-incognito-chats.md index ef43afaf3f..a2c8866c0a 100644 --- a/content/support/12260368-use-incognito-chats.md +++ b/content/support/12260368-use-incognito-chats.md @@ -34,7 +34,7 @@ These differ from regular chats in several ways: When starting a new chat with Claude outside of a project, you'll see a ghost icon in the upper right corner of your screen: -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1719768744/c7a2fa56cf284e48472f3b9c4dbf/030563f8-9f97-4891-a749-9ae95968a063?expires=1792613700&signature=76a15f6d78760d3d50dfac4352f50afb2ad0c4b12e4422a87f84049e19e7288c&req=dScmH854lYZbXfMW1HO4zeUcugC7b%2BaMDCAt3Cx%2FSO1HY9zjJip3sIdrvkOv%0ADpznPwnZo5LFdkhbWkE%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1719768744/c7a2fa56cf284e48472f3b9c4dbf/030563f8-9f97-4891-a749-9ae95968a063?expires=1792648800&signature=6ee9c2a6d907083d481c5809b4aa14289d7bd1f6342120a526b1b39f3112ea64&req=dScmH854lYZbXfMW1HO4zeUcugC7au2DDCAt3Cx%2FSO0cfFGGxQhAaQlXfPoL%0AL5cA3BthVAXndt4lfnk%3D%0A) 1. Click the ghost icon to enable incognito mode. diff --git a/content/support/12293051-use-claude-in-xcode.md b/content/support/12293051-use-claude-in-xcode.md index b9f6cb8e95..479685f2d2 100644 --- a/content/support/12293051-use-claude-in-xcode.md +++ b/content/support/12293051-use-claude-in-xcode.md @@ -34,7 +34,7 @@ To start using Claude in Xcode: 3. Log in with your Claude account. -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1727371585/b18ca03a6357c52d12d10386f28e/dab2dcb2-f670-4173-b77d-38767a34cec1?expires=1792613700&signature=7d337d3a56566631c0aa0ef09acdcf634de0b6442235b37d625ffbcd3297750e&req=dSclEcp5nIRXXPMW1HO4zUAXIs4EU6vTFalhp3bugHLunvpHQTrvcmXqOXGB%0AN6XuGvqkC%2By99LxKr88%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1727371585/b18ca03a6357c52d12d10386f28e/dab2dcb2-f670-4173-b77d-38767a34cec1?expires=1792648800&signature=d72382f371820b47df6af3436fdbda476e9f18a9a8a05c2db0cac49e983be3b8&req=dSclEcp5nIRXXPMW1HO4zUAXIs4EVqDcFalhp3bugHKoQIk87lAGsqOHCgiq%0ABh1d72mVwXxYPb66Ix0%3D%0A) ## Usage limits diff --git a/content/support/12429409-manage-usage-credits-for-paid-claude-plans.md b/content/support/12429409-manage-usage-credits-for-paid-claude-plans.md index 5b2564fa62..df655e762b 100644 --- a/content/support/12429409-manage-usage-credits-for-paid-claude-plans.md +++ b/content/support/12429409-manage-usage-credits-for-paid-claude-plans.md @@ -50,7 +50,7 @@ To enable usage credits on your paid Claude plan: 8. You can also enable auto-reload to automatically make a purchase when your balance falls below a threshold you set: -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1805819785/5e203c38e6ba3f76bfd1dab0d5ce/fe062e7c-18cb-48cc-a7e2-754ac6e6c4be?expires=1792613700&signature=8db441bb79075fc03080d6dc927e867627c86a8b018061e987a0a48211ba0e24&req=dSgnE8F%2FlIZXXPMW1HO4zYj2ABCfpPM%2FopE7m38YdffS39YvqteMMN1K6D5M%0A%2FdyV6gfVUvAXrrSrK9c%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1805819785/5e203c38e6ba3f76bfd1dab0d5ce/fe062e7c-18cb-48cc-a7e2-754ac6e6c4be?expires=1792648800&signature=df1cfa6c1ae92fcf92eda9cf8da29889f4a188ebe41dad7bf71daa10a67c2026&req=dSgnE8F%2FlIZXXPMW1HO4zYj2ABCfofgwopE7m38Ydfdv6xLvZx8WmWFC8C78%0AW97iH0YuMMdM6bc7SoM%3D%0A) --- diff --git a/content/support/12466728-troubleshoot-claude-error-messages.md b/content/support/12466728-troubleshoot-claude-error-messages.md index 00bcff6bd7..cb0d480c21 100644 --- a/content/support/12466728-troubleshoot-claude-error-messages.md +++ b/content/support/12466728-troubleshoot-claude-error-messages.md @@ -60,4 +60,4 @@ Capacity issues will not appear on our status page because they represent normal Service incidents are disruptions where Claude is unavailable or significantly degraded for all or most users. These represent actual technical problems with our systems. To check for confirmed incidents, visit status.claude.com, where you'll find real-time updates on scope, impact, and resolution progress for any active incidents. -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1753796247/e6a8c6ef8653b229c5758e881242/c2fc6fc0-d163-4119-93e0-394104d86bc9?expires=1792613700&signature=bb7cb111175cc5436e12d10ad8886ae3e1eb57e43f86cc81a8e9a3ea814af3a0&req=dSciFc53m4NbXvMW1HO4za4BX60l07HD7y68oYp%2BYg9cEfCoYeyEGpvXUDaK%0AKCSmWwD4GMbAOk0Go0I%3D%0A) \ No newline at end of file +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1753796247/e6a8c6ef8653b229c5758e881242/c2fc6fc0-d163-4119-93e0-394104d86bc9?expires=1792648800&signature=34f1fbe5dcc63029c44124decb8b71a9ec5bb5e19638a52ffceea75a8a32f83f&req=dSciFc53m4NbXvMW1HO4za4BX60l1rrM7y68oYp%2BYg8IJ25S4dY5lHH9ftmq%0ACtXjt8FhljCuPq3eheg%3D%0A) \ No newline at end of file diff --git a/content/support/12512180-use-skills-in-claude.md b/content/support/12512180-use-skills-in-claude.md index a6938d4993..20017c5dea 100644 --- a/content/support/12512180-use-skills-in-claude.md +++ b/content/support/12512180-use-skills-in-claude.md @@ -202,7 +202,7 @@ To remove a custom skill you've uploaded: 4. To delete the custom skill entirely, click the "..." button next to the toggle, then select "Delete": - ![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2105391273/8359cbf8be20dce0f1cd3fd40e6f/CleanShot-2B2026-02-25-2Bat-2B15_50_16.png?expires=1792613700&signature=6d98e440356384bc8b60a8e1f820c73df6da169eac105bbe109c8b6b2ec6cead&req=diEnE8p3nINYWvMW1HO4zSOgDikuw%2BWqH%2BdCnFXB0ujOi6N4BsMLNO7ldWof%0AGPeA%0A) + ![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2105391273/8359cbf8be20dce0f1cd3fd40e6f/CleanShot-2B2026-02-25-2Bat-2B15_50_16.png?expires=1792648800&signature=4fa2b8a4b01f7db46d3387929885183ea5627e8a20839de3777510256208f77e&req=diEnE8p3nINYWvMW1HO4zSOgDikuxu6lH%2BdCnFXB0uj7Ucy4YBTK3kkRLPXV%0ABh4R%0A) 5. Click "Delete" in the confirmation prompt. diff --git a/content/support/12592343-enabling-and-using-the-desktop-extension-allowlist.md b/content/support/12592343-enabling-and-using-the-desktop-extension-allowlist.md index 22062eef05..c4cdce7742 100644 --- a/content/support/12592343-enabling-and-using-the-desktop-extension-allowlist.md +++ b/content/support/12592343-enabling-and-using-the-desktop-extension-allowlist.md @@ -20,11 +20,11 @@ The desktop extension allowlist is disabled by default, so an organization Owner 4. Switch to the "Desktop" tab: -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1781755172/63c92550571842577ad435860ec5/6f5cc4e1-ff7d-48de-863a-c4e6184d4605?expires=1792613700&signature=61f0a803e71d2fdf2ae3f0e73dcc01687de18c1c0df985c5c37c7dcf741bd54c&req=dScvF857mIBYW%2FMW1HO4zQ9pXEgM%2FnPc0ugSQm1MFW9QyIzfKKMvRmunehpl%0Ag%2FKe%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1781755172/63c92550571842577ad435860ec5/6f5cc4e1-ff7d-48de-863a-c4e6184d4605?expires=1792648800&signature=7cecf8b514c551df9fff7f186c9a6290e6fd4c965850728fbc708eb49851e98d&req=dScvF857mIBYW%2FMW1HO4zQ9pXEgM%2B3jT0ugSQm1MFW9WwiezF84nNzKTiAoK%0A%2B%2F5P%0A) 5. Toggle **Allowlist** on: -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1781755578/a6bafff5f084dc86ae463703fd3d/6cf0ee18-4e71-4129-98e8-cc08174e3c3a?expires=1792613700&signature=3fe77069521a82372ed99c2583b4dcf0580869f26545f01bf40b31e7d4ba4f38&req=dScvF857mIRYUfMW1HO4zaj0BXMtSKQDTAorLxpdoc8sSqT6hCuCBDF4p4ad%0Av7go%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1781755578/a6bafff5f084dc86ae463703fd3d/6cf0ee18-4e71-4129-98e8-cc08174e3c3a?expires=1792648800&signature=63c0ab401edaa001a31c62afa1d1c03caffeefaf938d6a77f07a1861d1087209&req=dScvF857mIRYUfMW1HO4zaj0BXMtTa8MTAorLxpdoc9W0bUGTfEQoUn5S4fU%0AjRm8%0A) ## What happens after enabling the allowlist? @@ -42,7 +42,7 @@ Consider completing the allowlist setup during off-hours to minimize disruption **Important:** The allowlist requires Claude Desktop version 0.13.91 or higher, so users should update the desktop app by clicking “Claude”, then either “Check for updates” or “Restart to update to Claude 0.13.91”: -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1781756960/ad18af50c83d35f2673656c23e00/a7ee450f-0c7d-42d6-a75f-fb1bc088cb52?expires=1792613700&signature=9f80da2a97acd6c657864675dfc74ec447f7edc25af21e88ad592028a051021c&req=dScvF857m4hZWfMW1HO4zYUJqIGsCzHsCEDZ5AdBjIaOS2BqyFJktvEbm%2BQV%0AmLGJRnm69ykaEzDVj2s%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1781756960/ad18af50c83d35f2673656c23e00/a7ee450f-0c7d-42d6-a75f-fb1bc088cb52?expires=1792648800&signature=3eca8b0a92d48788fd10dfd22bcb89206020e82af2f1ef83c790bc6c8b4b142e&req=dScvF857m4hZWfMW1HO4zYUJqIGsDjrjCEDZ5AdBjIbFFso%2B4cQZNUAvLyjf%0A3ob%2BigYseAtYXoj2Spg%3D%0A) ## Managing allowed extensions @@ -60,7 +60,7 @@ After enabling the allowlist, you can choose which extensions to allow: If you want to remove an extension from the allowlist, click the “...” button and “Remove from allowlist.” -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1781751250/6558c0f59aea7976bd44b0213d76/e750f02b-cd0d-437e-a83f-9ac362cdf456?expires=1792613700&signature=9b66d0fc7939a91f06fb9c58c4f81fa404e79eab84c5044cd73c9aef272fe149&req=dScvF857nINaWfMW1HO4zTrxBKov%2FlSSqXridZhfx1K1NcsqP5iyzqbkZq4S%0AtKSBs%2Bc3v7winlV1jh4%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1781751250/6558c0f59aea7976bd44b0213d76/e750f02b-cd0d-437e-a83f-9ac362cdf456?expires=1792648800&signature=c2e053313649c5197b5bf447e2aa6214574135f806171bfd630b77ce24bd468f&req=dScvF857nINaWfMW1HO4zTrxBKov%2B1%2BdqXridZhfx1I3PkMhBXoQAs%2BEP7uc%0AwQJwKaJtZXEIIRIjKUk%3D%0A) ## Uploading custom extensions diff --git a/content/support/12618689-use-claude-code-in-the-cloud.md b/content/support/12618689-use-claude-code-in-the-cloud.md index 8077a77db5..b8a7c660df 100644 --- a/content/support/12618689-use-claude-code-in-the-cloud.md +++ b/content/support/12618689-use-claude-code-in-the-cloud.md @@ -10,7 +10,7 @@ This feature works with repositories you may not have on your local machine. You Cloud sessions enable asynchronous development workflows. In a local session in your terminal or editor, you typically work synchronously: you make a request, wait for Claude to respond, review the changes, then make another request. Synchronous work like this gives you fine-grained control but requires your attention throughout the process. A cloud session handles this differently: you can assign a larger task, let Claude work independently, and return later to review the completed work. -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1786446157/07ec74cd46317f8278083a317841/6448f3ee-c6df-4417-8a13-90d8c2ca3d55?expires=1792613700&signature=e59bc68e883a4c066231c732f9266033c6a1719721e696b2dc660c501941413c&req=dScvEM16m4BaXvMW1HO4zR8%2BAVGGQ55x7XrRA1YwWGtlRwml0fv3PCcPZmaM%0AO6h7fs2oN4yZGHfuZlg%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1786446157/07ec74cd46317f8278083a317841/6448f3ee-c6df-4417-8a13-90d8c2ca3d55?expires=1792648800&signature=572940a877019947b90f201fddf46696e396411c8fcbf3d40a4519a3b3010d17&req=dScvEM16m4BaXvMW1HO4zR8%2BAVGGRpV%2B7XrRA1YwWGvRL4JGIIacbw8FdykO%0A3D7rMDXG7u7D2QK55C8%3D%0A) You can also run multiple tasks in parallel. Since each task runs in its own isolated environment, you can have Claude working on several different issues or repositories simultaneously. Each task proceeds independently and creates its own pull request when complete. More than one task can work on the same repository at the same time. @@ -20,13 +20,13 @@ You can also run multiple tasks in parallel. Since each task runs in its own iso When you start a cloud session, Claude Code creates an isolated virtual machine for your work. Your GitHub repository is cloned into this environment, which comes pre-configured with common development tools and language ecosystems. -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1786446158/c092f1383826cb871493f74169d4/97b7cb98-5da2-438e-a920-e170b8b9790e?expires=1792613700&signature=e338ac4bc8d65144d92c7c1af0b5bedbb206aca031367f0f21f89eec369a34d1&req=dScvEM16m4BaUfMW1HO4zcR0rJQyjurH7DtpMiX%2FBYnaOgm88XVEZLuxw8YF%0AfzYuMJBeXHCMMty1oIY%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1786446158/c092f1383826cb871493f74169d4/97b7cb98-5da2-438e-a920-e170b8b9790e?expires=1792648800&signature=ad9fa0c40c814604f7fe2f1407db0d7300ee10e1ca0668c8595b091ec025112c&req=dScvEM16m4BaUfMW1HO4zcR0rJQyi%2BHI7DtpMiX%2FBYkHmK7xlDU04AZ%2BgrX3%0ABeS5NZS64hPu9PxSmR0%3D%0A) Claude prepares the environment by running any setup commands you've defined in your repository's configuration. This includes installing dependencies, setting up databases, or running other initialization steps your project needs. If your task requires network access, maybe to install packages or fetch data, you can configure the level of internet access the environment has. Once the environment is ready, Claude begins working on your task. Claude reads your code, makes changes, writes tests, and runs commands to verify the work. You can monitor progress and provide guidance through the web interface if needed. -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1786446156/83ecf0a5b98eddc9ffc9694c50f7/353589ce-b678-441d-8909-71b45fa2d065?expires=1792613700&signature=951c75eb5862d2b5396f58a8b5ddf75fa4f1436cb2d272cb6bb6d75388012e24&req=dScvEM16m4BaX%2FMW1HO4zVbcTWGF4sfJUQl3YqgIJdbNnX%2Bsi8imd2w%2BwFV6%0AKKdrbD4TuSil9A4t47c%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1786446156/83ecf0a5b98eddc9ffc9694c50f7/353589ce-b678-441d-8909-71b45fa2d065?expires=1792648800&signature=28c4a22df57b886fa6d7d4b31bfe476e5eb095ed1b9ef5a66db42845da3305d5&req=dScvEM16m4BaX%2FMW1HO4zVbcTWGF58zGUQl3YqgIJdYQw7VvDc8x4cKIjK2v%0ALEu3kK839gDQ44BM0mM%3D%0A) When Claude completes the task, it pushes the changes to a new branch in your GitHub repository. You receive a notification and can review the changes, then create a pull request directly from the interface. The pull request includes all of Claude's work, ready for your review and any additional changes you want to make. diff --git a/content/support/12626668-use-quick-entry-with-claude-desktop-on-mac.md b/content/support/12626668-use-quick-entry-with-claude-desktop-on-mac.md index 4b833f0d68..3db1fdde14 100644 --- a/content/support/12626668-use-quick-entry-with-claude-desktop-on-mac.md +++ b/content/support/12626668-use-quick-entry-with-claude-desktop-on-mac.md @@ -40,7 +40,7 @@ When you first open the updated version of Claude Desktop, you'll see a prompt t Once enabled, double-tapping Option will open a text box where you can type your message and start a new chat. You can also click "New chat" to see your five most recent conversations. -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1893088365/2ca4b782dda90abea1fe5f4150af/CleanShot+2025-12-18+at+13_14_30%402x.png?expires=1792613700&signature=d24debe4c06f454d027b218924eecc3f0091a13aaf49dfbeb9e29bd7f8761eed&req=dSguFcl2lYJZXPMW1HO4zWggDtxXp5%2BdRC8c%2FcM5c2KWvXImx%2FgaHscAmu8F%0AzKWigh3swqrEQbSAYPY%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1893088365/2ca4b782dda90abea1fe5f4150af/CleanShot+2025-12-18+at+13_14_30%402x.png?expires=1792648800&signature=7bfe3a3b17046553c8669e133b3ed4f227864d09c2b50b3a8568116a7ef5b817&req=dSguFcl2lYJZXPMW1HO4zWggDtxXopSSRC8c%2FcM5c2K0svzSG5NMdh4WnhWo%0AKVjVQdwA3Gp70dYgQc8%3D%0A) ### Enable the voice shortcut (optional) diff --git a/content/support/12883420-view-usage-analytics-for-team-and-enterprise-plans.md b/content/support/12883420-view-usage-analytics-for-team-and-enterprise-plans.md index 34ac8ec446..334c671705 100644 --- a/content/support/12883420-view-usage-analytics-for-team-and-enterprise-plans.md +++ b/content/support/12883420-view-usage-analytics-for-team-and-enterprise-plans.md @@ -22,7 +22,7 @@ This page includes the following analytics: - Sessions in Cowork -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2515895966/9f231a620f47d49e0ee648152189/848c1787-4eaa-4809-8fd2-1dbe2722560f?expires=1792613700&signature=e9b20c46a7e9e719f32134f43ed1a87632610c76bcadc4d941c9a7c715f1f043&req=diUmE8F3mIhZX%2FMW1HO4zZL6wKR0moZ2ExEG4dCAGDbvTSHoqGbHrGVU7BOy%0ACSNEYzNpNET3Y7HTBII%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2515895966/9f231a620f47d49e0ee648152189/848c1787-4eaa-4809-8fd2-1dbe2722560f?expires=1792648800&signature=ae5aace147c52f0ef2b6bfede2767554ad655e3f4567d891ea63bb60439585ca&req=diUmE8F3mIhZX%2FMW1HO4zZL6wKR0n415ExEG4dCAGDbH56mjYzhQzueUBCwB%0AyUCkVIbQ9fqxZnqwB6Y%3D%0A) ### Who’s using Claude? @@ -34,7 +34,7 @@ This page includes the following analytics: Use the dropdown on the **Active members and assigned seats** chart to filter by product, including Claude Design. -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2515896351/4d955858e6662c37489cc1470871/457cf159-8c2a-4403-ba22-cb92cb47e459?expires=1792613700&signature=bb30b6aba0c15cfa8c429491f5435816e646cf992f37878ef19e386b6e6b5134&req=diUmE8F3m4JaWPMW1HO4zYEqezWvQ5OoYqPRsgaNdTxHYJQYInCwSHXqI2Ug%0Ak2WyRiz16bBhiDUNI%2FU%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2515896351/4d955858e6662c37489cc1470871/457cf159-8c2a-4403-ba22-cb92cb47e459?expires=1792648800&signature=4ebf9fb61a548d88de266d5fe0e11669dd6187b4fb52f74eafb939fb948e3abb&req=diUmE8F3m4JaWPMW1HO4zYEqezWvRpinYqPRsgaNdTxrx53lm3O%2FYbgFoi1c%0ARrNWifs1SYS30%2BJhUK4%3D%0A) ### How are they using Claude? @@ -48,9 +48,9 @@ Use the dropdown on the **Active members and assigned seats** chart to filter by - How agentic is their work? (beta) -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2583875713/e3cb3c329f3b643cb9a3809876b3/image.png?expires=1792613700&signature=2fb6191ecc5ce08b4e3b21f3f417626357641ccefb9eb96fb725c84cf654c7ec&req=diUvFcF5mIZeWvMW1HO4zciS3Krvm71sDFD6TO7tG4iROG%2F%2BlRw5B%2FVEWZzC%0AuSCsHAOqjwLcJGrHUGY%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2583875713/e3cb3c329f3b643cb9a3809876b3/image.png?expires=1792648800&signature=3ff5d686023e90900f8e9891ed3fe94e34aa7f2b9127e4e5ebcd7803f0699b9b&req=diUvFcF5mIZeWvMW1HO4zciS3KrvnrZjDFD6TO7tG4gnFPToMUoMk9lq5%2BO6%0AEIZr5YGZTjUTU1gp0n4%3D%0A) -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2515896563/abf008596ce5501297a609696362/fce5423c-4769-4b73-9a0a-c50f6407ebea?expires=1792613700&signature=1bd6c60f5f9361f25309e78e12e486995542d31f9b31edfc8b6d7887f222260b&req=diUmE8F3m4RZWvMW1HO4zR%2BID4VovPTwLS3kobW3ZgT%2BSUckTqcG2CSyKImL%0AiosHk0zPAioJFw3pVM0%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2515896563/abf008596ce5501297a609696362/fce5423c-4769-4b73-9a0a-c50f6407ebea?expires=1792648800&signature=3542c5170a4b8fb2e4bb0d57a7696dfffb8c63354025857f70695f5b12841e28&req=diUmE8F3m4RZWvMW1HO4zR%2BID4Vouf%2F%2FLS3kobW3ZgR3AwcP0ywWZCT15oWs%0A9LqsMH78Uf%2F5k3Rdx1E%3D%0A) ### What are the results? @@ -66,7 +66,7 @@ Use the dropdown on the **Active members and assigned seats** chart to filter by - Estimated time saved -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2515896943/dd415f03afe56ca38308ef987f86/189e8ebc-5594-4f4b-bd84-e3c11c824d5b?expires=1792613700&signature=69e8e8de86004682743183bfd524f0b241b54c83ca3e95e8f93cd48435e44e1d&req=diUmE8F3m4hbWvMW1HO4zfJThSY5qN9BiovaLYNN7Rnp7CKqX0rwSzNxTOOQ%0A1g0IjVxHI0AcE2%2FBhTE%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2515896943/dd415f03afe56ca38308ef987f86/189e8ebc-5594-4f4b-bd84-e3c11c824d5b?expires=1792648800&signature=0bdacaa2e4b4a1286727f934d56d2ba53994173e6a6d52d4bab3e38145060a3a&req=diUmE8F3m4hbWvMW1HO4zfJThSY5rdROiovaLYNN7RmnYAfCnSCC8SMny5ol%0AtDE9qCLDc4dKLPgQYRA%3D%0A) ### How much is Claude costing? @@ -82,9 +82,9 @@ This section includes the following analytics: - Spend by model (month-to-date, quarter-to-date, year-to-date, 1 year) -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2515896942/b403f2d216fc40b5195911020b8e/446b99f1-3187-4b79-b2be-9f17b1632ff8?expires=1792613700&signature=84d4305daec68b5ffa196f029b4dd522b206c592ca36de96763256dc336c53a4&req=diUmE8F3m4hbW%2FMW1HO4zYE%2BQtwE7TLaWbBLGZ4vBJWnAnBi0Ws3sIHw7E3l%0Arwk%2FiDErNnk6SVjzVJ4%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2515896942/b403f2d216fc40b5195911020b8e/446b99f1-3187-4b79-b2be-9f17b1632ff8?expires=1792648800&signature=5104116dac9830dda0cb21d7efa58db6147df0a4d3afadbb20a3a696de1cffab&req=diUmE8F3m4hbW%2FMW1HO4zYE%2BQtwE6DnVWbBLGZ4vBJUwmmTxvuKHvdGx6XwX%0AOL%2FSYAJw20aV%2F%2BU6YGI%3D%0A) -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2515896941/2239ce38639df339b24d5af1cb50/f829bc2a-ee52-4135-9b13-09ef1b7d66d6?expires=1792613700&signature=9df320b6dad12e29326b8a89cf8fc7113435ce1aa145f96ba1aa4bfada1b8502&req=diUmE8F3m4hbWPMW1HO4zTz0N%2BgEJspXC%2BtvTPa1I7ExMMEXi%2F6OZxTqR3N7%0AkNSA2wdz%2FWmDFGQMcmQ%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2515896941/2239ce38639df339b24d5af1cb50/f829bc2a-ee52-4135-9b13-09ef1b7d66d6?expires=1792648800&signature=6dfaa330f5ec90a09c3c08ca43cc1314756880e4b8e4a691930a41ed351053e3&req=diUmE8F3m4hbWPMW1HO4zTz0N%2BgEI8FYC%2BtvTPa1I7FpgRx%2FIhjuo2tmmUii%0AcmMBkZ48IgI2P2TUGyo%3D%0A) **Note:** For a view of how spend limits are affecting your organization, you can also check the **Blocked by a spend limit** section at the top of **[Organization settings > Usage](https://claude.ai/admin-settings/usage)**. **Blocked by a spend limit** is built for usage-based Enterprise plans. Orgs without usage-based seats only see how many members are blocked or near their limit right now. Learn more about **[monitoring usage and spend on Enterprise plans](https://support.claude.com/en/articles/11526368-how-am-i-billed-for-my-enterprise-plan#h_ae17ec8236)**. @@ -162,7 +162,7 @@ Navigate to **[Analytics > Claude Chat](https://claude.ai/analytics/usage)** to - Top members by chats -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2515898793/405db0c492da11886c28a2b82731/71a55afc-1cef-4c50-b7e1-86775cb9a168?expires=1792613700&signature=1762c7f02d6b50fd8860504633d20128cd8586c16912b51be20aa2ec761a033c&req=diUmE8F3lYZWWvMW1HO4zbhc8P%2BaYOcmTcfMEUwBBiVcH193UtpmriSTJUFU%0AIzLeiRPZ59d%2BLC3jO3w%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2515898793/405db0c492da11886c28a2b82731/71a55afc-1cef-4c50-b7e1-86775cb9a168?expires=1792648800&signature=f9ef34a18a030047f73004464c2b61d17dd35206e69bcb35f9e92fd45ee47852&req=diUmE8F3lYZWWvMW1HO4zbhc8P%2BaZewpTcfMEUwBBiWzae9V84RYOtpbxECN%0AvcvOKhBUxcfcBk%2F5SxU%3D%0A) ### Projects @@ -174,7 +174,7 @@ Navigate to **[Analytics > Claude Chat](https://claude.ai/analytics/usage)** to - Top members by project usage -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2515899610/91d93108f0767e795fb9e488e882/71607d6d-dff1-4a13-a445-aa1d79850eed?expires=1792613700&signature=565665bdc28e73d21302ab027f04e2c73f088583f5d59b70bee985b7e36fdef9&req=diUmE8F3lIdeWfMW1HO4zWhGoD6fmiClExu5cYiHHN%2Fa3xyFP0dDtV1d%2Ftu3%0AOjpLXt4yKisRvmXmFQ4%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2515899610/91d93108f0767e795fb9e488e882/71607d6d-dff1-4a13-a445-aa1d79850eed?expires=1792648800&signature=a5d0275f74b43c79d9e6696e19bda8de08c5caa40da7c8d292a89d9646a4a505&req=diUmE8F3lIdeWfMW1HO4zWhGoD6fnyuqExu5cYiHHN%2FJHLfSJ6RGPrwC%2BVjw%0ANHtfilCNDu0rx0IJPpw%3D%0A) ### Artifacts @@ -184,7 +184,7 @@ Navigate to **[Analytics > Claude Chat](https://claude.ai/analytics/usage)** to - Top 10 users by artifacts generated (month-to-date, quarter-to-date, year-to-date, 1 year) -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2515899838/33d737f2357d6e485704669962ae/43faadc3-47da-4a93-bbb7-47a7983e7441?expires=1792613700&signature=f07e6be54382b049869b3c500865fbc6ca0a100335e0f7fd1b856af01ee0dce6&req=diUmE8F3lIlcUfMW1HO4zcSk47jUf%2B3HjHDogqK0V%2BzDAGPFcuYR%2BQ5PxSxb%0ASChd0mH%2BXRa53GDkgHM%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2515899838/33d737f2357d6e485704669962ae/43faadc3-47da-4a93-bbb7-47a7983e7441?expires=1792648800&signature=269a7fdb61a076e159c2e87e2062470163ba784607ee0870becdb48ad39f2dd8&req=diUmE8F3lIlcUfMW1HO4zcSk47jUeubIjHDogqK0V%2BzhfBeupwU9h9ZemXv0%0AaNztorHpNeqe3%2B5mghg%3D%0A) --- @@ -280,7 +280,7 @@ Navigate to **[Analytics > Cowork](https://claude.ai/analytics/cowork)** to view - Daily, weekly, and monthly active Cowork users -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2515901489/8005693d55b7fefbfe9233258d39/106c22a0-3f47-47a6-abbd-4788dd70f218?expires=1792613700&signature=84aba14fb4a8f26e1a26d1a082e01d46536ef7fb22d4825f31706a074d3e8acc&req=diUmE8B%2BnIVXUPMW1HO4zX7WE4q3XEKvFSi1Z3SzLLv3%2B3S%2BxZ6HpZz4MFqU%0ApoYmGGn578lKRQOhmU4%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2515901489/8005693d55b7fefbfe9233258d39/106c22a0-3f47-47a6-abbd-4788dd70f218?expires=1792648800&signature=c04c35b6c8ded6fbf57deeec73d533e78599859f8cab8feee0b40364ee28a482&req=diUmE8B%2BnIVXUPMW1HO4zX7WE4q3WUmgFSi1Z3SzLLs77vgIg916mMqbHuaL%0ANkLdT0BxL%2B4Tb689yfg%3D%0A) **Note:** Cowork analytics are available alongside Chat and Claude Code data in the **[Analytics API](https://platform.claude.com/docs/en/manage-claude/analytics-api)**. @@ -296,7 +296,7 @@ Navigate to **[Analytics > Surveys](https://claude.ai/analytics/surveys)** to as On Enterprise plans with usage-based billing, when your admin turns on individual usage analytics, any member of the organization can see their own usage broken down by product, model, and skill, along with where they stand against any spend limits set for them. Individual usage analytics are available in **[Settings > Usage](https://claude.ai/settings/usage)**. -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2533906328/1f5cd0a57def40676410f8f379b4/member-usage-30d-model.png?expires=1792613700&signature=c463e35edf1674b548a020d1e7308b55a7e457098160d53909ed3a63296ea680&req=diUkFcB%2Bm4JdUfMW1HO4zfveBq3DfejdWGUKUw6QS4%2FUxxAc%2FycXKPRiDi21%0AO%2FwdTuexLiB9Q1ZtBp4%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2533906328/1f5cd0a57def40676410f8f379b4/member-usage-30d-model.png?expires=1792648800&signature=b44785493a22d9c5a47bfb0ccd2e054560723befff0f2d5f7f481eebfbea8848&req=diUkFcB%2Bm4JdUfMW1HO4zfveBq3DeOPSWGUKUw6QS4%2F5G7uYZBQYacC0Snp6%0ADr6Pgh6dcltWIyTOBzY%3D%0A) --- diff --git a/content/support/12902446-claude-in-chrome-permissions-guide.md b/content/support/12902446-claude-in-chrome-permissions-guide.md index b38b5f6907..495b5ad80b 100644 --- a/content/support/12902446-claude-in-chrome-permissions-guide.md +++ b/content/support/12902446-claude-in-chrome-permissions-guide.md @@ -28,7 +28,7 @@ In "Manually approve," Claude checks with you before it acts. What that looks li Claude creates a plan from your prompt, which you can approve before Claude starts. The plan specifies which websites you're allowing Claude to access, as well as the approach it will follow: -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1843320727/8d1c859ae9b8e0cdb536d024bf40/9bc3d239-8eb6-4bae-a032-a236f88ee606?expires=1792613700&signature=fff823e4242d713f196e5634b8e2bc725911ca53d1764dd87f44f3b8d2d439d8&req=dSgjFcp8nYZdXvMW1HO4zYqyZMBL%2FYGwgN0ADj5oqFAwUMWdpql%2BYjZL0zjs%0AZK84XmVfop%2FfZM4F%2F48%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1843320727/8d1c859ae9b8e0cdb536d024bf40/9bc3d239-8eb6-4bae-a032-a236f88ee606?expires=1792648800&signature=2c04873686a47165184930b02b87df6dd90f3a2ae06251090d620ae259b5d6d8&req=dSgjFcp8nYZdXvMW1HO4zYqyZMBL%2BIq%2FgN0ADj5oqFCR7%2B7KR3LORqvPp4mS%0Ar%2BP0mOBCwTMddY9F3i4%3D%0A) Note that Claude will only use the websites listed in the plan, so you’ll need to manually approve any additional access requests. @@ -62,7 +62,7 @@ When you choose "Skip all approvals," Claude doesn't pause to ask, and nothing c There are some websites on which Claude requires approval for every action. If you navigate to one of these sites, a **New permissions required** prompt will appear in the extension side panel, Claude Cowork, or Claude Code where Claude will ask for permission before accessing the page or taking any action. -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2604970825/d7b961271be69e7541b406df1efd/d845324e-6b4a-4f54-83b9-0bea86ec09c6?expires=1792613700&signature=db04bb4faf5948b5cb68e4419d64f1f3251ff9de917ee25fdf8f7dcaa3cbb281&req=diYnEsB5nYldXPMW1HO4zZ3Nq2R2iS%2Fr7A4lHPBihAV3WZ4zq9GquZGDJWXo%0AZGzcPKuN%2Fr20OhJPvcg%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2604970825/d7b961271be69e7541b406df1efd/d845324e-6b4a-4f54-83b9-0bea86ec09c6?expires=1792648800&signature=2582163af4670e867e5a9c0841673867635d7cd0c842a8082a592e5d2e65a5cd&req=diYnEsB5nYldXPMW1HO4zZ3Nq2R2jCTk7A4lHPBihAWhQlQb6Sh5CJJyFaf3%0AsHrC0NosnOls2Irs5Jg%3D%0A) ### Permission options diff --git a/content/support/12997503-team-plan-billing-faqs.md b/content/support/12997503-team-plan-billing-faqs.md index cc8fe1dad3..57418766f0 100644 --- a/content/support/12997503-team-plan-billing-faqs.md +++ b/content/support/12997503-team-plan-billing-faqs.md @@ -18,7 +18,7 @@ Your organization's billing address determines where your invoices are sent. You If you want to use a name other than the one tied to your payment method, an organization Owner should check the "Use a different name on invoices" box when adding or updating your payment method in **[Organization settings > Billing](https://claude.ai/admin-settings/billing)**: -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1922145253/f2e3d4e0fe43a2ea07e89244764c/image.png?expires=1792613700&signature=ebe9de5fa97546b5512af289c86d0494aa4576aff79d2792f919849cec6945ab&req=dSklFMh6mINaWvMW1HO4zRZTxVjHusjUKAqLF4ERnlUpOpSzI6mYCrr9Ikec%0Ayygne%2Fgt%2B%2FRBTojlDks%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1922145253/f2e3d4e0fe43a2ea07e89244764c/image.png?expires=1792648800&signature=1fb4e7c3104e174774cd317553a473de8cd92d510158d5894cc699dbe9c956e7&req=dSklFMh6mINaWvMW1HO4zRZTxVjHv8PbKAqLF4ERnlWZw2VE0QaumCBUXAkr%0AD889%2FtPto3hEmcpMokA%3D%0A) ## When will I be billed? diff --git a/content/support/13132885-set-up-single-sign-on-sso.md b/content/support/13132885-set-up-single-sign-on-sso.md index 1d85a542d0..790feabe9d 100644 --- a/content/support/13132885-set-up-single-sign-on-sso.md +++ b/content/support/13132885-set-up-single-sign-on-sso.md @@ -42,7 +42,7 @@ You can verify multiple domains for a single organization, but all domains must 3. Enter the domain(s) you want to verify in the **Update organization email domains** modal and click the “+” button: -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2498843282/561d5ceb1c3a5df75bdfee8bfc3f/d2491145-362d-490b-bdcf-66a0a7656ddc?expires=1792613700&signature=5b855e22111f83a293a02997639800a344d3c015c0b8619bec3e97d778038f6d&req=diQuHsF6noNXW%2FMW1HO4zSdmH34%2F%2B8eLe3H0OpmIzWE1zCK7LrMpK%2FPax8It%0A7BHk%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2498843282/561d5ceb1c3a5df75bdfee8bfc3f/d2491145-362d-490b-bdcf-66a0a7656ddc?expires=1792648800&signature=d7dfeb67306ae93962e9b0d928f2b748da7a23c0216d91197640e531124f985b&req=diQuHsF6noNXW%2FMW1HO4zSdmH34%2F%2FsyEe3H0OpmIzWGKfcpM%2F%2B1LA9F1N8ut%0Aw7st%0A) 4. Click “Save” when you’re finished adding domains. @@ -50,7 +50,7 @@ You can verify multiple domains for a single organization, but all domains must 6. Enter your domain in the text box and click “Continue”: -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2047042630/0617a562cd28a7ff0e607d66a30b/6bd08e1d-2b65-40ab-bc79-a257153854c1?expires=1792613700&signature=fb311caf9900004d5690e8c2b507370d6df6a7f8fe9853347fb501355f6244cd&req=diAjEcl6n4dcWfMW1HO4zWHctB%2BRltKtyoyXAW0OlXpqTIEDXK59O%2BmW2eXp%0Adpz2%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2047042630/0617a562cd28a7ff0e607d66a30b/6bd08e1d-2b65-40ab-bc79-a257153854c1?expires=1792648800&signature=4c39d488ec8f8e3b56cb124978f40da7c2caf8409b5210018cf8d5769011f6ff&req=diAjEcl6n4dcWfMW1HO4zWHctB%2BRk9miyoyXAW0OlXoeEYtleSxmt4WGBBBd%0Aj%2Fg7%0A) 7. The setup screen displays a TXT record. **Copy the full Value using the copy button**—it begins with `anthropic-domain-verification-` and is longer than what's visible in the box. In your DNS provider, add a TXT record to your domain and **Value** set to the copied string. The domain must match exactly what you entered in the previous step, including any subdomains. Add it alongside any existing TXT records; don't replace them. The value is case-sensitive, so paste it exactly. Please refer to your DNS provider's documentation on this topic. @@ -76,7 +76,7 @@ Clicking "Refresh" re-checks your DNS; it won't show Verified until the publishe If the record is correct and propagated but the status still shows Pending, contact Support. -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2047044496/b8df54a0331784cc9ae8f00112aa/bf9609c1-dc93-4665-a066-4cae2fe4b002?expires=1792613700&signature=507dec81e414bbe47f5ad3b38163be64b22accfa0d4d91106f1255942c8fa339&req=diAjEcl6mYVWX%2FMW1HO4zVjmWCsGbne%2BPM2D8ZcdgriGoUsyVZkj6jfRPPmd%0AlcVXGNBq%2BwOb1SxAj4k%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2047044496/b8df54a0331784cc9ae8f00112aa/bf9609c1-dc93-4665-a066-4cae2fe4b002?expires=1792648800&signature=adad58cfece8cc6686cad59ee2eb86091006172c555d8b45c67be68bc3265605&req=diAjEcl6mYVWX%2FMW1HO4zVjmWCsGa3yxPM2D8ZcdgriIa1GJ4pPv1puy4FE%2F%0A0IL2i%2Fikmy66BlPpu1k%3D%0A) **Note:** Once your domain is verified, you'll see a **Restrict organization creation** toggle under **Security** on the Organization and access organization settings page. Enable this if you want to prevent users from creating new Claude or Console organizations—including personal accounts—using your verified domains. @@ -116,7 +116,7 @@ For IdP-specific setup instructions, see: You can now choose to toggle on **Require SSO for Console** and/or **Require SSO for Claude,** on the **Organization and access** page, under the **Authentication** section: -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2312690200/bd2403586d4f6651ccd79e2a45af/b9f8d7ce-0def-49d9-bfb2-3a14352d7214?expires=1792613700&signature=359fc2c476e03c7a04bb566901bafd737b0f829e2ef87f3c67815346073b78e1&req=diMmFM93nYNfWfMW1HO4zdAICg2nA38NItXtKivx6ZFZNjZu59GziMa1U1kg%0AF7L%2F6fq1AlPgEhSE%2BrM%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2312690200/bd2403586d4f6651ccd79e2a45af/b9f8d7ce-0def-49d9-bfb2-3a14352d7214?expires=1792648800&signature=9f04ef16f09f50f343f731dfc3296d82f4f087c9cef4bb0fd48d7a6bb30f2ef0&req=diMmFM93nYNfWfMW1HO4zdAICg2nBnQCItXtKivx6ZGmEz9cCJ0%2BeDch7jmR%0AFPVAZs6yXZsWtDMQ%2F8c%3D%0A) When SSO is required, users must use the “Continue with SSO” option to log in to their Claude/Console accounts. When SSO is not required, they will have the option to choose “Continue with SSO” or “Continue with email.” diff --git a/content/support/13133195-set-up-jit-or-scim-provisioning.md b/content/support/13133195-set-up-jit-or-scim-provisioning.md index 87dccb6dac..52284bc2c4 100644 --- a/content/support/13133195-set-up-jit-or-scim-provisioning.md +++ b/content/support/13133195-set-up-jit-or-scim-provisioning.md @@ -40,7 +40,7 @@ Use this table to help decide which provisioning mode is right for your organiza Both JIT and SCIM can be combined with **Enable group mappings** to control role or seat tier assignment based on IdP group membership. If you select either of these options for your provisioning mode, **Enable group mappings** will appear within the **User provisioning** section: -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2312706099/35d5d3ec149880a96bb7acec59f6/a4cfce55-86bf-40b0-b455-c8f412d48e9e?expires=1792613700&signature=b794ffa95b524a002ed38ff75d9a4690e34ea0e188483382b0b7f24380267040&req=diMmFM5%2Bm4FWUPMW1HO4zXBDQqlSDFlxxFMG%2BIEvQSev8NO0s1kCazAMnr7m%0AZOAsk4fDObCgLcMglNE%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2312706099/35d5d3ec149880a96bb7acec59f6/a4cfce55-86bf-40b0-b455-c8f412d48e9e?expires=1792648800&signature=ea18bb6e9b5a7b9062381a6d5cd396763c3aed291b2da239e7720b57a133f0b4&req=diMmFM5%2Bm4FWUPMW1HO4zXBDQqlSCVJ%2BxFMG%2BIEvQSf3Fz4XZ7rXxH%2F21tDn%0AgUh51w%2FYBOqKg7%2B0XdM%3D%0A) **Important:** Group mappings set a user’s role type and seat tier only. Users with the Custom role get their permissions from groups in Claude, and those groups sync from your IdP only when your provisioning mode is SCIM directory sync. With JIT, you need to create groups and add users to them manually in **[Organization settings > Groups](https://claude.ai/admin-settings/groups)**. If you map an IdP group to the Custom role under JIT without doing this, those users have no permissions when they log in. Learn more about **[managing groups on Enterprise plans](https://support.claude.com/en/articles/13799932)**. @@ -136,7 +136,7 @@ Learn more about **[setting up role-based permissions on Enterprise plans](https 4. Toggle **Enable group mappings** on (if it’s not already): - ![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2312714635/b57870b51e6511c8293637bceee2/da1ceabc-b6bc-451b-9cda-24ff6aa90d02?expires=1792613700&signature=11c0e7ffa351bfa0bf4c7af63927aea466f4aa75eb23e5e009c89f7b81b170af&req=diMmFM5%2FmYdcXPMW1HO4zeBEb8felvlPyb72rapuHpNdZo3SG9Z1faLjVQWd%0AmuwM%0A) + ![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2312714635/b57870b51e6511c8293637bceee2/da1ceabc-b6bc-451b-9cda-24ff6aa90d02?expires=1792648800&signature=2c86db7540953d8a9df51fb28be2f2b88498eb2dec447d4ebdd9bc7f63c6858b&req=diMmFM5%2FmYdcXPMW1HO4zeBEb8fek%2FJAyb72rapuHpPqWHW5fTdgbEfwWm2J%0AYbc1%0A) 5. In the **Enable group mappings** section, click “Add” next to each role and select the corresponding group from your IdP in the dropdown. @@ -188,7 +188,7 @@ Verify you have enough seats purchased and available to add members to your org. 4. **For SCIM:** Click "Sync" to prompt an immediate sync, or wait for the automatic sync cycle: - ![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2312717421/c97fce49ad17d4660880a05fbaaf/59fbfa2a-1072-4662-8ca5-102970d5a795?expires=1792613700&signature=869685e3b2967ce0ef4601c360558060cac3cf7e5678ecfbe864458fa7440cbd&req=diMmFM5%2FmoVdWPMW1HO4zZ9Lal%2BrGMnF5hujYvMis4cvp9L1EgEM616bv1yr%0AX5Kf%0A) + ![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2312717421/c97fce49ad17d4660880a05fbaaf/59fbfa2a-1072-4662-8ca5-102970d5a795?expires=1792648800&signature=78de4fab0e7380f2996381fd9c77d668e5c1e8062195b15fdb1d90e58c870144&req=diMmFM5%2FmoVdWPMW1HO4zZ9Lal%2BrHcLK5hujYvMis4dz20a7%2BKnVlAZsq%2Bnh%0AJIDQ%0A) ### Users mapped to the Custom role can't access anything after logging in diff --git a/content/support/13163631-configuring-session-security-settings.md b/content/support/13163631-configuring-session-security-settings.md index dda7a3c36c..ef56c6a764 100644 --- a/content/support/13163631-configuring-session-security-settings.md +++ b/content/support/13163631-configuring-session-security-settings.md @@ -18,7 +18,7 @@ Session duration controls allow Enterprise and Console Admins to set a maximum s 5. Confirm your selection by clicking “Enable.” -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1888469436/1725e63ea1a2615948faecf4ec73/9bd276a1-7329-414d-87a1-d04dac93fff7?expires=1792613700&signature=026f6ccaba6a1ed4b6d1412afacc12585a4577cbedc9ed8d65206aeeb3b9b776&req=dSgvHs14lIVcX%2FMW1HO4zQNx6uAhQllXg%2F6XaftFnjyzHTC5vWpV0ZYdnoqy%0AmyFTqzWZSu0uIWM7ZQQ%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1888469436/1725e63ea1a2615948faecf4ec73/9bd276a1-7329-414d-87a1-d04dac93fff7?expires=1792648800&signature=fd59cea186adff33b3c921af965914fd7b37da9a836e15810c0769fcfc3612e5&req=dSgvHs14lIVcX%2FMW1HO4zQNx6uAhR1JYg%2F6XaftFnjybX3p%2FufcW0rJUvaDI%0AqnmyK4C8oLRZapqBvOk%3D%0A) ### For Console Admins @@ -32,7 +32,7 @@ Session duration controls allow Enterprise and Console Admins to set a maximum s 5. Confirm your selection by clicking “Enable.” -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1888469435/7a766bbe02e61c7d8f05deb5b8f0/b0bda400-47c6-43dd-9907-131ebe180b36?expires=1792613700&signature=a24b1bb8ec0ddcee8e1c3a1c5931b768d8c9bd57abe31d9dd72ae3d945643dd1&req=dSgvHs14lIVcXPMW1HO4zWzx2bswJnwmXZ5D7eVpMtdUWPFeucMs97eXjVGz%0A851%2FEEvIEdn52aGcmc8%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1888469435/7a766bbe02e61c7d8f05deb5b8f0/b0bda400-47c6-43dd-9907-131ebe180b36?expires=1792648800&signature=bf2ed616fe96d17f909f9ff98e6aa05ab1d77ddf1d9afd4da3909854295615c9&req=dSgvHs14lIVcXPMW1HO4zWzx2bswI3cpXZ5D7eVpMtf6BtsPjOvGlGZmklhz%0AphgpiN5mOzt%2Br4ZDhXg%3D%0A) ### What happens after enabling shortened session length? @@ -50,7 +50,7 @@ You can change the session duration at any time by selecting a new value from th - Sessions scheduled to expire beyond the new duration will have their expiration shortened accordingly. -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1888469437/46ac5bc55484ca01556d87a5ade7/b01a7651-ad65-4b32-93ff-16dbc9ca97c0?expires=1792613700&signature=5a3c5094b7259bf42ec5be6fddc9858a85fa2a77f136ebaa993bf2bbb364d333&req=dSgvHs14lIVcXvMW1HO4zZ7mW8qd5jqkA00cbyPOLDUwzjr5Ak7La9Es5ZJS%0A%2B3KRFdXOe3CxZprnKfA%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1888469437/46ac5bc55484ca01556d87a5ade7/b01a7651-ad65-4b32-93ff-16dbc9ca97c0?expires=1792648800&signature=f877d566c013ec8053e891563985cfbc38d573835d5297f52ccd4749774b34aa&req=dSgvHs14lIVcXvMW1HO4zZ7mW8qd4zGrA00cbyPOLDVTlCc1BO5qqkylneYx%0Avo69SCJTiTVMKzGd2XY%3D%0A) ## Disabling session length settings diff --git a/content/support/13189465-log-in-to-your-claude-account.md b/content/support/13189465-log-in-to-your-claude-account.md index 83c7a806f3..8dd80b6c10 100644 --- a/content/support/13189465-log-in-to-your-claude-account.md +++ b/content/support/13189465-log-in-to-your-claude-account.md @@ -2,7 +2,7 @@ When you open Claude on a web browser ([claude.ai](https://claude.ai)), the desktop app, or a mobile app, you will see two different options for logging in to your Claude account. -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1893216804/f2209c3ec6cf4fc2e803d13bbc9d/40520c9e-ff82-4a7c-adca-5a064fe18d8c?expires=1792613700&signature=24f518b9fc20eafc138bb9ef289c7b5d365c886faedc3899df2bd32caddbd8de&req=dSguFct%2Fm4lfXfMW1HO4zXg5B4CK4hGzzWhrqpWiTMnU6PySa9lPGa8lgj%2FE%0ADo%2Bqo0jcdEglovnrTsk%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1893216804/f2209c3ec6cf4fc2e803d13bbc9d/40520c9e-ff82-4a7c-adca-5a064fe18d8c?expires=1792648800&signature=293eb95d2105667f9125508048d680809a580ec8f376ccf3d96d7ed37992b2ef&req=dSguFct%2Fm4lfXfMW1HO4zXg5B4CK5xq8zWhrqpWiTMnX2m7B11USXEX3wZhc%0A%2F5lNPpk4QTipiaspmt8%3D%0A) ## Continue with Google diff --git a/content/support/13325567-account-management-faqs.md b/content/support/13325567-account-management-faqs.md index 5db8c259ec..556f262f1e 100644 --- a/content/support/13325567-account-management-faqs.md +++ b/content/support/13325567-account-management-faqs.md @@ -44,6 +44,6 @@ The email domain that was used to create your Team or Enterprise plan organizati Owners can remove domains by opening up the same modal and clicking the trash can icon to the right of the domain: -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2053873852/1cbccea3b7067e03205f2ff8546b/CleanShot+2026-02-11+at+11_16_07%402x.png?expires=1792613700&signature=6ea1f553a2877135a5e6f6cfa434b813f175efeadc6f249708dc51c65cb8255e&req=diAiFcF5nolaW%2FMW1HO4zUrhF%2BmeaAsdkeFUnrkrQZhnJORmC3WhZ%2F4s6P5C%0AQET%2FSO4TF2NaqHr1kcM%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2053873852/1cbccea3b7067e03205f2ff8546b/CleanShot+2026-02-11+at+11_16_07%402x.png?expires=1792648800&signature=4a47288c404e73319a1d229eca88d38cf3562c295589cdd056f71412ea9ae50c&req=diAiFcF5nolaW%2FMW1HO4zUrhF%2BmebQASkeFUnrkrQZhsbEG3eMQS8sv1pXxc%0A4NFJV05cZBYHwiu9tDc%3D%0A) While the account creator must use a business email address, you can add public domains like @gmail.com, @yahoo.com, and @hotmail.com as allowed domains for other members of your organization. \ No newline at end of file diff --git a/content/support/13345190-get-started-with-claude-cowork.md b/content/support/13345190-get-started-with-claude-cowork.md index f00a1d6cab..4a7ebb82a7 100644 --- a/content/support/13345190-get-started-with-claude-cowork.md +++ b/content/support/13345190-get-started-with-claude-cowork.md @@ -182,7 +182,7 @@ To set global instructions: 3. Type your instructions in the text box and click "Save": -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2525926874/15324ac4155d7802272e8bdef04b/ec66cd09-a4db-4f1d-8f30-226c9d126333?expires=1792613700&signature=683b8a3f0780c4bef35e4247c1858bed5d11270a6dcc5b817d79197ee7c8b346&req=diUlE8B8m4lYXfMW1HO4zcDl69rqN1K38iWjaktE941ocsf3znbtpZ44Y1T0%0AolnRR9ARoGTfiuNZW24%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2525926874/15324ac4155d7802272e8bdef04b/ec66cd09-a4db-4f1d-8f30-226c9d126333?expires=1792648800&signature=97868d80b6bdf98476c8eef7e64ab7d47fa9d3b066cd83091aa1e0924306c73d&req=diUlE8B8m4lYXfMW1HO4zcDl69rqMlm48iWjaktE942jNSsPOjEXHkPRdlsD%0Aq17EhK4sKU6lemg3gzg%3D%0A) ### Folder instructions diff --git a/content/support/13371040-log-in-to-your-console-account.md b/content/support/13371040-log-in-to-your-console-account.md index 476e80120b..813c388cc6 100644 --- a/content/support/13371040-log-in-to-your-console-account.md +++ b/content/support/13371040-log-in-to-your-console-account.md @@ -2,7 +2,7 @@ When you navigate to the **[Claude Console](https://platform.claude.com)**, you will see two different options for logging in to your Console account. -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1935026646/d90d1613a3dbe763fef5abb96e3c/image.png?expires=1792613700&signature=592a81a3785e276bb1503fbd9cc3020bcd7b1af6e5aa6b2ce6bb5da858792dd4&req=dSkkE8l8m4dbX%2FMW1HO4zcrI5ovqoYMK8vUNcPt4%2B71w82wUwjU0wA4tAGEr%0AN7f3B4UO%2B5UUo9Grf5M%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1935026646/d90d1613a3dbe763fef5abb96e3c/image.png?expires=1792648800&signature=db28af14454d8bfda4e17d08878a03387c2ad428ac71241f1a9880bbc3fbb2a3&req=dSkkE8l8m4dbX%2FMW1HO4zcrI5ovqpIgF8vUNcPt4%2B73z%2BDIIukxyZtApNCVK%0AYfFiXx6thp0s23nCGNw%3D%0A) ## Continue with Google diff --git a/content/support/13641943-visual-and-interactive-content.md b/content/support/13641943-visual-and-interactive-content.md index 14b30981b7..146d429ab7 100644 --- a/content/support/13641943-visual-and-interactive-content.md +++ b/content/support/13641943-visual-and-interactive-content.md @@ -18,7 +18,7 @@ Claude can show current weather conditions and forecasts when you ask about the Claude automatically displays temperatures in Fahrenheit for US locations and Celsius for everywhere else. -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2040544927/3a9c695b24df387ecdd766ad308c/8be9f393-dcb0-4ff8-89e8-5fa47bedaa38?expires=1792613700&signature=cdf7f4024053b20c6220b6a34a638006745592a7ab68440fccfb144de9542f5f&req=diAjFsx6mYhdXvMW1HO4zXlB7Dy81BuPdgndksVD5R1dTDYS1KoR2iIoeZ6K%0AR7jccXeopKqmFQwIgLI%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2040544927/3a9c695b24df387ecdd766ad308c/8be9f393-dcb0-4ff8-89e8-5fa47bedaa38?expires=1792648800&signature=153bf8697917eb38fa403a6f2016f50cc05d6f2d7b0ab08e755fece657b782dc&req=diAjFsx6mYhdXvMW1HO4zXlB7Dy80RCAdgndksVD5R2c0jB9tce12%2B47y2KG%0AcfDWjT94rPKk1Nb2idc%3D%0A) Weather is powered by Google Maps (). @@ -28,7 +28,7 @@ When you ask about recipes, Claude can display formatted recipe cards that are e **Note:** Visual recipe cards are available on web and desktop only. On mobile, Claude provides recipe information as text in the conversation. -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2040544929/12f4c51eda7779d65d3ea2c7ab16/d0f4a314-cff8-421a-b401-10c2bf50374e?expires=1792613700&signature=f6a5844d26f71180d42a2aa136144d4d677d3ea250bd5a9acb5ea74d3ea81d61&req=diAjFsx6mYhdUPMW1HO4zUQperIT01eQrIPm%2FImZVg2kidYliucyfyT76pWt%0AtIRbepupH%2FU%2FPQCi37k%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2040544929/12f4c51eda7779d65d3ea2c7ab16/d0f4a314-cff8-421a-b401-10c2bf50374e?expires=1792648800&signature=cc6550cde6c5b37a7eabf2256fda6d8fd80be72e3e3d1f8fc102167019354c64&req=diAjFsx6mYhdUPMW1HO4zUQperIT1lyfrIPm%2FImZVg0FlBf16YutDUTHptGW%0AXW6nD9b8xVuhroedwak%3D%0A) ### Custom visuals @@ -76,7 +76,7 @@ For example, if you ask Claude to help you plan a trip, it might ask you to: This content appears at the bottom of the chat. You can still type a response if you prefer. -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2040544930/9ad066e137d11e4b559b0217e12d/9bf30d2d-1715-42b3-9da5-2a9298f41f08?expires=1792613700&signature=b1443c34d32053aebfa7403f9c0856464fd7b01d84885e52ab192e1cafc8b028&req=diAjFsx6mYhcWfMW1HO4zWmF5ve4aB2lx4wz0C7CTAKJ%2FcIifWkDFEPXGzWo%0AeXqI6vdHROUJZUrlvgQ%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2040544930/9ad066e137d11e4b559b0217e12d/9bf30d2d-1715-42b3-9da5-2a9298f41f08?expires=1792648800&signature=67fed7f9add3562c3d3d0df00ffb4ba1c79df524699da019f94b37489edf04e0&req=diAjFsx6mYhcWfMW1HO4zWmF5ve4bRaqx4wz0C7CTAItcOk7OD6llVEqxZgk%0AmkkIBldt8IrpwqIxJ9k%3D%0A) --- diff --git a/content/support/13837440-use-plugins-in-claude.md b/content/support/13837440-use-plugins-in-claude.md index 2f05f35fd4..d972e0b952 100644 --- a/content/support/13837440-use-plugins-in-claude.md +++ b/content/support/13837440-use-plugins-in-claude.md @@ -58,7 +58,7 @@ In Cowork, open the "Cowork" tab first, then open **Customize**. You can also upload a custom plugin file if you built one yourself. On Team and Enterprise plans, a colleague can share a plugin with you directly instead of sending you the file. See **[Use a plugin shared with you](#h_ef985546b4)** below. Plugins you add in Claude on the web or in Claude Desktop are saved to your account, not to your computer, so they follow you to chat, Cowork, and Claude Code. -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2100409211/fc01614dde1a616fa31ffaa9cb04/47bacf5b-a810-45b5-a468-9769f1a58ef8?expires=1792613700&signature=0f3e579311ab7693729d505d7b3fc65d5cceaee797f3b8127d4d80a88db54631&req=diEnFs1%2BlINeWPMW1HO4zZF3IxfbMvZSxakFVfq5WwwIo%2B%2FxhQM7mo6KMUxl%0A8TLGfCac1QHap6n%2F2mE%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2100409211/fc01614dde1a616fa31ffaa9cb04/47bacf5b-a810-45b5-a468-9769f1a58ef8?expires=1792648800&signature=2ace9103a3c4c1bbb37f5f449656052e1611653a9d530cbde7bb76bdc0a06943&req=diEnFs1%2BlINeWPMW1HO4zZF3IxfbN%2F1dxakFVfq5Wwxw7pWL6Ye%2Bi9TLhufg%0AVBTpKWy6D52B%2BZXhVcU%3D%0A) If you're on the Enterprise plan and your organization has skill scanning turned on, plugins are checked for malicious content when they're installed or updated. A plugin with malicious content is blocked, and one that may carry risk shows a caution banner. Learn more about **[skill and plugin scanning](https://support.claude.com/en/articles/15927065)**. @@ -68,7 +68,7 @@ If you're on the Enterprise plan and your organization has skill scanning turned Each plugin you add brings skills and commands you can use while working with Claude. Type "/" or click the "+" button to see the available skills from your plugins, in chat and in Cowork. In Cowork, you can also run a plugin's command by typing `/plugin-name:command`. Click any skill to see its details. -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2157396844/4a790e10f5b88df770783df1d7e9/image.png?expires=1792613700&signature=328c7aaa177f4571130321ea22f1d0d16668afd4d326c15f05c56222a47d6ad6&req=diEiEcp3m4lbXfMW1HO4zf4NBfT6gkOTmKUxugP2BQueolu4nUxKr5W6EjHa%0Aipj2kDkVdkO1qpgmNMk%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2157396844/4a790e10f5b88df770783df1d7e9/image.png?expires=1792648800&signature=8b3a4056d36cb6327a258c870c31ff7d582627776fbb0bcd62bfd6026f6c6326&req=diEiEcp3m4lbXfMW1HO4zf4NBfT6h0icmKUxugP2BQsBZjgmfQXCu0UBgC52%0ACqq7xzeWnVfHIJ8spRo%3D%0A) --- diff --git a/content/support/13947068-assign-tasks-from-anywhere-in-claude-cowork.md b/content/support/13947068-assign-tasks-from-anywhere-in-claude-cowork.md index 775befc2d7..93a791cb0c 100644 --- a/content/support/13947068-assign-tasks-from-anywhere-in-claude-cowork.md +++ b/content/support/13947068-assign-tasks-from-anywhere-in-claude-cowork.md @@ -52,11 +52,11 @@ Follow these steps to get started: 5. You’ll land on a page describing the functionality. Click “Get started”: -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2169954086/419674f781edb2977b93cce062b4/93b1893c-d79a-4eb6-b2f1-2fe3e043bd90?expires=1792613700&signature=acff2e71b321bc212cd97e1583e2d42fe83159c0b6dca702a653d8501eae31b8&req=diEhH8B7mYFXX%2FMW1HO4zSZP05CNFA34B32drIe5EDm5mUsA0YWC%2FhgwX19P%0AgO5D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2169954086/419674f781edb2977b93cce062b4/93b1893c-d79a-4eb6-b2f1-2fe3e043bd90?expires=1792648800&signature=ca1d649e4d74f038cb88c82aecca8f894dbb1abb154bc8552cef001bfa639c13&req=diEhH8B7mYFXX%2FMW1HO4zSZP05CNEQb3B32drIe5EDkBXKj3o4EoayIAf%2FM%2F%0A%2B4Xr%0A) 6. On the next screen, you can give Claude access to your files and keep your computer awake by toggling those on: -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2169955082/de4053ee0eab8fcb9263584bb171/d39b77da-1a69-4682-9fdb-7ed488f236b0?expires=1792613700&signature=472e8bd1c6ce846030cde3b5ef241bfcebbb69a3eabaecf53a5f702fd54ca4da&req=diEhH8B7mIFXW%2FMW1HO4zaZWstieXAIZepuGRb1rD3JN%2FY9LgN935C0wGMOZ%0AYe%2FM%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2169955082/de4053ee0eab8fcb9263584bb171/d39b77da-1a69-4682-9fdb-7ed488f236b0?expires=1792648800&signature=b64afcee3d40bb04f6ed1e020b051cdfcae31510e712330ee82858cb69a1d70b&req=diEhH8B7mIFXW%2FMW1HO4zaZWstieWQkWepuGRb1rD3KEHW4RgOi%2FFjtat5wj%0AG6ms%0A) 7. Click “Finish setup.” diff --git a/content/support/14116274-organize-your-tasks-with-projects-in-claude-cowork.md b/content/support/14116274-organize-your-tasks-with-projects-in-claude-cowork.md index 9187a0ab50..c7d1cb5315 100644 --- a/content/support/14116274-organize-your-tasks-with-projects-in-claude-cowork.md +++ b/content/support/14116274-organize-your-tasks-with-projects-in-claude-cowork.md @@ -24,23 +24,23 @@ Cowork is available for paid plans (Pro, Max, Team, Enterprise) on: Find **Projects** in the left navigation panel and click the “+” button to see the three different ways to create a project: -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2183720240/6f6ef438913391703598d86d606c/CleanShot+2026-03-20+at+09_11_43.png?expires=1792613700&signature=02dc5b98321977031461be7372201ef2e1a38ff0a836813e9b9e386b5166cbff&req=diEvFc58nYNbWfMW1HO4zcOgige80CtyZwSvwegvtgwYAnKKXoSoxJIUFcJ6%0A7GZwaVOmwW%2FzWxMElzk%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2183720240/6f6ef438913391703598d86d606c/CleanShot+2026-03-20+at+09_11_43.png?expires=1792648800&signature=3b6416fc1a34b5cfa4bb5572198a2c246cac2f1b0537638656452c80b6ece3bc&req=diEvFc58nYNbWfMW1HO4zcOgige81SB9ZwSvwegvtgxAt4k49zFOpiYv6RF6%0AXAatCBc4YthwewjHYEg%3D%0A) ### Start from scratch Selecting “Start from scratch” allows you to set up a new folder with instructions and files: -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2177090014/07832b50003cf7fd3b4e9c7c448b/3385d9b8-c3e7-42b9-ae3f-4d213baa53a7?expires=1792613700&signature=c3a8134b9571bef51ba40dd447946f05a0dd9a8ad5a885b8070b20479772ca40&req=diEgEcl3nYFeXfMW1HO4zZCoQo9DT3aRvb0suCMAnj0O4Rkiip7wt0hjsILI%0AG237ehse1dEq6af5QiY%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2177090014/07832b50003cf7fd3b4e9c7c448b/3385d9b8-c3e7-42b9-ae3f-4d213baa53a7?expires=1792648800&signature=422bd8350d1c88ee4dca5e8f97b5fd667d5148ed3a65f4d586110b502737a238&req=diEgEcl3nYFeXfMW1HO4zZCoQo9DSn2evb0suCMAnj08R3KrpQK1RzOAfolx%0AnmJ2GJfOeNXQ1Oz9YLo%3D%0A) ### Import from a Claude project After selecting “Import from project,” you’ll see a “Search projects in Chat…” field: -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2183717962/acdc11bcc825ae76a13f508365bc/CleanShot+2026-03-20+at+09_12_08.png?expires=1792613700&signature=4a92f0322b932849a82b6a142d1c3bcf072bce6e51f1a63731c9db2f7b11aefe&req=diEvFc5%2FmohZW%2FMW1HO4zQQ7UWFby5sYjggUT7FIJz%2BoBG%2Bcka%2FOG3SFcXhK%0AYgTVli6ECcJXOeTdaMk%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2183717962/acdc11bcc825ae76a13f508365bc/CleanShot+2026-03-20+at+09_12_08.png?expires=1792648800&signature=129e382f210db5fb90627eb034ebb2b7f6b013ab9345510ce2bca0c4854b0884&req=diEvFc5%2FmohZW%2FMW1HO4zQQ7UWFbzpAXjggUT7FIJz%2B%2Bb5xk3swUi9jR6iCL%0AUHVJGv9o8xUZ0ljbmn8%3D%0A) Clicking into the field will display a drop-down showing your recent projects, but you can also use it to search all your projects. After you select a chat project (bulk upload is not supported), you can name the new Cowork project and choose where to save it on your computer: -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2183727973/7a25430123d9e13e7c3cdd411f70/CleanShot+2026-03-20+at+09_13_41.png?expires=1792613700&signature=9c43cd30a1f0ce10750283a6e0d88b3c9a5e0143cacc19aa4ed0c5d5151245c5&req=diEvFc58mohYWvMW1HO4zU%2FKAyFA%2FSDLI7f%2FdY0VL6hSdX7t6Fq2cosqlmOb%0AYcUuc4xijV3S373a8K8%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2183727973/7a25430123d9e13e7c3cdd411f70/CleanShot+2026-03-20+at+09_13_41.png?expires=1792648800&signature=245c582bf1f51f78f83c5fefd7295b65bb61b975f895b2f189689e407a9e4d70&req=diEvFc58mohYWvMW1HO4zU%2FKAyFA%2BCvEI7f%2FdY0VL6gfyf9S%2Bw8krqC30czg%0A2wVHZEjjPxe56dCCROw%3D%0A) Clicking “Create” will transfer the files and instructions from your existing Claude project and create a new Cowork project. @@ -48,11 +48,11 @@ Clicking “Create” will transfer the files and instructions from your existin If you select “Use an existing folder,” you’ll be prompted to pick a file to use as context for the new Cowork project: -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2177087935/2f0052dae601d0b7fecdc029e1c3/2e3ca9e7-23b1-436e-bbdb-edcd31c41f15?expires=1792613700&signature=ef541978ac33e1eb63f1e03ed5b317d5287d1e89d5ae8693d8ba874d8cbfa12b&req=diEgEcl2mohcXPMW1HO4zejrnjTQFCBYuv8e2Xj2xOUU%2FOD9MI%2BfrKZ5n9dz%0AgvQ16DxLGOkziRYMh0g%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2177087935/2f0052dae601d0b7fecdc029e1c3/2e3ca9e7-23b1-436e-bbdb-edcd31c41f15?expires=1792648800&signature=6aa1b67f21e522caad6c038ef35fbea74863a83a51c2b65011e7c83456c1e308&req=diEgEcl2mohcXPMW1HO4zejrnjTQEStXuv8e2Xj2xOWDNN9aqN1y4FkewPJk%0AhbJ0wVxI9SDsEAW%2FT%2BE%3D%0A) After selecting a folder, you can name the new Cowork project, choose where to save it on your computer, add instructions, and attach any additional files. Click “Create” to start using your new project: -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2177087937/f59dbe3fc28448a9597ea097cb4d/96a59acb-4054-4b4b-a208-751f9711f535?expires=1792613700&signature=e99d19a381d6a8dd8ba3b26fbbd52bc3bcfa29a7b24cc27d410c6e52826a89dd&req=diEgEcl2mohcXvMW1HO4zUq4VuGygqE9MfnqHouW6MLKzKTlHxnNrV0GvSrJ%0ASBLbgi0uXYaPmfjAWO8%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2177087937/f59dbe3fc28448a9597ea097cb4d/96a59acb-4054-4b4b-a208-751f9711f535?expires=1792648800&signature=1026a58f8cd4af3ba1645091bdd05ae47c75a112f069b2d1c99beb78004673e9&req=diEgEcl2mohcXvMW1HO4zUq4VuGyh6oyMfnqHouW6MJIA41ERC8pHThnLB%2FF%0AFiaLsNkRdAyXLBCzjiE%3D%0A) --- diff --git a/content/support/14499648-how-scim-sync-works-for-enterprise-organizations.md b/content/support/14499648-how-scim-sync-works-for-enterprise-organizations.md index eaf87b47ff..3eacb050da 100644 --- a/content/support/14499648-how-scim-sync-works-for-enterprise-organizations.md +++ b/content/support/14499648-how-scim-sync-works-for-enterprise-organizations.md @@ -50,7 +50,7 @@ You can trigger a manual sync from two places in your admin settings. 2. Click "Check for updates" under **SCIM sync**: -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2312613548/44cd5970ee3c3b2c7f8dcd592d71/image+%2824%29.png?expires=1792613700&signature=bf83f8580e872b6a78f525d64961238a3d0260f84692b6db369bf6cbd58537ee&req=diMmFM9%2FnoRbUfMW1HO4zW4gbTerNM6zrgfl7PnOiumCUjuyXE8qUxIMvubg%0Axw17%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2312613548/44cd5970ee3c3b2c7f8dcd592d71/image+%2824%29.png?expires=1792648800&signature=bed1b12fa0677e5d5dc37890e722ea2541ab4e832709b5f57b4f043b0440cdf1&req=diMmFM9%2FnoRbUfMW1HO4zW4gbTerMcW8rgfl7PnOiumBRm4vDp82JGyeWThA%0AzgFV%0A) 3. Select whether to sync members, groups, or both. @@ -62,7 +62,7 @@ You can trigger a manual sync from two places in your admin settings. 3. Select whether to sync members, groups, or both: -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2312608119/e4b0ef4f309f3c4eac8311a6ef47/image.png?expires=1792613700&signature=8be45b674624867d609d9f17e4319d99addc163458f929e066d1333be2f6e232&req=diMmFM9%2BlYBeUPMW1HO4zX%2F4f7j2yjgY43OpyTHzM9SuMT7LB4RQle6kzYYm%0A6nl9%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2312608119/e4b0ef4f309f3c4eac8311a6ef47/image.png?expires=1792648800&signature=94219aaed04d7981956ef5442d648e3b25c26ebe0e55fd9c519cbf7bfb74eb89&req=diMmFM9%2BlYBeUPMW1HO4zX%2F4f7j2zzMX43OpyTHzM9SdU9VqBpWH0WVdHCLK%0ALEy%2B%0A) **Note:** If you trigger a manual sync while background changes are processing, your organization takes the most recent change for each member or group. If multiple changes are queued for the same member or group, you may need to resync again to make sure everything applies correctly. diff --git a/content/support/14604842-cyber-verification-program.md b/content/support/14604842-cyber-verification-program.md index 98b50aa04a..351a05183a 100644 --- a/content/support/14604842-cyber-verification-program.md +++ b/content/support/14604842-cyber-verification-program.md @@ -12,7 +12,7 @@ Our generally available models can still be used by all users for secure code re ## Access tiers -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2716457392/33c90f9ccfbd33fee02840fd2efa/267bc7d1-baeb-4302-a1d9-4491b4110775?expires=1792613700&signature=7a29353a156e164baf1b0a37772f76f67e69a27d0033dea1b5f1356f60526445&req=dicmEM17moJWW%2FMW1HO4zVYZ0Nq4b8dAy1US26KtMzJp3OjvJmNEWz1OOCtU%0AxWz1SvkIimtCtW21KzQ%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2716457392/33c90f9ccfbd33fee02840fd2efa/267bc7d1-baeb-4302-a1d9-4491b4110775?expires=1792648800&signature=fae27861922d4c450f7db74b68d7f49296652c6f3f10b5d1d5bb0d5a794aa335&req=dicmEM17moJWW%2FMW1HO4zVYZ0Nq4asxPy1US26KtMzLc0iBrLDnrIRb%2FpJdA%0ATPCHyiBjn4Z7BPALoPU%3D%0A) ## How to apply diff --git a/content/support/14661296-use-claude-security.md b/content/support/14661296-use-claude-security.md index 916486e002..e829d7de85 100644 --- a/content/support/14661296-use-claude-security.md +++ b/content/support/14661296-use-claude-security.md @@ -6,6 +6,8 @@ Claude Security is now available in public beta for users on Enterprise plans. +Learn how to get started and how leading enterprises use the tool here: **[Getting started with Claude Security](https://academy.claude.com/tutorials/getting-started-with-claude-security)**. + Claude Security allows you to: 1. **Scan your codebase holistically** — Claude Security understands how your code fits together, traces data flows across files and across the repositories in a project, and identifies complex, multi-component vulnerabilities and bugs that traditional rules-based scanners cannot detect. @@ -121,7 +123,7 @@ The claude.ai/security page runs a per-user check against your own connected Git **What do I need before I can use Claude Security?** -An active Claude Enterprise plan, a premium seat for each user, and usage credits enabled for consumption billing. An owner enables Claude Security in **[Organization settings > Claude Security](https://claude.ai/admin-settings/claude-security)**. +An active Claude Enterprise plan, a premium seat for each user, and usage credits enabled for consumption billing. An owner enables Claude Security in **[Organization settings > Claude Security](https://claude.ai/admin-settings/claude-security)**. See the **[getting started guide](https://academy.claude.com/tutorials/getting-started-with-claude-security)** for setup steps. **How do I give Claude Security access to my repositories?** diff --git a/content/support/15330088-set-a-default-model-for-your-organization.md b/content/support/15330088-set-a-default-model-for-your-organization.md index d9930aff28..e62bf69f92 100644 --- a/content/support/15330088-set-a-default-model-for-your-organization.md +++ b/content/support/15330088-set-a-default-model-for-your-organization.md @@ -50,7 +50,7 @@ The organization default applies to every member. To set it: 4. Click “Save changes.” -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2514722139/d05c94072a41ea9090ecf386c53e/c32ee31d-954a-4551-a2da-91677fbd0b6f?expires=1792613700&signature=e615a42667b740d64c5f7da7b485ebef273d08c90ff15e33adb706f7074e3a48&req=diUmEs58n4BcUPMW1HO4zelOdjBGLEtAfdGVZ664dGFnnvsR1XOQBeE2c9bn%0AKDd%2BX5KMtg9DFus0sqc%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2514722139/d05c94072a41ea9090ecf386c53e/c32ee31d-954a-4551-a2da-91677fbd0b6f?expires=1792648800&signature=9802acd7497d6ba8cfcd3cd29bdf8313c6c9a2eeb6ae62f38b6bdc36db79266a&req=diUmEs58n4BcUPMW1HO4zelOdjBGKUBPfdGVZ664dGGZA20l%2Ft9Pc8RTQft5%0AzdzND4DfS51sZjvOlCs%3D%0A) --- diff --git a/content/support/15694740-manage-model-access-for-your-organization.md b/content/support/15694740-manage-model-access-for-your-organization.md index c34126700c..1327547f52 100644 --- a/content/support/15694740-manage-model-access-for-your-organization.md +++ b/content/support/15694740-manage-model-access-for-your-organization.md @@ -42,9 +42,9 @@ The organization setting is the ceiling. A role can't grant access to a model th If any custom role uses the model you’re disabling as its default, you’ll be prompted to change that role’s default before the change can be saved. -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2514693921/02ea72756f5163f14e5d158516dc/69102088-cd86-498e-97aa-c8a6e0004419?expires=1792613700&signature=8cc6993fe9b7ee0c120fa03b5dad498ee26b6138fb33d67e8703f18124a0b95a&req=diUmEs93nohdWPMW1HO4zXlxE%2BW%2FVtJQQf5Pb7M2Q0vaauYnCSrUA%2FBx5Htp%0AUPFKrKUuJFDjtHlOqZc%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2514693921/02ea72756f5163f14e5d158516dc/69102088-cd86-498e-97aa-c8a6e0004419?expires=1792648800&signature=095cfd39aacf710159cf65bcede6a255fb35186c261945d16fc17e11e10ee499&req=diUmEs93nohdWPMW1HO4zXlxE%2BW%2FU9lfQf5Pb7M2Q0sFQav3%2FsoVbTB6zhud%0Ah1c71wGHWC%2BL1jRwpcA%3D%0A) -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2514693922/bfc5de6626eb19dca1d7caf818ca/c3cd8bb6-f86c-4d01-92da-6ae4ca966662?expires=1792613700&signature=d84b80bb3272ed74905be5658acdf4645ccd1c05aa73c78a1adef27197ebcd2d&req=diUmEs93nohdW%2FMW1HO4zTqNsIvDR1tQAod9uc510lwUtuqqhSu2GnYxqh05%0AIGmmqMMP1wJl4AEIPYI%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2514693922/bfc5de6626eb19dca1d7caf818ca/c3cd8bb6-f86c-4d01-92da-6ae4ca966662?expires=1792648800&signature=0731c688c62d339d7cc8f2e8f7b67d1bf4f2eacbc06e1a49f6fcb65b3f06856c&req=diUmEs93nohdW%2FMW1HO4zTqNsIvDQlBfAod9uc510lxe8o%2BGi4jz2tPAC0W%2B%0AI9uXjixKx%2BNl0pRLfmU%3D%0A) --- @@ -78,7 +78,7 @@ If any custom role has an effort cap higher than the new organization cap for th Only models the role grants access to can be selected as that role’s default model. -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2514693923/880665a87dbd4776cf19d6063a37/29d30c6d-f9fc-408c-8c72-4320c6d88d14?expires=1792613700&signature=2520d4d34929b48eea9f1e2b45294328260950c21bf8935b3ed320b98146686b&req=diUmEs93nohdWvMW1HO4zYj9SPcF7IK6XsqpNqvyFRJUnu4J%2BA%2BSZVnq2Cz7%0AkNv6WLAnVgNDJ7RDJnw%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2514693923/880665a87dbd4776cf19d6063a37/29d30c6d-f9fc-408c-8c72-4320c6d88d14?expires=1792648800&signature=9cccb3c18cab44503bc1bf270c50014756a26b6228d03b1a2a27a1e1789f2c8c&req=diUmEs93nohdWvMW1HO4zYj9SPcF6Ym1XsqpNqvyFRJ2z83b1%2BwLemFKHHW8%0AmxwjUBtbebvwyQLu3NA%3D%0A) --- @@ -96,7 +96,7 @@ Effort limits determine how much computation members on a role can apply per res 5. Click "Save" to save your changes. -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2514693927/7a25673b3b075d72adb3cdc371e3/d2d7cd8d-a713-4e91-a706-f589ac46a9fe?expires=1792613700&signature=b60115a7d2b4126bed0561aaa489b3e814ebe95674c89455d2c75b213c3792ce&req=diUmEs93nohdXvMW1HO4ze1xBzG6croeDeA1RkowXUHAgGFuTuc8y%2BILnCAP%0AL3ETdXVQLPwKK1qk8So%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2514693927/7a25673b3b075d72adb3cdc371e3/d2d7cd8d-a713-4e91-a706-f589ac46a9fe?expires=1792648800&signature=9fbb9b0d9861be5eb851eefd5aa5e398883c2045b4a1e915838d609bd30c16dd&req=diUmEs93nohdXvMW1HO4ze1xBzG6d7ERDeA1RkowXUHckeU1gICxvIaUJlR5%0AT3NvJPGQ8eC53uu7sYA%3D%0A) Members on the role see only effort levels at or below the cap in their model menu. Note that available effort levels differ depending on the model, and some models don’t support effort level settings at all. For an explanation of each level, see **[Change the model, effort, and thinking settings](https://support.claude.com/en/articles/8664678)**. diff --git a/content/support/15927065-get-started-with-skill-and-plugin-scanning.md b/content/support/15927065-get-started-with-skill-and-plugin-scanning.md index 1f4bbf6278..0e2447b001 100644 --- a/content/support/15927065-get-started-with-skill-and-plugin-scanning.md +++ b/content/support/15927065-get-started-with-skill-and-plugin-scanning.md @@ -12,7 +12,7 @@ Scanning runs in the background, and most scans finish in about one to two minut ## What gets scanned -Scanning applies to third-party skills and plugins that a member or owner uploads. This includes standalone skills, plugins, and the skills bundled inside a plugin. +Scanning applies to third-party skills and plugins that a member or owner uploads. This includes standalone skills, plugins, and the skills bundled inside a plugin. Hooks are scanned when they're shipped as part of a plugin. Scanning doesn't apply to: @@ -22,13 +22,13 @@ Scanning doesn't apply to: - Skills shared through a connected MCP server. These follow the same trust model as other MCP tools and aren't covered by scanning. -- MCP servers and hooks, which aren't scanned at this time. +- MCP servers, which aren't scanned at this time. - Organizations using customer-managed encryption keys (CMEK), zero data retention (ZDR), or HIPAA configurations. These organizations install skills and plugins the same way they do today, without the added scan. ## Turn on skill and plugin scanning -Skill and plugin scanning is off by default until October 2, 2026, when it turns on for Enterprise organizations that haven't set it. Owners and Primary Owners can turn it on for their organization in their settings: +Skill and plugin scanning is on by default for Enterprise organizations that hadn't chosen a setting before October 2, 2026. If it's off for your organization, Owners and Primary Owners can turn it on in their settings: 1. Go to **[Organization settings > Plugins & skills](https://claude.ai/admin-settings/skills)** and select the “Policy” tab. @@ -54,11 +54,15 @@ A warn result means Claude couldn't fully verify the skill or plugin, and it may ### Fail -A fail result means the scan detected malicious content. The skill or plugin is blocked and can't be used. The banner explains the specific reason it was flagged. +A fail result means the scan detected malicious content. The skill or plugin is blocked and can't be used unless someone with the right permission in your organization allows it. The banner explains the specific reason it was flagged. Learn more about **[what to do if your skill or plugin is blocked](#h_03c1d22133)**. -## If your skill or plugin is blocked +## If your skill or plugin is blocked or has a warning -A blocked skill can't be overridden by the person who uploaded it, and admins can't approve a blocked skill for the organization at this time. +A blocked skill can't be overridden by the person who uploaded it, unless they're an Owner, Primary Owner, or have a role with **Libraries** permission that's set to "Can manage." If you have that permission, you can select "Allow anyway" on a skill or plugin that scanning blocked or warned about, where the option is shown. You'll find this option in **[Organization settings > Plugins & skills](https://claude.ai/admin-settings/skills)** or the **[Customize](https://claude.ai/customize/skills)** tab. Select "Revoke" to undo this later. + +Selecting "Allow anyway" applies only to that version, and each new version is scanned again. Allowing a version removes the scan's banner for everyone with access to it, whether it was blocked or had a warning. Only allow a version if you've reviewed it and trust the source. + +**Note:** "Allow anyway" is rolling out to organizations gradually, so you may not see it yet. If you think a skill was blocked by mistake, edit and upload it again. Uploading the same skill again without changes returns the same result, so any fix needs to address what was flagged. diff --git a/content/support/15936181-get-started-with-1password-for-claude.md b/content/support/15936181-get-started-with-1password-for-claude.md index c8ce034e7e..a417033746 100644 --- a/content/support/15936181-get-started-with-1password-for-claude.md +++ b/content/support/15936181-get-started-with-1password-for-claude.md @@ -52,7 +52,7 @@ Once the requirements are in place, you can set up 1Password from a few places i 4. Toggle on **Password managers**: -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2546126596/ba71ca47e2df21cec62c243831f8/5b1c67e1-607d-4c73-8f61-d1ceb081082a?expires=1792613700&signature=d8fa15bfc81cfa49cbfe2755e9879f52c4b989f764948d61ee9477edaa2c3527&req=diUjEMh8m4RWX%2FMW1HO4zU5ln2lorMZkGkiu4hEpcPUePd8oO9rnOF802FEO%0A5W9YDFHX7mEaLgUvxHE%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2546126596/ba71ca47e2df21cec62c243831f8/5b1c67e1-607d-4c73-8f61-d1ceb081082a?expires=1792648800&signature=e3aaa2134a318cbc68e3e51d40e736ca85eb2ed7e64dcb33178ac979208b8f19&req=diUjEMh8m4RWX%2FMW1HO4zU5ln2loqc1rGkiu4hEpcPWrwXGveEoVOA0T3OBy%0AvVK5pvQ2Vro1AaIuLcU%3D%0A) Once enabled, eligible users will see the discovery options above. Users still need to install and set up the required apps and extensions themselves. diff --git a/content/support/16266773-how-claude-marks-ai-generated-content.md b/content/support/16266773-how-claude-marks-ai-generated-content.md index fa7fc41276..92147a23b8 100644 --- a/content/support/16266773-how-claude-marks-ai-generated-content.md +++ b/content/support/16266773-how-claude-marks-ai-generated-content.md @@ -53,7 +53,7 @@ As AI-generated content becomes commonplace, greater transparency and signals ab | Claude Haiku 5.5 | ✅ | ✅ | ✅ | | Claude Haiku 4.5 | | | ✅ | -**Rollout on Amazon Bedrock will complete by October 17.* +**Rollout on Amazon Bedrock will complete by October 23.* Consistent with our commitments under the Code, Anthropic is adding watermarks to outputs from models released before August 2, 2026. diff --git a/content/support/16607638-understanding-your-pro-or-max-plan-invoices.md b/content/support/16607638-understanding-your-pro-or-max-plan-invoices.md index 6aa26a5840..21132914dc 100644 --- a/content/support/16607638-understanding-your-pro-or-max-plan-invoices.md +++ b/content/support/16607638-understanding-your-pro-or-max-plan-invoices.md @@ -40,7 +40,7 @@ You can also open any invoice from your account: **Amount due.** The invoice total minus any applied balance. This is what your payment method was charged. -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2629072970/c514f489b65072ccad08e803864f/e8c7a7de-905f-4a40-815f-c9c66edcdbf6?expires=1792613700&signature=4c9a3ebae059c57b70d29a28ce03023f38e661696a1cbb759e087a37c6e1662c&req=diYlH8l5n4hYWfMW1HO4zdWraRM571cZPZYKVlMiWEV%2BkyK2yyvpe7PhoTJU%0ACzHWnP4ToFwbVJslTjA%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2629072970/c514f489b65072ccad08e803864f/e8c7a7de-905f-4a40-815f-c9c66edcdbf6?expires=1792648800&signature=0b1ee24c4d65c6a74610050c47409021f9787493bafdf0203c5af88acae2dd12&req=diYlH8l5n4hYWfMW1HO4zdWraRM56lwWPZYKVlMiWEU3qlR%2BaGlTUt9VDtEP%0AkTkwy9PACYCxn1lhBc8%3D%0A) ## Billing details on your invoice diff --git a/content/support/16893491-get-started-with-smart-reports.md b/content/support/16893491-get-started-with-smart-reports.md index a1b83ac870..f4ca286926 100644 --- a/content/support/16893491-get-started-with-smart-reports.md +++ b/content/support/16893491-get-started-with-smart-reports.md @@ -28,13 +28,13 @@ Each report includes the following sections: Workstreams shows what the group used Claude for most, by sessions and by spend, side by side. -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2671030907/7b62b605189fe8e9474a20c1eaf2/image.png?expires=1792627200&signature=dd16aeb8143ddc833f2988c769b3a4d2238191ca893b71aefd2c52d773ded045&req=diYgF8l9nYhfXvMW3nq%2BgYjLrMqCQHw2dzuueNPeNxxzsm2cFIrn0ZhivhqC%0AVjVAGCXqMVRBBL%2BRWOZjEVCqq5s%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2671030907/7b62b605189fe8e9474a20c1eaf2/image.png?expires=1792648800&signature=b15dfa4f90289b8bbb7d80bf74f89039ee89805ddb43111caf0cf166e7c8124a&req=diYgF8l9nYhfXvMW1HO4zZse%2BmCaTwAEVa%2FWhnGS4GmaeJHYdD38c%2FRA58Nh%0Araigh8yGcyj7M56BIW0%3D%0A) ### Deliverables produced Deliverables produced groups sessions by the type of output that was produced. For example, analysis, documentation, content drafts, and code. -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2671035220/2a582bc047a6ba46e7dbd6f05d9f/e17881ac-874c-4747-94ca-8679e0301455?expires=1792627200&signature=b3eedab3f97b5266f44d5446b84eb80add4bc1f90f5d921c939d0c3c104ccfad&req=diYgF8l9mINdWfMW3nq%2BgarkVpAdyZx6sZzD4nw4%2FNUxkffikFPkTbIi4Ily%0AOcjmgrqq0hk4DOsxzIWkGL2%2BZfI%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2671035220/2a582bc047a6ba46e7dbd6f05d9f/e17881ac-874c-4747-94ca-8679e0301455?expires=1792648800&signature=68ea9dd938eecbfca1318e1fd080b87451974da2fbced030f53b1189e58c6acd&req=diYgF8l9mINdWfMW1HO4zelj06Vdl9X6YDEFlKbF9Y889piI%2Fk9PeGl71Q4Y%0AYQpeCBblCP5pvg74ztY%3D%0A) ### Cost per session by type of output @@ -48,17 +48,17 @@ Task outcomes shows what each session produced. Most common frictions shows what got in the way, by category. For example, a connector that wasn’t set up, output that didn’t match the ask, approval or sign-in gating, tool failures, or rework loops. -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2671052365/b69f22b75729e5587563e7ab6830/b1647659-a7ea-403b-89fc-0b150ee97675?expires=1792627200&signature=52e79b5769b658d61cfffd96c1928c1c15141a5c89a384f5cca86b4361a7625e&req=diYgF8l7n4JZXPMW3nq%2BgelfR%2BcWVWDy787UYunlzgSwrn2SM%2BbAy5TrbLW6%0AEFSO8PNwCbseWG%2BIDc0oH4kUihU%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2671052365/b69f22b75729e5587563e7ab6830/b1647659-a7ea-403b-89fc-0b150ee97675?expires=1792648800&signature=a45e2601e275ff98d37f5fd2daa07f45041ea893d3fe3cbc696fbbe46777f25e&req=diYgF8l7n4JZXPMW1HO4zdDitrgzUNVZjFK5P3Uf7RjbmUbHhTZxgZBa%2FyJr%0AC92WYbngADJ5wZttOmI%3D%0A) Click into a category to see more information: -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2671053199/b68936dd5d590c5fbcbbc092b332/5ec247b2-cd67-4f3f-97b5-23479b87a5c6?expires=1792627200&signature=557ccacf2eb7e75f3240a72ab30c93afe552905e984e5f78d2a2897ceaf695ea&req=diYgF8l7noBWUPMW3nq%2BgWyn0a4cxGGSfxLXzS32B3BXaBwdOyFqE0s2Zke8%0AEaPIGuPWOt0NTaXMVhP4jUAir7c%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2671053199/b68936dd5d590c5fbcbbc092b332/5ec247b2-cd67-4f3f-97b5-23479b87a5c6?expires=1792648800&signature=d7560ee5881b786e07ce5948d22b524f0950d8f991dea08befbd2099d94460d6&req=diYgF8l7noBWUPMW1HO4zbuGO4kuIrEUodOVMLl17PWZatPmZdT9n0zA3NN%2B%0AURREVVBcQikXCR0t2Rk%3D%0A) ### Inefficiencies Inefficiencies counts sessions that produced nothing usable and sessions that were personal or off-topic, with their cost (shown only as an aggregate count and cost, with no summaries or drilldown). -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2671036122/90dc848a7adf371a872bd89a2f5e/de86945b-ccfe-4e0f-892d-abacc475c5c4?expires=1792627200&signature=5176bc0670c72c924c7dfd6b6330a849b79f83f21b5cbd3abd48f64765a84327&req=diYgF8l9m4BdW%2FMW3nq%2BgeoSslrziYRFEfVxx0rcKdED7EOdCXOnP5sXFG9A%0Acr7ucjSM1YLjivEg7wa8O%2FvR724%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2671036122/90dc848a7adf371a872bd89a2f5e/de86945b-ccfe-4e0f-892d-abacc475c5c4?expires=1792648800&signature=2303f09389b83f71f0978848cde29ae760633f465af7ba38dc20e89b6bed5937&req=diYgF8l9m4BdW%2FMW1HO4zcYfhg2QCfwSBas8rgXn%2Fb1ju%2F3fOwDD%2BCQDgDHl%0AnAyt42QcHkZYKbkm58E%3D%0A) ### Reusable skills and workflows to build @@ -68,13 +68,13 @@ Reusable skills and workflows to build identifies repeated patterns that could b Most expensive sessions lists where spend concentrates. -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2671032083/2b075387a4a3473f884a8ba26436/image.png?expires=1792627200&signature=44e3cc3aa77a948e3f3baa9eca081293124e28aba143b085715eaf3a4846abf4&req=diYgF8l9n4FXWvMW3nq%2BgQL8lhi0YlkYgZWDH9GO2Sfvbw9dNrJ9IU7%2BhRf3%0A1Qoi0mczxyORQzCzo%2FYAySTG9a4%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2671032083/2b075387a4a3473f884a8ba26436/image.png?expires=1792648800&signature=78ca2a969e2892706b3e1083992a1e553027808d12ea89f61ec85155e96e92fd&req=diYgF8l9n4FXWvMW1HO4zdLkIm2j7k4hnUoxuhUXEhj05SS9K4BpVneiBmwe%0ApPKKgk8Pd21ciJRxaI8%3D%0A) ### Complex, autonomous work Complex, autonomous work shows sessions scoring highest on task complexity, time saved, how long Claude worked on its own, and the expertise required. -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2671031695/3781b98c5cb9cdc069439aa3d9ab/image.png?expires=1792627200&signature=467d1f5b56cbe4b38f6e1e6c2f56b0edae32685878c2b1ac2978488b817b352d&req=diYgF8l9nIdWXPMW3nq%2BgWLYAa4d0Gz3Qw6RMc0VtCTldwtCvOOrok%2BR4K%2B2%0AYnNabvuVz07xlYpOguo9SOyr0j4%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2671031695/3781b98c5cb9cdc069439aa3d9ab/image.png?expires=1792648800&signature=a04e370d4671159112e2984b898b7615b46c8b4bc464e2a0e1b0781e5475c393&req=diYgF8l9nIdWXPMW1HO4zcPtgjD3D9fMtjDEKfEvx0OATFs0B56fD30NErow%0AQ%2F831RDvjE9kqmd2cI0%3D%0A) ### Answers to custom questions diff --git a/content/support/16951679-use-claude-in-google-docs-sheets-and-slides.md b/content/support/16951679-use-claude-in-google-docs-sheets-and-slides.md index ebd57ab572..36c16994e0 100644 --- a/content/support/16951679-use-claude-in-google-docs-sheets-and-slides.md +++ b/content/support/16951679-use-claude-in-google-docs-sheets-and-slides.md @@ -28,11 +28,11 @@ If your organization already allows Marketplace apps, this takes about two minut 2. Open a Google Docs, Sheets, or Slides file and go to Extensions > Claude > “Open Claude": -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2707281468/abc0497defca04936c9a4b97d147/8b17d05f-3fb1-4e49-8d1f-65364ac3f496?expires=1792613700&signature=e2e25cf7f1acd8fe1a67325f25cdd39a75d5f2f3fa0e643e5c639729bdabcedf&req=dicnEct2nIVZUfMW1HO4zRwmJT5qVedIaAKM49NdBLMLC0D1CbHpe%2Fy3JxzM%0A%2BKE%2B%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2707281468/abc0497defca04936c9a4b97d147/8b17d05f-3fb1-4e49-8d1f-65364ac3f496?expires=1792648800&signature=b787c34cf28c883e8c66aa7bb8704e9ae053de61e3e377778135556ee90ec43d&req=dicnEct2nIVZUfMW1HO4zRwmJT5qUOxHaAKM49NdBLND2ZOiIXi7ANJu0B5B%0ASF4A%0A) 3. The first time, Google asks you to allow two permissions. Review them and click "Allow": - ![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2707282342/f583a396098ff16e3cbd156d4a2a/112c6459-79c6-4fbb-9bc0-748fda6f592f?expires=1792613700&signature=16681be68410641ff4f0fbba2cdf48b48c63adc09a92513205f73e8c9014d9d9&req=dicnEct2n4JbW%2FMW1HO4zeKY3p4AgQ33eBfHlrCfDWc2jLGDT15KjrBN%2F3p2%0Aw5Ok%0A) + ![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2707282342/f583a396098ff16e3cbd156d4a2a/112c6459-79c6-4fbb-9bc0-748fda6f592f?expires=1792648800&signature=8b202826f3d2747b1e19740aa35afd4bc20acb288abfba382cc2f8756ffe824c&req=dicnEct2n4JbW%2FMW1HO4zeKY3p4AhAb4eBfHlrCfDWdcXmB%2FjpmUtfv9qvVk%0A%2BhM5%0A) 4. Sign in with your Claude account in the sidebar, and optionally enable your connectors. diff --git a/content/support/17005973-manage-pooled-group-budgets-on-enterprise-plans.md b/content/support/17005973-manage-pooled-group-budgets-on-enterprise-plans.md index 0f4afb5406..6ae110abcb 100644 --- a/content/support/17005973-manage-pooled-group-budgets-on-enterprise-plans.md +++ b/content/support/17005973-manage-pooled-group-budgets-on-enterprise-plans.md @@ -76,7 +76,7 @@ If a user belongs to more than one group with a pooled budget, the largest poole With a custom order, the first pooled budget in your list with budget remaining pays. -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2719736736/a4ec8e92af4975a87891357e5dbd/6f58b496-432d-4069-ba18-72a6390ab2ea?expires=1792613700&signature=64d5e1635367e72cde861c55b88eba96be4bcbf5256c10d7766a94f30a67ea12&req=dicmH859m4ZcX%2FMW1HO4zU9wBwYeUIs0TLR6JppsyjS3AzuQ37jrQRUrwGKF%0A8lADd5C%2FKUQ1BmDQJkU%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2719736736/a4ec8e92af4975a87891357e5dbd/6f58b496-432d-4069-ba18-72a6390ab2ea?expires=1792648800&signature=e9ccce936416597b25774fd43b3b7ec2ad62417370b0d68d8252921409a5cf0e&req=dicmH859m4ZcX%2FMW1HO4zU9wBwYeVYA7TLR6JppsyjSxR3%2FJsitfJpi7cE1s%0A7nf8CgSrHrrNCFPbcno%3D%0A) **Note:** Budget priority only decides the order in which pooled budgets pay. To choose which group's member monthly limit applies to a user in more than one group, use the **Member limit from groups** setting under **Spending defaults**. diff --git a/content/support/17203415-set-up-claude-for-intune.md b/content/support/17203415-set-up-claude-for-intune.md index 8ece19293c..c518524c7e 100644 --- a/content/support/17203415-set-up-claude-for-intune.md +++ b/content/support/17203415-set-up-claude-for-intune.md @@ -70,25 +70,25 @@ To add Claude for Intune for enrolled company-owned devices: 1. In the Microsoft Intune admin center, select "Apps" from the left side navigation panel: -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2700192269/ce2bf95a18aba11042da50f4c1ad/dda0f9a2-d585-4b09-ae4f-a1ff70b1e010?expires=1792613700&signature=9427e24b05b9d3836080318491fe2feb3c95537fe4719a644ade66db039ad9d8&req=dicnFsh3n4NZUPMW1HO4ze7khjPX42hnAMLV2Uu0R4WvsmHkWiiKOTJjcrlT%0AAqSM%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2700192269/ce2bf95a18aba11042da50f4c1ad/dda0f9a2-d585-4b09-ae4f-a1ff70b1e010?expires=1792648800&signature=b61a862326bf4717ec65124d8287323aa6c7b5dc411634bd03ddeb2537a67971&req=dicnFsh3n4NZUPMW1HO4ze7khjPX5mNoAMLV2Uu0R4UPc8ACFTB9VK0aG6Px%0Aa0e9%0A) 2. Under Platforms, select "iOS/iPadOS": -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2700195036/b70c6c0bdeff5f2b72568ef4943b/67cc834c-5e91-42da-9d3b-1f32c8dd8c05?expires=1792613700&signature=9aee8fa4bf1898ef4152ff0da617a084ad07f1e010606ab5f22c5a449a535e57&req=dicnFsh3mIFcX%2FMW1HO4zeH1oU%2FhsHCTQ7hR7Wh%2Bi7158lIdjSL5SYV4g8W6%0AeoTq%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2700195036/b70c6c0bdeff5f2b72568ef4943b/67cc834c-5e91-42da-9d3b-1f32c8dd8c05?expires=1792648800&signature=290b312dda986ebb658d5f301647e99830f00f57a78b6a603c37f2072b94868e&req=dicnFsh3mIFcX%2FMW1HO4zeH1oU%2FhtXucQ7hR7Wh%2Bi72sETON1pkYsHdEEKIA%0AEscX%0A) 3. Click "+ Create." For the App type, select the "iOS store app," and click the "Select" button on the bottom: -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2700195791/9a01290b4189e6a39c473af0a448/cfed06da-f35a-4b22-b687-286ea48864c1?expires=1792613700&signature=2d19b7db08aec9b7ecd45ed7b13d00960327cb92154859cd593dc34181ae937e&req=dicnFsh3mIZWWPMW1HO4zTni3cQvY50r2SRx6amjj9HEMfCJpQgLy4dLbZcn%0A1ZU%2F%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2700195791/9a01290b4189e6a39c473af0a448/cfed06da-f35a-4b22-b687-286ea48864c1?expires=1792648800&signature=c8567467491f8f58e958f59e0c48563d21d33787e234c8453af5a32131bace2c&req=dicnFsh3mIZWWPMW1HO4zTni3cQvZpYk2SRx6amjj9H%2FfamE5JVCxZGY%2FKeF%0A%2F3r1%0A) 4. Search "Claude for Intune" and click the "Select" button on the bottom. 5. In **App Information**, set **Minimum operating system** to iOS 18, then click the "Next" button: -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2700196458/588327ab209e9524c45111a244a1/258697c2-2f82-471b-9104-2bccb1b01614?expires=1792613700&signature=3b4818447c9e30cad3cce601e09edb7e82dfcc727afc4602a508676af69170bf&req=dicnFsh3m4VaUfMW1HO4zbxl5YpRdjEpDNNSLAHCCFowYcT%2BgEHKewGEFxoq%0AS7e%2B%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2700196458/588327ab209e9524c45111a244a1/258697c2-2f82-471b-9104-2bccb1b01614?expires=1792648800&signature=a7494acbc928856832493017099b107d264009a53b624c184ae9e155ad7000a4&req=dicnFsh3m4VaUfMW1HO4zbxl5YpRczomDNNSLAHCCFoq%2BZJQVouKxjoZxyuZ%0A4IS6%0A) 6. For **Assignments**, add the groups that should get the app: under Required to install it automatically, or under Available for enrolled devices so employees can install it from Company Portal. You can use user groups or device groups. -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2741107114/8f15b0d179a54c2ca4effaad8577/55bed25a-4b20-47b0-9e89-7f8adc86c04f?expires=1792613700&signature=0330cdde52cf06a186a03f58ca6780060a53733ffb65011f5b5455d57b4b7e78&req=dicjF8h%2BmoBeXfMW1HO4zYaZMeq6ePCZmN%2B6UXepdg%2BZ%2Fp%2F6MbdxDHX4DeJ%2B%0AgCb9%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2741107114/8f15b0d179a54c2ca4effaad8577/55bed25a-4b20-47b0-9e89-7f8adc86c04f?expires=1792648800&signature=0e2c4e65e1cb2c5cde7c62bd3dacdfe5c214e0d1d6dc617284e993df10446ca7&req=dicjF8h%2BmoBeXfMW1HO4zYaZMeq6ffuWmN%2B6UXepdg%2BAquB8lTXzj%2FhGFaU6%0AzHCA%0A) 7. Click "Next," review and create. @@ -98,27 +98,27 @@ To add Claude for Intune for enrolled company-owned devices: 1. In the Microsoft Intune admin center, select "Apps" from the left side navigation panel: -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2700190760/9f6412fe68632cffee29826f7d30/42fdeb30-64af-4089-a976-5094bb6b8292?expires=1792613700&signature=f9c46359bead70a1dd73baf1d92139042dfc43d17cca1403fd69439871856778&req=dicnFsh3nYZZWfMW1HO4zQwrZIgEUtE7LtTCoSp4D6pIw0KmKsf7NDJcEN3K%0AZT2k%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2700190760/9f6412fe68632cffee29826f7d30/42fdeb30-64af-4089-a976-5094bb6b8292?expires=1792648800&signature=35a10e1b3d7633b481030173a1204c424b711d112d87000e37e4bd404df9eb0e&req=dicnFsh3nYZZWfMW1HO4zQwrZIgEV9o0LtTCoSp4D6r9Xn6PXbhrvDgTer81%0Aq9r7%0A) 2. Under **Manage apps**, select "Protection": -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2700200858/a7ddd4265aeb6d61a7a096297cd5/fc9a1fe2-3d0e-4038-9b2c-f96bd19e4020?expires=1792613700&signature=365666dd3651d1641838577d7540e1e3a4474357ed8dc54fb3a7b73ccd793a94&req=dicnFst%2BnYlaUfMW1HO4zeBHXB079P7qnJWY0xu8hzImxRyNPl%2FZRxrUk3Mz%0AEzBN%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2700200858/a7ddd4265aeb6d61a7a096297cd5/fc9a1fe2-3d0e-4038-9b2c-f96bd19e4020?expires=1792648800&signature=59b48a9aedda9116bc2bfe8c50b14c53672ee336f02afde5ddbcc6b51c602f87&req=dicnFst%2BnYlaUfMW1HO4zeBHXB078fXlnJWY0xu8hzLLkhAAIdDzAwUVkDiM%0A03vw%0A) 3. Click "+ Create" and then select "iOS/iPadOS": -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2700201382/6240e257b2b498b5fa5ac1111561/11ef4f59-aba1-4d2b-ac58-9aec1dd60a4d?expires=1792613700&signature=958ee78fd83f9120e47030de1b9914beb3de4b7906375f2eef7f9c716086878c&req=dicnFst%2BnIJXW%2FMW1HO4zc89y0lQA3lJV2VWh%2B9zzErqqVSYcN5TDXkJXABG%0A455h%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2700201382/6240e257b2b498b5fa5ac1111561/11ef4f59-aba1-4d2b-ac58-9aec1dd60a4d?expires=1792648800&signature=298e5c12a448c403c7f4596359b7d3d9b7a99cec5ee5f1cffd6ebb8b6609d74e&req=dicnFst%2BnIJXW%2FMW1HO4zc89y0lQBnJGV2VWh%2B9zzErIeIPpSjh8wFp3gPz6%0AW8FK%0A) 4. Enter Name in the **Basics** tab, then click "Next" to **Apps**. Set **Target policy to** "Selected apps." Click "+ Select custom apps": -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2700201929/2edf45cedc0bc03204f86d01a49e/4d96c12d-962b-43f6-8b3f-668e3247d4c1?expires=1792613700&signature=7c0ff57d9285c83c8869b7cb20280a50fff73ce0a0fe711c76e7e9f1ddbd2252&req=dicnFst%2BnIhdUPMW1HO4zVmMRJMSUj4PKETwku7gMst9aDqJYDryogiTjmyZ%0ACUJT%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2700201929/2edf45cedc0bc03204f86d01a49e/4d96c12d-962b-43f6-8b3f-668e3247d4c1?expires=1792648800&signature=27ab2efcadf95c67debf138a359231ed3696baab7804f9a01455f33ce2c0a528&req=dicnFst%2BnIhdUPMW1HO4zVmMRJMSVzUAKETwku7gMss%2BdGh4b1k8V2CyjdbN%0Av2li%0A) 5. Type in the bundle ID `com.anthropic.claudeforintune`. Select it so it appears under **Selected Apps** before clicking "Select": -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2700202816/3565aea2d1b9c22a5f8d105825c5/3de6d241-6259-463e-a503-a6ca9f2095e0?expires=1792613700&signature=b494bc33a35697b3dfac62d55e06a1c1470f0e131164f94d1f71f0720df57c46&req=dicnFst%2Bn4leX%2FMW1HO4zf6tYiEuyalw12LT9vQL0W7cxWEEmIdwL1xvU%2BnR%0AHD6r%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2700202816/3565aea2d1b9c22a5f8d105825c5/3de6d241-6259-463e-a503-a6ca9f2095e0?expires=1792648800&signature=3f0f7c302fd4da2a9b979f681440a37d76a1bfb11b0979ce4b64f56402c34db3&req=dicnFst%2Bn4leX%2FMW1HO4zf6tYiEuzKJ%2F12LT9vQL0W4jgL4aCUREwRn7zcfd%0ANP2m%0A) 6. In Apps, confirm the bundle ID now appears under **Custom apps** before clicking "Next": -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2700203780/24ed354ef0de87bf0a0c1bc129a1/46eed662-f488-48ee-a4d1-8a9a76079884?expires=1792613700&signature=2b834290e07932a64b0c4b982dea831ebb41134afe0600969d8b198ad419acc6&req=dicnFst%2BnoZXWfMW1HO4zQd95NeM2svY8F6Cfy2R7u9dudifNDPrGKAcu%2B%2BH%0A4QS1%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2700203780/24ed354ef0de87bf0a0c1bc129a1/46eed662-f488-48ee-a4d1-8a9a76079884?expires=1792648800&signature=ee16f0cc584a1394ff76eae43bfd5d740870586ae4d0d8e95e521b4d9d61de45&req=dicnFst%2BnoZXWfMW1HO4zQd95NeM38DX8F6Cfy2R7u8Ll%2BLjncQrr77d1%2FkB%0AeYoA%0A) 7. Configure the Data protection, Access requirements, and Conditional launch settings as needed. diff --git a/content/support/17440474-migrate-from-standalone-claude-design-to-claude.md b/content/support/17440474-migrate-from-standalone-claude-design-to-claude.md index d122dc18c0..48ff22c2f6 100644 --- a/content/support/17440474-migrate-from-standalone-claude-design-to-claude.md +++ b/content/support/17440474-migrate-from-standalone-claude-design-to-claude.md @@ -46,27 +46,27 @@ When you migrate a design system, the original stays in the standalone version, 2. Click "Migrate team design systems" in the "Claude Design lives here now" banner. If you've closed the banner, choose it from the **Claude Design** menu at the top right. -![The Artifacts page in Claude. A banner titled](https://downloads.intercomcdn.com/i/o/lupk8zyo/2719865919/1000dcfcc75db94639d4650c820e/04b7b96c-8907-4801-b9a8-2e3315a02098?expires=1792613700&signature=f91ec12282b3a1eef23aa5427f988d4d3b348b4d4668cabace9ec7ed671bd272&req=dicmH8F4mIheUPMW1HO4zbwekeN6i6aFV9k56sT%2FLCu6fkLBVjTOOkhR8iv2%0AiqTo%0A) +![The Artifacts page in Claude. A banner titled](https://downloads.intercomcdn.com/i/o/lupk8zyo/2719865919/1000dcfcc75db94639d4650c820e/04b7b96c-8907-4801-b9a8-2e3315a02098?expires=1792648800&signature=d318945df72c24feba366cc9d986acde1bf4626bf5413052e025ca2b19f871b4&req=dicmH8F4mIheUPMW1HO4zbwekeN6jq2KV9k56sT%2FLCuBoC%2BU%2BcfjRaKQVcUr%0AZ3LO%0A) 3. Click "Migrate" to confirm. On individual plans, there's no confirmation step, and the migration starts right away. -![A dialog titled](https://downloads.intercomcdn.com/i/o/lupk8zyo/2719866455/8f4c4298cd41912e86c0216ffbd2/117ddc52-188f-46b3-813e-38ad816b58ae?expires=1792613700&signature=2b316baa164beacdfe79c86d9d2462fb0f1480f7bc755c1fc9f1da2da5d7c641&req=dicmH8F4m4VaXPMW1HO4zcOBwGF9dG8gYAKZtkOJqEPuIF4vzF3EO7s%2Fm6R8%0A%2Bg6O%0A) +![A dialog titled](https://downloads.intercomcdn.com/i/o/lupk8zyo/2719866455/8f4c4298cd41912e86c0216ffbd2/117ddc52-188f-46b3-813e-38ad816b58ae?expires=1792648800&signature=79dbc2082eb38b7e3908b7a05d80f5e64592e98d16cd59a8001a335ccbce764a&req=dicmH8F4m4VaXPMW1HO4zcOBwGF9cWQvYAKZtkOJqENW%2Bl4T9zWw3Iabk%2B4X%0A%2FLxu%0A) 4. Wait for the migration to finish. If you close the window, it keeps running. 5. Check the results. Under **Migrated**, the window lists each design system with its owner's name and an "Open" link. You'll see only the design systems you have access to, unless you're an owner of your organization. -![The finished window. It says](https://downloads.intercomcdn.com/i/o/lupk8zyo/2719867084/917977d41436e4fabdbbf92953a1/f31e264b-d0b4-46f9-bf3b-4fef8a317512?expires=1792613700&signature=7bafac125c785808a89ece80805103f19d05b7c66e909c79aa8469d9edf2bc7c&req=dicmH8F4moFXXfMW1HO4zSv7JHtc0Unnk1OqHSr8yEcXb9SiuLpZ%2BCHzimo4%0AgntH%0A) +![The finished window. It says](https://downloads.intercomcdn.com/i/o/lupk8zyo/2719867084/917977d41436e4fabdbbf92953a1/f31e264b-d0b4-46f9-bf3b-4fef8a317512?expires=1792648800&signature=c763bbcbe1089b7c756f2e340692107868c065d0dde38d50f8a74186921eb119&req=dicmH8F4moFXXfMW1HO4zSv7JHtc1ELok1OqHSr8yEcF6XmNz8f6fzBmg0BO%0A31bJ%0A) ### After you migrate Your migrated design systems appear in the design system menu when you make designs and slide decks in Claude. To see them all, choose "View design systems" from the **Claude Design** menu on the **Artifacts** page. The list opens in **Settings**. -![The Design systems page in Settings. It lists four design systems, with who can use each one and when it was published. The first has a](https://downloads.intercomcdn.com/i/o/lupk8zyo/2719869354/bcbf99c8812d288b961cc4b05be0/58745925-e29d-4efa-b7d5-ec0b97fdedf9?expires=1792613700&signature=e142c071eaa76b2090eb97adfb687177540b35c3ff2e5a32fa9e9ea36cb1f5c0&req=dicmH8F4lIJaXfMW1HO4zXgMWVFNvoTz4YYJPXU59QfDZ0soWiqs4lGSTDMu%0APZ9xxC%2FyFu70jkH1Jkg%3D%0A) +![The Design systems page in Settings. It lists four design systems, with who can use each one and when it was published. The first has a](https://downloads.intercomcdn.com/i/o/lupk8zyo/2719869354/bcbf99c8812d288b961cc4b05be0/58745925-e29d-4efa-b7d5-ec0b97fdedf9?expires=1792648800&signature=057439b25cc849371f8099634b728478c73782595ff2f45905ece0dad7b3b005&req=dicmH8F4lIJaXfMW1HO4zXgMWVFNu4%2F84YYJPXU59Qfq6WETLh8wZlBN07Y2%0AvfpS7uT%2BGYPdAGDxlQw%3D%0A) Owners can set your organization's default design system here. Open a design system's menu and choose "Set as default." Click a design system's name to open it. -![A migrated design system open in Claude as an artifact. A note at the top says](https://downloads.intercomcdn.com/i/o/lupk8zyo/2719869983/f674728f8f9614b16502d0e7de66/bb4e7f2a-641c-439d-9ace-7546fe5d57b4?expires=1792613700&signature=cad06b189b8da910af5cd85c6c0b20bef7338ae544f1677f2b442f895a4db397&req=dicmH8F4lIhXWvMW1HO4zSpxDRC0H4SpOMHH8PlIn11AnZTFq58yAmsM30wg%0A14zvcxp22kim6v%2B3GD0%3D%0A) +![A migrated design system open in Claude as an artifact. A note at the top says](https://downloads.intercomcdn.com/i/o/lupk8zyo/2719869983/f674728f8f9614b16502d0e7de66/bb4e7f2a-641c-439d-9ace-7546fe5d57b4?expires=1792648800&signature=00d926916f71cc544615213a04acd466aff575a728437d367f7a1c8eaa8a5240&req=dicmH8F4lIhXWvMW1HO4zSpxDRC0Go%2BmOMHH8PlIn10VijzPlEJqOhDNnIJs%0AkGxGTjBnQIJzH6Q4Ow0%3D%0A) A migrated design system keeps its files as they were, and you can't edit it yourself on its page yet. Its editors see a note at the top: "Migrated from the standalone version. Ask Claude to make changes." @@ -76,7 +76,7 @@ Learn more about **[getting started with Claude Design](https://support.claude.c The window lists it under **Couldn't be migrated**, with its name, owner, and a short reason, such as "it's too large." -![The finished window. It says](https://downloads.intercomcdn.com/i/o/lupk8zyo/2719871890/dda0fc8ec2a80b3552b6550746bd/b4644cc0-d990-4c69-a0c0-baeb0f683625?expires=1792613700&signature=a57af8151ea0227140801a885e82022c38868269f87ac5ca63765dafe453e0e1&req=dicmH8F5nIlWWfMW1HO4zaTzC30T7RQaftPbD3wWlhsaxftk4VfcVi807vax%0Autda%2BNRC1GKiiELHTrM%3D%0A) +![The finished window. It says](https://downloads.intercomcdn.com/i/o/lupk8zyo/2719871890/dda0fc8ec2a80b3552b6550746bd/b4644cc0-d990-4c69-a0c0-baeb0f683625?expires=1792648800&signature=df96d08415bfbae655d8c9dff99c61fc6d417dff8d6ee996a3fd828f79d0149a&req=dicmH8F5nIlWWfMW1HO4zaTzC30T6B8VftPbD3wWlhsuwVsbfxZOa5D%2FlvH2%0AAE%2FmGPxghCkBogajYCw%3D%0A) To reopen the results later, click the count in the banner on the **Artifacts** page, such as "6 of your 11 design systems couldn't be migrated." @@ -88,11 +88,11 @@ Anyone who can edit the design system can fix problems with its own files or siz 2. Click "Check" on the "Check whether this design system can migrate to claude.ai" card. - ![A card in the standalone version that says](https://downloads.intercomcdn.com/i/o/lupk8zyo/2719873400/3d92cdfd945fd79fb27084d39a22/f7748b4a-0227-4f40-9291-22bed9a1fbbc?expires=1792613700&signature=bc6591904452096331aef55766b0156fd5219de0ca2daaa7b3f01e39c3e1bc0d&req=dicmH8F5noVfWfMW1HO4zd1pibihZZ316fFmI7TN6dbmLrxXdy7GxW%2FtizQ9%0AsA%2BC%0A) + ![A card in the standalone version that says](https://downloads.intercomcdn.com/i/o/lupk8zyo/2719873400/3d92cdfd945fd79fb27084d39a22/f7748b4a-0227-4f40-9291-22bed9a1fbbc?expires=1792648800&signature=1cde9f26ee62a4c32163150d8d5d73fd2d2c1eb38068e8ee75413a200ea9c48e&req=dicmH8F5noVfWfMW1HO4zd1pibihYJb66fFmI7TN6dboKX9RRom2N5dbSHEo%0A2PSw%0A) 3. Fix the files the check lists, using the table below. - ![The card after a check. It says](https://downloads.intercomcdn.com/i/o/lupk8zyo/2719873835/ea65e9a7b17ff1a6572138efbdf4/d63a5223-f80f-4bca-b487-0c0583487404?expires=1792613700&signature=74534ec8c7a37dec1c92fa962fc261710dc62fc94d149072811722af3685e91f&req=dicmH8F5nolcXPMW1HO4zXfm4KzC4aPaa1x%2B95JDfxHe01tg4IcqGWEEdr%2F5%0ASqjv%0A) + ![The card after a check. It says](https://downloads.intercomcdn.com/i/o/lupk8zyo/2719873835/ea65e9a7b17ff1a6572138efbdf4/d63a5223-f80f-4bca-b487-0c0583487404?expires=1792648800&signature=aa39b7ce069e5529a3897d1be857904ff708045ac3e5840627d1176693b64ab9&req=dicmH8F5nolcXPMW1HO4zXfm4KzC5KjVa1x%2B95JDfxF0DqIoTDwN2yho07hf%0A4sn5%0A) 4. Click "Check again" until it says "Nothing found in the way." @@ -120,7 +120,7 @@ Sometimes the check says "The problem is in the migration, not your files. There To migrate new, changed, or fixed design systems, choose "Migrate again" from the **Claude Design** menu on the **Artifacts** page. To reopen your last results, choose "View details," just below it. -![The Claude Design menu open on the Artifacts page. Under](https://downloads.intercomcdn.com/i/o/lupk8zyo/2719876014/7313d3bd31db84db44312be66d15/ca108a7c-7143-4041-a6f8-70487dbf1c45?expires=1792613700&signature=1604a087375f7402ca12bbfd94638e37a42012fb237c1341f144dc7ae6e0c29f&req=dicmH8F5m4FeXfMW1HO4zY8hP2yGvxS4mIfwq%2Bzc2Q%2Bz7xS9Bz15dakPrwYq%0A7Sm4y%2Bkp%2FuIuFqv1tW8%3D%0A) +![The Claude Design menu open on the Artifacts page. Under](https://downloads.intercomcdn.com/i/o/lupk8zyo/2719876014/7313d3bd31db84db44312be66d15/ca108a7c-7143-4041-a6f8-70487dbf1c45?expires=1792648800&signature=3233aba202765b2f92a8ce78b427c35af8e43d17454f64fc5397720ad1aec44a&req=dicmH8F5m4FeXfMW1HO4zY8hP2yGuh%2B3mIfwq%2Bzc2Q%2FtqHXF4SkkMg%2Fk2hHa%0AcbL1mgSb1WVk4HeQ4zU%3D%0A) **When you migrate again:** @@ -130,7 +130,7 @@ To migrate new, changed, or fixed design systems, choose "Migrate again" from th | Unchanged in both places | It's left alone and marked "already up to date" | | Changed in Claude since it was migrated | It's listed under **Skipped** as "changed on claude.ai, left as they are," so your edits in Claude aren't overwritten | -![The results of a second migration. Three design systems are marked](https://downloads.intercomcdn.com/i/o/lupk8zyo/2719876766/45afd15b42b5160fa441f419a850/7c97998b-5da1-4804-b590-04d2c95d4d98?expires=1792613700&signature=ed59d14e66a12db8f74460178d377064f33e953ff54739b46af19050bad93542&req=dicmH8F5m4ZZX%2FMW1HO4zTpBL%2B1c31hjspOwJUpK3x1%2BHgxPcgb%2FPqS7WAO1%0ATVYamatX44KIIyq4r6Q%3D%0A) +![The results of a second migration. Three design systems are marked](https://downloads.intercomcdn.com/i/o/lupk8zyo/2719876766/45afd15b42b5160fa441f419a850/7c97998b-5da1-4804-b590-04d2c95d4d98?expires=1792648800&signature=e902d729627e5ff325a7e5f031931259e73885a5ca5890073a78b23163918fc2&req=dicmH8F5m4ZZX%2FMW1HO4zTpBL%2B1c2lNsspOwJUpK3x3N6qZMNwOZNPIadWtP%0Ay4el%2BqcA9aSYN3pUSyw%3D%0A) To replace a migrated design system with a fresh copy, delete it in Claude, then migrate again. To keep any changes you've made to it, duplicate it first. Once nothing is left to migrate, the banner says "All of your design systems have migrated." @@ -194,7 +194,7 @@ Not all at once. You can download them one at a time: 3. Keep "Project archive" selected and click "Export." -![The](https://downloads.intercomcdn.com/i/o/lupk8zyo/2719861358/b912b7e22b90376c8d9808f5f878/e12e91ec-7ced-4b05-bc31-c4e3fd88741b?expires=1792613700&signature=3f0a41add01268b30232a2742e1d60fcc79ff6c9c6a42cfc6e0e5d377b9c8733&req=dicmH8F4nIJaUfMW1HO4zViE97JDpu0XGbLnQ1YWi0%2B9pZ1aW04SK9pVIgDm%0AGwuY%0A) +![The](https://downloads.intercomcdn.com/i/o/lupk8zyo/2719861358/b912b7e22b90376c8d9808f5f878/e12e91ec-7ced-4b05-bc31-c4e3fd88741b?expires=1792648800&signature=6f91d4e58014cc2a5fb141ed78ab2bd31aebf85f1cef33fe7e1a69fc025110b7&req=dicmH8F4nIJaUfMW1HO4zViE97JDo%2BYYGbLnQ1YWi0%2FjVhRrtQKAZ3GWYJjC%0AuZBQ%0A) You get a `.zip` file with every file in the project. It's free and doesn't count toward your usage limits. diff --git a/content/support/8114491-get-started-with-claude.md b/content/support/8114491-get-started-with-claude.md index cf8d8cf22b..d91520faea 100644 --- a/content/support/8114491-get-started-with-claude.md +++ b/content/support/8114491-get-started-with-claude.md @@ -36,7 +36,7 @@ You use **prompts** to communicate with Claude. The best approach is to speak to Type your prompt into the chat interface and click the submit button to start a conversation with Claude. You can click the "+" button in the lower left or type "/" to view additional options and commands: -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1916208578/2cf2ea52f1f884084b57983a8805/image.png?expires=1792613700&signature=eb1752fa374238d0ce253d6a0d236757373989248a542e5a1f9d23385b6b3526&req=dSkmEMt%2BlYRYUfMW1HO4zV2J7C3MtYSG9crMELaMZPzt6P0rUQbImXQofydd%0AIp6cs8eS17wx6avjO6M%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1916208578/2cf2ea52f1f884084b57983a8805/image.png?expires=1792648800&signature=51fcdb6da0ccb7eae6fbce319e13a7bd64a0ef57c85cfa4b5f5528b3f76dff86&req=dSkmEMt%2BlYRYUfMW1HO4zV2J7C3MsI%2BJ9crMELaMZPzMaGSn6Fxmb3%2FtHXyt%0AKYR0AFGxM49GTdEAYWg%3D%0A) --- diff --git a/content/support/8230524-delete-or-rename-a-conversation.md b/content/support/8230524-delete-or-rename-a-conversation.md index 4f3d68795a..a733d69c41 100644 --- a/content/support/8230524-delete-or-rename-a-conversation.md +++ b/content/support/8230524-delete-or-rename-a-conversation.md @@ -44,15 +44,15 @@ These steps apply to Claude for iOS, listed on the App Store as Claude by Anthro 4. If deleting, tap "Delete" again in the confirmation prompt. -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2599501318/75c28edc693efbe8befd21e4da64/d18a921a-df4b-4788-833c-12c966a32527?expires=1792613700&signature=c8c3d44b06c2749731fa4bfb85c675915f7c4f82fc2e08be04aa41ad1c4df846&req=diUuH8x%2BnIJeUfMW1HO4zSc12KxciWOs1DBI29QsIlHyMhYnRAIv5pU6PU20%0AC%2BnUzMztjUAqsrxT%2BkI%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2599501318/75c28edc693efbe8befd21e4da64/d18a921a-df4b-4788-833c-12c966a32527?expires=1792648800&signature=18781382196fb2101424e4e8b61b086a69379227a00c828efc61a0fbf51c5bec&req=diUuH8x%2BnIJeUfMW1HO4zSc12KxcjGij1DBI29QsIlEpR3jl0UXpLfAaGIzr%0A6Hdn4L5ZMl8gN3FTaGk%3D%0A) -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2599493852/2e58b92d18f307bb79ae30650f26/1bbe52f3-202b-4d5d-9f9a-eeda4d6952c3?expires=1792613700&signature=598a50a3ee4aa7ff03b44e6c9b4bf8ee5d06d0e78d78eba2089b473a4353b5e0&req=diUuH813nolaW%2FMW1HO4zTjXM%2BWKL8Pij7blKEDtUI3jSj%2BzOhNzmBZ5jcfD%0ABL2D3X44Qpr0mc3eGis%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2599493852/2e58b92d18f307bb79ae30650f26/1bbe52f3-202b-4d5d-9f9a-eeda4d6952c3?expires=1792648800&signature=4b0bc5befd9864b192ce6ba944c2350d51a3f3deb709e836fb15b56f895d0c20&req=diUuH813nolaW%2FMW1HO4zTjXM%2BWKKsjtj7blKEDtUI0PU1Vb1qoLoNqSU4Kg%0AV87dYxTVq1aZt8vBFBc%3D%0A) You can also delete the conversation you have open: tap the "⋯" button in the top right corner, tap "Delete," then confirm. -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2599493848/997184c386d0e6fb0bd2d7c1f2b6/5d2bc394-25fc-4814-8c2a-2f54d004f83f?expires=1792613700&signature=caecfd4089585b6615e1fe58f110fae1aa9506175b44def0613df82b6afa977e&req=diUuH813nolbUfMW1HO4zVCIq5jJyt9BzQl%2BKgU984znxseZDLeu5rZtsWeQ%0A2F7LFMhCPiDmScYP74E%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2599493848/997184c386d0e6fb0bd2d7c1f2b6/5d2bc394-25fc-4814-8c2a-2f54d004f83f?expires=1792648800&signature=88548e7d9de05f3e8c0554405c0bab3bb0c6a0085df2a40882d22abb0362334e&req=diUuH813nolbUfMW1HO4zVCIq5jJz9ROzQl%2BKgU984wzeh%2BjxbD%2BaatjXk21%0AAjr4YdqEagfKHfENKQE%3D%0A) -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2599493856/799041da9fa918e90068c5ebf5bd/2e8d5cee-c45a-41d7-a14b-486e50a37f88?expires=1792613700&signature=4345f2d3b0a5a741de618d7542f1f79f6449ddc77138ff2002c200ae4f52f837&req=diUuH813nolaX%2FMW1HO4zVCl4Qr00GZKEDIU8RT6jk20CBrpf2MEIarwrArr%0Au7nepzSgnFC%2BeflqIDs%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2599493856/799041da9fa918e90068c5ebf5bd/2e8d5cee-c45a-41d7-a14b-486e50a37f88?expires=1792648800&signature=bc613dc84d0f02f1e1154f83b421e8fcfd82569aefd28c4efe90ef4b75c49a7b&req=diUuH813nolaX%2FMW1HO4zVCl4Qr01W1FEDIU8RT6jk1oibqAx29kusNPJbIS%0A%2F0XE9iM6hPQ5avcHHCk%3D%0A) ## Delete or rename a conversation on Claude for Android @@ -66,9 +66,9 @@ These steps apply to the Claude for Android, listed on Google Play as Claude by 3. If deleting, tap "Delete" again in the confirmation prompt. -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2599493850/a64e6561222d535f2f5bd03e71f0/5de429c2-d8ed-4e8a-89e8-a13ccaa49767?expires=1792613700&signature=aeed38f019df52a3079ecc76cc7d519fde2a641786f68f398417e13ddf633777&req=diUuH813nolaWfMW1HO4zVTddtAqw1Nyrqtc0YNNUtIWjW0pjIITSquDnVqq%0AYLXWGEtRHML8hc6GgXo%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2599493850/a64e6561222d535f2f5bd03e71f0/5de429c2-d8ed-4e8a-89e8-a13ccaa49767?expires=1792648800&signature=57d4fe296d018a8a81e07251bf1ba32b7603ccbc2158bfdee98ae617db2a52ac&req=diUuH813nolaWfMW1HO4zVTddtAqxlh9rqtc0YNNUtIR%2F2JyVGcoh1%2FZUd%2FZ%0AGVoKB%2FQ1BAswSh0h0Ac%3D%0A) -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2599493851/f21b39c60e88050d4b0745325f0d/0a8c0d08-dc53-4ef1-8d9f-2b995242c1f9?expires=1792613700&signature=284f46b232f9af62c3e22ed321f7e41a32d8c2367c25e5dd82d9aa1bdbcb4bfc&req=diUuH813nolaWPMW1HO4zUYvwlcNoz1b%2FjekULCQNzXTNRa2xeobx%2BQPEBmu%0AdC7mTfrqLUDIYp1O18k%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2599493851/f21b39c60e88050d4b0745325f0d/0a8c0d08-dc53-4ef1-8d9f-2b995242c1f9?expires=1792648800&signature=f01b5ba3a1c782d91259b2a688a389584435586541e896a36084c1b8ff130638&req=diUuH813nolaWPMW1HO4zUYvwlcNpjZU%2FjekULCQNzVPO5Pf%2FupLyJHE6CnI%0AK2xgbIBsGTjQ1q6ZUGo%3D%0A) **To delete multiple conversations at once:** @@ -78,9 +78,9 @@ These steps apply to the Claude for Android, listed on Google Play as Claude by 3. Tap the trash icon, then tap "Delete" in the confirmation prompt. -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2599493849/3013a0ab921337b4544f7ffeffa6/e828ec14-fb52-4205-a840-707b6f2a848d?expires=1792613700&signature=fa77590eca2545fe42e6bb719e4b15467019d0963045df914657738967952b34&req=diUuH813nolbUPMW1HO4zWGamcVye47Y4AqhTnZa84WG9mPvrg9zvQNK0%2B9e%0AuwAiS9UV%2FqifLFnUlq4%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2599493849/3013a0ab921337b4544f7ffeffa6/e828ec14-fb52-4205-a840-707b6f2a848d?expires=1792648800&signature=6c3352f760f2fcc492c7c9208a7423d94283e310c236a0de0fbdfcb7b0af15a5&req=diUuH813nolbUPMW1HO4zWGamcVyfoXX4AqhTnZa84XGn5daRdDwr2R2AKiW%0Aq5%2FqdUtG0dricv9Wl%2BE%3D%0A) -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2599493853/e2507f53cce8a26776a22a457b1a/bd79bb8a-b078-420f-a4e1-75590367aa80?expires=1792613700&signature=d87a5794b8bbe2e834258c0cc66d2c3b18a6d8a12e8648c8c9fe8095951bc34d&req=diUuH813nolaWvMW1HO4zQTtEhf3xUM%2FSBGfF3I2bRg0Yn8Br%2B9oiRVlcbGd%0A5g%2Fkfqt4KHnjwhEZVI4%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2599493853/e2507f53cce8a26776a22a457b1a/bd79bb8a-b078-420f-a4e1-75590367aa80?expires=1792648800&signature=446f727955877ac78f2e34704bd11e9a7491b29fb3c8c7cfd0219359be914f96&req=diUuH813nolaWvMW1HO4zQTtEhf3wEgwSBGfF3I2bRhwf3EPuW6q0X6eyZIh%0ARTSZK%2BSbVdlfl2C%2Ff7E%3D%0A) ## What happens when you delete a conversation diff --git a/content/support/8325618-paid-plan-billing-faqs.md b/content/support/8325618-paid-plan-billing-faqs.md index 73f0805cf7..641bf18aa2 100644 --- a/content/support/8325618-paid-plan-billing-faqs.md +++ b/content/support/8325618-paid-plan-billing-faqs.md @@ -50,7 +50,7 @@ There's no separate option to remove a card, and updating to a new card replaces If you want to use a name other than the one tied to your payment method, check the "Use a different name on invoices" box when adding or updating your payment method in **[Settings > Billing](https://claude.ai/settings/billing)**. -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1922141785/666191101c11030b05f03a668a74/image.png?expires=1792613700&signature=0786f3965e0fd59c6a8904759128fa5629e04650503ce79ee1eb8f333f44e71e&req=dSklFMh6nIZXXPMW1HO4zVXW8W%2BtajDLQoNvNFTb5ccLdsZj1EAZBl6akwsN%0AiVHMXLTzmztVyGHxcok%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1922141785/666191101c11030b05f03a668a74/image.png?expires=1792648800&signature=a44e78f76e98091ed0f32e1a9974e8f31db81c76128d69bc647e3d340d3d7eeb&req=dSklFMh6nIZXXPMW1HO4zVXW8W%2BtbzvEQoNvNFTb5ce6XcPbVCVT8oAADRhZ%0A8CFiumcDlm809LKRI1E%3D%0A) ## How can I edit a paid invoice? diff --git a/content/support/8887527-customizing-your-appearance-settings.md b/content/support/8887527-customizing-your-appearance-settings.md index 958d818054..a6098f4ba9 100644 --- a/content/support/8887527-customizing-your-appearance-settings.md +++ b/content/support/8887527-customizing-your-appearance-settings.md @@ -8,7 +8,7 @@ 3. Select from Light, Match System, and Dark under **Color mode**. -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1648260417/d478c757c7115ad58a12026d4caf/AD_4nXc__Qop4X9hknWGfGj_y_DCpLutLruhxIclJIfir0ilsgNMg7X8ksIVnqk1Oce5FKlGIOYu9CKbVsu8DqD7iIY2aC0ZfXMyFTeAdNq-Cao2mXcj_WUpNF0kM2HoYR_dEx6N_cuJow?expires=1792613700&signature=734a55644c2d9c430093cde51564afd1e3e4d8f0d48d0f16cf9cb81b0d4a5526&req=dSYjHst4nYVeXvMW1HO4zc2jJqA7gYjjSBkgeTglJrojWTN7jS%2FrFnI8AEsX%0AbfUhch1YhHKcGcxlJUM%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1648260417/d478c757c7115ad58a12026d4caf/AD_4nXc__Qop4X9hknWGfGj_y_DCpLutLruhxIclJIfir0ilsgNMg7X8ksIVnqk1Oce5FKlGIOYu9CKbVsu8DqD7iIY2aC0ZfXMyFTeAdNq-Cao2mXcj_WUpNF0kM2HoYR_dEx6N_cuJow?expires=1792648800&signature=fd288b5ddbdfe424da6b74fcd4f5b74c8dc706be9c5ffed915e13060644c722a&req=dSYjHst4nYVeXvMW1HO4zc2jJqA7hIPsSBkgeTglJrq9EuKjOa3Z2JwTMWrs%0Af7%2Ba%2B6plFNDzZU0JGCw%3D%0A) ## How to change your font @@ -16,10 +16,10 @@ 2. Select from Default, Match System, and Dyslexic Friendly. -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1648260416/7fc0803d44d8de40f8e6636b2eb6/AD_4nXf0UEDa1i2QmqlQtoB5BgpQ-FfZVzss_7wMVQdvkmEDSfoTxixnG0GSxC6qrOs21HdkXH-I2Yn_GHDAf8yjd6FJtoh9FadALozvIErFp9r8LychDGLPb7OpN1CN4PRcgVAYNCre?expires=1792613700&signature=feaaeb339b6d5bd50c33b237ee5de38313843755e2d05af3e34e46c43c020e07&req=dSYjHst4nYVeX%2FMW1HO4zc896mLjXHI7QtNFlF5%2FHEdxVkVsNxcajeBAT5uc%0A%2F50FjqxE8XBbd%2BO%2BUg0%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1648260416/7fc0803d44d8de40f8e6636b2eb6/AD_4nXf0UEDa1i2QmqlQtoB5BgpQ-FfZVzss_7wMVQdvkmEDSfoTxixnG0GSxC6qrOs21HdkXH-I2Yn_GHDAf8yjd6FJtoh9FadALozvIErFp9r8LychDGLPb7OpN1CN4PRcgVAYNCre?expires=1792648800&signature=31faaf0effa54fa15483daeb208852d06e20de9f3e98d89fbd26a4f0804c172c&req=dSYjHst4nYVeX%2FMW1HO4zc896mLjWXk0QtNFlF5%2FHEdic%2BZCzTnIXr836qea%0AhZNRIu7pT3d2hVdF3Wk%3D%0A) ## Can I disable the sidebar? It's not currently possible to completely disable the sidebar. You can click the button on the top right of the sidebar to open or close it. -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1941108004/5217903737ddd9bb62fe5d7a904c/CleanShot+2026-01-14+at+09_12_58.png?expires=1792613700&signature=d99efb40fd83a7e19a17d57bb7ea4d7551de92e217c8c283aefa76690840d837&req=dSkjF8h%2BlYFfXfMW1HO4zUS%2BBl3wWHjoylfYa7uDb9nY9d8U%2BrWTv3Xbzjqr%0A7WIn0O5EfCWFeja4mjo%3D%0A) \ No newline at end of file +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1941108004/5217903737ddd9bb62fe5d7a904c/CleanShot+2026-01-14+at+09_12_58.png?expires=1792648800&signature=39934cc60bf818d365dedacb14fdb20aac65a6532b2cc29d777a071a883c551b&req=dSkjF8h%2BlYFfXfMW1HO4zUS%2BBl3wXXPnylfYa7uDb9lwg5qG8Kbs2QgmmhXR%0AuzGwmxX0aM6X72Mw2Os%3D%0A) \ No newline at end of file diff --git a/content/support/9267400-move-your-personal-claude-account-to-a-team-or-enterprise-organization.md b/content/support/9267400-move-your-personal-claude-account-to-a-team-or-enterprise-organization.md index 39dd59402d..221b0b5a1e 100644 --- a/content/support/9267400-move-your-personal-claude-account-to-a-team-or-enterprise-organization.md +++ b/content/support/9267400-move-your-personal-claude-account-to-a-team-or-enterprise-organization.md @@ -132,7 +132,7 @@ For the full walkthrough of your options, deadlines, and what happens to your su You may have both a personal account and an organization account tied to the same email address. You can switch between them by clicking your initials or name in the lower left corner of the screen. -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2312193347/712f763fc290b2488c103849f20c/0c135a6f-3442-4ee1-9ab7-98673f03ef6e?expires=1792613700&signature=df9f85c22c0e03e352a0a60457cc14009e6d020b329f11187d8a804885eecea5&req=diMmFMh3noJbXvMW1HO4zXhPnNIwyRxmufhmlOXMdYbcN9JebuwB6auBU4Bs%0A36wmPM9eIFIakgVej4U%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/2312193347/712f763fc290b2488c103849f20c/0c135a6f-3442-4ee1-9ab7-98673f03ef6e?expires=1792648800&signature=f146b9ceb474f1e24654e56b127a4640704636cfe9d644901da4c2572dd0563e&req=diMmFMh3noJbXvMW1HO4zXhPnNIwzBdpufhmlOXMdYa04RbK6S0XL4XD5E56%0APoO9CaFQtdc6WGHmmcM%3D%0A) A blue checkmark shows which account you're currently using. Click the other account to switch to it and access its separate conversations and projects. diff --git a/content/support/9519177-how-can-i-create-and-manage-projects.md b/content/support/9519177-how-can-i-create-and-manage-projects.md index aefb199832..a22bd6bc05 100644 --- a/content/support/9519177-how-can-i-create-and-manage-projects.md +++ b/content/support/9519177-how-can-i-create-and-manage-projects.md @@ -104,15 +104,15 @@ Starring a project allows for quick access from your projects and chats list, vi You can move a standalone chat into a project by clicking on the dropdown arrow next to the chat name, then “Add to project”: -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1784190248/0f19c8de18b494a27be252fdfaff/d4e7a5c5-25f5-4623-862b-c593d2dc0b39?expires=1792613700&signature=3b9e55f4aaafeebfbf2dbadec03677505c04cb6d5ce2aa1a82157823e3cf5e55&req=dScvEsh3nYNbUfMW1HO4zQABaGNqS6MSBSXNVFXQ%2FVEDlxbOTH7qTQnHizmy%0ADZET5p9PFB2lcjt9GBo%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1784190248/0f19c8de18b494a27be252fdfaff/d4e7a5c5-25f5-4623-862b-c593d2dc0b39?expires=1792648800&signature=3ab38dab67723328595d00c8b0350ead5bf1575fb83ca0a3f9366dc64825f4a1&req=dScvEsh3nYNbUfMW1HO4zQABaGNqTqgdBSXNVFXQ%2FVH1bygC4XeBEf9Z%2BTdE%0AXNsVDbtX8PWY30HtGNU%3D%0A) Browse or search for the correct project in the **Move chat** modal that appears, then click on it to move the chat. -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1784190951/34dc256ccd4c0cf74976f31062e6/55365cf2-059d-41b2-ac95-4b00c4389a76?expires=1792613700&signature=5e17a333c6c8ec9245a53168970e2407e6a0264f742f9d3212bcbbc2ccd6e20e&req=dScvEsh3nYhaWPMW1HO4zSMECyK2ygoGgYbpTjViBxCPTuoYKA53QnddkSWQ%0AoyPd4A6EqnD2HdggpC8%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1784190951/34dc256ccd4c0cf74976f31062e6/55365cf2-059d-41b2-ac95-4b00c4389a76?expires=1792648800&signature=dbc279ef6e093d43f872dd0456adebe1f12e497bea44f0d5248587ae51dac938&req=dScvEsh3nYhaWPMW1HO4zSMECyK2zwEJgYbpTjViBxBQYgXN7pEneCY%2Fzk82%0AGeY3yHTDr7b46Wjwmn0%3D%0A) You can also remove chats from projects, or move them between projects, using the same dropdown menu within the chat: -![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1784185682/8625eac15b9fa452f148a6c47250/c53a1bc4-a991-4684-a789-5447ed789d35?expires=1792613700&signature=ac82f8c7217982783914abb12ca7c0217d83b2a1ba4e8e5bffe5bce9371674c0&req=dScvEsh2mIdXW%2FMW1HO4zb6DufUqD0YNS2r1%2FGRlqOQ82YInBAXhB%2Bw0%2FDJg%0AX9PZNTNNNsxbHbYZ2aw%3D%0A) +![](https://downloads.intercomcdn.com/i/o/lupk8zyo/1784185682/8625eac15b9fa452f148a6c47250/c53a1bc4-a991-4684-a789-5447ed789d35?expires=1792648800&signature=ee332ddf36b2e2cb5e60f9ef2d8cd182dcfb740fc3c81cfc53532cf5bd8a937e&req=dScvEsh2mIdXW%2FMW1HO4zb6DufUqCk0CS2r1%2FGRlqOQv6QDSwvVsb1UeCSyc%0AcCuDSm0PAGd83DLl6aw%3D%0A) --- diff --git a/discovery.json b/discovery.json index 3048b4a7dc..f7322d8337 100644 --- a/discovery.json +++ b/discovery.json @@ -1,7 +1,7 @@ { "version": 1, "note": "What the last full run could see outside sources.json. Written by the fetcher so a new source arrives as a diff a human reviews, not as a line in an Actions log nobody reads. Stable facts only: a change here is always news. `review` is the actionable list \u2014 domains we could archive today and do not.", - "updated": "2026-10-21", + "updated": "2026-10-22", "domains": { "anthropic.com": { "status": "frozen", diff --git a/tombstones.json b/tombstones.json index a9055b5759..6af3da12d5 100644 --- a/tombstones.json +++ b/tombstones.json @@ -1,7 +1,7 @@ { "version": 1, "note": "URLs confirmed gone upstream. Kept so a page that died once does not report as a fresh failure on every later run, which would bury the failure that is actually new. An entry clears itself if the URL answers again -- but only while something still probes it. Entries whose local file was removed are no longer fetched, so they stay as a record of the restructure rather than a live check.", - "updated": "2026-10-21", + "updated": "2026-10-22", "urls": { "https://claude.com/docs/claude-science/annotations": { "since": "2026-09-01",