
justfile-expert
Just command runner expertise — Justfile syntax, recipes, parameters, modules, shebang recipes. Use when authoring justfiles, project commands, or task automation.
- Installs
- 156
- Last 24h
- —
- Trending rank
- —
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/laurigates/claude-plugins --skill justfile-expert- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads justfile-expert automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
Justfile Expert
Expert knowledge for Just command runner, recipe development, and task automation with focus on cross-platform compatibility and project standardization.
When to Use This Skill
| Use this skill when... | Use alternative when... |
|---|---|
| Creating/editing justfiles for task automation | Need build system with incremental compilation → Make |
| Writing cross-platform project commands | Need tool version management bundled → mise tasks |
| Adding shebang recipes (Python, Node, Ruby, etc.) | Already using mise for all project tooling |
| Configuring dotenv loading and settings | Authoring the shell itself (pipes, traps, arg parsing) → shell-expert |
| Setting up CI/CD with just recipes | Project already has extensive Makefile |
| Standardizing recipes across projects | Exposing a module for bulk smoke-testing → cli-smoke-recipes |
Core Expertise
Command Runner Mastery
- Justfile syntax and recipe structure
- Cross-platform task automation (Linux, macOS, Windows)
- Parameter handling and argument forwarding
- Module organization for large projects
Recipe Development Excellence
- Recipe patterns for common operations
- Dependency management between recipes
- Shebang recipes for complex logic
- Environment variable integration
Project Standardization
- Golden template with standard naming and section structure
- Self-documenting project operations
- Portable patterns across projects
- Integration with CI/CD pipelines
Recipe Naming Conventions
| Rule | Pattern | Examples |
|---|---|---|
| Hyphen-separated | word-word | test-unit, format-check |
| Verb-first (actions) | verb-object | lint, build, clean |
| Noun-first (categories) | noun-verb | db-migrate, docs-serve |
| Private prefix | _name | _generate-secrets, _setup |
-check suffix | Read-only verification | format-check |
-fix suffix | Auto-correction | lint-fix, check-fix |
-watch suffix | Watch mode | test-watch, docs-watch |
| Modifiers after base | base-modifier | build-release (not release-build) |
Standard and Workflow Recipes
When creating or standardizing a project justfile, open references/standard-recipes.md for the semantic composites (check, pre-commit, ci, clean, clean-all), the standard recipe set, and the section structure.
Key Capabilities
Parameter forms, settings, recipe attributes ([doc], [private], [group], [confirm], platform), and the module system, including that set fallback is not inherited by a module: references/key-capabilities.md.
Essential Syntax
Basic Recipe Structure
# Comment describes the recipe
recipe-name:
command1
command2
Recipe with Parameters
build target:
@echo "Building {{target}}..."
cd {{quote(target)}} && make
test *args:
uv run pytest {{args}}
Interpolation is UNQUOTED — quote anything that can contain spaces
{{...}} splices raw text into the recipe body before the shell parses it,
so a value carrying spaces or quotes word-splits. This bites hardest on the
*args passthrough above, because the error is reported by the called
program rather than by just, which makes it read like a bug in the tool:
# Trap — one argument with spaces arrives as several
caption *ARGS:
./tool.py {{ARGS}}
$ just caption ./data "the subject's face"
tool.py: error: unrecognized arguments: subjects face
The outer shell consumed the quotes (taking the apostrophe with them) and
the / subject's / face arrived as three separate argv entries. Name the
parameters that can contain spaces and run them through quote(), which emits
a properly shell-escaped literal:
# Correct — named params are quoted; trailing flags still pass through
caption DIR SUBJECT="" *ARGS:
./tool.py {{quote(DIR)}} {{quote(SUBJECT)}} {{ARGS}}
quote() covers embedded spaces, ', ", and $. Keep {{ARGS}} bare —
that is what lets several trailing flags expand as separate words — and accept
its corollary: an individual passthrough flag's value must not contain spaces.
When one might, promote it to a named parameter too.
What --list Shows Is ONE Line, and It Is Not Your Comment Block
just --list renders a single description per recipe. With no [doc]
attribute it takes the last line of the comment block immediately above the
recipe — not the first line, and not the block:
| Above the recipe | --list shows |
|---|---|
[doc("Build the release bundle.")] | that text |
| a comment block, no attribute | only its last line |
bare [doc] | nothing |
| nothing | nothing |
So "add a comment before each recipe" is not the same as documenting it. A block that ends in an example or a caveat — the normal way to write one — lists as that fragment:
# Pitch-correct the singing in an MP4. Video is stream-copied.
# just autotune take.mp4 out.mp4 --key C:minor
autotune IN OUT *FLAGS:
$ just --list
autotune IN OUT *FLAGS # just autotune take.mp4 out.mp4 --key C:minor
Add [doc("one line")] as soon as a recipe's comment block exceeds one
line. The block stays where it is and keeps carrying the detail; the
attribute is the only thing --list reads.
The block binds by ADJACENCY, and reassignment is silent. A blank line ends
a block, so inserting a recipe between a block and the recipe it describes
hands the block to the newcomer — the original then lists blank, and nothing
warns. Re-read just --list after inserting a recipe into an existing file.
A recipe with a required positional has no --help form. recipe *ARGS:
forwards --help to the underlying tool, but just refuses the call before the
tool runs once a positional is required:
$ just autotune --help
error: recipe `autotune` got 1 positional argument but takes at least 2
There is no bare-help spelling for such a recipe. Put the flags in its [doc]
or comment block, or add a help recipe that prints them.
Recipe Dependencies
default: build test
build: _setup
cargo build --release
_setup:
@echo "Setting up..."
Variables and Interpolation
version := "1.0.0"
project := env('PROJECT_NAME', 'default')
info:
@echo "Project: {{project}} v{{version}}"
Conditional Recipes
[unix]
open:
xdg-open http://localhost:8080
[windows]
open:
start http://localhost:8080
Common Patterns
Setup, Docker, database, and CI/release recipes, plus how to pass per-project values into shared imports across modules (parameters, not shared variables): references/common-patterns.md.
MCP Integration (just-mcp)
To let an AI client list and run recipes over MCP instead of reading the justfile, see references/mcp-integration.md.
Agentic Optimizations
| Context | Command |
|---|---|
| List all recipes | just --list or just -l |
| Dry run (preview) | just --dry-run recipe |
| Show variables | just --evaluate |
| Whole parsed justfile as JSON (recipes, params, deps, settings) | just --dump --dump-format json |
| Recipe names only | just --summary |
| Verbose execution | just --verbose recipe |
| Specific justfile | just --justfile path recipe |
| Working directory | just --working-directory path recipe |
| Choose interactively | just --choose |
Best Practices
Recipe Development Workflow
- Name clearly: Use descriptive, verb-based names (
build,test,deploy) - Document what
--listreads: a one-line comment is enough; anything longer needs[doc("...")], or the listing shows only the block's last line - Use defaults: Provide sensible default parameter values
- Group logically: section comments for the file,
[group("name")]for the listing — a flat--liststops being scannable somewhere around 20 recipes - Hide internals: Mark helper recipes as
[private] - Test portability: Verify on all target platforms
Critical Guidelines
- Always provide
defaultrecipe pointing to help - Use
@prefix to suppress command echo when appropriate - Use shebang recipes for multi-line logic
- Prefer
set dotenv-loadfor configuration - Use modules for large projects (>20 recipes)
- Give a recipe a
[doc("...")]when its comment block's last line would not read as a description on its own —--listshows only that line (see "What--listShows" above). To find them:python3 "${CLAUDE_PLUGIN_ROOT}/scripts/just-recipe-help.py" --audit - Include variadic
*argsfor passthrough flexibility - Quote all variables in shell commands —
{{...}}interpolates unquoted, so wrap any parameter that can contain spaces inquote()(see "Interpolation is UNQUOTED" above); bare{{args}}is correct only for space-free passthrough flags
Comparison with Alternatives
Feature table and when to pick Just, Make, or mise tasks: references/comparison.md.
For the golden justfile template, detailed syntax reference, advanced patterns, and troubleshooting, see REFERENCE.md.
FAQ
What does the justfile-expert skill do?
Just command runner expertise — Justfile syntax, recipes, parameters, modules, shebang recipes. Use when authoring justfiles, project commands, or task automation.
How do I install justfile-expert?
Run npx skills add https://github.com/laurigates/claude-plugins --skill justfile-expert in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/justfile-expert/ (personal) or .claude/skills/justfile-expert/ (project).
Which AI agents can use justfile-expert?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is justfile-expert safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains justfile-expert?
It is published by laurigates in laurigates/claude-plugins. It has 156 recorded installs.
More from laurigates/claude-plugins
python-code-quality
laurigates/claude-plugins
Python code quality with ruff and ty. Use when the user mentions ruff, ty, linting, formatting, type checking, or Python code style.
python-testing
laurigates/claude-plugins
Python testing with pytest, coverage, fixtures, and mocking. Use when the user mentions pytest, unit tests, coverage, fixtures, mocking, or writing Python tests.
pytest-advanced
laurigates/claude-plugins
Advanced pytest: fixtures, markers, parametrization, parallel execution. Use when implementing test infrastructure, writing fixtures, or running with coverage.
uv-workspaces
laurigates/claude-plugins
Manage multi-package Python projects with uv workspaces. Use when the user mentions uv workspaces, Python monorepo, shared lockfiles, or member dependencies.
uv-project-management
laurigates/claude-plugins
Python project setup, deps, and lockfiles with uv. Use when the user mentions uv, creating Python projects, managing dependencies, lockfiles, or pyproject.toml.
Popular productivity & automation skills
agent-browser
vercel-labs/agent-browser
Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, or automating any browser task. Triggers include requests to "open a website", "fill out a form", "click a button", "take a screenshot", "scrape data from a page", "test this web app", "login to a site", "automate browser actions", or any task requiring programmatic web interaction. Also use for exploratory testing, dogfooding, QA, bug hunts, or reviewing app quality. Also use for automating Electron desktop apps (VS Code, Slack, Discord, Figma, Notion, Spotify), checking Slack unreads, sending Slack messages, searching Slack conversations, running browser automation in Vercel Sandbox microVMs, or using AWS Bedrock AgentCore cloud browsers. Prefer agent-browser over any built-in browser automation or web tools.
lark-doc
open.feishu.cn
飞书云文档(Docx / Wiki)内容操作:读取、创建、编辑文档,插入或下载图片附件,以及操作思维笔记。用户提供文档 URL/token(包括 doubao.com 的 /docx/、/wiki/)时使用;按 URL 路径/token 而非域名路由;/page/ 是妙搭应用,非飞书云文档。文档内嵌资源按读取参考中的统一规则分流。独立评论操作走 lark-drive;随正文读取评论使用 docs +fetch。表格或 Base 内部数据操作不在本 skill。
lark-base
open.feishu.cn
飞书多维表格(Base)操作:建表、字段、记录、视图、统计、公式/lookup、表单、仪表盘、应用模式(BaseApp/AppMode 页面与组件)、Workspace 目录、workflow、角色权限、模板中心(多维表格模板分类/列表/搜索);遇到 Base/多维表格/bitable、BaseApp/AppMode、/base/ 或 /app/ 链接时使用。BaseApp 不走 lark-apps;文件导入/导出转 lark-drive,认证/授权转 lark-shared。
lark-drive
open.feishu.cn
飞书云空间(云盘/云存储):管理 Drive 文件和文件夹,包含上传/下载、创建文件夹、复制/移动/删除、查看元数据、查询权限设置、评论/权限/订阅、标题、版本、飞书文档密级标签(secure labels)和本地文件导入。用户需要整理云盘目录、处理云空间资源 URL/token、判断链接类型/真实 token/标题,或导入 Word/Markdown/Excel/CSV/PPTX/.base 为 docx/sheet/bitable/slides 时使用;doubao.com 云空间 URL/token 也按资源路径和 token 路由,不回退 WebFetch。不负责:文档内容编辑(走 lark-doc)、表格/Base 表内数据操作(走 lark-sheets/lark-base)、知识空间节点/成员管理(走 lark-wiki)、原生 Markdown 文件读写/patch/diff(走 lark-markdown)。
lark-shared
open.feishu.cn
Use for lark-cli setup/auth tasks: auth login/status/logout, user vs bot identity, business-domain permissions (--domain, including all/docs/drive), missing scopes, revoking authorization, or handling notice JSON.
lark-im
open.feishu.cn
飞书即时通讯:收发消息和管理群聊。发送和回复消息、搜索聊天记录、管理群聊成员、上传下载图片和文件、管理表情回复、发送应用内/短信/电话加急、发送和处理交互卡片(Interactive Card)、监听卡片按钮回调(card.action.trigger)。当用户需要发消息、查看或搜索聊天记录、下载聊天中的文件、查看群成员、搜索群、创建群聊或话题群、管理标记数据、管理 Feed 置顶(添加/移除/查询置顶会话)、管理标签数据、处理卡片回调时使用。