重要前提
安装AI Skills的关键前提是:必须科学上网,且开启TUN模式,这一点至关重要,直接决定安装能否顺利完成,在此郑重提醒三遍:科学上网,科学上网,科学上网。查看完整安装教程 →
varlock by wrsmith108/varlock-claude-skill
npx skills add https://github.com/wrsmith108/varlock-claude-skill --skill varlock为 Claude Code 会话提供默认安全的环境变量管理。
代码仓库 : https://github.com/dmno-dev/varlock 文档 : https://varlock.dev
在使用 Claude 时,密钥绝不能出现在以下地方:
此技能确保所有敏感数据都得到妥善保护。
# ❌ 切勿这样做 - 将密钥暴露给 Claude 的上下文
echo $CLERK_SECRET_KEY
cat .env | grep SECRET
printenv | grep API
# ✅ 这样做 - 验证而不暴露
varlock load --quiet && echo "✓ 密钥已验证"
# ❌ 切勿这样做 - 暴露所有密钥
cat .env
less .env
使用 Read 工具读取 .env 文件
# ✅ 这样做 - 读取模式(安全)而非值
cat .env.schema
varlock load # 显示脱敏后的值
# ❌ 切勿这样做 - 在错误中暴露密钥
test -n "$API_KEY" && echo "Key: $API_KEY"
# ✅ 这样做 - Varlock 验证并脱敏
varlock load
# 输出显示:API_KEY 🔐sensitive └ ▒▒▒▒▒
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
# ❌ 切勿这样做 - 密钥留在命令历史记录中
curl -H "Authorization: Bearer sk_live_xxx" https://api.example.com
# ✅ 这样做 - 使用环境变量
curl -H "Authorization: Bearer $API_KEY" https://api.example.com
# 或者更好:varlock run -- curl ...
# 安装 Varlock CLI
curl -sSfL https://varlock.dev/install.sh | sh -s -- --force-no-brew
# 添加到 PATH(添加到 ~/.zshrc 或 ~/.bashrc)
export PATH="$HOME/.varlock/bin:$PATH"
# 验证
varlock --version
# 从现有的 .env 文件创建 .env.schema
varlock init
# 或手动创建
touch .env.schema
模式文件定义每个变量的类型、验证规则和敏感性。
# 全局默认值
# @defaultSensitive=true @defaultRequired=infer
# 应用程序
# @type=enum(development,staging,production) @sensitive=false
NODE_ENV=development
# @type=port @sensitive=false
PORT=3000
# 数据库 - 敏感
# @type=url @required
DATABASE_URL=
# @type=string @required @sensitive
DATABASE_PASSWORD=
# API 密钥 - 敏感
# @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 |
port | 1-65535 | @type=port |
boolean | true/false | @type=boolean |
enum(a,b,c) | 值列表中的一个 | @type=enum(dev,prod) |
# 检查所有变量(安全 - 脱敏敏感值)
varlock load
# 静默模式(成功时无输出)
varlock load --quiet
# 检查特定环境
varlock load --env=production
# 将已验证的环境变量注入命令
varlock run -- npm start
varlock run -- node script.js
varlock run -- pytest
# 密钥对命令可用,但绝不会被打印
# 读取模式是安全的 - 不包含值
cat .env.schema
# 列出预期的变量
grep "^[A-Z]" .env.schema
# 始终先验证环境
varlock load --quiet || {
echo "❌ 环境验证失败"
exit 1
}
# 然后继续操作
npm run build
# 1. 在外部源(1Password、AWS 等)中更新密钥
# 2. 手动更新 .env 文件(不要使用 Claude 做这个)
# 3. 验证新值是否有效
varlock load
# 4. 如果使用 GitHub Secrets,同步(值不会显示)
./scripts/update-github-secrets.sh
# GitHub Actions - 来自 GitHub Secrets 的密钥
- name: 验证环境
env:
DATABASE_URL: ${{ secrets.DATABASE_URL }}
API_KEY: ${{ secrets.API_KEY }}
run: varlock load --quiet
# 在容器中安装 Varlock
RUN curl -sSfL https://varlock.dev/install.sh | sh -s -- --force-no-brew \
&& ln -s /root/.varlock/bin/varlock /usr/local/bin/varlock
# 在容器启动时验证
CMD ["varlock", "run", "--", "npm", "start"]
# ✅ 安全方法
varlock load 2>&1 | grep "API_KEY"
# 显示:✅ API_KEY 🔐sensitive └ ▒▒▒▒▒
# ❌ 切勿这样做
echo $API_KEY
# ✅ 安全方法 - 检查存在性和格式
varlock load # 验证类型和必填字段
# 检查密钥是否有正确的前缀(不显示值)
varlock load 2>&1 | grep -E "(CLERK|AUTH)"
# ❌ 切勿这样做
printenv | grep KEY
Claude 应回复:
"出于安全原因,我无法直接修改密钥。请:
1. 手动在 .env 文件中更新值
2. 或者在您的密钥管理器(1Password、AWS 等)中更新
3. 然后运行 `varlock load` 进行验证
如果您需要添加新变量,我可以帮助您更新 .env.schema。"
Claude 应回复:
"我不会直接读取 .env 文件,因为它们包含密钥。相反:
- 运行 `varlock load` 查看脱敏后的值
- 运行 `cat .env.schema` 查看模式(安全)
- 如果需要,我可以帮助您修改 .env.schema"
# 在 .env.schema 中
# @type=string @sensitive
API_KEY=exec('op read "op://vault/item/field"')
# 在 .env.schema 中
# @type=string @sensitive
DB_PASSWORD=exec('aws secretsmanager get-secret-value --secret-id prod/db')
# 在 .env.schema 中
# @type=url
API_URL=env('API_URL_${NODE_ENV}', 'http://localhost:3000')
# 检查安装
ls ~/.varlock/bin/varlock
# 添加到 PATH
export PATH="$HOME/.varlock/bin:$PATH"
# 或使用完整路径
~/.varlock/bin/varlock load
# 检查哪些变量缺失/无效
varlock load # 显示详细错误
# 常见修复方法:
# - 将缺失的必填变量添加到 .env
# - 修复类型不匹配(端口必须是数字)
# - 检查字符串前缀是否与模式匹配
# 1. 立即轮换暴露的密钥
# 2. 检查 .env.schema 是否有 @sensitive 注解
# 3. 确保使用 varlock 命令,而不是 echo/cat
# 添加缺失的敏感性注解:
# 之前:API_KEY=
# 之后:# @type=string @sensitive
# API_KEY=
将这些添加到您的 package.json:
{
"scripts": {
"env:validate": "varlock load",
"env:check": "varlock load --quiet || echo '环境验证失败'",
"prestart": "varlock load --quiet",
"start": "varlock run -- node server.js"
}
}
.env.schema 并定义所有变量@sensitive 注解标记所有密钥@defaultSensitive=true.env 添加到 .gitignore.env.schema 提交到版本控制npm run env:validatecat .env 或 echo $SECRET| 任务 | 安全命令 |
|---|---|
| 验证所有环境变量 | varlock load |
| 静默验证 | varlock load --quiet |
| 使用环境变量运行 | varlock run -- <cmd> |
| 查看模式 | cat .env.schema |
| 检查特定变量 | `varlock load |
| 切勿执行 | 原因 |
| --- | --- |
cat .env | 暴露所有密钥 |
echo $SECRET | 暴露给 Claude 上下文 |
| `printenv | grep` |
| 使用工具读取 .env | 密钥进入 Claude 的上下文 |
| 在命令中硬编码 | 留在 shell 历史记录中 |
@sensitive@sensitive=false(包含 +clerk_test,非机密)~/.claude/skills/clerk/SKILL.md.env 文件,绝不将密钥复制到镜像中varlock run 作为入口点~/.claude/skills/docker/SKILL.md最后更新:2025年12月22日 为 Claude Code 提供默认安全的环境管理
每周安装数
55
代码仓库
GitHub 星标数
16
首次出现
2026年1月20日
安全审计
安装于
claude-code46
codex44
gemini-cli44
opencode43
cursor43
github-copilot42
Secure-by-default environment variable management for Claude Code sessions.
Repository : https://github.com/dmno-dev/varlock Documentation : https://varlock.dev
When working with Claude, secrets must NEVER appear in:
This skill ensures all sensitive data is properly protected.
# ❌ 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"
# ❌ 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
# ❌ 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 └ ▒▒▒▒▒
# ❌ 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
The schema defines types, validation, and sensitivity for each variable.
# 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=
| Annotation | Effect | Use For |
|---|---|---|
@sensitive | Redacted in all output | API keys, passwords, tokens |
@sensitive=false | Shown in logs | Public keys, non-secret config |
@defaultSensitive=true | All vars sensitive by default | High-security projects |
| Type | Validates | Example |
|---|---|---|
string | Any string | @type=string |
string(startsWith=X) | Prefix validation | @type=string(startsWith=sk_) |
string(contains=X) | Substring validation | @type=string(contains=+clerk_test) |
url |
# 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
# Always validate environment first
varlock load --quiet || {
echo "❌ Environment validation failed"
exit 1
}
# Then proceed with operation
npm run build
# 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
# GitHub Actions - secrets from GitHub Secrets
- name: Validate environment
env:
DATABASE_URL: ${{ secrets.DATABASE_URL }}
API_KEY: ${{ secrets.API_KEY }}
run: varlock load --quiet
# 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"]
# ✅ 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."
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"
# In .env.schema
# @type=string @sensitive
API_KEY=exec('op read "op://vault/item/field"')
# 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')
# Check installation
ls ~/.varlock/bin/varlock
# Add to PATH
export PATH="$HOME/.varlock/bin:$PATH"
# Or use full path
~/.varlock/bin/varlock load
# 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
# 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=
Add these to your 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"
}
}
.env.schema with all variables defined@sensitive annotation@defaultSensitive=true to schema header.env to .gitignore.env.schema to version controlnpm run env:validate to CI/CDcat .env or echo $SECRET in Claude sessions| Task | Safe Command |
|---|---|
| Validate all env vars | varlock load |
| Quiet validation | varlock load --quiet |
| Run with env | varlock run -- <cmd> |
| View schema | cat .env.schema |
| Check specific var | `varlock load |
| Never Do | Why |
| --- | --- |
cat .env |
@sensitive@sensitive=false (contain +clerk_test, not secret)~/.claude/skills/clerk/SKILL.md.env file, never copy secrets to imagevarlock run as entrypoint~/.claude/skills/docker/SKILL.mdLast updated: December 22, 2025 Secure-by-default environment management for Claude Code
Weekly Installs
55
Repository
GitHub Stars
16
First Seen
Jan 20, 2026
Security Audits
Gen Agent Trust HubFailSocketWarnSnykFail
Installed on
claude-code46
codex44
gemini-cli44
opencode43
cursor43
github-copilot42
Azure RBAC 权限管理工具:查找最小角色、创建自定义角色与自动化分配
159,600 周安装
Expo DOM组件教程:在React Native应用中无缝运行网页库和代码
12,300 周安装
Vercel CLI 令牌认证部署指南 - 无需登录的自动化项目部署
12,900 周安装
Sentry CLI 使用指南:命令行工具与Sentry监控平台交互的最佳实践
13,100 周安装
Google Workspace CLI 日历事件创建命令 - gws calendar +insert 完整使用指南
13,100 周安装
Diátaxis 文档专家 | GitHub Copilot 智能文档撰写助手,遵循专业框架
13,800 周安装
Google Docs 追加文本命令 gws-docs-write | Google Workspace CLI 文档写入工具
14,100 周安装
| Valid URL |
@type=url |
port | 1-65535 | @type=port |
boolean | true/false | @type=boolean |
enum(a,b,c) | One of values | @type=enum(dev,prod) |
| Exposes all secrets |
echo $SECRET | Exposes to Claude context |
| `printenv | grep` |
| Read .env with tools | Secrets in Claude's context |
| Hardcode in commands | In shell history |