SKILL.md
Check — Is This Project Ready to Run?
One pass tells you whether a repo is actually set up to run, and exactly what's missing if not. The deliverable is a ✓/✗ checklist across localhost / staging / prod, built by discovering the project's own expected setup — never by reciting generic advice.
North star: no one should discover a missing .env key or an unwired environment by hitting a runtime error — this surfaces it up front, with the fix.
Step 0 — Discover what SHOULD exist (never hardcode)
- Env contract —
.env.example (or env.example): the list of vars the app expects. This is the
source of truth for "what must be set."
- Environments doc — the repo's README/CLAUDE.md should describe how localhost, staging, and prod
are each configured (compose file, secret manager, deploy target). Missing this is itself a ✗.
- Run path —
make help / grep -E '^[a-z-]+:.##' Makefile, docker-compose.yml, or
package.json scripts: the real targets to set up and run locally.
- Cloud auth — does the local stack need an SSO/CLI login before it can start (AWS/GCP/Azure profile)?
Step 1 — Localhost readiness
Report ✓/✗ for each:
.env.example to .env.
``bash comm -23 <(grep -oE '^[A-Z][A-Z0-9]+' .env.example | sort -u) \ <(grep -oE '^[A-Z][A-Z0-9]+' .env 2>/dev/null | sort -u) `` Any line printed is a missing key (✗).
node_modules / venv present?).
Step 2 — Staging + prod wiring
For each non-local environment, confirm it's actually wired (don't assume parity with localhost):
A var set locally but unset in staging/prod is a latent outage.
an unset secret can't crash boot.
This is a static check of the contract — it reads config sources, it does not deploy.
Step 3 — Report
Emit a compact checklist grouped by environment, ✓/✗ each, and for every ✗ the one command or edit that fixes it. End with a one-line verdict: ready to run locally? What blocks it? If there's no environments doc, recommend adding one — it's what makes this check repeatable next time.
Anti-patterns
- Assuming staging/prod parity from a green localhost — the unset-in-prod var is the classic outage.
- Eyeballing
.env vs .env.example instead of diffing the key sets.
- Treating an undocumented environment setup as "nothing to check" — it means the contract is unwritten.
- Printing secret values in the report. Report key names and presence, never the value.