Environment Variables
Configure the Claude Code Templates CLI and Claude Code using environment variables for authentication, API keys, and runtime settings.
Authentication Variables
ANTHROPIC_API_KEY
Anthropic API key for Claude Code authentication
Usage:
export ANTHROPIC_API_KEY=sk-ant-xxx
Purpose:
- Authenticate Claude Code CLI
- Enable API-based authentication
- Alternative to OAuth authentication
Obtain Key:
- Visit https://console.anthropic.com/
- Navigate to API Keys section
- Create new API key
- Copy and set as environment variable
Priority: Environment variable takes precedence over ~/.claude.json API key.
Security:
- Never commit to git
- Use
.env files with .gitignore
- Rotate keys regularly
- Use different keys for dev/prod
Example .env file:
# .env
ANTHROPIC_API_KEY=sk-ant-api03-xxx
Load in shell:
# Bash/Zsh
export $(cat .env | xargs)
# Or use dotenv
source .env
ANTHROPIC_AUTH_TOKEN
Alternative authentication token (if using OAuth)
Usage:
export ANTHROPIC_AUTH_TOKEN=your-token
Purpose: Alternative authentication method for enterprise setups.
Sandbox Variables
E2B_API_KEY
E2B API key for sandbox execution
Usage:
export E2B_API_KEY=e2b_xxx
Purpose:
- Enable E2B sandbox execution
- Required for
--sandbox e2b flag
Obtain Key:
- Visit https://e2b.dev/
- Sign up for account
- Create API key
- Set as environment variable
Example:
export E2B_API_KEY=e2b_xxx
cct --sandbox e2b --prompt "Create a React app"
Alternative: Use --e2b-api-key flag:
cct --sandbox e2b --e2b-api-key e2b_xxx --prompt "Create app"
CLOUDFLARE_TUNNEL_TOKEN
Cloudflare Tunnel token for remote access (optional)
Usage:
export CLOUDFLARE_TUNNEL_TOKEN=your-token
Purpose:
- Use custom Cloudflare Tunnel
- Persistent tunnel URLs
- Team access to dashboards
Obtain Token:
- Create Cloudflare account
- Install
cloudflared
- Create tunnel:
cloudflared tunnel create my-tunnel
- Get token from tunnel config
Note: The CLI uses temporary tunnels by default. This is only needed for persistent URLs.
Runtime Configuration
PORT
Port for analytics dashboard and web interfaces
Usage:
export PORT=8080
cct --analytics
Default: 3333
Purpose:
- Change default port if 3333 is in use
- Run multiple dashboards simultaneously
Example:
# Terminal 1
PORT=3333 cct --analytics
# Terminal 2
PORT=4444 cct --chats
NODE_ENV
Node.js environment (development, production, test)
Usage:
export NODE_ENV=development
Values:
development - Development mode (verbose logging)
production - Production mode (minimal logging)
test - Testing mode
Purpose:
- Control logging verbosity
- Enable debug features
- Configure behavior
DEBUG
Enable debug logging for specific modules
Usage:
export DEBUG=*
export DEBUG=claude:*
export DEBUG=analytics:*
Purpose:
- Detailed debugging output
- Module-specific logs
- Troubleshooting
Examples:
# All debug output
DEBUG=* cct --analytics
# Specific module
DEBUG=claude:* cct --agent frontend-developer
CCT_DEBUG
Enable Claude Code Templates debug logging
Usage:
Purpose:
- Show tracking debug messages
- Display non-critical errors
- Troubleshoot analytics issues
Example:
CCT_DEBUG=true npx claude-code-templates --agent frontend-developer
CCT_NO_TRACKING
Disable usage tracking and analytics
Usage:
export CCT_NO_TRACKING=true
Purpose:
- Opt out of anonymous usage analytics
- Disable component download tracking
- Privacy-focused installations
Example:
CCT_NO_TRACKING=true npx claude-code-templates --agent security-auditor
CCT_NO_ANALYTICS
Alias for CCT_NO_TRACKING (disables analytics)
Usage:
export CCT_NO_ANALYTICS=true
Purpose:
- Same as CCT_NO_TRACKING
- Alternative environment variable name
- Disables all telemetry
Note: Setting either CCT_NO_TRACKING or CCT_NO_ANALYTICS to true will disable tracking.
Shell Configuration
PATH
System PATH for global agent executables
Usage:
export PATH="$HOME/.claude-code-templates/bin:$PATH"
Purpose:
- Make global agents accessible
- Enable command-line execution
- Required for user-directory installations
Add to Shell Config:
Bash (~/.bashrc or ~/.bash_profile):
# Claude Code Templates - Global Agents
export PATH="$HOME/.claude-code-templates/bin:$PATH"
Zsh (~/.zshrc):
# Claude Code Templates - Global Agents
export PATH="$HOME/.claude-code-templates/bin:$PATH"
Fish (~/.config/fish/config.fish):
# Claude Code Templates - Global Agents
set -gx PATH $HOME/.claude-code-templates/bin $PATH
Apply Changes:
source ~/.bashrc # Or ~/.zshrc, ~/.config/fish/config.fish
SHELL
Current shell (automatically set by system)
Values:
/bin/bash
/bin/zsh
/usr/bin/fish
Purpose:
- Detect shell for PATH configuration
- Shell-specific features
- Autocompletion setup
Continuous Integration environment indicator
Values:
true - Running in CI environment
- Unset - Local development
Purpose:
- Automatically disables tracking in CI/CD
- Prevents analytics in automated environments
- Skips interactive prompts
Set by: GitHub Actions, GitLab CI, CircleCI, Jenkins, and other CI platforms automatically set this variable.
Manual Override:
# Force CI mode locally
CI=true npx claude-code-templates --agent frontend-developer
Project-Specific Variables
These can be set in .claude/settings.json under the env field:
{
"env": {
"NODE_ENV": "development",
"DEBUG": "true",
"API_URL": "http://localhost:3000",
"DATABASE_URL": "${DATABASE_URL}"
}
}
Variable Expansion: Use ${VAR_NAME} to reference system environment variables.
Environment Variable Precedence
When multiple sources define the same variable:
- Command-line flags (highest priority)
- Environment variables
- Local settings (
.claude/settings.local.json)
- Project settings (
.claude/settings.json)
- User settings (
~/.claude/settings.json) (lowest priority)
Example:
# Environment variable
export ANTHROPIC_API_KEY=sk-ant-111
# CLI flag (takes precedence)
cct --anthropic-api-key sk-ant-222 --prompt "test"
# Uses sk-ant-222
.env Files
Project .env
Store environment variables in .env file:
# .env
ANTHROPIC_API_KEY=sk-ant-xxx
E2B_API_KEY=e2b_xxx
GITHUB_TOKEN=ghp_xxx
DATABASE_URL=postgresql://localhost/mydb
API_URL=http://localhost:3000
Load with dotenv:
# Install dotenv-cli
npm install -g dotenv-cli
# Run with .env
dotenv cct --analytics
Load in shell:
export $(cat .env | grep -v '^#' | xargs)
.env.example
Create template for team:
# .env.example
ANTHROPIC_API_KEY=sk-ant-your-key-here
E2B_API_KEY=e2b_your-key-here
GITHUB_TOKEN=ghp_your-token-here
DATABASE_URL=postgresql://user:pass@localhost/dbname
Usage:
# Team member copies and fills in
cp .env.example .env
vim .env # Add real values
Gitignore
Always exclude .env from git:
# .gitignore
.env
.env.local
.env.*.local
.claude.json
.claude/settings.local.json
CI/CD Configuration
GitHub Actions
Set secrets in repository settings:
# .github/workflows/claude.yml
name: Claude Code
on: [push, pull_request]
jobs:
review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup Node.js
uses: actions/setup-node@v2
with:
node-version: '18'
- name: Install CLI
run: npm install -g claude-code-templates
- name: Run Health Check
run: cct --health-check
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
Set Secrets:
- Go to repository Settings > Secrets and variables > Actions
- Add
ANTHROPIC_API_KEY secret
- Reference with
${{ secrets.ANTHROPIC_API_KEY }}
GitLab CI
# .gitlab-ci.yml
review:
image: node:18
script:
- npm install -g claude-code-templates
- cct --health-check
variables:
ANTHROPIC_API_KEY: $ANTHROPIC_API_KEY
Set Variables:
- Go to Settings > CI/CD > Variables
- Add
ANTHROPIC_API_KEY (protected, masked)
Docker Configuration
Dockerfile
FROM node:18
WORKDIR /app
RUN npm install -g claude-code-templates
COPY . .
ENV NODE_ENV=production
CMD ["cct", "--analytics"]
docker-compose.yml
version: '3.8'
services:
claude-analytics:
build: .
ports:
- "3333:3333"
environment:
- ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
- NODE_ENV=production
- PORT=3333
env_file:
- .env
Run:
Security Best Practices
1. Never Commit Secrets
# Check for secrets before commit
git diff | grep -i "api.key\|secret\|token\|password"
# Use git-secrets
git secrets --install
git secrets --register-aws
2. Use Separate Keys
- Development: Personal API key
- Staging: Team staging key
- Production: Production key (rotate regularly)
3. Restrict Permissions
# Secure .env file
chmod 600 .env
# Verify
ls -la .env
# -rw------- (only owner can read/write)
4. Rotate Keys Regularly
# Monthly rotation schedule
# 1. Generate new key
# 2. Update environment variables
# 3. Test applications
# 4. Revoke old key
5. Use Key Management Systems
AWS Secrets Manager:
# Fetch secret
export ANTHROPIC_API_KEY=$(aws secretsmanager get-secret-value \
--secret-id anthropic-api-key \
--query SecretString \
--output text)
HashiCorp Vault:
# Read secret
export ANTHROPIC_API_KEY=$(vault kv get -field=api_key secret/claude)
Troubleshooting
Variables Not Loading
Check if variable is set:
echo $ANTHROPIC_API_KEY
env | grep ANTHROPIC
Source shell config:
source ~/.bashrc # or ~/.zshrc
Verify .env file:
cat .env | grep ANTHROPIC_API_KEY
Authentication Fails
Test API key:
curl https://api.anthropic.com/v1/messages \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{
"model": "claude-3-5-sonnet-20241022",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "Hello"}]
}'
Check key format:
- Should start with
sk-ant-
- No whitespace or special characters
- Not expired
PATH Not Working
Verify PATH includes bin directory:
echo $PATH | grep claude-code-templates
Add to PATH manually:
export PATH="$HOME/.claude-code-templates/bin:$PATH"
Check executable exists:
ls -la ~/.claude-code-templates/bin/
Permission Denied
Fix file permissions:
chmod 600 .env
chmod 755 ~/.claude-code-templates/bin/*
Next Steps