{"id":"3ef987a4-5594-4109-b6ba-3b413e52c2b1","shortId":"fG9Sgz","kind":"skill","title":"makefile","tagline":"Use when editing Makefile or GNUmakefile, adding development targets, wiring uv commands, defining .PHONY rules, creating self-documenting help, or fixing Make recipe safety.","description":"# Makefile Skill\n\n<workflow>\n\n## Overview\n\nAll projects should use a consistent `Makefile` structure to ensure developer familiarity. The standard includes:\n\n- **Configuration**: `.ONESHELL`, `.EXPORT_ALL_VARIABLES`, strict shell flags.\n- **Presentation**: Standard colors (`BLUE`, `GREEN`, `RED`, `YELLOW`) and icons (`ℹ`, `✓`, `⚠`, `✖`).\n- **Help System**: Self-documenting `help` target parsing `##` comments.\n- **Standard Targets**: `install`, `upgrade`, `clean`, `test`, `lint`.\n\n## Standard Template\n\nCopy this template to the root of new projects:\n\n<example>\n\n```makefile\nSHELL := /bin/bash\n# =============================================================================\n# Variables\n# =============================================================================\n\n.DEFAULT_GOAL:=help\n.ONESHELL:\n.EXPORT_ALL_VARIABLES:\nMAKEFLAGS += --no-print-directory\n\n# Silence output if VERBOSE is not set\nifndef VERBOSE\n.SILENT:\nendif\n\n# Define colors and formatting\nBLUE := $(shell printf \"\\033[1;34m\")\nGREEN := $(shell printf \"\\033[1;32m\")\nRED := $(shell printf \"\\033[1;31m\")\nYELLOW := $(shell printf \"\\033[1;33m\")\nNC := $(shell printf \"\\033[0m\")\nINFO := $(shell printf \"$(BLUE)ℹ$(NC)\")\nOK := $(shell printf \"$(GREEN)✓$(NC)\")\nWARN := $(shell printf \"$(YELLOW)⚠$(NC)\")\nERROR := $(shell printf \"$(RED)✖$(NC)\")\n\n.PHONY: help\nhelp:                                               ## Display this help text for Makefile\n @awk 'BEGIN {FS = \":.*##\"; printf \"\\nUsage:\\n  make \\033[36m<target>\\033[0m\\n\"} /^[a-zA-Z0-9_-]+:.*?##/ { printf \"  \\033[36m%-15s\\033[0m %s\\n\", $$1, $$2 } /^##@/ { printf \"\\n\\033[1m%s\\033[0m\\n\", substr($$0, 5) } ' $(MAKEFILE_LIST)\n\n\n# =============================================================================\n# Developer Utils\n# =============================================================================\n\n.PHONY: install\ninstall:                                            ## Install dependencies for local development\n @echo \"${INFO} Installing dependencies...\"\n @uv sync\n @echo \"${OK} Installation complete\"\n\n.PHONY: upgrade\nupgrade:                                            ## Upgrade all dependencies\n @echo \"${INFO} Updating dependencies... 🔄\"\n @uv lock --upgrade\n @uv run pre-commit autoupdate\n @echo \"${OK} Dependencies updated 🔄\"\n\n.PHONY: clean\nclean:                                              ## Cleanup temporary build artifacts\n @echo \"${INFO} Cleaning working directory...\"\n @rm -rf .pytest_cache .ruff_cache build/ dist/ .coverage coverage.xml htmlcov/\n @find . -name '*.egg-info' -exec rm -rf {} +\n @find . -name '__pycache__' -exec rm -rf {} +\n @echo \"${OK} Working directory cleaned\"\n\n.PHONY: destroy\ndestroy:                                            ## Destroy local environment\n @echo \"${INFO} Destroying environment... 🗑️\"\n @rm -rf .venv\n @echo \"${OK} Environment destroyed\"\n\n\n# =============================================================================\n# Quality & Testing\n# =============================================================================\n\n.PHONY: lint\nlint:                                               ## Run all linting checks\n @echo \"${INFO} Running linting... 🔍\"\n @uv run pre-commit run --all-files\n @echo \"${OK} Linting passed ✨\"\n\n.PHONY: test\ntest:                                               ## Run tests\n @echo \"${INFO} Running tests... 🧪\"\n @uv run pytest\n @echo \"${OK} Tests passed ✨\"\n```\n\n</example>\n\n## Best Practices\n\n1. **Emojis**: Use emojis consistent with the tool being used:\n    - 📦 Packaging/Install\n    - 🔄 Updates\n    - 🧹 Cleanup\n    - 🗑️ Destruction\n    - 🔍 Linting/Inspection\n    - 🧪 Testing\n    - ✨ Success\n    - 🚀 Execution/Server\n    - 📊 Analytics/Benchmarks\n    - 🦀 Rust\n    - 🐍 Python\n\n2. **Output**: Always use the `${INFO}`, `${OK}`, `${WARN}`, `${ERROR}` variables to prefix status messages.\n3. **Silence**: Use `.SILENT:` (conditioned on `VERBOSE`) to keep the output clean for the user, revealing commands only when debugging.\n\n</workflow>\n\n## Official References\n\n- <https://www.gnu.org/software/make/manual/make.html>\n- <https://www.gnu.org/software/make/manual/html_node/One-Shell.html>\n- <https://www.gnu.org/software/make/manual/html_node/Special-Targets.html>\n- <https://www.gnu.org/software/make/manual/html_node/Phony-Targets.html>\n- <https://lists.gnu.org/archive/html/info-gnu/2023-02/msg00011.html>\n- <https://pubs.opengroup.org/onlinepubs/9699919799/utilities/make.html>\n\n## Shared Styleguide Baseline\n\n- Use shared styleguides for generic language/framework rules to reduce duplication in this skill.\n- [General Principles](https://github.com/cofin/flow/blob/main/templates/styleguides/general.md)\n- [Bash](https://github.com/cofin/flow/blob/main/templates/styleguides/languages/bash.md)\n- Keep this skill focused on tool-specific workflows, edge cases, and integration details.\n\n<guardrails>\n## Guardrails\n\nAdd guardrails instructions here.\n</guardrails>\n\n<validation>\n## Validation\n\nAdd validation instructions here.\n</validation>","tags":["makefile","flow","cofin","agent-skills","ai-agents","beads","claude-code","codex","cursor","developer-tools","gemini-cli","opencode"],"capabilities":["skill","source-cofin","skill-makefile","topic-agent-skills","topic-ai-agents","topic-beads","topic-claude-code","topic-codex","topic-cursor","topic-developer-tools","topic-gemini-cli","topic-opencode","topic-plugin","topic-slash-commands","topic-spec-driven-development"],"categories":["flow"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/cofin/flow/makefile","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add cofin/flow","source_repo":"https://github.com/cofin/flow","install_from":"skills.sh"}},"qualityScore":"0.455","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 11 github stars · SKILL.md body (4,958 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:07:37.810Z","embedding":null,"createdAt":"2026-04-23T13:03:59.989Z","updatedAt":"2026-05-18T19:07:37.810Z","lastSeenAt":"2026-05-18T19:07:37.810Z","tsv":"'-15':200 '/archive/html/info-gnu/2023-02/msg00011.html':438 '/bin/bash':92 '/cofin/flow/blob/main/templates/styleguides/general.md)':462 '/cofin/flow/blob/main/templates/styleguides/languages/bash.md)':466 '/onlinepubs/9699919799/utilities/make.html':441 '/software/make/manual/html_node/one-shell.html':429 '/software/make/manual/html_node/phony-targets.html':435 '/software/make/manual/html_node/special-targets.html':432 '/software/make/manual/make.html':426 '0':217 '033':124,130,136,142,148,187,189,198,202,210,213 '0m':149,190,203,214 '1':125,131,137,143,206,367 '1m':211 '2':207,388 '3':402 '31m':138 '32m':132 '33m':144 '34m':126 '36m':188,199 '5':218 '9':196 'a-za-z0':192 'ad':8 'add':482,487 'all-fil':342 'alway':390 'analytics/benchmarks':385 'artifact':270 'autoupd':259 'awk':180 'baselin':444 'bash':463 'begin':181 'best':365 'blue':56,121,153 'build':269,282 'cach':279,281 'case':477 'check':331 'clean':76,265,266,273,305,413 'cleanup':267,379 'color':55,118 'command':13,418 'comment':71 'commit':258,340 'complet':240 'condit':406 'configur':45 'consist':35,371 'copi':81 'coverag':284 'coverage.xml':285 'creat':17 'debug':421 'default':94 'defin':14,117 'depend':227,234,246,250,262 'destroy':307,308,309,314,322 'destruct':380 'detail':480 'develop':9,40,221,230 'directori':105,275,304 'display':174 'dist':283 'document':20,67 'duplic':454 'echo':231,237,247,260,271,301,312,319,332,345,354,361 'edg':476 'edit':4 'egg':290 'egg-info':289 'emoji':368,370 'endif':116 'ensur':39 'environ':311,315,321 'error':166,396 'exec':292,298 'execution/server':384 'export':47,98 'familiar':41 'file':344 'find':287,295 'fix':23 'flag':52 'focus':470 'format':120 'fs':182 'general':458 'generic':449 'github.com':461,465 'github.com/cofin/flow/blob/main/templates/styleguides/general.md)':460 'github.com/cofin/flow/blob/main/templates/styleguides/languages/bash.md)':464 'gnumakefil':7 'goal':95 'green':57,127,159 'guardrail':481,483 'help':21,63,68,96,172,173,176 'htmlcov':286 'icon':61 'ifndef':113 'includ':44 'info':150,232,248,272,291,313,333,355,393 'instal':74,224,225,226,233,239 'instruct':484,489 'integr':479 'keep':410,467 'language/framework':450 'lint':78,326,327,330,335,347 'linting/inspection':381 'list':220 'lists.gnu.org':437 'lists.gnu.org/archive/html/info-gnu/2023-02/msg00011.html':436 'local':229,310 'lock':252 'make':24,186 'makefil':1,5,27,36,90,179,219 'makeflag':101 'messag':401 'n':185,191,205,209,215 'name':288,296 'nc':145,155,160,165,170 'new':88 'no-print-directori':102 'nusag':184 'offici':422 'ok':156,238,261,302,320,346,362,394 'oneshel':46,97 'output':107,389,412 'overview':29 'packaging/install':377 'pars':70 'pass':348,364 'phoni':15,171,223,241,264,306,325,349 'practic':366 'pre':257,339 'pre-commit':256,338 'prefix':399 'present':53 'principl':459 'print':104 'printf':123,129,135,141,147,152,158,163,168,183,197,208 'project':31,89 'pubs.opengroup.org':440 'pubs.opengroup.org/onlinepubs/9699919799/utilities/make.html':439 'pycach':297 'pytest':278,360 'python':387 'qualiti':323 'recip':25 'red':58,133,169 'reduc':453 'refer':423 'reveal':417 'rf':277,294,300,317 'rm':276,293,299,316 'root':86 'ruff':280 'rule':16,451 'run':255,328,334,337,341,352,356,359 'rust':386 'safeti':26 'self':19,66 'self-docu':18,65 'set':112 'share':442,446 'shell':51,91,122,128,134,140,146,151,157,162,167 'silenc':106,403 'silent':115,405 'skill':28,457,469 'skill-makefile' 'source-cofin' 'specif':474 'standard':43,54,72,79 'status':400 'strict':50 'structur':37 'styleguid':443,447 'substr':216 'success':383 'sync':236 'system':64 'target':10,69,73 'templat':80,83 'temporari':268 'test':77,324,350,351,353,357,363,382 'text':177 'tool':374,473 'tool-specif':472 'topic-agent-skills' 'topic-ai-agents' 'topic-beads' 'topic-claude-code' 'topic-codex' 'topic-cursor' 'topic-developer-tools' 'topic-gemini-cli' 'topic-opencode' 'topic-plugin' 'topic-slash-commands' 'topic-spec-driven-development' 'updat':249,263,378 'upgrad':75,242,243,244,253 'use':2,33,369,376,391,404,445 'user':416 'util':222 'uv':12,235,251,254,336,358 'valid':486,488 'variabl':49,93,100,397 'venv':318 'verbos':109,114,408 'warn':161,395 'wire':11 'work':274,303 'workflow':475 'www.gnu.org':425,428,431,434 'www.gnu.org/software/make/manual/html_node/one-shell.html':427 'www.gnu.org/software/make/manual/html_node/phony-targets.html':433 'www.gnu.org/software/make/manual/html_node/special-targets.html':430 'www.gnu.org/software/make/manual/make.html':424 'yellow':59,139,164 'z0':195 'za':194 'ℹ':62,154","prices":[{"id":"79121f14-bbb9-4751-a20b-7db074ae1251","listingId":"3ef987a4-5594-4109-b6ba-3b413e52c2b1","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"cofin","category":"flow","install_from":"skills.sh"},"createdAt":"2026-04-23T13:03:59.989Z"}],"sources":[{"listingId":"3ef987a4-5594-4109-b6ba-3b413e52c2b1","source":"github","sourceId":"cofin/flow/makefile","sourceUrl":"https://github.com/cofin/flow/tree/main/skills/makefile","isPrimary":false,"firstSeenAt":"2026-04-23T13:03:59.989Z","lastSeenAt":"2026-05-18T19:07:37.810Z"}],"details":{"listingId":"3ef987a4-5594-4109-b6ba-3b413e52c2b1","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"cofin","slug":"makefile","github":{"repo":"cofin/flow","stars":11,"topics":["agent-skills","ai-agents","beads","claude-code","codex","context-driven-development","cursor","developer-tools","gemini-cli","opencode","plugin","slash-commands","spec-driven-development","subagents","tdd","workflow"],"license":"apache-2.0","html_url":"https://github.com/cofin/flow","pushed_at":"2026-04-27T19:07:26Z","description":"Context-Driven Development toolkit for AI agents — spec-first planning, TDD workflow, and Beads integration.","skill_md_sha":"40fb827e68ba8483eccfc06626653382c1e53718","skill_md_path":"skills/makefile/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/cofin/flow/tree/main/skills/makefile"},"layout":"multi","source":"github","category":"flow","frontmatter":{"name":"makefile","description":"Use when editing Makefile or GNUmakefile, adding development targets, wiring uv commands, defining .PHONY rules, creating self-documenting help, or fixing Make recipe safety."},"skills_sh_url":"https://skills.sh/cofin/flow/makefile"},"updatedAt":"2026-05-18T19:07:37.810Z"}}