AgentSkillsCN

iterative-retrieval

针对子代理与复杂任务的渐进式上下文精炼。根据实际需求逐步检索上下文,而非一次性加载全部信息。此举既能减少上下文冗余,又能提升信息的相关性与实用性。

SKILL.md
--- frontmatter
name: iterative-retrieval
description: |
  Progressive context refinement for subagents and complex tasks. Retrieves
  context incrementally based on actual needs rather than loading everything
  upfront. Reduces context waste and improves relevance.
context: fork

Iterative Retrieval Skill

Problem

Loading all potentially relevant context upfront:

  • Wastes context window
  • Includes irrelevant information
  • Reduces signal-to-noise ratio

Solution

Retrieve context incrementally based on actual execution needs.

Retrieval Levels

code
Level 0: Task Description
  └── Just the user request

Level 1: Immediate Context
  └── Files mentioned + direct dependencies

Level 2: Extended Context
  └── Related modules + tests

Level 3: Full Context
  └── Architecture docs + cross-cutting concerns

Retrieval Protocol

1. Start Minimal

yaml
initial_load:
  - Task description
  - CLAUDE.md (current section)
  - Target file(s) only

2. Detect Gaps

yaml
gap_signals:
  - Reference to unknown function/type
  - Import from unloaded module
  - Pattern that needs clarification
  - Test failure with unclear cause

3. Retrieve On-Demand

yaml
retrieval_action:
  signal: "Unknown type UserProfile"
  action: Load types/user.ts
  scope: Type definitions only

4. Cache Decisions

yaml
cache_entry:
  query: "UserProfile type"
  result: "types/user.ts lines 15-30"
  relevance: 0.95
  reuse_for: ["user-related tasks"]

Implementation Patterns

For Subagent Delegation

markdown
# Subagent Context Protocol

## Mandatory (Level 0-1)
- Task objective
- Target file
- Immediate imports

## On-Request (Level 2)
- Related tests
- Usage examples
- Similar implementations

## Escalation (Level 3)
- Architecture docs
- Cross-module dependencies
- Historical decisions

For Complex Analysis

javascript
async function iterativeAnalysis(task) {
  // Level 0: Understand task
  const taskContext = await loadMinimal(task);
  
  // Level 1: Load immediate
  let context = await loadImmediate(task.files);
  
  while (hasGaps(context)) {
    // Level 2+: Fill gaps
    const gaps = identifyGaps(context);
    const additional = await loadForGaps(gaps);
    context = mergeContext(context, additional);
    
    // Prevent infinite loops
    if (context.level > MAX_LEVEL) break;
  }
  
  return context;
}

Gap Detection Rules

SignalActionPriority
Undefined referenceLoad definition fileHigh
Test importLoad test fileMedium
Config referenceLoad configMedium
Doc comment linkLoad docLow
Historical mentionQuery experienceLow

Context Scoring

yaml
relevance_score:
  direct_reference: 1.0    # Explicitly mentioned
  import_chain: 0.8        # Imported by target
  type_dependency: 0.7     # Type used
  test_coverage: 0.6       # Tests target
  same_module: 0.5         # Same directory
  doc_reference: 0.4       # Documentation
  historical: 0.3          # Past experience

Integration with VibeCoding

With phase-router

yaml
routing_context:
  path_a: level 0-1 only
  path_b: level 0-2
  path_c: full iterative

With subagents

yaml
subagent_protocol:
  initial: level 0-1
  on_request: level 2
  escalate_to_main: level 3

With verification-loop

yaml
verification_context:
  initial: test file + target
  on_failure: add related modules
  on_complex_failure: full context

Anti-Patterns

Don't: Load entire codebase upfront ✅ Do: Start with target file only

Don't: Include all tests ✅ Do: Load tests when verification fails

Don't: Pass full history to subagent ✅ Do: Pass task-relevant summary

Don't: Keep irrelevant context ✅ Do: Prune after task completion

Metrics

Track retrieval efficiency:

yaml
session_metrics:
  initial_context_tokens: 2000
  final_context_tokens: 8000
  retrieval_requests: 5
  cache_hits: 3
  relevance_score_avg: 0.82