[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6FGECMDKEB0T2246CVSSJJ2":3,"skill-same:01M6FGECMDKEB0T2246CVSSJJ2":119},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":21,"linkOnly":22,"markdownContent":23,"markdownBody":24,"frontMatter":25,"refName":26,"commitSha":27,"skillDirectory":28,"forksCount":29,"repositoryHtmlUrl":30,"repositoryHomepageUrl":31,"ownerHtmlUrl":32,"ownerBlogUrl":6,"ownerDescription":33,"updatedAt":34,"install":35,"resources":48},"01M6FGECMDKEB0T2246CVSSJJ2","cloudflare-workflows",null,"ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",67,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Fcloudflare-workflows\u002FSKILL.md",[],[18,19,20],"workflows","cloudflare","cloudflare workflows","2026-11-10 10:12:30",false,"---\nname: cloudflare-workflows\ndescription: Cloudflare Workflows for durable long-running execution. Use for multi-step workflows, retries, state persistence, or encountering NonRetryableError, execution failed errors.\n\n  Keywords: cloudflare workflows, workflows workers, durable execution, workflow step,\n  WorkflowEntrypoint, step.do, step.sleep, workflow retries, NonRetryableError,\n  workflow state, wrangler workflows, workflow events, long-running tasks, step.sleepUntil,\n  step.waitForEvent, workflow bindings\nlicense: MIT\nmetadata:\n  version: \"3.0.0\"\n  wrangler_version: \"4.50.0\"\n  workers_types_version: \"4.20251126.0\"\n  last_verified: \"2025-12-27\"\n  errors_prevented: 5\n  templates_included: 8\n  references_included: 8\n  agents_included: 3\n  commands_included: 4\n  scripts_included: 5\n---\n\n# Cloudflare Workflows\n\n**Status**: Production Ready ✅ | **Last Verified**: 2025-12-27 | **Version**: 3.0.0\n\n**Dependencies**: cloudflare-worker-base (for Worker setup)\n\n**Contents**: [Quick Start](#quick-start-10-minutes) • [Commands](#commands) • [Agents](#agents) • [Core Concepts](#core-concepts) • [Critical Rules](#critical-rules) • [Top Errors](#top-5-errors-critical) • [Common Patterns](#common-patterns) • [When to Load References](#when-to-load-references) • [Limits](#limits--pricing)\n\n---\n\n## Quick Start (10 Minutes)\n\n### 1. Create a Workflow\n\nUse the Cloudflare Workflows starter template:\n\n```bash\nnpm create cloudflare@latest my-workflow -- --template cloudflare\u002Fworkflows-starter --git --deploy false\ncd my-workflow\n```\n\n**What you get:**\n- WorkflowEntrypoint class template\n- Worker to trigger workflows\n- Complete wrangler.jsonc configuration\n\n### 2. Basic Workflow Structure\n\n**src\u002Findex.ts:**\n\n```typescript\nimport { WorkflowEntrypoint, WorkflowStep, WorkflowEvent } from 'cloudflare:workers';\n\ntype Env = {\n  MY_WORKFLOW: Workflow;\n};\n\ntype Params = {\n  userId: string;\n  email: string;\n};\n\nexport class MyWorkflow extends WorkflowEntrypoint\u003CEnv, Params> {\n  async run(event: WorkflowEvent\u003CParams>, step: WorkflowStep) {\n    const { userId, email } = event.payload;\n\n    \u002F\u002F Step 1: Do work with automatic retries\n    const result = await step.do('process user', async () => {\n      return { processed: true, userId };\n    });\n\n    \u002F\u002F Step 2: Wait before next step\n    await step.sleep('wait 1 hour', '1 hour');\n\n    \u002F\u002F Step 3: Continue workflow\n    await step.do('send email', async () => {\n      return { sent: true, email };\n    });\n\n    return { completed: true, userId };\n  }\n}\n\n\u002F\u002F Worker to trigger workflow\nexport default {\n  async fetch(req: Request, env: Env): Promise\u003CResponse> {\n    const instance = await env.MY_WORKFLOW.create({\n      params: { userId: '123', email: 'user@example.com' }\n    });\n\n    return Response.json({\n      id: instance.id,\n      status: await instance.status()\n    });\n  }\n};\n```\n\n**Template**: See `templates\u002Fbasic-workflow.ts` for complete example\n\n### 3. Configure wrangler.jsonc\n\n```jsonc\n{\n  \"name\": \"my-workflow\",\n  \"main\": \"src\u002Findex.ts\",\n  \"compatibility_date\": \"2025-10-22\",\n  \"workflows\": [\n    {\n      \"binding\": \"MY_WORKFLOW\",\n      \"name\": \"my-workflow\",\n      \"class_name\": \"MyWorkflow\"\n    }\n  ]\n}\n```\n\n**Template**: See `templates\u002Fwrangler-workflows-config.jsonc`\n\n### 4. Deploy\n\n```bash\nnpm run deploy\n```\n\n---\n\n## Commands\n\nInteractive slash commands for workflow development:\n\n| Command | Description | Use When |\n|---------|-------------|----------|\n| `\u002Fworkflow-setup` | Complete wizard for new workflow projects | Starting new project, need full setup |\n| `\u002Fworkflow-create` | Quick scaffolding for workflow classes | Adding workflow to existing project |\n| `\u002Fworkflow-debug` | Interactive debugging with error patterns | Troubleshooting workflow issues |\n| `\u002Fworkflow-test` | Test workflows locally and remotely | Validating workflow behavior |\n\n**Example Usage**:\n```\n\u002Fworkflow-setup   # Full guided setup wizard\n\u002Fworkflow-create  # Quick workflow scaffolding\n\u002Fworkflow-debug   # Debug workflow issues\n\u002Fworkflow-test    # Test workflow execution\n```\n\n---\n\n## Agents\n\nAutonomous agents for complex workflow tasks:\n\n| Agent | Description | Triggers |\n|-------|-------------|----------|\n| `workflow-debugger` | Auto-detects and fixes configuration\u002Fruntime errors | \"debug workflow\", \"fix workflow errors\" |\n| `workflow-optimizer` | Analyzes performance, cost, and reliability | \"optimize workflow\", \"improve performance\" |\n| `workflow-setup-assistant` | Autonomous project scaffolding | \"setup workflow\", \"create first workflow\" |\n\n**Key Capabilities**:\n- **Debugger**: 6-phase analysis, auto-fix for I\u002FO context, serialization, export issues\n- **Optimizer**: Cost analysis, reliability scoring, actionable recommendations\n- **Setup Assistant**: Project detection, automatic scaffolding, validation\n\n---\n\n## Scripts\n\nAutomation scripts in `scripts\u002F` directory:\n\n| Script | Purpose |\n|--------|---------|\n| `validate-workflow-config.sh` | Validate wrangler.jsonc configuration |\n| `test-workflow.sh` | Create and test workflow instances |\n| `benchmark-workflow.sh` | Measure performance and cost |\n| `generate-workflow.sh` | Scaffold new workflows from templates |\n| `check-workflow-limits.sh` | Validate against Cloudflare limits |\n\n**Usage**:\n```bash\n.\u002Fscripts\u002Fvalidate-workflow-config.sh           # Check config\n.\u002Fscripts\u002Ftest-workflow.sh my-workflow          # Test workflow\n.\u002Fscripts\u002Fbenchmark-workflow.sh my-workflow 10  # Benchmark 10 runs\n.\u002Fscripts\u002Fgenerate-workflow.sh MyWorkflow       # Generate scaffold\n.\u002Fscripts\u002Fcheck-workflow-limits.sh src\u002Fworkflows\u002Fmy-workflow.ts\n```\n\n---\n\n## Core Concepts\n\n### WorkflowEntrypoint\n\nEvery workflow must extend `WorkflowEntrypoint`:\n\n```typescript\nexport class MyWorkflow extends WorkflowEntrypoint\u003CEnv, Params> {\n  async run(event: WorkflowEvent\u003CParams>, step: WorkflowStep) {\n    \u002F\u002F Workflow logic here\n  }\n}\n```\n\n**Key Points**:\n- `Env`: Environment bindings (KV, D1, etc.)\n- `Params`: Typed payload passed when creating workflow instance\n- `event`: Contains `id`, `payload`, `timestamp`\n- `step`: Methods for durable execution\n\n### Step Methods\n\nAll workflow work MUST be done in steps for durability:\n\n```typescript\n\u002F\u002F step.do - Execute work with automatic retries\nawait step.do('step name', async () => {\n  return { result: 'data' };\n});\n\n\u002F\u002F step.sleep - Wait for duration\nawait step.sleep('wait', '1 hour');\n\n\u002F\u002F step.sleepUntil - Wait until timestamp\nawait step.sleepUntil('wait until', Date.now() + 3600000);\n\n\u002F\u002F step.waitForEvent - Wait for external event\nconst event = await step.waitForEvent('payment received', 'payment.completed', {\n  timeout: '30 minutes'\n});\n```\n\n**CRITICAL**: All I\u002FO (fetch, KV, D1, R2) must happen **inside** `step.do()` callbacks!\n\n**Reference**: See `references\u002Fworkflow-patterns.md` for all patterns\n\n---\n\n## Critical Rules\n\n### Always Do ✅\n\n✅ **Perform all I\u002FO inside step.do()** - Required for durability\n✅ **Use named steps** - Makes debugging easier\n✅ **Return JSON-serializable data from steps** - Required for state persistence\n✅ **Use step.sleep() for delays** - Don't use setTimeout()\n✅ **Handle errors explicitly** - Use try\u002Fcatch in step callbacks\n✅ **Use NonRetryableError for permanent failures** - Stops retries\n\n**Workflow Patterns**: See `references\u002Fworkflow-patterns.md` for:\n- Sequential workflows\n- Parallel execution\n- Event-driven workflows\n- Scheduled workflows\n- Human-in-the-loop workflows\n\n### Never Do ❌\n\n❌ **Never do I\u002FO outside step.do()** - Will fail with \"I\u002FO context\" error\n❌ **Never use setTimeout() or setInterval()** - Use step.sleep() instead\n❌ **Never return non-serializable data** - Functions, Promises, etc. will fail\n❌ **Never hardcode timeouts** - Use workflow config\n❌ **Never ignore NonRetryableError** - Indicates permanent failure\n\n---\n\n## Top 5 Critical Errors\n\n### Error #1: I\u002FO Context Error ⚠️\n\n**Error:**\n```\nCannot perform I\u002FO on behalf of a different request\n```\n\n**Cause:** Performing I\u002FO outside `step.do()` callback\n\n**Solution:**\n```typescript\n\u002F\u002F ❌ WRONG\nconst data = await fetch('https:\u002F\u002Fapi.example.com');\nawait step.do('use data', async () => {\n  return data; \u002F\u002F Error!\n});\n\n\u002F\u002F ✅ CORRECT\nconst data = await step.do('fetch data', async () => {\n  const response = await fetch('https:\u002F\u002Fapi.example.com');\n  return await response.json();\n});\n```\n\n### Error #2: Serialization Error\n\n**Error:**\n```\nCannot serialize workflow state\n```\n\n**Cause:** Returning non-JSON-serializable data from step\n\n**Solution:**\n```typescript\n\u002F\u002F ❌ WRONG\nawait step.do('process', async () => {\n  return { fn: () => {} }; \u002F\u002F Functions not serializable\n});\n\n\u002F\u002F ✅ CORRECT\nawait step.do('process', async () => {\n  return { result: 'data' }; \u002F\u002F JSON-serializable\n});\n```\n\n### Error #3: NonRetryableError Not Thrown\n\n**Error:** Workflow retries forever on permanent failures\n\n**Solution:**\n```typescript\nimport { NonRetryableError } from 'cloudflare:workers';\n\nawait step.do('validate', async () => {\n  if (!isValid) {\n    throw new NonRetryableError('Invalid input'); \u002F\u002F Stop retries\n  }\n  return { valid: true };\n});\n```\n\n### Error #4: WorkflowEvent Not Found\n\n**Error:**\n```\nWorkflowEvent 'payment.completed' not found\n```\n\n**Cause:** Event name mismatch between `waitForEvent` and trigger\n\n**Solution:**\n```typescript\n\u002F\u002F Workflow waits for event\nconst event = await step.waitForEvent('wait payment', 'payment.completed', {\n  timeout: '30 minutes'\n});\n\n\u002F\u002F Trigger event with EXACT same name\nawait instance.trigger('payment.completed', { amount: 100 });\n```\n\n### Error #5: Workflow Execution Failed\n\n**Error:**\n```\nWorkflow execution failed: Step timeout exceeded\n```\n\n**Cause:** Step exceeds maximum CPU time (30 seconds)\n\n**Solution:**\n```typescript\n\u002F\u002F ❌ WRONG\nawait step.do('long task', async () => {\n  for (let i = 0; i \u003C 1000000; i++) {\n    \u002F\u002F Long computation\n  }\n});\n\n\u002F\u002F ✅ CORRECT - Break into smaller steps\nfor (let i = 0; i \u003C 100; i++) {\n  await step.do(`batch ${i}`, async () => {\n    \u002F\u002F Process batch\n  });\n}\n```\n\n---\n\n**All Issues**: See `references\u002Fcommon-issues.md` for complete documentation\n\n---\n\n## Common Patterns\n\n### Sequential Workflow\n\nBasic workflow with steps executing in order. Each step completes before the next begins.\n\n**Use cases**: Order processing, user onboarding, data pipelines\n\n**Load `templates\u002Fbasic-workflow.ts` for complete example**\n\n### Scheduled Workflow\n\nWorkflow with time delays between steps using `step.sleep()` or `step.sleepUntil()`.\n\n**Use cases**: Reminder sequences, scheduled tasks, delayed notifications\n\n**Load `templates\u002Fscheduled-workflow.ts` for complete example**\n\n### Event-Driven Workflow\n\nWait for external events with `step.waitForEvent()`. Always set timeout and handle with `NonRetryableError`:\n\n```typescript\nconst payment = await step.waitForEvent('wait payment', 'payment.completed', {\n  timeout: '30 minutes'\n});\nif (!payment) throw new NonRetryableError('Payment timeout');\n```\n\n**Load `templates\u002Fworkflow-with-events.ts` for complete example**\n\n### Workflow with Retries\n\nUse `NonRetryableError` for permanent failures (404), regular `Error` for transient failures (5xx):\n\n```typescript\nconst data = await step.do('fetch', async () => {\n  const response = await fetch(url);\n  if (!response.ok) {\n    if (response.status === 404) throw new NonRetryableError('Not found');\n    throw new Error('Temporary failure'); \u002F\u002F Will retry\n  }\n  return await response.json();\n});\n```\n\n**Load `templates\u002Fworkflow-with-retries.ts` for complete example with retry configuration**\n\n---\n\n## Triggering Workflows\n\n**From Worker**: Create instances via `env.MY_WORKFLOW.create()`, get status with `instance.status()`, trigger events with `instance.trigger()`.\n\n**From Cron**: Use `scheduled()` handler to create workflow instances on schedule.\n\n**Load `templates\u002Fworker-trigger.ts` for complete Worker trigger example**\n**Load `templates\u002Fscheduled-workflow.ts` for complete Cron trigger example**\n\n---\n\n## When to Load References\n\n**`references\u002Fcommon-issues.md`**: Encountering I\u002FO context, serialization, NonRetryableError, event naming, or timeout errors; troubleshooting workflow failures.\n\n**`references\u002Fworkflow-patterns.md`**: Building complex orchestration, approval workflows, idempotency patterns, or circuit breaker patterns.\n\n**`references\u002Fwrangler-commands.md`**: Need CLI commands for managing workflow instances, debugging stuck workflows, or monitoring production.\n\n**`references\u002Fproduction-checklist.md`**: Preparing for deployment, need pre-deployment verification, setting up monitoring\u002Ferror handling.\n\n**`references\u002Flimits-quotas.md`**: Hitting instance\u002Fstep\u002Fpayload limits, optimizing for cost, designing high-volume workflows.\n\n**`references\u002F2025-features.md`**: Using events system, enhanced retries, instance lifecycle control, or latest Workflows features.\n\n**`references\u002Fmetrics-analytics.md`**: Setting up monitoring, custom metrics, external logging integration, or workflow dashboards.\n\n**`references\u002Ftroubleshooting.md`**: Complex debugging scenarios, stuck instances, systematic diagnosis, performance issues.\n\n**`templates\u002F`**: **basic-workflow.ts** (sequential), **scheduled-workflow.ts** (delays\u002Fsleep), **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)\n\n---\n\n## Wrangler Commands\n\n**Key Commands**: `wrangler workflows create`, `wrangler workflows instances list\u002Fdescribe\u002Fterminate`, `wrangler deploy`\n\n**Load `references\u002Fwrangler-commands.md` for complete CLI reference with all workflow management commands, monitoring workflows, and debugging stuck instances.**\n\n---\n\n## State Persistence\n\nWorkflows automatically persist state between steps. No manual state management needed:\n\n```typescript\nexport class StatefulWorkflow extends WorkflowEntrypoint {\n  async run(event, step) {\n    \u002F\u002F Step 1 result is automatically persisted\n    const result1 = await step.do('step 1', async () => {\n      return { data: 'value' };\n    });\n\n    \u002F\u002F Even if workflow crashes here, step 1 won't re-run\n    await step.sleep('wait', '1 hour');\n\n    \u002F\u002F Step 2 can use step 1's result (still available after sleep)\n    await step.do('step 2', async () => {\n      console.log(result1.data); \u002F\u002F 'value' - persisted!\n    });\n  }\n}\n```\n\n**Key Points**:\n- Step results automatically persisted\n- Completed steps never re-run (even after crash\u002Frestart)\n- State available throughout workflow lifetime\n\n---\n\n## Limits\n\n| Resource | Limit |\n|----------|-------|\n| **Step CPU Time** | 30 seconds |\n| **Workflow Duration** | 30 days |\n| **Step Payload Size** | 128 KB |\n| **Workflow Payload Size** | 128 KB |\n| **Steps per Workflow** | 1,000 |\n| **Concurrent Instances** | 1,000 per workflow |\n| **Event Payload Size** | 128 KB |\n\n**Workarounds**:\n- Large data: Store in KV\u002FR2, pass key in step\n- Long CPU: Break into smaller steps\n- Many steps: Consider sub-workflows\n\n## Pricing\n\n- **Duration**: $0.02 per million GB-s (same as Workers)\n- **Requests**: $0.15 per million (workflow creation + step execution)\n- **State Storage**: Included (no additional cost)\n- **Sleep**: Free (no CPU usage during sleep)\n\n**Example Cost** (1M workflow runs):\n- 5 steps each = 5M requests = $0.75\n- 10ms per step = 50GB-s = $0.001\n- **Total**: ~$0.75 per million workflows\n\n---\n\n## Troubleshooting\n\n### \"I\u002FO context\" error\n**Solution**: Move all I\u002FO into `step.do()` callbacks → See `references\u002Fcommon-issues.md` #1\n\n### \"Serialization error\"\n**Solution**: Return only JSON-serializable data from steps → See `references\u002Fcommon-issues.md` #2\n\n### Workflow retries forever\n**Solution**: Throw `NonRetryableError` for permanent failures → See `references\u002Fcommon-issues.md` #3\n\n### \"WorkflowEvent not found\"\n**Solution**: Ensure event names match exactly → See `references\u002Fcommon-issues.md` #4\n\n### \"Step timeout exceeded\"\n**Solution**: Break long computations into smaller steps → See `references\u002Fcommon-issues.md` #5\n\n---\n\n## Production Checklist\n\n**10-Point Pre-Deployment Checklist**: I\u002FO context isolation, JSON serialization, NonRetryableError usage, event name consistency, step duration limits, error handling, retry configuration, timeouts, workflow naming, and monitoring.\n\n**Load `references\u002Fproduction-checklist.md` for complete checklist with detailed explanations, code examples, verification steps, and deployment workflow.**\n\n---\n\n## Official Documentation\n\n**Workflows**: https:\u002F\u002Fdevelopers.cloudflare.com\u002Fworkflows\u002F • **API Reference**: https:\u002F\u002Fdevelopers.cloudflare.com\u002Fworkflows\u002Freference\u002F • **Examples**: https:\u002F\u002Fdevelopers.cloudflare.com\u002Fworkflows\u002Fexamples\u002F • **Blog**: https:\u002F\u002Fblog.cloudflare.com\u002Fcloudflare-workflows\u002F\n","# Cloudflare Workflows\n\n**Status**: Production Ready ✅ | **Last Verified**: 2025-12-27 | **Version**: 3.0.0\n\n**Dependencies**: cloudflare-worker-base (for Worker setup)\n\n**Contents**: [Quick Start](#quick-start-10-minutes) • [Commands](#commands) • [Agents](#agents) • [Core Concepts](#core-concepts) • [Critical Rules](#critical-rules) • [Top Errors](#top-5-errors-critical) • [Common Patterns](#common-patterns) • [When to Load References](#when-to-load-references) • [Limits](#limits--pricing)\n\n---\n\n## Quick Start (10 Minutes)\n\n### 1. Create a Workflow\n\nUse the Cloudflare Workflows starter template:\n\n```bash\nnpm create cloudflare@latest my-workflow -- --template cloudflare\u002Fworkflows-starter --git --deploy false\ncd my-workflow\n```\n\n**What you get:**\n- WorkflowEntrypoint class template\n- Worker to trigger workflows\n- Complete wrangler.jsonc configuration\n\n### 2. Basic Workflow Structure\n\n**src\u002Findex.ts:**\n\n```typescript\nimport { WorkflowEntrypoint, WorkflowStep, WorkflowEvent } from 'cloudflare:workers';\n\ntype Env = {\n  MY_WORKFLOW: Workflow;\n};\n\ntype Params = {\n  userId: string;\n  email: string;\n};\n\nexport class MyWorkflow extends WorkflowEntrypoint\u003CEnv, Params> {\n  async run(event: WorkflowEvent\u003CParams>, step: WorkflowStep) {\n    const { userId, email } = event.payload;\n\n    \u002F\u002F Step 1: Do work with automatic retries\n    const result = await step.do('process user', async () => {\n      return { processed: true, userId };\n    });\n\n    \u002F\u002F Step 2: Wait before next step\n    await step.sleep('wait 1 hour', '1 hour');\n\n    \u002F\u002F Step 3: Continue workflow\n    await step.do('send email', async () => {\n      return { sent: true, email };\n    });\n\n    return { completed: true, userId };\n  }\n}\n\n\u002F\u002F Worker to trigger workflow\nexport default {\n  async fetch(req: Request, env: Env): Promise\u003CResponse> {\n    const instance = await env.MY_WORKFLOW.create({\n      params: { userId: '123', email: 'user@example.com' }\n    });\n\n    return Response.json({\n      id: instance.id,\n      status: await instance.status()\n    });\n  }\n};\n```\n\n**Template**: See `templates\u002Fbasic-workflow.ts` for complete example\n\n### 3. Configure wrangler.jsonc\n\n```jsonc\n{\n  \"name\": \"my-workflow\",\n  \"main\": \"src\u002Findex.ts\",\n  \"compatibility_date\": \"2025-10-22\",\n  \"workflows\": [\n    {\n      \"binding\": \"MY_WORKFLOW\",\n      \"name\": \"my-workflow\",\n      \"class_name\": \"MyWorkflow\"\n    }\n  ]\n}\n```\n\n**Template**: See `templates\u002Fwrangler-workflows-config.jsonc`\n\n### 4. Deploy\n\n```bash\nnpm run deploy\n```\n\n---\n\n## Commands\n\nInteractive slash commands for workflow development:\n\n| Command | Description | Use When |\n|---------|-------------|----------|\n| `\u002Fworkflow-setup` | Complete wizard for new workflow projects | Starting new project, need full setup |\n| `\u002Fworkflow-create` | Quick scaffolding for workflow classes | Adding workflow to existing project |\n| `\u002Fworkflow-debug` | Interactive debugging with error patterns | Troubleshooting workflow issues |\n| `\u002Fworkflow-test` | Test workflows locally and remotely | Validating workflow behavior |\n\n**Example Usage**:\n```\n\u002Fworkflow-setup   # Full guided setup wizard\n\u002Fworkflow-create  # Quick workflow scaffolding\n\u002Fworkflow-debug   # Debug workflow issues\n\u002Fworkflow-test    # Test workflow execution\n```\n\n---\n\n## Agents\n\nAutonomous agents for complex workflow tasks:\n\n| Agent | Description | Triggers |\n|-------|-------------|----------|\n| `workflow-debugger` | Auto-detects and fixes configuration\u002Fruntime errors | \"debug workflow\", \"fix workflow errors\" |\n| `workflow-optimizer` | Analyzes performance, cost, and reliability | \"optimize workflow\", \"improve performance\" |\n| `workflow-setup-assistant` | Autonomous project scaffolding | \"setup workflow\", \"create first workflow\" |\n\n**Key Capabilities**:\n- **Debugger**: 6-phase analysis, auto-fix for I\u002FO context, serialization, export issues\n- **Optimizer**: Cost analysis, reliability scoring, actionable recommendations\n- **Setup Assistant**: Project detection, automatic scaffolding, validation\n\n---\n\n## Scripts\n\nAutomation scripts in `scripts\u002F` directory:\n\n| Script | Purpose |\n|--------|---------|\n| `validate-workflow-config.sh` | Validate wrangler.jsonc configuration |\n| `test-workflow.sh` | Create and test workflow instances |\n| `benchmark-workflow.sh` | Measure performance and cost |\n| `generate-workflow.sh` | Scaffold new workflows from templates |\n| `check-workflow-limits.sh` | Validate against Cloudflare limits |\n\n**Usage**:\n```bash\n.\u002Fscripts\u002Fvalidate-workflow-config.sh           # Check config\n.\u002Fscripts\u002Ftest-workflow.sh my-workflow          # Test workflow\n.\u002Fscripts\u002Fbenchmark-workflow.sh my-workflow 10  # Benchmark 10 runs\n.\u002Fscripts\u002Fgenerate-workflow.sh MyWorkflow       # Generate scaffold\n.\u002Fscripts\u002Fcheck-workflow-limits.sh src\u002Fworkflows\u002Fmy-workflow.ts\n```\n\n---\n\n## Core Concepts\n\n### WorkflowEntrypoint\n\nEvery workflow must extend `WorkflowEntrypoint`:\n\n```typescript\nexport class MyWorkflow extends WorkflowEntrypoint\u003CEnv, Params> {\n  async run(event: WorkflowEvent\u003CParams>, step: WorkflowStep) {\n    \u002F\u002F Workflow logic here\n  }\n}\n```\n\n**Key Points**:\n- `Env`: Environment bindings (KV, D1, etc.)\n- `Params`: Typed payload passed when creating workflow instance\n- `event`: Contains `id`, `payload`, `timestamp`\n- `step`: Methods for durable execution\n\n### Step Methods\n\nAll workflow work MUST be done in steps for durability:\n\n```typescript\n\u002F\u002F step.do - Execute work with automatic retries\nawait step.do('step name', async () => {\n  return { result: 'data' };\n});\n\n\u002F\u002F step.sleep - Wait for duration\nawait step.sleep('wait', '1 hour');\n\n\u002F\u002F step.sleepUntil - Wait until timestamp\nawait step.sleepUntil('wait until', Date.now() + 3600000);\n\n\u002F\u002F step.waitForEvent - Wait for external event\nconst event = await step.waitForEvent('payment received', 'payment.completed', {\n  timeout: '30 minutes'\n});\n```\n\n**CRITICAL**: All I\u002FO (fetch, KV, D1, R2) must happen **inside** `step.do()` callbacks!\n\n**Reference**: See `references\u002Fworkflow-patterns.md` for all patterns\n\n---\n\n## Critical Rules\n\n### Always Do ✅\n\n✅ **Perform all I\u002FO inside step.do()** - Required for durability\n✅ **Use named steps** - Makes debugging easier\n✅ **Return JSON-serializable data from steps** - Required for state persistence\n✅ **Use step.sleep() for delays** - Don't use setTimeout()\n✅ **Handle errors explicitly** - Use try\u002Fcatch in step callbacks\n✅ **Use NonRetryableError for permanent failures** - Stops retries\n\n**Workflow Patterns**: See `references\u002Fworkflow-patterns.md` for:\n- Sequential workflows\n- Parallel execution\n- Event-driven workflows\n- Scheduled workflows\n- Human-in-the-loop workflows\n\n### Never Do ❌\n\n❌ **Never do I\u002FO outside step.do()** - Will fail with \"I\u002FO context\" error\n❌ **Never use setTimeout() or setInterval()** - Use step.sleep() instead\n❌ **Never return non-serializable data** - Functions, Promises, etc. will fail\n❌ **Never hardcode timeouts** - Use workflow config\n❌ **Never ignore NonRetryableError** - Indicates permanent failure\n\n---\n\n## Top 5 Critical Errors\n\n### Error #1: I\u002FO Context Error ⚠️\n\n**Error:**\n```\nCannot perform I\u002FO on behalf of a different request\n```\n\n**Cause:** Performing I\u002FO outside `step.do()` callback\n\n**Solution:**\n```typescript\n\u002F\u002F ❌ WRONG\nconst data = await fetch('https:\u002F\u002Fapi.example.com');\nawait step.do('use data', async () => {\n  return data; \u002F\u002F Error!\n});\n\n\u002F\u002F ✅ CORRECT\nconst data = await step.do('fetch data', async () => {\n  const response = await fetch('https:\u002F\u002Fapi.example.com');\n  return await response.json();\n});\n```\n\n### Error #2: Serialization Error\n\n**Error:**\n```\nCannot serialize workflow state\n```\n\n**Cause:** Returning non-JSON-serializable data from step\n\n**Solution:**\n```typescript\n\u002F\u002F ❌ WRONG\nawait step.do('process', async () => {\n  return { fn: () => {} }; \u002F\u002F Functions not serializable\n});\n\n\u002F\u002F ✅ CORRECT\nawait step.do('process', async () => {\n  return { result: 'data' }; \u002F\u002F JSON-serializable\n});\n```\n\n### Error #3: NonRetryableError Not Thrown\n\n**Error:** Workflow retries forever on permanent failures\n\n**Solution:**\n```typescript\nimport { NonRetryableError } from 'cloudflare:workers';\n\nawait step.do('validate', async () => {\n  if (!isValid) {\n    throw new NonRetryableError('Invalid input'); \u002F\u002F Stop retries\n  }\n  return { valid: true };\n});\n```\n\n### Error #4: WorkflowEvent Not Found\n\n**Error:**\n```\nWorkflowEvent 'payment.completed' not found\n```\n\n**Cause:** Event name mismatch between `waitForEvent` and trigger\n\n**Solution:**\n```typescript\n\u002F\u002F Workflow waits for event\nconst event = await step.waitForEvent('wait payment', 'payment.completed', {\n  timeout: '30 minutes'\n});\n\n\u002F\u002F Trigger event with EXACT same name\nawait instance.trigger('payment.completed', { amount: 100 });\n```\n\n### Error #5: Workflow Execution Failed\n\n**Error:**\n```\nWorkflow execution failed: Step timeout exceeded\n```\n\n**Cause:** Step exceeds maximum CPU time (30 seconds)\n\n**Solution:**\n```typescript\n\u002F\u002F ❌ WRONG\nawait step.do('long task', async () => {\n  for (let i = 0; i \u003C 1000000; i++) {\n    \u002F\u002F Long computation\n  }\n});\n\n\u002F\u002F ✅ CORRECT - Break into smaller steps\nfor (let i = 0; i \u003C 100; i++) {\n  await step.do(`batch ${i}`, async () => {\n    \u002F\u002F Process batch\n  });\n}\n```\n\n---\n\n**All Issues**: See `references\u002Fcommon-issues.md` for complete documentation\n\n---\n\n## Common Patterns\n\n### Sequential Workflow\n\nBasic workflow with steps executing in order. Each step completes before the next begins.\n\n**Use cases**: Order processing, user onboarding, data pipelines\n\n**Load `templates\u002Fbasic-workflow.ts` for complete example**\n\n### Scheduled Workflow\n\nWorkflow with time delays between steps using `step.sleep()` or `step.sleepUntil()`.\n\n**Use cases**: Reminder sequences, scheduled tasks, delayed notifications\n\n**Load `templates\u002Fscheduled-workflow.ts` for complete example**\n\n### Event-Driven Workflow\n\nWait for external events with `step.waitForEvent()`. Always set timeout and handle with `NonRetryableError`:\n\n```typescript\nconst payment = await step.waitForEvent('wait payment', 'payment.completed', {\n  timeout: '30 minutes'\n});\nif (!payment) throw new NonRetryableError('Payment timeout');\n```\n\n**Load `templates\u002Fworkflow-with-events.ts` for complete example**\n\n### Workflow with Retries\n\nUse `NonRetryableError` for permanent failures (404), regular `Error` for transient failures (5xx):\n\n```typescript\nconst data = await step.do('fetch', async () => {\n  const response = await fetch(url);\n  if (!response.ok) {\n    if (response.status === 404) throw new NonRetryableError('Not found');\n    throw new Error('Temporary failure'); \u002F\u002F Will retry\n  }\n  return await response.json();\n});\n```\n\n**Load `templates\u002Fworkflow-with-retries.ts` for complete example with retry configuration**\n\n---\n\n## Triggering Workflows\n\n**From Worker**: Create instances via `env.MY_WORKFLOW.create()`, get status with `instance.status()`, trigger events with `instance.trigger()`.\n\n**From Cron**: Use `scheduled()` handler to create workflow instances on schedule.\n\n**Load `templates\u002Fworker-trigger.ts` for complete Worker trigger example**\n**Load `templates\u002Fscheduled-workflow.ts` for complete Cron trigger example**\n\n---\n\n## When to Load References\n\n**`references\u002Fcommon-issues.md`**: Encountering I\u002FO context, serialization, NonRetryableError, event naming, or timeout errors; troubleshooting workflow failures.\n\n**`references\u002Fworkflow-patterns.md`**: Building complex orchestration, approval workflows, idempotency patterns, or circuit breaker patterns.\n\n**`references\u002Fwrangler-commands.md`**: Need CLI commands for managing workflow instances, debugging stuck workflows, or monitoring production.\n\n**`references\u002Fproduction-checklist.md`**: Preparing for deployment, need pre-deployment verification, setting up monitoring\u002Ferror handling.\n\n**`references\u002Flimits-quotas.md`**: Hitting instance\u002Fstep\u002Fpayload limits, optimizing for cost, designing high-volume workflows.\n\n**`references\u002F2025-features.md`**: Using events system, enhanced retries, instance lifecycle control, or latest Workflows features.\n\n**`references\u002Fmetrics-analytics.md`**: Setting up monitoring, custom metrics, external logging integration, or workflow dashboards.\n\n**`references\u002Ftroubleshooting.md`**: Complex debugging scenarios, stuck instances, systematic diagnosis, performance issues.\n\n**`templates\u002F`**: **basic-workflow.ts** (sequential), **scheduled-workflow.ts** (delays\u002Fsleep), **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)\n\n---\n\n## Wrangler Commands\n\n**Key Commands**: `wrangler workflows create`, `wrangler workflows instances list\u002Fdescribe\u002Fterminate`, `wrangler deploy`\n\n**Load `references\u002Fwrangler-commands.md` for complete CLI reference with all workflow management commands, monitoring workflows, and debugging stuck instances.**\n\n---\n\n## State Persistence\n\nWorkflows automatically persist state between steps. No manual state management needed:\n\n```typescript\nexport class StatefulWorkflow extends WorkflowEntrypoint {\n  async run(event, step) {\n    \u002F\u002F Step 1 result is automatically persisted\n    const result1 = await step.do('step 1', async () => {\n      return { data: 'value' };\n    });\n\n    \u002F\u002F Even if workflow crashes here, step 1 won't re-run\n    await step.sleep('wait', '1 hour');\n\n    \u002F\u002F Step 2 can use step 1's result (still available after sleep)\n    await step.do('step 2', async () => {\n      console.log(result1.data); \u002F\u002F 'value' - persisted!\n    });\n  }\n}\n```\n\n**Key Points**:\n- Step results automatically persisted\n- Completed steps never re-run (even after crash\u002Frestart)\n- State available throughout workflow lifetime\n\n---\n\n## Limits\n\n| Resource | Limit |\n|----------|-------|\n| **Step CPU Time** | 30 seconds |\n| **Workflow Duration** | 30 days |\n| **Step Payload Size** | 128 KB |\n| **Workflow Payload Size** | 128 KB |\n| **Steps per Workflow** | 1,000 |\n| **Concurrent Instances** | 1,000 per workflow |\n| **Event Payload Size** | 128 KB |\n\n**Workarounds**:\n- Large data: Store in KV\u002FR2, pass key in step\n- Long CPU: Break into smaller steps\n- Many steps: Consider sub-workflows\n\n## Pricing\n\n- **Duration**: $0.02 per million GB-s (same as Workers)\n- **Requests**: $0.15 per million (workflow creation + step execution)\n- **State Storage**: Included (no additional cost)\n- **Sleep**: Free (no CPU usage during sleep)\n\n**Example Cost** (1M workflow runs):\n- 5 steps each = 5M requests = $0.75\n- 10ms per step = 50GB-s = $0.001\n- **Total**: ~$0.75 per million workflows\n\n---\n\n## Troubleshooting\n\n### \"I\u002FO context\" error\n**Solution**: Move all I\u002FO into `step.do()` callbacks → See `references\u002Fcommon-issues.md` #1\n\n### \"Serialization error\"\n**Solution**: Return only JSON-serializable data from steps → See `references\u002Fcommon-issues.md` #2\n\n### Workflow retries forever\n**Solution**: Throw `NonRetryableError` for permanent failures → See `references\u002Fcommon-issues.md` #3\n\n### \"WorkflowEvent not found\"\n**Solution**: Ensure event names match exactly → See `references\u002Fcommon-issues.md` #4\n\n### \"Step timeout exceeded\"\n**Solution**: Break long computations into smaller steps → See `references\u002Fcommon-issues.md` #5\n\n---\n\n## Production Checklist\n\n**10-Point Pre-Deployment Checklist**: I\u002FO context isolation, JSON serialization, NonRetryableError usage, event name consistency, step duration limits, error handling, retry configuration, timeouts, workflow naming, and monitoring.\n\n**Load `references\u002Fproduction-checklist.md` for complete checklist with detailed explanations, code examples, verification steps, and deployment workflow.**\n\n---\n\n## Official Documentation\n\n**Workflows**: https:\u002F\u002Fdevelopers.cloudflare.com\u002Fworkflows\u002F • **API Reference**: https:\u002F\u002Fdevelopers.cloudflare.com\u002Fworkflows\u002Freference\u002F • **Examples**: https:\u002F\u002Fdevelopers.cloudflare.com\u002Fworkflows\u002Fexamples\u002F • **Blog**: https:\u002F\u002Fblog.cloudflare.com\u002Fcloudflare-workflows\u002F\n",{},"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Fsecondsky\u002Fclaude-skills\u002Fcloudflare-workflows",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":7,"skillName":5,"commands":36,"prompt":46,"zipAvailable":47},[37,40,43],{"tool":38,"command":39},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill cloudflare-workflows",{"tool":41,"command":42},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill cloudflare-workflows",{"tool":44,"command":45},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill cloudflare-workflows","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Fcloudflare-workflows\u002FSKILL.md",true,[49,55,59,63,67,71,75,79,83,89,93,97,101,105,109,113],{"path":50,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":53,"sourceHtmlUrl":54},"references\u002F2025-features.md","REFERENCE","参考文档",8096,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Fcloudflare-workflows\u002Freferences\u002F2025-features.md",{"path":56,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":57,"sourceHtmlUrl":58},"references\u002Fcommon-issues.md",10088,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Fcloudflare-workflows\u002Freferences\u002Fcommon-issues.md",{"path":60,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":61,"sourceHtmlUrl":62},"references\u002Flimits-quotas.md",8899,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Fcloudflare-workflows\u002Freferences\u002Flimits-quotas.md",{"path":64,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":65,"sourceHtmlUrl":66},"references\u002Fmetrics-analytics.md",11931,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Fcloudflare-workflows\u002Freferences\u002Fmetrics-analytics.md",{"path":68,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":69,"sourceHtmlUrl":70},"references\u002Fproduction-checklist.md",12048,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Fcloudflare-workflows\u002Freferences\u002Fproduction-checklist.md",{"path":72,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":73,"sourceHtmlUrl":74},"references\u002Ftroubleshooting.md",15492,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Fcloudflare-workflows\u002Freferences\u002Ftroubleshooting.md",{"path":76,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":77,"sourceHtmlUrl":78},"references\u002Fworkflow-patterns.md",15573,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Fcloudflare-workflows\u002Freferences\u002Fworkflow-patterns.md",{"path":80,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":81,"sourceHtmlUrl":82},"references\u002Fwrangler-commands.md",6805,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Fcloudflare-workflows\u002Freferences\u002Fwrangler-commands.md",{"path":84,"resourceType":85,"resourceTypeDesc":86,"sizeBytes":87,"sourceHtmlUrl":88},"templates\u002Fbasic-workflow.ts","SCRIPT","脚本",3484,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Fcloudflare-workflows\u002Ftemplates\u002Fbasic-workflow.ts",{"path":90,"resourceType":85,"resourceTypeDesc":86,"sizeBytes":91,"sourceHtmlUrl":92},"templates\u002Fcircuit-breaker-workflow.ts",12873,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Fcloudflare-workflows\u002Ftemplates\u002Fcircuit-breaker-workflow.ts",{"path":94,"resourceType":85,"resourceTypeDesc":86,"sizeBytes":95,"sourceHtmlUrl":96},"templates\u002Fparallel-execution-workflow.ts",8784,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Fcloudflare-workflows\u002Ftemplates\u002Fparallel-execution-workflow.ts",{"path":98,"resourceType":85,"resourceTypeDesc":86,"sizeBytes":99,"sourceHtmlUrl":100},"templates\u002Fscheduled-workflow.ts",7403,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Fcloudflare-workflows\u002Ftemplates\u002Fscheduled-workflow.ts",{"path":102,"resourceType":85,"resourceTypeDesc":86,"sizeBytes":103,"sourceHtmlUrl":104},"templates\u002Fworker-trigger.ts",6761,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Fcloudflare-workflows\u002Ftemplates\u002Fworker-trigger.ts",{"path":106,"resourceType":85,"resourceTypeDesc":86,"sizeBytes":107,"sourceHtmlUrl":108},"templates\u002Fworkflow-with-events.ts",9382,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Fcloudflare-workflows\u002Ftemplates\u002Fworkflow-with-events.ts",{"path":110,"resourceType":85,"resourceTypeDesc":86,"sizeBytes":111,"sourceHtmlUrl":112},"templates\u002Fworkflow-with-retries.ts",6355,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Fcloudflare-workflows\u002Ftemplates\u002Fworkflow-with-retries.ts",{"path":114,"resourceType":115,"resourceTypeDesc":116,"sizeBytes":117,"sourceHtmlUrl":118},"templates\u002Fwrangler-workflows-config.jsonc","OTHER","其他",3842,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Fcloudflare-workflows\u002Ftemplates\u002Fwrangler-workflows-config.jsonc",[120,134,144,153,159,166],{"skillNo":121,"name":122,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":123,"categories":124,"keywords":130,"publishedAt":21},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[125],{"categoryNo":126,"categoryName":127,"taxonomyType":128,"taxonomyTypeDesc":129},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[131,132,133],"model","model hierarchy","model hierarchy skill",{"skillNo":135,"name":136,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":137,"categories":138,"keywords":140,"publishedAt":21},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[139],{"categoryNo":126,"categoryName":127,"taxonomyType":128,"taxonomyTypeDesc":129},[141,142,143],"MCP","zoom","zoom mcp",{"skillNo":145,"name":146,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":147,"categories":148,"keywords":149,"publishedAt":21},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[150,151,152,142],"sdk","zoom apps sdk","apps",{"skillNo":154,"name":155,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":156,"categories":157,"keywords":158,"publishedAt":21},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[155],{"skillNo":160,"name":161,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":162,"categories":163,"keywords":165,"publishedAt":21},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[164],{"categoryNo":126,"categoryName":127,"taxonomyType":128,"taxonomyTypeDesc":129},[161],{"skillNo":167,"name":168,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":169,"categories":170,"keywords":171,"publishedAt":21},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[168]]