协作头脑风暴
brainstorming
在实现前澄清需求、探索设计选择,并形成清晰的开发方向。
env-manager【开发与工程】Manage environment variables and secrets across development, staging, and production environments. Use when someone needs to audit env vars, sync secrets between environments, detect missing or mismatched variables, rotate credentials, or set up a new environment from an existing one. Trigger words: env vars, environment variables, secrets, .env file…
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
This skill helps manage environment variables and secrets across multiple environments (development, staging, production). It detects missing variables, identifies mismatches, audits for exposed secrets, and helps safely rotate credentials without downtime.
Find all env var references in code:
grep -rn "process\.env\." src/ --include="*.ts" --include="*.js" | \
sed 's/.*process\.env\.\([A-Z_]*\).*/\1/' | sort -u
For Python:
grep -rn "os\.environ\|os\.getenv" src/ --include="*.py" | \
sed 's/.*os\.\(environ\["\|getenv("\)\([A-Z_]*\).*/\2/' | sort -u
Compare against what's defined:
# From .env.example or .env
grep -v '^#' .env.example | grep '=' | cut -d'=' -f1 | sort -u
Report:
.env.example → ⚠️ undocumented.env.example but never referenced in code → ℹ️ possibly staleGet variable lists from each environment:
.env or .env.localBuild a comparison matrix:
Variable | dev | staging | prod | Notes
DATABASE_URL | ✓ | ✓ | ✓ | Different per env ✓
STRIPE_SECRET_KEY | ✓ | ✓ | ✗ | ⚠️ Missing in prod!
REDIS_URL | ✗ | ✓ | ✓ | ℹ️ Not needed locally
NEXT_PUBLIC_API_URL | ✓ | ✓ | ✓ | Verify values differ
Flag issues:
grep -rn "THE_VAR_NAME" . --include="*.ts" --include="*.js" --include="*.yml" --include="*.yaml" --include="Dockerfile"
.env.example as the template# Check app starts without missing var errors
node -e "require('dotenv').config(); console.log('Loaded', Object.keys(process.env).length, 'vars')"
User prompt:
We keep getting "undefined" errors in staging. Can you audit our env vars?
Agent output:
Scanned src/ for environment variable references. Found 34 unique variables.
🔴 Missing from .env.example (undocumented):
OPENAI_API_KEY — referenced in src/lib/ai.ts:12
WEBHOOK_SECRET — referenced in src/api/webhooks.ts:8
RATE_LIMIT_MAX — referenced in src/middleware/rateLimit.ts:3
⚠️ Referenced but no validation/default:
SMTP_HOST — used in src/lib/email.ts:5, crashes if undefined
CACHE_TTL — used in src/lib/cache.ts:2, parseInt(undefined) = NaN
ℹ️ In .env.example but never referenced in code:
LEGACY_API_URL — possibly from a removed feature
DEBUG_MODE — no references found
Recommendation: Add the 3 undocumented vars to .env.example, add default
values for SMTP_HOST and CACHE_TTL, and remove the 2 stale entries.
User prompt:
We're about to launch. Compare staging and production env vars to make sure nothing is missing.
Agent output:
Compared 41 variables across staging and production:
🔴 Missing in production (3):
STRIPE_WEBHOOK_SECRET — payments will fail without this
SENTRY_DSN — no error tracking in prod
FEATURE_FLAG_API_KEY — feature flags will default to off
⚠️ Same value in both environments (2):
JWT_SECRET — using identical secret is a security risk
DATABASE_URL — pointing to same DB! This should differ.
✓ Correctly different (28 vars)
ℹ️ Staging-only (8 vars) — debug/test vars, expected
Action items:
1. Set STRIPE_WEBHOOK_SECRET in prod (get from Stripe Dashboard → Webhooks)
2. Set SENTRY_DSN in prod (get from Sentry → Project Settings → Client Keys)
3. Generate a new JWT_SECRET for prod: openssl rand -base64 32
4. Verify DATABASE_URL points to the production database, not staging
NEXT_PUBLIC_ or VITE_ prefixed vars that contain actual secrets.env.example as the source of truth, committed to git (without values)