Skip to content
Development
Skill

/work-items-to-issues

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

From plugin
han
26747 skills31 agents
Install
$ npx -y skills add testdouble/han --skill work-items-to-issues --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/work-items-to-issues

Context preview

The summary Claude sees to decide when to auto-load this skill.

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

SKILL.md

work-items-to-issues.SKILL.md
name: work-items-to-issues
description: >
  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.
argument-hint:
  "[path to work-items.md] [target repo(s), e.g. org/repo] [--label name (optional)] [--assignee user (optional)]"
allowed-tools:
  Read, Write, Edit, Glob, Grep, Bash(gh *), Bash(git *), Bash(find *),
  Bash(bash "${CLAUDE_PLUGIN_ROOT}/scripts/han-config-dir.sh")

Project Context

  • personal config directory: !`bash "${CLAUDE_PLUGIN_ROOT}/scripts/han-config-dir.sh" 2>/dev/null || echo "$HOME/.claude"`
  • project .han/config.md: !`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](../../references/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.

Work Items to GitHub Issues

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.

Rules

  • Each slice lives in exactly one repo. Cross-repo coordination is documented in prose at the top of `work-items.md` —

never as a native blocker link.

  • Native `blocked_by` relationships are **within-repo only**. A cross-repo `Depends on` is a format error to surface for

repair.

  • Symbolic-ID prefixes: accept whatever the input uses. Both shapes are valid input — single-prefix across repos (e.g.,

`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.

  • Every slice issue body MUST link the reference artifacts an implementer needs — API/event contracts, design frames,

schema docs, runbooks, ADRs, coding standards. Issues that consume an HTTP endpoint or event payload MUST link the contract section that defines it.

  • UI slices, when the plan folder has a `ui-designs/` subfolder, MUST embed the relevant screenshots inline using

same-target-repo raw URLs. See [references/screenshot-embed-rules.md](./references/screenshot-embed-rules.md).

  • NEVER include process artifacts in issue bodies or the work-items preamble. Excluded categories — iteration histories,

decision logs, review findings, team findings, facilitation summaries, gap analyses, and anything under an `artifacts/` subfolder of the plan that is not a contract or design reference. Full include/exclude list in [references/reference-artifact-inventory.md](./references/reference-artifact-inventory.md).

Process

1. Locate the work-items file

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.

2. Build the SYM→repo map

Determine which repo each slice belongs to. Use both signals and reconcile them:

  • **Primary — cross-repo work order prose.** Most `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.

  • **Corroborating — file paths inside each slice.** Each slice's `**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.

3. Validate the format with evidence-based repair

Check the work-items file against the format invariants in [references/issue-template.md](./references/issue-template.md) and [references/work-items-file-format.md](./references/work-items-file-format.md):

  • **Heading shape.** Every slice heading matches `## <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.
  • **Within-repo blockers.** Every SYM named in a `Depends on` line maps to the same target repo as the dependent slice

(under the map from Step 2).

  • **Screenshot URLs.** When present, match

`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.

  • **References block.** Present whenever the slice consumes an H
Read more
Ships withhan

Han is a suite of AI skills and agents for solo (or small-team) product engineers.

Get the whole plugin

Other skills on han.