investigate

Unified entry point for code investigation. Auto-routes to specialized detective based on query keywords. Use when investigation type is unclear or for general exploration.

248 stars

Best use case

investigate is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Unified entry point for code investigation. Auto-routes to specialized detective based on query keywords. Use when investigation type is unclear or for general exploration.

Teams using investigate should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/investigate/SKILL.md --create-dirs "https://raw.githubusercontent.com/MadAppGang/claude-code/main/plugins/code-analysis/skills/investigate/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/investigate/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How investigate Compares

Feature / AgentinvestigateStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Unified entry point for code investigation. Auto-routes to specialized detective based on query keywords. Use when investigation type is unclear or for general exploration.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# Investigate Skill

**Version:** 1.0.0
**Purpose:** Keyword-based routing to specialized detective skills
**Pattern:** Smart delegation via Task tool

## Overview

This skill analyzes your investigation query and routes to the appropriate detective specialist:
- **debugger-detective** (errors, bugs, crashes)
- **tester-detective** (tests, coverage, edge cases)
- **architect-detective** (architecture, design, patterns)
- **developer-detective** (implementation, data flow - default)

## Routing Logic

### Priority System (Highest First)

1. **Error/Debug** (Priority 1) - Time-critical bug fixes
   - Keywords: "debug", "error", "broken", "failing", "crash"
   - Route to: `debugger-detective`

2. **Testing** (Priority 2) - Specialized test analysis
   - Keywords: "test", "coverage", "edge case", "mock"
   - Route to: `tester-detective`

3. **Architecture** (Priority 3) - High-level understanding
   - Keywords: "architecture", "design", "structure", "layer"
   - Route to: `architect-detective`

4. **Implementation** (Default, Priority 4) - Most common
   - Keywords: "implementation", "how does", "code flow"
   - Route to: `developer-detective`

### Conflict Resolution

When multiple keywords from different categories are detected:
- **Highest priority wins** (Priority 1 beats Priority 2, etc.)
- **No matches**: Default to developer-detective

## Workflow

### Phase 1: Extract Query

The investigation query should be available from the task description or user input.

```bash
# Query comes from the Task description or user request
INVESTIGATION_QUERY="${TASK_DESCRIPTION:-$USER_QUERY}"

# Normalize to lowercase for case-insensitive matching
QUERY_LOWER=$(echo "$INVESTIGATION_QUERY" | tr '[:upper:]' '[:lower:]')
```

### Phase 2: Keyword Detection

```bash
# Priority 1: Error/Debug keywords
if echo "$QUERY_LOWER" | grep -qE "debug|error|broken|failing|crash"; then
  DETECTIVE="debugger-detective"
  KEYWORDS="debug/error keywords"
  PRIORITY=1
  RATIONALE="Bug fixes are time-critical and require call chain tracing"

# Priority 2: Testing keywords
elif echo "$QUERY_LOWER" | grep -qE "test|coverage|edge case|mock"; then
  DETECTIVE="tester-detective"
  KEYWORDS="test/coverage keywords"
  PRIORITY=2
  RATIONALE="Test analysis is specialized and requires callers analysis"

# Priority 3: Architecture keywords
elif echo "$QUERY_LOWER" | grep -qE "architecture|design|structure|layer"; then
  DETECTIVE="architect-detective"
  KEYWORDS="architecture/design keywords"
  PRIORITY=3
  RATIONALE="High-level understanding requires PageRank analysis"

# Priority 4: Implementation (default)
else
  DETECTIVE="developer-detective"
  KEYWORDS="implementation (default)"
  PRIORITY=4
  RATIONALE="Most common investigation type - data flow via callers/callees"
fi
```

### Phase 3: User Feedback

Before delegating, inform the user of the routing decision:

```bash
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "🔍 Investigation Routing"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "Query: $INVESTIGATION_QUERY"
echo ""
echo "Detected: $KEYWORDS (Priority $PRIORITY)"
echo "Routing to: $DETECTIVE"
echo "Reason: $RATIONALE"
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
```

### Phase 4: Delegation via Task Tool

Use the Task tool to delegate to the selected detective:

```typescript
Task({
  description: INVESTIGATION_QUERY,
  agent: DETECTIVE,
  context: {
    routing_reason: `Auto-routed based on ${KEYWORDS}`,
    original_query: INVESTIGATION_QUERY,
    priority: PRIORITY
  }
})
```

## Examples

### Example 1: Debug Keywords

**Input:** "Why is login broken?"

**Detection:**
- Keyword matched: "broken"
- Priority: 1 (Error/Debug)
- Route to: debugger-detective

**Feedback:**
```
🔍 Investigation Routing
Query: Why is login broken?
Detected: debug/error keywords (Priority 1)
Routing to: debugger-detective
Reason: Bug fixes are time-critical and require call chain tracing
```

### Example 2: Test Keywords

**Input:** "What's the test coverage for payment?"

**Detection:**
- Keywords matched: "test", "coverage"
- Priority: 2 (Testing)
- Route to: tester-detective

**Feedback:**
```
🔍 Investigation Routing
Query: What's the test coverage for payment?
Detected: test/coverage keywords (Priority 2)
Routing to: tester-detective
Reason: Test analysis is specialized and requires callers analysis
```

### Example 3: Architecture Keywords

**Input:** "What's the architecture of the auth layer?"

**Detection:**
- Keywords matched: "architecture", "layer"
- Priority: 3 (Architecture)
- Route to: architect-detective

**Feedback:**
```
🔍 Investigation Routing
Query: What's the architecture of the auth layer?
Detected: architecture/design keywords (Priority 3)
Routing to: architect-detective
Reason: High-level understanding requires PageRank analysis
```

### Example 4: No Keywords (Default)

**Input:** "How does payment work?"

**Detection:**
- No keywords matched
- Priority: 4 (Default)
- Route to: developer-detective

**Feedback:**
```
🔍 Investigation Routing
Query: How does payment work?
Detected: implementation (default) (Priority 4)
Routing to: developer-detective
Reason: Most common investigation type - data flow via callers/callees
```

### Example 5: Multi-Keyword Conflict

**Input:** "Debug the test coverage"

**Detection:**
- Keywords matched: "debug" (Priority 1) AND "test" (Priority 2)
- Priority 1 wins
- Route to: debugger-detective

**Feedback:**
```
🔍 Investigation Routing
Query: Debug the test coverage
Detected: debug/error keywords (Priority 1)
Routing to: debugger-detective
Reason: Bug fixes are time-critical and require call chain tracing
(Note: Also detected test keywords, but debug takes priority)
```

## Complete Implementation

Here's the full workflow:

```bash
#!/bin/bash

# Get investigation query from task description
INVESTIGATION_QUERY="${TASK_DESCRIPTION}"

# Normalize to lowercase
QUERY_LOWER=$(echo "$INVESTIGATION_QUERY" | tr '[:upper:]' '[:lower:]')

# Keyword detection with priority routing
if echo "$QUERY_LOWER" | grep -qE "debug|error|broken|failing|crash"; then
  DETECTIVE="debugger-detective"
  KEYWORDS="debug/error keywords"
  PRIORITY=1
  RATIONALE="Bug fixes are time-critical and require call chain tracing"

elif echo "$QUERY_LOWER" | grep -qE "test|coverage|edge case|mock"; then
  DETECTIVE="tester-detective"
  KEYWORDS="test/coverage keywords"
  PRIORITY=2
  RATIONALE="Test analysis is specialized and requires callers analysis"

elif echo "$QUERY_LOWER" | grep -qE "architecture|design|structure|layer"; then
  DETECTIVE="architect-detective"
  KEYWORDS="architecture/design keywords"
  PRIORITY=3
  RATIONALE="High-level understanding requires PageRank analysis"

else
  DETECTIVE="developer-detective"
  KEYWORDS="implementation (default)"
  PRIORITY=4
  RATIONALE="Most common investigation type - data flow via callers/callees"
fi

# Show routing decision
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "🔍 Investigation Routing"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "Query: $INVESTIGATION_QUERY"
echo ""
echo "Detected: $KEYWORDS (Priority $PRIORITY)"
echo "Routing to: $DETECTIVE"
echo "Reason: $RATIONALE"
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
```

Then use the Task tool to delegate:

```typescript
Task({
  description: INVESTIGATION_QUERY,
  agent: DETECTIVE
})
```

## Fallback Protocol

If routing produces unexpected results:

1. **Show routing decision** to user
2. **Ask for override** if needed via AskUserQuestion
3. **Default to developer-detective** if ambiguous

### Override Pattern

```typescript
// If user wants to override the routing
AskUserQuestion({
  questions: [{
    question: `Auto-routing selected ${DETECTIVE}. Override?`,
    header: "Investigation Routing",
    multiSelect: false,
    options: [
      { label: "Continue with auto-routing", description: `Use ${DETECTIVE}` },
      { label: "debugger-detective", description: "Root cause analysis" },
      { label: "tester-detective", description: "Test coverage analysis" },
      { label: "architect-detective", description: "Architecture patterns" },
      { label: "developer-detective", description: "Implementation details" }
    ]
  }]
})
```

## Integration with Existing Workflow

This skill is **additive only** and does not change existing behavior:

- **Direct detective usage** still works (Task → specific detective)
- **/analyze command** unchanged (launches codebase-detective)
- **Parallel orchestration** patterns unchanged
- **All claudemem hooks** preserved

## Use Cases

| When to Use Investigate Skill | When to Use Direct Detective |
|-------------------------------|------------------------------|
| Investigation type unclear | You know which specialist you need |
| General exploration | Parallel orchestration (multimodel plugin) |
| Quick routing decision | Specific workflow requirements |
| Learning/experimenting | Production automation |

## Notes

- Case-insensitive keyword matching
- Priority system resolves conflicts
- User sees routing decision before delegation
- Original query preserved in Task context
- Default to developer-detective when no keywords match
- Works with all claudemem versions (v0.3.0+)

---

**Maintained by:** MadAppGang
**Plugin:** code-analysis v3.1.0
**Last Updated:** January 2026 (v1.0.0 - Initial release)

Related Skills

test-skill

248
from MadAppGang/claude-code

A test skill for validation testing. Use when testing skill parsing and validation logic.

bad-skill

248
from MadAppGang/claude-code

This skill has invalid YAML in frontmatter

release

248
from MadAppGang/claude-code

Plugin release process for MAG Claude Plugins marketplace. Covers version bumping, marketplace.json updates, git tagging, and common mistakes. Use when releasing new plugin versions or troubleshooting update issues.

openrouter-trending-models

248
from MadAppGang/claude-code

Fetch trending programming models from OpenRouter rankings. Use when selecting models for multi-model review, updating model recommendations, or researching current AI coding trends. Provides model IDs, context windows, pricing, and usage statistics from the most recent week.

Claudish Integration Skill

248
from MadAppGang/claude-code

**Version:** 1.0.0

transcription

248
from MadAppGang/claude-code

Audio/video transcription using OpenAI Whisper. Covers installation, model selection, transcript formats (SRT, VTT, JSON), timing synchronization, and speaker diarization. Use when transcribing media or generating subtitles.

final-cut-pro

248
from MadAppGang/claude-code

Apple Final Cut Pro FCPXML format reference. Covers project structure, timeline creation, clip references, effects, and transitions. Use when generating FCP projects or understanding FCPXML structure.

ffmpeg-core

248
from MadAppGang/claude-code

FFmpeg fundamentals for video/audio manipulation. Covers common operations (trim, concat, convert, extract), codec selection, filter chains, and performance optimization. Use when planning or executing video processing tasks.

statusline-customization

248
from MadAppGang/claude-code

Configuration reference and troubleshooting for the statusline plugin — sections, themes, bar widths, and script architecture

technical-audit

248
from MadAppGang/claude-code

Technical SEO audit methodology including crawlability, indexability, and Core Web Vitals analysis. Use when auditing pages or sites for technical SEO issues.

serp-analysis

248
from MadAppGang/claude-code

SERP analysis techniques for intent classification, feature identification, and competitive intelligence. Use when analyzing search results for content strategy.

schema-markup

248
from MadAppGang/claude-code

Schema.org markup implementation patterns for rich results. Use when adding structured data to content for enhanced SERP appearances.