3.3 KiB
3.3 KiB
Claude Code Scripts
Centralized utility scripts for Claude Code skills.
Installation
Install required dependencies:
pip install -r requirements.txt
resolve_env.py
Centralized environment variable resolver that follows Claude Code's hierarchy.
Priority Order (Highest to Lowest)
- process.env - Runtime environment variables (HIGHEST)
- PROJECT/.opencode/skills/<skill>/.env - Project skill-specific
- PROJECT/.opencode/skills/.env - Project shared across skills
- PROJECT/.opencode/.env - Project global defaults
- ~/.opencode/skills/<skill>/.env - User skill-specific
- ~/.opencode/skills/.env - User shared across skills
- ~/.opencode/.env - User global defaults (LOWEST)
CLI Usage
# Resolve a variable for a specific skill
python ~/.opencode/scripts/resolve_env.py GEMINI_API_KEY --skill ai-multimodal
# With verbose output
python ~/.opencode/scripts/resolve_env.py GEMINI_API_KEY --skill ai-multimodal --verbose
# Find all locations where variable is defined
python ~/.opencode/scripts/resolve_env.py GEMINI_API_KEY --find-all
# Show hierarchy for a skill
python ~/.opencode/scripts/resolve_env.py --show-hierarchy --skill ai-multimodal
# Export format for shell sourcing
eval $(python ~/.opencode/scripts/resolve_env.py GEMINI_API_KEY --export)
Python API Usage
# Add to sys.path if needed
import sys
from pathlib import Path
sys.path.insert(0, str(Path.home() / '.claude' / 'scripts'))
from resolve_env import resolve_env, find_all, show_hierarchy
# Simple resolution
api_key = resolve_env('GEMINI_API_KEY', skill='ai-multimodal')
# With default value
api_key = resolve_env('GEMINI_API_KEY', skill='ai-multimodal', default='fallback-key')
# With verbose output
api_key = resolve_env('GEMINI_API_KEY', skill='ai-multimodal', verbose=True)
# Find all locations
locations = find_all('GEMINI_API_KEY', skill='ai-multimodal')
for description, value, path in locations:
print(f"{description}: {value}")
# Show hierarchy
show_hierarchy(skill='ai-multimodal')
Integration Pattern
Skills should use this script instead of implementing their own resolution logic:
#!/usr/bin/env python3
import sys
from pathlib import Path
# Import centralized resolver
sys.path.insert(0, str(Path.home() / '.claude' / 'scripts'))
from resolve_env import resolve_env
# Resolve API key
api_key = resolve_env('GEMINI_API_KEY', skill='ai-multimodal')
if not api_key:
print("Error: GEMINI_API_KEY not found")
print("Run: python ~/.opencode/scripts/resolve_env.py --show-hierarchy --skill ai-multimodal")
sys.exit(1)
# Use api_key...
Benefits
- Consistent: All skills use the same resolution logic
- Maintainable: Single source of truth for hierarchy
- Debuggable: Built-in verbose mode and find-all functionality
- Flexible: Supports both project-local and user-global configs
- Clear: Shows exactly where each value comes from
Testing
# Test without any config files
python ~/.opencode/scripts/resolve_env.py TEST_VAR --verbose
# Test with environment variable
export TEST_VAR=from-runtime
python ~/.opencode/scripts/resolve_env.py TEST_VAR --verbose
# Test with skill context
python ~/.opencode/scripts/resolve_env.py GEMINI_API_KEY --skill ai-multimodal --find-all