Verify Outfitter Stack compliance in a codebase. Scans for anti-patterns (throws, console, hardcoded paths) and produces a severity-ranked compliance report. Use for pre-commit checks, code review, or migration validation.
Scans codebases for Outfitter Stack anti-patterns and generates a severity-ranked compliance report.
npx claudepluginhub outfitter-dev/outfitterThis skill is limited to using the following tools:
TEMPLATE.mdVerify Outfitter Stack compliance and produce a structured report.
Scan a codebase and produce a Compliance Report at .agents/notes/YYYY-MM-DD-outfitter-check.md documenting:
DO:
outfitter-atlas first for pattern knowledgeDON'T:
outfitter-atlas for pattern expertiseAsk or infer the target:
| Scope | When | Command Modifier |
|---|---|---|
| Single file | "Check this file" | rg PATTERN path/to/file.ts |
| Directory | "Check src/handlers" | rg PATTERN path/to/dir/ |
| Full codebase | "Check compliance" | rg PATTERN --type ts |
Exclude test files unless specifically requested:
rg PATTERN --type ts -g "!*.test.ts" -g "!__tests__/*"
Run each scan and collect results.
# Thrown exceptions (must convert to Result)
rg "throw new" --type ts -g "!*.test.ts" -n
# try/catch control flow (must convert to Result checking)
rg "try \{" --type ts -g "!*.test.ts" -n
Why critical: Breaks type safety, loses error context, makes control flow unpredictable.
# Console usage (must use ctx.logger)
rg "console\.(log|error|warn|info|debug)" --type ts -g "!*.test.ts" -n
# Hardcoded home paths (must use XDG via @outfitter/config)
rg "(homedir\(\)|~\/\.)" --type ts -g "!*.test.ts" -n
Why high: Console breaks structured logging; hardcoded paths break portability.
# Custom error classes (should use taxonomy)
rg "class \w+Error extends Error" --type ts -n
# Handlers without context parameter
rg "Handler<.*> = async \(input\)" --type ts -n
# Missing Result type returns
rg "async.*Handler.*\{" --type ts -A 10 | rg "return [^R]" -B 5
Why medium: Reduces type safety and pattern consistency.
# process.exit without exitWithError
rg "process\.exit\(" --type ts -g "!*.test.ts" -n
# Missing .describe() on Zod schemas used with MCP
rg "z\.(string|number|boolean|object)\(\)(?!.*\.describe)" --type ts -n
Why low: Affects agent experience and exit code consistency.
Count results and assign severity:
| Severity | Findings | Action |
|---|---|---|
| Critical | throw/try-catch in handlers | Must fix before merge |
| High | console.log, hardcoded paths | Should fix before merge |
| Medium | Custom errors, missing context | Fix when touching file |
| Low | Style issues, missing describe | Nice to have |
| Level | Impact | Examples |
|---|---|---|
| Critical | Breaks core patterns, causes runtime issues | Thrown exceptions, unvalidated paths |
| High | Breaks observability or portability | Console logging, hardcoded paths |
| Medium | Reduces type safety or consistency | Custom errors, missing context param |
| Low | Affects polish, not correctness | Style, documentation gaps |
Write the Compliance Report to .agents/notes/YYYY-MM-DD-outfitter-check.md using TEMPLATE.md.
# Create directory if needed
mkdir -p .agents/notes
# Report path (replace YYYY-MM-DD with today's date)
# .agents/notes/2024-01-15-outfitter-check.md
| Status | Criteria |
|---|---|
| PASS | 0 critical, 0 high |
| WARNINGS | 0 critical, 1+ high or medium |
| FAIL | 1+ critical |
## Compliance: [scope]
**Status**: PASS | WARNINGS | FAIL
**Issues**: X critical, Y high, Z medium, W low
{ details follow }
Point to fieldguide patterns for each issue type:
| Issue | Fix Pattern |
|---|---|
throw new | patterns/conversion.md |
try/catch | patterns/results.md |
console.log | patterns/logging.md |
| Hardcoded paths | patterns/file-ops.md |
| Custom errors | patterns/errors.md |
| Missing context | patterns/handler.md |
For a fast pass/fail without full report:
# Critical count (should be 0)
rg "throw new|try \{" --type ts -g "!*.test.ts" -c | wc -l
# High count (should be 0)
rg "console\.(log|error|warn)|homedir\(\)" --type ts -g "!*.test.ts" -c | wc -l
After the compliance scan, detect installed @outfitter/* versions and check for available migrations using the outfitter upgrade command.
# Check for available updates (human-readable)
bunx outfitter upgrade --guide --cwd .
For JSON output (version data only, does not include migration docs):
bunx outfitter upgrade --json --cwd .
If updates are found, append a Migration Guidance section to the compliance report. If all packages are up to date, note that in the report.
The command:
package.json for @outfitter/* dependencies--guide is used, composes migration docs from the kit plugin's shared migrationsoutfitter-atlas — Patterns and fix guidance (load first)outfitter-start — Full adoption workflow with staged plandebug-outfitter — Deep investigation of specific issuesYou MUST use this before any creative work - creating features, building components, adding functionality, or modifying behavior. Explores user intent, requirements and design before implementation.