[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6KM5FM34ZSWECJR8HW6MHT3":3,"skill-same:01M6KM5FM34ZSWECJR8HW6MHT3":77},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":50,"commitSha":51,"skillDirectory":52,"forksCount":53,"repositoryHtmlUrl":54,"repositoryHomepageUrl":6,"ownerHtmlUrl":55,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":56,"install":57,"resources":70},"01M6KM5FM34ZSWECJR8HW6MHT3","create-workflow",null,"When the user needs to chain multiple jig recipes into a multi-step workflow with conditional execution and shared variables. Use when a pattern spans multiple files that need coordinated creation and modification, like scaffolding an entire endpoint or a full feature slice.","Tetra-Research\u002Fjig","Tetra-Research","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F146581685?v=4","01M6KM4EG0ZAWRDQPSJZ4T4CWN","Tetra Research","01M6KM4EMC95A68J3CRCKTDNZD",6,"MIT","https:\u002F\u002Fgithub.com\u002FTetra-Research\u002Fjig\u002Fblob\u002Fmain\u002Fbundles\u002Fskills\u002Fcreate-workflow\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"create","workflow","create workflow","conditional","Variables","with","multi","chain","feature slice","feature","creation","shared","scaffolding","files","use","edit","write","read","Bash","execution","2026-11-10 10:12:30",false,"---\nname: create-workflow\ndescription: When the user needs to chain multiple jig recipes into a multi-step workflow with conditional execution and shared variables. Use when a pattern spans multiple files that need coordinated creation and modification, like scaffolding an entire endpoint or a full feature slice.\nallowed-tools: Read Write Edit Glob Grep Bash\n---\n\n# Create a jig workflow\n\nA jig workflow chains multiple recipes into a sequential pipeline. Each step runs one recipe, optionally gated by a condition, with variables mapped from the workflow scope.\n\n## When to use this vs. a single recipe\n\n- **Single recipe**: pattern touches 1-2 files, all operations share the same variables\n- **Workflow**: pattern creates or modifies 3+ files in a coordinated way, steps have different variable needs, or some steps are conditional\n\n## Step 1: Decompose the pattern\n\nBreak the end-to-end pattern into discrete steps. Each step = one recipe.\n\nExample — scaffolding a new API endpoint:\n1. Create the request\u002Fresponse schema file\n2. Create the handler file\n3. Inject the import into the router index\n4. Inject the route registration\n\nEach step is independently valid — it can be run alone with `jig run`.\n\n## Step 2: Design workflow variables\n\nWorkflow variables are the **union** of everything all steps need, plus any workflow-level controls (like conditionals).\n\n```yaml\nvariables:\n  route_name:\n    type: string\n    required: true\n  route_path:\n    type: string\n    required: true\n  handler_name:\n    type: string\n    required: true\n  include_tests:\n    type: boolean\n    default: true\n```\n\nRules:\n- Don't duplicate what filters can derive. If every step needs `route_name` in snake_case, use `{{ route_name | snakecase }}` in templates — don't add a `route_name_snake` variable.\n- Compute ALL derived values up front in `--vars`. Steps cannot mutate variables for downstream steps.\n\n## Step 3: Write the workflow YAML\n\n```yaml\nname: create-endpoint\ndescription: Scaffold a complete API endpoint with schema, handler, and routing\n\nvariables:\n  route_name:\n    type: string\n    required: true\n  route_path:\n    type: string\n    required: true\n  handler_name:\n    type: string\n    required: true\n  include_tests:\n    type: boolean\n    default: true\n\nsteps:\n  - recipe: step1-schema\u002Frecipe.yaml\n\n  - recipe: step2-handler\u002Frecipe.yaml\n\n  - recipe: step3-import\u002Frecipe.yaml\n    vars_map:\n      route_name: route_module    # maps workflow's route_name → recipe's route_module\n\n  - recipe: step4-register\u002Frecipe.yaml\n\n  - recipe: step5-tests\u002Frecipe.yaml\n    when: \"{{ include_tests }}\"\n    on_error: continue\n```\n\nSee `${CLAUDE_SKILL_DIR}\u002Freferences\u002Fworkflow-schema.md` for the full schema.\n\n## Step 4: Organize files\n\n```\nmy-workflow\u002F\n  workflow.yaml\n  step1-schema\u002F\n    recipe.yaml\n    templates\u002F\n  step2-handler\u002F\n    recipe.yaml\n    templates\u002F\n  step3-import\u002F\n    recipe.yaml\n    templates\u002F\n  step4-register\u002F\n    recipe.yaml\n    templates\u002F\n  step5-tests\u002F\n    recipe.yaml\n    templates\u002F\n```\n\nEach step directory is a standalone recipe with its own `recipe.yaml` and `templates\u002F`.\n\n## Step 5: Validate\n\n```bash\n# Validate each step recipe independently\njig validate path\u002Fto\u002Fstep1-schema\u002Frecipe.yaml\njig validate path\u002Fto\u002Fstep2-handler\u002Frecipe.yaml\n\n# Dry-run the full workflow\njig workflow path\u002Fto\u002Fworkflow.yaml --vars '{\"...\":\"...\"}' --dry-run --verbose --json\n```\n\n## Gotchas\n\n- **Workflows pass the SAME variable dict to every step.** A step cannot compute or mutate a variable for downstream steps. Pre-compute everything.\n- **`vars_map` direction:** keys are the step recipe's variable names, values are the workflow variable names. `{recipe_var: workflow_var}`.\n- **`when` is a rendered Jinja expression.** Empty string, `\"false\"`, or `\"0\"` = skip. Everything else = run.\n- **`on_error: stop`** (default) halts the entire workflow on first failure. Use `continue` for optional steps, `report` to log and include errors in output.\n- **Step order matters for virtual file state.** If step 1 creates a file and step 2 injects into it, that works within a workflow. But each step is a full `jig run` with its own virtual file state — virtual files do NOT carry across steps. The file must be written to disk by step 1 before step 2 can read it.\n- **Each step recipe must independently declare its variables.** Workflow variables are passed through, but the recipe still validates its own `required:` and `type:` constraints.\n- **Don't make one big recipe when you mean a workflow.** If a recipe has 8+ operations touching 4+ different files, it should probably be a workflow with focused steps.\n","# Create a jig workflow\n\nA jig workflow chains multiple recipes into a sequential pipeline. Each step runs one recipe, optionally gated by a condition, with variables mapped from the workflow scope.\n\n## When to use this vs. a single recipe\n\n- **Single recipe**: pattern touches 1-2 files, all operations share the same variables\n- **Workflow**: pattern creates or modifies 3+ files in a coordinated way, steps have different variable needs, or some steps are conditional\n\n## Step 1: Decompose the pattern\n\nBreak the end-to-end pattern into discrete steps. Each step = one recipe.\n\nExample — scaffolding a new API endpoint:\n1. Create the request\u002Fresponse schema file\n2. Create the handler file\n3. Inject the import into the router index\n4. Inject the route registration\n\nEach step is independently valid — it can be run alone with `jig run`.\n\n## Step 2: Design workflow variables\n\nWorkflow variables are the **union** of everything all steps need, plus any workflow-level controls (like conditionals).\n\n```yaml\nvariables:\n  route_name:\n    type: string\n    required: true\n  route_path:\n    type: string\n    required: true\n  handler_name:\n    type: string\n    required: true\n  include_tests:\n    type: boolean\n    default: true\n```\n\nRules:\n- Don't duplicate what filters can derive. If every step needs `route_name` in snake_case, use `{{ route_name | snakecase }}` in templates — don't add a `route_name_snake` variable.\n- Compute ALL derived values up front in `--vars`. Steps cannot mutate variables for downstream steps.\n\n## Step 3: Write the workflow YAML\n\n```yaml\nname: create-endpoint\ndescription: Scaffold a complete API endpoint with schema, handler, and routing\n\nvariables:\n  route_name:\n    type: string\n    required: true\n  route_path:\n    type: string\n    required: true\n  handler_name:\n    type: string\n    required: true\n  include_tests:\n    type: boolean\n    default: true\n\nsteps:\n  - recipe: step1-schema\u002Frecipe.yaml\n\n  - recipe: step2-handler\u002Frecipe.yaml\n\n  - recipe: step3-import\u002Frecipe.yaml\n    vars_map:\n      route_name: route_module    # maps workflow's route_name → recipe's route_module\n\n  - recipe: step4-register\u002Frecipe.yaml\n\n  - recipe: step5-tests\u002Frecipe.yaml\n    when: \"{{ include_tests }}\"\n    on_error: continue\n```\n\nSee `${CLAUDE_SKILL_DIR}\u002Freferences\u002Fworkflow-schema.md` for the full schema.\n\n## Step 4: Organize files\n\n```\nmy-workflow\u002F\n  workflow.yaml\n  step1-schema\u002F\n    recipe.yaml\n    templates\u002F\n  step2-handler\u002F\n    recipe.yaml\n    templates\u002F\n  step3-import\u002F\n    recipe.yaml\n    templates\u002F\n  step4-register\u002F\n    recipe.yaml\n    templates\u002F\n  step5-tests\u002F\n    recipe.yaml\n    templates\u002F\n```\n\nEach step directory is a standalone recipe with its own `recipe.yaml` and `templates\u002F`.\n\n## Step 5: Validate\n\n```bash\n# Validate each step recipe independently\njig validate path\u002Fto\u002Fstep1-schema\u002Frecipe.yaml\njig validate path\u002Fto\u002Fstep2-handler\u002Frecipe.yaml\n\n# Dry-run the full workflow\njig workflow path\u002Fto\u002Fworkflow.yaml --vars '{\"...\":\"...\"}' --dry-run --verbose --json\n```\n\n## Gotchas\n\n- **Workflows pass the SAME variable dict to every step.** A step cannot compute or mutate a variable for downstream steps. Pre-compute everything.\n- **`vars_map` direction:** keys are the step recipe's variable names, values are the workflow variable names. `{recipe_var: workflow_var}`.\n- **`when` is a rendered Jinja expression.** Empty string, `\"false\"`, or `\"0\"` = skip. Everything else = run.\n- **`on_error: stop`** (default) halts the entire workflow on first failure. Use `continue` for optional steps, `report` to log and include errors in output.\n- **Step order matters for virtual file state.** If step 1 creates a file and step 2 injects into it, that works within a workflow. But each step is a full `jig run` with its own virtual file state — virtual files do NOT carry across steps. The file must be written to disk by step 1 before step 2 can read it.\n- **Each step recipe must independently declare its variables.** Workflow variables are passed through, but the recipe still validates its own `required:` and `type:` constraints.\n- **Don't make one big recipe when you mean a workflow.** If a recipe has 8+ operations touching 4+ different files, it should probably be a workflow with focused steps.\n",{"name":5,"description":7,"allowed-tools":49},"Read Write Edit Glob Grep Bash","main","ab37f4809db1129e69d61246bd7a5d3b21b7f79b","bundles\u002Fskills\u002Fcreate-workflow",0,"https:\u002F\u002Fgithub.com\u002FTetra-Research\u002Fjig","https:\u002F\u002Fgithub.com\u002FTetra-Research","2026-04-10 09:57:50",{"source":8,"skillName":5,"commands":58,"prompt":68,"zipAvailable":69},[59,62,65],{"tool":60,"command":61},"npx","npx skills add Tetra-Research\u002Fjig --skill create-workflow",{"tool":63,"command":64},"bunx","bunx skills add Tetra-Research\u002Fjig --skill create-workflow",{"tool":66,"command":67},"pnpm","pnpm dlx skills add Tetra-Research\u002Fjig --skill create-workflow","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FTetra-Research\u002Fjig\u002Fblob\u002Fmain\u002Fbundles\u002Fskills\u002Fcreate-workflow\u002FSKILL.md",true,[71],{"path":72,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":75,"sourceHtmlUrl":76},"references\u002Fworkflow-schema.md","REFERENCE","参考文档",4280,"https:\u002F\u002Fgithub.com\u002FTetra-Research\u002Fjig\u002Fblob\u002Fmain\u002Fbundles\u002Fskills\u002Fcreate-workflow\u002Freferences\u002Fworkflow-schema.md",[78,102,119,134,154,168],{"skillNo":79,"name":80,"nameZh":6,"description":81,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":82,"categories":83,"keywords":84,"publishedAt":44},"01M6KMDJNF2XFW5VKNHT5KGA7M","velocity","Systematic DX improvement hunt — find friction, inconsistency, and missing abstractions across PRs, code, or tickets, then feed findings into \u002Fimprove. Use when looking for ways to accelerate development or compound Claude Code's utility.","https:\u002F\u002Fgithub.com\u002FTetra-Research\u002Fjig\u002Fblob\u002Fmain\u002Fskills\u002Fvelocity\u002FSKILL.md",[],[80,85,86,87,88,89,90,91,92,93,94,95,96,97,38,98,42,99,100,101],"improvement","hunt","for","true","Accelerate","utility","ticket","missing","scope","id","module","across","dx","improve","code","development","component",{"skillNo":103,"name":104,"nameZh":6,"description":105,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":106,"categories":107,"keywords":109,"publishedAt":44},"01M6KMDF2VAYVDDQWM4A2HDZ5P","upgrade","Upgrade an existing skill or agent by auditing it, gathering user references, and rewriting it with real content. Use when a skill is thin, sloppy, missing gotchas, or needs improvement. Different from \u002Fimprove which creates new extensions.","https:\u002F\u002Fgithub.com\u002FTetra-Research\u002Fjig\u002Fblob\u002Fmain\u002Fskills\u002Fupgrade\u002FSKILL.md",[108],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[104,39,29,110,92,111,112,38,113,40,41,114,98,42,115,116,117,85,118],"it","existing skill","references","user","grep","content","which","Existing","extensions",{"skillNo":120,"name":98,"nameZh":6,"description":121,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":122,"categories":123,"keywords":125,"publishedAt":44},"01M6KMDABCDDRWHCPVGRJ7G3N1","Deliberately improve Claude Code by creating or updating skills, agents, hooks, rules, or MCP servers. Use when Claude keeps making the same mistake, a workflow is tedious, a new pattern needs enforcement, or you want to compound Claude's utility.","https:\u002F\u002Fgithub.com\u002FTetra-Research\u002Fjig\u002Fblob\u002Fmain\u002Fskills\u002Fimprove\u002FSKILL.md",[124],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[98,126,127,90,99,128,129,38,39,40,41,114,130,42,131,132,25,133],"pattern","you","enforcement","hooks","Rules","mcp servers","compound","MCP",{"skillNo":135,"name":136,"nameZh":6,"description":137,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":138,"categories":139,"keywords":140,"publishedAt":44},"01M6KMD6HSWSET1HRR5AHT9HFT","clean-copy","Recreate the current branch with a clean, narrative commit history. Use before creating a PR from a messy development branch, after exploratory coding with WIP commits, or when commit history is hard to review.","https:\u002F\u002Fgithub.com\u002FTetra-Research\u002Fjig\u002Fblob\u002Fmain\u002Fskills\u002Fclean-copy\u002FSKILL.md",[],[141,142,143,114,144,145,42,146,100,147,148,149,150,151,88,29,152,153,38,41],"clean","copy","clean copy","history","gh","commits","pr","commit","review","branch","branch-name","narrative","name",{"skillNo":155,"name":156,"nameZh":6,"description":157,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":158,"categories":159,"keywords":160,"publishedAt":44},"01M6KMD10AN05R0Q0PQPP8ZF16","audit","Audit installed skills and agents against best practices. Use when reviewing skill quality, checking for common problems, or before upgrading existing skills. Read-only — produces a report, changes nothing.","https:\u002F\u002Fgithub.com\u002FTetra-Research\u002Fjig\u002Fblob\u002Fmain\u002Fskills\u002Faudit\u002FSKILL.md",[],[156,161,117,87,162,163,38,41,114,164,165,166,167],"changes","read-only","only","common","quality","best practices","report",{"skillNo":169,"name":170,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":171,"categories":172,"keywords":173,"publishedAt":44},"01M6KMCX8WE6FFXZ9X50ESNHAF","typescript-update-model","https:\u002F\u002Fgithub.com\u002FTetra-Research\u002Fjig\u002Fblob\u002Fmain\u002Fexamples\u002Ftypescript-update-model\u002FSKILL.md",[],[174,175,176,177],"update","model","typescript update model","typescript"]