just

install
source · Clone the upstream repo
git clone https://github.com/casey/just
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/casey/just "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/just" ~/.claude/skills/casey-just-just && rm -rf "$T"
manifest: skills/just/SKILL.md
source content

Just

Discovery

  • just --dump
    Print justfile
  • just --evaluate
    Print variable values
  • just --help
    Print detailed command-line syntax help
  • just --list
    Print recipes with descriptions
  • just --show <RECIPE>
    Print recipe source
  • just --summary
    Print recipes without descriptiosn

Execution

  • just
    Run default recipe
  • just <RECIPE>
    Run specific recipe
  • just <RECIPE> <ARG1> <ARG2
    Run recipe with arguments

Syntax

executable := 'main'

# compile main.c
compile:
  cc main.c -o {{ executable }}

# run main
run: compile
  ./{{ executable }}

# run test
test name: compile
  ./bin/test {{ name }}

# start webserver
serve port='8080':
  python -m http.server {{port}}

# publish current tag
publish:
  #!/usr/bin/env bash
  set -euxo pipefail
  tag=`git describe --tags --exact-match`
  ./bin/check-tag $tag
  git push origin $tag

Notes

The comment proceeding a recipe is used as its doc-comment, and included in

just --list
.

By default, each line of a recipe runs in a fresh shell. Recipes whose bodies start with

#!
are written to a file and executed as a script.

Commonly used commands and scripts should be turned into

just
recipes.