[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6DZ32SNRG4AMPMTWAB5V05T":3,"skill-same:01M6DZ32SNRG4AMPMTWAB5V05T":90},{"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":26,"publishedAt":51,"linkOnly":52,"markdownContent":53,"markdownBody":54,"frontMatter":55,"refName":56,"commitSha":57,"skillDirectory":58,"forksCount":59,"repositoryHtmlUrl":60,"repositoryHomepageUrl":61,"ownerHtmlUrl":62,"ownerBlogUrl":63,"ownerDescription":64,"updatedAt":65,"install":66,"resources":79},"01M6DZ32SNRG4AMPMTWAB5V05T","authoring-github-workflows",null,"Author and review GitHub Actions workflow YAML safely so syntactically-valid YAML can't ship a workflow that GitHub Actions refuses to run. USE FOR: editing, adding, or reviewing any file under .github\u002Fworkflows\u002F, writing run-name\u002Fname\u002Fif\u002Fenv\u002Frun values that contain ${{ }} expressions, diagnosing a run that fails with 'This run likely failed because of a workflow file issue' and no jobs starting, deciding when a workflow scalar must be quoted, validating workflows with actionlint. DO NOT USE FOR: authoring application YAML unrelated to GitHub Actions, Azure Pipelines, GitLab CI, or non-workflow YAML. SCOPE: this skill covers *syntactic\u002Fstructural* correctness of workflow YAML (quoting, parsing, actionlint); for *semantic and functional* workflow design (what a workflow should do, agentic-workflow behavior), see .github\u002Fagents\u002Fagentic-workflows.agent.md — the two are complementary. INVOKES: actionlint (downloaded pinned binary) plus git\u002Fgrep for inspection.","managedcode\u002Fdotnet-skills","managedcode","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F78253589?v=4","01M6DYDJR3EG8KB5G4PC65XCTT","Managed Code","01M6DYDJX0ZT432N04NYJW89DN",514,"MIT","https:\u002F\u002Fgithub.com\u002Fmanagedcode\u002Fdotnet-skills\u002Fblob\u002Fmain\u002Fcatalog\u002FTools\u002FOfficial-DotNet-Authoring-Github-Workflows\u002Fskills\u002Fauthoring-github-workflows\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000011","运维与部署","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50],"github","authoring github workflows","workflows","authoring","github workflows","github actions","inspection","when","quoted","github actions workflow","scope","structural","unrelated","actionlint","design","ci","actions","gitlab","azure pipelines","workflow","valid","agentic","review","writing","2026-11-10 10:12:30",false,"---\nname: authoring-github-workflows\ndescription: \"Author and review GitHub Actions workflow YAML safely so syntactically-valid YAML can't ship a workflow that GitHub Actions refuses to run. USE FOR: editing, adding, or reviewing any file under .github\u002Fworkflows\u002F, writing run-name\u002Fname\u002Fif\u002Fenv\u002Frun values that contain ${{ }} expressions, diagnosing a run that fails with 'This run likely failed because of a workflow file issue' and no jobs starting, deciding when a workflow scalar must be quoted, validating workflows with actionlint. DO NOT USE FOR: authoring application YAML unrelated to GitHub Actions, Azure Pipelines, GitLab CI, or non-workflow YAML. SCOPE: this skill covers *syntactic\u002Fstructural* correctness of workflow YAML (quoting, parsing, actionlint); for *semantic and functional* workflow design (what a workflow should do, agentic-workflow behavior), see .github\u002Fagents\u002Fagentic-workflows.agent.md — the two are complementary. INVOKES: actionlint (downloaded pinned binary) plus git\u002Fgrep for inspection.\"\nlicense: MIT\n---\n\n# Authoring GitHub Actions Workflows Safely\n\nGitHub Actions workflow files are YAML, but **valid YAML is not the same as a valid workflow**. A workflow can parse cleanly with `yaml.safe_load` (or a casual review) yet still be rejected by GitHub Actions at load time — producing the opaque failure *\"This run likely failed because of a workflow file issue\"* with **zero jobs started**. This skill teaches the YAML-vs-Actions traps (the `#`-as-comment trap above all), how to quote expression scalars correctly, and how to validate with `actionlint` before merge.\n\n> **Scope: syntactic vs. semantic.** This skill is about the *syntactic and structural* correctness of workflow YAML — quoting, parsing, and `actionlint`-level validity that determines whether GitHub Actions will load and run a file at all. It is **not** about *what* a workflow should do or how an agentic workflow should behave. For *semantic and functional* guidance (designing workflow logic, agentic-workflow patterns, gh-aw authoring), use [`.github\u002Fagents\u002Fagentic-workflows.agent.md`](..\u002F..\u002F..\u002F.github\u002Fagents\u002Fagentic-workflows.agent.md). The two are complementary: get the behavior right with the agent, get the YAML right with this skill.\n\n## When to Use\n\n- Editing, adding, or reviewing any file under `.github\u002Fworkflows\u002F`.\n- Writing a `run-name`, `name`, `if`, `env`, `with`, or `run` value that embeds a `${{ }}` expression.\n- A workflow run failed with *\"This run likely failed because of a workflow file issue\"* and **no jobs ran**.\n- Eval\u002FCI on `main` suddenly breaks for every run after a workflow edit merged, even though the change \"looked fine.\"\n- Deciding whether a YAML scalar needs quoting.\n\n## When Not to Use\n\n- Authoring non-Actions YAML (app config, Kubernetes, Compose, Azure Pipelines, GitLab CI).\n- Pure shell\u002Fscript logic inside an already-valid `run:` block (that is a scripting task, not a workflow-syntax task).\n\n## The #1 Trap: `#` inside an unquoted expression becomes a YAML comment\n\nIn YAML, a space followed by `#` starts a **comment**. In an unquoted (plain) scalar, everything from that space-then-`#` to end-of-line is silently discarded:\n\n```yaml\n# BAD — the run-name is silently truncated at \" #\"\nrun-name: ${{ inputs.pr_number != '' && format('Evaluate PR #{0} @ {1}', inputs.pr_number, inputs.head_sha) || '' }}\n```\n\nYAML parses this as `run-name: ${{ inputs.pr_number != '' && format('Evaluate PR` — an **unterminated `${{` expression**. `yaml.safe_load` succeeds (it just sees a truncated string with a trailing comment), so the bug passes naive validation, but GitHub Actions rejects the malformed expression and refuses to start any run.\n\n```yaml\n# GOOD — wrap the whole value in double quotes so '#' stays inside the scalar\nrun-name: \"${{ inputs.pr_number != '' && format('Evaluate PR #{0} @ {1}', inputs.pr_number, inputs.head_sha) || '' }}\"\n```\n\nThe inner expression already uses single quotes, so double-quoting the scalar is safe. This is exactly the bug that broke `dotnet\u002Fskills` evaluation on `main` (PR #746 → fixed by quoting).\n\n## Other characters that force quoting in a plain scalar\n\n| Character \u002F pattern | Why it breaks | Fix |\n|---------------------|---------------|-----|\n| space then `#` (space-hash) | Starts a YAML comment; truncates the value | Quote the whole value |\n| Leading `*`, `&`, `!`, `?`, `\\|`, `>`, `@`, `` ` `` | YAML anchors\u002Faliases\u002Ftags\u002Fblock scalars | Quote the value |\n| Leading `{` or `[` | Parsed as flow mapping\u002Fsequence (a bare `${{ }}` starts with `$`, which is safe, but `{{` after a leading char is risky) | Quote the value |\n| `:` then space (colon-space) inside the value | Parsed as a nested mapping key | Quote the value |\n| Leading\u002Ftrailing spaces that matter | Plain scalars strip them | Quote the value |\n| Values that are `true`\u002F`false`\u002F`yes`\u002F`no`\u002F`on`\u002F`off`\u002Fnumbers but must stay strings | YAML type coercion | Quote the value |\n\n**Rule of thumb:** if a `name`, `run-name`, `if`, `env`, or `with` value contains a `${{ }}` expression *and* any literal `#`, `:`, or leading special character, **wrap the entire scalar in double quotes**.\n\n## Workflow\n\n### Step 1: Identify the changed\u002Fauthored workflow files\n\n```bash\ngit diff --name-only origin\u002Fmain... -- .github\u002Fworkflows\u002F\n```\n\nFor each file, scan every line that contains `${{` together with a `#`, a colon-space, or a leading special character.\n\n### Step 2: Quote risky expression scalars\n\nWrap the full value in double quotes when the value embeds an expression and contains a `#` or other special character (see the table above). Prefer double quotes when the inner expression uses single quotes, and vice-versa. Do **not** escape the `${{ }}` braces — quoting the scalar is enough.\n\n### Step 3: Validate with actionlint (authoritative)\n\n`actionlint` understands the GitHub Actions schema *and* the expression grammar, so it catches exactly this class of bug that plain YAML linters miss. Download a pinned release and run it:\n\n```bash\nACTIONLINT_VERSION=1.7.7\nACTIONLINT_SHA256=023070a287cd8cccd71515fedc843f1985bf96c436b7effaecce67290e7e0757\ncurl -fsSLo actionlint.tar.gz \\\n  \"https:\u002F\u002Fgithub.com\u002Frhysd\u002Factionlint\u002Freleases\u002Fdownload\u002Fv${ACTIONLINT_VERSION}\u002Factionlint_${ACTIONLINT_VERSION}_linux_amd64.tar.gz\"\n# Verify the download against the pinned checksum before extracting\u002Fexecuting it:\necho \"${ACTIONLINT_SHA256}  actionlint.tar.gz\" | sha256sum -c -\ntar -xzf actionlint.tar.gz actionlint\n# Focus on workflow\u002Fexpression correctness; silence shell\u002Fpy style noise:\n.\u002Factionlint -shellcheck= -pyflakes= -color .github\u002Fworkflows\u002F*.yml\n```\n\nOn Windows PowerShell, use the `actionlint_\u003Cver>_windows_amd64.zip` asset and `Expand-Archive`.\n\nThe truncated-expression bug surfaces as:\n\n```\ngot unexpected EOF while lexing end of string literal, expecting ''' [expression]\n```\n\nA clean exit code `0` means the workflows are structurally valid.\n\n### Step 4: Confirm a YAML-only check is not enough\n\nDo **not** rely on `yaml.safe_load`, `yamllint`, or \"it parses\" as proof. They accept the truncated-comment form. Only `actionlint` (or pushing and watching GitHub Actions parse it) validates the Actions layer.\n\n### Step 5: Keep the CI gate green\n\nThis repository runs `actionlint` automatically (see `.github\u002Fworkflows\u002Factionlint.yml`) on any PR that touches `.github\u002Fworkflows\u002F`. Ensure your change passes that check before requesting review. If you add a new workflow, the gate covers it automatically.\n\n## Validation\n\n- [ ] Every `${{ }}` value containing `#`, a colon-space, or a leading special character is wrapped in quotes.\n- [ ] `actionlint -shellcheck= -pyflakes= .github\u002Fworkflows\u002F*.yml` exits `0`.\n- [ ] No workflow run reports *\"This run likely failed because of a workflow file issue\"*.\n- [ ] The `actionlint` CI check is green on the PR.\n\n## Common Pitfalls\n\n| Pitfall | Solution |\n|---------|----------|\n| Unquoted `run-name`\u002F`name` with `#` inside the expression | Wrap the whole value in double quotes |\n| Trusting `yaml.safe_load`\u002F`yamllint`\u002Fa code review to catch it | Run `actionlint`; YAML-only checks accept the truncated form |\n| Escaping `${{` braces to \"fix\" it | Don't — quote the scalar instead; escaping breaks the expression |\n| Using single quotes around a value that contains single quotes | Use double quotes for the outer scalar |\n| Adding `actionlint` with shellcheck enabled and drowning in pre-existing shell-style warnings | Run with `-shellcheck= -pyflakes=` to focus on workflow\u002Fexpression errors |\n| Assuming a green YAML lint means the workflow will run | Push and confirm jobs actually start, or rely on the actionlint gate |\n\n## References\n\n- [actionlint](https:\u002F\u002Fgithub.com\u002Frhysd\u002Factionlint) — static checker for GitHub Actions workflows.\n- [GitHub Actions: workflow syntax](https:\u002F\u002Fdocs.github.com\u002Factions\u002Fusing-workflows\u002Fworkflow-syntax-for-github-actions)\n- [YAML 1.2 spec — comments](https:\u002F\u002Fyaml.org\u002Fspec\u002F1.2.2\u002F#66-comments)\n- Repository skill-authoring guide: [`.agents\u002Fskills\u002Fcreate-skill\u002FSKILL.md`](..\u002Fcreate-skill\u002FSKILL.md)\n","# Authoring GitHub Actions Workflows Safely\n\nGitHub Actions workflow files are YAML, but **valid YAML is not the same as a valid workflow**. A workflow can parse cleanly with `yaml.safe_load` (or a casual review) yet still be rejected by GitHub Actions at load time — producing the opaque failure *\"This run likely failed because of a workflow file issue\"* with **zero jobs started**. This skill teaches the YAML-vs-Actions traps (the `#`-as-comment trap above all), how to quote expression scalars correctly, and how to validate with `actionlint` before merge.\n\n> **Scope: syntactic vs. semantic.** This skill is about the *syntactic and structural* correctness of workflow YAML — quoting, parsing, and `actionlint`-level validity that determines whether GitHub Actions will load and run a file at all. It is **not** about *what* a workflow should do or how an agentic workflow should behave. For *semantic and functional* guidance (designing workflow logic, agentic-workflow patterns, gh-aw authoring), use [`.github\u002Fagents\u002Fagentic-workflows.agent.md`](..\u002F..\u002F..\u002F.github\u002Fagents\u002Fagentic-workflows.agent.md). The two are complementary: get the behavior right with the agent, get the YAML right with this skill.\n\n## When to Use\n\n- Editing, adding, or reviewing any file under `.github\u002Fworkflows\u002F`.\n- Writing a `run-name`, `name`, `if`, `env`, `with`, or `run` value that embeds a `${{ }}` expression.\n- A workflow run failed with *\"This run likely failed because of a workflow file issue\"* and **no jobs ran**.\n- Eval\u002FCI on `main` suddenly breaks for every run after a workflow edit merged, even though the change \"looked fine.\"\n- Deciding whether a YAML scalar needs quoting.\n\n## When Not to Use\n\n- Authoring non-Actions YAML (app config, Kubernetes, Compose, Azure Pipelines, GitLab CI).\n- Pure shell\u002Fscript logic inside an already-valid `run:` block (that is a scripting task, not a workflow-syntax task).\n\n## The #1 Trap: `#` inside an unquoted expression becomes a YAML comment\n\nIn YAML, a space followed by `#` starts a **comment**. In an unquoted (plain) scalar, everything from that space-then-`#` to end-of-line is silently discarded:\n\n```yaml\n# BAD — the run-name is silently truncated at \" #\"\nrun-name: ${{ inputs.pr_number != '' && format('Evaluate PR #{0} @ {1}', inputs.pr_number, inputs.head_sha) || '' }}\n```\n\nYAML parses this as `run-name: ${{ inputs.pr_number != '' && format('Evaluate PR` — an **unterminated `${{` expression**. `yaml.safe_load` succeeds (it just sees a truncated string with a trailing comment), so the bug passes naive validation, but GitHub Actions rejects the malformed expression and refuses to start any run.\n\n```yaml\n# GOOD — wrap the whole value in double quotes so '#' stays inside the scalar\nrun-name: \"${{ inputs.pr_number != '' && format('Evaluate PR #{0} @ {1}', inputs.pr_number, inputs.head_sha) || '' }}\"\n```\n\nThe inner expression already uses single quotes, so double-quoting the scalar is safe. This is exactly the bug that broke `dotnet\u002Fskills` evaluation on `main` (PR #746 → fixed by quoting).\n\n## Other characters that force quoting in a plain scalar\n\n| Character \u002F pattern | Why it breaks | Fix |\n|---------------------|---------------|-----|\n| space then `#` (space-hash) | Starts a YAML comment; truncates the value | Quote the whole value |\n| Leading `*`, `&`, `!`, `?`, `\\|`, `>`, `@`, `` ` `` | YAML anchors\u002Faliases\u002Ftags\u002Fblock scalars | Quote the value |\n| Leading `{` or `[` | Parsed as flow mapping\u002Fsequence (a bare `${{ }}` starts with `$`, which is safe, but `{{` after a leading char is risky) | Quote the value |\n| `:` then space (colon-space) inside the value | Parsed as a nested mapping key | Quote the value |\n| Leading\u002Ftrailing spaces that matter | Plain scalars strip them | Quote the value |\n| Values that are `true`\u002F`false`\u002F`yes`\u002F`no`\u002F`on`\u002F`off`\u002Fnumbers but must stay strings | YAML type coercion | Quote the value |\n\n**Rule of thumb:** if a `name`, `run-name`, `if`, `env`, or `with` value contains a `${{ }}` expression *and* any literal `#`, `:`, or leading special character, **wrap the entire scalar in double quotes**.\n\n## Workflow\n\n### Step 1: Identify the changed\u002Fauthored workflow files\n\n```bash\ngit diff --name-only origin\u002Fmain... -- .github\u002Fworkflows\u002F\n```\n\nFor each file, scan every line that contains `${{` together with a `#`, a colon-space, or a leading special character.\n\n### Step 2: Quote risky expression scalars\n\nWrap the full value in double quotes when the value embeds an expression and contains a `#` or other special character (see the table above). Prefer double quotes when the inner expression uses single quotes, and vice-versa. Do **not** escape the `${{ }}` braces — quoting the scalar is enough.\n\n### Step 3: Validate with actionlint (authoritative)\n\n`actionlint` understands the GitHub Actions schema *and* the expression grammar, so it catches exactly this class of bug that plain YAML linters miss. Download a pinned release and run it:\n\n```bash\nACTIONLINT_VERSION=1.7.7\nACTIONLINT_SHA256=023070a287cd8cccd71515fedc843f1985bf96c436b7effaecce67290e7e0757\ncurl -fsSLo actionlint.tar.gz \\\n  \"https:\u002F\u002Fgithub.com\u002Frhysd\u002Factionlint\u002Freleases\u002Fdownload\u002Fv${ACTIONLINT_VERSION}\u002Factionlint_${ACTIONLINT_VERSION}_linux_amd64.tar.gz\"\n# Verify the download against the pinned checksum before extracting\u002Fexecuting it:\necho \"${ACTIONLINT_SHA256}  actionlint.tar.gz\" | sha256sum -c -\ntar -xzf actionlint.tar.gz actionlint\n# Focus on workflow\u002Fexpression correctness; silence shell\u002Fpy style noise:\n.\u002Factionlint -shellcheck= -pyflakes= -color .github\u002Fworkflows\u002F*.yml\n```\n\nOn Windows PowerShell, use the `actionlint_\u003Cver>_windows_amd64.zip` asset and `Expand-Archive`.\n\nThe truncated-expression bug surfaces as:\n\n```\ngot unexpected EOF while lexing end of string literal, expecting ''' [expression]\n```\n\nA clean exit code `0` means the workflows are structurally valid.\n\n### Step 4: Confirm a YAML-only check is not enough\n\nDo **not** rely on `yaml.safe_load`, `yamllint`, or \"it parses\" as proof. They accept the truncated-comment form. Only `actionlint` (or pushing and watching GitHub Actions parse it) validates the Actions layer.\n\n### Step 5: Keep the CI gate green\n\nThis repository runs `actionlint` automatically (see `.github\u002Fworkflows\u002Factionlint.yml`) on any PR that touches `.github\u002Fworkflows\u002F`. Ensure your change passes that check before requesting review. If you add a new workflow, the gate covers it automatically.\n\n## Validation\n\n- [ ] Every `${{ }}` value containing `#`, a colon-space, or a leading special character is wrapped in quotes.\n- [ ] `actionlint -shellcheck= -pyflakes= .github\u002Fworkflows\u002F*.yml` exits `0`.\n- [ ] No workflow run reports *\"This run likely failed because of a workflow file issue\"*.\n- [ ] The `actionlint` CI check is green on the PR.\n\n## Common Pitfalls\n\n| Pitfall | Solution |\n|---------|----------|\n| Unquoted `run-name`\u002F`name` with `#` inside the expression | Wrap the whole value in double quotes |\n| Trusting `yaml.safe_load`\u002F`yamllint`\u002Fa code review to catch it | Run `actionlint`; YAML-only checks accept the truncated form |\n| Escaping `${{` braces to \"fix\" it | Don't — quote the scalar instead; escaping breaks the expression |\n| Using single quotes around a value that contains single quotes | Use double quotes for the outer scalar |\n| Adding `actionlint` with shellcheck enabled and drowning in pre-existing shell-style warnings | Run with `-shellcheck= -pyflakes=` to focus on workflow\u002Fexpression errors |\n| Assuming a green YAML lint means the workflow will run | Push and confirm jobs actually start, or rely on the actionlint gate |\n\n## References\n\n- [actionlint](https:\u002F\u002Fgithub.com\u002Frhysd\u002Factionlint) — static checker for GitHub Actions workflows.\n- [GitHub Actions: workflow syntax](https:\u002F\u002Fdocs.github.com\u002Factions\u002Fusing-workflows\u002Fworkflow-syntax-for-github-actions)\n- [YAML 1.2 spec — comments](https:\u002F\u002Fyaml.org\u002Fspec\u002F1.2.2\u002F#66-comments)\n- Repository skill-authoring guide: [`.agents\u002Fskills\u002Fcreate-skill\u002FSKILL.md`](..\u002Fcreate-skill\u002FSKILL.md)\n",{"name":5,"license":15,"description":7},"main","497cc9aba79a931ac6fb8d36a48cc22fe3d6d74b","catalog\u002FTools\u002FOfficial-DotNet-Authoring-Github-Workflows\u002Fskills\u002Fauthoring-github-workflows",41,"https:\u002F\u002Fgithub.com\u002Fmanagedcode\u002Fdotnet-skills","https:\u002F\u002Fskills.managed-code.com","https:\u002F\u002Fgithub.com\u002Fmanagedcode","https:\u002F\u002Fwww.managed-code.com","Open Source Community for .NET Developers: Reliable, Actively Maintained, and Community-Driven. Made in Ukraine 🇺🇦 with ❤️","2026-11-12 19:59:36",{"source":8,"skillName":5,"commands":67,"prompt":77,"zipAvailable":78},[68,71,74],{"tool":69,"command":70},"npx","npx skills add managedcode\u002Fdotnet-skills --skill authoring-github-workflows",{"tool":72,"command":73},"bunx","bunx skills add managedcode\u002Fdotnet-skills --skill authoring-github-workflows",{"tool":75,"command":76},"pnpm","pnpm dlx skills add managedcode\u002Fdotnet-skills --skill authoring-github-workflows","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmanagedcode\u002Fdotnet-skills\u002Fblob\u002Fmain\u002Fcatalog\u002FTools\u002FOfficial-DotNet-Authoring-Github-Workflows\u002Fskills\u002Fauthoring-github-workflows\u002FSKILL.md",true,[80,86],{"path":81,"resourceType":82,"resourceTypeDesc":83,"sizeBytes":84,"sourceHtmlUrl":85},"index.json","REFERENCE","参考文档",638,"https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Fsoc\u002Fhunting\u002Fsupply\u002Faudit\u002Findex.json",{"path":87,"resourceType":82,"resourceTypeDesc":83,"sizeBytes":88,"sourceHtmlUrl":89},"manifest.json",149,"https:\u002F\u002Fgithub.com\u002Fmanagedcode\u002Fdotnet-skills\u002Fblob\u002Fmain\u002Fcatalog\u002FTools\u002FOfficial-DotNet-Authoring-Github-Workflows\u002Fskills\u002Fauthoring-github-workflows\u002Fmanifest.json",[91,124,148,179,188,215],{"skillNo":92,"name":93,"nameZh":6,"description":94,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":95,"categories":96,"keywords":105,"publishedAt":51},"01M6DYQE1Y9FHAQHEDTVFQ3447","xtwitter-scraper","Use XTwitterScraper when a .NET application needs typed access to Xquik's X automation REST API for tweet search, user lookup, posting workflows, extraction jobs, monitors, webhooks, or giveaway draws. USE FOR: integrating the XTwitterScraper NuGet package; reviewing Xquik API client usage; modeling API-key configuration, pagination, binary exports, raw responses, retries, and webhook\u002Fevent flows in .NET. DO NOT USE FOR: unrelated stacks; direct browser automation; generic social-media strategy; or code that does not call Xquik. INVOKES: inspect the repository context, edit targeted files, and run relevant build, test, lint, or validation commands when changes are made.","https:\u002F\u002Fgithub.com\u002Fmanagedcode\u002Fdotnet-skills\u002Fblob\u002Fmain\u002Fcatalog\u002FLibraries\u002FXTwitterScraper\u002Fskills\u002Fxtwitter-scraper\u002FSKILL.md",[97,100],{"categoryNo":98,"categoryName":99,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":101,"categoryName":102,"taxonomyType":103,"taxonomyTypeDesc":104},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[106,107,29,108,109,110,111,112,113,114,115,116,117,39,118,119,120,121,122,123],"xtwitter scraper","browser automation","run","code","browser","search","repository","api","Media","api client","access","edit","webhooks","files","social","commands","modeling","webhook",{"skillNo":125,"name":126,"nameZh":6,"description":127,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":128,"categories":129,"keywords":136,"publishedAt":51},"01M6DYQ9S4PE1H6G8MCH9T21HR","sep","Use Sep for high-performance separated-value parsing and writing in .NET, including delimiter inference, explicit parser\u002Fwriter options, and low-allocation row\u002Fcolumn workflows. USE FOR: delimited data needs are performance-sensitive and allocation-aware; project needs explicit control over separator inference, escaping, trimming, and header behavior;. DO NOT USE FOR: unrelated stacks; generic tasks that do not need this specific guidance. INVOKES: inspect the repository context, edit targeted files, and run relevant build, test, lint, or validation commands when changes are made.","https:\u002F\u002Fgithub.com\u002Fmanagedcode\u002Fdotnet-skills\u002Fblob\u002Fmain\u002Fcatalog\u002FLibraries\u002FSep\u002Fskills\u002Fsep\u002FSKILL.md",[130,133],{"categoryNo":131,"categoryName":132,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":134,"categoryName":135,"taxonomyType":103,"taxonomyTypeDesc":104},"01JBSEEDCAT000000000000036","内容创作者",[126,50,137,29,138,108,112,139,140,141,117,142,39,119,143,144,145,146,121,147],"performance","tasks","data","parsing","parser","context","do","writer","options","project","high-performance",{"skillNo":149,"name":150,"nameZh":6,"description":151,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":152,"categories":153,"keywords":154,"publishedAt":51},"01M6DZS2DNEPXCGGF6SSCW6G5V","webgpu-threejs-tsl","Comprehensive guide for developing WebGPU-enabled Three.js applications using TSL (Three.js Shading Language). Covers WebGPU renderer setup, TSL syntax and node materials, compute shaders, post-processing effects, and WGSL integration. Use this skill when working with Three.js WebGPU, TSL shaders, node materials, or GPU compute in Three.js.","https:\u002F\u002Fgithub.com\u002Fmanagedcode\u002Fdotnet-skills\u002Fblob\u002Fmain\u002Fexternal-sources\u002Fupstreams\u002Fwebgpu-claude-skill\u002Fskills\u002Fwebgpu-threejs-tsl\u002FSKILL.md",[],[155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,34],"webgpu","threejs","webgpu threejs tsl","setup","shaders","gpu","integration","applications","js","node","syntax","guide","use","language","three","compute","post","processing","with","renderer","for","materials","wgsl","effects",{"skillNo":180,"name":181,"nameZh":6,"description":182,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":183,"categories":184,"keywords":185,"publishedAt":51},"01M6DZS0BQXW2B56A289XF1X76","roslynk","Use Roslynk for semantic inspection and edits of *.cs, *.razor and *.cshtml solution files.","https:\u002F\u002Fgithub.com\u002Fmanagedcode\u002Fdotnet-skills\u002Fblob\u002Fmain\u002Fexternal-sources\u002Fupstreams\u002Froslynk\u002Fskills\u002Froslynk\u002FSKILL.md",[],[181,167,119,186,187,175,33],"semantic","razor",{"skillNo":189,"name":190,"nameZh":6,"description":191,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":192,"categories":193,"keywords":194,"publishedAt":51},"01M6DZRW6MEJCVW80K3S4XV60K","system-text-json-net11","Imperative guidance for the System.Text.Json APIs added in .NET 11: the built-in `JsonNamingPolicy.PascalCase` naming policy, and the strongly-typed generic `JsonSerializerOptions.GetTypeInfo` and `JsonSerializerOptions.TryGetTypeInfo` metadata accessors (generic overloads that return a typed `JsonTypeInfo`). USE ONLY when the user is targeting net11.0 or later and needs PascalCase JSON property or dictionary-key names without writing a custom naming policy, a strongly-typed generic `JsonTypeInfo` instead of the non-generic `JsonTypeInfo`, or a no-throw way to probe whether a type's serialization metadata is resolved. DO NOT USE when the target is earlier than net11.0, the requested behavior uses an established pre-net11 naming policy, or the user explicitly selected another JSON library.","https:\u002F\u002Fgithub.com\u002Fmanagedcode\u002Fdotnet-skills\u002Fblob\u002Fmain\u002Fexternal-sources\u002Fupstreams\u002Fdotnet-skills\u002Fplugins\u002Fdotnet11\u002Fskills\u002Fsystem-text-json-net11\u002FSKILL.md",[],[195,196,197,198,50,199,200,201,202,203,204,167,205,206,207,208,143,209,210,211,212,175,213,214,34],"system","json","text","system text json net11","policy","metadata","library","serialization","behavior","user","only","probe","guidance","later","type","dictionary","naming","targeting","custom","generic",{"skillNo":216,"name":217,"nameZh":6,"description":218,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":219,"categories":220,"keywords":223,"publishedAt":51},"01M6DZRRJP3S662NFSG1RSPQQ7","process-api-net11","Provides guidance on the new System.Diagnostics.Process APIs introduced in .NET 11: Process.Run, Process.RunAndCaptureText, Process.StartAndForget, Process.ReadAllText\u002FBytes\u002FLines, KillOnParentExit, InheritedHandles, and StartDetached. USE FOR: starting, orchestrating, or capturing output from external processes in applications targeting net11.0 or later. DO NOT USE FOR: applications targeting .NET 10 or earlier, or basic pre-.NET 11 Process.Start usage without new APIs.","https:\u002F\u002Fgithub.com\u002Fmanagedcode\u002Fdotnet-skills\u002Fblob\u002Fmain\u002Fexternal-sources\u002Fupstreams\u002Fdotnet-skills\u002Fplugins\u002Fdotnet11\u002Fskills\u002Fprocess-api-net11\u002FSKILL.md",[221,222],{"categoryNo":98,"categoryName":99,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":101,"categoryName":102,"taxonomyType":103,"taxonomyTypeDesc":104},[113,224,225,226,108,227,162,195,167,207,208,143,228,229,230,231,212,175,232],"process","process api net11","diagnostics","start","basic","processes","output","usage","new"]