Agent skill

just-automation-practices

Best practices for using just command runner and task automation in development workflows.

Stars 163
Forks 31

Install this agent skill to your Project

npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/productivity/just-automation-practices

SKILL.md

Just automation practices

Purpose

Guide for using the just command runner for task automation, covering recipe design, variable handling, and cross-platform development.

When to use

This skill activates when:

  • Creating Justfiles
  • Writing build/test automation
  • Defining development workflows
  • Setting up task dependencies
  • Cross-platform automation

Core concepts

Basic recipe

just
# Run tests
test:
    uv run pytest

# Run with arguments
test-file file:
    uv run pytest {{file}}

# Default recipe (runs when just called without arguments)
default: lint test

Recipe with dependencies

just
# Dependencies run first
build: lint test
    uv run python -m build

# Clean before build
clean-build: clean build

Variables

Setting variables

just
# Simple variables
python := "uv run python"
pytest := "uv run pytest"

# Using variables
test:
    {{pytest}} tests/

# Environment variables
export PYTHONPATH := "src"

test:
    {{pytest}} tests/

Built-in functions

just
# Current directory
project_dir := justfile_directory()

# Parent directory
parent := parent_directory(justfile_directory())

# Environment with default
python := env_var_or_default("PYTHON", "python3")

Arguments and parameters

Positional arguments

just
# Required argument
test file:
    uv run pytest {{file}}

# Optional with default
test file="tests/":
    uv run pytest {{file}}

# Variadic (all remaining args)
test *args:
    uv run pytest {{args}}

Named parameters

just
# Named with defaults
build target="release" output="dist":
    echo "Building {{target}} to {{output}}"

Conditionals

just
# Conditional execution
test:
    #!/usr/bin/env bash
    if [[ -f "tests/integration" ]]; then
        uv run pytest tests/integration
    fi

# Using just's if
python := if os() == "windows" { "python" } else { "python3" }

Multi-line recipes

just
# With shebang
setup:
    #!/usr/bin/env bash
    set -euo pipefail

    echo "Setting up environment..."
    uv sync
    echo "Done!"

# Default shell recipes
install:
    uv sync
    echo "Dependencies installed"

Common patterns

Development workflow

just
# Install dependencies
install:
    uv sync

# Format code
format:
    uv run ruff format .

# Lint code
lint:
    uv run ruff check .
    uv run basedpyright

# Run tests
test *args:
    uv run pytest {{args}}

# Full check before commit
check: format lint test

# Clean artifacts
clean:
    rm -rf dist/ .pytest_cache/ .coverage htmlcov/

Parameterized builds

just
# Build with options
build target="release":
    #!/usr/bin/env bash
    case "{{target}}" in
        release)
            uv run python -m build
            ;;
        dev)
            uv pip install -e .
            ;;
        *)
            echo "Unknown target: {{target}}"
            exit 1
            ;;
    esac

Environment management

just
# Set environment for recipes
set dotenv-load := true

# Use .env file
test:
    uv run pytest

# Override environment
test-ci:
    CI=true uv run pytest

Cross-platform

OS detection

just
# Different commands per OS
open_browser := if os() == "macos" {
    "open"
} else if os() == "windows" {
    "start"
} else {
    "xdg-open"
}

docs:
    {{open_browser}} docs/_build/html/index.html

Path handling

just
# Cross-platform paths
project_dir := justfile_directory()
src_dir := project_dir / "src"
tests_dir := project_dir / "tests"

Organization

List recipes

bash
# Show available recipes
just --list

# Show recipe with description
just --show test

Documentation

just
# Recipe descriptions appear in --list
# Run all tests with coverage
test:
    uv run pytest --cov

# Format code using ruff
format:
    uv run ruff format .

Grouping with aliases

just
# Main recipe
test-all:
    uv run pytest

# Aliases for convenience
alias t := test-all
alias tests := test-all

Checklist

  • Default recipe defined
  • Recipes have descriptions (comments)
  • Variables used for repeated values
  • Dependencies properly declared
  • Cross-platform compatible (if needed)
  • Error handling in complex recipes

Additional resources:

Didn't find tool you were looking for?

Be as detailed as possible for better results