hive-skills 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +28 -0
- package/README.md +235 -0
- package/assets/LICENSE +32 -0
- package/assets/THIRD_PARTY_NOTICES.md +72 -0
- package/assets/manifest.json +1290 -0
- package/assets/skills/authored/code-review/composable/BUNDLE.md +192 -0
- package/assets/skills/authored/code-review/composable/INDEX.md +13 -0
- package/assets/skills/authored/code-review/composable/VERSION +1 -0
- package/assets/skills/authored/code-review/composable/mini/01-review-method.md +34 -0
- package/assets/skills/authored/code-review/composable/mini/02-security-review.md +20 -0
- package/assets/skills/authored/code-review/composable/mini/03-correctness-bugs.md +19 -0
- package/assets/skills/authored/code-review/composable/mini/04-concurrency.md +16 -0
- package/assets/skills/authored/code-review/composable/mini/05-error-handling.md +12 -0
- package/assets/skills/authored/code-review/composable/mini/06-performance.md +11 -0
- package/assets/skills/authored/code-review/composable/mini/07-api-design.md +20 -0
- package/assets/skills/authored/code-review/composable/mini/08-missing-tests.md +25 -0
- package/assets/skills/authored/code-review/composable/mini/09-refactoring-and-communication.md +32 -0
- package/assets/skills/authored/data-analysis/composable/BUNDLE.md +186 -0
- package/assets/skills/authored/data-analysis/composable/INDEX.md +13 -0
- package/assets/skills/authored/data-analysis/composable/VERSION +1 -0
- package/assets/skills/authored/data-analysis/composable/mini/01-data-quality-profiling.md +26 -0
- package/assets/skills/authored/data-analysis/composable/mini/02-aggregation-pitfalls.md +21 -0
- package/assets/skills/authored/data-analysis/composable/mini/03-time-series.md +19 -0
- package/assets/skills/authored/data-analysis/composable/mini/04-segmentation.md +23 -0
- package/assets/skills/authored/data-analysis/composable/mini/05-discount-pricing.md +17 -0
- package/assets/skills/authored/data-analysis/composable/mini/06-insight-generation.md +25 -0
- package/assets/skills/authored/data-analysis/composable/mini/07-executive-writing.md +26 -0
- package/assets/skills/authored/data-analysis/composable/mini/08-recommendations.md +20 -0
- package/assets/skills/authored/data-analysis/composable/mini/09-reproducibility-assumptions.md +20 -0
- package/assets/skills/authored/financial-analysis/composable/BUNDLE.md +1293 -0
- package/assets/skills/authored/financial-analysis/composable/INDEX.md +17 -0
- package/assets/skills/authored/financial-analysis/composable/VERSION +1 -0
- package/assets/skills/authored/financial-analysis/composable/mini/00-core.md +69 -0
- package/assets/skills/authored/financial-analysis/composable/mini/01-profitability-efficiency-ratios.md +173 -0
- package/assets/skills/authored/financial-analysis/composable/mini/02-liquidity-leverage-ratios.md +120 -0
- package/assets/skills/authored/financial-analysis/composable/mini/03-valuation-ratios-interpretation.md +107 -0
- package/assets/skills/authored/financial-analysis/composable/mini/04-dcf-projection-wacc.md +122 -0
- package/assets/skills/authored/financial-analysis/composable/mini/05-dcf-terminal-value-sensitivity.md +75 -0
- package/assets/skills/authored/financial-analysis/composable/mini/06-comparables-precedents.md +78 -0
- package/assets/skills/authored/financial-analysis/composable/mini/07-budget-variance-analysis.md +47 -0
- package/assets/skills/authored/financial-analysis/composable/mini/08-driver-based-forecasting-scenarios.md +111 -0
- package/assets/skills/authored/financial-analysis/composable/mini/09-rolling-forecasts-accuracy.md +114 -0
- package/assets/skills/authored/financial-analysis/composable/mini/10-reporting-exec-summary.md +58 -0
- package/assets/skills/authored/financial-analysis/composable/mini/11-industry-adaptations.md +130 -0
- package/assets/skills/authored/financial-analysis/composable/mini/12-toolkit-scripts-io.md +102 -0
- package/assets/skills/authored/python-api/composable/BUNDLE.md +389 -0
- package/assets/skills/authored/python-api/composable/INDEX.md +13 -0
- package/assets/skills/authored/python-api/composable/VERSION +1 -0
- package/assets/skills/authored/python-api/composable/mini/01-project-structure.md +44 -0
- package/assets/skills/authored/python-api/composable/mini/02-routing-and-app.md +38 -0
- package/assets/skills/authored/python-api/composable/mini/03-pydantic-models.md +45 -0
- package/assets/skills/authored/python-api/composable/mini/04-validation-and-errors.md +59 -0
- package/assets/skills/authored/python-api/composable/mini/05-dependencies-and-auth.md +60 -0
- package/assets/skills/authored/python-api/composable/mini/06-pagination-filtering.md +44 -0
- package/assets/skills/authored/python-api/composable/mini/07-async-performance.md +30 -0
- package/assets/skills/authored/python-api/composable/mini/08-testing.md +45 -0
- package/assets/skills/authored/python-api/composable/mini/09-middleware-observability.md +29 -0
- package/assets/skills/authored/tech-writing/composable/BUNDLE.md +220 -0
- package/assets/skills/authored/tech-writing/composable/INDEX.md +12 -0
- package/assets/skills/authored/tech-writing/composable/VERSION +1 -0
- package/assets/skills/authored/tech-writing/composable/mini/01-audience-analysis.md +26 -0
- package/assets/skills/authored/tech-writing/composable/mini/02-document-types.md +27 -0
- package/assets/skills/authored/tech-writing/composable/mini/03-readme-quickstart-changelog.md +22 -0
- package/assets/skills/authored/tech-writing/composable/mini/04-information-architecture.md +21 -0
- package/assets/skills/authored/tech-writing/composable/mini/05-style-clarity.md +29 -0
- package/assets/skills/authored/tech-writing/composable/mini/06-breaking-changes-migrations.md +33 -0
- package/assets/skills/authored/tech-writing/composable/mini/07-troubleshooting-security.md +30 -0
- package/assets/skills/authored/tech-writing/composable/mini/08-faq-voice-tone.md +32 -0
- package/assets/skills/converted/claude-api/composable/BUNDLE.md +14996 -0
- package/assets/skills/converted/claude-api/composable/INDEX.md +98 -0
- package/assets/skills/converted/claude-api/composable/VERSION +1 -0
- package/assets/skills/converted/claude-api/composable/mini/00-core.md +235 -0
- package/assets/skills/converted/claude-api/composable/mini/01-model-api-quick-reference.md +258 -0
- package/assets/skills/converted/claude-api/composable/mini/02-common-pitfalls.md +42 -0
- package/assets/skills/converted/claude-api/composable/mini/10-models.md +135 -0
- package/assets/skills/converted/claude-api/composable/mini/11-platform-availability.md +96 -0
- package/assets/skills/converted/claude-api/composable/mini/12-claude-platform-on-aws.md +59 -0
- package/assets/skills/converted/claude-api/composable/mini/13-live-sources.md +143 -0
- package/assets/skills/converted/claude-api/composable/mini/14-error-codes.md +256 -0
- package/assets/skills/converted/claude-api/composable/mini/15-prompt-caching.md +223 -0
- package/assets/skills/converted/claude-api/composable/mini/16-token-counting.md +56 -0
- package/assets/skills/converted/claude-api/composable/mini/17-tool-use-concepts.md +444 -0
- package/assets/skills/converted/claude-api/composable/mini/18-agent-design.md +101 -0
- package/assets/skills/converted/claude-api/composable/mini/19-anthropic-cli.md +246 -0
- package/assets/skills/converted/claude-api/composable/mini/20-model-migration.md +1301 -0
- package/assets/skills/converted/claude-api/composable/mini/30-managed-agents-overview.md +71 -0
- package/assets/skills/converted/claude-api/composable/mini/31-managed-agents-core.md +278 -0
- package/assets/skills/converted/claude-api/composable/mini/32-managed-agents-environments.md +219 -0
- package/assets/skills/converted/claude-api/composable/mini/33-managed-agents-tools.md +366 -0
- package/assets/skills/converted/claude-api/composable/mini/34-managed-agents-events.md +252 -0
- package/assets/skills/converted/claude-api/composable/mini/35-managed-agents-outcomes.md +106 -0
- package/assets/skills/converted/claude-api/composable/mini/36-managed-agents-multiagent.md +101 -0
- package/assets/skills/converted/claude-api/composable/mini/37-managed-agents-webhooks.md +123 -0
- package/assets/skills/converted/claude-api/composable/mini/38-managed-agents-memory.md +197 -0
- package/assets/skills/converted/claude-api/composable/mini/39-managed-agents-scheduled-deployments.md +146 -0
- package/assets/skills/converted/claude-api/composable/mini/40-managed-agents-client-patterns.md +211 -0
- package/assets/skills/converted/claude-api/composable/mini/41-managed-agents-onboarding.md +82 -0
- package/assets/skills/converted/claude-api/composable/mini/42-managed-agents-api-reference.md +441 -0
- package/assets/skills/converted/claude-api/composable/mini/43-managed-agents-self-hosted-sandboxes.md +174 -0
- package/assets/skills/converted/claude-api/composable/mini/50-python-readme.md +564 -0
- package/assets/skills/converted/claude-api/composable/mini/51-python-tool-use.md +590 -0
- package/assets/skills/converted/claude-api/composable/mini/52-python-streaming-batches-files.md +549 -0
- package/assets/skills/converted/claude-api/composable/mini/53-python-managed-agents.md +335 -0
- package/assets/skills/converted/claude-api/composable/mini/55-typescript-readme.md +404 -0
- package/assets/skills/converted/claude-api/composable/mini/56-typescript-tool-use.md +548 -0
- package/assets/skills/converted/claude-api/composable/mini/57-typescript-streaming-batches-files.md +384 -0
- package/assets/skills/converted/claude-api/composable/mini/58-typescript-managed-agents.md +358 -0
- package/assets/skills/converted/claude-api/composable/mini/60-csharp-readme.md +361 -0
- package/assets/skills/converted/claude-api/composable/mini/61-csharp-tool-use.md +163 -0
- package/assets/skills/converted/claude-api/composable/mini/62-csharp-streaming-batches-files.md +64 -0
- package/assets/skills/converted/claude-api/composable/mini/65-go-readme.md +185 -0
- package/assets/skills/converted/claude-api/composable/mini/66-go-tool-use.md +219 -0
- package/assets/skills/converted/claude-api/composable/mini/67-go-streaming-files.md +63 -0
- package/assets/skills/converted/claude-api/composable/mini/68-go-managed-agents.md +564 -0
- package/assets/skills/converted/claude-api/composable/mini/70-java-readme.md +237 -0
- package/assets/skills/converted/claude-api/composable/mini/71-java-tool-use.md +227 -0
- package/assets/skills/converted/claude-api/composable/mini/72-java-streaming-files.md +49 -0
- package/assets/skills/converted/claude-api/composable/mini/73-java-managed-agents.md +443 -0
- package/assets/skills/converted/claude-api/composable/mini/75-php-readme.md +173 -0
- package/assets/skills/converted/claude-api/composable/mini/76-php-tool-use.md +252 -0
- package/assets/skills/converted/claude-api/composable/mini/77-php-streaming-batches-files.md +53 -0
- package/assets/skills/converted/claude-api/composable/mini/78-php-managed-agents.md +443 -0
- package/assets/skills/converted/claude-api/composable/mini/80-ruby-readme.md +133 -0
- package/assets/skills/converted/claude-api/composable/mini/81-ruby-tool-use-streaming.md +56 -0
- package/assets/skills/converted/claude-api/composable/mini/82-ruby-managed-agents.md +394 -0
- package/assets/skills/converted/claude-api/composable/mini/85-curl-examples.md +255 -0
- package/assets/skills/converted/claude-api/composable/mini/86-curl-managed-agents.md +340 -0
- package/assets/skills/converted/claude-api/composable/presets/csharp.md +1151 -0
- package/assets/skills/converted/claude-api/composable/presets/curl.md +1154 -0
- package/assets/skills/converted/claude-api/composable/presets/go.md +1598 -0
- package/assets/skills/converted/claude-api/composable/presets/java.md +1523 -0
- package/assets/skills/converted/claude-api/composable/presets/php.md +1488 -0
- package/assets/skills/converted/claude-api/composable/presets/python.md +2605 -0
- package/assets/skills/converted/claude-api/composable/presets/ruby.md +1146 -0
- package/assets/skills/converted/claude-api/composable/presets/shared.md +6478 -0
- package/assets/skills/converted/claude-api/composable/presets/typescript.md +2261 -0
- package/assets/skills/converted/docx/composable/BUNDLE.md +617 -0
- package/assets/skills/converted/docx/composable/INDEX.md +12 -0
- package/assets/skills/converted/docx/composable/VERSION +1 -0
- package/assets/skills/converted/docx/composable/mini/00-core.md +26 -0
- package/assets/skills/converted/docx/composable/mini/01-reading-converting.md +36 -0
- package/assets/skills/converted/docx/composable/mini/02-creating-setup-layout.md +85 -0
- package/assets/skills/converted/docx/composable/mini/03-creating-elements.md +257 -0
- package/assets/skills/converted/docx/composable/mini/04-editing-existing.md +57 -0
- package/assets/skills/converted/docx/composable/mini/05-xml-reference.md +128 -0
- package/assets/skills/converted/internal-comms/composable/BUNDLE.md +220 -0
- package/assets/skills/converted/internal-comms/composable/INDEX.md +11 -0
- package/assets/skills/converted/internal-comms/composable/VERSION +1 -0
- package/assets/skills/converted/internal-comms/composable/mini/00-core.md +30 -0
- package/assets/skills/converted/internal-comms/composable/mini/01-3p-updates.md +49 -0
- package/assets/skills/converted/internal-comms/composable/mini/02-company-newsletter.md +67 -0
- package/assets/skills/converted/internal-comms/composable/mini/03-faq-answers.md +32 -0
- package/assets/skills/converted/internal-comms/composable/mini/04-general-comms.md +18 -0
- package/assets/skills/converted/mcp-builder/composable/BUNDLE.md +2460 -0
- package/assets/skills/converted/mcp-builder/composable/INDEX.md +23 -0
- package/assets/skills/converted/mcp-builder/composable/VERSION +1 -0
- package/assets/skills/converted/mcp-builder/composable/mini/00-core.md +43 -0
- package/assets/skills/converted/mcp-builder/composable/mini/01-workflow-research-planning.md +54 -0
- package/assets/skills/converted/mcp-builder/composable/mini/02-implementation-process.md +78 -0
- package/assets/skills/converted/mcp-builder/composable/mini/03-naming-conventions.md +33 -0
- package/assets/skills/converted/mcp-builder/composable/mini/04-response-formats.md +21 -0
- package/assets/skills/converted/mcp-builder/composable/mini/05-pagination.md +24 -0
- package/assets/skills/converted/mcp-builder/composable/mini/06-transport.md +47 -0
- package/assets/skills/converted/mcp-builder/composable/mini/07-annotations.md +20 -0
- package/assets/skills/converted/mcp-builder/composable/mini/08-security.md +35 -0
- package/assets/skills/converted/mcp-builder/composable/mini/09-error-handling.md +32 -0
- package/assets/skills/converted/mcp-builder/composable/mini/10-testing-and-documentation.md +21 -0
- package/assets/skills/converted/mcp-builder/composable/mini/11-python-implementation.md +432 -0
- package/assets/skills/converted/mcp-builder/composable/mini/12-python-advanced-and-checklist.md +233 -0
- package/assets/skills/converted/mcp-builder/composable/mini/13-node-implementation.md +717 -0
- package/assets/skills/converted/mcp-builder/composable/mini/14-node-advanced-and-checklist.md +200 -0
- package/assets/skills/converted/mcp-builder/composable/mini/15-evaluation-design.md +200 -0
- package/assets/skills/converted/mcp-builder/composable/mini/16-evaluation-running.md +198 -0
- package/assets/skills/converted/mcp-builder/composable/presets/node-server.md +1381 -0
- package/assets/skills/converted/mcp-builder/composable/presets/python-server.md +1129 -0
- package/assets/skills/converted/pdf/composable/BUNDLE.md +1284 -0
- package/assets/skills/converted/pdf/composable/INDEX.md +14 -0
- package/assets/skills/converted/pdf/composable/VERSION +1 -0
- package/assets/skills/converted/pdf/composable/mini/00-core.md +46 -0
- package/assets/skills/converted/pdf/composable/mini/01-creation.md +176 -0
- package/assets/skills/converted/pdf/composable/mini/02-extraction.md +178 -0
- package/assets/skills/converted/pdf/composable/mini/03-merge-split-manipulate.md +240 -0
- package/assets/skills/converted/pdf/composable/mini/04-images-ocr.md +168 -0
- package/assets/skills/converted/pdf/composable/mini/05-encryption.md +51 -0
- package/assets/skills/converted/pdf/composable/mini/06-forms.md +300 -0
- package/assets/skills/converted/pdf/composable/mini/07-libraries-reference.md +89 -0
- package/assets/skills/converted/pptx/composable/BUNDLE.md +911 -0
- package/assets/skills/converted/pptx/composable/INDEX.md +12 -0
- package/assets/skills/converted/pptx/composable/VERSION +1 -0
- package/assets/skills/converted/pptx/composable/mini/00-core.md +37 -0
- package/assets/skills/converted/pptx/composable/mini/01-reading.md +37 -0
- package/assets/skills/converted/pptx/composable/mini/02-creating-from-scratch.md +422 -0
- package/assets/skills/converted/pptx/composable/mini/03-editing-templates.md +207 -0
- package/assets/skills/converted/pptx/composable/mini/04-design.md +89 -0
- package/assets/skills/converted/pptx/composable/mini/05-qa-and-rendering.md +91 -0
- package/assets/skills/converted/pptx/composable/presets/creating.md +659 -0
- package/assets/skills/converted/pptx/composable/presets/editing.md +485 -0
- package/assets/skills/converted/skill-creator/composable/BUNDLE.md +1681 -0
- package/assets/skills/converted/skill-creator/composable/INDEX.md +21 -0
- package/assets/skills/converted/skill-creator/composable/VERSION +1 -0
- package/assets/skills/converted/skill-creator/composable/mini/00-core.md +59 -0
- package/assets/skills/converted/skill-creator/composable/mini/01-creating-a-skill.md +27 -0
- package/assets/skills/converted/skill-creator/composable/mini/02-skill-writing-guide.md +71 -0
- package/assets/skills/converted/skill-creator/composable/mini/03-test-cases.md +21 -0
- package/assets/skills/converted/skill-creator/composable/mini/04-running-and-evaluating.md +128 -0
- package/assets/skills/converted/skill-creator/composable/mini/05-improving-the-skill.md +30 -0
- package/assets/skills/converted/skill-creator/composable/mini/06-blind-comparison.md +5 -0
- package/assets/skills/converted/skill-creator/composable/mini/07-description-optimization.md +74 -0
- package/assets/skills/converted/skill-creator/composable/mini/08-packaging.md +11 -0
- package/assets/skills/converted/skill-creator/composable/mini/09-environment-specific.md +38 -0
- package/assets/skills/converted/skill-creator/composable/mini/10-scripts-and-references.md +34 -0
- package/assets/skills/converted/skill-creator/composable/mini/11-json-schemas.md +414 -0
- package/assets/skills/converted/skill-creator/composable/mini/12-agent-grader.md +225 -0
- package/assets/skills/converted/skill-creator/composable/mini/13-agent-comparator.md +204 -0
- package/assets/skills/converted/skill-creator/composable/mini/14-agent-analyzer.md +276 -0
- package/assets/skills/converted/skill-creator/composable/presets/authoring.md +198 -0
- package/assets/skills/converted/skill-creator/composable/presets/evaluating.md +1334 -0
- package/assets/skills/converted/skill-creator/composable/presets/optimizing.md +160 -0
- package/assets/skills/converted/skill-creator/composable/presets.json +5 -0
- package/assets/skills/meta/ccs-skill-creator/composable/BUNDLE.md +465 -0
- package/assets/skills/meta/ccs-skill-creator/composable/INDEX.md +8 -0
- package/assets/skills/meta/ccs-skill-creator/composable/VERSION +1 -0
- package/assets/skills/meta/ccs-skill-creator/composable/mini/00-core.md +46 -0
- package/assets/skills/meta/ccs-skill-creator/composable/mini/01-create-new-skill.md +167 -0
- package/assets/skills/meta/ccs-skill-creator/composable/mini/02-convert-existing-skill.md +120 -0
- package/assets/skills/meta/ccs-skill-creator/composable/mini/03-review-and-maintain.md +112 -0
- package/assets/skills/sources/anthropic/PROVENANCE.md +3 -0
- package/assets/skills/sources/anthropic/claude-api/LICENSE.txt +202 -0
- package/assets/skills/sources/anthropic/docx/LICENSE.txt +30 -0
- package/assets/skills/sources/anthropic/internal-comms/LICENSE.txt +202 -0
- package/assets/skills/sources/anthropic/mcp-builder/LICENSE.txt +202 -0
- package/assets/skills/sources/anthropic/pdf/LICENSE.txt +30 -0
- package/assets/skills/sources/anthropic/pptx/LICENSE.txt +30 -0
- package/assets/skills/sources/anthropic/skill-creator/LICENSE.txt +202 -0
- package/assets/skills/sources/financial-analyst/PROVENANCE.md +1 -0
- package/assets/tools/hive.py +728 -0
- package/dist/cli.js +7494 -0
- package/package.json +40 -0
|
@@ -0,0 +1,394 @@
|
|
|
1
|
+
# Managed Agents — Ruby
|
|
2
|
+
|
|
3
|
+
> **Bindings not shown here:** This README covers the most common managed-agents flows for Ruby. If you need a class, method, namespace, field, or behavior that isn't shown, WebFetch the Ruby SDK repo **or the relevant docs page** from `shared/live-sources.md` rather than guess. Do not extrapolate from cURL shapes or another language's SDK.
|
|
4
|
+
|
|
5
|
+
> **Agents are persistent — create once, reference by ID.** Store the agent ID returned by `client.beta.agents.create` and pass it to every subsequent `client.beta.sessions.create`; do not call `agents.create` in the request path. The Anthropic CLI is one convenient way to create agents and environments from version-controlled YAML — its URL is in `shared/live-sources.md`. The examples below show in-code creation for completeness; in production the create call belongs in setup, not in the request path.
|
|
6
|
+
|
|
7
|
+
## Installation
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
gem install anthropic
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Client Initialization
|
|
14
|
+
|
|
15
|
+
```ruby
|
|
16
|
+
require "anthropic"
|
|
17
|
+
|
|
18
|
+
# Default (uses ANTHROPIC_API_KEY env var)
|
|
19
|
+
client = Anthropic::Client.new
|
|
20
|
+
|
|
21
|
+
# Explicit API key
|
|
22
|
+
client = Anthropic::Client.new(api_key: "your-api-key")
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
> ⚠️ **Trailing underscores:** The Ruby SDK uses `system_:` and `send_(` (trailing underscore) to avoid shadowing `Kernel#system` and `Kernel#send`. Use these forms throughout managed-agents code.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Create an Environment
|
|
30
|
+
|
|
31
|
+
```ruby
|
|
32
|
+
environment = client.beta.environments.create(
|
|
33
|
+
name: "my-dev-env",
|
|
34
|
+
config: {
|
|
35
|
+
type: "cloud",
|
|
36
|
+
networking: {type: "unrestricted"}
|
|
37
|
+
}
|
|
38
|
+
)
|
|
39
|
+
puts "Environment ID: #{environment.id}" # env_...
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Create an Agent (required first step)
|
|
45
|
+
|
|
46
|
+
> ⚠️ **There is no inline agent config.** `model`/`system_`/`tools` live on the agent object, not the session. Always start with `client.beta.agents.create()` — the session takes either `agent: agent.id` or the typed hash form `agent: {type: "agent", id: agent.id, version: agent.version}`.
|
|
47
|
+
|
|
48
|
+
### Minimal
|
|
49
|
+
|
|
50
|
+
```ruby
|
|
51
|
+
# 1. Create the agent (reusable, versioned)
|
|
52
|
+
agent = client.beta.agents.create(
|
|
53
|
+
name: "Coding Assistant",
|
|
54
|
+
model: :"claude-opus-4-8",
|
|
55
|
+
system_: "You are a helpful coding assistant.",
|
|
56
|
+
tools: [{type: "agent_toolset_20260401"}]
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
# 2. Start a session
|
|
60
|
+
session = client.beta.sessions.create(
|
|
61
|
+
agent: {type: "agent", id: agent.id, version: agent.version},
|
|
62
|
+
environment_id: environment.id,
|
|
63
|
+
title: "Quickstart session"
|
|
64
|
+
)
|
|
65
|
+
puts "Session ID: #{session.id}"
|
|
66
|
+
puts "Trace: https://platform.claude.com/workspaces/default/sessions/#{session.id}"
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Updating an Agent
|
|
70
|
+
|
|
71
|
+
Updates create new versions; the agent object is immutable per version.
|
|
72
|
+
|
|
73
|
+
```ruby
|
|
74
|
+
updated_agent = client.beta.agents.update(
|
|
75
|
+
agent.id,
|
|
76
|
+
version: agent.version,
|
|
77
|
+
system_: "You are a helpful coding agent. Always write tests."
|
|
78
|
+
)
|
|
79
|
+
puts "New version: #{updated_agent.version}"
|
|
80
|
+
|
|
81
|
+
# List all versions
|
|
82
|
+
client.beta.agents.versions.list(agent.id).auto_paging_each do |version|
|
|
83
|
+
puts "Version #{version.version}: #{version.updated_at.iso8601}"
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# Archive the agent
|
|
87
|
+
archived = client.beta.agents.archive(agent.id)
|
|
88
|
+
puts "Archived at: #{archived.archived_at.iso8601}"
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## Send a User Message
|
|
94
|
+
|
|
95
|
+
```ruby
|
|
96
|
+
client.beta.sessions.events.send_(
|
|
97
|
+
session.id,
|
|
98
|
+
events: [{
|
|
99
|
+
type: "user.message",
|
|
100
|
+
content: [{type: "text", text: "Review the auth module"}]
|
|
101
|
+
}]
|
|
102
|
+
)
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
> 💡 **Stream-first:** Open the stream *before* (or concurrently with) sending the message. The stream only delivers events that occur after it opens — stream-after-send means early events arrive buffered in one batch. See [Steering Patterns](../../shared/managed-agents-events.md#steering-patterns).
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## Stream Events (SSE)
|
|
110
|
+
|
|
111
|
+
```ruby
|
|
112
|
+
# Open the stream first, then send the user message
|
|
113
|
+
stream = client.beta.sessions.events.stream_events(session.id)
|
|
114
|
+
|
|
115
|
+
client.beta.sessions.events.send_(
|
|
116
|
+
session.id,
|
|
117
|
+
events: [{
|
|
118
|
+
type: "user.message",
|
|
119
|
+
content: [{type: "text", text: "Summarize the repo README"}]
|
|
120
|
+
}]
|
|
121
|
+
)
|
|
122
|
+
|
|
123
|
+
stream.each do |event|
|
|
124
|
+
case event.type
|
|
125
|
+
in :"agent.message"
|
|
126
|
+
event.content.each { |block| print block.text }
|
|
127
|
+
in :"agent.tool_use"
|
|
128
|
+
puts "\n[Using tool: #{event.name}]"
|
|
129
|
+
in :"session.status_idle"
|
|
130
|
+
break
|
|
131
|
+
in :"session.error"
|
|
132
|
+
puts "\n[Error: #{event.error&.message || "unknown"}]"
|
|
133
|
+
break
|
|
134
|
+
else
|
|
135
|
+
# ignore other event types
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
> ℹ️ Event `.type` is a Symbol (compare with `:"agent.message"`, not `"agent.message"`).
|
|
141
|
+
|
|
142
|
+
### Reconnecting and Tailing
|
|
143
|
+
|
|
144
|
+
When reconnecting mid-session, list past events first to dedupe, then tail live events:
|
|
145
|
+
|
|
146
|
+
```ruby
|
|
147
|
+
require "set"
|
|
148
|
+
|
|
149
|
+
stream = client.beta.sessions.events.stream_events(session.id)
|
|
150
|
+
|
|
151
|
+
# Stream is open and buffering. List history before tailing live.
|
|
152
|
+
seen_event_ids = Set.new
|
|
153
|
+
client.beta.sessions.events.list(session.id).auto_paging_each { |past| seen_event_ids << past.id }
|
|
154
|
+
|
|
155
|
+
# Tail live events, skipping anything already seen
|
|
156
|
+
stream.each do |event|
|
|
157
|
+
next if seen_event_ids.include?(event.id)
|
|
158
|
+
seen_event_ids << event.id
|
|
159
|
+
case event.type
|
|
160
|
+
in :"agent.message"
|
|
161
|
+
event.content.each { |block| print block.text }
|
|
162
|
+
in :"session.status_idle"
|
|
163
|
+
break
|
|
164
|
+
else
|
|
165
|
+
# ignore other event types
|
|
166
|
+
end
|
|
167
|
+
end
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## Provide Custom Tool Result
|
|
173
|
+
|
|
174
|
+
> ℹ️ The Ruby managed-agents bindings for `user.custom_tool_result` are not yet documented in this skill or in the apps source examples. Refer to `shared/managed-agents-events.md` for the wire format and the `anthropic` Ruby gem repository for the corresponding params.
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
## Poll Events
|
|
179
|
+
|
|
180
|
+
```ruby
|
|
181
|
+
client.beta.sessions.events.list(session.id).auto_paging_each do |event|
|
|
182
|
+
puts "#{event.type}: #{event.id}"
|
|
183
|
+
end
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
## Upload a File
|
|
189
|
+
|
|
190
|
+
```ruby
|
|
191
|
+
require "pathname"
|
|
192
|
+
|
|
193
|
+
file = client.beta.files.upload(file: Pathname("data.csv"))
|
|
194
|
+
puts "File ID: #{file.id}"
|
|
195
|
+
|
|
196
|
+
# Mount in a session
|
|
197
|
+
session = client.beta.sessions.create(
|
|
198
|
+
agent: agent.id,
|
|
199
|
+
environment_id: environment.id,
|
|
200
|
+
resources: [
|
|
201
|
+
{
|
|
202
|
+
type: "file",
|
|
203
|
+
file_id: file.id,
|
|
204
|
+
mount_path: "/workspace/data.csv"
|
|
205
|
+
}
|
|
206
|
+
]
|
|
207
|
+
)
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
### Add and Manage Resources on an Existing Session
|
|
211
|
+
|
|
212
|
+
```ruby
|
|
213
|
+
# Attach an additional file to an open session
|
|
214
|
+
resource = client.beta.sessions.resources.add(
|
|
215
|
+
session.id,
|
|
216
|
+
type: "file",
|
|
217
|
+
file_id: file.id
|
|
218
|
+
)
|
|
219
|
+
puts resource.id # "sesrsc_01ABC..."
|
|
220
|
+
|
|
221
|
+
# List resources on the session
|
|
222
|
+
listed = client.beta.sessions.resources.list(session.id)
|
|
223
|
+
listed.data.each { |entry| puts "#{entry.id} #{entry.type}" }
|
|
224
|
+
|
|
225
|
+
# Detach a resource
|
|
226
|
+
client.beta.sessions.resources.delete(resource.id, session_id: session.id)
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
---
|
|
230
|
+
|
|
231
|
+
## List and Download Session Files
|
|
232
|
+
|
|
233
|
+
```ruby
|
|
234
|
+
files = client.beta.files.list(scope_id: "sesn_abc123", betas: ["managed-agents-2026-04-01"])
|
|
235
|
+
content = client.beta.files.download(files.data[0].id)
|
|
236
|
+
File.binwrite("output.txt", content.read)
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
---
|
|
240
|
+
|
|
241
|
+
## Session Management
|
|
242
|
+
|
|
243
|
+
```ruby
|
|
244
|
+
# List environments
|
|
245
|
+
environments = client.beta.environments.list
|
|
246
|
+
|
|
247
|
+
# Retrieve a specific environment
|
|
248
|
+
env = client.beta.environments.retrieve(environment.id)
|
|
249
|
+
|
|
250
|
+
# Archive an environment (read-only, existing sessions continue)
|
|
251
|
+
client.beta.environments.archive(environment.id)
|
|
252
|
+
|
|
253
|
+
# Delete an environment (only if no sessions reference it)
|
|
254
|
+
client.beta.environments.delete(environment.id)
|
|
255
|
+
|
|
256
|
+
# Delete a session
|
|
257
|
+
client.beta.sessions.delete(session.id)
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
---
|
|
261
|
+
|
|
262
|
+
## MCP Server Integration
|
|
263
|
+
|
|
264
|
+
```ruby
|
|
265
|
+
# Agent declares MCP server (no auth here — auth goes in a vault)
|
|
266
|
+
agent = client.beta.agents.create(
|
|
267
|
+
name: "GitHub Assistant",
|
|
268
|
+
model: :"claude-opus-4-8",
|
|
269
|
+
mcp_servers: [
|
|
270
|
+
{
|
|
271
|
+
type: "url",
|
|
272
|
+
name: "github",
|
|
273
|
+
url: "https://api.githubcopilot.com/mcp/"
|
|
274
|
+
}
|
|
275
|
+
],
|
|
276
|
+
tools: [
|
|
277
|
+
{type: "agent_toolset_20260401"},
|
|
278
|
+
{type: "mcp_toolset", mcp_server_name: "github"}
|
|
279
|
+
]
|
|
280
|
+
)
|
|
281
|
+
|
|
282
|
+
# Session attaches vault(s) containing credentials for those MCP server URLs
|
|
283
|
+
session = client.beta.sessions.create(
|
|
284
|
+
agent: {type: "agent", id: agent.id, version: agent.version},
|
|
285
|
+
environment_id: environment.id,
|
|
286
|
+
vault_ids: [vault.id]
|
|
287
|
+
)
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
See `shared/managed-agents-tools.md` §Vaults for creating vaults and adding credentials.
|
|
291
|
+
|
|
292
|
+
---
|
|
293
|
+
|
|
294
|
+
## Vaults
|
|
295
|
+
|
|
296
|
+
```ruby
|
|
297
|
+
# Create a vault
|
|
298
|
+
vault = client.beta.vaults.create(
|
|
299
|
+
display_name: "Alice",
|
|
300
|
+
metadata: {external_user_id: "usr_abc123"}
|
|
301
|
+
)
|
|
302
|
+
puts vault.id # "vlt_01ABC..."
|
|
303
|
+
|
|
304
|
+
# Add an OAuth credential
|
|
305
|
+
credential = client.beta.vaults.credentials.create(
|
|
306
|
+
vault.id,
|
|
307
|
+
display_name: "Alice's Slack",
|
|
308
|
+
auth: {
|
|
309
|
+
type: "mcp_oauth",
|
|
310
|
+
mcp_server_url: "https://mcp.slack.com/mcp",
|
|
311
|
+
access_token: "xoxp-...",
|
|
312
|
+
expires_at: "2026-04-15T00:00:00Z",
|
|
313
|
+
refresh: {
|
|
314
|
+
token_endpoint: "https://slack.com/api/oauth.v2.access",
|
|
315
|
+
client_id: "1234567890.0987654321",
|
|
316
|
+
scope: "channels:read chat:write",
|
|
317
|
+
refresh_token: "xoxe-1-...",
|
|
318
|
+
token_endpoint_auth: {
|
|
319
|
+
type: "client_secret_post",
|
|
320
|
+
client_secret: "abc123..."
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
)
|
|
325
|
+
|
|
326
|
+
# Rotate the credential (e.g., after a token refresh)
|
|
327
|
+
client.beta.vaults.credentials.update(
|
|
328
|
+
credential.id,
|
|
329
|
+
vault_id: vault.id,
|
|
330
|
+
auth: {
|
|
331
|
+
type: "mcp_oauth",
|
|
332
|
+
access_token: "xoxp-new-...",
|
|
333
|
+
expires_at: "2026-05-15T00:00:00Z",
|
|
334
|
+
refresh: {refresh_token: "xoxe-1-new-..."}
|
|
335
|
+
}
|
|
336
|
+
)
|
|
337
|
+
|
|
338
|
+
# Archive a vault
|
|
339
|
+
client.beta.vaults.archive(vault.id)
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
---
|
|
343
|
+
|
|
344
|
+
## GitHub Repository Integration
|
|
345
|
+
|
|
346
|
+
Mount a GitHub repository as a session resource (a vault holds the GitHub MCP credential):
|
|
347
|
+
|
|
348
|
+
```ruby
|
|
349
|
+
session = client.beta.sessions.create(
|
|
350
|
+
agent: agent.id,
|
|
351
|
+
environment_id: environment.id,
|
|
352
|
+
vault_ids: [vault.id],
|
|
353
|
+
resources: [
|
|
354
|
+
{
|
|
355
|
+
type: "github_repository",
|
|
356
|
+
url: "https://github.com/org/repo",
|
|
357
|
+
mount_path: "/workspace/repo",
|
|
358
|
+
authorization_token: "ghp_your_github_token"
|
|
359
|
+
}
|
|
360
|
+
]
|
|
361
|
+
)
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
Multiple repositories on the same session:
|
|
365
|
+
|
|
366
|
+
```ruby
|
|
367
|
+
resources = [
|
|
368
|
+
{
|
|
369
|
+
type: "github_repository",
|
|
370
|
+
url: "https://github.com/org/frontend",
|
|
371
|
+
mount_path: "/workspace/frontend",
|
|
372
|
+
authorization_token: "ghp_your_github_token"
|
|
373
|
+
},
|
|
374
|
+
{
|
|
375
|
+
type: "github_repository",
|
|
376
|
+
url: "https://github.com/org/backend",
|
|
377
|
+
mount_path: "/workspace/backend",
|
|
378
|
+
authorization_token: "ghp_your_github_token"
|
|
379
|
+
}
|
|
380
|
+
]
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
Rotating a repository's authorization token:
|
|
384
|
+
|
|
385
|
+
```ruby
|
|
386
|
+
listed = client.beta.sessions.resources.list(session.id)
|
|
387
|
+
repo_resource_id = listed.data.first.id
|
|
388
|
+
|
|
389
|
+
client.beta.sessions.resources.update(
|
|
390
|
+
repo_resource_id,
|
|
391
|
+
session_id: session.id,
|
|
392
|
+
authorization_token: "ghp_your_new_github_token"
|
|
393
|
+
)
|
|
394
|
+
```
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
# Claude API — cURL / Raw HTTP
|
|
2
|
+
|
|
3
|
+
Use these examples when the user needs raw HTTP requests or is working in a language without an official SDK.
|
|
4
|
+
|
|
5
|
+
## Setup
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
export ANTHROPIC_API_KEY="your-api-key"
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Basic Message Request
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
curl https://api.anthropic.com/v1/messages \
|
|
17
|
+
-H "Content-Type: application/json" \
|
|
18
|
+
-H "x-api-key: $ANTHROPIC_API_KEY" \
|
|
19
|
+
-H "anthropic-version: 2023-06-01" \
|
|
20
|
+
-d '{
|
|
21
|
+
"model": "claude-opus-4-8",
|
|
22
|
+
"max_tokens": 16000,
|
|
23
|
+
"messages": [
|
|
24
|
+
{"role": "user", "content": "What is the capital of France?"}
|
|
25
|
+
]
|
|
26
|
+
}'
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### Parsing the response
|
|
30
|
+
|
|
31
|
+
Use `jq` to extract fields from the JSON response. Do not use `grep`/`sed` —
|
|
32
|
+
JSON strings can contain any character and regex parsing will break on quotes,
|
|
33
|
+
escapes, or multi-line content.
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
# Capture the response, then extract fields
|
|
37
|
+
response=$(curl -s https://api.anthropic.com/v1/messages \
|
|
38
|
+
-H "Content-Type: application/json" \
|
|
39
|
+
-H "x-api-key: $ANTHROPIC_API_KEY" \
|
|
40
|
+
-H "anthropic-version: 2023-06-01" \
|
|
41
|
+
-d '{"model":"claude-opus-4-8","max_tokens":16000,"messages":[{"role":"user","content":"Hello"}]}')
|
|
42
|
+
|
|
43
|
+
# Print the first text block (-r strips the JSON quotes)
|
|
44
|
+
echo "$response" | jq -r '.content[0].text'
|
|
45
|
+
|
|
46
|
+
# Read usage fields
|
|
47
|
+
input_tokens=$(echo "$response" | jq -r '.usage.input_tokens')
|
|
48
|
+
output_tokens=$(echo "$response" | jq -r '.usage.output_tokens')
|
|
49
|
+
|
|
50
|
+
# Read stop reason (for tool-use loops)
|
|
51
|
+
stop_reason=$(echo "$response" | jq -r '.stop_reason')
|
|
52
|
+
|
|
53
|
+
# Extract all text blocks (content is an array; filter to type=="text")
|
|
54
|
+
echo "$response" | jq -r '.content[] | select(.type == "text") | .text'
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## Streaming (SSE)
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
curl https://api.anthropic.com/v1/messages \
|
|
64
|
+
-H "Content-Type: application/json" \
|
|
65
|
+
-H "x-api-key: $ANTHROPIC_API_KEY" \
|
|
66
|
+
-H "anthropic-version: 2023-06-01" \
|
|
67
|
+
-d '{
|
|
68
|
+
"model": "claude-opus-4-8",
|
|
69
|
+
"max_tokens": 64000,
|
|
70
|
+
"stream": true,
|
|
71
|
+
"messages": [{"role": "user", "content": "Write a haiku"}]
|
|
72
|
+
}'
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
The response is a stream of Server-Sent Events:
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
event: message_start
|
|
79
|
+
data: {"type":"message_start","message":{"id":"msg_...","type":"message",...}}
|
|
80
|
+
|
|
81
|
+
event: content_block_start
|
|
82
|
+
data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}}
|
|
83
|
+
|
|
84
|
+
event: content_block_delta
|
|
85
|
+
data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Hello"}}
|
|
86
|
+
|
|
87
|
+
event: content_block_stop
|
|
88
|
+
data: {"type":"content_block_stop","index":0}
|
|
89
|
+
|
|
90
|
+
event: message_delta
|
|
91
|
+
data: {"type":"message_delta","delta":{"stop_reason":"end_turn"},"usage":{"output_tokens":12}}
|
|
92
|
+
|
|
93
|
+
event: message_stop
|
|
94
|
+
data: {"type":"message_stop"}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## Tool Use
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
curl https://api.anthropic.com/v1/messages \
|
|
103
|
+
-H "Content-Type: application/json" \
|
|
104
|
+
-H "x-api-key: $ANTHROPIC_API_KEY" \
|
|
105
|
+
-H "anthropic-version: 2023-06-01" \
|
|
106
|
+
-d '{
|
|
107
|
+
"model": "claude-opus-4-8",
|
|
108
|
+
"max_tokens": 16000,
|
|
109
|
+
"tools": [{
|
|
110
|
+
"name": "get_weather",
|
|
111
|
+
"description": "Get current weather for a location",
|
|
112
|
+
"input_schema": {
|
|
113
|
+
"type": "object",
|
|
114
|
+
"properties": {
|
|
115
|
+
"location": {"type": "string", "description": "City name"}
|
|
116
|
+
},
|
|
117
|
+
"required": ["location"]
|
|
118
|
+
}
|
|
119
|
+
}],
|
|
120
|
+
"messages": [{"role": "user", "content": "What is the weather in Paris?"}]
|
|
121
|
+
}'
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
When Claude responds with a `tool_use` block, send the result back:
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
curl https://api.anthropic.com/v1/messages \
|
|
128
|
+
-H "Content-Type: application/json" \
|
|
129
|
+
-H "x-api-key: $ANTHROPIC_API_KEY" \
|
|
130
|
+
-H "anthropic-version: 2023-06-01" \
|
|
131
|
+
-d '{
|
|
132
|
+
"model": "claude-opus-4-8",
|
|
133
|
+
"max_tokens": 16000,
|
|
134
|
+
"tools": [{
|
|
135
|
+
"name": "get_weather",
|
|
136
|
+
"description": "Get current weather for a location",
|
|
137
|
+
"input_schema": {
|
|
138
|
+
"type": "object",
|
|
139
|
+
"properties": {
|
|
140
|
+
"location": {"type": "string", "description": "City name"}
|
|
141
|
+
},
|
|
142
|
+
"required": ["location"]
|
|
143
|
+
}
|
|
144
|
+
}],
|
|
145
|
+
"messages": [
|
|
146
|
+
{"role": "user", "content": "What is the weather in Paris?"},
|
|
147
|
+
{"role": "assistant", "content": [
|
|
148
|
+
{"type": "text", "text": "Let me check the weather."},
|
|
149
|
+
{"type": "tool_use", "id": "toolu_abc123", "name": "get_weather", "input": {"location": "Paris"}}
|
|
150
|
+
]},
|
|
151
|
+
{"role": "user", "content": [
|
|
152
|
+
{"type": "tool_result", "tool_use_id": "toolu_abc123", "content": "72°F and sunny"}
|
|
153
|
+
]}
|
|
154
|
+
]
|
|
155
|
+
}'
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
## Prompt Caching
|
|
161
|
+
|
|
162
|
+
Put `cache_control` on the last block of the stable prefix. See `shared/prompt-caching.md` for placement patterns and the silent-invalidator audit checklist.
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
curl https://api.anthropic.com/v1/messages \
|
|
166
|
+
-H "Content-Type: application/json" \
|
|
167
|
+
-H "x-api-key: $ANTHROPIC_API_KEY" \
|
|
168
|
+
-H "anthropic-version: 2023-06-01" \
|
|
169
|
+
-d '{
|
|
170
|
+
"model": "claude-opus-4-8",
|
|
171
|
+
"max_tokens": 16000,
|
|
172
|
+
"system": [
|
|
173
|
+
{"type": "text", "text": "<large shared prompt...>", "cache_control": {"type": "ephemeral"}}
|
|
174
|
+
],
|
|
175
|
+
"messages": [{"role": "user", "content": "Summarize the key points"}]
|
|
176
|
+
}'
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
For 1-hour TTL: `"cache_control": {"type": "ephemeral", "ttl": "1h"}`. Top-level `"cache_control"` on the request body auto-places on the last cacheable block. Verify hits via the response `usage.cache_creation_input_tokens` / `usage.cache_read_input_tokens` fields.
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
## Extended Thinking
|
|
184
|
+
|
|
185
|
+
> **Fable 5, Opus 4.8, Opus 4.7, Opus 4.6, and Sonnet 4.6:** Use adaptive thinking. `budget_tokens` is removed on Fable 5, Opus 4.8, and 4.7 (400 if sent); deprecated on Opus 4.6 and Sonnet 4.6.
|
|
186
|
+
> **Older models:** Use `"type": "enabled"` with `"budget_tokens": N` (must be < `max_tokens`, min 1024).
|
|
187
|
+
|
|
188
|
+
```bash
|
|
189
|
+
# Fable 5 / Opus 4.8 / 4.7 / 4.6: adaptive thinking (recommended)
|
|
190
|
+
curl https://api.anthropic.com/v1/messages \
|
|
191
|
+
-H "Content-Type: application/json" \
|
|
192
|
+
-H "x-api-key: $ANTHROPIC_API_KEY" \
|
|
193
|
+
-H "anthropic-version: 2023-06-01" \
|
|
194
|
+
-d '{
|
|
195
|
+
"model": "claude-opus-4-8",
|
|
196
|
+
"max_tokens": 16000,
|
|
197
|
+
"thinking": {
|
|
198
|
+
"type": "adaptive",
|
|
199
|
+
"display": "summarized"
|
|
200
|
+
},
|
|
201
|
+
"output_config": {
|
|
202
|
+
"effort": "high"
|
|
203
|
+
},
|
|
204
|
+
"messages": [{"role": "user", "content": "Solve this step by step..."}]
|
|
205
|
+
}'
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
## Refusal Fallbacks (Claude Fable 5) — opt in by default
|
|
211
|
+
|
|
212
|
+
On `claude-fable-5`, safety classifiers may decline a request (HTTP 200 with `stop_reason: "refusal"`). Fallbacks are **opt-in**: without them the request simply stops. Include the `fallbacks` parameter and its beta header by default — on a policy decline the API re-runs the same request on the fallback model inside the same call. A decline before any output isn't billed (a mid-stream decline bills the streamed partial); the rescue bills at the fallback model's own rates.
|
|
213
|
+
|
|
214
|
+
```bash
|
|
215
|
+
response=$(curl -s https://api.anthropic.com/v1/messages \
|
|
216
|
+
-H "Content-Type: application/json" \
|
|
217
|
+
-H "x-api-key: $ANTHROPIC_API_KEY" \
|
|
218
|
+
-H "anthropic-version: 2023-06-01" \
|
|
219
|
+
-H "anthropic-beta: server-side-fallback-2026-06-01" \
|
|
220
|
+
-d '{
|
|
221
|
+
"model": "claude-fable-5",
|
|
222
|
+
"max_tokens": 16000,
|
|
223
|
+
"fallbacks": [{"model": "claude-opus-4-8"}],
|
|
224
|
+
"messages": [{"role": "user", "content": "Hello"}]
|
|
225
|
+
}')
|
|
226
|
+
|
|
227
|
+
# Which model produced the message
|
|
228
|
+
echo "$response" | jq -r '.model'
|
|
229
|
+
|
|
230
|
+
# Refusal on the final response means the whole chain refused
|
|
231
|
+
echo "$response" | jq -r '.stop_reason'
|
|
232
|
+
|
|
233
|
+
# Switch points: one fallback block per model that ran and declined this turn
|
|
234
|
+
echo "$response" | jq -r '.content[] | select(.type == "fallback") | "\(.from.model) declined; \(.to.model) continued"'
|
|
235
|
+
|
|
236
|
+
# Served-by signal — covers sticky turns, which carry no fallback block.
|
|
237
|
+
# Pair with stop_reason: the fallback model can itself refuse.
|
|
238
|
+
if [ "$(echo "$response" | jq -r '.stop_reason')" != "refusal" ] && \
|
|
239
|
+
echo "$response" | jq -e '[.usage.iterations[]? | select(.type == "fallback_message")] | length > 0' > /dev/null; then
|
|
240
|
+
echo "fallback model served this turn"
|
|
241
|
+
fi
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
The header must be exactly `server-side-fallback-2026-06-01`. The parameter is rejected on the Batches API and unavailable on Amazon Bedrock, Vertex AI, and Microsoft Foundry. Full semantics (sticky routing, billing, streaming, echoing fallback turns back): `shared/model-migration.md` → Migrating to Claude Fable 5 → `refusal` stop reason.
|
|
245
|
+
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
## Required Headers
|
|
249
|
+
|
|
250
|
+
| Header | Value | Description |
|
|
251
|
+
| ------------------- | ------------------ | -------------------------- |
|
|
252
|
+
| `Content-Type` | `application/json` | Required |
|
|
253
|
+
| `x-api-key` | Your API key | Authentication |
|
|
254
|
+
| `anthropic-version` | `2023-06-01` | API version |
|
|
255
|
+
| `anthropic-beta` | Beta feature IDs | Required for beta features |
|