Bootstrap issues
Bootstrap a repo for parallel autonomous agents coordinated via a dependency-aware GitHub Issues queue - creates work-queue labels (lifecycle plus afk/hitl autonomy), a CI test gate, branch protection with self-merge, an agent issue template, a committed DESIGN.md design system for frontend repos, and the AGENTS.md/CLAUDE.md workflow docs. Use when the user wants to set up the parallel-agent / GitHub Issues flow in a repo, "bootstrap issues", port the agent workflow to a new repo, or invokes /bootstrap-issues.From its SKILL.md
npx -y skills add chieaid24/skills --skill bootstrap-issuesAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
15.4 KB, ~3.8k tokens by cl100k_base, as published. Nobody here has run it
Bootstrap Issues
Bootstraps the parallel-agent + GitHub Issues workflow in the current repo so several agents (Claude Code or Codex CLI, interchangeably) can each grab an issue, work in an isolated worktree, and self-merge through a CI gate. Work is ordered by native GitHub blocked-by dependencies; agents consume the queue with /start-next-issue and add to it with /spec.
This skill makes outward-facing changes to a GitHub repo (creates labels, sets branch protection, enables auto-merge). Always present the plan and get explicit confirmation before applying them - see step 3.
Preconditions
Check these first; stop with a clear message if any fail:
- Inside a git repo with a GitHub
origin(git remote get-url origin). ghis authenticated (gh auth status).gh>= 2.94.0 - the dependency-aware queue readsblockedBy/stateReasonJSON fields that olderghcannot return, so/start-next-issuewould silently compute the wrong ready set. Checkgh --versionand tell the user to upgrade if older.git>= 2.13 - the claim CAS uses--force-with-lease=<ref>:with an empty expect ("ref must not exist"). Oldergitignores the empty form, and two agents can claim the same issue. Checkgit --version.- Capture
<owner>/<repo>, the default branch, and the repo's visibility (the security-audit disclosure split - public fix PRs for low/medium vs private advisories for high/critical - turns on public vs private):gh repo view --json nameWithOwner,defaultBranchRef,visibility --jq '{repo: .nameWithOwner, branch: .defaultBranchRef.name, visibility: .visibility}'
1. Detect the stack
Choose the CI template from what's at the repo root (or the obvious project subdir):
| Marker file | Template | Test command |
|---|---|---|
package.json | templates/ci-node.yml | npm test |
pyproject.toml / requirements.txt | templates/ci-python.yml | pytest |
Cargo.toml | templates/ci-rust.yml | cargo test |
go.mod | templates/ci-go.yml | go test ./... |
If the test command or project dir is ambiguous (monorepo, tests in a subdir like backend/), ask the user. Every template names its job test, so the required status check is always test regardless of stack.
Also detect frontend UI. The repo has a frontend if any of these hold: a package.json depending on a UI framework (react, vue, svelte, solid-js, @angular/core, next, nuxt, astro, remix), or committed *.html / *.css / *.jsx / *.tsx / *.svelte / *.vue files, or a public/ / src/components tree. If markers are absent but the stack could host UI (a Node app), ask whether a frontend is planned. A backend-only Go/Rust/Python service, CLI, or library has no frontend - this gates step 2.
2. Design system interview (frontend UI repos only)
If step 1 found no frontend and none is planned, skip this step and note it skipped. Otherwise the repo gets a committed DESIGN.md that binds every future UI change, so grill the user on the design system now, before the plan confirmation. This is a conversation only - no mutations yet.
- If
/impeccableis installed, run/impeccable teach. It grills more thoroughly and writesPRODUCT.md+DESIGN.md(the same files it later consumes from the repo root). Then skip the bundled interview. - Otherwise, run the bundled interview in
templates/design-interview.md- a one-decision-at-a-time grill distilled from impeccable's shared design laws: register (brand vs product), color strategy in OKLCH, the theme scene sentence, a type scale (ratio >=1.25), spacing rhythm, motion (ease-out exponential, no bounce), the absolute bans, and the AI-slop reflex test. Push back on category-reflex answers ("fintech -> navy + gold") until the system isn't guessable from the domain.
Hold the resolved decisions. DESIGN.md is written from templates/design-md.md during Apply (step 4) and committed with the shareable files - it is not gitignored like CLAUDE.md/AGENTS.md, because every agent must share it.
3. Build the plan - present, then wait for confirmation
Summarize exactly what will change, then ask the user to confirm before applying anything outward-facing:
- Files:
.github/workflows/ci.yml(chosen template),.github/ISSUE_TEMPLATE/task.md. Frontend repos also:DESIGN.md(committed) from the step-2 interview. - Labels: lifecycle -
ready,in-progress,review,blocked; autonomy -afk,hitl;prdfor parent specs;securityfor audit-filed findings. - Docs: ensure
CLAUDE.mdexists; gitignoreCLAUDE.md+AGENTS.md; symlinkAGENTS.md -> CLAUDE.md; append the Parallel agent workflow section (plus the Frontend / UI work clause for frontend repos). - Pre-commit hooks: via the
setup-pre-commitskill - a stack-aware hook (format -> lint -> test) that runs before every local commit, mirroring the CItestgate. Committed so every agent shares it. - GitHub config: branch protection on
<default-branch>requiring thetestcheck, no required reviews (so an agent merges its own PR); enable auto-merge + delete-branch-on-merge; probe the security-advisories API (the audit's high/critical fixes need it) and warn if it is unavailable.
4. Apply (after confirmation)
Order matters: land the workflow on the default branch BEFORE enabling branch protection, or other branches deadlock on a test check that never runs.
-
Workflow + issue template. Copy the chosen
templates/ci-<stack>.yml->.github/workflows/ci.yml; set thepush:branch to<default-branch>, addworking-directoryif the project lives in a subdir, and make the test run once (non-watch - e.g. vitest needs-- --run; pytest/cargo/go already exit). Copytemplates/issue-task.md->.github/ISSUE_TEMPLATE/task.md. -
Docs pattern. If
CLAUDE.mdis missing, create a minimal one (title + one-line overview). AddCLAUDE.md,AGENTS.md, and.worktrees/to.gitignore(under a# Claude Code/# Codexheading; skip lines already present) - without the.worktrees/line every agent sees every other agent's lane as untracked files, which pollutesgit statusand invites a straygit add -Ainto a PR. Symlink:ln -s CLAUDE.md AGENTS.md(skip if it exists). Appendtemplates/workflow-section.mdtoCLAUDE.md, replacing every<default-branch>with the real branch name. Frontend repos: also appendtemplates/workflow-frontend.md, and - unless/impeccable teachalready wrote it in step 2 - write the resolved design decisions toDESIGN.mdat the repo root usingtemplates/design-md.md. -
Pre-commit hooks. Invoke the
setup-pre-commitskill for the same stack detected in step 1. It installs a format -> lint -> test pre-commit hook (Husky for JS/TS, thepre-commitframework for Python, a tracked.githooks/script for Rust/Go), verifies it, commits its own files, and records the per-clone activation command in the docs (Husky needs none; Pythonpre-commit install; Rust/Gogit config core.hooksPath .githooks). Keep the hook's test command consistent with the CI workflow's so the local gate mirrors thetestcheck. If the repo has no test/lint tooling, the skill omits those steps and says so. -
Labels - inline, never a committed script:
# Lifecycle gh label create ready --color 0E8A16 --description "Refined and queued; grabbable once its blockers are completed" --force gh label create in-progress --color FBCA04 --description "Claimed (assignee) and being worked" --force gh label create review --color 1D76DB --description "PR open, awaiting review/merge" --force gh label create blocked --color B60205 --description "Escalated to a human (abandoned blocker, or CI failed 3x)" --force # Autonomy - exactly one per work issue gh label create afk --color C2E0C6 --description "Fully autonomous: an agent implements, tests, and merges it" --force gh label create hitl --color D93F0B --description "Human in the loop required; the autonomous worker skips it" --force # Parent spec - carries neither autonomy label gh label create prd --color 5319E7 --description "Product requirements document; parent of work slice issues" --force # Security audit - a fallback finding the audit could not fix in-run; its fix PR must stay neutral gh label create security --color EE0701 --description "Filed by a security audit; keep the fix PR neutral (no exploit detail)" --force -
Commit + land the workflow. Stage the shareable files (
.github/, plusDESIGN.mdfor a frontend repo), commit (chore: add agentic-issues CI + issue template), and push soci.ymlreaches<default-branch>(direct push as owner, or open + merge a bootstrap PR - the PR carries the workflow so its owntestcheck can run). The pre-commit hook files (step 3) were already committed by that skill;CLAUDE.md/AGENTS.mdare gitignored and stay local, butDESIGN.mdis committed so every agent shares it. -
Branch protection + auto-merge. Probe the Administration scope by enabling auto-merge:
gh api -X PATCH repos/<owner>/<repo> -F allow_auto_merge=true -F delete_branch_on_merge=true -F allow_squash_merge=true- 403 -> the PAT lacks Administration: write. Skip protection, warn the user, and print the manual UI steps (Settings -> Branches: require the
teststatus check, 0 required reviews; Settings -> General -> Pull Requests: allow auto-merge + auto-delete branches). - Success -> set protection. Write the body to a temp file in
$TMPDIR, apply, then delete it:printf '%s' '{"required_status_checks":{"strict":false,"contexts":["test"]},"enforce_admins":false,"required_pull_request_reviews":null,"restrictions":null}' > "$TMPDIR/ai-prot.json" gh api -X PUT repos/<owner>/<repo>/branches/<default-branch>/protection --input "$TMPDIR/ai-prot.json" rm -f "$TMPDIR/ai-prot.json"
- 403 -> the PAT lacks Administration: write. Skip protection, warn the user, and print the manual UI steps (Settings -> Branches: require the
-
Security-advisories capability (the audit's high/critical path). The
security-auditskill files high/critical findings as private advisories and develops each fix in the advisory's temporary private fork, so the base repo needs the security-advisories API. Probe it read-only:gh api "repos/<owner>/<repo>/security-advisories?per_page=1" >/dev/null- Success -> advisories are available; nothing to do.
- 403/404 -> the repo cannot file advisories yet. On a public repo enable it under Settings -> Advanced Security -> private vulnerability reporting; on a private repo that toggle needs GitHub Advanced Security. Warn the user and print the step. Until then the audit's high/critical fixes fall back to advisory-only, with a human opening the private fork by hand.
Bootstrap only guarantees the base repo can file advisories. It cannot pre-enable Actions in a fork that does not exist yet, so the private fork's own CI is the audit's concern, not bootstrap's.
5. Clean up
Remove every one-shot artifact created during bootstrap - the temp protection JSON and any scratch files. Never leave a setup-labels.sh or similar in the repo. Confirm .github/ contains only workflows/ci.yml and ISSUE_TEMPLATE/task.md.
6. Report
State what changed, anything skipped (e.g. branch protection when the scope was missing + the manual steps; the design interview for a backend-only repo), whether a DESIGN.md was written, whether the security-advisories API is available (or the manual step to enable it), the pre-commit hook installed and its per-clone activation command (if any), and how the queue runs from here:
- Fill the queue:
/spec- grill the idea -> update docs -> route by scope: publish a PRD with child slices for large features, or go straight to one or a few issues for small changes. Both reconcile against the open graph and label each issueafkorhitl. - Work the queue: point each agent at
/start-next-issue- it self-loops, grabbing the most-blocking readyafkissue, working it to a green-CI merge, then taking the next.hitlissues wait for you. - Review the queue:
/catch-up- reports what shipped, which lanes stalled, and whichhitlissues are sitting on a human decision.
Notes
- The job name
testis the required-check context across every stack - keep ittest. - Idempotent: re-running skips existing labels (
--forceupserts), an existingAGENTS.mdsymlink,.gitignorelines already present, an existingDESIGN.md(don't overwrite a design system already in the repo - offer to re-run the interview instead), and (viasetup-pre-commit) any pre-commit config files that already exist. DESIGN.mdis the binding design system. Committed and shared (not gitignored), auto-loaded by/impeccablefrom the repo root, and every future frontend agent must conform to it - the appended Frontend / UI work docs point UI work at it..github/ISSUE_TEMPLATE/task.mdis the per-repo source of truth for issue shape./specreads it when filing issues (stripping frontmatter + comments, then applying labels as flags), so agent-filed and human-filed (web UI) issues come out identically shaped. Keep repo-specific gates - theDESIGN.mdconformance line, branch-naming - in this template, not duplicated inside/spec;templates/issue-task.mdhere is only the seed, and the repo copy is expected to diverge with those specifics.- GitHub-only (uses
gh). For repos hosted elsewhere, only the docs + templates apply. - Owner direct-pushes to the protected branch bypass the check (
enforce_admins=false); agents go through PRs and hit the gate. afk/hitlgate autonomy;readygates refinement. Orthogonal: a fully specifiedhitlissue is stillready./start-next-issuerequiresreadyandafk, sohitlnever enters the ready set - a human works it, or relabels itafkonce its decision is settled. Autonomy is a label rather than a body field because the ready set is a mechanical read that can't parse prose.- The dependency queue (
blocked-byedges, theready/completedrule, the autonomy labels, therefs/claims/*claim CAS) is described intemplates/workflow-section.mdand consumed by/start-next-issue. Keep all four skills (bootstrap-issues,/spec,/start-next-issue,/catch-up) in agreement on those conventions. security-auditfeeds this queue too. Its remediation phase opens auto-merging fix PRs (low/medium) straight against thetestgate, files high/critical as private advisories with fixes in temporary private forks, and falls back to asecurity-labelled issue when an in-run fix cannot be verified. Bootstrap provisions what that needs: thesecuritylabel, the advisories capability, and thepull_requestCI trigger so a fix-PR branch runstest. When a worker takes asecurityissue it keeps the PR neutral (seetemplates/workflow-section.md). Keep this skill in agreement withsecurity-audit'sREMEDIATION.md.
What ships with it: 9 files
16.6 KB alongside SKILL.md
templates/
- ci-go.yml322 B
- ci-node.yml622 B
- ci-python.yml472 B
- ci-rust.yml307 B
- design-interview.md3.7 KB
- design-md.md3.5 KB
- issue-task.md1.6 KB
- workflow-frontend.md558 B
- workflow-section.md5.5 KB