android-emulator-harne…
Bring up an Android app in a headless emulator on Linux/WSL and drive it for automated integration testing, the Android analog of…
Run an unattended burndown of a GitHub issue backlog as cards on a per-operator GitHub Projects board whose lanes are an explicit state machine: appraise and size the inbox, carve what is over the ceiling, fix the ready ones in parallel git worktrees, prove each fix on a draft
$ npx -y skills add simiancraft/simiancraft-skills --skill burn-down-github-issues --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/burn-down-github-issuesContext preview
The summary Claude sees to decide when to auto-load this skill.
Run an unattended burndown of a GitHub issue backlog as cards on a per-operator GitHub Projects board whose lanes are an explicit state machine: appraise and size the inbox, carve what is over the ceiling, fix the ready ones in parallel git worktrees, prove each fix on a draft
name: burn-down-github-issues description: >- Run an unattended burndown of a GitHub issue backlog as cards on a per-operator GitHub Projects board whose lanes are an explicit state machine: appraise and size the inbox, carve what is over the ceiling, fix the ready ones in parallel git worktrees, prove each fix on a draft pull request, have an isolated second-engine reviewer judge it, land one branch at a time with freshness checks, and dead-letter per phase whatever a machine cannot finish. Use when the task is "work the backlog unattended", "triage and fix recent issues", "run the issue loop", "burn down issues", or "where is issue N on the board". Requires a per-repository burn-down-github-issues.config.ts at the target repo's root (the loop refuses to start without it), the prove-work-on-github skill, the codex and claude CLIs for the default seats, and a gh token with the project scope for the board. Skip for one-off fixes to a known issue you are already working interactively, and for backlogs whose issues are mostly product decisions rather than code.
A burndown is a board. Every issue the loop touches is a card, every card is in exactly one lane (a column of the board; the fix pipeline also calls an issue's worktree its lane), and the lanes are the leaf states of a statechart (`lib/machine.ts`, in XState's vocabulary) that says which seat runs on a card in that lane, what it may decide, and where each decision moves the card. The board is a GitHub Projects board per operator per repository, so a person who starts a burndown comes back to their own board and the loop resumes from it; the console prints the same cards in the same words. The tracker holds the facts (labels, pull requests, claims, records); the board is a projection of those facts that a person can read at a glance, and every run starts by placing every card where its facts say before any seat moves one.
Seats are polymorphic. A seat is an engine running whatever prompt the card's lane calls for (appraiser, close confirmer, carver, cut confirmer, worker, worker in revision, reviewer), then letting go; the card's position is the only input that changes what a seat does. Three rules hold across every seat: the reviewer and the confirmers run on a different engine than the author seats, claims on the issue thread are the lock that keeps two seats off one card, and merging is the one serial lane. `references/state-machine.md` is the machine in prose.
The loop is shared; the repository is config. Nothing in this skill is copied into a repository. Everything true of a repository (remotes, branches, commands, path aliases, invalidation paths) lives in `burn-down-github-issues.config.ts` at that repository's root, and the loop refuses to start without one, naming the missing file and the fields it lacks.
These travel with the skill because an adopter cannot be assumed to have house rules of its own. The first three are enforced by the driver, so no prompt drift can lose them; the rest are written into the prompts and checked by the reviewer.
checks at the last moment before merging and dead-letters the landing instead when they fail or never finish. A green local gate is not a substitute; the checks the pipeline runs are the ones that count.
branch; the gated merge is the only write it makes there.
base is fetched and merged forward before a fix starts, before proof is captured, before a revision, before a review, and before the merge; what lands is a head that contains everything upstream has. Whether proof or an approval survives a catch-up is decided by whether the base moved into the import closure of the work ("did the world move beneath us"); whether the catch-up happens is not.
so nothing another reader has fetched is rewritten.
on it.
re-checkable by a stranger. Narrative alone never carries a load-bearing claim.
imperative, facts only; any mention of agents, prompts, or local tooling is a block.
ports; other lanes are reading that state as their own evidence.
From inside the target repository (any directory of it, including a worktree):
bun run <this-skill-dir>/board.ts # once per operator: find or create the board, verify it, record the pointer bun run <this-skill-dir>/lanes.ts # write the 36 lanes and the Phase field onto that board; idempotent bun run <this-skill-dir>/loop.ts --dry-run # place every card, print the backlog by lane and what would run; no GitHub or working-tree write bun run <this-skill-dir>/loop.ts --limit 3 # work three Ready cards bun run <this-skill-dir>/loop.ts --max-points 5 # raise the size ceiling for this run only bun run <this-skill-dir>/loop.ts --only 12,34 # restrict the run to these issues, whatever their age bun run <this-skill-dir>/loop.ts --no-appraise # skip the inbox; --appraise-limit N caps it instead bun run <this-skill-dir>/loop.ts --closure <file> # print the import closure; verifies pathAliases bun run <this-skill-dir>/loop.ts --worker codex:gpt-5.6-sol --reviewer claude:claude-opus-5 bun run <thi
Claude Code skills for the full arc of a change: farm to table, with receipts. Curated Claude Code skills and agents from simiancraft. Most skill collections are grab bags. This one has a spine: it carries a change through its whole life.
Bring up an Android app in a headless emulator on Linux/WSL and drive it for automated integration testing, the Android analog of…
Specialization of android-emulator-harness for CAMERA / segmentation testing: get a real PERSON in front of the emulator camera…
Appraise a GitHub issue backlog unattended: for each issue, decide whether it is still real and how big it is, then apply the…
Shrink a media asset to the smallest bytes that still serve its purpose, keyed on asset kind (raster, vector, animation, video,…
Break one GitHub issue that is too large to work into sub-issues, unattended, and keep the carving honest as the children close.…
Read and use the Expo / React Native in-app developer tools: the developer menu (reload, go home, performance monitor, element…