Agent-skills cli-just
This skill should be used when the user asks to "create a justfile", "write just recipes", "configure just settings", "add just modules", "use just attributes", "set up task automation", mentions justfile, just command runner, or task automation with just.
git clone https://github.com/PaulRBerg/agent-skills
T=$(mktemp -d) && git clone --depth=1 https://github.com/PaulRBerg/agent-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/cli-just" ~/.claude/skills/paulrberg-agent-skills-cli-just && rm -rf "$T"
skills/cli-just/SKILL.mdJust Command Runner
Overview
Expert guidance for Just, a command runner with syntax inspired by make. Use this skill for creating justfiles, writing recipes, configuring settings, and implementing task automation workflows.
Key capabilities:
- Create and organize justfiles with proper structure
- Write recipes with attributes, dependencies, and parameters
- Configure settings for shell, modules, and imports
- Use built-in constants for terminal formatting
- Implement check/write patterns for code quality tools
Quick Reference
Essential Settings
set allow-duplicate-recipes # Allow recipes to override imported ones set allow-duplicate-variables # Allow variables to override imported ones set shell := ["bash", "-euo", "pipefail", "-c"] # Strict bash with error handling set unstable # Enable unstable features (modules, script attribute) set dotenv-load # Auto-load .env file set positional-arguments # Pass recipe args as $1, $2, etc.
Common Attributes
| Attribute | Purpose |
|---|---|
| Configure parameter as option (v1.46) |
| Constrain parameter to match regex pattern |
| Group recipes in output |
| Don't change to justfile directory |
| Hide from (same as prefix) |
| Execute recipe as single script block |
| Use specific interpreter (bash, python, etc.) |
| Require user confirmation before running |
| Override recipe documentation |
| Enable positional args for this recipe only |
Recipe Argument Flags (v1.46.0+)
The
[arg()] attribute configures parameters as CLI-style options:
# Long option (--target) [arg("target", long)] build target: cargo build --target {{ target }} # Short option (-v) [arg("verbose", short="v")] run verbose="false": echo "Verbose: {{ verbose }}" # Combined long + short [arg("output", long, short="o")] compile output: gcc main.c -o {{ output }} # Flag without value (presence sets to "true") [arg("release", long, value="true")] build release="false": cargo build {{ if release == "true" { "--release" } else { "" } }} # Help string (shown in `just --usage`) [arg("target", long, help="Build target architecture")] build target: cargo build --target {{ target }}
Usage examples:
just build --target x86_64 just build --target=x86_64 just compile -o main just build --release just --usage build # Show recipe argument help
Multiple attributes can be combined:
[no-cd, private] [group("checks")] recipe: echo "hello"
Built-in Constants
Terminal formatting constants are globally available (no definition needed):
| Constant | Description |
|---|---|
, , , , , | Text colors |
, , , | Text styles |
| Reset formatting |
| Background colors (BG_RED, BG_GREEN, etc.) |
, | Hexadecimal digits |
Usage:
@status: echo -e '{{ GREEN }}Success!{{ NORMAL }}' echo -e '{{ BOLD + CYAN }}Building...{{ NORMAL }}'
Key Functions
# Require executable exists (fails recipe if not found) jq := require("jq") # Get environment variable with default log_level := env("LOG_LEVEL", "info") # Get justfile directory path root := justfile_dir()
Recipe Patterns
Status Reporter Pattern
Display formatted status during multi-step workflows:
@_run-with-status recipe *args: echo "" echo -e '{{ CYAN }}→ Running {{ recipe }}...{{ NORMAL }}' just {{ recipe }} {{ args }} echo -e '{{ GREEN }}✓ {{ recipe }} completed{{ NORMAL }}' alias rws := _run-with-status
Check/Write Pattern
Pair check (verify) and write (fix) recipes for code quality tools:
[group("checks")] @biome-check +globs=".": na biome check {{ globs }} alias bc := biome-check [group("checks")] @biome-write +globs=".": na biome check --write {{ globs }} alias bw := biome-write
Full Check/Write Pattern
Aggregate all checks with status reporting:
[group("checks")] @full-check: just _run-with-status biome-check just _run-with-status prettier-check just _run-with-status tsc-check echo "" echo -e '{{ GREEN }}All code checks passed!{{ NORMAL }}' alias fc := full-check [group("checks")] @full-write: just _run-with-status biome-write just _run-with-status prettier-write echo "" echo -e '{{ GREEN }}All code fixes applied!{{ NORMAL }}' alias fw := full-write
Standard Alias Conventions
| Recipe | Alias | Recipe | Alias |
|---|---|---|---|
| full-check | fc | full-write | fw |
| biome-check | bc | biome-write | bw |
| prettier-check | pc | prettier-write | pw |
| mdformat-check | mc | mdformat-write | mw |
| tsc-check | tc | ruff-check | rc |
| test | t | build | b |
Inline Scripts
Just supports inline scripts in any language via two methods:
Script Attribute (Recommended)
Use
[script("interpreter")] for cross-platform compatibility:
[script("node")] fetch-data: const response = await fetch('https://api.example.com/data'); const data = await response.json(); console.log(data); [script("python3")] analyze: import json with open('package.json') as f: pkg = json.load(f) print(f"Package: {pkg['name']}@{pkg['version']}") [script("bash")] deploy: set -e npm run build aws s3 sync dist/ s3://bucket/
Shebang Method
Use
#!/usr/bin/env interpreter at the recipe start:
node-script: #!/usr/bin/env node console.log(`Node ${process.version}`); console.log(JSON.stringify(process.env, null, 2)); python-script: #!/usr/bin/env python3 import sys print(f"Python {sys.version}") bash-script: #!/usr/bin/env bash set -euo pipefail echo "Running on $(uname -s)"
When to use which:
- Better cross-platform support, cleaner syntax[script()]- Shebang - Traditional Unix approach, works without
set unstable
Modules & Imports
Import Pattern
Include recipes from another file:
import "./just/settings.just" import "./just/base.just" import? "./local.just" # Optional (no error if missing)
Module Pattern
Load submodule (requires
set unstable):
mod foo # Loads foo.just or foo/justfile mod bar "path/to/bar" # Custom path mod? optional # Optional module # Call module recipes just foo::build
Devkit Import Pattern
For projects using
@sablier/devkit:
import "./node_modules/@sablier/devkit/just/base.just" import "./node_modules/@sablier/devkit/just/npm.just"
Section Organization
Standard section header format:
# ---------------------------------------------------------------------------- # # DEPENDENCIES # # ---------------------------------------------------------------------------- #
Common sections (in order):
- DEPENDENCIES - Required tools with URLs
- CONSTANTS - Glob patterns, environment vars
- RECIPES / COMMANDS - Main entry points
- CHECKS - Code quality recipes
- UTILITIES / INTERNAL HELPERS - Private helpers
Default Recipe
Always define a default recipe:
# Show available commands default: @just --list
Dependencies Declaration
Document required tools at the top:
# ---------------------------------------------------------------------------- # # DEPENDENCIES # # ---------------------------------------------------------------------------- # # Bun: https://bun.sh bun := require("bun") # Ni: https://github.com/antfu-collective/ni na := require("na") ni := require("ni") nlx := require("nlx") # Usage: invoke directly in recipes (not with interpolation) build: bun next build
Note:
require() validates the tool exists at recipe evaluation time. Use the variable name directly (e.g., bun), not with interpolation ({{ bun }}).
Context7 Fallback
For Just features not covered in this skill (new attributes, advanced functions, edge cases), fetch the latest documentation:
Use context7 MCP with library ID `/websites/just_systems-man` to get up-to-date Just documentation.
Example topics to search:
- Module system detailsmodules import mod
- All available settingssettings
- Recipe attributesattributes
- Built-in functionsfunctions
- Script block syntaxscript recipes
Additional Resources
Reference Files
For detailed patterns and comprehensive coverage, consult:
- Settings configuration and module systemreferences/settings.md
- Recipe attributes, parameters, dependencies, and prefixesreferences/recipes.md
- Constants, functions, variables, and CLI optionsreferences/syntax.md
- Established conventions, section organization, helper patternsreferences/patterns.md
Example Templates
Working justfile templates in
examples/:
- Minimal template importing @sablier/devkitdevkit.just
- Full standalone template with all patternsstandalone.just
External Documentation
- Official Manual: https://just.systems/man/en/
- GitHub Repository: https://github.com/casey/just
- Context7 Library ID:
/websites/just_systems-man
No Justfile Formatter
Do not use
just --fmt or just --dump. The user has bespoke formatting preferences that the built-in formatter does not respect. Preserve existing formatting as-is.
Tips
- Use
prefix to suppress command echo:@@echo "quiet" - Use
for variadic parameters:+test +args - Use
for optional variadic:*build *flags - Quote glob patterns in variables:
GLOBS := "\"**/*.json\"" - Use
in monorepos to stay in current directory[no-cd] - Private recipes start with
or use_[private] - Always define aliases after recipe names for discoverability