[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71HMA3EN70PC78T4WBJ8AHB":3,"skill-same:01M71HMA3EN70PC78T4WBJ8AHB":65},{"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":36,"linkOnly":37,"markdownContent":38,"markdownBody":39,"frontMatter":40,"refName":41,"commitSha":42,"skillDirectory":43,"forksCount":44,"repositoryHtmlUrl":45,"repositoryHomepageUrl":46,"ownerHtmlUrl":47,"ownerBlogUrl":48,"ownerDescription":49,"updatedAt":50,"install":51,"resources":64},"01M71HMA3EN70PC78T4WBJ8AHB","data-driven-workflows",null,"Grammar for for_each over an upstream runtime array and per-item when. Irrelevant to fixed task lists, parallel branches, waits, or ordinary DAGs.","Azure\u002Fazure-functions-agents-runtime","Azure","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F6844498?v=4","01M6BT15ZBDTV4D9RM7HCC4D8A","Microsoft Azure","01M71HKP14C8K8JTRH03DHX821",13,"MIT","https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-functions-agents-runtime\u002Fblob\u002Fmain\u002Fsrc\u002Fazure_functions_agents\u002Fworkflows\u002Fskills\u002Fdata-driven-workflows\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000033","数据分析师","PROFESSION","适用职业",[24,25,26,27,28,29,30,31,32,33,34,35],"data driven workflows","data","workflows","driven","parallel","for","runtime","grammar","upstream","branches","when","task","2026-11-10 10:12:30",false,"---\nname: data-driven-workflows\ndescription: Grammar for for_each over an upstream runtime array and per-item when. Irrelevant to fixed task lists, parallel branches, waits, or ordinary DAGs.\n---\n\n# Data-driven workflows\n\nUse this skill when a workflow plan must decide at runtime whether work should\nrun or must apply the same tool or Sub Agent task to a collection discovered by\nan earlier task.\n\n## Collection fan-out\n\n`for_each` is allowed on a `tool` or `sub_agent` task only, never `wait`. Its\nvalue must be one full reference to an upstream JSON array:\n\n```json\n{\n  \"id\": \"inspect\",\n  \"type\": \"tool\",\n  \"tool\": \"inspect_incident\",\n  \"depends_on\": [\"discover\"],\n  \"for_each\": \"${discover.result.items}\",\n  \"args\": {\n    \"incident\": \"${item}\",\n    \"source_index\": \"${index}\"\n  }\n}\n```\n\nInside that task's value fields (`args`, a Sub Agent's `task`, and `when.ref`),\nuse these iteration locals:\n\n- `${item}` for the whole element\n- `${item.path.to.field}` for a field within the element\n- `${index}` for its zero-based source position\n\nThe locals are valid only inside a `for_each` task. `item` and `index` are reserved task ids\nand must never be authored as task `id` values. Keep the target tool\u002Fagent name static; only\nvalue fields vary per item.\n\n## Runtime conditions\n\n`when` is a constrained predicate:\n\n```json\n{\n  \"ref\": \"${item.requires_action}\",\n  \"operator\": \"equals\",\n  \"value\": true\n}\n```\n\nThe exact shape is:\n\n```text\n{\"ref\": \"${...}\", \"operator\": \"equals\" | \"not_equals\", \"value\": \u003Cscalar>}\n```\n\n`ref` must be one full upstream reference or, during iteration, one full\niteration-local reference. `value` must be a JSON scalar: null, boolean, number,\nor string. Comparison uses exact typed equality only. There is no coercion,\ntruthiness, ordering, regex, boolean composition, or function call.\n\nThe condition is evaluated before executable `args` or `task` templates are\nresolved. A false condition schedules no Activity or timer and produces a null\nresult. A skip does not propagate: each downstream task that belongs to the\nconditional branch must declare its own `when`.\n\n## Fan-in and limits\n\nThe logical `for_each` task exposes one array of `{index, status, result}`\nenvelopes in source order. Skipped positions remain in the array with a null\nresult. Depend on the logical task id and consume the full aggregate with\n`${node_id.result}`; individual runtime instances cannot be referenced.\n\nUse collections that are already bounded. Filter or cap the array upstream so\nmaterialized items stay within workflow node limits and runnable instances stay\nwithin workflow parallelism limits.\n","# Data-driven workflows\n\nUse this skill when a workflow plan must decide at runtime whether work should\nrun or must apply the same tool or Sub Agent task to a collection discovered by\nan earlier task.\n\n## Collection fan-out\n\n`for_each` is allowed on a `tool` or `sub_agent` task only, never `wait`. Its\nvalue must be one full reference to an upstream JSON array:\n\n```json\n{\n  \"id\": \"inspect\",\n  \"type\": \"tool\",\n  \"tool\": \"inspect_incident\",\n  \"depends_on\": [\"discover\"],\n  \"for_each\": \"${discover.result.items}\",\n  \"args\": {\n    \"incident\": \"${item}\",\n    \"source_index\": \"${index}\"\n  }\n}\n```\n\nInside that task's value fields (`args`, a Sub Agent's `task`, and `when.ref`),\nuse these iteration locals:\n\n- `${item}` for the whole element\n- `${item.path.to.field}` for a field within the element\n- `${index}` for its zero-based source position\n\nThe locals are valid only inside a `for_each` task. `item` and `index` are reserved task ids\nand must never be authored as task `id` values. Keep the target tool\u002Fagent name static; only\nvalue fields vary per item.\n\n## Runtime conditions\n\n`when` is a constrained predicate:\n\n```json\n{\n  \"ref\": \"${item.requires_action}\",\n  \"operator\": \"equals\",\n  \"value\": true\n}\n```\n\nThe exact shape is:\n\n```text\n{\"ref\": \"${...}\", \"operator\": \"equals\" | \"not_equals\", \"value\": \u003Cscalar>}\n```\n\n`ref` must be one full upstream reference or, during iteration, one full\niteration-local reference. `value` must be a JSON scalar: null, boolean, number,\nor string. Comparison uses exact typed equality only. There is no coercion,\ntruthiness, ordering, regex, boolean composition, or function call.\n\nThe condition is evaluated before executable `args` or `task` templates are\nresolved. A false condition schedules no Activity or timer and produces a null\nresult. A skip does not propagate: each downstream task that belongs to the\nconditional branch must declare its own `when`.\n\n## Fan-in and limits\n\nThe logical `for_each` task exposes one array of `{index, status, result}`\nenvelopes in source order. Skipped positions remain in the array with a null\nresult. Depend on the logical task id and consume the full aggregate with\n`${node_id.result}`; individual runtime instances cannot be referenced.\n\nUse collections that are already bounded. Filter or cap the array upstream so\nmaterialized items stay within workflow node limits and runnable instances stay\nwithin workflow parallelism limits.\n",{"name":5,"description":7},"main","986e781f82b453d5aef9ad3602bbf24a6bda7298","src\u002Fazure_functions_agents\u002Fworkflows\u002Fskills\u002Fdata-driven-workflows",10,"https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-functions-agents-runtime","https:\u002F\u002Fazure.github.io\u002Fazure-functions-agents-runtime\u002F","https:\u002F\u002Fgithub.com\u002FAzure","https:\u002F\u002Fdocs.microsoft.com\u002Fen-us\u002Fazure\u002F","APIs, SDKs and open source projects from Microsoft Azure","2026-11-05 06:55:15",{"source":8,"skillName":5,"commands":52,"prompt":62,"zipAvailable":63},[53,56,59],{"tool":54,"command":55},"npx","npx skills add Azure\u002Fazure-functions-agents-runtime --skill data-driven-workflows",{"tool":57,"command":58},"bunx","bunx skills add Azure\u002Fazure-functions-agents-runtime --skill data-driven-workflows",{"tool":60,"command":61},"pnpm","pnpm dlx skills add Azure\u002Fazure-functions-agents-runtime --skill data-driven-workflows","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-functions-agents-runtime\u002Fblob\u002Fmain\u002Fsrc\u002Fazure_functions_agents\u002Fworkflows\u002Fskills\u002Fdata-driven-workflows\u002FSKILL.md",true,[],[66,76,84,94,106,114],{"skillNo":67,"name":68,"nameZh":6,"description":69,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":70,"categories":71,"keywords":72,"publishedAt":36},"01M71HMTNMPVDJR8JQW7VM4VD5","child","Nested document belonging to parent.","https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-functions-agents-runtime\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fconfig_scenarios\u002F21_skill_root_boundaries\u002Fskills\u002Fparent\u002Fchild\u002FSKILL.md",[],[68,73,74,75],"nested","parent","document",{"skillNo":77,"name":74,"nameZh":6,"description":78,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":79,"categories":80,"keywords":81,"publishedAt":36},"01M71HMRYWE1TEC1GTCP0MTJXV","Parent skill with nested resources.","https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-functions-agents-runtime\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fconfig_scenarios\u002F21_skill_root_boundaries\u002Fskills\u002Fparent\u002FSKILL.md",[],[74,82,73,83],"resources","with",{"skillNo":85,"name":86,"nameZh":6,"description":87,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":88,"categories":89,"keywords":90,"publishedAt":36},"01M71HMQ2YCF8868YQ37JVTY61","grouped","Skill at the permitted second directory level.","https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-functions-agents-runtime\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fconfig_scenarios\u002F21_skill_root_boundaries\u002Fskills\u002Fgroup\u002Fgrouped\u002FSKILL.md",[],[86,91,92,93],"at","directory","second",{"skillNo":95,"name":96,"nameZh":6,"description":97,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":98,"categories":99,"keywords":100,"publishedAt":36},"01M71HMN26QD2FYGHYZACP2HAT","too-deep","Skill beyond the shared search depth.","https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-functions-agents-runtime\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fconfig_scenarios\u002F21_skill_root_boundaries\u002Fskills\u002Fgroup\u002Fdeep\u002Fleaf\u002FSKILL.md",[],[101,102,103,104,105],"deep","too deep","depth","search","shared",{"skillNo":107,"name":108,"nameZh":6,"description":109,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":110,"categories":111,"keywords":112,"publishedAt":36},"01M71HMKTR22N746PD31NRRHFY","excluded","Independently discovered but excluded skill.","https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-functions-agents-runtime\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fconfig_scenarios\u002F21_skill_root_boundaries\u002Fskills\u002Fexcluded\u002FSKILL.md",[],[108,113],"but",{"skillNo":115,"name":116,"nameZh":6,"description":117,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":118,"categories":119,"keywords":120,"publishedAt":36},"01M71HMJ5R8CS85MD36AFWT5KS","guide-child","Nested child skill guidance.","https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-functions-agents-runtime\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fconfig_scenarios\u002F20_scoped_skills\u002Fskills\u002Fguide-parent\u002Fguide-child\u002FSKILL.md",[],[68,121,122,123,124,125,73,126],"guide child","guide","nested child skill","nested child","child skill","guidance"]