mcpField
V
varlock

varlock

github.com/wrsmith108安全33265 次安装34 周前更新
代码仓库

关于 varlock

varlock 是一项安全技能,指导如何在 Claude Code 会话中使用 Varlock 管理环境变量。它强调通过脱敏验证和命令注入使用密钥,避免敏感值出现在输出、上下文或命令中。

主要功能

  1. 01脱敏验证环境变量
  2. 02基于 Schema 的类型与敏感性规则
  3. 03为命令注入密钥
  4. 04安全查看配置 Schema
  5. 05CI/CD 与 Docker 使用模式

适用场景

  1. 01验证项目环境配置
  2. 02运行需要密钥的脚本
  3. 03检查配置而不显示变量值

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/wrsmith108/varlock-claude-skill --skill varlock

安装后在 Claude Code 中输入/varlock确认已加载。

详细介绍

Varlock 安全技能

为 Claude Code 会话提供默认安全的环境变量管理。

仓库:https://github.com/dmno-dev/varlock 文档:https://varlock.dev

核心原则:绝不暴露密钥

使用 Claude 时,密钥绝不能出现在:

  • 终端输出中
  • Claude 的输入/输出上下文中
  • 日志文件或跟踪记录中
  • Git 提交或差异中
  • 错误消息中

此技能可确保所有敏感数据都得到妥善保护。


关键:Claude 的安全规则

规则 1:绝不回显密钥
# ❌ NEVER DO THIS - exposes secret to Claude's context
echo $CLERK_SECRET_KEY
cat .env | grep SECRET
printenv | grep API

# ✅ DO THIS - validates without exposing
varlock load --quiet && echo "✓ Secrets validated"
规则 2:绝不直接读取 .env
# ❌ NEVER DO THIS - exposes all secrets
cat .env
less .env
Read tool on .env file

# ✅ DO THIS - read schema (safe) not values
cat .env.schema
varlock load  # Shows masked values
规则 3:使用 Varlock 进行验证
# ❌ NEVER DO THIS - exposes secret in error
test -n "$API_KEY" && echo "Key: $API_KEY"

# ✅ DO THIS - Varlock validates and masks
varlock load
# Output shows: API_KEY 🔐sensitive └ ▒▒▒▒▒
规则 4:命令中绝不包含密钥
# ❌ NEVER DO THIS - secret in command history
curl -H "Authorization: Bearer sk_live_xxx" https://api.example.com

# ✅ DO THIS - use environment variable
curl -H "Authorization: Bearer $API_KEY" https://api.example.com
# Or better: varlock run -- curl ...

快速入门

安装
# Install Varlock CLI
curl -sSfL https://varlock.dev/install.sh | sh -s -- --force-no-brew

# Add to PATH (add to ~/.zshrc or ~/.bashrc)
export PATH="$HOME/.varlock/bin:$PATH"

# Verify
varlock --version
初始化项目
# Create .env.schema from existing .env
varlock init

# Or create manually
touch .env.schema

架构文件:.env.schema

架构定义了每个变量的类型、验证规则和敏感性。

基本结构
# Global defaults
# @defaultSensitive=true @defaultRequired=infer

# Application
# @type=enum(development,staging,production) @sensitive=false
NODE_ENV=development

# @type=port @sensitive=false
PORT=3000

# Database - SENSITIVE
# @type=url @required
DATABASE_URL=

# @type=string @required @sensitive
DATABASE_PASSWORD=

# API Keys - SENSITIVE
# @type=string(startsWith=sk_) @required @sensitive
STRIPE_SECRET_KEY=

# @type=string(startsWith=pk_) @sensitive=false
STRIPE_PUBLISHABLE_KEY=
安全注解
注解效果用途
@sensitive在所有输出中隐藏API 密钥、密码、令牌
@sensitive=false在日志中显示公钥、非机密配置
@defaultSensitive=true默认将所有变量设为敏感高安全性项目
类型注解
类型验证内容示例
string任意字符串@type=string
string(startsWith=X)前缀验证@type=string(startsWith=sk_)
string(contains=X)子字符串验证@type=string(contains=+clerk_test)
url有效 URL@type=url
port1-65535@type=port
booleantrue/false@type=boolean
enum(a,b,c)值之一@type=enum(dev,prod)

Claude 可安全使用的命令

验证环境
# Check all variables (safe - masks sensitive values)
varlock load

# Quiet mode (no output on success)
varlock load --quiet

# Check specific environment
varlock load --env=production
使用密钥运行命令
# Inject validated env into command
varlock run -- npm start
varlock run -- node script.js
varlock run -- pytest

# Secrets are available to the command but never printed
检查架构(安全)
# Schema is safe to read - contains no values
cat .env.schema

# List expected variables
grep "^[A-Z]" .env.schema

常见模式

模式 1:操作前先验证
# Always validate environment first
varlock load --quiet || {
  echo "❌ Environment validation failed"
  exit 1
}

# Then proceed with operation
npm run build
模式 2:安全轮换密钥
# 1. Update secret in external source (1Password, AWS, etc.)
# 2. Update .env file manually (don't use Claude for this)
# 3. Validate new value works
varlock load

# 4. If using GitHub Secrets, sync (values not shown)
./scripts/update-github-secrets.sh
模式 3:CI/CD 集成
# GitHub Actions - secrets from GitHub Secrets
- name: Validate environment
  env:
    DATABASE_URL: ${{ secrets.DATABASE_URL }}
    API_KEY: ${{ secrets.API_KEY }}
  run: varlock load --quiet
模式 4:Docker 集成
# Install Varlock in container
RUN curl -sSfL https://varlock.dev/install.sh | sh -s -- --force-no-brew \
    && ln -s /root/.varlock/bin/varlock /usr/local/bin/varlock

# Validate at container start
CMD ["varlock", "run", "--", "npm", "start"]

处理与密钥相关的任务

用户要求“检查 API 密钥是否已设置”时
# ✅ Safe approach
varlock load 2>&1 | grep "API_KEY"
# Shows: ✅ API_KEY 🔐sensitive └ ▒▒▒▒▒

# ❌ Never do
echo $API_KEY
用户要求“调试身份验证”时
# ✅ Safe approach - check presence and format
varlock load  # Validates types and required fields

# Check if key has correct prefix (without showing value)
varlock load 2>&1 | grep -E "(CLERK|AUTH)"

# ❌ Never do
printenv | grep KEY
用户要求“更新密钥”时
Claude should respond:
"I cannot directly modify secrets for security reasons. Please:
1. Update the value in your .env file manually
2. Or update in your secrets manager (1Password, AWS, etc.)
3. Then run `varlock load` to validate

I can help you update the .env.schema if you need to add new variables."
用户要求“给我看看 .env 文件”时
Claude should respond:
"I won't read .env files directly as they contain secrets. Instead:
- Run `varlock load` to see masked values
- Run `cat .env.schema` to see the schema (safe)
- I can help you modify .env.schema if needed"

外部密钥来源

1Password 集成
# In .env.schema
# @type=string @sensitive
API_KEY=exec('op read "op://vault/item/field"')
AWS Secrets Manager
# In .env.schema
# @type=string @sensitive
DB_PASSWORD=exec('aws secretsmanager get-secret-value --secret-id prod/db')
特定环境的值
# In .env.schema
# @type=url
API_URL=env('API_URL_${NODE_ENV}', 'http://localhost:3000')

故障排除

“varlock: command not found”
# Check installation
ls ~/.varlock/bin/varlock

# Add to PATH
export PATH="$HOME/.varlock/bin:$PATH"

# Or use full path
~/.varlock/bin/varlock load
“Schema validation failed”
# Check which variables are missing/invalid
varlock load  # Shows detailed errors

# Common fixes:
# - Add missing required variables to .env
# - Fix type mismatches (port must be number)
# - Check string prefixes match schema
“Sensitive value exposed in logs”
# 1. Rotate the exposed secret immediately
# 2. Check .env.schema has @sensitive annotation
# 3. Ensure using varlock commands, not echo/cat

# Add missing sensitivity:
# Before: API_KEY=
# After:  # @type=string @sensitive
#         API_KEY=

npm 脚本

将这些脚本添加到你的 package.json 中:

{
  "scripts": {
    "env:validate": "varlock load",
    "env:check": "varlock load --quiet || echo 'Environment validation failed'",
    "prestart": "varlock load --quiet",
    "start": "varlock run -- node server.js"
  }
}

新项目安全检查清单

  • 安装 Varlock CLI
  • 创建 .env.schema 并定义所有变量
  • 为所有密钥添加 @sensitive 注解
  • 在架构文件头部添加 @defaultSensitive=true
  • 将 .env 添加到 .gitignore
  • 将 .env.schema 提交到版本控制
  • 在 CI/CD 中添加 npm run env:validate
  • 编写密钥轮换流程文档
  • 在 Claude 会话中绝不使用 cat .env 或 echo $SECRET

快速参考卡

任务安全命令
验证所有环境变量varlock load
静默验证varlock load --quiet
使用环境变量运行varlock run -- <cmd>
查看架构cat .env.schema
检查特定变量varlock load | grep VAR_NAME
切勿执行原因
cat .env会暴露所有密钥
echo $SECRET会暴露在 Claude 上下文中
printenv | grep会暴露匹配的密钥
使用工具读取 .env密钥会进入 Claude 的上下文
在命令中硬编码会留在 shell 历史记录中

与其他技能集成

Clerk 技能
  • 测试用户密码设为 @sensitive
  • 测试邮箱设为 @sensitive=false(包含 +clerk_test,不是密钥)
  • 参见:~/.claude/skills/clerk/SKILL.md
Docker 技能
  • 挂载 .env 文件,切勿将密钥复制到镜像中
  • 使用 varlock run 作为入口点
  • 参见:~/.claude/skills/docker/SKILL.md

最后更新:2025 年 12 月 22 日 为 Claude Code 提供默认安全的环境管理

评论

支持 Markdown