skills/env-inspector/SKILL.md
Safely inspect .env files by showing key names and clearly non-sensitive values while redacting anything that looks like a secret. Best-effort heuristic redaction (keyword block + token-pattern blocklist + Shannon-entropy check + value allowlist) — not a cryptographic guarantee. Use when you need to understand a project's environment configuration without exposing credentials.
npx skillsauth add jwa91/agentskills env-inspectorInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Reads .env files and emits a redacted view: keys are always shown, values are shown only when they look unambiguously safe. Anything ambiguous is replaced with <redacted>.
bash .agents/skills/env-inspector/scripts/env-safe-read.sh /path/to/.env
Inspect every .env* in a project (excluding examples):
for f in $(find . -maxdepth 3 -name '.env*' -not -name '.env.example' -not -path '*/node_modules/*'); do
echo "--- $f ---"
bash .agents/skills/env-inspector/scripts/env-safe-read.sh "$f"
echo ""
done
Four layers, all default-deny. A value is shown only if it survives all of them:
KEY|SECRET|TOKEN|PASSWORD|PASS|CREDENTIAL|AUTH|PRIVATE|SIGNING|HASH|SALT|ENCRYPTION|JWT|BEARER|COOKIE|CSRF|SESSION|DSN|WEBHOOK_URL are redacted regardless of value.sk-…, pk_live_…, ghp_…, github_pat_…, eyJ… JWT, AKIA…, xox[abprs]-…, AIza…, glpat-…, npm_…, dckr_pat_…) are redacted.@ credentials and without long random query strings.MY_PIN=hunter12) can still slip through.The skill ships with a PreToolUse hook (hooks/path-gate.sh) that:
env-safe-read.sh to run only against paths inside $CLAUDE_PROJECT_DIR..env pattern... traversal.The hook is a guardrail, not the primary defense — the redaction in the script is what protects you. The hook just ensures the script can't be aimed at, say, /etc/postgresql/.env by an over-eager agent.
If your harness doesn't honor skill-level hooks frontmatter, copy the matcher block into your project .claude/settings.json or run the script manually.
bash and awk (entropy calc). No Python or jq dependency.sed for JSON parsing to avoid a jq dep — fragile but works for the standard Claude Code tool-call shape.data-ai
Release the current project to the personal Homebrew tap from repo-local release config. Use when the user says "release", "ship", "cut a version", "publish", "make a new tag", or asks how to make a new version available via jwa91/tap.
tools
Use the `jwa-harden` CLI for secret-safe command execution, env-template discovery, and signing/notarization preflight checks. Trigger when a command needs secrets, when `.env.template` or 1Password references are involved, or before signed release flows.
documentation
Modify or extend the `jwa-tobrew` scaffolding system — the templates that `init` writes into target projects. Trigger when the user says "add a new scaffold kind", "change what init writes", "update the templates", or asks how the embedded templates are wired.
development
Detect and fix drift between a project and the conventions encoded in `jwa-tobrew`, prek, and the tap ADRs. Trigger when the user says "align", "any drift", "verify conventions", or asks why a particular file/symlink/script is required.