anthropic-sdk-guide — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited anthropic-sdk-guide (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Comprehensive reference for building with the Anthropic Python and TypeScript SDKs. Covers initialization, messages API, streaming, prompt caching, batches, and error handling.
# Python
pip install anthropic
# TypeScript
npm install @anthropic-ai/sdk# Python - client initialization
import anthropic
client = anthropic.Anthropic() # Uses ANTHROPIC_API_KEY env var
# Or explicit: anthropic.Anthropic(api_key="sk-ant-...")// TypeScript - client initialization
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic(); // Uses ANTHROPIC_API_KEY env var# Python - simple message
message = client.messages.create(
model="claude-sonnet-4-6-20250514",
max_tokens=1024,
system="You are a helpful coding assistant.",
messages=[
{"role": "user", "content": "Explain async/await in Python."}
]
)
print(message.content[0].text)// TypeScript - simple message
const message = await client.messages.create({
model: "claude-sonnet-4-6-20250514",
max_tokens: 1024,
system: "You are a helpful coding assistant.",
messages: [
{ role: "user", content: "Explain async/await in Python." }
],
});
console.log(message.content[0].text);# Python - streaming with context manager
with client.messages.stream(
model="claude-sonnet-4-6-20250514",
max_tokens=1024,
messages=[{"role": "user", "content": "Write a short story."}]
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)
# Access final message after stream completes
final_message = stream.get_final_message()// TypeScript - streaming
const stream = client.messages.stream({
model: "claude-sonnet-4-6-20250514",
max_tokens: 1024,
messages: [{ role: "user", content: "Write a short story." }],
});
stream.on("text", (text) => process.stdout.write(text));
const finalMessage = await stream.finalMessage();Use cache_control to cache large system prompts, tool definitions, or conversation prefixes. Cached content costs 90% less on cache hits.
# Python - prompt caching with large system prompt
message = client.messages.create(
model="claude-sonnet-4-6-20250514",
max_tokens=1024,
system=[
{
"type": "text",
"text": "You are an expert on this large codebase..." + large_context,
"cache_control": {"type": "ephemeral"}
}
],
messages=[{"role": "user", "content": "What does the auth module do?"}]
)
# Check cache performance
print(f"Cache read: {message.usage.cache_read_input_tokens}")
print(f"Cache creation: {message.usage.cache_creation_input_tokens}")Process up to 10,000 requests at 50% cost with 24-hour turnaround.
# Python - create a batch
batch = client.messages.batches.create(
requests=[
{
"custom_id": f"request-{i}",
"params": {
"model": "claude-sonnet-4-6-20250514",
"max_tokens": 1024,
"messages": [{"role": "user", "content": prompt}]
}
}
for i, prompt in enumerate(prompts)
]
)
# Poll for completion
import time
while True:
status = client.messages.batches.retrieve(batch.id)
if status.processing_status == "ended":
break
time.sleep(60)
# Stream results
for result in client.messages.batches.results(batch.id):
if result.result.type == "succeeded":
print(result.custom_id, result.result.message.content[0].text)# Python - count tokens before sending
count = client.messages.count_tokens(
model="claude-sonnet-4-6-20250514",
system="You are a helpful assistant.",
messages=[{"role": "user", "content": long_document}]
)
print(f"Input tokens: {count.input_tokens}")import anthropic
try:
message = client.messages.create(
model="claude-sonnet-4-6-20250514",
max_tokens=1024,
messages=[{"role": "user", "content": "Hello"}]
)
except anthropic.RateLimitError:
# Back off and retry - SDK has built-in retries (2 by default)
print("Rate limited. The SDK will auto-retry.")
except anthropic.APIStatusError as e:
print(f"API error {e.status_code}: {e.message}")
except anthropic.APIConnectionError:
print("Network connection failed.")| Model ID | Best For |
|---|---|
| claude-opus-4-6-20250514 | Deep reasoning, complex tasks |
| claude-sonnet-4-6-20250514 | Best balance of speed and capability |
| claude-haiku-4-5-20251001 | Fast, lightweight tasks |
| Feature | Endpoint / Method |
|---|---|
| Messages | client.messages.create() |
| Streaming | client.messages.stream() |
| Batches | client.messages.batches.create() |
| Token count | client.messages.count_tokens() |
| Prompt caching | cache_control: {"type": "ephemeral"} |
Default retries: 2 (configurable via max_retries on client).
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.