Windsurf Performance Tuning

VerifiedSafe

Optimize Windsurf API performance using caching, request batching, and connection pooling. Reduce latency and improve request throughput for production integrations.

Sby Skills Guide Bot
DevelopmentIntermediate
3/11/2026
Claude CodeCodex
#performance#caching#batching#api-integration#typescript

Recommended for

Automated summary

This skill provides TypeScript patterns to speed up Windsurf API calls: LRU or Redis caching, DataLoader batching, keep-alive connection pooling, and cursor-based pagination.

Strengths

  • Drop-in code snippets for both in-memory (lru-cache) and distributed (ioredis) caching
  • Ready-to-use DataLoader pattern with configurable maxBatchSize and scheduling window
  • Includes a latency measurement wrapper and an async generator for cursor pagination
  • Supplies P50/P95/P99 latency reference points per operation type to frame a baseline

Limitations

  • The Instructions section is cut off (it stops at "Step 1: Establish Baseline"), so the guided procedure is incomplete
  • The benchmark numbers are generic and not measured against the user's own environment
  • Assumes a Windsurf SDK exposing methods like batchGet or cursor-based list that are not verified
When to use it

Use it when Windsurf API calls are slow or when you need to add caching, batching, or pooling to an existing integration.

When not to use it

Avoid it if your bottleneck is outside the Windsurf API calls, or if you want a complete end-to-end guided optimization procedure.

Security analysis

Safe
Quality score85/100

The skill is documentation-only and uses limited allowed tools (Read, Write, Edit). It contains standard performance optimization examples involving caching, batching, connection pooling, and monitoring. No destructive commands, credential exfiltration, obfuscated payloads, or safety-disabling instructions are present; environment variables are used conventionally for API keys and Redis URLs.

No concerns found

How this analysis is made

Examples

Diagnose slow Windsurf calls
My Windsurf API integration is slow — reads are taking over a second each. Help me establish a baseline and add caching and connection pooling to bring latency down.
Add Redis caching layer
Add a distributed Redis cache in front of our Windsurf API client, with a 60 second TTL and a fallback to in-memory LRU cache.
Batch and paginate requests
Refactor our Windsurf integration to batch individual get calls with DataLoader and stream list results with cursor pagination instead of loading everything at once.

name: windsurf-performance-tuning description: | Optimize Windsurf API performance with caching, batching, and connection pooling. Use when experiencing slow API responses, implementing caching strategies, or optimizing request throughput for Windsurf integrations. Trigger with phrases like "windsurf performance", "optimize windsurf", "windsurf latency", "windsurf caching", "windsurf slow", "windsurf batch". allowed-tools: Read, Write, Edit version: 1.0.0 license: MIT author: Jeremy Longshore jeremy@intentsolutions.io compatible-with: claude-code, codex, openclaw

Windsurf Performance Tuning

Overview

Optimize Windsurf API performance with caching, batching, and connection pooling.

Prerequisites

  • Windsurf SDK installed
  • Understanding of async patterns
  • Redis or in-memory cache available (optional)
  • Performance monitoring in place

Latency Benchmarks

| Operation | P50 | P95 | P99 | |-----------|-----|-----|-----| | Read | 50ms | 150ms | 300ms | | Write | 100ms | 250ms | 500ms | | List | 75ms | 200ms | 400ms |

Caching Strategy

Response Caching

import { LRUCache } from 'lru-cache';

const cache = new LRUCache<string, any>({
  max: 1000,
  ttl: 60000, // 1 minute
  updateAgeOnGet: true,
});

async function cachedWindsurfRequest<T>(
  key: string,
  fetcher: () => Promise<T>,
  ttl?: number
): Promise<T> {
  const cached = cache.get(key);
  if (cached) return cached as T;

  const result = await fetcher();
  cache.set(key, result, { ttl });
  return result;
}

Redis Caching (Distributed)

import Redis from 'ioredis';

const redis = new Redis(process.env.REDIS_URL);

async function cachedWithRedis<T>(
  key: string,
  fetcher: () => Promise<T>,
  ttlSeconds = 60
): Promise<T> {
  const cached = await redis.get(key);
  if (cached) return JSON.parse(cached);

  const result = await fetcher();
  await redis.setex(key, ttlSeconds, JSON.stringify(result));
  return result;
}

Request Batching

import DataLoader from 'dataloader';

const windsurfLoader = new DataLoader<string, any>(
  async (ids) => {
    // Batch fetch from Windsurf
    const results = await windsurfClient.batchGet(ids);
    return ids.map(id => results.find(r => r.id === id) || null);
  },
  {
    maxBatchSize: 100,
    batchScheduleFn: callback => setTimeout(callback, 10),
  }
);

// Usage - automatically batched
const [item1, item2, item3] = await Promise.all([
  windsurfLoader.load('id-1'),
  windsurfLoader.load('id-2'),
  windsurfLoader.load('id-3'),
]);

Connection Optimization

import { Agent } from 'https';

// Keep-alive connection pooling
const agent = new Agent({
  keepAlive: true,
  maxSockets: 10,
  maxFreeSockets: 5,
  timeout: 30000,
});

const client = new WindsurfClient({
  apiKey: process.env.WINDSURF_API_KEY!,
  httpAgent: agent,
});

Pagination Optimization

async function* paginatedWindsurfList<T>(
  fetcher: (cursor?: string) => Promise<{ data: T[]; nextCursor?: string }>
): AsyncGenerator<T> {
  let cursor: string | undefined;

  do {
    const { data, nextCursor } = await fetcher(cursor);
    for (const item of data) {
      yield item;
    }
    cursor = nextCursor;
  } while (cursor);
}

// Usage
for await (const item of paginatedWindsurfList(cursor =>
  windsurfClient.list({ cursor, limit: 100 })
)) {
  await process(item);
}

Performance Monitoring

async function measuredWindsurfCall<T>(
  operation: string,
  fn: () => Promise<T>
): Promise<T> {
  const start = performance.now();
  try {
    const result = await fn();
    const duration = performance.now() - start;
    console.log({ operation, duration, status: 'success' });
    return result;
  } catch (error) {
    const duration = performance.now() - start;
    console.error({ operation, duration, status: 'error', error });
    throw error;
  }
}

Instructions

Step 1: Establish Baseline

Measure current latency for critical Windsurf operations.

Step 2: Implement Caching

Add response caching for frequently accessed data.

Step 3: Enable Batching

Use DataLoader or similar for automatic request batching.

Step 4: Optimize Connections

Configure connection pooling with keep-alive.

Output

  • Reduced API latency
  • Caching layer implemented
  • Request batching enabled
  • Connection pooling configured

Error Handling

| Issue | Cause | Solution | |-------|-------|----------| | Cache miss storm | TTL expired | Use stale-while-revalidate | | Batch timeout | Too many items | Reduce batch size | | Connection exhausted | No pooling | Configure max sockets | | Memory pressure | Cache too large | Set max cache entries |

Examples

Quick Performance Wrapper

const withPerformance = <T>(name: string, fn: () => Promise<T>) =>
  measuredWindsurfCall(name, () =>
    cachedWindsurfRequest(`cache:${name}`, fn)
  );

Resources

Next Steps

For cost optimization, see windsurf-cost-tuning.

From the file to a first result

The download contains exactly the content displayed on this page. This copy may differ from the latest version in the source repository.

View the source and supporting files

This download contains SKILL.md only. Any scripts, references, templates and dependencies are not included. Get the required files from the source, preserving their directory structure, before continuing.

1. Download the file

Download SKILL.md

From the root of a test project, save the file as .skill-downloads/windsurf-performance-tuning-mmlj2p9p/SKILL.md, or use the command below. This folder is for inspecting the skill before installation.

Command for macOS/Linux or WSL: requires a POSIX shell and curl. On Windows without WSL, use the download button and create the folder manually.

mkdir -p '.skill-downloads/windsurf-performance-tuning-mmlj2p9p' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/windsurf-performance-tuning-mmlj2p9p/download' --output '.skill-downloads/windsurf-performance-tuning-mmlj2p9p/SKILL.md.part' && mv '.skill-downloads/windsurf-performance-tuning-mmlj2p9p/SKILL.md.part' '.skill-downloads/windsurf-performance-tuning-mmlj2p9p/SKILL.md'

2. Check prerequisites

Read SKILL.md before using it. If it references scripts or external services, inspect them and prepare the required access in your test environment.

Tools declared by the author (check availability in your agent): Read, Write, Edit

Original excerpt: Prerequisites
  • Windsurf SDK installed
  • Understanding of async patterns
  • Redis or in-memory cache available (optional)
  • Performance monitoring in place

The platforms on this page are catalog indications. The paths below follow tool documentation; they do not prove this skill has been run in those tools. No minimum tool version is confirmed for this listing.

3. Load the skill

After inspection, copy the complete folder into your project using one of the commands below, then open a new tool session. The command stops if a folder with the same name already exists: compare the files before replacing it.

Claude Code
test -f '.skill-downloads/windsurf-performance-tuning-mmlj2p9p/SKILL.md' && test -s '.skill-downloads/windsurf-performance-tuning-mmlj2p9p/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/windsurf-performance-tuning' && cp -R '.skill-downloads/windsurf-performance-tuning-mmlj2p9p' '.claude/skills/windsurf-performance-tuning'

Codex
test -f '.skill-downloads/windsurf-performance-tuning-mmlj2p9p/SKILL.md' && test -s '.skill-downloads/windsurf-performance-tuning-mmlj2p9p/SKILL.md' && mkdir -p '.agents/skills' && test ! -e '.agents/skills/windsurf-performance-tuning' && cp -R '.skill-downloads/windsurf-performance-tuning-mmlj2p9p' '.agents/skills/windsurf-performance-tuning'

OpenSkills

OpenSkills must already be installed. The local install/read procedure is checked with OpenSkills 1.5.0, which requires Node.js ≥ 20.6.0. Catalog slugs are not resolved automatically.

Official OpenSkills installation
openskills install './.skill-downloads/windsurf-performance-tuning-mmlj2p9p'

openskills read 'windsurf-performance-tuning-mmlj2p9p'

Reading should display the installed file content and its base directory. It does not run the skill or install its dependencies.

For an agent that reads AGENTS.md, then sync the index. This command changes AGENTS.md: review the diff before using it.

openskills sync

Manual method or another tool: attach SKILL.md to a conversation, or open it in an agent that can read files. Include any required supporting resources. No universal folder is recognized by every tool.

4. Try a first task

Use a short, synthetic input: an API endpoint, a small document or an interface brief. In a new conversation, attach the file or give the agent its path, then adapt this request:

Read .skill-downloads/windsurf-performance-tuning-mmlj2p9p/SKILL.md and apply its instructions to this example: [describe a test input]. Identify any missing files, dependencies or access. Produce the result requested by the skill without inventing data or running unreviewed scripts.

Expected result: output matching the skill instructions, or a precise list of missing prerequisites. A read confirmation alone does not validate a first use. If an external resource is unavailable, that path remains untested.

Related skills