Skip to main content

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.

소스 정보

저장소
NickCrew/Claude-Cortex
최근 소스 활동
2026년 6월 1일 19:07
감지된 SKILL.md 언어
영어
스타
62
포크
15

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

파일 탐색기
10 개 파일

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
justfile-author
description
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.
keywords
["justfile","create a justfile","add a justfile","task runner","tmux services","Makefile wrapper","svc-up"]
# 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.
GitHub에서 보기