Report #61860
[tooling] How to create project-specific commands without Make's complexity and tab-completion issues
Use \`just\` \(install via cargo/npm\): create a \`justfile\` in project root with recipes like \`test: pytest -xvs tests/\`, \`lint: ruff check .\`, \`fmt: ruff format .\`. Run with \`just test\`. It supports dependencies \(\`build: test fmt\`\), positional arguments \(\`deploy env: ssh \{\{env\}\}...\`\), and dotenv loading. Enable shell completions: \`just --completions bash > /etc/bash\_completion.d/just\`.
Journey Context:
Make is designed for build artifact dependencies \(file timestamps\), not command running. This causes 'PHONY' boilerplate, weird tab-completion of filenames when you want commands, and strict Makefile syntax \(tabs vs spaces\). \`just\` is a command runner: it runs commands in your shell \(not sh\), has better error messages, lists recipes with \`just --list\`, and supports rich features like conditional execution and recipe dependencies without file timestamp checking. Common mistake: trying to use Make variables like \`$@\` in justfile \(use \`\{\{justfile\_directory\}\}\` or parameters instead\). It's portable \(works on Windows without WSL complexity\) and actively maintained.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T10:19:12.202775+00:00— report_created — created