dotclaude

Skill in productivity

issue-writer

Turn a rough bug report, idea, or complaint into an actionable issue by investigating the codebase first for reproduction steps, expected vs actual behaviour, suspected location, and acceptance criteria, then filing it with gh or emitting paste-ready markdown. Use when asked to file or write up an issue, or when a bug mentioned in passing should be tracked.

Install

As a plugin

Bundled in the productivity plugin. Add the marketplace once, then install the bundle; it updates with the marketplace.

/plugin marketplace add KhaledSaeed18/dotclaude
/plugin install productivity@dotclaude

As a single item

Run from the project root; the skill lands under .claude/. Copy it to ~/.claude/ to make it global.

npx shadcn@latest add KhaledSaeed18/dotclaude/issue-writer

Files installed

  • .claude/skills/issue-writer/SKILL.md

What it does

An issue is a work order for someone with none of this conversation's context. Write it so that a developer who picks it up cold can reproduce the problem, knows when they are done, and starts in the right file - and do the investigating now, while the context exists, rather than leaving it to them. A two-minute look at the code turns "the export is broken" into an issue with a suspected cause and a pointer.

Step 1: Extract and classify

From the user's description (and the current conversation - the bug being discussed right now is usually the subject), pin down:

  • Type: bug, feature request, or task/chore. This decides the template below.
  • The one-sentence problem. If you cannot state it in one sentence, you do not understand it yet; ask the one or two questions that resolve it. Do not interrogate - two questions maximum, then write with what you have and mark the gaps.
  • Severity signals for bugs: data loss, wrong results, crash, cosmetic? Who hits it and how often?

Step 2: Investigate before writing

Spend a short, bounded pass in the repo making the issue concrete:

  • Bugs: find the code path involved (grep the error message, the feature name, the route). Note the suspected file/function. If reproduction is cheap - a failing command, a curl, a unit test - actually run it and record the real output. Check git log on the suspect file for a recent change that correlates.
  • Features: find where the change would land, what patterns exist to follow, and any related prior art (an existing similar feature, an old TODO, a closed issue).
  • Duplicates: when gh is available, search first - gh issue list --search "<keywords>" --state all --limit 10. A duplicate found now saves a triage round-trip; link it instead of filing twice.

Everything found goes in the issue as fact ("reproduced on main at abc1234, output below"), everything guessed goes in clearly marked as hypothesis ("possibly introduced by #118 - unverified").

Step 3: Write it

Title: specific and searchable - symptom plus context, under ~70 chars. "CSV export drops rows with embedded newlines", not "Export broken".

Bug body:

## Summary
<one sentence: who hits what, under which conditions>

## Reproduction
1. <exact steps, commands, or failing test - copy-pasteable>

**Expected:** <what should happen>
**Actual:** <what happens - real output/stack trace in a collapsed block if long>

## Environment
<version/commit, OS/browser/runtime - only the ones that matter>

## Notes
<suspected location (file:line), correlated change, workaround if any - hypotheses labelled as such>

Feature body: Problem (the need, not the solution), Proposed solution (concrete but open to alternatives), Acceptance criteria (checkboxes a reviewer can verify), Out of scope (the line that stops creep).

Respect the repository's own conventions: if .github/ISSUE_TEMPLATE/ exists, fit its structure and answer its fields; reuse the labels the repo actually has (gh label list) instead of inventing new ones.

Step 4: File or hand over

With gh and a confirmed target repo: show the final title and body, then file with gh issue create --title ... --body ... plus appropriate labels, and report the URL. Filing is outward-facing - show before sending unless the user already said to file directly.

Without gh or when the tracker is elsewhere (Jira, Linear): emit the finished markdown in a code block, ready to paste, with the labels/priority suggestion noted at the top.

This is the skill as installed, rendered from its source on GitHub. Read it as Markdown.

  • brainstormingTurn a rough idea into a fully formed, written design through collaborative dialogue, exploring intent, requirements, and trade-offs one question at a...
  • decision-logKeep a lightweight decision log for a project or a person: one dated line per decision with the choice, the reason, the alternatives, who decided, and a...
  • grill-meRelentlessly stress-test a plan, design, architecture, idea, or strategy until all critical decisions are resolved. Use when a plan, design, or decision...
  • handoffCompact the current conversation into a handoff document for another agent to pick up. Use when ending a session, switching agents, or preserving context...
  • learning-planTurn a topic to learn into a sequenced study plan with a goal test, prerequisites, ordered units with one primary resource each, spaced practice and...
  • meeting-notesTurn a meeting transcript, recording summary, or rough notes into a record people act on: decisions with their reasons, action items with one owner and a...