一键导入
find-dupes
Find potential duplicate Shortcut stories, present pairs for review, execute decisions (archive, merge, link)
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Find potential duplicate Shortcut stories, present pairs for review, execute decisions (archive, merge, link)
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Refresh priority signals, manage active epics, and refresh Near Term pool
Multi-session deliverable play for projects spanning 3+ sessions with concrete outputs (proposals, strategies, wireframes). Provides project-level structure, evidence provenance, and cross-session handoff.
Investigation-driven card grooming — investigate across data sources, synthesize findings into card content, present for approval
Use when acting as a reviewer in an AgenTerminal review conversation. Handles both code reviews (REVIEW_APPROVED) and plan reviews (PLAN_APPROVED).
Match Slack
Weekly release impact review — pull PostHog data for Released cards and tracked PRs, classify, draft observations, post to Slack
| name | find-dupes |
| description | Find potential duplicate Shortcut stories, present pairs for review, execute decisions (archive, merge, link) |
| disable-model-invocation | true |
Find potential duplicate stories in Shortcut, present pairs for review, and execute decisions: archive the loser, merge content, add story links.
This is primarily a hygiene play, not a recurring one. Play 1 (/sync-ideas)
catches duplicates at intake via semantic matching against the existing backlog.
This skill is for periodic sweeps or after bulk imports that bypassed Play 1.
Before starting, read these shared sections from box/shortcut-ops.md:
agenterminal.execute_approved or present the command
for the user to run.reference/tooling-logistics.md for
tested recipes. Story link creation uses /api/v3/story-links, NOT a
nested endpoint under stories.Pull active stories by state. Don't manually curl Shortcut for the card list:
python3 box/shortcut-cards.py --query '!is:archived !state:Released state:"In Definition"' --summary
Repeat for other active states (Need Requirements, Backlog, Build, Test). Exclude archived and Released stories from analysis.
Lead with semantic judgment. Read titles and descriptions. Use your judgment to identify pairs that describe the same need from different angles. The first run (2026-02-11) showed this catches nuances that keyword similarity misses — e.g., SC-28 and SC-140 being the same feature from different angles.
Keyword/Jaccard similarity (>=35% shared terms) can pre-filter large candidate sets but isn't the primary detection method.
Present one pair at a time with full content for comparison. Possible decisions:
For each approved decision, use the wrapper scripts via execute_approved.
Scripts include idempotency checks and read-back verification. Exit 0/1/2.
python3 box/shortcut-mutate.py archive STORY_ID. Carry over
the archived story's Slack permalink to the surviving story (preserves
provenance).python3 box/shortcut-mutate.py story-link SUBJECT_ID OBJECT_ID "duplicates".
Use verb duplicates (loser to winner) or relates to.## Merged from SC-{id} heading.Before each mutation, check:
archived status before archiving## Merged from SC-{id} heading already present before merging content