CLI that installs and verifies a curated set of terminal tools for agentic coding workflows.
src/
index.ts CLI entry point (commander). Wires commands: install, verify, list.
catalog.ts Tool + preset definitions. Single source of truth for all 50 tools.
brew.ts Generates Brewfile, runs `brew bundle`.
npm.ts Handles `npm install -g` for npm-only tools (knip, svgo).
verify.ts Runs each tool's verify command, reports installed/missing.
skills.ts Imports skill modules, writes per-tool .md files + SKILL.md TOC.
skills/ One .ts file per tool, each exports a markdown skill string.
receipt.ts Reads/writes ~/.agent-loadout/receipt.json (what was installed).
paths.ts Central path constants (~/.agent-loadout/, ~/.claude/skills/agent-loadout/).
ui.ts Interactive prompts (inquirer) and preview formatting.
Data flow: catalog.ts defines tools → user selects via ui.ts → brew.ts/npm.ts install → verify.ts checks → skills.ts + receipt.ts persist results.
- ESM-only (
"type": "module",.jsextensions in imports) - Strict TypeScript —
tsc --noEmitfor typechecking,tsupfor bundling - execa with array form — never shell-interpolated strings
- chalk for terminal colours
- commander for CLI parsing
pnpm install
pnpm dev -- list # run any command via tsx
pnpm dev -- install --all # dry-run (no --apply)
pnpm typecheck # tsc --noEmit
pnpm build # tsup → dist/- Add entry to
TOOLSarray incatalog.ts(id, name, package, installMethod, verify command, description, preset) - Add a new file
src/skills/{id}.tsexporting a default markdown string, then import it inskills.ts - Add the corresponding
brew "package"line to the rootBrewfileunder the right preset section - Run
pnpm dev -- verifyto confirm the verify command works
- Add preset id to the
PresetIdunion incatalog.ts - Add preset object to
PRESETSarray (id, name, description, defaultOn) - Add a section comment in
Brewfile - Assign tools to the new preset
catalog.ts is the trust boundary. Every tool must be explicitly listed with a known package name and verify command. No arbitrary install targets — users only choose from the curated catalog.
- Bump
versioninpackage.jsonwith every PR (semver: patch for fixes/content, minor for new features)
- Don't add tools without a verify command
- Don't use
execawithshell: trueor string commands - Don't write to paths outside
~/.agent-loadout/and~/.claude/skills/agent-loadout/ - Don't import from
dist/— always import from./module.js