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…
Appraise a GitHub issue backlog unattended: for each issue, decide whether it is still real and how big it is, then apply the answer to the tracker as a size label, a needs-decision or needs-human label with the question stated, or a close carrying a re-checkable receipt. A
$ npx -y skills add simiancraft/simiancraft-skills --skill appraise-github-issues --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/appraise-github-issuesContext preview
The summary Claude sees to decide when to auto-load this skill.
Appraise a GitHub issue backlog unattended: for each issue, decide whether it is still real and how big it is, then apply the answer to the tracker as a size label, a needs-decision or needs-human label with the question stated, or a close carrying a re-checkable receipt. A
name: appraise-github-issues description: >- Appraise a GitHub issue backlog unattended: for each issue, decide whether it is still real and how big it is, then apply the answer to the tracker as a size label, a needs-decision or needs-human label with the question stated, or a close carrying a re-checkable receipt. A close is confirmed by a second engine before it is made. Runs once, on one issue, over the whole backlog, or as a periodic heartbeat, and is the sizing stage of burn-down-github-issues. Use when the task is "size the backlog", "appraise every issue in this repo", "close what is already done", "triage recent issues without fixing them", or "keep the backlog sized". Requires a per-repository config (its own, or the burndown's) and the codex and claude CLIs for the default seats. Skip for fixing anything; this skill never writes to the repository.
One read-only agent turn per issue answers two questions and stops: is it still real, and how big is it. The answer lands on the issue, and that is the whole contract. Nothing reads this process; the burndown, a person, or another skill reads the tracker.
This feature is about an **issue**; its children are **appraisals**: one verdict about one issue, judged against the fetched base ref at one moment.
| Verdict | What lands on the issue | |---|---| | `valid` | a `size: N` label on the configured scale; a comment when it disagrees with a size already there | | `already-fixed`, `obsolete` | a close with a receipt a stranger can re-check, after a second engine agrees | | `needs-decision` | the label, and the exact question a person must answer | | `needs-human` | the label, and what access or authority an agent lacks |
A close is the one appraisal verdict that is a write with consequences: a wrongly kept issue costs a re-read, a wrongly closed one disappears. So before an issue closes, a **confirmer** on another engine, with none of the appraiser's context, re-checks the receipt against the base ref: the commit is an ancestor and does what was asked, or the file as the base holds it no longer has the premise. Agreement closes the issue with both receipts on the thread. Disagreement labels it `needs-human` with both opinions, and a person breaks the tie. A confirmer that crashes or writes nothing is not evidence either way; the close is not made and the issue stays unsized.
Sizing and hand-offs stay single-opinion. They are labels a person can change.
A producer puts files named `on-size-<N>`, `on-size-over-<M>`, or `on-size` into a callbacks directory, and the appraiser looks one up for the points it just applied and runs it: an executable with the appraisal as JSON on stdin, a `.md` prompt as one agent turn on the callback seat (a seat is a role an agent fills; this one runs callback prompts), or both. The burndown writes the callbacks it ships there on every start, and that is how `carve-github-issue`, which breaks an oversized issue into smaller ones, is reached without the appraiser knowing it exists. The ladder, the two forms, and the payload are in `references/callbacks.md`.
Keep the appraiser and the confirmer on different engines; the driver refuses to start when they match. `--no-confirm` (or `confirmCloses: false`) closes on the appraiser alone, for a tracker whose authors you trust to that degree, and then the confirmer's engine does not matter.
From inside the target repository:
bun run <this-skill-dir>/appraise.ts --dry-run # select and print; no lock, no agent, no GitHub write (only runs/appraise.log) bun run <this-skill-dir>/appraise.ts --limit 12 # up to 12 unsized issues in the window bun run <this-skill-dir>/appraise.ts --age-days 90 # widen the window to 90 days for this run bun run <this-skill-dir>/appraise.ts --issue <n> # one issue, whatever its age or size bun run <this-skill-dir>/appraise.ts --all # the whole open backlog, not only the window bun run <this-skill-dir>/appraise.ts --all --include-sized # re-judge everything, sized or not bun run <this-skill-dir>/appraise.ts --every <minutes> # heartbeat: appraise whatever is new, on a cadence you choose bun run <this-skill-dir>/appraise.ts --appraiser codex:gpt-5.6-sol --confirmer claude:claude-opus-5 bun run <this-skill-dir>/appraise.ts --callbacks <dir> # where a producer's size callbacks live; --callback-seat engine[:model]
`<this-skill-dir>` is the filesystem path of this directory wherever the collection is checked out; it is a path, not a skill name. The command reads `appraise-github-issues.config.ts` at the repository root, or the burndown's `burn-down-github-issues.config.ts` when that is what the repository has (`references/adopting.md`). Every run is teed to `<worktreeRoot>/runs/appraise.log`.
| Need | Read | |------|------| | Adopt it in a repository: the config, what it writes to the tracker, first-run order, boundaries | `references/adopting.md` | | Extend it: the size-callback ladder, the executable and prompt forms, the payload, what a prompt may report | `references/callbacks.md` |
and run no suite. Their working directory is an empty scratch directory, not a checkout.
branch, never the main checkout's working state.
made is `needs-decision`, however small the change.
repository's convention docs rule out, the appraiser sizes the convention-respecting remedy and says so
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…
Shrink a media asset to the smallest bytes that still serve its purpose, keyed on asset kind (raster, vector, animation, video,…
Run an unattended burndown of a GitHub issue backlog as cards on a per-operator GitHub Projects board whose lanes are an explicit…
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…