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,404 @@
|
|
|
1
|
+
# Claude API — TypeScript
|
|
2
|
+
|
|
3
|
+
| Feature | Namespace | Key types / call |
|
|
4
|
+
|---|---|---|
|
|
5
|
+
| User profiles | beta | `client.beta.userProfiles.create(...)` / `.retrieve(id)` / `.list()`. Pass the returned profile id on `client.beta.messages.create`. Requires a beta header — check the SDK's beta-headers reference for the current flag. |
|
|
6
|
+
|
|
7
|
+
## Installation
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install @anthropic-ai/sdk
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
> **Reading local files (ESM):** `__dirname` and `__filename` are **undefined** in ES modules — using either throws `ReferenceError: __dirname is not defined` at runtime. For cwd-relative reads, pass the bare relative path (`fs.readFileSync("./sample.png")`). For script-relative paths, derive the directory from `import.meta.url`: `const here = path.dirname(fileURLToPath(import.meta.url))`. Never write `path.join(__dirname, …)` in an ESM `.ts` file.
|
|
14
|
+
|
|
15
|
+
## Client Initialization
|
|
16
|
+
|
|
17
|
+
```typescript
|
|
18
|
+
import Anthropic from "@anthropic-ai/sdk";
|
|
19
|
+
|
|
20
|
+
// Default — resolves credentials from the environment:
|
|
21
|
+
// ANTHROPIC_API_KEY, or ANTHROPIC_AUTH_TOKEN, or an `ant auth login` profile.
|
|
22
|
+
// Prefer this for local dev; don't hardcode a key.
|
|
23
|
+
const client = new Anthropic();
|
|
24
|
+
|
|
25
|
+
// Explicit API key (only when you must inject a specific key)
|
|
26
|
+
const client = new Anthropic({ apiKey: "your-api-key" });
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Basic Message Request
|
|
32
|
+
|
|
33
|
+
```typescript
|
|
34
|
+
const response = await client.messages.create({
|
|
35
|
+
model: "claude-opus-4-8",
|
|
36
|
+
max_tokens: 16000,
|
|
37
|
+
messages: [{ role: "user", content: "What is the capital of France?" }],
|
|
38
|
+
});
|
|
39
|
+
// response.content is ContentBlock[] — a discriminated union. Narrow by .type
|
|
40
|
+
// before accessing .text (TypeScript will error on content[0].text without this).
|
|
41
|
+
for (const block of response.content) {
|
|
42
|
+
if (block.type === "text") {
|
|
43
|
+
console.log(block.text);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## System Prompts
|
|
51
|
+
|
|
52
|
+
```typescript
|
|
53
|
+
const response = await client.messages.create({
|
|
54
|
+
model: "claude-opus-4-8",
|
|
55
|
+
max_tokens: 16000,
|
|
56
|
+
system:
|
|
57
|
+
"You are a helpful coding assistant. Always provide examples in Python.",
|
|
58
|
+
messages: [{ role: "user", content: "How do I read a JSON file?" }],
|
|
59
|
+
});
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Mid-conversation system messages (model-gated)
|
|
63
|
+
|
|
64
|
+
For operator instructions that arrive mid-conversation (mode switches, injected state), append `{role: "system", ...}` to `messages` instead of editing top-level `system` — this preserves the cached prefix and carries operator authority. Must follow a user message (or an `assistant` message ending in server-tool use), and must be either the last entry in `messages` or be followed by an `assistant` turn; cannot be `messages[0]`. Unsupported models return a 400 (`role 'system' is not supported on this model`). See `shared/prompt-caching.md` for when to use this vs. top-level `system`.
|
|
65
|
+
|
|
66
|
+
```typescript
|
|
67
|
+
// No beta header needed — use regular client.messages.create.
|
|
68
|
+
const response = await client.messages.create({
|
|
69
|
+
model: MODEL_ID, // must support mid-conversation system messages
|
|
70
|
+
max_tokens: 16000,
|
|
71
|
+
system: [
|
|
72
|
+
{ type: "text", text: STABLE_SYSTEM, cache_control: { type: "ephemeral" } },
|
|
73
|
+
],
|
|
74
|
+
messages: [
|
|
75
|
+
...history,
|
|
76
|
+
{ role: "user", content: userMessage },
|
|
77
|
+
{ role: "system", content: "Terse mode enabled — keep responses under 40 words." },
|
|
78
|
+
],
|
|
79
|
+
});
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## Vision (Images)
|
|
85
|
+
|
|
86
|
+
### URL
|
|
87
|
+
|
|
88
|
+
```typescript
|
|
89
|
+
const response = await client.messages.create({
|
|
90
|
+
model: "claude-opus-4-8",
|
|
91
|
+
max_tokens: 16000,
|
|
92
|
+
messages: [
|
|
93
|
+
{
|
|
94
|
+
role: "user",
|
|
95
|
+
content: [
|
|
96
|
+
{
|
|
97
|
+
type: "image",
|
|
98
|
+
source: { type: "url", url: "https://example.com/image.png" },
|
|
99
|
+
},
|
|
100
|
+
{ type: "text", text: "Describe this image" },
|
|
101
|
+
],
|
|
102
|
+
},
|
|
103
|
+
],
|
|
104
|
+
});
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### Base64
|
|
108
|
+
|
|
109
|
+
```typescript
|
|
110
|
+
import fs from "fs";
|
|
111
|
+
|
|
112
|
+
const imageData = fs.readFileSync("image.png").toString("base64");
|
|
113
|
+
|
|
114
|
+
const response = await client.messages.create({
|
|
115
|
+
model: "claude-opus-4-8",
|
|
116
|
+
max_tokens: 16000,
|
|
117
|
+
messages: [
|
|
118
|
+
{
|
|
119
|
+
role: "user",
|
|
120
|
+
content: [
|
|
121
|
+
{
|
|
122
|
+
type: "image",
|
|
123
|
+
source: { type: "base64", media_type: "image/png", data: imageData },
|
|
124
|
+
},
|
|
125
|
+
{ type: "text", text: "What's in this image?" },
|
|
126
|
+
],
|
|
127
|
+
},
|
|
128
|
+
],
|
|
129
|
+
});
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## Prompt Caching
|
|
135
|
+
|
|
136
|
+
**Caching is a prefix match** — any byte change anywhere in the prefix invalidates everything after it. For placement patterns, architectural guidance (frozen system prompt, deterministic tool order, where to put volatile content), and the silent-invalidator audit checklist, read `shared/prompt-caching.md`.
|
|
137
|
+
|
|
138
|
+
### Automatic Caching (Recommended)
|
|
139
|
+
|
|
140
|
+
Use top-level `cache_control` to automatically cache the last cacheable block in the request:
|
|
141
|
+
|
|
142
|
+
```typescript
|
|
143
|
+
const response = await client.messages.create({
|
|
144
|
+
model: "claude-opus-4-8",
|
|
145
|
+
max_tokens: 16000,
|
|
146
|
+
cache_control: { type: "ephemeral" }, // auto-caches the last cacheable block
|
|
147
|
+
system: "You are an expert on this large document...",
|
|
148
|
+
messages: [{ role: "user", content: "Summarize the key points" }],
|
|
149
|
+
});
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
### Manual Cache Control
|
|
153
|
+
|
|
154
|
+
For fine-grained control, add `cache_control` to specific content blocks:
|
|
155
|
+
|
|
156
|
+
```typescript
|
|
157
|
+
const response = await client.messages.create({
|
|
158
|
+
model: "claude-opus-4-8",
|
|
159
|
+
max_tokens: 16000,
|
|
160
|
+
system: [
|
|
161
|
+
{
|
|
162
|
+
type: "text",
|
|
163
|
+
text: "You are an expert on this large document...",
|
|
164
|
+
cache_control: { type: "ephemeral" }, // default TTL is 5 minutes
|
|
165
|
+
},
|
|
166
|
+
],
|
|
167
|
+
messages: [{ role: "user", content: "Summarize the key points" }],
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
// With explicit TTL (time-to-live)
|
|
171
|
+
const response2 = await client.messages.create({
|
|
172
|
+
model: "claude-opus-4-8",
|
|
173
|
+
max_tokens: 16000,
|
|
174
|
+
system: [
|
|
175
|
+
{
|
|
176
|
+
type: "text",
|
|
177
|
+
text: "You are an expert on this large document...",
|
|
178
|
+
cache_control: { type: "ephemeral", ttl: "1h" }, // 1 hour TTL
|
|
179
|
+
},
|
|
180
|
+
],
|
|
181
|
+
messages: [{ role: "user", content: "Summarize the key points" }],
|
|
182
|
+
});
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
### Verifying Cache Hits
|
|
186
|
+
|
|
187
|
+
```typescript
|
|
188
|
+
console.log(response.usage.cache_creation_input_tokens); // tokens written to cache (~1.25x cost)
|
|
189
|
+
console.log(response.usage.cache_read_input_tokens); // tokens served from cache (~0.1x cost)
|
|
190
|
+
console.log(response.usage.input_tokens); // uncached tokens (full cost)
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
If `cache_read_input_tokens` is zero across repeated identical-prefix requests, a silent invalidator is at work — `Date.now()` or a UUID in the system prompt, non-deterministic key ordering, or a varying tool set. See `shared/prompt-caching.md` for the full audit table.
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## Extended Thinking
|
|
198
|
+
|
|
199
|
+
> **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.
|
|
200
|
+
> **Older models:** Use `thinking: {type: "enabled", budget_tokens: N}` (must be < `max_tokens`, min 1024).
|
|
201
|
+
|
|
202
|
+
```typescript
|
|
203
|
+
// Fable 5 / Opus 4.8 / 4.7 / 4.6: adaptive thinking (recommended)
|
|
204
|
+
const response = await client.messages.create({
|
|
205
|
+
model: "claude-opus-4-8",
|
|
206
|
+
max_tokens: 16000,
|
|
207
|
+
thinking: { type: "adaptive", display: "summarized" }, // display opt-in: default is omitted (empty thinking text) on Fable 5 / Mythos 5 / Opus 4.8 / 4.7
|
|
208
|
+
output_config: { effort: "high" }, // low | medium | high | max
|
|
209
|
+
messages: [
|
|
210
|
+
{ role: "user", content: "Solve this math problem step by step..." },
|
|
211
|
+
],
|
|
212
|
+
});
|
|
213
|
+
|
|
214
|
+
for (const block of response.content) {
|
|
215
|
+
if (block.type === "thinking") {
|
|
216
|
+
console.log("Thinking:", block.thinking);
|
|
217
|
+
} else if (block.type === "text") {
|
|
218
|
+
console.log("Response:", block.text);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
---
|
|
224
|
+
|
|
225
|
+
## Error Handling
|
|
226
|
+
|
|
227
|
+
Use the SDK's typed exception classes — never check error messages with string matching:
|
|
228
|
+
|
|
229
|
+
```typescript
|
|
230
|
+
import Anthropic from "@anthropic-ai/sdk";
|
|
231
|
+
|
|
232
|
+
try {
|
|
233
|
+
const response = await client.messages.create({...});
|
|
234
|
+
} catch (error) {
|
|
235
|
+
if (error instanceof Anthropic.BadRequestError) {
|
|
236
|
+
console.error("Bad request:", error.message);
|
|
237
|
+
} else if (error instanceof Anthropic.AuthenticationError) {
|
|
238
|
+
console.error("Invalid API key");
|
|
239
|
+
} else if (error instanceof Anthropic.RateLimitError) {
|
|
240
|
+
console.error("Rate limited - retry later");
|
|
241
|
+
} else if (error instanceof Anthropic.APIError) {
|
|
242
|
+
console.error(`API error ${error.status}:`, error.message);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
All classes extend `Anthropic.APIError` with a typed `status` field. Check from most specific to least specific. See [shared/error-codes.md](../../shared/error-codes.md) for the full error code reference.
|
|
248
|
+
|
|
249
|
+
---
|
|
250
|
+
|
|
251
|
+
## Multi-Turn Conversations
|
|
252
|
+
|
|
253
|
+
The API is stateless — send the full conversation history each time. Use `Anthropic.MessageParam[]` to type the messages array:
|
|
254
|
+
|
|
255
|
+
```typescript
|
|
256
|
+
const messages: Anthropic.MessageParam[] = [
|
|
257
|
+
{ role: "user", content: "My name is Alice." },
|
|
258
|
+
{ role: "assistant", content: "Hello Alice! Nice to meet you." },
|
|
259
|
+
{ role: "user", content: "What's my name?" },
|
|
260
|
+
];
|
|
261
|
+
|
|
262
|
+
const response = await client.messages.create({
|
|
263
|
+
model: "claude-opus-4-8",
|
|
264
|
+
max_tokens: 16000,
|
|
265
|
+
messages: messages,
|
|
266
|
+
});
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
**Rules:**
|
|
270
|
+
|
|
271
|
+
- Consecutive same-role messages are allowed — the API combines them into a single turn
|
|
272
|
+
- First message must be `user`
|
|
273
|
+
- Use SDK types (`Anthropic.MessageParam`, `Anthropic.Message`, `Anthropic.Tool`, etc.) for all API data structures — don't redefine equivalent interfaces
|
|
274
|
+
|
|
275
|
+
---
|
|
276
|
+
|
|
277
|
+
### Compaction (long conversations)
|
|
278
|
+
|
|
279
|
+
> **Beta, Fable 5, Opus 4.8, Opus 4.7, Opus 4.6, and Sonnet 4.6.** When conversations approach the 200K context window, compaction automatically summarizes earlier context server-side. The API returns a `compaction` block; you must pass it back on subsequent requests — append `response.content`, not just the text.
|
|
280
|
+
|
|
281
|
+
```typescript
|
|
282
|
+
import Anthropic from "@anthropic-ai/sdk";
|
|
283
|
+
|
|
284
|
+
const client = new Anthropic();
|
|
285
|
+
const messages: Anthropic.Beta.BetaMessageParam[] = [];
|
|
286
|
+
|
|
287
|
+
async function chat(userMessage: string): Promise<string> {
|
|
288
|
+
messages.push({ role: "user", content: userMessage });
|
|
289
|
+
|
|
290
|
+
const response = await client.beta.messages.create({
|
|
291
|
+
betas: ["compact-2026-01-12"],
|
|
292
|
+
model: "claude-opus-4-8",
|
|
293
|
+
max_tokens: 16000,
|
|
294
|
+
messages,
|
|
295
|
+
context_management: {
|
|
296
|
+
edits: [{ type: "compact_20260112" }],
|
|
297
|
+
},
|
|
298
|
+
});
|
|
299
|
+
|
|
300
|
+
// Append full content — compaction blocks must be preserved
|
|
301
|
+
messages.push({ role: "assistant", content: response.content });
|
|
302
|
+
|
|
303
|
+
const textBlock = response.content.find(
|
|
304
|
+
(b): b is Anthropic.Beta.BetaTextBlock => b.type === "text",
|
|
305
|
+
);
|
|
306
|
+
return textBlock?.text ?? "";
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
// Compaction triggers automatically when context grows large
|
|
310
|
+
console.log(await chat("Help me build a Python web scraper"));
|
|
311
|
+
console.log(await chat("Add support for JavaScript-rendered pages"));
|
|
312
|
+
console.log(await chat("Now add rate limiting and error handling"));
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
---
|
|
316
|
+
|
|
317
|
+
## Stop Reasons
|
|
318
|
+
|
|
319
|
+
The `stop_reason` field in the response indicates why the model stopped generating:
|
|
320
|
+
|
|
321
|
+
| Value | Meaning |
|
|
322
|
+
| --------------- | --------------------------------------------------------------- |
|
|
323
|
+
| `end_turn` | Claude finished its response naturally |
|
|
324
|
+
| `max_tokens` | Hit the `max_tokens` limit — increase it or use streaming |
|
|
325
|
+
| `stop_sequence` | Hit a custom stop sequence |
|
|
326
|
+
| `tool_use` | Claude wants to call a tool — execute it and continue |
|
|
327
|
+
| `pause_turn` | Model paused and can be resumed (agentic flows) |
|
|
328
|
+
| `refusal` | Claude refused for safety reasons — check `stop_details` |
|
|
329
|
+
|
|
330
|
+
### Structured Stop Details
|
|
331
|
+
|
|
332
|
+
When `stop_reason` is `"refusal"`, the response includes a `stop_details` object with structured information about the refusal:
|
|
333
|
+
|
|
334
|
+
```typescript
|
|
335
|
+
if (response.stop_reason === "refusal" && response.stop_details) {
|
|
336
|
+
console.log(`Category: ${response.stop_details.category}`); // e.g. "cyber", "bio", "reasoning_extraction", "frontier_llm", or null — see docs for the full set
|
|
337
|
+
console.log(`Explanation: ${response.stop_details.explanation}`);
|
|
338
|
+
}
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
### Refusal Fallbacks (Claude Fable 5) — opt in by default
|
|
342
|
+
|
|
343
|
+
Fallbacks are **opt-in**: without them a refused request simply stops. Include the server-side `fallbacks` parameter in `claude-fable-5` code 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, with cache repricing applied automatically.
|
|
344
|
+
|
|
345
|
+
```typescript
|
|
346
|
+
const response = await client.beta.messages.create({
|
|
347
|
+
model: "claude-fable-5",
|
|
348
|
+
max_tokens: 16000,
|
|
349
|
+
betas: ["server-side-fallback-2026-06-01"],
|
|
350
|
+
fallbacks: [{ model: "claude-opus-4-8" }],
|
|
351
|
+
messages: [{ role: "user", content: "..." }],
|
|
352
|
+
});
|
|
353
|
+
|
|
354
|
+
// Switch points: one fallback block per model that ran and declined this turn
|
|
355
|
+
for (const block of response.content) {
|
|
356
|
+
if (block.type === "fallback") {
|
|
357
|
+
console.log(`${block.from.model} declined; ${block.to.model} continued`);
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
// Served-by signal — covers sticky turns, which carry no fallback block.
|
|
362
|
+
// Pair with stop_reason: the fallback model can itself refuse.
|
|
363
|
+
const fallbackRan = (response.usage.iterations ?? []).some(
|
|
364
|
+
(entry) => entry.type === "fallback_message",
|
|
365
|
+
);
|
|
366
|
+
if (fallbackRan && response.stop_reason !== "refusal") {
|
|
367
|
+
console.log(`Served by ${response.model}`);
|
|
368
|
+
}
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
A `stop_reason: "refusal"` on the final response means the whole chain refused. 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 — register the client-side `betaRefusalFallbackMiddleware` on the client there instead. Full semantics (sticky routing, billing, streaming, echoing fallback turns back): `shared/model-migration.md` → Migrating to Claude Fable 5 → `refusal` stop reason.
|
|
372
|
+
|
|
373
|
+
---
|
|
374
|
+
|
|
375
|
+
## Cost Optimization Strategies
|
|
376
|
+
|
|
377
|
+
### 1. Use Prompt Caching for Repeated Context
|
|
378
|
+
|
|
379
|
+
```typescript
|
|
380
|
+
// Automatic caching (simplest — caches the last cacheable block)
|
|
381
|
+
const response = await client.messages.create({
|
|
382
|
+
model: "claude-opus-4-8",
|
|
383
|
+
max_tokens: 16000,
|
|
384
|
+
cache_control: { type: "ephemeral" },
|
|
385
|
+
system: largeDocumentText, // e.g., 50KB of context
|
|
386
|
+
messages: [{ role: "user", content: "Summarize the key points" }],
|
|
387
|
+
});
|
|
388
|
+
|
|
389
|
+
// First request: full cost
|
|
390
|
+
// Subsequent requests: ~90% cheaper for cached portion
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
### 2. Use Token Counting Before Requests
|
|
394
|
+
|
|
395
|
+
```typescript
|
|
396
|
+
const countResponse = await client.messages.countTokens({
|
|
397
|
+
model: "claude-opus-4-8",
|
|
398
|
+
messages: messages,
|
|
399
|
+
system: system,
|
|
400
|
+
});
|
|
401
|
+
|
|
402
|
+
const estimatedInputCost = countResponse.input_tokens * 0.000005; // $5/1M tokens
|
|
403
|
+
console.log(`Estimated input cost: $${estimatedInputCost.toFixed(4)}`);
|
|
404
|
+
```
|