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,443 @@
|
|
|
1
|
+
# Managed Agents — Java
|
|
2
|
+
|
|
3
|
+
> **Bindings not shown here:** This README covers the most common managed-agents flows for Java. If you need a class, method, namespace, field, or behavior that isn't shown, WebFetch the Java 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
|
+
```xml
|
|
10
|
+
<dependency>
|
|
11
|
+
<groupId>com.anthropic</groupId>
|
|
12
|
+
<artifactId>anthropic-java</artifactId>
|
|
13
|
+
</dependency>
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Client Initialization
|
|
17
|
+
|
|
18
|
+
```java
|
|
19
|
+
import com.anthropic.client.okhttp.AnthropicOkHttpClient;
|
|
20
|
+
|
|
21
|
+
// Default (uses ANTHROPIC_API_KEY env var)
|
|
22
|
+
var client = AnthropicOkHttpClient.fromEnv();
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Create an Environment
|
|
28
|
+
|
|
29
|
+
```java
|
|
30
|
+
import com.anthropic.models.beta.environments.BetaCloudConfigParams;
|
|
31
|
+
import com.anthropic.models.beta.environments.BetaUnrestrictedNetwork;
|
|
32
|
+
import com.anthropic.models.beta.environments.EnvironmentCreateParams;
|
|
33
|
+
|
|
34
|
+
var environment = client.beta().environments().create(EnvironmentCreateParams.builder()
|
|
35
|
+
.name("my-dev-env")
|
|
36
|
+
.config(BetaCloudConfigParams.builder()
|
|
37
|
+
.networking(BetaUnrestrictedNetwork.builder().build())
|
|
38
|
+
.build())
|
|
39
|
+
.build());
|
|
40
|
+
System.out.println("Environment ID: " + environment.id()); // env_...
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Create an Agent (required first step)
|
|
46
|
+
|
|
47
|
+
> ⚠️ **There is no inline agent config.** Model, system, and 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 `BetaManagedAgentsAgentParams.builder()...build()`.
|
|
48
|
+
|
|
49
|
+
### Minimal
|
|
50
|
+
|
|
51
|
+
```java
|
|
52
|
+
import com.anthropic.models.beta.agents.AgentCreateParams;
|
|
53
|
+
import com.anthropic.models.beta.agents.BetaManagedAgentsAgentToolset20260401Params;
|
|
54
|
+
import com.anthropic.models.beta.sessions.BetaManagedAgentsAgentParams;
|
|
55
|
+
import com.anthropic.models.beta.sessions.SessionCreateParams;
|
|
56
|
+
|
|
57
|
+
// 1. Create the agent (reusable, versioned)
|
|
58
|
+
var agent = client.beta().agents().create(AgentCreateParams.builder()
|
|
59
|
+
.name("Coding Assistant")
|
|
60
|
+
.model("claude-opus-4-8")
|
|
61
|
+
.system("You are a helpful coding assistant.")
|
|
62
|
+
.addTool(BetaManagedAgentsAgentToolset20260401Params.builder()
|
|
63
|
+
.type(BetaManagedAgentsAgentToolset20260401Params.Type.AGENT_TOOLSET_20260401)
|
|
64
|
+
.build())
|
|
65
|
+
.build());
|
|
66
|
+
|
|
67
|
+
// 2. Start a session
|
|
68
|
+
var session = client.beta().sessions().create(SessionCreateParams.builder()
|
|
69
|
+
.agent(BetaManagedAgentsAgentParams.builder()
|
|
70
|
+
.type(BetaManagedAgentsAgentParams.Type.AGENT)
|
|
71
|
+
.id(agent.id())
|
|
72
|
+
.version(agent.version())
|
|
73
|
+
.build())
|
|
74
|
+
.environmentId(environment.id())
|
|
75
|
+
.title("Quickstart session")
|
|
76
|
+
.build());
|
|
77
|
+
System.out.println("Session ID: " + session.id());
|
|
78
|
+
System.out.println("Trace: https://platform.claude.com/workspaces/default/sessions/" + session.id());
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Updating an Agent
|
|
82
|
+
|
|
83
|
+
Updates create new versions; the agent object is immutable per version.
|
|
84
|
+
|
|
85
|
+
```java
|
|
86
|
+
import com.anthropic.models.beta.agents.AgentUpdateParams;
|
|
87
|
+
|
|
88
|
+
var updatedAgent = client.beta().agents().update(agent.id(), AgentUpdateParams.builder()
|
|
89
|
+
.version(agent.version())
|
|
90
|
+
.system("You are a helpful coding agent. Always write tests.")
|
|
91
|
+
.build());
|
|
92
|
+
System.out.println("New version: " + updatedAgent.version());
|
|
93
|
+
|
|
94
|
+
// List all versions
|
|
95
|
+
for (var version : client.beta().agents().versions().list(agent.id()).autoPager()) {
|
|
96
|
+
System.out.println("Version " + version.version() + ": " + version.updatedAt());
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// Archive the agent
|
|
100
|
+
var archived = client.beta().agents().archive(agent.id());
|
|
101
|
+
System.out.println("Archived at: " + archived.archivedAt().orElseThrow());
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## Send a User Message
|
|
107
|
+
|
|
108
|
+
```java
|
|
109
|
+
import com.anthropic.models.beta.sessions.events.BetaManagedAgentsUserMessageEventParams;
|
|
110
|
+
import com.anthropic.models.beta.sessions.events.EventSendParams;
|
|
111
|
+
|
|
112
|
+
client.beta().sessions().events().send(session.id(), EventSendParams.builder()
|
|
113
|
+
.addEvent(BetaManagedAgentsUserMessageEventParams.builder()
|
|
114
|
+
.type(BetaManagedAgentsUserMessageEventParams.Type.USER_MESSAGE)
|
|
115
|
+
.addTextContent("Review the auth module")
|
|
116
|
+
.build())
|
|
117
|
+
.build());
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
> 💡 **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).
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## Stream Events (SSE)
|
|
125
|
+
|
|
126
|
+
```java
|
|
127
|
+
import com.anthropic.models.beta.sessions.events.StreamEvents;
|
|
128
|
+
|
|
129
|
+
// Open the stream first, then send the user message
|
|
130
|
+
try (var stream = client.beta().sessions().events().streamStreaming(session.id())) {
|
|
131
|
+
client.beta().sessions().events().send(session.id(), EventSendParams.builder()
|
|
132
|
+
.addEvent(BetaManagedAgentsUserMessageEventParams.builder()
|
|
133
|
+
.type(BetaManagedAgentsUserMessageEventParams.Type.USER_MESSAGE)
|
|
134
|
+
.addTextContent("Summarize the repo README")
|
|
135
|
+
.build())
|
|
136
|
+
.build());
|
|
137
|
+
|
|
138
|
+
for (var event : (Iterable<StreamEvents>) stream.stream()::iterator) {
|
|
139
|
+
if (event.isAgentMessage()) {
|
|
140
|
+
event.asAgentMessage().content().forEach(block -> System.out.print(block.text()));
|
|
141
|
+
} else if (event.isAgentToolUse()) {
|
|
142
|
+
System.out.println("\n[Using tool: " + event.asAgentToolUse().name() + "]");
|
|
143
|
+
} else if (event.isSessionStatusIdle()) {
|
|
144
|
+
break;
|
|
145
|
+
} else if (event.isSessionError()) {
|
|
146
|
+
System.out.println("\n[Error]");
|
|
147
|
+
break;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### Reconnecting and Tailing
|
|
154
|
+
|
|
155
|
+
When reconnecting mid-session, list past events first to dedupe, then tail live events. The cross-variant `id` field is read from the raw `_json()` value:
|
|
156
|
+
|
|
157
|
+
```java
|
|
158
|
+
import com.anthropic.core.JsonValue;
|
|
159
|
+
import java.util.HashSet;
|
|
160
|
+
import java.util.Map;
|
|
161
|
+
import java.util.Optional;
|
|
162
|
+
|
|
163
|
+
try (var stream = client.beta().sessions().events().streamStreaming(session.id())) {
|
|
164
|
+
// Stream is open and buffering. List history before tailing live.
|
|
165
|
+
var seenEventIds = new HashSet<String>();
|
|
166
|
+
for (var past : client.beta().sessions().events().list(session.id()).autoPager()) {
|
|
167
|
+
Optional<Map<String, JsonValue>> obj = past._json().orElseThrow().asObject();
|
|
168
|
+
seenEventIds.add(obj.orElseThrow().get("id").asStringOrThrow());
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
// Tail live events, skipping anything already seen
|
|
172
|
+
for (var event : (Iterable<StreamEvents>) stream.stream()::iterator) {
|
|
173
|
+
Optional<Map<String, JsonValue>> obj = event._json().orElseThrow().asObject();
|
|
174
|
+
if (!seenEventIds.add(obj.orElseThrow().get("id").asStringOrThrow())) continue;
|
|
175
|
+
if (event.isAgentMessage()) {
|
|
176
|
+
event.asAgentMessage().content().forEach(block -> System.out.print(block.text()));
|
|
177
|
+
} else if (event.isSessionStatusIdle()) {
|
|
178
|
+
break;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
## Provide Custom Tool Result
|
|
187
|
+
|
|
188
|
+
> ℹ️ The Java 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-java` repository for the corresponding params types.
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
## Poll Events
|
|
193
|
+
|
|
194
|
+
```java
|
|
195
|
+
for (var event : client.beta().sessions().events().list(session.id()).autoPager()) {
|
|
196
|
+
System.out.println(event.type() + ": " + event);
|
|
197
|
+
}
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## Upload a File
|
|
203
|
+
|
|
204
|
+
```java
|
|
205
|
+
import com.anthropic.models.beta.files.FileUploadParams;
|
|
206
|
+
import com.anthropic.models.beta.sessions.BetaManagedAgentsFileResourceParams;
|
|
207
|
+
import java.nio.file.Path;
|
|
208
|
+
|
|
209
|
+
var dataCsv = Path.of("data.csv");
|
|
210
|
+
|
|
211
|
+
var file = client.beta().files().upload(FileUploadParams.builder()
|
|
212
|
+
.file(dataCsv)
|
|
213
|
+
.build());
|
|
214
|
+
System.out.println("File ID: " + file.id());
|
|
215
|
+
|
|
216
|
+
// Mount in a session
|
|
217
|
+
var session = client.beta().sessions().create(SessionCreateParams.builder()
|
|
218
|
+
.agent(agent.id())
|
|
219
|
+
.environmentId(environment.id())
|
|
220
|
+
.addResource(BetaManagedAgentsFileResourceParams.builder()
|
|
221
|
+
.type(BetaManagedAgentsFileResourceParams.Type.FILE)
|
|
222
|
+
.fileId(file.id())
|
|
223
|
+
.mountPath("/workspace/data.csv")
|
|
224
|
+
.build())
|
|
225
|
+
.build());
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
### Add and Manage Resources on an Existing Session
|
|
229
|
+
|
|
230
|
+
```java
|
|
231
|
+
import com.anthropic.models.beta.sessions.resources.ResourceAddParams;
|
|
232
|
+
import com.anthropic.models.beta.sessions.resources.ResourceDeleteParams;
|
|
233
|
+
|
|
234
|
+
// Attach an additional file to an open session
|
|
235
|
+
var resource = client.beta().sessions().resources().add(session.id(), ResourceAddParams.builder()
|
|
236
|
+
.betaManagedAgentsFileResourceParams(BetaManagedAgentsFileResourceParams.builder()
|
|
237
|
+
.type(BetaManagedAgentsFileResourceParams.Type.FILE)
|
|
238
|
+
.fileId(file.id())
|
|
239
|
+
.build())
|
|
240
|
+
.build());
|
|
241
|
+
System.out.println(resource.id()); // "sesrsc_01ABC..."
|
|
242
|
+
|
|
243
|
+
// List resources on the session — entries are a discriminated union
|
|
244
|
+
var listed = client.beta().sessions().resources().list(session.id());
|
|
245
|
+
for (var entry : listed.data()) {
|
|
246
|
+
if (entry.isFile()) {
|
|
247
|
+
var fileResource = entry.asFile();
|
|
248
|
+
System.out.println(fileResource.id() + " " + fileResource.type());
|
|
249
|
+
} else if (entry.isGitHubRepository()) {
|
|
250
|
+
var repoResource = entry.asGitHubRepository();
|
|
251
|
+
System.out.println(repoResource.id() + " " + repoResource.type());
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
// Detach a resource
|
|
256
|
+
client.beta().sessions().resources().delete(resource.id(), ResourceDeleteParams.builder()
|
|
257
|
+
.sessionId(session.id())
|
|
258
|
+
.build());
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
---
|
|
262
|
+
|
|
263
|
+
## List and Download Session Files
|
|
264
|
+
|
|
265
|
+
> ℹ️ Listing and downloading files an agent wrote during a session is not yet documented for Java in this skill or in the apps source examples. See `shared/managed-agents-events.md` and the `anthropic-java` repository for the file list/download bindings.
|
|
266
|
+
|
|
267
|
+
---
|
|
268
|
+
|
|
269
|
+
## Session Management
|
|
270
|
+
|
|
271
|
+
```java
|
|
272
|
+
// List environments
|
|
273
|
+
var environments = client.beta().environments().list();
|
|
274
|
+
|
|
275
|
+
// Retrieve a specific environment
|
|
276
|
+
var env = client.beta().environments().retrieve(environment.id());
|
|
277
|
+
|
|
278
|
+
// Archive an environment (read-only, existing sessions continue)
|
|
279
|
+
client.beta().environments().archive(environment.id());
|
|
280
|
+
|
|
281
|
+
// Delete an environment (only if no sessions reference it)
|
|
282
|
+
client.beta().environments().delete(environment.id());
|
|
283
|
+
|
|
284
|
+
// Delete a session
|
|
285
|
+
client.beta().sessions().delete(session.id());
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
---
|
|
289
|
+
|
|
290
|
+
## MCP Server Integration
|
|
291
|
+
|
|
292
|
+
```java
|
|
293
|
+
import com.anthropic.models.beta.agents.BetaManagedAgentsMcpToolsetParams;
|
|
294
|
+
import com.anthropic.models.beta.agents.BetaManagedAgentsUrlMcpServerParams;
|
|
295
|
+
|
|
296
|
+
// Agent declares MCP server (no auth here — auth goes in a vault)
|
|
297
|
+
var agent = client.beta().agents().create(AgentCreateParams.builder()
|
|
298
|
+
.name("GitHub Assistant")
|
|
299
|
+
.model("claude-opus-4-8")
|
|
300
|
+
.addMcpServer(BetaManagedAgentsUrlMcpServerParams.builder()
|
|
301
|
+
.type(BetaManagedAgentsUrlMcpServerParams.Type.URL)
|
|
302
|
+
.name("github")
|
|
303
|
+
.url("https://api.githubcopilot.com/mcp/")
|
|
304
|
+
.build())
|
|
305
|
+
.addTool(BetaManagedAgentsAgentToolset20260401Params.builder()
|
|
306
|
+
.type(BetaManagedAgentsAgentToolset20260401Params.Type.AGENT_TOOLSET_20260401)
|
|
307
|
+
.build())
|
|
308
|
+
.addTool(BetaManagedAgentsMcpToolsetParams.builder()
|
|
309
|
+
.type(BetaManagedAgentsMcpToolsetParams.Type.MCP_TOOLSET)
|
|
310
|
+
.mcpServerName("github")
|
|
311
|
+
.build())
|
|
312
|
+
.build());
|
|
313
|
+
|
|
314
|
+
// Session attaches vault(s) containing credentials for those MCP server URLs
|
|
315
|
+
var session = client.beta().sessions().create(SessionCreateParams.builder()
|
|
316
|
+
.agent(BetaManagedAgentsAgentParams.builder()
|
|
317
|
+
.type(BetaManagedAgentsAgentParams.Type.AGENT)
|
|
318
|
+
.id(agent.id())
|
|
319
|
+
.version(agent.version())
|
|
320
|
+
.build())
|
|
321
|
+
.environmentId(environment.id())
|
|
322
|
+
.addVaultId(vault.id())
|
|
323
|
+
.build());
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
See `shared/managed-agents-tools.md` §Vaults for creating vaults and adding credentials.
|
|
327
|
+
|
|
328
|
+
---
|
|
329
|
+
|
|
330
|
+
## Vaults
|
|
331
|
+
|
|
332
|
+
```java
|
|
333
|
+
import com.anthropic.core.JsonValue;
|
|
334
|
+
import com.anthropic.models.beta.vaults.VaultCreateParams;
|
|
335
|
+
import com.anthropic.models.beta.vaults.credentials.BetaManagedAgentsMcpOAuthCreateParams;
|
|
336
|
+
import com.anthropic.models.beta.vaults.credentials.BetaManagedAgentsMcpOAuthRefreshParams;
|
|
337
|
+
import com.anthropic.models.beta.vaults.credentials.BetaManagedAgentsMcpOAuthRefreshUpdateParams;
|
|
338
|
+
import com.anthropic.models.beta.vaults.credentials.BetaManagedAgentsMcpOAuthUpdateParams;
|
|
339
|
+
import com.anthropic.models.beta.vaults.credentials.CredentialCreateParams;
|
|
340
|
+
import com.anthropic.models.beta.vaults.credentials.CredentialUpdateParams;
|
|
341
|
+
import java.time.OffsetDateTime;
|
|
342
|
+
|
|
343
|
+
// Create a vault
|
|
344
|
+
var vault = client.beta().vaults().create(VaultCreateParams.builder()
|
|
345
|
+
.displayName("Alice")
|
|
346
|
+
.metadata(VaultCreateParams.Metadata.builder()
|
|
347
|
+
.putAdditionalProperty("external_user_id", JsonValue.from("usr_abc123"))
|
|
348
|
+
.build())
|
|
349
|
+
.build());
|
|
350
|
+
System.out.println(vault.id()); // "vlt_01ABC..."
|
|
351
|
+
|
|
352
|
+
// Add an OAuth credential
|
|
353
|
+
var credential = client.beta().vaults().credentials().create(vault.id(),
|
|
354
|
+
CredentialCreateParams.builder()
|
|
355
|
+
.displayName("Alice's Slack")
|
|
356
|
+
.auth(BetaManagedAgentsMcpOAuthCreateParams.builder()
|
|
357
|
+
.type(BetaManagedAgentsMcpOAuthCreateParams.Type.MCP_OAUTH)
|
|
358
|
+
.mcpServerUrl("https://mcp.slack.com/mcp")
|
|
359
|
+
.accessToken("xoxp-...")
|
|
360
|
+
.expiresAt(OffsetDateTime.parse("2026-04-15T00:00:00Z"))
|
|
361
|
+
.refresh(BetaManagedAgentsMcpOAuthRefreshParams.builder()
|
|
362
|
+
.tokenEndpoint("https://slack.com/api/oauth.v2.access")
|
|
363
|
+
.clientId("1234567890.0987654321")
|
|
364
|
+
.scope("channels:read chat:write")
|
|
365
|
+
.refreshToken("xoxe-1-...")
|
|
366
|
+
.clientSecretPostTokenEndpointAuth("abc123...")
|
|
367
|
+
.build())
|
|
368
|
+
.build())
|
|
369
|
+
.build());
|
|
370
|
+
|
|
371
|
+
// Rotate the credential (e.g., after a token refresh)
|
|
372
|
+
client.beta().vaults().credentials().update(credential.id(),
|
|
373
|
+
CredentialUpdateParams.builder()
|
|
374
|
+
.vaultId(vault.id())
|
|
375
|
+
.auth(BetaManagedAgentsMcpOAuthUpdateParams.builder()
|
|
376
|
+
.type(BetaManagedAgentsMcpOAuthUpdateParams.Type.MCP_OAUTH)
|
|
377
|
+
.accessToken("xoxp-new-...")
|
|
378
|
+
.expiresAt(OffsetDateTime.parse("2026-05-15T00:00:00Z"))
|
|
379
|
+
.refresh(BetaManagedAgentsMcpOAuthRefreshUpdateParams.builder()
|
|
380
|
+
.refreshToken("xoxe-1-new-...")
|
|
381
|
+
.build())
|
|
382
|
+
.build())
|
|
383
|
+
.build());
|
|
384
|
+
|
|
385
|
+
// Archive a vault
|
|
386
|
+
client.beta().vaults().archive(vault.id());
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
---
|
|
390
|
+
|
|
391
|
+
## GitHub Repository Integration
|
|
392
|
+
|
|
393
|
+
Mount a GitHub repository as a session resource (a vault holds the GitHub MCP credential):
|
|
394
|
+
|
|
395
|
+
```java
|
|
396
|
+
import com.anthropic.models.beta.sessions.BetaManagedAgentsGitHubRepositoryResourceParams;
|
|
397
|
+
|
|
398
|
+
var session = client.beta().sessions().create(SessionCreateParams.builder()
|
|
399
|
+
.agent(agent.id())
|
|
400
|
+
.environmentId(environment.id())
|
|
401
|
+
.addVaultId(vault.id())
|
|
402
|
+
.addResource(BetaManagedAgentsGitHubRepositoryResourceParams.builder()
|
|
403
|
+
.type(BetaManagedAgentsGitHubRepositoryResourceParams.Type.GITHUB_REPOSITORY)
|
|
404
|
+
.url("https://github.com/org/repo")
|
|
405
|
+
.mountPath("/workspace/repo")
|
|
406
|
+
.authorizationToken("ghp_your_github_token")
|
|
407
|
+
.build())
|
|
408
|
+
.build());
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
Multiple repositories on the same session:
|
|
412
|
+
|
|
413
|
+
```java
|
|
414
|
+
import java.util.List;
|
|
415
|
+
|
|
416
|
+
var resources = List.of(
|
|
417
|
+
BetaManagedAgentsGitHubRepositoryResourceParams.builder()
|
|
418
|
+
.type(BetaManagedAgentsGitHubRepositoryResourceParams.Type.GITHUB_REPOSITORY)
|
|
419
|
+
.url("https://github.com/org/frontend")
|
|
420
|
+
.mountPath("/workspace/frontend")
|
|
421
|
+
.authorizationToken("ghp_your_github_token")
|
|
422
|
+
.build(),
|
|
423
|
+
BetaManagedAgentsGitHubRepositoryResourceParams.builder()
|
|
424
|
+
.type(BetaManagedAgentsGitHubRepositoryResourceParams.Type.GITHUB_REPOSITORY)
|
|
425
|
+
.url("https://github.com/org/backend")
|
|
426
|
+
.mountPath("/workspace/backend")
|
|
427
|
+
.authorizationToken("ghp_your_github_token")
|
|
428
|
+
.build());
|
|
429
|
+
```
|
|
430
|
+
|
|
431
|
+
Rotating a repository's authorization token:
|
|
432
|
+
|
|
433
|
+
```java
|
|
434
|
+
import com.anthropic.models.beta.sessions.resources.ResourceUpdateParams;
|
|
435
|
+
|
|
436
|
+
var listed = client.beta().sessions().resources().list(session.id());
|
|
437
|
+
var repoResourceId = listed.data().get(0).asGitHubRepository().id();
|
|
438
|
+
|
|
439
|
+
client.beta().sessions().resources().update(repoResourceId, ResourceUpdateParams.builder()
|
|
440
|
+
.sessionId(session.id())
|
|
441
|
+
.authorizationToken("ghp_your_new_github_token")
|
|
442
|
+
.build());
|
|
443
|
+
```
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
# Claude API — PHP
|
|
2
|
+
|
|
3
|
+
> **Note:** The PHP SDK is the official Anthropic SDK for PHP. A beta tool runner is available via `$client->beta->messages->toolRunner()`. Structured output helpers are supported via `StructuredOutputModel` classes. Agent SDK is not available. Bedrock, Vertex AI, and Foundry clients are supported.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
composer require "anthropic-ai/sdk"
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Client Initialization
|
|
12
|
+
|
|
13
|
+
```php
|
|
14
|
+
use Anthropic\Client;
|
|
15
|
+
|
|
16
|
+
// Using API key from environment variable
|
|
17
|
+
$client = new Client(apiKey: getenv("ANTHROPIC_API_KEY"));
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
### Amazon Bedrock
|
|
21
|
+
|
|
22
|
+
```php
|
|
23
|
+
use Anthropic\Bedrock\MantleClient;
|
|
24
|
+
|
|
25
|
+
// Messages-API Bedrock endpoint. Reads AWS credentials from env.
|
|
26
|
+
$client = new MantleClient(awsRegion: 'us-east-1');
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Model IDs on Bedrock take an `anthropic.` prefix — e.g. `model: 'anthropic.claude-opus-4-8'`.
|
|
30
|
+
|
|
31
|
+
### Google Vertex AI
|
|
32
|
+
|
|
33
|
+
```php
|
|
34
|
+
use Anthropic\Vertex;
|
|
35
|
+
|
|
36
|
+
// Constructor is private. Parameter is `location`, not `region`.
|
|
37
|
+
$client = Vertex\Client::fromEnvironment(
|
|
38
|
+
location: 'us-east5',
|
|
39
|
+
projectId: 'my-project-id',
|
|
40
|
+
);
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### Anthropic Foundry
|
|
44
|
+
|
|
45
|
+
```php
|
|
46
|
+
use Anthropic\Foundry;
|
|
47
|
+
|
|
48
|
+
// Constructor is private. baseUrl or resource is required.
|
|
49
|
+
$client = Foundry\Client::withCredentials(
|
|
50
|
+
apiKey: getenv('ANTHROPIC_FOUNDRY_API_KEY'),
|
|
51
|
+
baseUrl: 'https://<resource>.services.ai.azure.com/anthropic/v1',
|
|
52
|
+
);
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## Basic Message Request
|
|
58
|
+
|
|
59
|
+
```php
|
|
60
|
+
$message = $client->messages->create(
|
|
61
|
+
model: 'claude-opus-4-8',
|
|
62
|
+
maxTokens: 16000,
|
|
63
|
+
messages: [
|
|
64
|
+
['role' => 'user', 'content' => 'What is the capital of France?'],
|
|
65
|
+
],
|
|
66
|
+
);
|
|
67
|
+
|
|
68
|
+
// content is an array of polymorphic blocks (TextBlock, ToolUseBlock,
|
|
69
|
+
// ThinkingBlock). Accessing ->text on content[0] without checking the block
|
|
70
|
+
// type will throw if the first block is not a TextBlock (e.g., when extended
|
|
71
|
+
// thinking is enabled and a ThinkingBlock comes first). Always guard:
|
|
72
|
+
foreach ($message->content as $block) {
|
|
73
|
+
if ($block->type === 'text') {
|
|
74
|
+
echo $block->text;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
If you only want the first text block:
|
|
80
|
+
|
|
81
|
+
```php
|
|
82
|
+
foreach ($message->content as $block) {
|
|
83
|
+
if ($block->type === 'text') {
|
|
84
|
+
echo $block->text;
|
|
85
|
+
break;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## Extended Thinking
|
|
93
|
+
|
|
94
|
+
**Adaptive thinking is the recommended mode for Claude 4.6+ models.** Claude decides dynamically when and how much to think.
|
|
95
|
+
|
|
96
|
+
```php
|
|
97
|
+
use Anthropic\Messages\ThinkingBlock;
|
|
98
|
+
|
|
99
|
+
$message = $client->messages->create(
|
|
100
|
+
model: 'claude-opus-4-8',
|
|
101
|
+
maxTokens: 16000,
|
|
102
|
+
thinking: ['type' => 'adaptive', 'display' => 'summarized'], // display opt-in: default is omitted (empty thinking text) on Fable 5 / Mythos 5 / Opus 4.8 / 4.7
|
|
103
|
+
messages: [
|
|
104
|
+
['role' => 'user', 'content' => 'Solve: 27 * 453'],
|
|
105
|
+
],
|
|
106
|
+
);
|
|
107
|
+
|
|
108
|
+
// ThinkingBlock(s) precede TextBlock in content
|
|
109
|
+
foreach ($message->content as $block) {
|
|
110
|
+
if ($block instanceof ThinkingBlock) {
|
|
111
|
+
echo "Thinking:\n{$block->thinking}\n\n";
|
|
112
|
+
// $block->signature is an opaque string — preserve verbatim if
|
|
113
|
+
// passing thinking blocks back in multi-turn conversations
|
|
114
|
+
} elseif ($block->type === 'text') {
|
|
115
|
+
echo "Answer: {$block->text}\n";
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
> **Fable 5, Opus 4.8, Opus 4.7, Opus 4.6, and Sonnet 4.6:** Use adaptive thinking (above). `['type' => 'enabled', 'budgetTokens' => N]` is removed on Fable 5, Opus 4.8, and 4.7 (400 if sent); deprecated on Opus 4.6 and Sonnet 4.6.
|
|
121
|
+
> **Older models:** Use `thinking: ['type' => 'enabled', 'budgetTokens' => N]` (budget must be < `maxTokens`, min 1024).
|
|
122
|
+
|
|
123
|
+
`$block->type === 'thinking'` also works for the check; `instanceof` narrows for PHPStan.
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## Prompt Caching
|
|
128
|
+
|
|
129
|
+
`system:` takes an array of text blocks; set `cacheControl` on the last block. Array-shape syntax (camelCase keys) is idiomatic. For placement patterns and the silent-invalidator audit checklist, see `shared/prompt-caching.md`.
|
|
130
|
+
|
|
131
|
+
```php
|
|
132
|
+
$message = $client->messages->create(
|
|
133
|
+
model: 'claude-opus-4-8',
|
|
134
|
+
maxTokens: 16000,
|
|
135
|
+
system: [
|
|
136
|
+
['type' => 'text', 'text' => $longSystemPrompt, 'cacheControl' => ['type' => 'ephemeral']],
|
|
137
|
+
],
|
|
138
|
+
messages: [['role' => 'user', 'content' => 'Summarize the key points']],
|
|
139
|
+
);
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
For 1-hour TTL: `'cacheControl' => ['type' => 'ephemeral', 'ttl' => '1h']`. There's also a top-level `cacheControl:` on `messages->create(...)` that auto-places on the last cacheable block.
|
|
143
|
+
|
|
144
|
+
Verify hits via `$message->usage->cacheCreationInputTokens` / `$message->usage->cacheReadInputTokens`.
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
## Stop Details
|
|
149
|
+
|
|
150
|
+
When `stopReason` is `'refusal'`, the response includes structured `stopDetails`:
|
|
151
|
+
|
|
152
|
+
```php
|
|
153
|
+
if ($message->stopReason === 'refusal' && $message->stopDetails !== null) {
|
|
154
|
+
echo "Category: " . $message->stopDetails->category . "\n"; // e.g. "cyber", "bio", "reasoning_extraction", "frontier_llm", or null — see docs for the full set
|
|
155
|
+
echo "Explanation: " . $message->stopDetails->explanation . "\n";
|
|
156
|
+
}
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
**Refusal fallbacks (Claude Fable 5) — opt in by default.** Fallbacks are opt-in: without them a refused request simply stops. New `claude-fable-5` code should include the server-side `fallbacks` parameter (beta header `server-side-fallback-2026-06-01`, fallback model `claude-opus-4-8`, on the beta messages call) by default. The exact PHP binding (and the client-side middleware for providers without server-side support) is not documented here — WebFetch the PHP SDK repo's `examples/` from `shared/live-sources.md`; full semantics in `shared/model-migration.md` → Migrating to Claude Fable 5 → `refusal` stop reason.
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## Error Type
|
|
164
|
+
|
|
165
|
+
`APIStatusException` exposes a `->type` property for programmatic error classification:
|
|
166
|
+
|
|
167
|
+
```php
|
|
168
|
+
try {
|
|
169
|
+
$client->messages->create(...);
|
|
170
|
+
} catch (\Anthropic\Core\Exceptions\APIStatusException $e) {
|
|
171
|
+
echo $e->type?->value; // "rate_limit_error", "overloaded_error", etc.
|
|
172
|
+
}
|
|
173
|
+
```
|