claude/skills/justfile/SKILL.md
Create or migrate to a justfile (casey/just command runner) for any project. Use this skill when the user asks to add a justfile, replace a Makefile, set up project commands, create task runners, or mentions "just" in the context of build/dev workflows. Also trigger when you see a project with a Makefile that would benefit from just's simpler syntax, or when setting up a new project that needs common dev commands (build, test, lint, fmt). Covers Rust, Python, TypeScript/JavaScript, Go, and Ruby ecosystems. Do NOT use for CI pipeline configuration, Dockerfiles, or actual build system setup (cargo, webpack, etc.).
npx skillsauth add paulnsorensen/dotfiles 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.
Generate idiomatic justfiles for any project. Replace Makefiles and ad-hoc shell scripts with a clean, discoverable command runner.
.PHONY hacks — all recipes are commands, not file targetsjust --list gives instant discoverability with doc commentsScan the project root for ecosystem markers:
| File | Ecosystem | Reference |
|------|-----------|-----------|
| Cargo.toml | Rust | references/rust.md |
| pyproject.toml, setup.py, uv.lock | Python | references/python.md |
| package.json | TypeScript/JS | references/typescript.md |
| go.mod | Go | references/go.md |
| Gemfile | Ruby | references/ruby.md |
Read the relevant reference file for language-specific recipes.
If multiple markers exist (e.g., a Rust backend + TypeScript frontend), combine
patterns. Use modules (mod frontend, mod backend) for true monorepos.
Multi-ecosystem naming: When a project has multiple languages (e.g., Tauri with Rust + TypeScript), use ecosystem suffixes to disambiguate overlapping concerns:
test-rust, test-ts (not generic test that hides what runs)fmt-rust, fmt-ts (each ecosystem's formatter)lint-rust (clippy), lint-ts (eslint/biome)test: test-rust test-ts, fmt: fmt-rust fmt-tsdev, build, cleanLook for Makefile, Taskfile.yml, Rakefile, package.json scripts, or
shell scripts in scripts/ or bin/. If found:
Place justfile in the project root. Follow these conventions:
Structure order:
set dotenv-load, set shell, etc.)default: check or @just --list)_prefixed or [private])Recipe naming:
test-coverage, build-releasebuild, test, lint, deploy (not builder, tests)db-migrate, db-seed, db-reset--listDoc comments:
Every public recipe gets a comment on the line above it — this is what
just --list displays:
# Run the full test suite
test *args:
cargo test {{args}}
Parameters:
test filter=""run *args+args (1+ required) sparinglySettings to always include:
set dotenv-load := true
Add set shell := ["bash", "-uc"] only if recipes need bash-specific features
(arrays, process substitution). The default /bin/sh is fine for most recipes.
When recipes run inside an LLM agent's context, output verbosity = token cost.
Three universal levers, then escalate to references/rtk.md if needed:
@ prefix + tool flags (~60 → ~15 lines). Silences recipe echo; pass
--silent --no-audit --no-fund to npm to drop banner/audit/fund noise.
Skip coverage in the default recipe. Coverage tables are ~15 lines.
Use npm test (or cargo test) in build; keep test:coverage in
build-ci where the CI logs aren't paying per-token.
rtk wrappers (deterministic per-tool filters + hard-gate on failure).
See references/rtk.md for the shell-wrap pattern, rtk test/rtk err
gates, and the npm script-naming gotcha.
After creating the justfile:
CLAUDE.md — Add a "Key Commands" or "Common Tasks" section:
## Key Commands
This project uses [just](https://github.com/casey/just) as its command runner.
Run `just` to see all available recipes.
- `just` — List all available commands
- `just test` — Run tests
- `just lint` — Run linters
- `just fmt` — Format code
Only list the 4-6 most important recipes. Point to just --list for the rest.
README.md — Add a "Development" or "Getting Started" section:
## Development
### Prerequisites
- [just](https://github.com/casey/just) — `brew install just` / `cargo install just`
### Quick Start
```bash
just install # Install dependencies
just test # Run tests
just # See all available commands
Don't duplicate the full recipe list — `just --list` is self-documenting.
## Makefile Migration Table
| Makefile | justfile |
|----------|----------|
| `.PHONY: target` | (not needed) |
| `$(VAR)` | `{{var}}` |
| `$(shell cmd)` | `` `cmd` `` |
| `-include .env` | `set dotenv-load := true` |
| `ifeq ($(OS),Darwin)` | `if os() == "macos" { ... }` |
| `ifndef VAR` / `$(or ...)` | `env_var_or_default("VAR", "default")` |
| `make -C subdir` | `mod subdir` |
| `$(MAKE) target` | `just target` |
| `.DEFAULT_GOAL := help` | First recipe is default |
| `@cmd` (suppress echo) | `@cmd` (same) |
| Tab indentation | Any whitespace |
| `%:` pattern rules | Not applicable — just has no file targets |
## Key Syntax Reference
**Variables:**
```just
VERSION := "1.0.0"
GIT_HASH := `git rev-parse --short HEAD`
DB_URL := env_var_or_default("DATABASE_URL", "postgres://localhost/dev")
OPEN := if os() == "macos" { "open" } else { "xdg-open" }
Recipe attributes:
[confirm("Deploy to production?")]
deploy: build test
[macos]
open-docs:
open target/doc/index.html
[linux]
open-docs:
xdg-open target/doc/index.html
[private]
_setup:
mkdir -p tmp/
Modules (monorepo):
mod api # looks for api/justfile or api.just
mod web
mod? local # optional — no error if missing
# Usage: just api::test, just web::build
Shebang recipes (multi-line scripts):
analyze:
#!/usr/bin/env python3
import json
data = json.load(open("results.json"))
print(f"Total: {len(data)}")
set positional-arguments unless you have a strong reason — {{arg}} is clearermod) to split by concerncheck or cijust binary may not be on PATH — check with which just before generating recipes#!/usr/bin/env for portability across systemsdotenv-load exposes all env vars to all recipes — avoid for secrets-heavy projectsset positional-arguments changes how $1 works inside recipes — document when usedtools
Reconstruct what a past coding-agent session was doing so you can resume it — goal, files touched, last verified state, and the next step — by querying the session logs. Use when the user says "what was I working on", "recover that session", "reconstruct where I left off", "resume my last session", "what did that session change", "rebuild context from logs", or invokes /work-recovery. Report-only — it never scores or judges. Do NOT use for usage scoring (that is /skill-improver, /tool-efficiency, /prompt-analytics) or one-off interactive log queries (that is /session-analytics).
development
Curate this repo's hallouminate wiki (.hallouminate/wiki/, the repo:dotfiles:wiki corpus) — add or update architecture pages, per-harness docs, and gotchas. Use when the user says "update the wiki", "document this in the wiki", "refresh the harness docs", "add a wiki page", "curate the wiki", "the wiki is stale", or invokes /wiki-curator. Also use at session end to write back a non-obvious decision or gotcha worth preserving. Grounds the existing wiki first, follows one-topic-per-file conventions, verifies every external doc URL before writing, and reindexes. Do NOT use for general code search (that is cheez-search) or for editing AGENTS.md command reference.
tools
Audit how a tool, command, or MCP server is actually used across coding-agent sessions and produce calibrated recommendations — tool-vs-task fit, error forensics, fix recommendations, permission friction, MCP health, and token economics. Use when the user says "tool efficiency", "am I using X efficiently", "audit tool usage", "why does X keep failing", "how do I fix this error", "what should I change", "permission friction", "is this MCP worth it", "tool error rate", "fix recommendations", or invokes /tool-efficiency. Do NOT use for auditing a skill or agent definition (that is /skill-improver) or for one-off interactive log queries (that is /session-analytics).
tools
Analyze how prompts and skill routing behave across coding-agent sessions and produce calibrated recommendations — prompt-pattern analysis, routing accuracy, and knowledge gaps. Use when the user says "analyze my prompts", "prompt patterns", "is routing working", "which skill should have fired", "knowledge gaps", "what do I keep asking", or invokes /prompt-analytics. Do NOT use for auditing a single skill/agent definition (that is /skill-improver), tool/MCP efficiency (that is /tool-efficiency), or one-off interactive log queries (that is /session-analytics).