.claude/skills/configure-verification/SKILL.md
Auto-detect test, lint, typecheck, and build commands from package.json, Makefile, and other project config. Use during project setup or when build tooling changes. Runs silently — no prompts.
npx skillsauth add benjaminshoemaker/ai_coding_project_base configure-verificationInstall 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.
Auto-detect verification commands and write .claude/verification-config.json.
Runs silently with no user prompts — best-effort detection only.
Copy this checklist and track progress:
Configure Verification Progress:
- [ ] Detect project directory and context
- [ ] Directory guard
- [ ] Detect package manager
- [ ] Auto-detect commands from project sources
- [ ] Conditional dev server detection
- [ ] Ensure .gitignore protection
- [ ] Write verification-config.json
- [ ] Output one-line summary
Use the current working directory by default.
If $1 is provided, treat $1 as the working directory and read files under
$1 instead.
Determine working context:
*/features/*:
*/plans/greenfield*:
Confirm PROJECT_ROOT exists and is writable. If not, stop and report the error.
Determine package manager from lockfile presence (check in this order):
| Lockfile | Package Manager |
|----------|----------------|
| pnpm-lock.yaml | pnpm |
| yarn.lock | yarn |
| package-lock.json | npm |
If none found, default to npm if package.json exists, otherwise no package manager.
Scan project sources in priority order. First source wins per command type. Parse files as structured data (JSON for package.json, not grep).
package.json scripts — Parse JSON, check for these script names:
test → {pm} test or {pm} run testlint → {pm} run linttypecheck or type-check or tsc → {pm} run typecheck (use actual script name)build → {pm} run buildcoverage or test:coverage → {pm} run coverage (use actual script name)mutation or test:mutation or stryker → {pm} run {actual-script-name}Makefile — Look for targets: test, lint, typecheck/check, build, coverage
make {target}Taskfile.yml — Look for tasks with matching names
task {name}justfile — Look for recipes with matching names
just {name}Fallback: README.md / CONTRIBUTING.md — Scan for code blocks containing
test/lint/build commands. Only use if no structured source found a command.
Important: Only record commands that were actually found. Do not guess or synthesize commands. If a command type is not found in any source, omit it from the config entirely.
Only run this section if the active execution plan contains BROWSER: criteria.
Resolve the active execution plan in this order:
EXECUTION_PLAN.md in the working directoryplans/greenfield/EXECUTION_PLAN.md in the working directory
(e.g., BROWSER:DOM, BROWSER:VISUAL, etc.).If browser criteria exist, look for dev server scripts in package.json:
dev → {pm} run devstart → {pm} run startserve → {pm} run serveIf found, include in config:
{
"devServer": {
"command": "{pm} run dev",
"url": "http://localhost:3000",
"startupSeconds": 10
}
}
Use port 3000 as default. If the script content in package.json contains a
different port (e.g., --port 5173), use that instead.
If no browser criteria in the active execution plan, omit devServer entirely.
Check and protect verification-related files:
If .gitignore exists, ensure these entries are present:
.env.verification.claude/verification/auth-state.jsonIf entries are missing, append them:
# Verification credentials (never commit)
.env.verification
.claude/verification/auth-state.json
If .gitignore doesn't exist, skip (don't create one just for this).
Write .claude/verification-config.json with only the keys where commands were
found. Always include browser.tool: "auto".
Example — full detection:
{
"commands": {
"test": "npm test",
"lint": "npm run lint",
"typecheck": "npm run typecheck",
"build": "npm run build",
"coverage": "npm run coverage"
},
"browser": {
"tool": "auto"
}
}
Example — partial detection (no typecheck or coverage found):
{
"commands": {
"test": "npm test",
"lint": "npm run lint",
"build": "npm run build"
},
"browser": {
"tool": "auto"
}
}
Example — with dev server (browser criteria detected):
{
"commands": {
"test": "pnpm test",
"lint": "pnpm run lint"
},
"devServer": {
"command": "pnpm run dev",
"url": "http://localhost:5173",
"startupSeconds": 10
},
"browser": {
"tool": "auto"
}
}
Example — nothing detected:
{
"commands": {},
"browser": {
"tool": "auto"
}
}
Do NOT include auth, deployment, or devServer (unless browser criteria
detected a dev server). These are deferred to /phase-checkpoint when needed.
| Situation | Action |
|-----------|--------|
| PROJECT_ROOT does not exist or is not writable | Stop immediately and report the path error to the user |
| No package.json, Makefile, Taskfile.yml, or justfile found | Write config with empty commands object; report "no commands detected" |
| package.json exists but contains invalid JSON | Report parse error with file path; skip package.json and try next source |
| Lockfile detected but package manager binary is missing | Record the detected package manager but warn the user it is not installed |
| .claude/ directory does not exist for writing config | Create .claude/ directory before writing verification-config.json |
Print a single summary line:
Verification config: detected {list of found commands}. Missing: {list of not found}.
Examples:
Verification config: detected test, lint, build. Missing: typecheck, coverage.
Verification config: detected test, lint, typecheck, build, coverage, devServer. Missing: none.
Verification config: no commands detected.
testing
Audit project alignment with VISION.md, identify SDLC gaps, and generate feature proposals. Use when reviewing strategic direction or planning new features.
development
Run code-verification on a specific task. Use to verify a single task's acceptance criteria after implementation.
testing
Resolve Vercel preview deployment URL for the current git branch. Invoked by browser-verification when deployment.enabled is true, or directly to check deployment status. Use to check deployment status or when browser verification needs a URL.
tools
Discover and sync all toolkit-using projects with the latest skills. Use when skills are modified, after the post-commit hook reminds you, or to batch-sync multiple projects.