skills/justfile/SKILL.md
Create, edit, refactor, lint, and maintain Justfiles and `.just` module files using the `just` command runner. ALWAYS use this skill when the user mentions justfile, Justfile, just recipes, just modules, `.just` files, or asks to set up task automation with just. Also trigger when migrating a Makefile to just, adding recipes or modules to an existing Justfile, or organizing and documenting project commands. Covers house conventions, templates, namespacing by domain, dotenv, cross-platform support, and a structural lint. NOT FOR file-based build dependency graphs that need timestamp tracking (use make).
npx skillsauth add julianobarbosa/claude-code-skills justfileInstall 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.
just is a command runner (not a build system) that saves and runs project-specific commands in a
file called Justfile. It uses make-inspired syntax but is simpler and more portable, with none of
make's idiosyncrasies (.PHONY, tab sensitivity, implicit rules, timestamp tracking).
This skill enforces a consistent house style so every Justfile looks the same across projects.
The rules below are the authoritative convention; Tools/lint.ts validates the deterministic ones.
| Trigger | Workflow |
|---------|----------|
| "create a justfile", "set up just", "add a recipe/module" | Workflows/CreateJustfile.md |
| "migrate Makefile to just", "convert make to just" | Workflows/MigrateFromMake.md |
| "check/lint this justfile", "is this justfile correct" | Workflows/CheckJustfile.md |
| Scenario | Tool |
|----------|------|
| Project task automation (build, test, deploy, lint) | just |
| Cross-platform command runner | just |
| Actual file-based build dependencies (compile .c → .o) | make |
| Legacy projects already deep in make | make (or migrate) |
Patterns the model often generates incorrectly. Check output against this list.
| WRONG | RIGHT |
|-------|-------|
| justfile (lowercase) | Justfile (capital J) |
| mod docker (bare) | mod docker '.justfiles/docker.just' |
| Module at docker.just or just/docker.just | Module at .justfiles/docker.just |
| default: | _default: (underscore required) |
| @just --list | @just --list --unsorted (module) or --unsorted --list-submodules (root with modules) |
| env("NAME", "val") | env_var_or_default("NAME", "val") |
| Module file without the three-line header | Every file gets the full header |
| Module file without its own _default recipe | Every file gets its own _default |
| Module named after a tool (psql.just) | Module named after a concern (db.just) |
| Tests in docker.just because they run in a container | Tests in test.just — classify by purpose, not implementation |
| Root recipe duplicates module logic | Root shortcut delegates: build: docker-build |
| Ad-hoc names (run-tests, do-lint) | Standard names: test, lint, build, dev, fmt, check |
| Relative paths in module recipes (bash tests/run.sh) | Use source_directory() for absolute paths |
Justfile (capital J)..just module) MUST start with this three-line header:
#!/usr/bin/env just --justfile
set shell := ["bash", "-euo", "pipefail", "-c"]
set dotenv-load := true
Use set dotenv-load := false where appropriate, but the line must always be present._default as its first recipe:
# List all available recipes
_default:
@just --list --unsorted
The root Justfile with modules uses @just --list --unsorted --list-submodules. Module
files use @just --list --unsorted (no --list-submodules)..justfiles/<name>.just — never just/, never beside the root.mod name '.justfiles/name.just' — never bare mod name.env_var_or_default("NAME", "value") for variable defaults — never env().# doc comment on the line directly above it.# param - description (default: value)._.build: _lint test.db.just) not the tool (psql.just). The root Justfile is a thin orchestrator: _default, shortcut recipes, and project-wide recipes like check/clean.run-tests, do-lint, compile, format.root := source_directory() / ".." and reference files as {{root}}/tests/run.sh.A developer should be able to run just test, just dev, or just check in any project without guessing. Use these exact names; include only the ones that apply.
| Recipe | Purpose | Include when |
|--------|---------|--------------|
| dev | Start dev environment (server, watch, REPL) | Project has a dev loop |
| test | Run the test suite | Always |
| build | Build or compile | Project has a build step |
| lint | Run linters | Linters configured |
| fmt | Format code | Formatters configured |
| check | Run ALL quality gates (check: lint test) | Always |
| clean | Remove build artifacts, caches, generated files | Project produces output |
check is the meta-recipe — depend on the applicable gates and add format checks (cargo fmt --check, ruff format --check) as appropriate.
Group by domain, not tool. Classify by purpose: a test that runs in Docker is a testing recipe (test.just), not a Docker recipe. A migration that uses kubectl is a database recipe (db.just).
| Concern | Module | Typical recipes |
|---------|--------|-----------------|
| Development | dev.just | build, test, lint, fmt, bench |
| Testing | test.just | run, list, watch, coverage |
| Containers | docker.just | build, push, run, compose-up |
| CI/CD | ci.just | lint, deploy, release |
| Database | db.just | migrate, seed, reset, dump, restore |
| Infrastructure | infra.just | plan, apply, destroy |
| Kubernetes | k8s.just | apply, diff, rollback, logs |
| Documentation | docs.just | build, serve, publish |
Single-concern projects (e.g. a Go/Rust project with only build/test/lint/fmt) use one dev.just; the root still stays thin. Modules are self-contained: own variables, own _default, no cross-module recipe dependencies.
Templates.mdReferences/Syntax.mdReferences/Patterns.mdReferences/MakeMigration.mdAfter creating or editing ANY Justfile or .just module, run the structural lint and fix every failure:
bun Tools/lint.ts <project-dir>
It checks file naming, the three-line header, _default as first recipe, the --unsorted/--list-submodules flags, env_var_or_default() usage, doc comments on all recipes, explicit module import paths, and section order. Any FAIL is a bug — fix and re-run until clean. The lint cannot judge concern-based naming, self-containment, or standard-vocabulary use — verify those by inspection (see Workflows/CheckJustfile.md).
cd foo on one line and ls on the next runs ls in the original directory. Use a shebang recipe for multi-line scripts.set dotenv-load loads .env from the justfile directory, not the invocation directory — running just from a subdirectory loads the parent's .env. Use set dotenv-path to override.git_hash := \git rev-parse HEAD`runs git on everyjust` call, even for unrelated recipes. Slow on large repos; move inside the recipe if not needed globally.just deploy "my server" passes two args. Use set positional-arguments with "$@", or wrap as {{quote(target)}}.set shell := ["bash", "-c"] breaks set -euo pipefail semantics because each line is its own -c invocation — pipefail only applies within that line. Use shebang recipes for proper fail-fast scripts.just --list hides _-prefixed and [private] recipes but they're still callable — obscurity, not access control.[macos]/[linux] attributes silently skip the recipe on other OSes — running just install on Windows when only [linux]/[macos] variants exist exits 0 with no error, which looks like success.just --dry-run <recipe> to verify expansion.testing
Brief description of what this skill does. Include specific triggers - when should Claude use this skill? Example triggers, file types, or keywords that indicate this skill applies.
tools
Manage and troubleshoot PATH configuration in zsh. Use when adding tools to PATH (bun, nvm, Python venv, cargo, go), diagnosing "command not found" errors, validating PATH entries, or organizing shell configuration in .zshrc and .zshrc.local files.
tools
Zabbix monitoring system automation via API and Python. Use when: (1) Managing hosts, templates, items, triggers, or host groups, (2) Automating monitoring configuration, (3) Sending data via Zabbix trapper/sender, (4) Querying historical data or events, (5) Bulk operations on Zabbix objects, (6) Maintenance window management, (7) User/permission management
development
Operate YouTube Music via natural language. Search songs, artists, albums, playlists, lyrics, charts, recommendations, and control playback. Browse personal library, manage playlists, rate tracks, and inspect account info. Use this skill whenever the user asks about YouTube Music, wants to play music, manage playlists, search by song or artist name, inspect lyrics, or control playback.