hooks — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited hooks (Hook) and scored it 87/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 3 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 3 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
A personal workflow toolkit for Claude Code: a tight, opinionated set of slash commands and subagents that take a feature from idea → plan → tracker issues → parallel shipping → review → merge with the fewest possible re-explanations. Backed by either Linear or GitHub Issues — pick by tracker, not auto-detect.
"Always Be Cooking" — the mindset of staying in motion. The toolkit encodes the recurring loops so the human only does the parts that require judgment.
<p align="center"> <img src="./examples/demo-full.gif" alt="A real Claude Code session: /abc:plan drafts a structured plan from a long-form spec, /abc:scaffold-sub-issues-gh creates a 10-issue GitHub epic with 15 dependency edges, /abc:ship-epic-gh fans out parallel workers and walks the epic through merge." width="100%"> </p>
<p align="center"> <sub> Above: a real Claude Code session — <code>/abc:plan</code> drafts a structured plan from a long-form spec, <code>/abc:scaffold-sub-issues-gh</code> creates a GitHub parent issue with a 10-child task-list and 15 dependency edges, and <code>/abc:ship-epic-gh</code> arms a 10-minute coordinator + per-worker 6-minute loops that walk the epic to <em>10 of 10 merged · parent closed · cron self-cancelled</em>. The artifacts are real — click any thumbnail below to verify in <a href="https://github.com/semanticpixel/theluistorres/issues/11"><code>semanticpixel/theluistorres</code></a>. </sub> </p>
<p align="center"> <a href="https://github.com/semanticpixel/theluistorres/issues/11"> <img src="./examples/screenshots/parent-issue.png" width="32%" alt="Parent issue with the rendered task-list of 10 children"> </a> <a href="https://github.com/semanticpixel/theluistorres/issues/13"> <img src="./examples/screenshots/dependency-labels.png" width="32%" alt="A child issue showing repo:, status:, and blocks:/blocked-by: labels"> </a> <a href="https://github.com/semanticpixel/theluistorres/issues"> <img src="./examples/screenshots/issues-list.png" width="32%" alt="The repo's Issues tab showing all 10 children with status labels"> </a> </p>
claude plugin marketplace add semanticpixel/abc
claude plugin install abc@abc
# restart Claude CodeThen, in any project:
/abc:plan Add a settings page to the dashboard/abc:plan writes a draft PLAN-*.md to disk in 3–5 tool calls — no tracker MCPs, no auth, no network. You iterate by editing the file, then hand it to /abc:scaffold-sub-issues[-gh] to create tracker issues, then /abc:ship-issue[-gh] or /abc:ship-epic[-gh] to ship them.
For tracker-coupled skills (scaffold-sub-issues, ship-issue, ship-epic and their -gh siblings) you'll need either the Linear MCP or the gh CLI authed — see Requirements.
/abc:plan → PLAN-<slug>.md (draft, fast, ship-aware)
↓
/abc:scaffold-sub-issues → Linear parent + sub-issues + dependency graph
/abc:scaffold-sub-issues-gh → GitHub parent + children (task-list + label DAG)
↓
/abc:ship-epic | ship-epic-gh → parallel multi-repo shipping (fans out workers)
OR
/abc:ship-issue | ship-issue-gh → serial single-ticket worker (the unit)
∥
/abc:review-epic | review-epic-gh (second session, in parallel)
→ epic-context reviewer loop — reviews each
child PR/MR as it surfaces, never merges
↓
/abc:review-sweep → bulk-triage your open PRs/MRs across GitHub + GitLab
↓
merged
Off-pipeline utilities:
/abc:pr — local change → PR (GitHub) or MR (GitLab)
/abc:review — review a single PR/MR with craft-level attentionEach step in the pipeline produces an artifact the next step consumes. No state lives in shell history or chat memory — the tracker (Linear or GitHub Issues) and the git remote are the source of truth, so any step can resume across sessions, machines, or days.
Pick the family by tracker: the unsuffixed skills target Linear; the -gh siblings target GitHub Issues. plan, pr, review, and review-sweep are tracker-agnostic and shared by both.
ship-epic[-gh] and review-epic[-gh] are designed to run as a pair of Claude Code sessions against the same epic:
Terminal A — implementer Terminal B — reviewer
/abc:ship-epic-gh owner/repo#10 /abc:review-epic-gh owner/repo#10
6m worker loop per ready child one 12m review loop for the epic
holds bottom-up per-PR context holds the top-down epic-wide spec/abc:scaffold-sub-issues[-gh])./abc:ship-epic[-gh], or /abc:ship-issue[-gh] on the parent); run /abc:review-epic[-gh] in the other.Anti-pattern: one session wearing both hats. Don't runreview-epic[-gh]in the same Claude Code session asship-issue[-gh]/ship-epic[-gh]workers. The split is the point — the implementer session holds bottom-up per-PR context while the reviewer session holds the top-down spec. One session holding both collapses the dual-context benefit and burns context twice as fast.
Reviewer post gate. review-epic[-gh] keeps the repo's confirm-before-posting convention: a tick that produced a review asks once per tick (via AskUserQuestion) before posting anything. A pending review therefore blocks its tick until you answer — the reviewer session is walk-away between reviews, not during them. No-op ticks never ask. (Unattended posting was considered and deferred — see the Hard Rules in either review-epic* SKILL.md.)
Validation status. review-epic-gh's single-repo GitHub path is now runtime-validated: it drove the review half of the plugin-remediation epic (semanticpixel/abc#47), reviewing every child PR end-to-end against live epic context. Still spec-mapped but not yet runtime-exercised: multi-repo routing (both reviewers), the Linear review-epic path, and the GitLab MR positioned-discussion posting path (scripts/validate-plugin.py checks manifest/frontmatter schema only, not behavior).
| Command | What it does | |||
|---|---|---|---|---|
/abc:plan <description> | Drafts a PLAN-<slug>.md within 3-5 tool calls. Sub-tasks are structured for /abc:scaffold-sub-issues to consume — each has a repo: tag, scope, acceptance criteria, and optional blocks/blocked by dependencies. Writes the file fast and lets you iterate from disk, not from Q&A. | |||
/abc:scaffold-sub-issues [parent-id] [plan-paths] | Reads one or more PLAN-*.md files, proposes a Linear parent + sub-issues with repo labels and dependency edges, asks for confirmation, then creates them. Output is a parent ID you can paste into /abc:ship-epic. | |||
/abc:scaffold-sub-issues-gh [<owner>/<repo>[#<n>]] [plan-paths] | GitHub-Issues sibling. Same input shape and confirmation gate, but creates a GitHub parent issue with a managed ## Sub-issues task-list plus status:* / repo:* / blocks:* labels (emulating Linear's state machine and relations on top of GitHub). Output is a parent <owner>/<repo>#<n> ID. See plugins/abc/skills/scaffold-sub-issues-gh/github-conventions.md for the label scheme shared across the -gh family. | |||
| `/abc:ship-issue <TICKET\ | list\ | parent\ | milestone:uuid> [--no-compact]` | Drives a Linear issue (or list / parent / milestone) from Backlog to Done through the implement → PR → address-review → merge loop. Self-arms its own /loop — invoke once and walk away. |
| `/abc:ship-issue-gh <<owner>/<repo>#<n>\ | list\ | parent\ | milestone:<owner>/<repo>/<num>> [--no-compact]` | GitHub-Issues sibling. Same self-arming loop, same state machine + escape hatches, but drives GitHub issues using the label/task-list conventions from scaffold-sub-issues-gh/github-conventions.md. GitHub-only — GitLab repos go through /abc:ship-issue instead. |
/abc:ship-epic <PARENT-ID> [--no-compact] | Coordinator for parent issues with multi-repo sub-issues. Builds a dependency graph from blocks/blocked by relations, fires /loop /abc:ship-issue <SUB-ID> per ready sub-issue (truly parallel via independent cron entries), gates blocked sub-issues, aggregates status to the parent. See plugins/abc/skills/ship-epic/DESIGN.md for the architectural rationale. | |||
/abc:ship-epic-gh <<owner>/<repo>#<n>> [--no-compact] | GitHub-Issues sibling. Coordinator for a GitHub parent issue with a managed ## Sub-issues task-list. Builds the dependency graph from blocks:#N / blocked-by:#N labels on the children, fires /loop /abc:ship-issue-gh <owner>/<repo>#<n> per ready child, gates blocked children, aggregates status. Single-host (github.com OR Enterprise) per invocation. | |||
/abc:review-epic <PARENT-ID> [--no-compact] | Linear sibling of review-epic-gh — same review-only loop against a Linear parent's native sub-issues. Each child's PR or MR is found via the repo: label → workdir → platform convention from ship-issue (GitHub via gh, GitLab via glab) and the child's gitBranchName; reviews post to the PR/MR, and the <!-- review-epic:reviewed-at:<sha> --> dedup markers live there too (never on the Linear issue), so the dedup convention is shared with the GitHub variant. Exits within one tick of the parent reaching Done. | |||
/abc:review-epic-gh <<owner>/<repo>#<n>> [--no-compact] | Review-only counterpart to ship-epic-gh — the second session of the two-session epic pattern. Self-arming /loop 12m that reviews each child PR against the full epic context (parent spec, merged-sibling decisions, pending children's criteria) via the reviewer subagent; posts inline + spec-cross-referenced summary comments, dedups via <!-- review-epic:reviewed-at:<sha> --> markers, exits when the epic closes. Never merges. Don't run it in the same session as the shipping skills — the dual-context split is the point. | |||
/abc:pr [title-hint] | Local change → PR/MR. Inspects the diff, groups related files, runs type-check + tests, commits with no AI attribution, pauses for confirmation, opens the PR/MR. Detects GitHub vs GitLab automatically. | |||
| `/abc:review <url\ | number>` | Review a single PR or MR with craft-level attention: semantic HTML, CSS architecture (tokens, logical properties, light-dark()), accessibility, TypeScript patterns, code quality. Proposes inline comments, shows them for approval, posts only what you confirm. Auto-detects platform from URL or git remote. | ||
| `/abc:review-sweep [github\ | gitlab\ | both]` | Scans your open PRs/MRs across platforms, dispatches each unresolved reviewer comment to the triage subagent, presents a dashboard, and applies confirmed fixes per PR/MR. Designed to compose with /loop 30m /abc:review-sweep for unattended sweeps. |
All four ship-* skills follow the compact-on-merge convention: after a sub-issue merges (with more work still queued), they print a 🗜 … Run /compact now … prompt at the natural context boundary. --no-compact opts out; coordinators propagate the flag to the workers they fire. The convention — trigger boundary, why it's safe, mechanism fallback chain — is documented once in plugins/abc/skills/_shared/compact-on-merge.md.
Both are tightly scoped, read-only by contract, and used by the orchestrating skills above. They are not invoked directly.
| Agent | Used by | What it does |
|---|---|---|
reviewer | /abc:review, /abc:review-sweep | Analytical code reviewer. Reads a diff (plus repo-rule overrides at .claude/review-rules.md) and returns structured inline comment proposals with severity, category, and concrete suggestion blocks. Volume-scales depth: small diffs get nits, large diffs get errors/security/a11y only. No write tools. |
triage | /abc:review-sweep | Single-comment classifier. Given one reviewer comment + its diff context, returns a YAML block with classification (fixable-code / fixable-doc / question / judgment-required / noise), confidence, rationale, and (for fixable items) a proposed suggestion block. Tight contract — no investigation, no implementation. |
Background helpers that fire on Claude Code lifecycle events. No direct invocation — they activate automatically when the plugin is installed.
| Hook | When it fires | What it does |
|---|---|---|
stay-awake | UserPromptSubmit / Stop / Notification (idle) / PostToolUseFailure / SessionEnd | Prevents macOS from sleeping during active Claude Code sessions. Critical for the autonomous-loop pattern: /abc:ship-issue and /abc:ship-epic self-arm a /loop that fires every 6 minutes and can run for hours — without sleep prevention, the loop dies when the screen sleeps or the lid closes. TTL model: every activity event (re)spawns a caffeinate -t <TTL> assertion (default 900s ≈ 2 loop intervals) tracked by PID in a session-keyed pidfile, so wakefulness self-expires <TTL> after the last activity rather than being killed at end-of-turn — this is what keeps the machine awake across the gap between a Stop and the next /loop wake. SessionEnd is the hard off-switch. Concurrent sessions use distinct pidfiles and never kill each other's assertion. macOS only — gracefully no-ops on other platforms. |
Optional environment variables:
CLAUDE_ABC_AWAKE_FLAGS — flags passed to caffeinate (default: -i -m -s — prevents idle/disk/system sleep)CLAUDE_ABC_AWAKE_TTL — assertion lifetime in seconds (default: 900 ≈ 2 loop intervals); wakefulness self-expires this long after the last activity eventCLAUDE_ABC_AWAKE_ON_ACTIVATE — shell command to run when stay-awake activates (e.g. a desktop notification)CLAUDE_ABC_AWAKE_ON_DEACTIVATE — shell command to run when stay-awake deactivatesCLAUDE_ABC_AWAKE_ON_ACTIVATEandCLAUDE_ABC_AWAKE_ON_DEACTIVATEare executed as shell commands — set them only to values you trust.ON_DEACTIVATEis best-effort: it fires when an event actively tears the assertion down (aStop-driven refresh that kills the prior process, orSessionEnd), but not on the normal silent TTL expiry — an event-driven hook sees no event at caffeinate's self-exit.
CronList on every wake.Co-Authored-By: Claude trailers./abc:review cannot push code; /abc:plan cannot create Linear issues; etc.ship-issue/ship-epic pairs (-gh siblings included) and the review-epic/review-epic-gh reviewers arm their own /loop so you invoke once and walk away. They self-cancel on terminal states./abc:review-sweep can be wrapped: /loop 30m /abc:review-sweep keeps your queue swept while you work elsewhere.Install only what's needed for the skills you'll actually use — every dependency is per-skill and the rest of the toolkit will still work without it.
| Skill | Required |
|---|---|
/abc:scaffold-sub-issues, /abc:ship-issue, /abc:ship-epic, /abc:review-epic | Linear MCP (claude_ai_Linear) connected and authed. /abc:review-epic also needs gh and/or glab to read the child PR/MR it routes to via the repo: label. |
/abc:scaffold-sub-issues-gh, /abc:ship-issue-gh, /abc:ship-epic-gh, /abc:review-epic-gh | gh CLI (>= 2.40) authed for the target host. No Linear required. |
/abc:review, /abc:review-sweep (GitLab paths only) | GitLab MCP (mcp__gitlab__*) |
/abc:plan, /abc:pr, /abc:review (GitHub paths) | None — local files + gh CLI |
| CLI | Used by | Auth check |
|---|---|---|
git | every repo-touching skill | — |
gh | GitHub repos — PR ops, comments, check runs | gh auth status |
glab | GitLab repos — MR ops, pipelines, notes | glab auth status |
Used by /abc:pr and /abc:ship-issue to run typecheck/lint/tests before opening a PR/MR.
nodepnpm / npm / yarn — auto-detected from the lockfile in cwd.stay-awake hook (optional, macOS-only)jqcaffeinate (ships with macOS)The hook gracefully no-ops if either is missing or you're on a non-macOS platform.
# 1. Clone the repo somewhere on your machine
git clone https://github.com/semanticpixel/abc.git
# 2. Add the marketplace (point at wherever you cloned it)
claude plugin marketplace add ./abc
# 3. Install the plugin
claude plugin install abc@abc
# 4. Restart Claude CodeYou should now see /abc:* commands in the slash menu.
# 1. Bump version in both manifests:
# .claude-plugin/marketplace.json
# plugins/abc/.claude-plugin/plugin.json
# 2. Update the installed copy
claude plugin update abc@abc
# 3. Restart Claude CodeIf `update` doesn't pick up your changes.claude plugin update abc@abcis a no-op when the version inplugin.jsonhasn't bumped — it only refreshes a timestamp, not the install cache. If you've changed source files without bumping (or you're testing against a marketplace that auto-updated to a new commit at the same version), the reliable refresh is:
>
``bash claude plugin uninstall abc@abc claude plugin install abc@abc # restart Claude Code ``>
The repo's convention is to bump PATCH on every user-visible change soupdateworks for installers — seeCHANGELOG.mdfor the per-version history.
claude plugin list # see installed plugins + status
claude plugin details abc # component inventory + token cost
claude plugin validate <path> # check manifest validity
claude plugin disable abc@abc # turn off without uninstalling
claude plugin uninstall abc@abc # removeclaude plugin marketplace add semanticpixel/abc
claude plugin install abc@abcabc/ ← marketplace root
├── README.md ← this file
├── .claude-plugin/marketplace.json ← marketplace manifest
├── examples/ ← sample artifacts (see below)
│ └── PLAN-avatar-component.md
├── scripts/
│ └── validate-plugin.py ← manifest + frontmatter validator
├── .github/workflows/
│ └── validate.yml ← runs the validator on push / PR
└── plugins/
└── abc/ ← plugin root
├── .claude-plugin/plugin.json
├── skills/
│ ├── _shared/
│ │ └── compact-on-merge.md
│ ├── pr/SKILL.md
│ ├── review/SKILL.md
│ ├── review-sweep/SKILL.md
│ ├── plan/SKILL.md
│ ├── scaffold-sub-issues/SKILL.md
│ ├── scaffold-sub-issues-gh/
│ │ ├── SKILL.md
│ │ └── github-conventions.md
│ ├── ship-issue/
│ │ ├── SKILL.md
│ │ ├── DESIGN.md
│ │ └── README.md
│ ├── ship-issue-gh/
│ │ ├── SKILL.md
│ │ ├── DESIGN.md
│ │ └── README.md
│ ├── ship-epic/
│ │ ├── SKILL.md
│ │ └── DESIGN.md
│ ├── ship-epic-gh/
│ │ ├── SKILL.md
│ │ └── DESIGN.md
│ ├── review-epic/
│ │ ├── SKILL.md
│ │ └── linear-conventions.md
│ └── review-epic-gh/
│ ├── SKILL.md
│ └── github-conventions.md
├── agents/
│ ├── reviewer.md
│ └── triage.md
└── hooks/
├── hooks.json
└── stay-awake.sh| File | Shows |
|---|---|
examples/PLAN-avatar-component.md | A canonical multi-repo PLAN — the exact format /abc:plan emits and /abc:scaffold-sub-issues consumes. Three sub-tasks across two repos, a dependency graph, a ## Validation block that becomes the blocked-verify gate in /abc:ship-issue. |
Semver with a personal-tools bias toward MINOR bumps for skill additions, PATCH for bug fixes and prompt tightening, MAJOR only when the lifecycle contract itself changes (e.g. a renamed/removed skill that breaks downstream pointers).
Per-version notes live in CHANGELOG.md.
Luis Torres
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.