# Prp Codebase Question

> Research codebase questions using parallel agents - documents what exists, not what should change. Use when the user asks how the codebase works, where something lives, or invokes $prp-codebase-question.

- Skill: `wirasm/prp-codebase-question` (Agent Skill)
- Install (CLI): `npx skillmds add wirasm/prp-codebase-question`
- Raw SKILL.md: https://api.skillmd.com/api/skills/wirasm/prp-codebase-question/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Research & Search
- Author: Wirasm (https://skillmd.com/u/wirasm)
- Updated: 2026-09-10
- Page: https://skillmd.com/skills/wirasm/prp-codebase-question

---


> **Arguments:** `$ARGUMENTS` (and `$1`, `$2`, ...) refer to the arguments given when this skill was invoked. Take them from the user's request; if absent, infer them from the conversation.

# Codebase Research

**Input**: $ARGUMENTS

---

## Your Mission

Answer codebase questions thoroughly by spawning parallel specialized agents, synthesizing their findings, and producing a research document.

**Core Philosophy**: Document what IS, not what SHOULD BE. You are a technical cartographer.

**Golden Rule**: Every claim must have a `file:line` reference. No speculation, no suggestions, no critique.

---

## CRITICAL: Documentarian Only

- **DO NOT** suggest improvements or changes
- **DO NOT** perform root cause analysis unless explicitly asked
- **DO NOT** propose future enhancements
- **DO NOT** critique implementations or identify problems
- **DO NOT** recommend refactoring or optimization
- **ONLY** describe what exists, where it exists, how it works, and how components interact

---

## Phase 1: PARSE - Understand the Query

### 1.1 Read Mentioned Files

If the user mentions specific files, read them FULLY first (no limit/offset) before any decomposition.

### 1.2 Classify the Query

| Type | Indicators | Agent Focus |
|------|-----------|-------------|
| **Where** | "where is", "find", "locate" | `codebase-explorer` primary |
| **How** | "how does", "trace", "flow" | `codebase-analyst` primary |
| **What** | "what is", "explain", "describe" | Both agents in parallel |
| **Pattern** | "how do we", "convention", "examples" | `codebase-explorer` primary |
| **External** | "docs", "best practice", "API" | Add `web-researcher` |

### 1.3 Determine Scope

- Identify specific components, patterns, or concepts to investigate
- Note any `--web` flag for external research
- Note any `--follow-up` flag for appending to existing research

**PHASE_1_CHECKPOINT:**
- [ ] Mentioned files read in full
- [ ] Query type classified
- [ ] Research scope identified
- [ ] Flags parsed (--web, --follow-up)

---

## Phase 2: DECOMPOSE - Break into Research Areas

### 2.1 Create Research Plan

Break the query into 2-5 composable research areas:

```
RESEARCH QUESTION: {user's question}

AREAS:
1. {Area} → Agent: {which agent}
2. {Area} → Agent: {which agent}
3. {Area} → Agent: {which agent}
```

### 2.2 Agent Selection

| Agent | Use When |
|-------|----------|
| `codebase-explorer` | Finding WHERE code lives, locating files, extracting patterns, discovering conventions |
| `codebase-analyst` | Understanding HOW code works, tracing data flow, mapping integration points |
| `web-researcher` | Only when `--web` flag is set or user explicitly asks for external docs |

**Strategy:**
1. Start with `codebase-explorer` to find what exists
2. Then use `codebase-analyst` on the most relevant findings to trace how they work
3. Run agents in parallel when they're searching for different areas

**PHASE_2_CHECKPOINT:**
- [ ] Query decomposed into 2-5 research areas
- [ ] Agent assigned to each area
- [ ] Parallel vs sequential execution planned

---

## Phase 3: EXPLORE - Spawn Parallel Agents

### 3.1 Launch Codebase Agents

**Launch agents in parallel by spawning them as subagents in one step.**

For each research area, use the appropriate agent:

**`codebase-explorer`:**

```
Find all code relevant to: {research area}

LOCATE:
1. {Specific files/components to find}
2. {Patterns or conventions to extract}
3. {Related test files and configuration}

Categorize findings by purpose. Return ACTUAL code snippets with file:line references.
Remember: Document what exists, no suggestions or improvements.
```

**`codebase-analyst`:**

```
Analyze the implementation of: {research area}

TRACE:
1. {Data flow to trace}
2. {Integration points to document}
3. {Contracts between components}

Document what exists with precise file:line references. No suggestions.
```

### 3.2 Launch Web Research (if --web or explicitly requested)

**`web-researcher`:**

```
Research external documentation for: {topic}

FIND:
1. {Specific documentation needed}
2. {API references or patterns}

Return findings with direct links and citations.
```

### 3.3 Wait for All Agents

**IMPORTANT**: Wait for ALL agents to complete before proceeding.

**PHASE_3_CHECKPOINT:**
- [ ] All agents launched (parallel where possible)
- [ ] All agents completed
- [ ] Results collected from each agent

---

## Phase 4: SYNTHESIZE - Merge Findings

### 4.1 Compile Results

- Prioritize live codebase findings as primary source of truth
- Connect findings across different components
- Include specific `file:line` references throughout
- Document patterns, connections, and architectural decisions as they exist

### 4.2 Answer the Question

Map findings back to the user's original question:

| Question Aspect | Finding | Evidence |
|----------------|---------|----------|
| {aspect 1} | {what was found} | `file.ts:123` |
| {aspect 2} | {what was found} | `file.ts:456` |

### 4.3 Identify Gaps

Note any areas that couldn't be fully documented:

- {Area that needs further investigation}
- {Question that remains open}

**PHASE_4_CHECKPOINT:**
- [ ] All agent results synthesized
- [ ] Findings connected across components
- [ ] Original question answered with evidence
- [ ] Gaps identified

---

## Phase 5: DOCUMENT - Generate Research File

### 5.1 Gather Metadata

```bash
date -u +"%Y-%m-%dT%H:%M:%SZ"
git rev-parse --short HEAD
git branch --show-current
basename $(git rev-parse --show-toplevel)
```

### 5.2 Create Research Directory

```bash
# --- PRP store resolver (canonical; keep byte-identical across skills) ---
# Adopt the store that already records this root; mint a key only when none does.
_gd="$(git rev-parse --path-format=absolute --git-common-dir 2>/dev/null)"
case "$_gd" in */.git) _root="${_gd%/.git}" ;; "") _root="$PWD" ;; *) _root="$_gd" ;; esac
_root="$(cd "$_root" && pwd -P)"
_name="$(basename "$_root" | tr '[:upper:]' '[:lower:]' | tr -cs 'a-z0-9' '-' | sed 's/^-*//;s/-*$//')"
_home="${PRP_HOME:-$HOME/.prp}"
_hit="$(grep -lsF "\"path\": \"$_root\"" "$_home"/*/project.json 2>/dev/null | head -1)"
PRP_DIR="${_hit%/project.json}"
[ -n "$PRP_DIR" ] || PRP_DIR="$_home/${_name:-project}-$(printf %s "$_root" | git hash-object --stdin | cut -c1-8)"
mkdir -p "$PRP_DIR"; [ -f "$PRP_DIR/project.json" ] || printf '{"path": "%s", "name": "%s"}\n' "$_root" "${_name:-project}" > "$PRP_DIR/project.json"
mkdir -p "$PRP_DIR/research"
```

### 5.3 Determine Filename

**If --follow-up**: Append to existing research file instead of creating new one.

**If new research**:

**Path**: `$PRP_DIR/research/{YYYY-MM-DD}-{kebab-case-topic}.md`

Examples:
- `2025-01-08-authentication-flow.md`
- `2025-01-15-database-migration-patterns.md`

### 5.4 Write Research Document

```markdown
---
date: {ISO timestamp with timezone}
git_commit: {short hash}
branch: {branch name}
repository: {repo name}
topic: "{User's Question/Topic}"
tags: [research, codebase, {relevant-component-names}]
status: complete
last_updated: {YYYY-MM-DD}
---

# Research: {User's Question/Topic}

**Date**: {ISO timestamp}
**Git Commit**: {short hash}
**Branch**: {branch name}
**Repository**: {repo name}

## Research Question

{Original user query}

## Summary

{High-level documentation of what was found, answering the question by describing what exists}

## Detailed Findings

### {Component/Area 1}

- Description of what exists (`file.ts:123`)
- How it connects to other components
- Current implementation details

### {Component/Area 2}

...

## Code References

| File | Lines | Description |
|------|-------|-------------|
| `path/to/file.ts` | 123-145 | {What's there} |
| `another/file.ts` | 45-67 | {What's there} |

## Architecture Documentation

{Current patterns, conventions, and design implementations found}

## Open Questions

- {Areas that need further investigation}
```

### 5.5 Add GitHub Permalinks (if applicable)

```bash
# Check if on main or pushed
git branch --show-current
gh repo view --json owner,name -q '"\(.owner.login)/\(.name)"'
```

If on main/pushed, replace local file references with:
`https://github.com/{owner}/{repo}/blob/{commit}/{file}#L{line}`

### 5.6 Handle Follow-ups

If `--follow-up` flag and existing research file:

1. Read the existing research file
2. Update frontmatter: `last_updated` and add `last_updated_note`
3. Append new section: `## Follow-up Research {timestamp}`
4. Spawn new agents as needed
5. Save updated document

**PHASE_5_CHECKPOINT:**
- [ ] Metadata gathered
- [ ] Research file created (or existing file updated for follow-up)
- [ ] All sections filled with evidence-based content
- [ ] GitHub permalinks added (if applicable)
- [ ] No placeholder values remain

---

## Phase 6: OUTPUT - Present to User

```markdown
## Research Complete

**Question**: {original question}
**Document**: `{expanded absolute path to $PRP_DIR/research/{filename}.md}`

### Summary

{2-3 sentence answer to the question}

### Key Findings

- **{Finding 1}**: {brief} (`file.ts:123`)
- **{Finding 2}**: {brief} (`file.ts:456`)
- **{Finding 3}**: {brief} (`file.ts:789`)

### Architecture

{1-2 sentence description of relevant architecture}

### Open Questions

- {Any unanswered aspects}

### Follow-up

To dig deeper: `$prp-codebase-question --follow-up {topic}`
To include external docs: `$prp-codebase-question --web {topic}`
```

---

## Usage Examples

```bash
# Basic codebase question
$prp-codebase-question how does authentication work

# Include external documentation
$prp-codebase-question --web how does the PRP runner execute commands

# Follow up on previous research
$prp-codebase-question --follow-up what error handling patterns exist in the runner

# Locate and document a specific area
$prp-codebase-question where are all the command templates and how are they structured
```

---

## Critical Reminders

1. **Document, don't evaluate.** Describe what IS, never what SHOULD BE.

2. **Evidence required.** Every claim needs a `file:line` reference.

3. **Agents are parallel.** Launch multiple agents simultaneously when researching different areas.

4. **Wait for completion.** Never synthesize until ALL agents have returned.

5. **Read first.** If the user mentions files, read them fully before spawning agents.

6. **No placeholders.** Every field in the research document must have real values.

7. **Codebase is truth.** Live code always overrides documentation or assumptions.

---

## Success Criteria

- **QUESTION_ANSWERED**: User's question addressed with concrete evidence
- **AGENTS_USED**: Specialized agents spawned for each research area
- **EVIDENCE_COMPLETE**: Every finding has `file:line` references
- **DOCUMENT_CREATED**: Research file saved at `{expanded absolute path to $PRP_DIR/research/}`
- **NO_OPINIONS**: Document describes what exists, not what should change
- **PERMALINKS_ADDED**: GitHub links included when possible

