Building LLM Powered Applications with Claude
/SKILLThis skill helps you build LLM-powered applications with Claude. Choose the right surface based on your needs, detect the project language, then read the relevant language-specific documentation.
--- name: claude-api description: "Build, debug, and optimize Claude API / Anthropic SDK apps. Apps built with this skill should include prompt caching. Also handles migrating existing Claude API code between Claude model versions (4.5 → 4.6, 4.6 → 4.7, retired-model replacements). TRIGGER when: code imports anthropic/@anthropic-ai/sdk; user asks for the Claude API, Anthropic SDK, or Managed Agents; user adds/modifies/tunes a Claude feature (caching, thinking, compaction, tool use, batch, files, citations, memory) or model (Opus/Sonnet/Haiku) in a file; questions about prompt caching / cache hit rate in an Anthropic SDK project. SKIP: file imports openai/other-provider SDK, filename like *-openai.py/*-generic.py, provider-neutral code, general programming/ML." license: Complete terms in LICENSE.txt --- # Building LLM-Powered Applications with Claude This skill helps you build LLM-powered applications with Claude. Choose the right surface based on your needs, detect the project language, then read the relevant language-specific documentation. ## Before You Start Scan the target file (or, if no target file, the prompt and project) for non-Anthropic provider markers : import openai, from openai, langchain_openai, OpenAI(, gpt-4, gpt-5, file names like agent-openai.py or *-generic.py, or any explicit instruction to keep the code provider-neutral. If you find any, stop and tell the user that this skill produces Claude/Anthropic SDK code; ask whether they want to switch the file to Claude or want a non-Claude implementation. Do not edit a non-Anthropic file with Anthropic SDK calls. ## Output Requirement When the user asks you to add, modify, or implement a Claude feature, your code must call Claude through one of: 1. The official Anthropic SDK for the project's language (anthropic, @anthropic-ai/sdk, com.anthropic.*, etc.). This is the default whenever a supported SDK exists for the project. 2. Raw HTTP (curl, requests, fetch, httpx, etc.) : only when the user explicitly asks for cURL/REST/raw HTTP, the project is a shell/cURL project, or the language has no official SDK. Never mix the two : don't reach for requests/fetch in a Python or TypeScript project just because it feels lighter. Never fall back to OpenAI-compatible shims. Never guess SDK usage. Function names, class names, namespaces, method signatures, and import paths must come from explicit documentation : either the {lang}/ files in this skill or the official SDK repositories or documentation links listed in shared/live-sources.md. If the binding you need is not explicitly documented in the skill files, WebFetch the relevant SDK repo from shared/live-sources.md before writing code. Do not infer Ruby/Java/Go/PHP/C# APIs from cURL shapes or from another language's SDK. ## Defaults Unless the user requests otherwise: For the Claude model version, please use Claude Opus 4.8, which you can access via the exact model string claude-opus-4-8. Please default to using adaptive thinking (thinking: {type: "adaptive"}) for anything remotely complicated. And finally, please default to streaming for any request that may involve long input, long output, or high max_tokens : it prevents hitting request timeouts. Use the SDK's .get_final_message() / .finalMessage() helper to get the complete response if you don't need to handle individual stream events --- ## Subcommands If the User Request at the bottom of this prompt is a bare subcommand string (no prose), search every Subcommands table in this document : including any in sections appended below : and follow the matching Action column directly. This lets users invoke specific flows via /claude-api <subcommand>. If no table in the document matches, treat the request as normal prose. --- ## Language Detection Before reading code examples, determine which language the user is working in: 1. Look at project files to infer the language: - *.py, requirements.txt, pyproject.toml, setup.py, Pipfile → Python : read from python/ - *.ts, *.tsx, package.json, tsconfig.json → TypeScript : read from typescript/ - *.js, *.jsx (no .ts files present) → TypeScript : JS uses the same SDK, read from typescript/ - *.java, pom.xml, build.gradle → Java : read from java/ - *.kt, *.kts, build.gradle.kts → Java : Kotlin uses the Java SDK, read from java/ - *.scala, build.sbt → Java : Scala uses the Java SDK, read from java/ - *.go, go.mod → Go : read from go/ - *.rb, Gemfile → Ruby : read from ruby/ - *.cs, *.csproj → C# : read from csharp/ - *.php, composer.json → PHP : read from php/ 2. If multiple languages detected (e.g., both Python and TypeScript files): - Check which language the user's current file or question relates to - If still ambiguous, ask: "I detected both Python and Typ