workflow-optimizer
Analyzes Cloudflare Workflow performance and suggests optimizations for cost, speed, and reliability. Use when workflow runs slowly, costs too much, or needs reliability improvements.
$ npx -y skills add secondsky/claude-skills --agent claude-codeHow it fires
How this agent gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
Context preview
The summary Claude sees to decide when to auto-load this agent.
Analyzes Cloudflare Workflow performance and suggests optimizations for cost, speed, and reliability. Use when workflow runs slowly, costs too much, or needs reliability improvements.
Agent definition
workflow-optimizer.mdname: workflow-optimizer
description: Analyzes Cloudflare Workflow performance and suggests optimizations for cost, speed, and reliability. Use when workflow runs slowly, costs too much, or needs reliability improvements.
tools:
- Read
- Grep
- Glob
- Bash
Workflow Optimizer Agent
Autonomous agent that analyzes workflow performance and provides actionable optimization recommendations for cost reduction, speed improvements, and enhanced reliability.
Trigger Conditions
This agent should be used when:
- User asks to "optimize workflow" or "improve performance"
- User mentions high workflow costs
- User reports slow workflow execution
- User wants to improve reliability
- After successful workflow deployment for optimization review
**Keywords**: optimize, performance, slow, cost, expensive, improve, faster, reliability, retry, timeout, efficiency
Analysis Process
Phase 1: Workflow Discovery
Step 1.1: Find Workflow Files
# Find all workflow implementations
find src -name "*.ts" -type f | xargs grep -l "extends WorkflowEntrypoint"
Step 1.2: Count Workflows
# Count workflows in configuration
grep -v '^\s*//' wrangler.jsonc | jq '.workflows | length'
Step 1.3: Select Workflow to Analyze
If multiple workflows found, analyze each or let user select.
---
Phase 2: Performance Analysis
Step 2.1: Count Steps
# Count step.do() calls
grep -c "step\.do" src/workflows/*.ts
# Count sleep calls
grep -c "step\.sleep\|step\.sleepUntil" src/workflows/*.ts
# Count waitForEvent calls
grep -c "step\.waitForEvent" src/workflows/*.ts
**Metrics**:
- Total steps
- Sleep steps (free)
- Active steps (billed)
Step 2.2: Analyze Step Complexity
For each step.do() call, analyze:
# Find steps with multiple await statements (potential optimization)
grep -A 20 "step\.do" src/workflows/*.ts | grep -c "await"
**Flag**:
- Steps with >3 await calls → May be doing too much
- Steps with fetch loops → Consider batching
Step 2.3: Detect Long-Running Steps
# Find loops inside steps
grep -B 5 -A 10 "step\.do" src/workflows/*.ts | grep "for\|while"
**Warning**: Loops inside step.do() may exceed 30s CPU limit.
Step 2.4: Analyze Retry Configuration
# Check for retry configuration
grep -n "retries:" src/workflows/*.ts
**Flag**:
- No retry config → Using defaults (may be suboptimal)
- High retry limits → May cause excessive retries
- No backoff → May overwhelm external services
---
Phase 3: Cost Analysis
Step 3.1: Calculate Request Cost
Workflow cost factors:
- **Requests**: $0.15 per million (workflow creation + each step)
- **Duration**: $0.02 per million GB-s
**Formula**:
Cost per workflow = (1 + steps) × $0.00000015 + duration_gb_s × $0.00000002
Step 3.2: Estimate Per-Workflow Cost
Example (5 steps, 10ms each):
- Requests: 6 × $0.00000015 = $0.0000009
- Duration: 0.05s × 0.128GB × $0.00000002 = ~$0
- Total: ~$0.0000009 per workflow
At 1M workflows/month: ~$0.90
Step 3.3: Identify Cost Hotspots
**High cost indicators**:
- Many steps per workflow (>10)
- Long-running steps (>1s each)
- Excessive retries
- Multiple workflows where one would suffice
---
Phase 4: Reliability Analysis
Step 4.1: Check Error Handling
# Find try-catch blocks
grep -c "try.*{" src/workflows/*.ts
# Find NonRetryableError usage
grep -c "NonRetryableError" src/workflows/*.ts**Flags**:
- No try-catch → Unhandled errors cause unexpected behavior
- No NonRetryableError → Permanent failures retry forever
Step 4.2: Check Timeout Configuration
# Check for timeout in waitForEvent
grep "waitForEvent" src/workflows/*.ts | grep -c "timeout"
**Warning**: waitForEvent without timeout can hang indefinitely.
Step 4.3: Check Idempotency
# Look for idempotency patterns
grep -c "idempotency\|idempotent\|Idempotency-Key" src/workflows/*.ts
**Recommendation**: External API calls should use idempotency keys.
Step 4.4: Check Circuit Breaker
# Look for circuit breaker patterns
grep -c "CircuitBreaker\|circuit" src/workflows/*.ts
**Recommendation**: Flaky external APIs should use circuit breaker.
---
Phase 5: Optimization Recommendations
Based on analysis, provide specific recommendations:
Performance Optimizations
**Opt 1: Batch API Calls**
// Before: Multiple steps
const user = await step.do('get user', () => fetch('/users/1'));
const orders = await step.do('get orders', () => fetch('/orders?user=1'));
// After: Single step with parallel fetches
const data = await step.do('get user data', async () => {
const [user, orders] = await Promise.all([
fetch('/users/1'),
fetch('/orders?user=1')
]);
return { user: await user.json(), orders: await orders.json() };
});**Impact**: 50% fewer requests, 50% cost reduction
**Opt 2: Use step.sleep() Instead of Polling**
// Before: Polling loop (expensive)
for (let i = 0; i < 10; i++) {
const status = await step.do(`poll ${i}`, () => checkStatus());
if (status.done) break;
}
// After: Use sleep (free)
await step.sleep('wait for processing', '5 minutes');
const status = await step.do('check status', () => checkStatus());**Impact**: 90% fewer requests during wait periods
**Opt 3: Break Large Steps into Batches**
// Before: Single large step (may timeout)
await step.do('process all', async () => {
for (const item of items) await process(item);
});
// After: Batched steps (reliable)
const batchSize = 100;
for (let i = 0; i < items.length; i += batchSize) {
await step.do(`batch ${Math.floor(i/batchSize)}`, async () => {
return await Promise.all(
items.slice(i, i + batchSize).map(process)
);
});
}**Impact**: Prevents timeout, enables progress tracking
---
Cost Optimizations
**Cost 1: Consolidate Related Steps**
// Before: Separate
Read more
name: workflow-optimizer description: Analyzes Cloudflare Workflow performance and suggests optimizations for cost, speed, and reliability. Use when workflow runs slowly, costs too much, or needs reliability improvements. tools: - Read - Grep - Glob - Bash
Workflow Optimizer Agent
Autonomous agent that analyzes workflow performance and provides actionable optimization recommendations for cost reduction, speed improvements, and enhanced reliability.
Trigger Conditions
This agent should be used when:
- User asks to "optimize workflow" or "improve performance"
- User mentions high workflow costs
- User reports slow workflow execution
- User wants to improve reliability
- After successful workflow deployment for optimization review
**Keywords**: optimize, performance, slow, cost, expensive, improve, faster, reliability, retry, timeout, efficiency
Analysis Process
Phase 1: Workflow Discovery
Step 1.1: Find Workflow Files
# Find all workflow implementations find src -name "*.ts" -type f | xargs grep -l "extends WorkflowEntrypoint"
Step 1.2: Count Workflows
# Count workflows in configuration grep -v '^\s*//' wrangler.jsonc | jq '.workflows | length'
Step 1.3: Select Workflow to Analyze
If multiple workflows found, analyze each or let user select.
---
Phase 2: Performance Analysis
Step 2.1: Count Steps
# Count step.do() calls grep -c "step\.do" src/workflows/*.ts # Count sleep calls grep -c "step\.sleep\|step\.sleepUntil" src/workflows/*.ts # Count waitForEvent calls grep -c "step\.waitForEvent" src/workflows/*.ts
**Metrics**:
- Total steps
- Sleep steps (free)
- Active steps (billed)
Step 2.2: Analyze Step Complexity
For each step.do() call, analyze:
# Find steps with multiple await statements (potential optimization) grep -A 20 "step\.do" src/workflows/*.ts | grep -c "await"
**Flag**:
- Steps with >3 await calls → May be doing too much
- Steps with fetch loops → Consider batching
Step 2.3: Detect Long-Running Steps
# Find loops inside steps grep -B 5 -A 10 "step\.do" src/workflows/*.ts | grep "for\|while"
**Warning**: Loops inside step.do() may exceed 30s CPU limit.
Step 2.4: Analyze Retry Configuration
# Check for retry configuration grep -n "retries:" src/workflows/*.ts
**Flag**:
- No retry config → Using defaults (may be suboptimal)
- High retry limits → May cause excessive retries
- No backoff → May overwhelm external services
---
Phase 3: Cost Analysis
Step 3.1: Calculate Request Cost
Workflow cost factors:
- **Requests**: $0.15 per million (workflow creation + each step)
- **Duration**: $0.02 per million GB-s
**Formula**:
Cost per workflow = (1 + steps) × $0.00000015 + duration_gb_s × $0.00000002
Step 3.2: Estimate Per-Workflow Cost
Example (5 steps, 10ms each): - Requests: 6 × $0.00000015 = $0.0000009 - Duration: 0.05s × 0.128GB × $0.00000002 = ~$0 - Total: ~$0.0000009 per workflow At 1M workflows/month: ~$0.90
Step 3.3: Identify Cost Hotspots
**High cost indicators**:
- Many steps per workflow (>10)
- Long-running steps (>1s each)
- Excessive retries
- Multiple workflows where one would suffice
---
Phase 4: Reliability Analysis
Step 4.1: Check Error Handling
# Find try-catch blocks
grep -c "try.*{" src/workflows/*.ts
# Find NonRetryableError usage
grep -c "NonRetryableError" src/workflows/*.ts**Flags**:
- No try-catch → Unhandled errors cause unexpected behavior
- No NonRetryableError → Permanent failures retry forever
Step 4.2: Check Timeout Configuration
# Check for timeout in waitForEvent grep "waitForEvent" src/workflows/*.ts | grep -c "timeout"
**Warning**: waitForEvent without timeout can hang indefinitely.
Step 4.3: Check Idempotency
# Look for idempotency patterns grep -c "idempotency\|idempotent\|Idempotency-Key" src/workflows/*.ts
**Recommendation**: External API calls should use idempotency keys.
Step 4.4: Check Circuit Breaker
# Look for circuit breaker patterns grep -c "CircuitBreaker\|circuit" src/workflows/*.ts
**Recommendation**: Flaky external APIs should use circuit breaker.
---
Phase 5: Optimization Recommendations
Based on analysis, provide specific recommendations:
Performance Optimizations
**Opt 1: Batch API Calls**
// Before: Multiple steps
const user = await step.do('get user', () => fetch('/users/1'));
const orders = await step.do('get orders', () => fetch('/orders?user=1'));
// After: Single step with parallel fetches
const data = await step.do('get user data', async () => {
const [user, orders] = await Promise.all([
fetch('/users/1'),
fetch('/orders?user=1')
]);
return { user: await user.json(), orders: await orders.json() };
});**Impact**: 50% fewer requests, 50% cost reduction
**Opt 2: Use step.sleep() Instead of Polling**
// Before: Polling loop (expensive)
for (let i = 0; i < 10; i++) {
const status = await step.do(`poll ${i}`, () => checkStatus());
if (status.done) break;
}
// After: Use sleep (free)
await step.sleep('wait for processing', '5 minutes');
const status = await step.do('check status', () => checkStatus());**Impact**: 90% fewer requests during wait periods
**Opt 3: Break Large Steps into Batches**
// Before: Single large step (may timeout)
await step.do('process all', async () => {
for (const item of items) await process(item);
});
// After: Batched steps (reliable)
const batchSize = 100;
for (let i = 0; i < items.length; i += batchSize) {
await step.do(`batch ${Math.floor(i/batchSize)}`, async () => {
return await Promise.all(
items.slice(i, i + batchSize).map(process)
);
});
}**Impact**: Prevents timeout, enables progress tracking
---
Cost Optimizations
**Cost 1: Consolidate Related Steps**
// Before: Separate
142 production-ready skills for Claude Code CLI 🔌 Platform / Harness Support These plugins ship as Claude Code marketplace plugins (.claude-plugin/ manifests) and Codex CLI plugins (.codex-plugin/ manifests).
Repo: secondsky/claude-skills
Other agents on secondsky-claude-skills.
- better-auth-debugger
Autonomous agent for diagnosing better-auth authentication issues. Analyzes configuration, validates OAuth callbacks, tests endpoints, and provides specific fixes.
Open agent - bun-migration-assistant
Use this agent when the user wants to migrate from Node.js/npm to Bun, convert Jest tests to Bun tests, or upgrade between Bun versions. Examples:
Open agent - bun-performance-analyzer
Use this agent when the user wants to optimize performance, analyze bottlenecks, or improve efficiency of their Bun application. Examples:
Open agent - bun-troubleshooter
Use this agent when the user encounters errors, crashes, or unexpected behavior in their Bun application. Examples:
Open agent - d1-debugger
Autonomous diagnostic agent that investigates Cloudflare D1 database issues through 9-phase analysis (config, migrations, queries, bindings, errors, limits, performance, Time Travel, report). Use when encountering D1 query errors, migration failures, binding issues, performance
Open agent - d1-query-optimizer
Performance analysis agent that identifies slow queries, missing indexes, and optimization opportunities in Cloudflare D1 databases using metrics, insights, and query plan analysis. Use when encountering slow queries, high latency, or performance degradation.
Open agent

