PR Babysitter
openinterpreter/openinterpreter
Watches an open GitHub pull request until it merges, handling review comments, diagnosing CI failures and retrying flaky checks along the way.
Break a work-items.md file (produced by /plan-work-items) into independently-grabbable GitHub issues, one per slice, in each slice's target repo.
$ npx skills add testdouble/han --skill work-items-to-issues -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install testdouble/han work-items-to-issues --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/testdouble/han.git skills-src && mkdir -p .claude/skills && cp -r skills-src/han-github/skills/work-items-to-issues .claude/skills/work-items-to-issues && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "work-items-to-issues" agent skill from https://github.com/testdouble/han/tree/main/han-github/skills/work-items-to-issues into .claude/skills/work-items-to-issues/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "work-items-to-issues", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/testdouble/han/tree/main/han-github/skills/work-items-to-issuesType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add testdouble/han --skill work-items-to-issues -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install testdouble/han work-items-to-issues --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/testdouble/han.git skills-src && mkdir -p .agents/skills && cp -r skills-src/han-github/skills/work-items-to-issues .agents/skills/work-items-to-issues && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "work-items-to-issues" agent skill from https://github.com/testdouble/han/tree/main/han-github/skills/work-items-to-issues into .agents/skills/work-items-to-issues/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "work-items-to-issues", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add testdouble/han --skill work-items-to-issues -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install testdouble/han work-items-to-issues --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/testdouble/han.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/han-github/skills/work-items-to-issues .cursor/skills/work-items-to-issues && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "work-items-to-issues" agent skill from https://github.com/testdouble/han/tree/main/han-github/skills/work-items-to-issues into .cursor/skills/work-items-to-issues/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "work-items-to-issues", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/testdouble/han.git --path han-github/skills/work-items-to-issues--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add testdouble/han --skill work-items-to-issues -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install testdouble/han work-items-to-issues --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/testdouble/han.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/han-github/skills/work-items-to-issues .gemini/skills/work-items-to-issues && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "work-items-to-issues" agent skill from https://github.com/testdouble/han/tree/main/han-github/skills/work-items-to-issues into .gemini/skills/work-items-to-issues/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "work-items-to-issues", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install testdouble/han work-items-to-issuesInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add testdouble/han --skill work-items-to-issues -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/testdouble/han.git skills-src && mkdir -p .github/skills && cp -r skills-src/han-github/skills/work-items-to-issues .github/skills/work-items-to-issues && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "work-items-to-issues" agent skill from https://github.com/testdouble/han/tree/main/han-github/skills/work-items-to-issues into .github/skills/work-items-to-issues/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "work-items-to-issues", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add testdouble/han --skill work-items-to-issues -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install testdouble/han work-items-to-issues --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/testdouble/han.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/han-github/skills/work-items-to-issues .opencode/skills/work-items-to-issues && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "work-items-to-issues" agent skill from https://github.com/testdouble/han/tree/main/han-github/skills/work-items-to-issues into .opencode/skills/work-items-to-issues/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "work-items-to-issues", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
work-items-to-issuesBreak a work-items.md file (produced by /plan-work-items) into independently-grabbable GitHub issues, one per slice, in each slice's target repo.
Work Items To Issues is an agent skill from testdouble/han. Break a work-items.md file (produced by /plan-work-items) into independently-grabbable GitHub issues, one per slice, in each slice's target repo. Use when you want to turn a work-items file into GitHub issues, publish work items as issue tickets, or create implementation tickets that can be worked on and tracked on GitHub. Does not produce the work-items file itself — use plan-work-items to break a plan into work items first. Does not review code or post pull request comments — use post-code-review-to-pr for that.
Its SKILL.md is about 3.3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 10 other files, including scripts and reference files (for example `references/issue-template.md`, `references/reference-artifact-inventory.md` and `references/screenshot-embed-rules.md`).
It sits in Development, covering Code review and Pull requests. It works with GitHub. The repository describes itself as: Han: AI skills and agents for "Solo" product engineers and small teams. The licence is MIT.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit abba73a. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
ReadWriteEditGlobGrepBash(gh *)Bash(git *)Bash(find *)Bash(bash "${CLAUDE_PLUGIN_ROOT}/scripts/han-config-dir.sh")From allowed-tools in the SKILL.md frontmatter.
Ships 4 files in scripts/ (Shell), which the agent can run.
Shell commands in SKILL.md call:
bashFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
github.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Work Items To Issues loads about 3.3k tokens when it runs, and up to ~9.3k if it reads all its reference files. Until then it costs about 135 tokens; SKILL.md has 1,694 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from testdouble/han at commit abba73a, republished under its MIT licence (© testdouble). 1,694 words, ~3,339 tokens.
.claude/skills/work-items-to-issues/SKILL.md (or your agent's skills folder). This skill also uses 8 other files; get the full folder from GitHub.bash "${CLAUDE_PLUGIN_ROOT}/scripts/han-config-dir.sh" 2>/dev/null || echo "$HOME/.claude"cat .han/config.md 2>/dev/null || echo ""As your first action, use the Read tool on .han/config.md inside the personal config directory path above. A read
that returns no file is no personal configuration: continue silently. When that file or the project .han/config.md
probe supplies content, apply it per config-rule.md, which governs precedence
between the two files, relative-path resolution, and what to do with a file that reads but cannot be used.
Take an already-broken-down work-items.md file (produced by /plan-work-items) and publish each slice as a GitHub
issue in its target repo.
The breakdown work — drafting slices, assigning symbolic IDs, specifying dependencies, inventorying references — has already been done upstream. This skill's job is to map each slice to its target repo, validate the format, write a per-repo work-items file alongside the source, and run the publish pipeline.
work-items.md —
never as a native blocker link.blocked_by relationships are within-repo only. A cross-repo Depends on is a format error to surface for
repair.W-N for every slice) and per-repo prefixes (e.g., V2-N backend, W-N frontend, EV-N events). The publish
scripts accept any uppercase prefix.ui-designs/ subfolder, MUST embed the relevant screenshots inline using
same-target-repo raw URLs. See references/screenshot-embed-rules.md.artifacts/ subfolder of the plan that is not a contract or design reference. Full include/exclude list in
references/reference-artifact-inventory.md.If the path is not provided, ask for it. The input is a single work-items.md produced by /plan-work-items. Read it.
If the user named a target repo (or repos), a label, or an assignee, note them for Steps 2 and 6. By default, issues are created with no label and no assignee — only apply a label or assignee when the user explicitly asked for one.
Determine which repo each slice belongs to. Use both signals and reconcile them:
work-items.md files include an intro paragraph naming which SYMs
ship to which repo (e.g., "W-1 through W-4 ship to acme-api. W-5 through W-9 ship to acme-web."). Parse this for
the mapping.**Work to be done.** and **References.** blocks
reference files in the target repo. Path roots map cleanly: acme-api/... → acme/acme-api, acme-web/... →
acme/acme-web, acme-events/... → acme/acme-events. Use this to verify the prose and to assign any slice the
prose doesn't cover.If the prose and the file-path evidence disagree for a slice, surface the conflict to the user before proceeding.
Check the work-items file against the format invariants in references/issue-template.md and references/work-items-file-format.md:
## <SYM-N> — <title> with an em-dash separator (already-published
headings annotated as ## <SYM-N> (#NNN) — <title> are valid too).Depends on line. Literal bold marker **Depends on.**, trailing period, None. or comma-separated SYMs.Depends on line maps to the same target repo as the dependent slice
(under the map from Step 2).https://github.com/<org>/<target-repo>/raw/<branch>/.github/issue-assets/<feature-slug>/<SYM-N>/<file>.<ext> against
the target repo's default branch and a real file under <plan-folder>/ui-designs/, whose extension is one of the
accepted set (png, jpg, jpeg, gif, webp, svg, pdf) and is copied into the URL unchanged. <feature-slug> is the
kebab-cased basename of the plan folder.artifacts/ subfolder that is not a contract or design reference.When a check fails, attempt evidence-based repair. Pull evidence from the source work-items.md, the parent plan
referenced in its intro, the feature spec in the same folder, sibling files in the plan folder, and the target repo's
ADRs / coding standards / docs:
Depends on line — propose None. if no blockers are evident in the slice's prose. Cite the absence.Depends on — propose moving the relationship to the cross-repo work-order prose at the top of the
file and replacing the line with None. or remaining within-repo SYMs. Cite the SYM→repo map entries that prove the
cross-repo split.ui-designs/ present — propose the design frame and screenshot
files by inspecting the feature spec's Visual Reference table and the spec's inline screenshot embeds. Cite the spec
section.After validation, report findings in plain language. For each finding, name:
Then give the user three actions:
work-items.md (so the per-repo split files
inherit them) and proceed to Step 4.If validation passes with no findings, proceed silently to Step 4.
Present a table for user review:
| SYM | Title | Target repo |
|---|---|---|
| W-1 | Backend per-list validator generalization | acme/acme-api |
| W-2 | … | acme/acme-api |
| W-5 | Frontend type widening and drift comparator | acme/acme-web |
Wait for confirmation before writing files or creating issues.
For each target repo named in the SYM→repo map, write a <repo-name>.work-items.md file in the same folder as the
source work-items.md. The per-repo file is a filtered view of the source — it is the file the publish scripts consume:
The source work-items.md is not modified by the publish step. The per-repo files are what carry the (#NNN)
issue-number annotations after publishing.
For each per-repo file, publish it by running
${CLAUDE_SKILL_DIR}/scripts/publish-work-items.sh <per-repo-work-items-file> <org>/<target-repo> <plan-folder> [--label <name>] [--assignee <user>].
Pass the per-repo work-items file written in Step 5, the target repo as <org>/<target-repo>, and the plan folder that
contains the ui-designs/ subfolder.
Created issues are unassigned and carry no label by default. Append --label <name> and/or --assignee <user> only
when the user asked for a label or assignee (Step 1). Both flags are optional and may be omitted.
The wrapper runs three idempotent scripts in order:
scripts/upload-screenshots.sh — extracts every .github/issue-assets/<feature-slug>/<SYM-N>/<file>.<ext> URL
from the per-repo file and copies the matching file from <plan-folder>/ui-designs/ into the target repo, verifying
each upload. The <feature-slug> segment (the kebab-cased plan-folder basename) keeps assets from different features
that publish to the same repo from colliding. Upload is adaptive: by default each file is written directly to the
default branch via the GitHub Contents API, but if that branch is protected and rejects the direct write (HTTP 409),
the script falls back to committing the assets to an assets branch, opening a pull request, and printing the PR URL.
The embedded image URLs always name the default branch, so on the PR path the inline designs render once that assets
PR merges — the issues are still created immediately. Overwrites existing files cleanly and, on re-run, reuses the
assets branch and open PR — but only a branch it created for this feature (one already carrying the feature's
issue-assets/<feature-slug>/ tree); a same-named branch it does not own is refused rather than committed onto.scripts/create-issues.sh — creates one GitHub issue per ## <SYM-N> slice in file order (blocker-first),
unassigned and unlabeled by default. When --label <name> is passed, it applies that label to every issue, creating
it on the repo only if it does not already exist (an existing label's color and description are left intact); when
--assignee <user> is passed, it assigns each issue to that user. Captures each returned issue number and rewrites
the heading in place to ## <SYM-N> (#NNN) — <title>. Skips slices already annotated with (#NNN) so partial runs
resume cleanly.scripts/link-blockers.sh — reads the SYM↔#NNN mapping from the rewritten headings, walks each **Depends on.**
line, and POSTs repos/<repo>/issues/<N>/dependencies/blocked_by once per blocker. Errors out if a blocker SYM is
not present in the same file (cross-repo dependencies are forbidden as native links — they belong in the cross-repo
work-order prose).When upload-screenshots.sh reports that it fell back to PR mode (it prints a NOTE: with an assets-branch pull
request URL), surface that PR URL to the user and tell them the issues' inline designs render only once that assets PR
merges. This is a required follow-up action; do not summarize it away.
The format invariants the scripts depend on (heading shape, URL scheme, Depends on syntax) are documented in
references/issue-template.md. Edits to that template require matching script changes.
© testdouble, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 8 other files (scripts, references) in han-github/skills/work-items-to-issues of testdouble/han.
Open the folder on GitHubat commit abba73a
Work Items To Issues next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Work Items To Issues this skilltestdouble/han | 279 | — | ~3.3k | Automated safety check: Pass | MIT | |
| PR Babysitteropeninterpreter/openinterpreter | 69k | 3 repos | ~4.2k | Automated safety check: Pass | Apache-2.0 | |
| GitHub Review Iterationprisma/orm | 48k | — | ~2.2k | Automated safety check: Pass | Apache-2.0 | |
| PR Finalize Reviewmicrosoft/garnet | 12k | — | ~3.1k | Automated safety check: Pass | MIT | |
| PR Review State Fetchprisma/orm | 48k | — | ~767 | Automated safety check: Pass | Apache-2.0 | |
| Fastlane Pull Request Reviewfastlane/fastlane | 42k | — | ~550 | Automated safety check: Pass | MIT |
openinterpreter/openinterpreter
Watches an open GitHub pull request until it merges, handling review comments, diagnosing CI failures and retrying flaky checks along the way.
prisma/orm
Runs a loop on a GitHub pull request: fetch review state, triage comments into actions, implement them and resolve threads, repeating until nothing actionable is left.
microsoft/garnet
Checks that a pull request's title and description match its implementation and reviews the code for Garnet best practices, reporting findings without posting them.
prisma/orm
Fetches a pull request's canonical review state as JSON, validates it, and renders markdown, a text summary and triage target files from it using bundled scripts.
fastlane/fastlane
Reviews a fastlane pull request against its linked issue and the project guides, separating blocking from non-blocking findings and handling vulnerabilities privately.
saadeghi/daisyui
Reviews open pull requests in the daisyUI repository using read-only GitHub data and isolated base-versus-PR checks, then writes a merge verdict report.
testdouble/han
Convert a stakeholder summary markdown file into a single self-contained HTML executive report — bottom line and decision asks up front, supporting detail later — styled with a Test Double-derived…
testdouble/han
Update Han plugin documentation so every skill, agent, guidance doc, index, and cross-reference is current and accurate.
testdouble/han
Authoritative guidance for building Claude Code skills, agents, and plugins, plus init and update steps that install and refresh the plugin-building skills in the current repository.
testdouble/han
Cut a Han release: update CHANGELOG.md with the changes since the last release, bump and tag every plugin that changed as {plugin-name}--v{version} so a version-constrained dependency can resolve…
testdouble/han
Builds a feature implementation plan from an existing feature specification (or equivalent context) through a facilitated team conversation.
testdouble/han
Restructure existing code without changing its behavior, through a test-gated refactoring loop: a named target, a green suite over that target before any edit, a planned sequence of small named…
Works with
Categories
Break a work-items.md file (produced by /plan-work-items) into independently-grabbable GitHub issues, one per slice, in each slice's target repo. Work Items To Issues is an agent skill from testdouble/han.md file (produced by /plan-work-items) into independently-grabbable GitHub issues, one per slice, in each slice's target repo.
Work Items To Issues fits situations like: you want to turn a work-items file into GitHub issues; publish work items as issue tickets; create implementation tickets that can be worked on and tracked on GitHub.
Run `npx skills add testdouble/han --skill work-items-to-issues -a claude-code`. Or copy the skill folder (han-github/skills/work-items-to-issues in testdouble/han) into .claude/skills/work-items-to-issues in your project. Claude Code loads it when a task matches its description.
Run `npx skills add testdouble/han --skill work-items-to-issues -a codex`. Or copy the skill folder (han-github/skills/work-items-to-issues in testdouble/han) into .agents/skills/work-items-to-issues in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add testdouble/han --skill work-items-to-issues -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/work-items-to-issues, .gemini/skills/work-items-to-issues, .github/skills/work-items-to-issues and .opencode/skills/work-items-to-issues in your project.
Going by SKILL.md and its folder, Work Items To Issues needs a shell for the scripts in its folder and the command-line tools its instructions call (bash). Our summary lists: A Bash shell. Its frontmatter pre-approves these tools: Read, Write, Edit, Glob, Grep, Bash(gh *), Bash(git *), Bash(find *), Bash(bash "${CLAUDE_PLUGIN_ROOT}/scripts/han-config-dir.sh").
SKILL.md names 1 domain. In commands or code: github.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Work Items To Issues is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.3k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 6k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Work Items To Issues: PR Babysitter (openinterpreter/openinterpreter, 69k stars), GitHub Review Iteration (prisma/orm, 48k stars), PR Finalize Review (microsoft/garnet, 12k stars) and PR Review State Fetch (prisma/orm, 48k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
testdouble (a GitHub organization) maintains it in testdouble/han, which has 279 GitHub stars. The repository holds 54 skills in this directory. The repository was last updated on October 1, 2026.
Source: testdouble/han on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.