Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Unified issue discovery and creation. Create issues from GitHub/text, discover issues via multi-perspective analysis, or prompt-driven iterative exploration. Triggers on "issue:new", "issue:discover", "issue:discover-by-prompt", "create issue", "discover issues", "find issues".
.claude/skills/catlog22-issue-discover/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 696% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 165% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 278% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 75% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 74% | 0% |
Unified issue discovery and creation skill covering three entry points: manual issue creation, perspective-based discovery, and prompt-driven exploration.
┌─────────────────────────────────────────────────────────────────┐
│ Issue Discover Orchestrator (SKILL.md) │
│ → Action selection → Route to phase → Execute → Summary │
└───────────────┬─────────────────────────────────────────────────┘
│
├─ request_user_input: Select action
│
┌───────────┼───────────┬───────────┐
↓ ↓ ↓ │
┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ Phase 1 │ │ Phase 2 │ │ Phase 3 │ │
│ Create │ │Discover │ │Discover │ │
│ New │ │ Multi │ │by Prompt│ │
└─────────┘ └─────────┘ └─────────┘ │
↓ ↓ ↓ │
Issue Discoveries Discoveries │
(registered) (export) (export) │
│ │ │ │
│ ├───────────┤ │
│ ↓ │
│ ┌───────────┐ │
│ │ Phase 4 │ │
│ │Quick Plan │ │
│ │& Execute │ │
│ └─────┬─────┘ │
│ ↓ │
│ .task/*.json │
│ ↓ │
│ Direct Execution │
│ │ │
└───────────┴──────────────────────┘
↓ (fallback/remaining)
issue-resolve (plan/queue)
↓
/issue:executeccw issue CLI commands-y flag skips action selection with auto-detectionWhen --yes or -y: Skip action selection, auto-detect action from input type.
issue-discover <input>
issue-discover [FLAGS] "<input>"
# Flags
-y, --yes Skip all confirmations (auto mode)
--action <type> Pre-select action: new|discover|discover-by-prompt
# Phase-specific flags
--priority <1-5> Issue priority (new mode)
--perspectives <list> Comma-separated perspectives (discover mode)
--external Enable Exa research (discover mode)
--scope <pattern> File scope (discover/discover-by-prompt mode)
--depth <level> standard|deep (discover-by-prompt mode)
--max-iterations <n> Max exploration iterations (discover-by-prompt mode)
# Examples
issue-discover https://github.com/org/repo/issues/42 # Create from GitHub
issue-discover "Login fails with special chars" # Create from text
issue-discover --action discover src/auth/** # Multi-perspective discovery
issue-discover --action discover src/api/** --perspectives=security,bug # Focused discovery
issue-discover --action discover-by-prompt "Check API contracts" # Prompt-driven discovery
issue-discover -y "auth broken" # Auto mode createInput Parsing:
└─ Parse flags (--action, -y, --perspectives, etc.) and positional args
Action Selection:
├─ --action flag provided → Route directly
├─ Auto-detect from input:
│ ├─ GitHub URL or #number → Create New (Phase 1)
│ ├─ Path pattern (src/**, *.ts) → Discover (Phase 2)
│ ├─ Short text (< 80 chars) → Create New (Phase 1)
│ └─ Long descriptive text (≥ 80 chars) → Discover by Prompt (Phase 3)
└─ Otherwise → request_user_input to select action
└─ Initialize progress tracking: functions.update_plan([...phases])
Phase Execution (load one phase):
├─ Phase 1: Create New → phases/01-issue-new.md
├─ Phase 2: Discover → phases/02-discover.md
└─ Phase 3: Discover by Prompt → phases/03-discover-by-prompt.md
Post-Phase:
└─ Summary + Next steps recommendation| Phase | Document | Load When | Purpose | |-------|----------|-----------|---------| | Phase 1 | phases/01-issue-new.md | Action = Create New | Create issue from GitHub URL or text description | | Phase 2 | phases/02-discover.md | Action = Discover | Multi-perspective issue discovery (bug, security, test, etc.) | | Phase 3 | phases/03-discover-by-prompt.md | Action = Discover by Prompt | Prompt-driven iterative exploration with Gemini planning | | Phase 4 | phases/04-quick-execute.md | Post-Phase = Quick Plan & Execute | Convert high-confidence findings to tasks and execute directly |
ccw issue CLI for all issue operations, NEVER read files directlyjavascriptfunction detectAction(input, flags) { // 1. Explicit --action flag if (flags.action) return flags.action; const trimmed = input.trim(); // 2. GitHub URL → new if (trimmed.match(/github\.com\/[\w-]+\/[\w-]+\/issues\/\d+/) || trimmed.match(/^#\d+$/)) { return 'new'; } // 3. Path pattern (contains **, /, or --perspectives) → discover if (trimmed.match(/\*\*/) || trimmed.match(/^src\//) || flags.perspectives) { return 'discover'; } // 4. Short text (< 80 chars, no special patterns) → new if (trimmed.length > 0 && trimmed.length < 80 && !trimmed.includes('--')) { return 'new'; } // 5. Long descriptive text → discover-by-prompt if (trimmed.length >= 80) { return 'discover-by-prompt'; } // Cannot auto-detect → ask user return null; }
javascript// When action cannot be auto-detected const answer = functions.request_user_input({ questions: [{ header: "Action", id: "action", question: "What would you like to do?", options: [ { label: "Create New Issue (Recommended)", description: "Create issue from GitHub URL, text description, or structured input" }, { label: "Discover Issues", description: "Multi-perspective discovery: bug, security, test, quality, performance, etc." }, { label: "Discover by Prompt", description: "Describe what to find — Gemini plans the exploration strategy iteratively" } ] }] }); // BLOCKS (wait for user response) // Route based on selection // answer.answers.action.answers[0] → selected label const actionMap = { "Create New Issue (Recommended)": "new", "Discover Issues": "discover", "Discover by Prompt": "discover-by-prompt" }; // Initialize progress tracking (MANDATORY) functions.update_plan([ { id: "action-select", title: "Action Selection", status: "completed" }, { id: "phase-exec", title: `Phase: ${selectedAction}`, status: "in_progress" }, { id: "post-phase", title: "Post-Phase: Next Steps", status: "pending" } ])
User Input (URL / text / path pattern / descriptive prompt)
↓
[Parse Flags + Auto-Detect Action]
↓
[Action Selection] ← request_user_input (if needed)
↓
[Read Selected Phase Document]
↓
[Execute Phase Logic]
↓
[Summary + Next Steps]
├─ After Create → Suggest issue-resolve (plan solution)
└─ After Discover → Suggest export to issues, then issue-resolveCreate a new subagent with task assignment.
javascriptconst agentId = spawn_agent({ agent_type: "{agent_type}", message: ` ## TASK ASSIGNMENT ### MANDATORY FIRST STEPS (Agent Execute) 1. Execute: ccw spec load --category exploration 2. Execute: ccw spec load --category debug (known issues cross-reference) ## TASK CONTEXT ${taskContext} ## DELIVERABLES ${deliverables} ` })
Get results from subagent (only way to retrieve results).
javascriptconst result = wait_agent({ timeout_ms: 1800000 // 30 minutes }) if (result.timed_out) { // Handle timeout via 4-step cascade: status probe → force finalize → close } // Check completion status if (result.status[agentId].completed) { const output = result.status[agentId].completed; }
Assign new work to active subagent (for clarification or follow-up).
javascriptfollowup_task({ target: agentId, message: ` ## CLARIFICATION ANSWERS ${answers} ## NEXT STEP Continue with plan generation. ` })
Clean up subagent resources (irreversible).
javascriptclose_agent({ target: agentId })
Data Access Principle: Issues files can grow very large. To avoid context overflow:
| Operation | Correct | Incorrect | |-----------|---------|-----------| | List issues (brief) | ccw issue list --status pending --brief | Read('issues.jsonl') | | Read issue details | ccw issue status <id> --json | Read('issues.jsonl') | | Create issue | echo '...' \| ccw issue create | Direct file write | | Update status | ccw issue update <id> --status ... | Direct file edit |
ALWAYS use CLI commands for CRUD operations. NEVER read entire issues.jsonl directly.
| Error | Resolution | |-------|------------| | No action detected | Show request_user_input with all 3 options | | Invalid action type | Show available actions, re-prompt | | Phase execution fails | Report error, suggest manual intervention | | No files matched (discover) | Check target pattern, verify path exists | | Gemini planning failed (discover-by-prompt) | Retry with qwen fallback | | Agent lifecycle errors | Ensure close_agent in error paths to prevent resource leaks |
Progress: functions.update_plan([{id: "phase-exec", status: "completed"}, {id: "post-phase", status: "in_progress"}])
After successful phase execution, recommend next action:
javascript// After Create New (issue created) functions.request_user_input({ questions: [{ header: "Next Step", id: "next_after_create", question: "Issue created. What next?", options: [ { label: "Plan Solution (Recommended)", description: "Generate solution via issue-resolve" }, { label: "Create Another", description: "Create more issues" }, { label: "Done", description: "Exit workflow" } ] }] }); // BLOCKS (wait for user response) // answer.answers.next_after_create.answers[0] → selected label // After Discover / Discover by Prompt (discoveries generated) functions.request_user_input({ questions: [{ header: "Next Step", id: "next_after_discover", question: `Discovery complete: ${findings.length} findings, ${executableFindings.length} executable. What next?`, options: [ { label: "Quick Plan & Execute (Recommended)", description: `Fix ${executableFindings.length} high-confidence findings directly` }, { label: "Export to Issues", description: "Convert discoveries to issues" }, { label: "Done", description: "Exit workflow" } ] }] }); // BLOCKS (wait for user response) // answer.answers.next_after_discover.answers[0] → selected label // If "Quick Plan & Execute (Recommended)" → Read phases/04-quick-execute.md, execute // Mark workflow complete functions.update_plan([{ id: "post-phase", status: "completed" }])
issue-resolve - Plan solutions, convert artifacts, form queues, from brainstormissue-manage - Interactive issue CRUD operations/issue:execute - Execute queue with DAG-based parallel orchestrationccw issue list - List all issuesccw issue status <id> - View issue details| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 7,646 | 18,894 | +147% | 1 | 1 | 0% | 1,246 | 3,627 | +191% | 0 | 0 | — |
case-02 | fail→pass | 7,454 | 17,681 | +137% | 1 | 1 | 0% | 783 | 6,236 | +696% | 0 | 0 | — |
case-03 | fail→fail | 4,151 | 32,943 | +694% | 1 | 1 | 0% | 275 | 3,787 | +1277% | 0 | 0 | — |
case-04 | fail→fail | 19,117 | 6,670 | -65% | 1 | 1 | 0% | 4,088 | 3,854 | -6% | 0 | 0 | — |
case-05 | pass→fail | 7,043 | 5,562 | -21% | 1 | 1 | 0% | 1,301 | 3,635 | +179% | 0 | 0 | — |
case-06 | pass→fail | 23,700 | 8,292 | -65% | 1 | 1 | 0% | 4,686 | 3,991 | -15% | 0 | 0 | — |
case-07 | fail→pass | 9,521 | 4,809 | -49% | 1 | 1 | 0% | 1,625 | 4,312 | +165% | 0 | 0 | — |
case-08 | fail→pass | 7,155 | 4,170 | -42% | 1 | 1 | 0% | 1,098 | 4,151 | +278% | 0 | 0 | — |
case-09 | pass→pass | 8,646 | 3,453 | -60% | 1 | 1 | 0% | 1,371 | 4,016 | +193% | 0 | 0 | — |
case-10 | fail→fail | 8,868 | 3,359 | -62% | 1 | 1 | 0% | 1,575 | 3,808 | +142% | 0 | 0 | — |
case-11 | fail→pass | 12,952 | 2,152 | -83% | 1 | 1 | 0% | 2,111 | 3,701 | +75% | 0 | 0 | — |
case-12 | fail→pass | 11,520 | 2,835 | -75% | 1 | 1 | 0% | 2,164 | 3,765 | +74% | 0 | 0 | — |
case-17 | fail→pass | 16,672 | 2,189 | -87% | 1 | 1 | 0% | 2,714 | 3,727 | +37% | 0 | 0 | — |
case-13 | fail→pass | 10,777 | 4,429 | -59% | 1 | 1 | 0% | 1,818 | 4,121 | +127% | 0 | 0 | — |
case-14 | fail→pass | 11,057 | 5,503 | -50% | 1 | 1 | 0% | 1,840 | 4,075 | +121% | 0 | 0 | — |
case-15 | fail→pass | 8,601 | 2,557 | -70% | 1 | 1 | 0% | 1,493 | 3,707 | +148% | 0 | 0 | — |
case-16 | pass→fail | 8,143 | 5,008 | -38% | 1 | 1 | 0% | 1,290 | 4,276 | +231% | 0 | 0 | — |
case-18 | fail→pass | 10,964 | 4,832 | -56% | 1 | 1 | 0% | 1,698 | 4,277 | +152% | 0 | 0 | — |
case-19 | fail→pass | 10,466 | 1,348 | -87% | 1 | 1 | 0% | 1,754 | 3,537 | +102% | 0 | 0 | — |
case-20 | fail→pass | 10,474 | 3,389 | -68% | 1 | 1 | 0% | 1,844 | 3,907 | +112% | 0 | 0 | — |
case-21 | fail→fail | 12,054 | 5,277 | -56% | 1 | 1 | 0% | 1,605 | 4,447 | +177% | 0 | 0 | — |
case-22 | fail→pass | 13,597 | 2,122 | -84% | 1 | 1 | 0% | 2,211 | 3,681 | +66% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 17 counted toward the lift figure. The other 5 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +45 percentage points is the difference between those two pass rates over the 17 comparable cases. 4 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.