--- name: iterative-retrieval description: "Execute 4-phase loop for progressive context refinement. Use when complex searches require multiple refinement cycles or context gap is unknown. Not for simple file searches or known file locations." --- # Iterative Retrieval Pattern A 4-phase loop for progressive context refinement when dealing with unknown or complex information needs. ## The Problem Subagents don't know what they need until they start searching: - Initial queries are too broad or too narrow - Codebase terminology is unknown upfront - Context gaps emerge during exploration - Single-pass search misses relevant files ## The Solution: 4-Phase Loop ``` ┌─────────────────────────────────────────────────────────────┐ │ ITERATIVE RETRIEVAL LOOP │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 1. DISPATCH ──► Broad initial query to gather files │ │ │ │ │ ▼ │ │ 2. EVALUATE ──► Score relevance 0-1 for each file │ │ │ │ │ ▼ │ │ 3. REFINE ──► Update search criteria based on scores│ │ │ │ │ ▼ │ │ 4. LOOP ──► Repeat with refined criteria (max 3) │ │ │ │ │ ▼ │ │ HIGH RELEVANCE FILES FOUND ✓ │ │ │ └─────────────────────────────────────────────────────────────┘ ``` ## Phase 1: DISPATCH **Purpose**: Cast a wide net to gather candidate files. **Approach:** - Start with broad search terms - Use multiple search patterns (Glob + Grep) - Gather 10-20 candidate files - Don't worry about relevance yet **Example:** ```python # Searching for "authentication patterns" files = glob("**/*auth*.ts") + glob("**/*login*.ts") files += grep("authenticate|login|signup", "**/*.ts") ``` **Output**: List of candidate files (unordered, broad) ## Phase 2: EVALUATE **Purpose**: Score each file's relevance to the actual query. **Scoring System (0-1):** | Score | Relevance | Action | | ------- | --------- | -------------------------------- | | 0.8-1.0 | High | Read immediately, use in context | | 0.5-0.7 | Medium | Skim first, read if relevant | | 0.2-0.4 | Low | Skip unless no high/medium found | | 0-0.2 | None | Ignore | **Scoring Criteria:** - Filename match: +0.3 - Import/usage match: +0.4 - Multiple keyword occurrences: +0.2 - Recent modification: +0.1 - Project type match (e.g., frontend/backend): +0.1 **Example:** ```python # Score each candidate file for file in candidates: score = 0 if "auth" in file.name: score += 0.3 if "authenticate" in file.content: score += 0.4 if file.content.count("login") > 3: score += 0.2 # ... store score ``` **Output**: Files with relevance scores ## Phase 3: REFINE **Purpose**: Update search criteria based on evaluation results. **Refinement Strategies:** | Situation | Refinement | | ------------------------------- | ------------------------------- | | Too many high scores (0.8+) | Narrow by adding specific terms | | No high scores, many medium | Add domain-specific terms | | All low scores | Change terminology entirely | | Found right domain, wrong files | Add file extension filters | **Example:** ```python # Initial: "authentication" # Result: Many frontend auth files, need backend # Refined: "authentication server api" # Result: Backend auth endpoints found ``` **Output**: Updated search query for next iteration ## Phase 4: LOOP **Purpose**: Repeat with refined criteria until convergence. **Termination Conditions:** 1. **Max iterations reached** (3 cycles maximum) 2. **Sufficient high-relevance files** (3+ files with 0.8+ score) 3. **Diminishing returns** (scores not improving between iterations) 4. **Context gap identified and filled** (specific question answered) **Example:** ```python max_iterations = 3 high_relevance_files = [] for iteration in range(max_iterations): candidates = dispatch(search_query) scored = evaluate(candidates, target_query) high_relevance_files.extend([f for f in scored if f.score >= 0.8]) if len(high_relevance_files) >= 3: break # Converged search_query = refine(search_query, scored) ``` **Output**: Final set of high-relevance files ## Usage Pattern ### When to Use Iterative Retrieval ✅ **Use when:** - Searching for concepts with unknown terminology - Initial search returns too many results (>20 files) - Initial search returns too few results (<3 files) - Domain-specific jargon is unknown - Context gap is unclear ❌ **Don't use when:** - File location is known - Simple search will suffice - Single-pass search finds relevant files - Working with well-documented codebase ### Integration with File-Search **file-search**: Basic search capability (find files by pattern) **iterative-retrieval**: Advanced refinement (relevance scoring, progressive narrowing) ``` For simple searches: → Use file-search directly For complex searches: → Use iterative-retrieval (uses file-search as initial dispatch) ``` ### Example Workflow **Task**: Find React context patterns in a large codebase **Iteration 1:** - **DISPATCH**: Search for "context" - **EVALUATE**: 50 files found, mostly React createContext, some unrelated - **REFINE**: Add "React useContext" to narrow - **LOOP**: Continue **Iteration 2:** - **DISPATCH**: Search for "React useContext useContext" - **EVALUATE**: 15 files, mostly usage patterns, few definitions - **REFINE**: Add "createContext" to find definitions - **LOOP**: Continue **Iteration 3:** - **DISPATCH**: Search for "createContext useContext React" - **EVALUATE**: 8 files, 4 with high relevance (0.8+) - **CONVERGED**: Sufficient high-relevance files found **Result**: 4 context definition files with usage patterns identified ## Output Format Return results as: ```markdown ## Iterative Retrieval Results ### Summary - **Iterations**: 3 - **Total files evaluated**: 73 - **High-relevance files**: 4 - **Search query evolution**: "context" → "React useContext" → "createContext useContext" ### High-Relevance Files (0.8+) 1. **src/context/AuthContext.tsx** (score: 0.95) - Defines AuthContext with provider - Exports useAuth hook - 15 usages across codebase 2. **src/context/ThemeContext.tsx** (score: 0.88) - Defines ThemeContext with dark/light mode - Exports useTheme hook - 8 usages across codebase ### Medium-Relevance Files (0.5-0.7) - **src/hooks/useContext.ts** (score: 0.65) - Utility hook, not context definition ### Context Gap Analysis **Initial query**: "React context patterns" **Gap**: Need both definitions and usage patterns **Filled**: Found 4 definitions, usage patterns documented ### Next Steps Use high-relevance files as context for understanding React context patterns in this codebase. ``` ## Best Practices 1. **Start broad, narrow progressively** - Don't over-constrain initial query 2. **Score objectively** - Use consistent criteria across iterations 3. **Track query evolution** - Document how search terms change 4. **Know when to stop** - Don't iterate beyond 3 cycles 5. **Combine with other patterns** - Use filesystem-context for storage ## Integration with Seed System ### File-Search Integration - **file-search**: Basic file finding by pattern - **iterative-retrieval**: Progressive refinement with relevance scoring **Integration**: iterative-retrieval uses file-search as initial dispatch mechanism. ### Filesystem-Context Integration - **iterative-retrieval**: Discovers relevant files - **filesystem-context**: Stores discovered files for selective retrieval **Integration**: Use iterative-retrieval for discovery, filesystem-context for persistent access. ## Related Skills - **file-search**: Basic file search capability - **filesystem-context**: Persistent storage for discovered context ## Key Principle Progressive refinement through 4-phase loop (DISPATCH → EVALUATE → REFINE → LOOP) yields higher relevance than single-pass search, especially when terminology is unknown upfront. --- MANDATORY: Maximum 3 iterations - stop when converged MANDATORY: Score files on 0-1 scale with documented criteria MANDATORY: Report high-relevance files (0.8+) with scores MANDATORY: Document query evolution across iterations No exceptions. Iterative retrieval must converge efficiently with traceable refinement. --- ## Genetic Code This component carries essential Seed System principles for context: fork isolation: MANDATORY: All components MUST be self-contained (zero .claude/rules dependency) MANDATORY: Achieve 80-95% autonomy (0-5 AskUserQuestion rounds per session) MANDATORY: Description MUST use What-When-Not format in third person MANDATORY: No component references another component by name in description MANDATORY: Progressive disclosure - references/ for detailed content MANDATORY: Use XML for control (mission_control, critical_constraint), Markdown for data No exceptions. Portability invariant must be maintained. **Delta Standard**: Good Component = Expert Knowledge − What Claude Already Knows **Recognition Questions**: - "Would Claude know this without being told?" → Delete (zero delta) - "Can this work standalone?" → Fix if no (non-self-sufficient) - "Did I read the actual file, or just see it in grep?" → Verify before claiming ---