[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6FJJDJSQXNXF2WVWVQWM48T":3,"skill-same:01M6FJJDJSQXNXF2WVWVQWM48T":52},{"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":22,"publishedAt":25,"linkOnly":26,"markdownContent":27,"markdownBody":27,"frontMatter":28,"refName":29,"commitSha":30,"skillDirectory":31,"forksCount":32,"repositoryHtmlUrl":33,"repositoryHomepageUrl":34,"ownerHtmlUrl":35,"ownerBlogUrl":6,"ownerDescription":36,"updatedAt":37,"install":38,"resources":51},"01M6FJJDJSQXNXF2WVWVQWM48T","designing-workflow-skills",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\u002Ftrailofbits\u002Fskills\u002Fdesigning-workflow-skills\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[23,24],"workflow","designing workflow skills","2026-11-10 10:12:30",false,"# Designing Workflow Skills\n\nBuild workflow-based skills that execute reliably by following structural patterns, not prose.\n\n## Essential Principles\n\n\u003Cessential_principles>\n\n\u003Cprinciple name=\"description-is-the-trigger\">\n**The `description` field is the only thing that controls when a skill activates.**\n\nClaude decides whether to load a skill based solely on its frontmatter `description`. The body of SKILL.md — including \"When to Use\" and \"When NOT to Use\" sections — is only read AFTER the skill is already active. Put your trigger keywords, use cases, and exclusions in the description. A bad description means wrong activations or missed activations regardless of what the body says.\n\n\"When to Use\" and \"When NOT to Use\" sections still serve a purpose: they scope the LLM's behavior once active. \"When NOT to Use\" should name specific alternatives: \"use Semgrep for simple pattern matching\" not \"not for simple tasks.\"\n\u003C\u002Fprinciple>\n\n\u003Cprinciple name=\"numbered-phases\">\n**Phases must be numbered with entry and exit criteria.**\n\nUnnumbered prose instructions produce unreliable execution order. Every phase needs:\n- A number (Phase 1, Phase 2, ...)\n- Entry criteria (what must be true before starting)\n- Numbered actions (what to do)\n- Exit criteria (how to know it's done)\n\u003C\u002Fprinciple>\n\n\u003Cprinciple name=\"tools-match-executor\">\n**Tools must match the executor.**\n\nSkills use `allowed-tools:` in frontmatter. Agents use `tools:` in frontmatter. Subagents get tools from their `subagent_type`. Never list tools the component doesn't use. Never use Bash for operations that have dedicated tools (Glob, Grep, Read, Write, Edit).\n\nMost skills and agents should include `TodoRead` and `TodoWrite` in their tool list — these enable progress tracking during multi-step execution and are useful even for skills that don't explicitly manage tasks.\n\u003C\u002Fprinciple>\n\n\u003Cprinciple name=\"progressive-disclosure\">\n**Progressive disclosure is structural, not optional.**\n\nSKILL.md stays under 500 lines. It contains only what the LLM needs for every invocation: principles, routing, quick references, and links. Detailed patterns go in `references\u002F`. Step-by-step processes go in `workflows\u002F`. One level deep — no reference chains.\n\u003C\u002Fprinciple>\n\n\u003Cprinciple name=\"scalable-tool-patterns\">\n**Instructions must produce tool-calling patterns that scale.**\n\nEvery workflow instruction becomes tool calls at runtime. If a workflow searches N files for M patterns, combine into one regex — not N×M calls. If a workflow spawns subagents per item, use batching — not one subagent per file. Apply the 10,000-file test: mentally run the workflow against a large repo and check that tool call count stays bounded. See [anti-patterns.md](references\u002Fanti-patterns.md) AP-18 and AP-19.\n\u003C\u002Fprinciple>\n\n\u003Cprinciple name=\"degrees-of-freedom\">\n**Match instruction specificity to task fragility.**\n\nNot every step needs the same level of prescription. Calibrate per step:\n- **Low freedom** (exact commands, no variation): Fragile operations — database migrations, crypto, destructive actions. \"Run exactly this script.\"\n- **Medium freedom** (pseudocode with parameters): Preferred patterns where variation is acceptable. \"Use this template and customize as needed.\"\n- **High freedom** (heuristics and judgment): Variable tasks — code review, exploration, documentation. \"Analyze the structure and suggest improvements.\"\n\nA skill can mix freedom levels. A security audit skill might use high freedom for the discovery phase (\"explore the codebase for auth patterns\") and low freedom for the reporting phase (\"use exactly this severity classification table\").\n\u003C\u002Fprinciple>\n\n\u003C\u002Fessential_principles>\n\n## When to Use\n\n- Designing a new skill with multi-step workflows or phased execution\n- Creating a skill that routes between multiple independent tasks\n- Building a skill with safety gates (destructive actions requiring confirmation)\n- Structuring a skill that uses subagents or task tracking\n- Reviewing or refactoring an existing workflow skill for quality\n- Deciding how to split content between SKILL.md, references\u002F, and workflows\u002F\n\n## When NOT to Use\n\n- Simple single-purpose skills with no workflow (just guidance) — write the SKILL.md directly\n- Writing the actual domain content of a skill (this teaches structure, not domain expertise)\n- Plugin configuration (plugin.json, hooks, commands) — use plugin development guides\n- Non-skill Claude Code development — this is specifically for skill architecture\n\n## Pattern Selection\n\nChoose the right pattern for your skill's structure. Read the full pattern description in [workflow-patterns.md](references\u002Fworkflow-patterns.md).\n\n```\nHow many distinct paths does the skill have?\n|\n+-- One path, always the same\n|   +-- Does it perform destructive actions?\n|       +-- YES -> Safety Gate Pattern\n|       +-- NO  -> Linear Progression Pattern\n|\n+-- Multiple independent paths from shared setup\n|   +-- Routing Pattern\n|\n+-- Multiple dependent steps in sequence\n    +-- Do steps have complex dependencies?\n        +-- YES -> Task-Driven Pattern\n        +-- NO  -> Sequential Pipeline Pattern\n```\n\n### Pattern Summary\n\n| Pattern | Use When | Key Feature |\n|---------|----------|-------------|\n| **Routing** | Multiple independent tasks from shared intake | Routing table maps intent to workflow files |\n| **Sequential Pipeline** | Dependent steps, each feeding the next | Auto-detection may resume from partial progress |\n| **Linear Progression** | Single path, same every time | Numbered phases with entry\u002Fexit criteria |\n| **Safety Gate** | Destructive\u002Firreversible actions | Two confirmation gates before execution |\n| **Task-Driven** | Complex dependencies, partial failure tolerance | TaskCreate\u002FTaskUpdate with dependency tracking |\n\n## Structural Anatomy\n\nEvery workflow skill needs this skeleton, regardless of pattern:\n\n```markdown\n---\nname: kebab-case-name\ndescription: \"Third-person description with trigger keywords — this is how Claude decides to activate the skill\"\nallowed-tools:\n  - [minimum tools needed]\n# Optional fields — see tool-assignment-guide.md for full reference:\n# disable-model-invocation: true    # Only user can invoke (not Claude)\n# user-invocable: false             # Only Claude can invoke (hidden from \u002F menu)\n# context: fork                     # Run in isolated subagent context\n# agent: Explore                    # Subagent type (requires context: fork)\n# model: [model-name]               # Switch model when skill is active\n# argument-hint: \"[filename]\"       # Hint shown during autocomplete\n---\n\n# Title\n\n## Essential Principles\n[3-5 non-negotiable rules with WHY explanations]\n\n## When to Use\n[4-6 specific scenarios — scopes behavior after activation]\n\n## When NOT to Use\n[3-5 scenarios with named alternatives — scopes behavior after activation]\n\n## [Pattern-Specific Section]\n[Routing table \u002F Pipeline steps \u002F Phase list \u002F Gates]\n\n## Quick Reference\n[Compact tables for frequently-needed info]\n\n## Reference Index\n[Links to all supporting files]\n\n## Success Criteria\n[Checklist for output validation]\n```\n\nSkills support three types of string substitutions: dollar-prefixed variables for arguments and session ID, and exclamation-backtick syntax for shell preprocessing. The skill loader processes these before Claude sees the file — even inside code fences — so never use the raw syntax in documentation text. See [tool-assignment-guide.md](references\u002Ftool-assignment-guide.md) for the full variable reference and usage guidance.\n\n## Anti-Pattern Quick Reference\n\nThe most common mistakes. Full catalog with before\u002Fafter fixes in [anti-patterns.md](references\u002Fanti-patterns.md).\n\n| AP | Anti-Pattern | One-Line Fix |\n|----|-------------|-------------|\n| AP-1 | Missing goals\u002Fanti-goals | Add When to Use AND When NOT to Use sections |\n| AP-2 | Monolithic SKILL.md (>500 lines) | Split into references\u002F and workflows\u002F |\n| AP-3 | Reference chains (A -> B -> C) | All files one hop from SKILL.md |\n| AP-4 | Hardcoded paths | Use `{baseDir}` for all internal paths |\n| AP-5 | Broken file references | Verify every path resolves before submitting |\n| AP-6 | Unnumbered phases | Number every phase with entry\u002Fexit criteria |\n| AP-7 | Missing exit criteria | Define what \"done\" means for every phase |\n| AP-8 | No verification step | Add validation at the end of every workflow |\n| AP-9 | Vague routing keywords | Use distinctive keywords per workflow route |\n| AP-11 | Wrong tool for the job | Use Glob\u002FGrep\u002FRead, not Bash equivalents |\n| AP-12 | Overprivileged tools | Remove tools not actually used |\n| AP-13 | Vague subagent prompts | Specify what to analyze, look for, and return |\n| AP-15 | Reference dumps | Teach judgment, not raw documentation |\n| AP-16 | Missing rationalizations | Add \"Rationalizations to Reject\" for audit skills |\n| AP-17 | No concrete examples | Show input -> output for key instructions |\n| AP-18 | Cartesian product tool calls | Combine patterns into single regex, grep once, then filter |\n| AP-19 | Unbounded subagent spawning | Batch items into groups, one subagent per batch |\n| AP-20 | Description summarizes workflow | Description = triggering conditions only, never workflow steps |\n\n*AP-10 (No Default\u002FFallback Route), AP-14 (Missing Tool Justification in Agents), and AP-20 (Description Summarizes Workflow) are in the [full catalog](references\u002Fanti-patterns.md). AP-20 is included in the quick reference above due to its high impact.*\n\n## Tool Assignment Quick Reference\n\nMap your component type to the right tool set. Full guide in [tool-assignment-guide.md](references\u002Ftool-assignment-guide.md).\n\n| Component Type | Typical Tools |\n|---------------|---------------|\n| Read-only analysis skill | Read, Glob, Grep, TodoRead, TodoWrite |\n| Interactive analysis skill | Read, Glob, Grep, AskUserQuestion, TodoRead, TodoWrite |\n| Code generation skill | Read, Glob, Grep, Write, Bash, TodoRead, TodoWrite |\n| Pipeline skill | Read, Write, Glob, Grep, Bash, AskUserQuestion, Task, TaskCreate, TaskList, TaskUpdate, TodoRead, TodoWrite |\n| Read-only agent | Read, Grep, Glob, TodoRead, TodoWrite |\n| Action agent | Read, Grep, Glob, Write, Bash, TodoRead, TodoWrite |\n\n**Key rules:**\n- Use Glob (not `find`), Grep (not `grep`), Read (not `cat`) — always prefer dedicated tools\n- Skills use `allowed-tools:` — agents use `tools:`\n- List only tools that instructions actually reference\n- Read-only components should never have Write or Bash\n\n## Rationalizations to Reject\n\nWhen designing workflow skills, reject these shortcuts:\n\n| Rationalization | Why It's Wrong |\n|-----------------|----------------|\n| \"It's obvious which phase comes next\" | LLMs don't infer ordering from prose. Number the phases. |\n| \"Exit criteria are implied\" | Implied criteria are skipped criteria. Write them explicitly. |\n| \"One big SKILL.md is simpler\" | Simpler to write, worse to execute. The LLM loses focus past 500 lines. |\n| \"The description doesn't matter much\" | The description is how the skill gets triggered. A bad description means wrong activations or missed activations. |\n| \"Bash can do everything\" | Bash file operations are fragile. Dedicated tools handle encoding, permissions, and formatting better. |\n| \"The LLM will figure out the tools\" | It will guess wrong. Specify exactly which tool for each operation. |\n| \"I'll add details later\" | Incomplete skills ship incomplete. Design fully before writing. |\n\n## Reference Index\n\n| File | Content |\n|------|---------|\n| [workflow-patterns.md](references\u002Fworkflow-patterns.md) | 5 patterns with structural skeletons and examples |\n| [anti-patterns.md](references\u002Fanti-patterns.md) | 20 anti-patterns with before\u002Fafter fixes |\n| [tool-assignment-guide.md](references\u002Ftool-assignment-guide.md) | Tool selection matrix, component comparison, subagent guidance |\n| [progressive-disclosure-guide.md](references\u002Fprogressive-disclosure-guide.md) | Content splitting rules, the 500-line rule, sizing guidelines |\n\n| Workflow | Purpose |\n|----------|---------|\n| [design-a-workflow-skill.md](workflows\u002Fdesign-a-workflow-skill.md) | 6-phase creation process from scope to self-review |\n| [review-checklist.md](workflows\u002Freview-checklist.md) | Structured self-review checklist for submission readiness |\n\n## Success Criteria\n\nA well-designed workflow skill:\n\n- [ ] Has When to Use AND When NOT to Use sections\n- [ ] Uses a recognizable pattern (routing, pipeline, linear, safety gate, or task-driven)\n- [ ] Numbers all phases with entry and exit criteria\n- [ ] Lists only the tools it actually uses (least privilege)\n- [ ] Keeps SKILL.md under 500 lines with details in references\u002Fworkflows\n- [ ] Has no hardcoded paths (uses `{baseDir}`)\n- [ ] Has no broken file references\n- [ ] Has no reference chains (all links one hop from SKILL.md)\n- [ ] Includes a verification step at the end of the workflow\n- [ ] Has a description that triggers correctly (third-person, specific keywords)\n- [ ] Includes concrete examples for key instructions\n- [ ] Explains WHY, not just WHAT, for essential principles\n",{},"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Ftrailofbits\u002Fskills\u002Fdesigning-workflow-skills",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":39,"prompt":49,"zipAvailable":50},[40,43,46],{"tool":41,"command":42},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill designing-workflow-skills",{"tool":44,"command":45},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill designing-workflow-skills",{"tool":47,"command":48},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill designing-workflow-skills","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Ftrailofbits\u002Fskills\u002Fdesigning-workflow-skills\u002FSKILL.md",true,[],[53,63,73,82,88,95],{"skillNo":54,"name":55,"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":56,"categories":57,"keywords":59,"publishedAt":25},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[58],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},[60,61,62],"model","model hierarchy","model hierarchy skill",{"skillNo":64,"name":65,"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":66,"categories":67,"keywords":69,"publishedAt":25},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[68],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},[70,71,72],"MCP","zoom","zoom mcp",{"skillNo":74,"name":75,"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":76,"categories":77,"keywords":78,"publishedAt":25},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[79,80,81,71],"sdk","zoom apps sdk","apps",{"skillNo":83,"name":84,"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":85,"categories":86,"keywords":87,"publishedAt":25},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[84],{"skillNo":89,"name":90,"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":91,"categories":92,"keywords":94,"publishedAt":25},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[93],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},[90],{"skillNo":96,"name":97,"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":98,"categories":99,"keywords":100,"publishedAt":25},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[97]]