justfile-author
Use this skill when authoring or refactoring a justfile (and matching Makefile wrapper) for one of Nick's projects. Triggers when the user asks to "create a justfile", "add a justfile to this project", "set up just for…", "wire up tmux services", "scaffold the task runner", or when working in a repo that lacks a justfile but obviously needs one. Produces a justfile using zsh syntax with the standard svc-* tmux service family, the canonical build/lint/dev/test recipes, a thin Makefile passthrough wrapper that auto-installs just, and per-service tx-start.sh helpers. Do NOT use for editing existing third-party justfiles or non-Nick projects unless the user explicitly opts in.
Best use case
justfile-author is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Use this skill when authoring or refactoring a justfile (and matching Makefile wrapper) for one of Nick's projects. Triggers when the user asks to "create a justfile", "add a justfile to this project", "set up just for…", "wire up tmux services", "scaffold the task runner", or when working in a repo that lacks a justfile but obviously needs one. Produces a justfile using zsh syntax with the standard svc-* tmux service family, the canonical build/lint/dev/test recipes, a thin Makefile passthrough wrapper that auto-installs just, and per-service tx-start.sh helpers. Do NOT use for editing existing third-party justfiles or non-Nick projects unless the user explicitly opts in.
Teams using justfile-author should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/justfile-author/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How justfile-author Compares
| Feature / Agent | justfile-author | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Use this skill when authoring or refactoring a justfile (and matching Makefile wrapper) for one of Nick's projects. Triggers when the user asks to "create a justfile", "add a justfile to this project", "set up just for…", "wire up tmux services", "scaffold the task runner", or when working in a repo that lacks a justfile but obviously needs one. Produces a justfile using zsh syntax with the standard svc-* tmux service family, the canonical build/lint/dev/test recipes, a thin Makefile passthrough wrapper that auto-installs just, and per-service tx-start.sh helpers. Do NOT use for editing existing third-party justfiles or non-Nick projects unless the user explicitly opts in.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
Related Guides
SKILL.md Source
# Justfile Author
## Overview
Generate a justfile (and matching Makefile + tx-start helpers) following Nick's
project conventions: zsh shell, DRY parameterized helpers, svc-* tmux service
family wired through `cortex tmux`, and standard quality recipes
(`build`, `lint`, `dev`, `test`, `typecheck`, `ci`, `clean`).
## When to use this skill
- A repo lacks a justfile and the user wants one.
- A justfile exists but is missing the svc-* family, the Makefile wrapper,
or the standard quality recipes.
- The user asks to add a new service window (e.g., `svc-worker`) to an
existing justfile.
- The user asks to refactor a justfile to be more DRY or to align with
the conventions captured here.
Skip this skill when:
- Editing third-party / open-source justfiles (their conventions own).
- The user has explicitly chosen `make`, `npm scripts`, or another runner
for this project.
## Reference example
`/Users/nick/Developer/Facet/justfile` and `/Users/nick/Developer/Facet/Makefile`
are the canonical reference. When in doubt, mirror their shape.
## Workflow
### Step 1 — Inspect the project
Before writing anything, read the project to determine:
1. **Project slug** — derive from the repo directory basename.
2. **Stack and package manager** — what language(s), which lockfile.
3. **Service catalog** — what long-running processes the dev runs locally.
4. **Existing tooling** — what build/test/lint commands the project
already uses (do not invent new ones).
5. **Runtime activation needs** — nvm, asdf, uv, etc.
Consult `references/inspection-checklist.md` for the full detection table
and the exact slug-normalization rules.
### Step 2 — Choose the recipe block
Pull the right language reference into context:
| Stack | Reference |
| ------ | ----------------------------- |
| Node | `references/recipes-node.md` |
| Rust | `references/recipes-rust.md` |
| Python | `references/recipes-python.md`|
| Go | `references/recipes-go.md` |
For polyglot repos, read multiple references and combine. For stacks not
listed, mirror the structure of the closest listed stack and substitute
the native commands.
### Step 3 — Choose the service catalog
Consult `references/service-patterns.md` for the full svc-* surface area
and the rules for when to add a new service window. Every detected
service gets a parallel pair of recipes (foreground + svc-) and a
`tx-start-<role>.sh` wrapper.
### Step 4 — Emit the files
Use `assets/justfile.tmpl`, `assets/Makefile.tmpl`, and
`assets/tx-start.sh.tmpl` as the structural starting points. These are
not literal templates — read them, then write the project's actual files
with the inspection results substituted and the irrelevant scaffolding
deleted.
Required substitutions in `justfile.tmpl`:
| Placeholder | Value |
| ------------------- | ------------------------------------------------------ |
| `{{PROJECT_TITLE}}` | Human-readable project name (e.g., `Facet`). |
| `{{PROJECT_SLUG}}` | Normalized slug (lowercase, underscores). |
| `{{INSTALL_CMD}}` | From the language recipe block. |
| `{{DEV_CMD}}` | From the language recipe block. |
| `{{BUILD_CMD}}` | From the language recipe block. |
| `{{TYPECHECK_CMD}}` | From the language recipe block. |
| `{{LINT_CMD}}` | From the language recipe block (omit if not configured).|
| `{{TEST_CMD}}` | From the language recipe block. |
| `{{TEST_FILE_CMD}}` | From the language recipe block. |
| `{{TEST_WATCH_CMD}}`| From the language recipe block. |
| `{{CLEAN_CMD}}` | Project-specific build artifacts. |
In `Makefile.tmpl`, also keep the `.PHONY` list and the passthrough
recipe block in sync with the recipes actually emitted in the justfile —
the catch-all rule pattern is intentionally NOT used; an explicit list
keeps `make help` honest.
For each service, copy `tx-start.sh.tmpl` to
`scripts/tx-start-<role>.sh`, uncomment the relevant runtime activation
block, and replace `{{SERVICE_CMD}}` with the actual launch command.
Make the script executable: `chmod +x scripts/tx-start-<role>.sh`.
### Step 5 — Validate
After writing the files, run these checks before declaring completion:
1. `just --list` — must succeed and show every recipe.
2. `make help` — must show the passthrough list.
3. For each `svc-<role>` recipe: confirm a matching `tx-start-<role>.sh`
exists, is executable, and has the right activation block uncommented.
4. `just ci` — should be runnable end-to-end (don't actually run it
unless the user wants to; just confirm the deps resolve).
5. Confirm `set shell := ["zsh", "-c"]` is present and that no recipe
uses bash-specific syntax that would break under zsh.
If any check fails, fix it before reporting done.
## Style rules (non-negotiable)
These rules apply to every justfile produced by this skill:
- **Header**: comment block with project name, install hint, usage hint.
- **Settings**: `set dotenv-load := false` and `set shell := ["zsh", "-c"]`.
- **Project identity**: a `project` justfile variable holding the
normalized slug, used to derive `svc_session` (via `env("TMUX_SESSION",
project)`) and every `tmux_<role>_window` variable. Do NOT hardcode the
session name as a string literal — go through `project` so renaming the
project means changing one line.
- **Default recipe**: `default: @just --list`.
- **DRY service recipes**: every `svc-<role>` delegates to `_svc-start`;
every `svc-stop-<role>` delegates to `_svc-stop`. Do not inline the
tmux logic into individual service recipes.
- **Standard targets**: `install`, `dev`, `build`, `typecheck`, `lint`,
`test`, `test-file`, `test-watch`, `ci`, `clean` — emit every one that
the project's tooling supports; omit the rest with no placeholder.
- **`ci` recipe**: composes the static-check recipes — at minimum
`typecheck`, `lint`, `test` (add `fmt-check` for Rust/Go projects).
- **Comments**: one short line per recipe explaining intent. Skip if the
recipe name is self-explanatory (e.g., `clean:`).
## Style rules for the Makefile
- `SHELL := /bin/bash` and `JUST_DEST ?= $(HOME)/bin`.
- `default: help` showing every passthrough target.
- Single block listing every passthrough recipe; `read -p` prompt to
install just on first use.
- `test-file` (and any other arg-bearing recipe) gets its own block that
forwards `FILE=...` as a positional just arg.
- `install-just` cascade: brew → cargo → snap → official curl script,
with `JUST_DEST` PATH advice if falling back to the script.
## Style rules for tx-start scripts
- `#!/usr/bin/env bash` and `set -euo pipefail`.
- Resolve `ROOT_DIR` from `${BASH_SOURCE[0]}` so the script works from
any cwd.
- Activate the runtime if the project requires a specific version
(otherwise leave the block commented and let the inherited shell win).
- Set env defaults via `${VAR:-default}` so the parent shell or `.env`
always wins.
- End with `exec <command>` (not just `<command>`) so the wrapper PID
becomes the service PID.
## Anti-patterns to avoid
- Using `bash` as the just shell. The project standard is zsh; use
`set shell := ["zsh", "-c"]`.
- Hardcoding the tmux session name as a string. Go through `project`.
- Inlining the tmux logic in every `svc-*` recipe. Use the `_svc-start`
helper instead.
- Calling `tmux capture-pane`, `tmux kill-window`, etc. directly. Always
go through `cortex tmux`.
- Putting nvm/asdf activation in the justfile. That belongs in the
`tx-start-*.sh` wrapper.
- Adding a `lint` recipe when the project has no linter configured. Omit
the recipe entirely; do not emit one that will fail.
- Using `&&` chains where dependent recipes would be clearer (e.g.,
`ci: typecheck lint test`, not `ci: && just typecheck && just lint && just test`).
- Catch-all `%:` rules in the Makefile. Keep the passthrough list
explicit so `make help` stays an honest reference.
## Resources
- `assets/justfile.tmpl` — canonical justfile structure with svc-* family.
- `assets/Makefile.tmpl` — passthrough wrapper with install-just cascade.
- `assets/tx-start.sh.tmpl` — service launch script pattern.
- `references/inspection-checklist.md` — slug rules, stack detection,
service catalog detection.
- `references/recipes-node.md` — pnpm/npm/yarn/bun command map.
- `references/recipes-rust.md` — cargo recipes.
- `references/recipes-python.md` — uv/poetry/pip recipes.
- `references/recipes-go.md` — go recipes.
- `references/service-patterns.md` — svc-* family, cortex tmux CLI,
internal helper pattern.Related Skills
writing-skills
Use when creating new skills, editing existing skills, or verifying skills work before deployment - applies TDD to process documentation by testing with subagents before writing, iterating until bulletproof against rationalization
workflow-security-audit
Comprehensive security assessment and remediation. Use for security reviews, compliance checks, vulnerability assessments.
workflow-performance
Systematic performance analysis and optimization. Use when things are slow, need optimization, or preparing for scale.
workflow-feature
Complete feature development workflow from design to deployment. Use when implementing new features or functionality.
workflow-feature-development
Complete workflow for developing new features from design to deployment. Use when starting a new feature, adding functionality, or building something new.
workflow-bug-fix
Systematic approach to identifying, fixing, and validating bug fixes. Use when fixing bugs, resolving issues, or addressing errors.
wiring-audit
User-triggered audit that finds wiring drift between a project's UI surfaces and backend capabilities — orphan surfaces (UI calls endpoints/hooks/procedures that no longer exist), unwired capabilities (backend routes/exports that nothing surfaces), shape drift (both exist but contracts mismatch), method drift (URL matches, HTTP verb does not), validation drift (frontend vs backend rules diverged), permission drift (UI exposes what backend forbids or vice versa), stale labels (UI text references renamed backend concepts), and unsurfaced configuration (env vars or flags that gate behavior with no UI or CLI to control them). This skill should be used when the user asks to "audit our wiring," "find UI/backend drift," "find unwired capabilities," "find stale surfaces," "check for contract violations," "find unused endpoints," "find unused hooks," "what mismatches between UI and backend," or any similar request whose deliverable is a prioritized findings report rather than a descriptive snapshot. Generic across UI frameworks but optimized for React applications (hooks, fetch, react-query, SWR, tRPC, server actions, react-router, Next.js). Not for descriptive architectural snapshots (use architectural-analysis), security audits (use security-auditor), or performance audits (use workflow-performance).
webapp-testing
Toolkit for interacting with and testing local web applications using Playwright. Use when verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs.
web-researcher
Use this skill when you need to research a topic online, gather information from multiple sources, or evaluate source credibility. Trigger phrases: 'research', 'find information about', 'look up', 'investigate'. Not for academic systematic reviews (use literature-reviewer) or fact-checking specific claims (use fact-checker).
visual-modes
Use when activating visual showcase modes (supersaiyan, kamehameha, over9000) for UI or interaction design - provides mode-specific enhancement checklists.
vibe-security
Comprehensive secure coding guide covering OWASP web vulnerabilities with prevention patterns and checklists. Use when writing or reviewing web application code to prevent XSS, CSRF, SSRF, SQL injection, access control flaws, and other common security vulnerabilities.
verification-before-completion
Use when about to claim work is complete, fixed, or passing, before committing or creating PRs - requires running verification commands and confirming output before making any success claims; evidence before assertions always