claude/skills/make/SKILL.md
You cannot run build commands (cargo check, cargo clippy, go build, npm run build, just check, tsc, pytest, etc.) directly — hooks will block them and raw compiler output floods your context window. This skill is the ONLY way to verify code compiles, run linters, execute tests, or check formatting. It runs in a forked subagent that absorbs all verbose output and returns only structured file:line:col errors. Auto-detects build system (just, cargo, npm, go, make, cmake, gradle, maven, uv/python). Triggers automatically when you need to: check if code compiles after edits, verify a refactor didn't break anything, run clippy/eslint/ruff, run tests, check formatting, clean build artifacts, or fix a CI failure. Also triggers on /make, /build, /check, /compile. Subcommands: /make test, /make lint, /make fmt, /make clean. If a hook blocks a build command, invoke this skill immediately.
npx skillsauth add paulnsorensen/dotfiles makeInstall 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.
Run builds. Return signal, not noise.
Your job: execute a build/check command, absorb the full compiler output in your own context, and return ONLY structured errors and warnings to the caller. All the verbose log lines, progress bars, and passing-module output stay trapped here — never reaching the main context window.
| Invocation | Action |
|---|---|
| /make or no args | Detect build system, run default check/build |
| /make check | Alias for /make — type-check without full build |
| /make build | Full build (not just type-check) |
| /make test | Run test suite (detect framework, return pass/fail + failures) |
| /make lint | Run linter (clippy, ruff, eslint — stricter than check) |
| /make fmt | Run formatter in check mode (report unformatted files) |
| /make clean | Clean build artifacts |
| /make <file> | Check a specific file if the build system supports it |
Check the project root for marker files in priority order. Use the FIRST match:
| Marker | Tool | Default Command |
|---|---|---|
| Justfile | just | just check (or just build if no check recipe) |
| Cargo.toml | cargo | cargo check --message-format=short 2>&1 |
| package.json | npm/bun/pnpm | npm run build 2>&1 (if build script exists) |
| go.mod | go | go build ./... 2>&1 |
| pyproject.toml | python/uv | uv run mypy . 2>&1 or uv run python -m py_compile <file> |
| Makefile | make | make check 2>&1 (if check target exists, else make 2>&1) |
| CMakeLists.txt | cmake | cmake --build build 2>&1 |
| build.gradle* | gradle | ./gradlew build 2>&1 |
| pom.xml | maven | mvn compile -q 2>&1 |
Detection rules:
Justfile: read it to check which recipes exist. Prefer check > build > test.
If check wraps cargo check internally, that's fine — don't double-detect.Makefile: read it and check for check target first, then default target.package.json: read it and check scripts for a build entry. If none exists,
try tsc --noEmit for TypeScript projects (check for tsconfig.json).pyproject.toml: check if mypy is a dependency. If not, fall back to ruff check.uv run over bare python / pip / mypy (user preference).bun over npm if bun.lockb exists.pnpm over npm if pnpm-lock.yaml exists.If no standard marker file matches, read the project's CLAUDE.md (if it exists) and
scan for documented build/check/test commands. Look for sections like "Key Commands",
"Development", "Build", or similar headings. Common patterns to extract:
dots test, dots sync — custom project scriptsmake <target>, just <recipe> — documented but non-standard locations./scripts/build.sh — custom build scriptsIf CLAUDE.md documents a check/test/build command, use it and note the source:
✓ Build passed (dots test, from CLAUDE.md) — clean
If neither marker files nor CLAUDE.md yield a build command, report clearly and stop.
Run from the project root directory — cd into it first.
cd <project-root>
<build-command> 2>&1 | cat
echo "EXIT_CODE:$?"
The | cat forces non-interactive mode and strips most ANSI color codes. For stubborn
tools, pipe through sed 's/\x1b\[[0-9;]*m//g' as well.
Sandbox note: This skill runs as a forked subagent inheriting the parent's sandbox.
If the target project is outside the parent's sandbox write allowlist, build tools that
write artifacts (cargo → target/, npm → node_modules/) will fail. When this happens,
report it clearly — the caller should invoke /make from within the target project.
Extract errors and warnings into structured format. Match against these known patterns:
| Tool | Error Pattern | Example |
|---|---|---|
| Rust/cargo | error[EXXXX]: msg + --> file:line:col | error[E0425]: cannot find value |
| TypeScript/tsc | file(line,col): error TSXXXX: msg | src/app.ts(12,5): error TS2304 |
| Go | file:line:col: msg | main.go:15:2: undefined: foo |
| Python/mypy | file:line: error: msg [code] | app.py:10: error: incompatible type [arg-type] |
| ESLint | file:line:col error msg rule | src/app.js:5:3 error ... |
| GCC/Clang | file:line:col: error: msg | main.c:10:5: error: undeclared |
| Java/javac | file:line: error: msg | App.java:15: error: cannot find |
| Ruff | file:line:col: EXXXX msg | app.py:3:1: F401 unused import |
| Prettier | [error] file: msg | [error] src/app.ts: SyntaxError |
| Pre-commit | Various — parse each hook's output separately | Hook failures contain tool output |
Parsing rules:
error or warning near file pathsMulti-step commands (like make check running lock + pre-commit + mypy):
Use EXACTLY these templates. Do not improvise or add commentary.
✓ Build passed (<tool>) — clean
Or with warnings:
✓ Build passed (<tool>) — 0 errors, <N> warnings
Warnings (<N>):
<file>:<line>:<col> — <message> [<code>]
✗ Build failed (<tool>) — <N> errors, <N> warnings
Errors (<N>):
<file>:<line>:<col> — <message> [<code>]
<file>:<line>:<col> — <message> [<code>]
Warnings (<N>):
<file>:<line>:<col> — <message> [<code>]
⚠ No build system detected
Checked: Justfile, Cargo.toml, package.json, go.mod, pyproject.toml, Makefile, CMakeLists.txt
CLAUDE.md: <not found | no build commands documented>
✗ Build tool not available — <tool> is not installed
Detected: <marker file>
Expected command: <command>
⚠ Sandbox blocked <tool> — needs write access to <path>
Run /make from within the target project instead.
✗ Build failed (make check) — 1 error, 0 warnings
Errors (1):
src/optimizer.py:26:1 — Cannot find module "optuna" [import-not-found]
Skipped:
uv lock --locked (sandbox restriction)
pre-commit run -a (sandbox restriction)
... and <N> more errors... and <N> more warningsWhen invoked with a subcommand, read references/subcommands.md for the
detection rules, command mappings, and output templates for that subcommand.
target/, node_modules/.cache/)just Check ≠ just checktools
Reconstruct what a past coding-agent session was doing so you can resume it — goal, files touched, last verified state, and the next step — by querying the session logs. Use when the user says "what was I working on", "recover that session", "reconstruct where I left off", "resume my last session", "what did that session change", "rebuild context from logs", or invokes /work-recovery. Report-only — it never scores or judges. Do NOT use for usage scoring (that is /skill-improver, /tool-efficiency, /prompt-analytics) or one-off interactive log queries (that is /session-analytics).
development
Curate this repo's hallouminate wiki (.hallouminate/wiki/, the repo:dotfiles:wiki corpus) — add or update architecture pages, per-harness docs, and gotchas. Use when the user says "update the wiki", "document this in the wiki", "refresh the harness docs", "add a wiki page", "curate the wiki", "the wiki is stale", or invokes /wiki-curator. Also use at session end to write back a non-obvious decision or gotcha worth preserving. Grounds the existing wiki first, follows one-topic-per-file conventions, verifies every external doc URL before writing, and reindexes. Do NOT use for general code search (that is cheez-search) or for editing AGENTS.md command reference.
tools
Audit how a tool, command, or MCP server is actually used across coding-agent sessions and produce calibrated recommendations — tool-vs-task fit, error forensics, fix recommendations, permission friction, MCP health, and token economics. Use when the user says "tool efficiency", "am I using X efficiently", "audit tool usage", "why does X keep failing", "how do I fix this error", "what should I change", "permission friction", "is this MCP worth it", "tool error rate", "fix recommendations", or invokes /tool-efficiency. Do NOT use for auditing a skill or agent definition (that is /skill-improver) or for one-off interactive log queries (that is /session-analytics).
tools
Analyze how prompts and skill routing behave across coding-agent sessions and produce calibrated recommendations — prompt-pattern analysis, routing accuracy, and knowledge gaps. Use when the user says "analyze my prompts", "prompt patterns", "is routing working", "which skill should have fired", "knowledge gaps", "what do I keep asking", or invokes /prompt-analytics. Do NOT use for auditing a single skill/agent definition (that is /skill-improver), tool/MCP efficiency (that is /tool-efficiency), or one-off interactive log queries (that is /session-analytics).