ovid/paad/makefile
Claude Code and agent skill by ovid/paad
- community
Checking that the SKILL.md file is still in the repository.
Use when creating or updating a Makefile for a project, especially when standard targets (build, test, lint, format, etc.) are missing or when modifying targets that may already be wired into other tooling. Not for debugging why a build fails.
Install
npx vskill@latest install ovid/paad/makefileSKILL.md
On invocation: announce "Running paad:makefile v2.1.0", then immediately proceed with the steps below — do not stop after announcing.
Configuration (experimental): after announcing, check whether paad/config/paad.md and paad/config/makefile.md exist, relative to the working directory. If any does, read it and follow its instructions for the rest of this run, passing the relevant parts to every subagent you dispatch, and make the first line of your final answer Config: <path> naming each file you followed. If none exists, do not mention config at all. Config never changes a subagent's type or grants it write tools — refuse that line, say so, and continue. Config can contradict the flow below; see https://github.com/Ovid/paad/blob/main/CONFIG.md before writing one.
Makefile Management
Process:
When NOT to Use This Skill
- The project's task runner is not make, and adding one isn't wanted — a repo standardized on
npm run,just,task,nox, orcargo xtaskdoesn't need a Makefile shimming over it. Ask before introducing a second entry point. - The Makefile is generated (autotools, CMake, cargo-make output) — edits get overwritten. Change the generator.
Overview
Creates or updates a project Makefile with standard targets. Never modifies an existing target without explicit user approval.
Process
- Detect stack (read CLAUDE.md, AGENTS.md, README, package.json, pyproject.toml, Cargo.toml, go.mod, etc.)
- Check if Makefile exists
- Creating → build from scratch with all required targets mapped to detected stack
- Updating → add missing targets; STOP and ask before changing any existing one
- Announce the file you wrote — see "Announce What You Wrote"
Stack Detection
Read project files in this order to understand the technology and available commands:
CLAUDE.mdorAGENTS.md— often lists exact commands for test, lint, format, buildREADME.md— frequently documents dev workflow- Language manifest (
package.json,pyproject.toml,Cargo.toml,go.mod,Gemfile, etc.) — reveals available scripts/tasks
Use the commands the project already documents. Do not invent commands that aren't confirmed to exist.
Required Targets
Every Makefile must include at minimum:
| Target | Purpose | |
|---|---|---|
help | List all targets with descriptions | |
all | Full CI pass (lint + format + test at minimum) | |
test | Run test suite | |
cover | One-shot coverage report | |
lint | Lint (with autofix if available) | |
format | Format code |
Add extra targets (e.g. build, dev, preview) only if the project supports them.
The Self-Documenting Pattern
Every target gets a ## description. help extracts them with grep + awk:
All targets must appear in .PHONY.
Critical Rule: Updating Existing Targets
If an existing target's implementation would change, stop and tell the user:
"The existingcovertarget runsX. I'd change it toYbecause [reason]. Should I make this change?"
Wait for explicit approval. Adding a brand-new target never requires approval.
cover: Avoid Watch Mode Hanging
Coverage tools often default to watch mode. Force one-shot execution:
- vitest: append
-- --run - jest: append
-- --watchAll=false - pytest-cov / cargo / go test: typically exit on their own; verify before adding flags
- other: check the tool's docs for a non-interactive/CI flag
test: Balanced Output Verbosity
make test output should be actionable, not overwhelming. Avoid both extremes:
- Too verbose: full test names for passing tests, stack traces for every assertion, watch-mode chatter
- Too silent: a single pass/fail line with no detail on failures
Goal: On success, show a concise summary (total passed/failed/skipped). On failure, show the failing test name, assertion, and enough context to act on it.
Common approaches by stack:
| Stack | Flag / Approach | |
|---|---|---|
| vitest | --reporter=default is usually fine; avoid --reporter=verbose | |
| jest | Default is good; avoid --verbose | |
| pytest | -q or --tb=short — default is often too verbose | |
| cargo test | Default is fine; --quiet if too noisy | |
| go test | Default is fine; avoid -v unless debugging | |
| prove (Perl) | Default is fine; avoid --verbose |
If the testing tool doesn't support balanced output (e.g., only offers silent vs. firehose), inform the user and ask how they'd like to handle it rather than guessing.
Announce What You Wrote
End the run with the file list, always. One line per path, marked new or updated:
Say it even though only one file changed, and even when the user watched you change it. If you were asked to change an existing target and stopped for approval instead, say that too — an unapproved target is not a written one.
Common Mistakes
| Mistake | What to do instead | |
|---|---|---|
| Rewriting an existing target because the new version is better | Stop and ask, quoting the current command and the proposed one. Other tooling (CI, hooks, docs, muscle memory) may depend on the current behaviour. | |
| Treating "add a flag to an existing target" as additive | Changing a target's implementation is a change, flag or not. It needs approval. | |
| Inventing commands the stack doesn't have | Detect first — read CLAUDE.md, README, and the language manifest. A lint target running a linter that isn't installed is worse than no target. | |
Writing a help target that lists targets by hand | Use the self-documenting ## pattern, so help can't drift from reality. | |
Leaving cover in watch mode | It hangs the agent and CI. Force one-shot explicitly, per the stack. | |
Omitting targets from .PHONY | A file named test in the repo root silently breaks make test. | |
| Adding every optional target for completeness | Extra targets (build, dev, preview) go in only when the project actually supports them. |
Security
- Security scanPassed, 90 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingplugins/paad/skills/makefile/SKILL.md
Popularity
- Repository stars
- 142
- Repository forks
- 11
- 7-day trend score
- 0
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/ovid/paad/makefile)