## Set a secretlangsmith secret set SECRET_NAME "secret-value"## Set for specific deploymentlangsmith secret set API_KEY "prod-key" --deployment my-agent-prod## Set from filelangsmith secret set SSH_KEY --from-file ~/.ssh/id_rsa## Set from environment variableexport MY_SECRET="value"langsmith secret set MY_SECRET --from-env MY_SECRET
# Set dev secretslangsmith secret set ANTHROPIC_API_KEY "dev-key" \ --deployment my-agent-devlangsmith secret set LANGSMITH_PROJECT "my-agent-dev" \ --deployment my-agent-dev
## Anthropic Claudelangsmith secret set ANTHROPIC_API_KEY "sk-ant-..."## OpenAIlangsmith secret set OPENAI_API_KEY "sk-..."## Google Geminilangsmith secret set GOOGLE_API_KEY "..."## Azure OpenAIlangsmith secret set AZURE_OPENAI_API_KEY "..."langsmith secret set AZURE_OPENAI_ENDPOINT "https://..."
import os## Direct accessanthropic_key = os.environ["ANTHROPIC_API_KEY"]## With default fallbackmodel_name = os.environ.get("MODEL_NAME", "claude-sonnet-4-5-20250929")## Raise error if missingjwt_secret = os.environ["JWT_SECRET_KEY"] # Raises KeyError if not set## Check if existsif "OPTIONAL_API_KEY" in os.environ: use_optional_feature()
# Generate random secretopenssl rand -base64 32# Set as secretlangsmith secret set JWT_SECRET_KEY "$(openssl rand -base64 32)"
Rotate Secrets Regularly
Copy
Ask AI
# Generate new keyNEW_KEY=$(openssl rand -base64 32)# Update secretlangsmith secret set JWT_SECRET_KEY "$NEW_KEY"# Redeploylanggraph deploy
Schedule secret rotation every 90 days.
Use Deployment-Specific Secrets
Never share secrets between dev/staging/prod:
Copy
Ask AI
# Wrong: Using same key for alllangsmith secret set API_KEY "shared-key" ❌# Right: Different keys per environmentlangsmith secret set API_KEY "dev-key" --deployment dev ✅langsmith secret set API_KEY "prod-key" --deployment prod ✅
Validate Required Secrets
Check for required secrets at startup:
Copy
Ask AI
import osimport sysREQUIRED_SECRETS = [ "ANTHROPIC_API_KEY", "JWT_SECRET_KEY", "LANGSMITH_PROJECT"]missing = [s for s in REQUIRED_SECRETS if s not in os.environ]if missing: print(f"Missing required secrets: {missing}") sys.exit(1)
Never Log Secrets
Copy
Ask AI
import logging# Wrong: Logging secretlogging.info(f"Using API key: {api_key}") ❌# Right: Log without secretlogging.info("API key loaded successfully") ✅# Right: Mask in logsmasked_key = api_key[:8] + "..." + api_key[-4:]logging.debug(f"Using API key: {masked_key}") ✅
# Verify secret existslangsmith secret list | grep ANTHROPIC_API_KEY# Set if missinglangsmith secret set ANTHROPIC_API_KEY "your-key"# Redeploylanggraph deploy
Wrong secret value
Symptom: API returns 401 UnauthorizedSolution:
Copy
Ask AI
# Update secret with correct valuelangsmith secret set ANTHROPIC_API_KEY "correct-key"# Redeploy (recommended)langgraph deploy
Deployment-specific secret not working
Symptom: Production uses dev secretsSolution:
Copy
Ask AI
# Set secret for specific deploymentlangsmith secret set API_KEY "prod-key" \ --deployment my-agent-prod