{"id":50089189,"url":"https://github.com/semanticpixel/abc","last_synced_at":"2026-05-22T22:00:45.192Z","repository":{"id":359052433,"uuid":"1244281261","full_name":"semanticpixel/abc","owner":"semanticpixel","description":"Always Be Cooking - Claude Code plugin that drives features from plan → tracker sub-issues → parallel shipping → review → merge.","archived":false,"fork":false,"pushed_at":"2026-05-20T08:07:27.000Z","size":150,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-20T09:59:24.915Z","etag":null,"topics":["claude-code","claude-code-plugin","claude-skills","developer-tools","github-issues","linear","workflow-automation"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/semanticpixel.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-20T06:01:11.000Z","updated_at":"2026-05-20T08:07:00.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/semanticpixel/abc","commit_stats":null,"previous_names":["semanticpixel/abc"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/semanticpixel/abc","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/semanticpixel%2Fabc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/semanticpixel%2Fabc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/semanticpixel%2Fabc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/semanticpixel%2Fabc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/semanticpixel","download_url":"https://codeload.github.com/semanticpixel/abc/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/semanticpixel%2Fabc/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33372736,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-22T21:56:13.512Z","status":"ssl_error","status_checked_at":"2026-05-22T21:56:10.769Z","response_time":265,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["claude-code","claude-code-plugin","claude-skills","developer-tools","github-issues","linear","workflow-automation"],"created_at":"2026-05-22T22:00:41.304Z","updated_at":"2026-05-22T22:00:45.188Z","avatar_url":"https://github.com/semanticpixel.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ABC — Always Be Cooking 🍳\n\nA 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.\n\n\u003e \"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.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg 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%\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003csub\u003e\n    Above: a real Claude Code session — \u003ccode\u003e/abc:plan\u003c/code\u003e drafts a structured plan from a long-form spec, \u003ccode\u003e/abc:scaffold-sub-issues-gh\u003c/code\u003e creates a GitHub parent issue with a 10-child task-list and 15 dependency edges, and \u003ccode\u003e/abc:ship-epic-gh\u003c/code\u003e arms a 10-minute coordinator + per-worker 6-minute loops that walk the epic to \u003cem\u003e10 of 10 merged · parent closed · cron self-cancelled\u003c/em\u003e. The artifacts are real — click any thumbnail below to verify in \u003ca href=\"https://github.com/semanticpixel/theluistorres/issues/11\"\u003e\u003ccode\u003esemanticpixel/theluistorres\u003c/code\u003e\u003c/a\u003e.\n  \u003c/sub\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/semanticpixel/theluistorres/issues/11\"\u003e\n    \u003cimg src=\"./examples/screenshots/parent-issue.png\" width=\"32%\" alt=\"Parent issue with the rendered task-list of 10 children\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/semanticpixel/theluistorres/issues/13\"\u003e\n    \u003cimg src=\"./examples/screenshots/dependency-labels.png\" width=\"32%\" alt=\"A child issue showing repo:, status:, and blocks:/blocked-by: labels\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/semanticpixel/theluistorres/issues\"\u003e\n    \u003cimg src=\"./examples/screenshots/issues-list.png\" width=\"32%\" alt=\"The repo's Issues tab showing all 10 children with status labels\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n## Quickstart\n\n```bash\nclaude plugin marketplace add semanticpixel/abc\nclaude plugin install abc@abc\n# restart Claude Code\n```\n\nThen, in any project:\n\n```\n/abc:plan Add a settings page to the dashboard\n```\n\n`/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.\n\nFor 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](#requirements).\n\n---\n\n## The lifecycle\n\n```\n   /abc:plan                       →  PLAN-\u003cslug\u003e.md (draft, fast, ship-aware)\n        ↓\n   /abc:scaffold-sub-issues        →  Linear parent + sub-issues + dependency graph\n   /abc:scaffold-sub-issues-gh     →  GitHub parent + children (task-list + label DAG)\n        ↓\n   /abc:ship-epic | ship-epic-gh   →  parallel multi-repo shipping (fans out workers)\n        OR\n   /abc:ship-issue | ship-issue-gh →  serial single-ticket worker (the unit)\n        ↓\n   /abc:review-sweep               →  bulk-triage your open PRs/MRs across GitHub + GitLab\n        ↓\n                                     merged\n\n   Off-pipeline utilities:\n     /abc:pr      — local change → PR (GitHub) or MR (GitLab)\n     /abc:review  — review a single PR/MR with craft-level attention\n```\n\nEach 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.\n\nPick 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.\n\n---\n\n## Skills\n\n| Command | What it does |\n|---|---|\n| `/abc:plan \u003cdescription\u003e` | Drafts a `PLAN-\u003cslug\u003e.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\u0026A. |\n| `/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`. |\n| `/abc:scaffold-sub-issues-gh [\u003cowner\u003e/\u003crepo\u003e[#\u003cn\u003e]] [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 `\u003cowner\u003e/\u003crepo\u003e#\u003cn\u003e` ID. See `plugins/abc/skills/scaffold-sub-issues-gh/github-conventions.md` for the label scheme shared across the `-gh` family. |\n| `/abc:ship-issue \u003cTICKET\\|list\\|parent\\|milestone:uuid\u003e` | 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. |\n| `/abc:ship-issue-gh \u003c\u003cowner\u003e/\u003crepo\u003e#\u003cn\u003e\\|list\\|parent\\|milestone:\u003cowner\u003e/\u003crepo\u003e/\u003cnum\u003e\u003e` | 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. |\n| `/abc:ship-epic \u003cPARENT-ID\u003e` | Coordinator for parent issues with multi-repo sub-issues. Builds a dependency graph from `blocks`/`blocked by` relations, fires `/loop /abc:ship-issue \u003cSUB-ID\u003e` 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. |\n| `/abc:ship-epic-gh \u003c\u003cowner\u003e/\u003crepo\u003e#\u003cn\u003e\u003e` | 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 \u003cowner\u003e/\u003crepo\u003e#\u003cn\u003e` per ready child, gates blocked children, aggregates status. Single-host (github.com OR Enterprise) per invocation. |\n| `/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. |\n| `/abc:review \u003curl\\|number\u003e` | 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. |\n| `/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. |\n\n---\n\n## Subagents\n\nBoth are tightly scoped, read-only by contract, and used by the orchestrating skills above. They are not invoked directly.\n\n| Agent | Used by | What it does |\n|---|---|---|\n| `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. |\n| `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. |\n\n---\n\n## Hooks\n\nBackground helpers that fire on Claude Code lifecycle events. No direct invocation — they activate automatically when the plugin is installed.\n\n| Hook | When it fires | What it does |\n|---|---|---|\n| `stay-awake` | `UserPromptSubmit` / `Stop` / `Notification` (idle) / `SessionEnd` / `PostToolUseFailure` (on interrupt) | 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. Uses `caffeinate -w $PPID` so the process auto-exits when Claude Code itself exits. macOS only — gracefully no-ops on other platforms. |\n\nOptional environment variables:\n\n- `CLAUDE_ABC_AWAKE_FLAGS` — flags passed to `caffeinate` (default: `-i -m -s` — prevents idle/disk/system sleep)\n- `CLAUDE_ABC_AWAKE_ON_ACTIVATE` — shell command to run when stay-awake activates (e.g. a desktop notification)\n- `CLAUDE_ABC_AWAKE_ON_DEACTIVATE` — shell command to run when stay-awake deactivates\n\n---\n\n## Design principles\n\n- **Linear is the source of truth.** Skills are stateless across sessions; they re-derive state from Linear comments, PR/MR status, and `CronList` on every wake.\n- **Pause for confirmation before destructive or visible operations.** Opening PRs/MRs, creating Linear issues, posting reviewer comments — all gated.\n- **No AI attribution.** Commits, PR/MR descriptions, and Linear comments never include \"Generated with Claude Code\" footers or `Co-Authored-By: Claude` trailers.\n- **Tool scoping at the skill level.** Each skill declares the minimum tools it needs. `/abc:review` cannot push code; `/abc:plan` cannot create Linear issues; etc.\n- **Self-arming loops.** `/abc:ship-issue` and `/abc:ship-epic` arm their own `/loop` so you invoke once and walk away. They self-cancel on terminal states.\n- **Compose with `/loop`.** One-shot skills like `/abc:review-sweep` can be wrapped: `/loop 30m /abc:review-sweep` keeps your queue swept while you work elsewhere.\n\n---\n\n## Requirements\n\nInstall 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.\n\n### Claude Code\n\n- Claude Code with plugin / marketplace support.\n\n### Trackers (MCPs)\n\n| Skill | Required |\n|---|---|\n| `/abc:scaffold-sub-issues`, `/abc:ship-issue`, `/abc:ship-epic` | Linear MCP (`claude_ai_Linear`) connected and authed |\n| `/abc:scaffold-sub-issues-gh`, `/abc:ship-issue-gh`, `/abc:ship-epic-gh` | `gh` CLI (\u003e= 2.40) authed for the target host. No Linear required. |\n| `/abc:review`, `/abc:review-sweep` (GitLab paths only) | GitLab MCP (`mcp__gitlab__*`) |\n| `/abc:plan`, `/abc:pr`, `/abc:review` (GitHub paths) | None — local files + `gh` CLI |\n\n### Platform CLIs\n\n| CLI | Used by | Auth check |\n|---|---|---|\n| `git` | every repo-touching skill | — |\n| `gh` | GitHub repos — PR ops, comments, check runs | `gh auth status` |\n| `glab` | GitLab repos — MR ops, pipelines, notes | `glab auth status` |\n\n### Node toolchain\n\nUsed by `/abc:pr` and `/abc:ship-issue` to run typecheck/lint/tests before opening a PR/MR.\n\n- `node`\n- One of `pnpm` / `npm` / `yarn` — auto-detected from the lockfile in cwd.\n\n### `stay-awake` hook (optional, macOS-only)\n\n- `jq`\n- `caffeinate` (ships with macOS)\n\nThe hook gracefully no-ops if either is missing or you're on a non-macOS platform.\n\n---\n\n## Install (local development)\n\n```bash\n# 1. Clone the repo somewhere on your machine\ngit clone https://github.com/semanticpixel/abc.git\n\n# 2. Add the marketplace (point at wherever you cloned it)\nclaude plugin marketplace add ./abc\n\n# 3. Install the plugin\nclaude plugin install abc@abc\n\n# 4. Restart Claude Code\n```\n\nYou should now see `/abc:*` commands in the slash menu.\n\n### Updating after edits\n\n```bash\n# 1. Bump version in both manifests:\n#    .claude-plugin/marketplace.json\n#    plugins/abc/.claude-plugin/plugin.json\n\n# 2. Update the installed copy\nclaude plugin update abc@abc\n\n# 3. Restart Claude Code\n```\n\n\u003e **If `update` doesn't pick up your changes.** `claude plugin update abc@abc` is a no-op when the version in `plugin.json` hasn'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:\n\u003e\n\u003e ```bash\n\u003e claude plugin uninstall abc@abc\n\u003e claude plugin install abc@abc\n\u003e # restart Claude Code\n\u003e ```\n\u003e\n\u003e The repo's convention is to bump PATCH on every user-visible change so `update` works for installers — see [`CHANGELOG.md`](./CHANGELOG.md) for the per-version history.\n\n### Useful commands\n\n```bash\nclaude plugin list                    # see installed plugins + status\nclaude plugin details abc             # component inventory + token cost\nclaude plugin validate \u003cpath\u003e         # check manifest validity\nclaude plugin disable abc@abc         # turn off without uninstalling\nclaude plugin uninstall abc@abc       # remove\n```\n\n---\n\n## Install (from GitHub)\n\n```bash\nclaude plugin marketplace add semanticpixel/abc\nclaude plugin install abc@abc\n```\n\n---\n\n## Repo layout\n\n```\nabc/                                  ← marketplace root\n├── README.md                         ← this file\n├── .claude-plugin/marketplace.json   ← marketplace manifest\n├── examples/                         ← sample artifacts (see below)\n│   └── PLAN-avatar-component.md\n├── scripts/\n│   └── validate-plugin.py            ← manifest + frontmatter validator\n├── .github/workflows/\n│   └── validate.yml                  ← runs the validator on push / PR\n└── plugins/\n    └── abc/                          ← plugin root\n        ├── .claude-plugin/plugin.json\n        ├── skills/\n        │   ├── pr/SKILL.md\n        │   ├── review/SKILL.md\n        │   ├── review-sweep/SKILL.md\n        │   ├── plan/SKILL.md\n        │   ├── scaffold-sub-issues/SKILL.md\n        │   ├── scaffold-sub-issues-gh/\n        │   │   ├── SKILL.md\n        │   │   └── github-conventions.md\n        │   ├── ship-issue/\n        │   │   ├── SKILL.md\n        │   │   ├── DESIGN.md\n        │   │   └── README.md\n        │   ├── ship-issue-gh/\n        │   │   ├── SKILL.md\n        │   │   ├── DESIGN.md\n        │   │   └── README.md\n        │   ├── ship-epic/\n        │   │   ├── SKILL.md\n        │   │   └── DESIGN.md\n        │   └── ship-epic-gh/\n        │       ├── SKILL.md\n        │       └── DESIGN.md\n        ├── agents/\n        │   ├── reviewer.md\n        │   └── triage.md\n        └── hooks/\n            ├── hooks.json\n            └── stay-awake.sh\n```\n\n---\n\n## Examples\n\n| File | Shows |\n|---|---|\n| [`examples/PLAN-avatar-component.md`](./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`. |\n\n---\n\n## Versioning\n\n[Semver](https://semver.org/) 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).\n\nPer-version notes live in [`CHANGELOG.md`](./CHANGELOG.md).\n\n---\n\n## Author\n\nLuis Torres\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsemanticpixel%2Fabc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsemanticpixel%2Fabc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsemanticpixel%2Fabc/lists"}