From dh-skills
Read any loose, unstructured context — a meeting transcript (the main case), call notes, a requirements doc, an email or Slack thread, a PRD, a voice-note dump, a screenshot, or any mix of these — extract every requirement, and create a batch of PR-sized Linear tickets in Triage that fully cover the input, with a coverage audit proving nothing was dropped. ONLY use when the user EXPLICITLY asks to turn the context into a batch of Linear tickets — e.g. "turn this transcript into tickets", "create Linear tickets covering everything in here", "break this down into Linear issues", or invokes /linear-ticket-batch. Do NOT trigger just because a transcript, notes, or requirements appear in context, or when the user is only discussing/summarising something — wait for an explicit request to create tickets.
How this skill is triggered — by the user, by Claude, or both
Slash command
/dh-skills:linear-ticket-batchThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Take any **loose, unstructured context** — most often a discovery-call transcript, but equally
Take any loose, unstructured context — most often a discovery-call transcript, but equally meeting notes, a requirements brief, a PRD, an email or Slack thread, a voice-note dump, a whiteboard photo, a half-formed spec, or several of these at once — and turn the whole thing into a set of well-structured Linear tickets that cover every requirement, each sized to a single PR, all landing in Triage.
Transcripts are the primary case, but the skill is source-agnostic: if it contains requirements, it can be turned into tickets. The differentiator vs. the per-ticket flow is coverage: a large or rambling input hides requirements in asides, decisions, "oh and also" remarks, and constraints stated once in passing. This skill exists to make sure none of them are lost. The deliverable is not just tickets — it's tickets plus a traceability audit mapping every extracted requirement to the ticket that carries it.
The mechanics of creating each individual ticket (team, labels, description structure, image upload, moving to Triage) are owned by the
linear-ticket-createskill. This skill is the front-end: ingest the big document, extract exhaustively, de-duplicate, carve into PR-sized tickets, then hand each one to that flow. Readlinear-ticket-createand follow its per-ticket steps rather than re-deriving them here.
For a single small request (one chat snippet, one screenshot, one bug), use
linear-ticket-create directly — you don't need the extraction/audit overhead.
This skill only runs when the user explicitly asks to create tickets from a document. Do not trigger it just because a transcript, meeting notes, or requirements happen to be in context, pasted, or open in the editor. In particular, do not run it when the user is only:
If you think tickets would help but the user hasn't asked, offer ("Want me to turn this into Linear tickets?") and wait — don't start creating. Treat ambiguous mentions as discussion, not a request to ticket.
Accept any of: a file path (.md, .txt, .vtt, .srt, .docx exported to text, an image
of a whiteboard — use the Read tool), pasted text, or several of these at once. If multiple
sources describe the same project (e.g. a transcript and the tidied meeting notes), read
all of them — one often contains requirements the other omits — and merge.
Steps 1–4 run once over the whole input. Step 5 runs the
linear-ticket-createflow per ticket. Steps 6–7 close the loop with the coverage audit and report.
Read tool on files/images). Do not skim or sample a
large file — requirements hide in the back half and in throwaway lines.Build a flat, numbered requirements list before thinking about tickets. Sweep the document for every category below — each is a place requirements hide:
For each requirement record: a short id (R1, R2, …), the requirement in one line, and a
verbatim source quote (so the audit can prove provenance). Quoting matters where exact
wording is the point (copy, thresholds, labels).
De-duplicate as you go: the same ask voiced three times across a transcript is one requirement (note all the spots it appears). Keep mutually-reinforcing details merged.
Per linear-ticket-create step 2: for requirements that touch existing code, grep/Glob/Read
to find where they live and capture file_path:line references and concrete facts. Don't
implement anything. For a greenfield/new project there may be no existing code — that's fine;
note it's net-new.
Group the requirements list into tickets using the Sizing ("one ticket = one PR") rules in
linear-ticket-create — split independent asks, keep tightly-coupled changes together, don't
micro-split. Every requirement (except out-of-scope items) must map to exactly one ticket;
cross-cutting constraints (accessibility, branding, "minimal deps") attach to the tickets they
constrain, or get their own ticket if substantial enough to be a PR on their own.
Then present the plan to the user before creating anything:
R1…Rn) → the ticket that will carry it (or
OUT for out-of-scope, Q for open-question-only). This is the user's chance to catch a
dropped or mis-grouped requirement before tickets exist.Wait for the user to confirm or adjust the breakdown. (If they've said "just create them", skip the wait but still produce the table so it's on record.)
linear-ticket-createFor each ticket in the agreed plan, run the linear-ticket-create workflow steps 3–7:
pick the team (Developer Hut, DEV-), read the live label list and apply what fits,
save_issue with the structured Markdown description (literal newlines), attach any images,
move to Triage. Additionally, for this skill:
Need client feedback label
when scope is unconfirmed.blocks / blockedBy in PR/stack order and reference sibling
identifiers in the description, per linear-ticket-create.Capture each returned identifier (DEV-…) and url.
After all tickets exist, re-walk the requirements list from step 2 and confirm each id now resolves to a created ticket id, an explicit out-of-scope exclusion, or a flagged open question. If any requirement has no home, that's a miss — create the missing ticket (or fold it into an existing one) before reporting. The audit is not optional; it's the reason this skill exists.
DEV-… identifier, title, and clickable url,
with dependency links noted.R1…Rn → DEV-… (or OUT / open question), so the user can
see at a glance that the whole document is accounted for.linear-ticket-create's sizing rules; split independent
asks, keep coupled changes together, link stacked tickets in PR order.linear-ticket-create; follow it.linear-ticket-create — the per-ticket engine this skill delegates to; use it directly for a
single small request that doesn't need extraction or a coverage audit.pr-to-linear-ticket — the reverse direction: back-fill a ticket for an existing PR and stamp
the PR title with its identifier.npx claudepluginhub developer-hut/marketplace --plugin dh-skillsProvides a checklist for code reviews covering functionality, security, performance, maintainability, tests, and quality. Use for pull requests, audits, team standards, and developer training.