关于 env-validator
env-validator 是用于检查项目环境变量配置的技能,适合开发和维护项目配置的人员。它将 .env 文件与代码、示例文件和部署清单交叉核对,报告缺失项、类型错误、不安全默认值及未引用变量。
主要功能
- 01发现环境配置来源
- 02从代码和清单提取变量要求
- 03检查缺失变量与类型错误
- 04标记不安全默认值和孤立变量
- 05生成结构化验证报告
适用场景
- 01在运行前检查项目的 .env 配置
- 02核对 .env.example 与代码所需变量
- 03清理部署配置中的过期或未引用变量
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ mathews-tom/ armory --skill env-validator安装后在 Claude Code 中输入/env-validator确认已加载。
附带文件evals/cases.yamlreferences/validation-rules.md
详细介绍
Env Validator
通过交叉比对 .env 文件与项目要求,验证环境变量配置。在导致运行时故障之前,捕获缺失变量、类型错误、不安全的默认值和孤立条目。
参考文件
| 文件 | 内容 | 加载时机 |
|---|---|---|
references/validation-rules.md | 内置验证规则和严重性定义 | 始终 |
前提条件
- 项目中有
.env文件(或等效文件) - 可选:用于交叉比对的
.env.example、docker-compose.yml或部署清单
工作流
阶段 1:发现
在项目中定位环境配置来源:
- 主文件: 在项目根目录查找
.env。如果不存在,则检查.env.local、.env.development、.env.production - 架构文件: 查找
.env.example或.env.template,这些文件定义了预期变量 - 代码引用: 搜索
os.environ、process.env、env::var、os.Getenv模式,查找代码中引用的变量 - 部署清单: 检查
docker-compose.yml、Dockerfile、k8s/清单中的${VAR}或ENV VAR模式
继续之前,报告找到的内容。
阶段 2:提取架构
根据发现的来源构建预期变量架构:
对于所有来源中找到的每个变量,记录:
| 字段 | 来源 |
|---|---|
| 名称 | 变量名称(例如,DATABASE_URL) |
| 必需 | 在代码引用中出现,或在示例中标记为必需 |
| 类型提示 | 根据用法推断(URL、整数、布尔值、字符串、路径) |
| 默认值 | .env.example 中的值(如果存在) |
| 使用位置 | 引用此变量的文件列表 |
阶段 3:验证
针对主 .env 文件运行以下检查:
-
缺少必需变量(CRITICAL)
- 代码中引用了该变量,但
.env中不存在 .env.example中存在该变量且未设置默认值,但.env中不存在
- 代码中引用了该变量,但
-
类型不匹配(HIGH)
- 代码执行
int(os.environ["PORT"]),但值为PORT=abc - 代码期望布尔值(
true/false),但值为DEBUG=yes - URL 变量格式无效
- 代码执行
-
不安全的默认值(HIGH)
SECRET_KEY=changeme、PASSWORD=password、API_KEY=xxx- 面向生产环境的文件中出现
DEBUG=true或DEBUG=1 - 安全关键变量的值为空
-
未引用的变量(MEDIUM)
.env中的变量未在代码或清单中的任何位置引用- 可能表示配置已过期
-
格式问题(LOW)
- 行不符合
KEY=VALUE格式 - 值末尾有空格
- 引号使用不一致(混用单引号、双引号或不加引号)
- 变量定义重复(后者生效,但很可能是错误)
- 行不符合
完整规则目录请参阅 references/validation-rules.md。
阶段 4:报告
生成结构化验证报告:
# Environment Validation Report
**File:** `.env`
**Schema:** `.env.example` + code references
**Verdict:** PASS | FAIL
## Summary
| Severity | Count |
|----------|-------|
| CRITICAL | N |
| HIGH | N |
| MEDIUM | N |
| LOW | N |
## CRITICAL
### [ENV-001] Missing required variable: DATABASE_URL
- **Referenced in:** `src/db.py:12`, `docker-compose.yml:8`
- **Expected type:** URL (postgresql://...)
- **Fix:** Add `DATABASE_URL=postgresql://user:pass@localhost:5432/dbname` to `.env`
## HIGH
...
## Unreferenced Variables
| Variable | In .env | In Code | In Manifests | Status |
|-----------------|---------|---------|--------------|--------------|
| LEGACY_API_KEY | Yes | No | No | Unreferenced |
## Recommendations
1. [Highest priority fix]
2. [Second fix]
错误处理
| 错误 | 解决方法 |
|---|---|
| 未找到 .env 文件 | 报告文件缺失;检查是否有其他环境变量来源 |
| 没有 .env.example 或架构文件 | 仅根据代码引用进行验证 |
| .env 为二进制文件或文件过大 | 跳过;报告格式不受支持 |
| 未找到代码引用 | 仅验证格式和安全性;跳过完整性检查 |
限制
- 无法验证运行时注入的变量(来自 vault、AWS SSM 等)
- 类型推断基于启发式规则,可能会误判复杂值
- 不会通过外部服务检查变量值(例如 API 密钥格式是否有效)
- 区分生产环境与开发环境需要遵循文件命名约定
评论
支持 Markdown