@elizaos/plugin-anthropic
Anthropic Claude model provider for elizaOS. Adds Claude text generation, streaming, image description, and structured JSON output to any Eliza agent.
What it does
This plugin registers Claude model handlers into the elizaOS model dispatch layer. Once loaded, calls to runtime.useModel() for any text, reasoning, or image-description model type are routed to the Anthropic API (or Claude Code CLI, or OAuth subscription, depending on your auth mode).
Capabilities added:
- Text generation — all ModelType tiers:
TEXT_NANO,TEXT_SMALL,TEXT_MEDIUM,TEXT_LARGE,TEXT_MEGA,RESPONSE_HANDLER,ACTION_PLANNER - Reasoning —
TEXT_REASONING_SMALLandTEXT_REASONING_LARGEwith configurable chain-of-thought token budget - Image description —
IMAGE_DESCRIPTIONreturns{ title, description }from an image URL - Streaming — all text handlers support
stream: true, returning an asyncTextStreamResult - Structured output — pass
responseSchema(JSON Schema) to any text handler to receive parsed JSON - Tool calling — pass
tools,toolChoiceto any text handler for native Anthropic tool use - Prompt caching —
cache_control: ephemeralapplied automatically to system prompts and stable prompt segments
Auto-enable
The plugin is automatically enabled when ANTHROPIC_API_KEY or CLAUDE_API_KEY is present in the environment. No manual plugin registration is needed in that case.
To register manually:
import { anthropicPlugin } from "@elizaos/plugin-anthropic";
import { AgentRuntime } from "@elizaos/core";
const runtime = new AgentRuntime({
plugins: [anthropicPlugin],
// ...
});
Usage
import { ModelType } from "@elizaos/core";
// Text generation
const text = await runtime.useModel(ModelType.TEXT_LARGE, {
prompt: "Explain quantum computing in simple terms",
});
// Streaming
const result = await runtime.useModel(ModelType.TEXT_LARGE, {
prompt: "Count from 1 to 5.",
stream: true,
onStreamChunk: (chunk) => process.stdout.write(chunk),
});
// Structured output
const obj = await runtime.useModel(ModelType.TEXT_SMALL, {
prompt: "Return a JSON object with a greeting field.",
responseSchema: {
type: "object",
properties: { greeting: { type: "string" } },
required: ["greeting"],
},
});
// Image description
const { title, description } = await runtime.useModel(ModelType.IMAGE_DESCRIPTION, {
imageUrl: "https://example.com/photo.jpg",
});
Configuration
| Env var | Required | Default | Description |
|---|---|---|---|
ANTHROPIC_API_KEY |
Yes* | — | Anthropic API key (sk-ant-...) |
CLAUDE_API_KEY |
Alt | — | Alias accepted alongside ANTHROPIC_API_KEY |
ANTHROPIC_AUTH_MODE |
No | apikey |
Auth mode: apikey, oauth, or claude-cli |
ANTHROPIC_SMALL_MODEL |
No | claude-haiku-4-5-20251001 |
Model for small-tier calls |
ANTHROPIC_LARGE_MODEL |
No | claude-opus-4-7 |
Model for large-tier calls |
ANTHROPIC_NANO_MODEL |
No | (small fallback) | Model for TEXT_NANO |
ANTHROPIC_MEDIUM_MODEL |
No | (small fallback) | Model for TEXT_MEDIUM |
ANTHROPIC_MEGA_MODEL |
No | (large fallback) | Model for TEXT_MEGA |
ANTHROPIC_REASONING_SMALL_MODEL |
No | (small fallback) | Model for TEXT_REASONING_SMALL |
ANTHROPIC_REASONING_LARGE_MODEL |
No | (large fallback) | Model for TEXT_REASONING_LARGE |
ANTHROPIC_BASE_URL |
No | https://api.anthropic.com/v1 |
API base URL override |
ANTHROPIC_BROWSER_BASE_URL |
No | — | Proxy URL for browser builds |
ANTHROPIC_COT_BUDGET |
No | 0 |
Chain-of-thought token budget (0 = disabled) |
ANTHROPIC_COT_BUDGET_SMALL |
No | — | CoT budget for small-size models |
ANTHROPIC_COT_BUDGET_LARGE |
No | — | CoT budget for large-size models |
ANTHROPIC_PROMPT_CACHE_TTL |
No | 5m |
Prompt cache TTL: "5m" or "1h" |
ANTHROPIC_EXPERIMENTAL_TELEMETRY |
No | false |
Enable Vercel AI SDK telemetry |
* Required unless ANTHROPIC_AUTH_MODE=oauth or ANTHROPIC_AUTH_MODE=claude-cli.
OAuth mode
Set ANTHROPIC_AUTH_MODE=oauth. Token is read from (in order):
CLAUDE_CODE_OAUTH_TOKENorANTHROPIC_OAUTH_TOKENenv var- macOS keychain (
Claude Code-credentials) ~/.claude/.credentials.json(or$CLAUDE_CONFIG_DIR/.credentials.json)
Run claude auth login (Claude Code CLI) to populate the credential store.
CLI mode
Set ANTHROPIC_AUTH_MODE=claude-cli. Requires the claude binary on PATH (install from code.claude.com). Invokes claude -p for each model call. Does not support messages, tools, toolChoice, or responseSchema.
Caveats
- Opus 4.x models only accept
temperature=1. The plugin enforces this automatically. temperatureandtopPare mutually exclusive in the Anthropic API. Supplying both logs a warning and dropstopP.maxTokensis capped at 32k (Opus 4) or 64k (all others) to avoid API 400 errors.- Browser builds (
exports.browser) never accessprocess.env. SetANTHROPIC_BROWSER_BASE_URLto a server-side proxy; do not expose your API key in client-side code.
Development
bun run --cwd plugins/plugin-anthropic build
bun run --cwd plugins/plugin-anthropic test
bun run --cwd plugins/plugin-anthropic typecheck
For agent-facing documentation (file layout, how to add handlers, extension steps), see CLAUDE.md.