AgentSkillsCN

timeout-prevention-operation-batching

工具选择决策框架、领域验证(视觉 vs 音频)、成本意识,以及何时该使用哪种工具。当您需要为特定任务选择合适的工具时,尤其是在与 MCP 服务器协作时,可使用此技能。

SKILL.md
--- frontmatter
name: timeout-prevention-operation-batching
description: Track execution time, identify operation batching opportunities, and prevent timeout violations. Use when approaching time limits or when performing many sequential operations to optimize execution and prevent 300-second timeout failures.

Timeout Prevention and Operation Batching

Overview

Strategies for tracking execution time, identifying batching opportunities, and preventing timeout violations. Helps agents optimize operation patterns to stay within 300-second iteration limits.

Problem: Multiple tasks exceeded 300-second timeout limits due to excessive sequential operations (168+ shell commands in single iterations).

Solution: Monitor elapsed time, batch independent operations, and prioritize critical work when approaching limits.

Impact: Reduce timeout occurrences by 70-80%, improve task completion rates.

Time Tracking

Checkpoint Strategy

Monitor elapsed time at key checkpoints:

markdown
## Execution Checkpoints

1. **Start**: Record start time
2. **After Planning**: Check elapsed time after planning phase
3. **After Implementation**: Check elapsed time after code changes
4. **Before Testing**: Check elapsed time before browser/testing phase
5. **Soft Warning**: Alert at 200s (2/3 of 300s limit)

Time Monitoring Pattern

typescript
// Track time at checkpoints
const startTime = Date.now();

// After planning phase
const planningTime = Date.now() - startTime;
if (planningTime > 60) {
  console.warn('Planning phase took longer than expected');
}

// Before testing
const elapsedTime = Date.now() - startTime;
if (elapsedTime > 200) {
  // Soft timeout warning - prioritize critical operations
  console.warn('Approaching timeout limit - optimize remaining operations');
}

Soft Timeout Warnings

Alert agent when approaching 200s (2/3 of limit):

markdown
⚠️ **SOFT TIMEOUT WARNING** (200s / 300s limit)

When approaching 200 seconds:
- Prioritize critical operations
- Batch non-critical operations
- Skip optional verification steps
- Report progress immediately
- Consider deferring non-essential work

Operation Batching Patterns

Pattern 1: Batch Independent File Reads

Read multiple files in parallel instead of sequentially:

typescript
// ❌ INEFFICIENT: Sequential reads
const file1 = read_file('src/scenes/GameScene.ts');
const file2 = read_file('src/scenes/MainMenu.ts');
const file3 = read_file('src/types/GameState.ts');

// ✅ EFFICIENT: Parallel reads (batched)
const [file1, file2, file3] = await Promise.all([
  read_file('src/scenes/GameScene.ts'),
  read_file('src/scenes/MainMenu.ts'),
  read_file('src/types/GameState.ts')
]);

Pattern 2: Group Related Grep Searches

Combine multiple grep operations:

typescript
// ❌ INEFFICIENT: Multiple separate greps
grep('GameState', 'src/**/*.ts');
grep('generateMaze', 'src/**/*.ts');
grep('TILE_SIZE', 'src/**/*.ts');

// ✅ EFFICIENT: Single semantic search or combined grep
codebase_search('Where is GameState used and how is maze generation implemented?');
// OR use grep with multiple patterns if supported

Pattern 3: Consolidate Browser Commands

Batch browser eval commands into single blocks:

bash
# ❌ INEFFICIENT: Multiple separate browser calls
agent-browser eval "window.__TEST__.commands.gameState()"
agent-browser eval "window.__TEST__.commands.setLevel(2)"
agent-browser eval "window.__TEST__.commands.setScore(100)"

# ✅ EFFICIENT: Single eval block
agent-browser eval "
  const state = window.__TEST__.commands.gameState();
  window.__TEST__.commands.setLevel(2);
  window.__TEST__.commands.setScore(100);
  return state;
"

Pattern 4: Combine Viewport Tests

Test multiple viewports in single browser session:

bash
# ❌ INEFFICIENT: Separate browser sessions per viewport
agent-browser open "http://localhost:5173?scene=GameScene"
agent-browser viewport 500 400
agent-browser snapshot
agent-browser close

agent-browser open "http://localhost:5173?scene=GameScene"
agent-browser viewport 1024 768
agent-browser snapshot
agent-browser close

# ✅ EFFICIENT: Single session with multiple viewports
agent-browser open "http://localhost:5173?scene=GameScene"
agent-browser viewport 500 400
agent-browser snapshot
agent-browser viewport 1024 768
agent-browser snapshot
agent-browser viewport 1920 1080
agent-browser snapshot
agent-browser close

Pattern 5: Test Matrix Strategy

Test minimum and maximum viewports first, intermediate only if needed:

typescript
// ✅ EFFICIENT: Test critical sizes first
const viewports = [
  { width: 500, height: 400 },   // Minimum
  { width: 1920, height: 1080 }, // Maximum
  // Only test intermediate if issues found
];

// If issues found, then test intermediate sizes
if (issuesFound) {
  viewports.push(
    { width: 1024, height: 768 },
    { width: 1280, height: 720 }
  );
}

Priority Guidance

Critical vs Non-Critical Operations

When approaching timeout, prioritize:

markdown
## Priority Levels

### Critical (Must Complete)
- Core functionality implementation
- TypeScript compilation checks
- Critical bug fixes
- Success criteria verification

### Important (Should Complete)
- Browser testing for main scenarios
- Documentation updates
- Progress.txt updates

### Optional (Can Defer)
- Additional viewport testing
- Edge case testing
- Code cleanup
- Non-critical documentation

Timeout Scenario Strategy

When at 200s+ elapsed time:

markdown
1. **Skip optional operations**: Defer non-critical testing
2. **Batch aggressively**: Combine all remaining operations
3. **Prioritize verification**: Focus on success criteria
4. **Report progress**: Update progress.txt immediately
5. **Complete marker**: Output completion marker if criteria met

Checkpoint Strategy

Progress Reports

Force progress reports every 60-90 seconds:

markdown
## Progress Checkpoint (60s elapsed)

- [x] Planning phase complete
- [x] File analysis complete
- [ ] Implementation in progress
- [ ] Testing pending

## Progress Checkpoint (120s elapsed)

- [x] Planning phase complete
- [x] File analysis complete
- [x] Implementation complete
- [ ] Testing in progress

## Progress Checkpoint (180s elapsed)

- [x] Planning phase complete
- [x] File analysis complete
- [x] Implementation complete
- [x] Testing complete
- [ ] Final verification pending

Silent Hang Prevention

Report progress regularly to prevent silent hangs:

typescript
// Report progress every 60-90 seconds
const lastReport = Date.now();
const REPORT_INTERVAL = 60000; // 60 seconds

function checkProgress() {
  const elapsed = Date.now() - lastReport;
  if (elapsed > REPORT_INTERVAL) {
    console.log(`Progress: ${currentPhase} - ${elapsedTime}s elapsed`);
    lastReport = Date.now();
  }
}

Best Practices

  1. Monitor time: Track elapsed time at checkpoints
  2. Batch operations: Group independent operations
  3. Prioritize critical: Focus on essential work when time is limited
  4. Report progress: Update every 60-90 seconds
  5. Soft warnings: Alert at 200s to optimize remaining work
  6. Parallel reads: Read multiple files simultaneously
  7. Consolidate commands: Batch browser and shell commands
  8. Test matrices: Test critical viewports first

Common Pitfalls

Pitfall 1: Sequential File Reads

Problem: Reading files one at a time

Solution: Batch independent file reads

typescript
// ❌ WRONG: Sequential
read_file('file1.ts');
read_file('file2.ts');
read_file('file3.ts');

// ✅ CORRECT: Parallel
Promise.all([
  read_file('file1.ts'),
  read_file('file2.ts'),
  read_file('file3.ts')
]);

Pitfall 2: Multiple Browser Sessions

Problem: Opening new browser session for each test

Solution: Reuse single session for multiple tests

bash
# ❌ WRONG: Multiple sessions
agent-browser open "http://localhost:5173"
agent-browser snapshot
agent-browser close
agent-browser open "http://localhost:5173"
agent-browser snapshot
agent-browser close

# ✅ CORRECT: Single session
agent-browser open "http://localhost:5173"
agent-browser snapshot
agent-browser reload
agent-browser snapshot
agent-browser close

Pitfall 3: No Time Awareness

Problem: Not monitoring elapsed time

Solution: Track time at checkpoints

typescript
// ❌ WRONG: No time tracking
// Perform operations without monitoring

// ✅ CORRECT: Time tracking
const startTime = Date.now();
// ... operations ...
const elapsed = Date.now() - startTime;
if (elapsed > 200000) {
  // Optimize remaining operations
}

Integration with Other Skills

  • file-operation-optimization: Uses batching patterns for file operations
  • agent-browser: Applies batching to browser commands
  • refactoring-workflow-optimization: Uses time tracking during refactoring

Related Skills

  • file-operation-optimization - File reading and caching strategies
  • agent-browser - Browser automation patterns
  • refactoring-workflow-optimization - Refactoring with time awareness

Remember

  1. Track time: Monitor elapsed time at checkpoints
  2. Batch operations: Group independent operations
  3. Prioritize: Focus on critical work when time is limited
  4. Report progress: Update every 60-90 seconds
  5. Soft warnings: Alert at 200s (2/3 of limit)
  6. Prevent timeouts: Optimize patterns to stay within 300s limit