Durable Objects
cloudflare/skills
Build, debug, or review Cloudflare Durable Objects code for persistent state and coordination.
Cloudflare Workflows for durable long-running execution. An agent skill from secondsky/claude-skills.
$ npx skills add secondsky/claude-skills --skill cloudflare-workflows -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install secondsky/claude-skills cloudflare-workflows --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/secondsky/claude-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/cloudflare-workflows/skills/cloudflare-workflows .claude/skills/cloudflare-workflows && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "cloudflare-workflows" agent skill from https://github.com/secondsky/claude-skills/tree/main/plugins/cloudflare-workflows/skills/cloudflare-workflows into .claude/skills/cloudflare-workflows/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cloudflare-workflows", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/secondsky/claude-skills/tree/main/plugins/cloudflare-workflows/skills/cloudflare-workflowsType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add secondsky/claude-skills --skill cloudflare-workflows -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install secondsky/claude-skills cloudflare-workflows --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/secondsky/claude-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/plugins/cloudflare-workflows/skills/cloudflare-workflows .agents/skills/cloudflare-workflows && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "cloudflare-workflows" agent skill from https://github.com/secondsky/claude-skills/tree/main/plugins/cloudflare-workflows/skills/cloudflare-workflows into .agents/skills/cloudflare-workflows/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cloudflare-workflows", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add secondsky/claude-skills --skill cloudflare-workflows -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install secondsky/claude-skills cloudflare-workflows --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/secondsky/claude-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/plugins/cloudflare-workflows/skills/cloudflare-workflows .cursor/skills/cloudflare-workflows && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "cloudflare-workflows" agent skill from https://github.com/secondsky/claude-skills/tree/main/plugins/cloudflare-workflows/skills/cloudflare-workflows into .cursor/skills/cloudflare-workflows/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cloudflare-workflows", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/secondsky/claude-skills.git --path plugins/cloudflare-workflows/skills/cloudflare-workflows--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add secondsky/claude-skills --skill cloudflare-workflows -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install secondsky/claude-skills cloudflare-workflows --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/secondsky/claude-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/plugins/cloudflare-workflows/skills/cloudflare-workflows .gemini/skills/cloudflare-workflows && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "cloudflare-workflows" agent skill from https://github.com/secondsky/claude-skills/tree/main/plugins/cloudflare-workflows/skills/cloudflare-workflows into .gemini/skills/cloudflare-workflows/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cloudflare-workflows", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install secondsky/claude-skills cloudflare-workflowsInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add secondsky/claude-skills --skill cloudflare-workflows -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/secondsky/claude-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/plugins/cloudflare-workflows/skills/cloudflare-workflows .github/skills/cloudflare-workflows && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "cloudflare-workflows" agent skill from https://github.com/secondsky/claude-skills/tree/main/plugins/cloudflare-workflows/skills/cloudflare-workflows into .github/skills/cloudflare-workflows/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cloudflare-workflows", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add secondsky/claude-skills --skill cloudflare-workflows -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install secondsky/claude-skills cloudflare-workflows --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/secondsky/claude-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/plugins/cloudflare-workflows/skills/cloudflare-workflows .opencode/skills/cloudflare-workflows && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "cloudflare-workflows" agent skill from https://github.com/secondsky/claude-skills/tree/main/plugins/cloudflare-workflows/skills/cloudflare-workflows into .opencode/skills/cloudflare-workflows/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cloudflare-workflows", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
cloudflare-workflowsCloudflare Workflows for durable long-running execution. An agent skill from secondsky/claude-skills.
Cloudflare Workflows is an agent skill from secondsky/claude-skills. Cloudflare Workflows for durable long-running execution. Use for multi-step workflows, retries, state persistence, or encountering NonRetryableError, execution failed errors.
Its SKILL.md is about 4.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 18 other files, including reference files (for example `references/2025-features.md`, `references/common-issues.md` and `references/limits-quotas.md`).
It sits in Agent Workflows, covering Agent memory. It works with Cloudflare and Cloudflare Workers. The repository describes itself as: Production-ready skills for Claude Code CLI - Cloudflare, React, Tailwind v4, and AI integrations. The licence is MIT.
4 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 8837836. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships script files (TypeScript), which the agent can run.
Shell commands in SKILL.md call:
wranglernpmFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
developers.cloudflare.comblog.cloudflare.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Cloudflare Workflows loads about 4.2k tokens when it runs, and up to ~26k if it reads all its reference files. Until then it costs about 49 tokens; SKILL.md has 1,032 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from secondsky/claude-skills at commit 8837836, republished under its MIT licence (© secondsky). 1,032 words, ~4,203 tokens.
.claude/skills/cloudflare-workflows/SKILL.md (or your agent's skills folder). This skill also uses 16 other files; get the full folder from GitHub.Status: Production Ready ✅ | Last Verified: 2025-12-27 | Version: 3.0.0
Dependencies: cloudflare-worker-base (for Worker setup)
Contents: Quick Start • Commands • Agents • Core Concepts • Critical Rules • Top Errors • Common Patterns • When to Load References • Limits
Use the Cloudflare Workflows starter template:
npm create cloudflare@latest my-workflow -- --template cloudflare/workflows-starter --git --deploy false
cd my-workflowWhat you get:
src/index.ts:
import { WorkflowEntrypoint, WorkflowStep, WorkflowEvent } from 'cloudflare:workers';
type Env = {
MY_WORKFLOW: Workflow;
};
type Params = {
userId: string;
email: string;
};
export class MyWorkflow extends WorkflowEntrypoint<Env, Params> {
async run(event: WorkflowEvent<Params>, step: WorkflowStep) {
const { userId, email } = event.payload;
// Step 1: Do work with automatic retries
const result = await step.do('process user', async () => {
return { processed: true, userId };
});
// Step 2: Wait before next step
await step.sleep('wait 1 hour', '1 hour');
// Step 3: Continue workflow
await step.do('send email', async () => {
return { sent: true, email };
});
return { completed: true, userId };
}
}
// Worker to trigger workflow
export default {
async fetch(req: Request, env: Env): Promise<Response> {
const instance = await env.MY_WORKFLOW.create({
params: { userId: '123', email: 'user@example.com' }
});
return Response.json({
id: instance.id,
status: await instance.status()
});
}
};Template: See templates/basic-workflow.ts for complete example
{
"name": "my-workflow",
"main": "src/index.ts",
"compatibility_date": "2025-10-22",
"workflows": [
{
"binding": "MY_WORKFLOW",
"name": "my-workflow",
"class_name": "MyWorkflow"
}
]
}Template: See templates/wrangler-workflows-config.jsonc
npm run deployInteractive slash commands for workflow development:
| Command | Description | Use When |
|---|---|---|
/workflow-setup | Complete wizard for new workflow projects | Starting new project, need full setup |
/workflow-create | Quick scaffolding for workflow classes | Adding workflow to existing project |
/workflow-debug | Interactive debugging with error patterns | Troubleshooting workflow issues |
/workflow-test | Test workflows locally and remotely | Validating workflow behavior |
Example Usage:
/workflow-setup # Full guided setup wizard
/workflow-create # Quick workflow scaffolding
/workflow-debug # Debug workflow issues
/workflow-test # Test workflow executionAutonomous agents for complex workflow tasks:
| Agent | Description | Triggers |
|---|---|---|
workflow-debugger | Auto-detects and fixes configuration/runtime errors | "debug workflow", "fix workflow errors" |
workflow-optimizer | Analyzes performance, cost, and reliability | "optimize workflow", "improve performance" |
workflow-setup-assistant | Autonomous project scaffolding | "setup workflow", "create first workflow" |
Key Capabilities:
Automation scripts in scripts/ directory:
| Script | Purpose |
|---|---|
validate-workflow-config.sh | Validate wrangler.jsonc configuration |
test-workflow.sh | Create and test workflow instances |
benchmark-workflow.sh | Measure performance and cost |
generate-workflow.sh | Scaffold new workflows from templates |
check-workflow-limits.sh | Validate against Cloudflare limits |
Usage:
./scripts/validate-workflow-config.sh # Check config
./scripts/test-workflow.sh my-workflow # Test workflow
./scripts/benchmark-workflow.sh my-workflow 10 # Benchmark 10 runs
./scripts/generate-workflow.sh MyWorkflow # Generate scaffold
./scripts/check-workflow-limits.sh src/workflows/my-workflow.tsEvery workflow must extend WorkflowEntrypoint:
export class MyWorkflow extends WorkflowEntrypoint<Env, Params> {
async run(event: WorkflowEvent<Params>, step: WorkflowStep) {
// Workflow logic here
}
}Key Points:
Env: Environment bindings (KV, D1, etc.)Params: Typed payload passed when creating workflow instanceevent: Contains id, payload, timestampstep: Methods for durable executionAll workflow work MUST be done in steps for durability:
// step.do - Execute work with automatic retries
await step.do('step name', async () => {
return { result: 'data' };
});
// step.sleep - Wait for duration
await step.sleep('wait', '1 hour');
// step.sleepUntil - Wait until timestamp
await step.sleepUntil('wait until', Date.now() + 3600000);
// step.waitForEvent - Wait for external event
const event = await step.waitForEvent('payment received', 'payment.completed', {
timeout: '30 minutes'
});CRITICAL: All I/O (fetch, KV, D1, R2) must happen inside step.do() callbacks!
Reference: See references/workflow-patterns.md for all patterns
✅ Perform all I/O inside step.do() - Required for durability ✅ Use named steps - Makes debugging easier ✅ Return JSON-serializable data from steps - Required for state persistence ✅ Use step.sleep() for delays - Don't use setTimeout() ✅ Handle errors explicitly - Use try/catch in step callbacks ✅ Use NonRetryableError for permanent failures - Stops retries
Workflow Patterns: See references/workflow-patterns.md for:
❌ Never do I/O outside step.do() - Will fail with "I/O context" error ❌ Never use setTimeout() or setInterval() - Use step.sleep() instead ❌ Never return non-serializable data - Functions, Promises, etc. will fail ❌ Never hardcode timeouts - Use workflow config ❌ Never ignore NonRetryableError - Indicates permanent failure
Error:
Cannot perform I/O on behalf of a different requestCause: Performing I/O outside step.do() callback
Solution:
// ❌ WRONG
const data = await fetch('https://api.example.com');
await step.do('use data', async () => {
return data; // Error!
});
// ✅ CORRECT
const data = await step.do('fetch data', async () => {
const response = await fetch('https://api.example.com');
return await response.json();
});Error:
Cannot serialize workflow stateCause: Returning non-JSON-serializable data from step
Solution:
// ❌ WRONG
await step.do('process', async () => {
return { fn: () => {} }; // Functions not serializable
});
// ✅ CORRECT
await step.do('process', async () => {
return { result: 'data' }; // JSON-serializable
});Error: Workflow retries forever on permanent failures
Solution:
import { NonRetryableError } from 'cloudflare:workers';
await step.do('validate', async () => {
if (!isValid) {
throw new NonRetryableError('Invalid input'); // Stop retries
}
return { valid: true };
});Error:
WorkflowEvent 'payment.completed' not foundCause: Event name mismatch between waitForEvent and trigger
Solution:
// Workflow waits for event
const event = await step.waitForEvent('wait payment', 'payment.completed', {
timeout: '30 minutes'
});
// Trigger event with EXACT same name
await instance.trigger('payment.completed', { amount: 100 });Error:
Workflow execution failed: Step timeout exceededCause: Step exceeds maximum CPU time (30 seconds)
Solution:
// ❌ WRONG
await step.do('long task', async () => {
for (let i = 0; i < 1000000; i++) {
// Long computation
}
});
// ✅ CORRECT - Break into smaller steps
for (let i = 0; i < 100; i++) {
await step.do(`batch ${i}`, async () => {
// Process batch
});
}All Issues: See references/common-issues.md for complete documentation
Basic workflow with steps executing in order. Each step completes before the next begins.
Use cases: Order processing, user onboarding, data pipelines
Load templates/basic-workflow.ts for complete example
Workflow with time delays between steps using step.sleep() or step.sleepUntil().
Use cases: Reminder sequences, scheduled tasks, delayed notifications
Load templates/scheduled-workflow.ts for complete example
Wait for external events with step.waitForEvent(). Always set timeout and handle with NonRetryableError:
const payment = await step.waitForEvent('wait payment', 'payment.completed', {
timeout: '30 minutes'
});
if (!payment) throw new NonRetryableError('Payment timeout');Load templates/workflow-with-events.ts for complete example
Use NonRetryableError for permanent failures (404), regular Error for transient failures (5xx):
const data = await step.do('fetch', async () => {
const response = await fetch(url);
if (!response.ok) {
if (response.status === 404) throw new NonRetryableError('Not found');
throw new Error('Temporary failure'); // Will retry
}
return await response.json();
});Load templates/workflow-with-retries.ts for complete example with retry configuration
From Worker: Create instances via env.MY_WORKFLOW.create(), get status with instance.status(), trigger events with instance.trigger().
From Cron: Use scheduled() handler to create workflow instances on schedule.
Load templates/worker-trigger.ts for complete Worker trigger example
Load templates/scheduled-workflow.ts for complete Cron trigger example
references/common-issues.md: Encountering I/O context, serialization, NonRetryableError, event naming, or timeout errors; troubleshooting workflow failures.
references/workflow-patterns.md: Building complex orchestration, approval workflows, idempotency patterns, or circuit breaker patterns.
references/wrangler-commands.md: Need CLI commands for managing workflow instances, debugging stuck workflows, or monitoring production.
references/production-checklist.md: Preparing for deployment, need pre-deployment verification, setting up monitoring/error handling.
references/limits-quotas.md: Hitting instance/step/payload limits, optimizing for cost, designing high-volume workflows.
references/2025-features.md: Using events system, enhanced retries, instance lifecycle control, or latest Workflows features.
references/metrics-analytics.md: Setting up monitoring, custom metrics, external logging integration, or workflow dashboards.
references/troubleshooting.md: Complex debugging scenarios, stuck instances, systematic diagnosis, performance issues.
templates/: basic-workflow.ts (sequential), scheduled-workflow.ts (delays/sleep), workflow-with-events.ts (waitForEvent), workflow-with-retries.ts (custom retry), worker-trigger.ts (Worker triggers), wrangler-workflows-config.jsonc (Wrangler config), parallel-execution-workflow.ts (batched parallel processing), circuit-breaker-workflow.ts (resilient external calls)
Key Commands: wrangler workflows create, wrangler workflows instances list/describe/terminate, wrangler deploy
Load references/wrangler-commands.md for complete CLI reference with all workflow management commands, monitoring workflows, and debugging stuck instances.
Workflows automatically persist state between steps. No manual state management needed:
export class StatefulWorkflow extends WorkflowEntrypoint {
async run(event, step) {
// Step 1 result is automatically persisted
const result1 = await step.do('step 1', async () => {
return { data: 'value' };
});
// Even if workflow crashes here, step 1 won't re-run
await step.sleep('wait', '1 hour');
// Step 2 can use step 1's result (still available after sleep)
await step.do('step 2', async () => {
console.log(result1.data); // 'value' - persisted!
});
}
}Key Points:
| Resource | Limit |
|---|---|
| Step CPU Time | 30 seconds |
| Workflow Duration | 30 days |
| Step Payload Size | 128 KB |
| Workflow Payload Size | 128 KB |
| Steps per Workflow | 1,000 |
| Concurrent Instances | 1,000 per workflow |
| Event Payload Size | 128 KB |
Workarounds:
Example Cost (1M workflow runs):
Solution: Move all I/O into step.do() callbacks → See references/common-issues.md #1
Solution: Return only JSON-serializable data from steps → See references/common-issues.md #2
Solution: Throw NonRetryableError for permanent failures → See references/common-issues.md #3
Solution: Ensure event names match exactly → See references/common-issues.md #4
Solution: Break long computations into smaller steps → See references/common-issues.md #5
10-Point Pre-Deployment Checklist: I/O context isolation, JSON serialization, NonRetryableError usage, event name consistency, step duration limits, error handling, retry configuration, timeouts, workflow naming, and monitoring.
Load references/production-checklist.md for complete checklist with detailed explanations, code examples, verification steps, and deployment workflow.
Workflows: https://developers.cloudflare.com/workflows/ • API Reference: https://developers.cloudflare.com/workflows/reference/ • Examples: https://developers.cloudflare.com/workflows/examples/ • Blog: https://blog.cloudflare.com/cloudflare-workflows/
© secondsky, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 16 other files (references) in plugins/cloudflare-workflows/skills/cloudflare-workflows of secondsky/claude-skills.
Open the folder on GitHubat commit 8837836
Cloudflare Workflows next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Cloudflare Workflows this skillsecondsky/claude-skills | 227 | — | ~4.2k | Automated safety check: Pass | MIT | |
| Durable Objectscloudflare/skills | 3k | 2 repos | ~1.5k | Automated safety check: Pass | Apache-2.0 | |
| Agents SDKcloudflare/skills | 3k | 2 repos | ~3k | Automated safety check: Pass | Apache-2.0 | |
| Memoraagentic-box/memora | 731 | — | ~813 | Automated safety check: Pass | MIT | |
| Building MCP Server On CloudflareCommandCodeAI/agent-skills | 132 | — | ~1.5k | Automated safety check: Pass | MIT | |
| Cloudflarepopmechanic/VibesOS | 135 | — | ~1.2k | Automated safety check: Notes | MIT |
cloudflare/skills
Build, debug, or review Cloudflare Durable Objects code for persistent state and coordination.
cloudflare/skills
Build, debug, or review Cloudflare Agents SDK applications using the agents package.
agentic-box/memora
A skill your agent uses when working with persistent memory across sessions, storing/retrieving knowledge, managing TODOs/issues, or when context from previous sessions would be helpful.
CommandCodeAI/agent-skills
Builds remote MCP (Model Context Protocol) servers on Cloudflare Workers with tools, OAuth authentication, and production deployment.
popmechanic/VibesOS
Self-contained deploy automation — invoke directly, do not decompose.
receptron/mulmoterminal
Lay out a Worker with D1 and static Vue assets, with tests that run inside the Workers runtime.
secondsky/claude-skills
TanStack AI (alpha) provider-agnostic type-safe chat with streaming for OpenAI, Anthropic, Gemini, Ollama.
secondsky/claude-skills
AutoAnimate (@formkit/auto-animate) zero-config animations for React.
secondsky/claude-skills
MUI Base UI unstyled React components with Floating UI. An agent skill from secondsky/claude-skills.
secondsky/claude-skills
This skill should be used when the user asks to "upload images to Cloudflare", "implement direct creator upload", "configure image transformations", "optimize WebP/AVIF", "create image variants"…
secondsky/claude-skills
Deploy Next.js to Cloudflare Workers via the OpenNext adapter (@opennextjs/cloudflare).
secondsky/claude-skills
Cloudflare Sandboxes SDK for secure code execution in Linux containers at edge.
Works with
Categories
Cloudflare Workflows for durable long-running execution. An agent skill from secondsky/claude-skills. Cloudflare Workflows is an agent skill from secondsky/claude-skills. Cloudflare Workflows for durable long-running execution.
Cloudflare Workflows fits situations like: multi-step workflows; state persistence; encountering NonRetryableError; execution failed errors.
Run `npx skills add secondsky/claude-skills --skill cloudflare-workflows -a claude-code`. Or copy the skill folder (plugins/cloudflare-workflows/skills/cloudflare-workflows in secondsky/claude-skills) into .claude/skills/cloudflare-workflows in your project. Claude Code loads it when a task matches its description.
Run `npx skills add secondsky/claude-skills --skill cloudflare-workflows -a codex`. Or copy the skill folder (plugins/cloudflare-workflows/skills/cloudflare-workflows in secondsky/claude-skills) into .agents/skills/cloudflare-workflows in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add secondsky/claude-skills --skill cloudflare-workflows -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/cloudflare-workflows, .gemini/skills/cloudflare-workflows, .github/skills/cloudflare-workflows and .opencode/skills/cloudflare-workflows in your project.
Going by SKILL.md and its folder, Cloudflare Workflows needs TypeScript for the scripts in its folder and the command-line tools its instructions call (wrangler and npm). Our summary lists: Node.js.
SKILL.md names 2 domains. As links in the text: developers.cloudflare.com and blog.cloudflare.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Cloudflare Workflows is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.2k tokens (SKILL.md is roughly 17k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 22k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Cloudflare Workflows: Durable Objects (cloudflare/skills, 3k stars), Agents SDK (cloudflare/skills, 3k stars), Memora (agentic-box/memora, 731 stars) and Building MCP Server On Cloudflare (CommandCodeAI/agent-skills, 132 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
secondsky (a GitHub user) maintains it in secondsky/claude-skills, which has 227 GitHub stars. The repository holds 169 skills in this directory. The repository was last updated on September 28, 2026.
Source: secondsky/claude-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.