Skip to content
Back to skills

Env Validator

ASecurity

Validates .env files against code references and manifests for missing vars, type mismatches, insecure defaults, and unused entries. Triggers on: "validate env file", "check environment variables", "missing env vars", "check .env", "dotenv validation". NOT for secret scanning, use repo-sentinel.

  • 318 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added May 27, 2026
data-aigosqldockerawsapidatabasesecurity

Works with

  • api

Security analysis

A100/100

Pro scans all 3 files and shows the line behind each finding

Scanned May 27, 2026

npx -y skills add Mathews-Tom/armory --skill env-validator --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Env Validator?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Env Validator
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/mathews-tom-env-validator/badge)](https://www.skillsdirectory.com/skills/mathews-tom-env-validator)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: env-validator
description: 'Validates .env files against code references and manifests for missing vars, type mismatches, insecure defaults, and unused entries. Triggers on: "validate env file", "check environment variables", "missing env vars", "check .env", "dotenv validation". NOT for secret scanning, use repo-sentinel.'
metadata:
  version: 1.0.1
  category: operations
  tags: [env, configuration, validation, dotenv, deployment]
  difficulty: intermediate
  phase: build
---

# Env Validator

Validates environment variable configurations by cross-referencing `.env` files against
project requirements. Catches missing variables, type errors, insecure defaults, and
orphaned entries before they cause runtime failures.

## Reference Files

| File                                 | Contents                                          | Load When              |
| ------------------------------------ | ------------------------------------------------- | ---------------------- |
| `references/validation-rules.md`     | Built-in validation rules and severity definitions | Always                |

## Prerequisites

- A `.env` file (or equivalent) in the project
- Optionally: `.env.example`, `docker-compose.yml`, or deployment manifests for cross-referencing

## Workflow

### Phase 1: Discovery

Locate environment configuration sources in the project:

1. **Primary file:** Find `.env` in the project root. If absent, check for `.env.local`, `.env.development`, `.env.production`
2. **Schema file:** Find `.env.example` or `.env.template` — this defines the expected variables
3. **Code references:** Grep for `os.environ`, `process.env`, `env::var`, `os.Getenv` patterns to find variables referenced in code
4. **Deployment manifests:** Check `docker-compose.yml`, `Dockerfile`, `k8s/` manifests for `${VAR}` or `ENV VAR` patterns

Report what was found before proceeding.

### Phase 2: Schema Extraction

Build the expected variable schema from discovered sources:

For each variable found across all sources, record:

| Field       | Source                                                    |
| ----------- | --------------------------------------------------------- |
| Name        | Variable name (e.g., `DATABASE_URL`)                      |
| Required    | Present in code references or marked required in example   |
| Type hint   | Inferred from usage (URL, integer, boolean, string, path) |
| Default     | Value in `.env.example` if present                         |
| Used in     | List of files that reference this variable                 |

### Phase 3: Validation

Run these checks against the primary `.env` file:

1. **Missing required variables** (CRITICAL)
   - Variable referenced in code but absent from `.env`
   - Variable in `.env.example` without a default but absent from `.env`

2. **Type mismatches** (HIGH)
   - `PORT=abc` when code does `int(os.environ["PORT"])`
   - `DEBUG=yes` when code expects boolean (`true`/`false`)
   - URL variables without valid URL format

3. **Insecure defaults** (HIGH)
   - `SECRET_KEY=changeme`, `PASSWORD=password`, `API_KEY=xxx`
   - `DEBUG=true` or `DEBUG=1` in production-targeted files
   - Empty values for security-critical variables

4. **Unreferenced variables** (MEDIUM)
   - Variables in `.env` not referenced anywhere in code or manifests
   - May indicate stale configuration

5. **Format issues** (LOW)
   - Lines without `KEY=VALUE` format
   - Trailing whitespace in values
   - Inconsistent quoting (mixing single/double/no quotes)
   - Duplicate variable definitions (last wins, but likely a mistake)

See `references/validation-rules.md` for the complete rule catalog.

### Phase 4: Report

Produce a structured validation report:

```markdown
# 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]
```

## Error Handling

| Error                             | Resolution                                            |
| --------------------------------- | ----------------------------------------------------- |
| No .env file found                | Report absence; check for alternative env sources     |
| No .env.example or schema         | Validate based on code references only                |
| Binary or very large .env         | Skip; report as unsupported format                    |
| No code references found          | Validate format and security only; skip completeness  |

## Limitations

- Cannot validate runtime-injected variables (from vault, AWS SSM, etc.)
- Type inference is heuristic — may misclassify complex values
- Does not check variable values against external services (e.g., valid API key format)
- Production vs. development distinction requires file naming conventions

Files in this skill

  • SKILL.md5.4 KB
  • evals/cases.yaml3 KB
  • references/validation-rules.md2.5 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.