본문으로 건너뛰기
cccskills
무료GitHub에 공개

issue-dedup

Before creating a GitHub issue or epic, search for an existing related one and force a reuse / replace / new decision — so the issue-first flow can't silently mint a duplicate. The create-time half of the dedup gate (the pickup-time half is /issue-sanity-check). Use whenever you're about to open an issue/epic, or run /issue-dedup. Backed by a hard PreToolUse hook on issue_write create.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

연동 도구GitHub
설치 방법 보기

포함된 파일(1)

  • SKILL.md5.6 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

Issue Dedup — search before you create (HARD GATE)

The repo is issue-first: the first action for any initiative is opening the tracking issue. The trap that creates is duplicate / colliding issues — a teammate (or a past you, in an ephemeral session) already opened the epic, and a fresh agent dutifully opens a second one. github-tasks already says "search before creating," but that was a soft, skippable step. This skill makes it a gate, and a PreToolUse hook (require-issue-dedup.mjs) backstops it so a create can't land without proof a search ran.

Scope split: this is the create-time gate (don't mint a duplicate). The pickup-time gate — "should this issue even be done?" — is the sibling /issue-sanity-check skill. Both are sub-issues of epic #297.

When this fires

Any time you're about to call mcp__github__issue_write with method: create — a new epic, sub-issue, or standalone issue. Run the procedure below first.

Procedure

1. Extract search terms

Pull 2–5 distinctive keywords from the intended title/body — the nouns of the work (feature name, package/app, the thing being changed). Drop filler ("add", "fix", "the").

2. Auto-search open and recently-closed work

Stale-but-closed issues matter: the #257/#265 blog case duplicated closed epics. Search both:

mcp__github__search_issues  query: "repo:FriendlyInternet/nuxt-crouton <keywords>"
mcp__github__search_issues  query: "repo:FriendlyInternet/nuxt-crouton in:title <keyword>"
mcp__github__list_issues    labels: ["epic"]      # scan epic titles for overlap

Run a couple of phrasings — exact-title and broad-body — and include state:closed in at least one. Keep results in-context: these calls overflow easily (a bare list_issues labels:["epic"] came back at ~140k chars), so pass minimal_output: true, a small perPage (5–10), and prefer in:title filters — only widen if a narrow query misses. If output still overflows, narrow further rather than slicing the blob out-of-band.

3. Surface the matches to the human (number · state · why-similar)

Present a short table of candidates — never silently proceed:

#StateTitleWhy it might be the same
#297openStale-epic dedup…same feature — the dedup gate
#265closed (completed)POC pipeline preview URLadjacent, not the same

If a candidate's closing comment cites artifacts (writeups, PRs) that don't exist in the repo, flag it — that's the #297 smell (a stale close hiding undone work).

4. Force a reuse / replace / new decision — this is the hard stop

Do not create until one is chosen:

  • Reuse — a match already covers this. Stop. Don't create. Continue that issue (assign yourself, status:in-progress). This is the whole point of the gate.
  • Replace — a stale/closed issue should be superseded. Link it in the new body (Supersedes #NN) and, if it's open, close it not_planned referencing the replacement.
  • New — genuinely nothing matches (or matches are only adjacent). Proceed to create.

How to ask (the on-match signal):

  • Interactive session → ask in chat with AskUserQuestion (reuse / replace / new) and wait. This is the cheapest stop.
  • Autonomous / pipeline (no human in the loop to block on) → you may create the issue, but immediately post a reply comment on it naming the suspected duplicate(s) and asking the owner to confirm reuse / replace / keep — assigned to them so it surfaces. A created issue with an unresolved dup question is honest; a silent duplicate is not.

5. Record the dedup result in the body (REQUIRED — the hook checks for it)

Every created issue body MUST end with a one-line dedup attestation — it's both the audit trail and the token the backstop hook greps for. Format:

_Dedup-checked: searched «keyword, keyword» → no match_

or, when something related turned up:

_Dedup-checked: searched «dedup, issue» → related #297 (open), #800 (open); new because this is the create-time half_

The literal prefix Dedup-checked: is what the hook requires. Omit it and require-issue-dedup.mjs blocks the create with a reminder to run this skill.

The backstop hook

.claude/hooks/require-issue-dedup.mjs is a PreToolUse gate on mcp__github__issue_write:

  • Only gates method: create — update and everything else pass untouched.
  • Blocks (exit 2) when the body lacks a Dedup-checked: line.
  • Mirrors require-comment-provenance.mjs exactly (body-content check, no state).

It's a backstop, not the brain — it can't tell whether you really searched, only that you attested. Do the real search (steps 1–4); the marker is your signed receipt.

What this is not

  • Not the pickup gate — that's /issue-sanity-check (#800).
  • Not a substitute for judgement — "related" ≠ "duplicate". Adjacent issues coexist; only a genuine same-scope overlap is a reuse/replace.

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

a11y

무료

Accessibility review for Vue surfaces — the code-cleaning analog of /code-review and /simplify, pointed at WCAG/ARIA. Reviews just your diff (or a package/file), rates findings by severity, and either comments inline on the PR (--comment) or applies the safe fixes for you (--fix). Steers the depth-aware `a11y` subagent. Use when asked to "check accessibility", "a11y this", "audit ARIA/keyboard", or run /a11y.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

FriendlyInternet/nuxt-crouton102026년 10월 20일 업데이트

ask-human

무료

Emit a blocking question the owner can read in ~10 seconds and answer in one reply — the scannable, recommendation-first handoff every agent posts when it hits a fork it can't own. Leads with the one decision + a recommendation, carries the 🤖 provenance header, doubles as the

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

FriendlyInternet/nuxt-crouton102026년 10월 20일 업데이트

audit

무료

Audit packages for documentation completeness, detect drift between code and docs, and maintain documentation quality across the monorepo. Use when checking package docs, running audits, or reviewing documentation health.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

FriendlyInternet/nuxt-crouton102026년 10월 20일 업데이트

Author a placeable layout block that looks right at ANY pane size. The one hard rule — size to the PANE with container queries (@container), never the viewport — plus list/form playbooks and the sizing contract (minWidth etc.) the viability metric reads. Use when adding/converting a croutonLayoutBlocks block, or when a block overflows/breaks in a narrow pane.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

FriendlyInternet/nuxt-crouton102026년 10월 20일 업데이트

When a bug or regression is reported, the FIRST step — before fixing — is to research how and when it was introduced (git archaeology), then record that finding on the tracking issue/PR. Use the moment a bug, error, broken build, or "this used to work" is reported, before writing a fix. Produces a first-bad-commit (or "not a code regression") note you paste onto the issue.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

FriendlyInternet/nuxt-crouton102026년 10월 20일 업데이트

commit

무료

Smart, granular git commits following monorepo conventions. Analyzes changes, filters to session-relevant files, groups by intent, and uses conventional commit format. Use when committing code changes.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

FriendlyInternet/nuxt-crouton102026년 10월 20일 업데이트

FriendlyInternet의 스킬 모두 보기

이 스킬의 문제 신고