Prompt 05: Environment Configuration & API Authentication
- Source ID:
src-20260420-17813fb5232c - Kind:
code - Scope:
shared - Origin:
claude_code/prompts/05-env-and-auth.md - Raw path:
sources/raw/prompt-05-environment-configuration-api-authentication__src-20260420-17813fb5232c.md - Status:
active
Tags
internal-docs rebuild-prompt
Content
Prompt 05: Environment Configuration & API Authentication
Context
You are working in /workspaces/claude-code. The CLI needs an Anthropic API key to function. The auth system supports multiple backends:
- Direct API (ANTHROPIC_API_KEY) — simplest
- OAuth (Claude.ai subscription) — complex browser flow
- AWS Bedrock — AWS_* env vars
- Google Vertex AI — GCP credentials
- Azure Foundry — ANTHROPIC_FOUNDRY_API_KEY
Task
Part A: Create .env file from the existing code
Search the codebase for all environment variables used. Key files to check:
- src/entrypoints/cli.tsx (reads env vars at top level)
- src/services/api/client.ts (API client construction)
- src/utils/auth.ts (authentication)
- src/utils/config.ts (config loading)
- src/constants/ (any hardcoded config)
- src/entrypoints/init.ts (initialization reads)
Create a .env.example file (or update the existing one if it exists) with ALL discoverable env vars, organized by category, with documentation comments. At minimum include:
# ─── Authentication ───
ANTHROPIC_API_KEY= # Required: Your Anthropic API key (sk-ant-...)
# ─── API Configuration ───
ANTHROPIC_BASE_URL= # Custom API endpoint (default: https://api.anthropic.com)
ANTHROPIC_MODEL= # Override default model (e.g., claude-sonnet-4-20250514)
ANTHROPIC_SMALL_FAST_MODEL= # Model for fast/cheap operations (e.g., claude-haiku)
# ─── Feature Flags (used by bun:bundle shim) ───
CLAUDE_CODE_PROACTIVE=false
CLAUDE_CODE_BRIDGE_MODE=false
CLAUDE_CODE_COORDINATOR_MODE=false
CLAUDE_CODE_VOICE_MODE=false
# ─── Debug ───
CLAUDE_CODE_DEBUG_LOG_LEVEL= # debug, info, warn, error
DEBUG=false
Part B: Trace the API client setup
Read src/services/api/client.ts to understand how the Anthropic SDK is initialized. Document:
1. What env vars it reads
2. How it selects between API backends (direct, Bedrock, Vertex, etc.)
3. Where the API key comes from (env var? keychain? OAuth token?)
Create a comment block at the top of .env.example explaining how auth works.
Part C: Create a minimal auth test
Create scripts/test-auth.ts:
// scripts/test-auth.ts
// Quick test that the API key is configured and can reach Anthropic
// Usage: bun scripts/test-auth.ts
import Anthropic from '@anthropic-ai/sdk'
const client = new Anthropic({
apiKey: process.env.ANTHROPIC_API_KEY,
})
async function main() {
try {
const msg = await client.messages.create({
model: process.env.ANTHROPIC_MODEL || 'claude-sonnet-4-20250514',
max_tokens: 50,
messages: [{ role: 'user', content: 'Say "hello" and nothing else.' }],
})
console.log('✅ API connection successful!')
console.log('Response:', msg.content[0].type === 'text' ? msg.content[0].text : msg.content[0])
} catch (err: any) {
console.error('❌ API connection failed:', err.message)
process.exit(1)
}
}
main()
Part D: Stub OAuth for development
The OAuth flow (src/services/oauth/) requires browser interaction and Anthropic's OAuth endpoints. For development, we want to bypass it.
Search for where the auth decision is made (likely in src/utils/auth.ts or src/entrypoints/init.ts). Document what would need to be stubbed to skip OAuth and use only ANTHROPIC_API_KEY.
Don't modify source files yet — just document findings in a comment at the bottom of .env.example.
Verification
.env.exampleexists with comprehensive env var documentationscripts/test-auth.tsexists- With a valid
ANTHROPIC_API_KEYset:bun scripts/test-auth.tsprints success - Without an API key:
bun scripts/test-auth.tsprints a clear error