[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6C62EMEE4F7RST5X1MPHJMN":3,"skill-same:01M6C62EMEE4F7RST5X1MPHJMN":82},{"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":55,"commitSha":56,"skillDirectory":57,"forksCount":58,"repositoryHtmlUrl":59,"repositoryHomepageUrl":6,"ownerHtmlUrl":60,"ownerBlogUrl":6,"ownerDescription":61,"updatedAt":62,"install":63,"resources":75},"01M6C62EMEE4F7RST5X1MPHJMN","github-workflow-auto-fix",null,"Set up automated CI fixing with Claude Code. Use when adding a workflow that analyzes failures, applies fixes, and files issues; pass --reusable for a multi-repo workflow_call template.","laurigates\u002Fclaude-plugins","laurigates","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F13014001?v=4","01M6C59YHWS9C7KMXKSRX1YXNP","Lauri Gates","01M6C59YP2APG9YAM4DWYQYGFJ",59,"MIT","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fgithub-actions-plugin\u002Fskills\u002Fgithub-workflow-auto-fix\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],"auto","github workflow auto fix","workflow","github","fix","github workflow","auto fix","dry","log","when","files","code","Bash","multi-repo","workflows","issues","ci","up","gh pr","SET","2026-11-10 10:12:30",false,"---\nname: github-workflow-auto-fix\ndescription: \"Set up automated CI fixing with Claude Code. Use when adding a workflow that analyzes failures, applies fixes, and files issues; pass --reusable for a multi-repo workflow_call template.\"\nallowed-tools: Bash(gh run *), Bash(gh pr *), Bash(gh issue *), Bash(git status *), Bash(git diff *), Bash(git log *), Read, Write, Edit, Grep, Glob, TodoWrite\nargs: \"[--setup] [--reusable] [--caller] [--workflows \u003Cnames>] [--dry-run]\"\nargument-hint: --setup for single-repo inline, --reusable for a workflow_call template\ndisable-model-invocation: true\ncreated: 2026-02-18\nmodified: 2026-09-02\nreviewed: 2026-09-02\n---\n\n# GitHub Workflow Auto-Fix\n\nAutomated CI failure analysis and remediation using Claude Code Action.\n\nTwo shapes, selected by flag:\n\n| Shape | Flag | Output | Use for |\n|-------|------|--------|---------|\n| **Single-repo inline** (default) | `--setup` | One self-contained `github-workflow-auto-fix.yml` | A single repo that owns its auto-fix logic |\n| **Reusable `workflow_call`** | `--reusable` (+ `--caller`) | A `reusable-ci-autofix.yml` definition plus a thin `auto-fix.yml` caller | Multiple repos invoking one shared template |\n\n## When to Use This Skill\n\n| Use this skill when... | Use something else when... |\n|------------------------|---------------------------|\n| Setting up auto-fix for a single repo (default) | Fixing a single PR's checks (`\u002Fgit:fix-pr`) |\n| Setting up a reusable template multiple repos invoke (`--reusable`) | Inspecting workflow runs manually (`\u002Fworkflow:github-actions-inspection`) |\n| Customizing which workflows trigger auto-fix | Writing new workflows from scratch (`\u002Fworkflow:dev`) |\n\n## Context\n\n- Inline workflow exists: !`find . -path '*\u002F.github\u002Fworkflows\u002F*' -maxdepth 3 -name 'github-workflow-auto-fix.yml'`\n- Reusable workflow exists: !`find . -path '*\u002F.github\u002Fworkflows\u002F*' -maxdepth 3 -name 'reusable-ci-autofix.yml' -type f`\n- Caller workflow exists: !`find . -path '*\u002F.github\u002Fworkflows\u002F*' -maxdepth 3 -name 'auto-fix.yml' -type f`\n- Current workflows: !`find . -path '*\u002F.github\u002Fworkflows\u002F*' -maxdepth 3 -name '*.yml' -type f`\n- Claude secrets configured: !`gh secret list`\n\n## Parameters\n\nParse from `$ARGUMENTS`:\n\n- `--setup`: Create or update the single-repo inline workflow in `.github\u002Fworkflows\u002Fgithub-workflow-auto-fix.yml`\n- `--reusable`: Create or update the reusable `workflow_call` definition in `.github\u002Fworkflows\u002Freusable-ci-autofix.yml` (see Step 5)\n- `--caller`: Create the thin caller workflow in `.github\u002Fworkflows\u002Fauto-fix.yml` that invokes the reusable definition (see Step 5)\n- `--workflows \u003Cnames>`: Comma-separated workflow names to monitor (default: auto-detect CI workflows)\n- `--dry-run`: Show what would be created without writing files\n\nDefault (no `--reusable`\u002F`--caller`) generates the single-repo inline workflow described in Steps 1–4. `--reusable`\u002F`--caller` switch to the reusable variant in Step 5.\n\n## Execution\n\nExecute this workflow setup process:\n\n### Step 1: Assess current state\n\n1. Check if `.github\u002Fworkflows\u002Fgithub-workflow-auto-fix.yml` already exists\n2. List all current workflow files and their `name:` fields\n3. Check if `CLAUDE_CODE_OAUTH_TOKEN` secret is configured\n\n### Step 2: Select workflows to monitor\n\nIf `--workflows` provided, use those. Otherwise, auto-detect suitable workflows:\n\n**Good candidates for auto-fix monitoring:**\n- CI\u002Ftest workflows (lint, test, build, type-check)\n- Code quality checks (formatting, style)\n- Config validation workflows\n\n**Skip these (not suitable for auto-fix):**\n- Release workflows (release-please, deploy)\n- Claude-powered workflows (avoid recursive triggers)\n- Scheduled audit workflows\n- Reusable workflow definitions\n\n### Step 3: Generate workflow file\n\nIf `--setup` or workflow is missing, create `.github\u002Fworkflows\u002Fgithub-workflow-auto-fix.yml`.\n\nThe workflow's display name follows `\u003CDomain>: \u003CAction>` (`Auto-fix:` is the canonical domain for `workflow_run`-triggered remediation; quote the value because YAML treats `:` as a key separator). The strings under `workflows:` must match the **display names** of the target workflows exactly — update both sides whenever a target's `name:` changes. See `.claude\u002Frules\u002Fworkflow-naming.md`.\n\n```yaml\nname: \"Auto-fix: CI failures\"\n\non:\n  workflow_run:\n    workflows:\n      # List monitored workflows by display name (must match their `name:` exactly)\n      - \"Test: Suite\"\n      - \"Plugin: Lint skills\"\n    types: [completed]\n\nconcurrency:\n  group: auto-fix-${{ github.event.workflow_run.head_branch }}\n  cancel-in-progress: false\n\npermissions:\n  contents: write\n  pull-requests: write\n  issues: write\n  actions: read\n  id-token: write\n\njobs:\n  auto-fix:\n    if: >-\n      github.event.workflow_run.conclusion == 'failure' &&\n      github.event.workflow_run.actor.type != 'Bot' &&\n      github.event.workflow_run.head_branch != 'main' &&\n      github.event.workflow_run.head_branch != 'master'\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout failed branch\n        uses: actions\u002Fcheckout@v4.4.0\n        with:\n          ref: ${{ github.event.workflow_run.head_branch }}\n          fetch-depth: 0\n\n      - name: Gather failure context\n        id: context\n        env:\n          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n        run: |\n          RUN_ID=\"${{ github.event.workflow_run.id }}\"\n          gh run view \"$RUN_ID\" --log-failed 2>&1 | tail -500 > .auto-fix-failed-logs.txt\n          gh run view \"$RUN_ID\" --json conclusion,status,name,headBranch,headSha,jobs > .auto-fix-run-summary.json\n          PR_NUMBER=$(gh pr list --head \"${{ github.event.workflow_run.head_branch }}\" --json number --jq '.[0].number' 2>\u002Fdev\u002Fnull || echo \"\")\n          echo \"pr_number=$PR_NUMBER\" >> \"$GITHUB_OUTPUT\"\n          echo \"run_id=$RUN_ID\" >> \"$GITHUB_OUTPUT\"\n          RECENT_FIX=$(git log --oneline -5 --format='%s' | grep -c 'fix:.*resolve CI failure' || true)\n          echo \"recent_fix_count=$RECENT_FIX\" >> \"$GITHUB_OUTPUT\"\n\n      - name: Skip if already attempted\n        if: steps.context.outputs.recent_fix_count != '0'\n        run: echo \"::notice::Skipping - recent auto-fix commit exists\"\n\n      - name: Analyze and fix with Claude\n        if: steps.context.outputs.recent_fix_count == '0'\n        uses: anthropics\u002Fclaude-code-action@v1.0.268\n        with:\n          claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}\n          # One flag per line: scripts\u002Fcheck-workflow-model.sh matches\n          # `--model`\u002F`--effort` anchored at line start in a folded scalar.\n          # The tool boundary belongs in `--allowedTools` here — `additional_permissions`\n          # takes a GitHub permissions MAP, so a tool list passed there is inert.\n          claude_args: >-\n            --model opus\n            --effort medium\n            --max-turns 30\n            --allowedTools \"Read,Write,Edit,Grep,Glob,Bash(git *),Bash(gh *)\"\n          prompt: |\n            \u003Canalysis-and-fix-prompt>\n          additional_permissions: |\n            actions: read\n```\n\n### Step 4: Validate and report\n\n1. Verify the workflow YAML is valid\n2. List the monitored workflows\n3. Check that required secrets exist\n4. Report any missing prerequisites\n\n### Step 5: Reusable variant (`--reusable` \u002F `--caller`)\n\nWhen `--reusable` or `--caller` is passed, generate the `workflow_call` shape instead of the single-repo inline workflow. The full templates live in [REFERENCE.md](REFERENCE.md).\n\n1. **`--reusable`** — create `.github\u002Fworkflows\u002Freusable-ci-autofix.yml` from [REFERENCE.md](REFERENCE.md) § Reusable Workflow. Customize:\n   - `auto_fixable_criteria` \u002F `not_auto_fixable_criteria` defaults to match the project's tech stack\n   - `verification_commands` default to match the project's linter\u002Fformatter commands\n   - `max_turns` (default: 50)\n2. **`--caller`** — create `.github\u002Fworkflows\u002Fauto-fix.yml` from [REFERENCE.md](REFERENCE.md) § Caller Workflow. Customize:\n   - The monitored workflow `name:` strings in the `workflows:` list (display names — must match each target's `name:` exactly)\n   - `auto_fixable_criteria` \u002F `verification_commands` overrides for the project's tools\n3. **Display-name convention** — the caller's `name:` follows `\u003CDomain>: \u003CAction>` (`Auto-fix: CI failures` is canonical; the reusable definition itself uses `Reusable: CI auto-fix`). Quote values containing colons. See `.claude\u002Frules\u002Fworkflow-naming.md`.\n4. Validate both YAML files, list the monitored workflows, and confirm `CLAUDE_CODE_OAUTH_TOKEN` or `ANTHROPIC_API_KEY` exists.\n\nThe reusable variant adds dedup (max 2 open auto-fix PRs), `workflow_dispatch` with a `pr_number` input, and fan-out — see the Architecture and Safety Guards below, and REFERENCE.md for the rationale.\n\n## Architecture\n\nSingle-repo inline (default):\n\n```\nworkflow_run (failure)\n        |\n        v\n  Gather logs & context\n        |\n        v\n  Claude analyzes failure\n        |\n    +---+---+\n    |       |\n    v       v\n  Fixable  Complex\u002FExternal\n    |       |\n    v       v\n  Fix &    Open issue\n  push     with analysis\n    |       |\n    v       v\n  Comment  Comment on PR\n  on PR    linking issue\n```\n\nThe reusable variant wraps the same analyze→fix\u002Fissue core in a `workflow_call` definition fronted by a thin caller (`workflow_run` + `workflow_dispatch` with fan-out and a dedup gate). See [REFERENCE.md](REFERENCE.md) § Reusable Workflow and § Cross-Repository Usage for the full templates.\n\n## Safety Guards\n\n| Guard | Variant | Purpose |\n|-------|---------|---------|\n| `actor.type != 'Bot'` | both | Prevent bot-triggered loops |\n| `head_branch != 'main'` | both | Never auto-fix main branch directly |\n| Recent fix check \u002F `!startsWith(commit, 'fix(auto):')` | both | Skip if auto-fix already attempted; prevent recursive loops |\n| Concurrency group per branch | both | One auto-fix per branch at a time |\n| `max-turns` limit | both | Limit Claude's iteration count (inline 30, reusable 50 default) |\n| Max 2 open auto-fix PRs | reusable | Prevent PR flooding across repos |\n| `timeout-minutes: 30` | reusable | Prevent runaway jobs |\n\n## Prerequisites\n\n| Requirement | How to set up |\n|-------------|---------------|\n| `CLAUDE_CODE_OAUTH_TOKEN` | Repository secret with Claude Code OAuth token |\n| `contents: write` permission | Included in workflow permissions |\n| `pull-requests: write` permission | Included in workflow permissions |\n| `issues: write` permission | For creating issues on complex failures |\n\n## Agentic Optimizations\n\n| Context | Command |\n|---------|---------|\n| Check recent failures | `gh run list --status failure --json name,headBranch,conclusion -L 10` |\n| Get failed logs | `gh run view \u003Cid> --log-failed \\| tail -500` |\n| Run summary | `gh run view \u003Cid> --json conclusion,status,jobs` |\n| Find associated PR | `gh pr list --head \u003Cbranch> --json number --jq '.[0].number'` |\n| List workflow names | `grep -h '^name:' .github\u002Fworkflows\u002F*.yml` |\n","# GitHub Workflow Auto-Fix\n\nAutomated CI failure analysis and remediation using Claude Code Action.\n\nTwo shapes, selected by flag:\n\n| Shape | Flag | Output | Use for |\n|-------|------|--------|---------|\n| **Single-repo inline** (default) | `--setup` | One self-contained `github-workflow-auto-fix.yml` | A single repo that owns its auto-fix logic |\n| **Reusable `workflow_call`** | `--reusable` (+ `--caller`) | A `reusable-ci-autofix.yml` definition plus a thin `auto-fix.yml` caller | Multiple repos invoking one shared template |\n\n## When to Use This Skill\n\n| Use this skill when... | Use something else when... |\n|------------------------|---------------------------|\n| Setting up auto-fix for a single repo (default) | Fixing a single PR's checks (`\u002Fgit:fix-pr`) |\n| Setting up a reusable template multiple repos invoke (`--reusable`) | Inspecting workflow runs manually (`\u002Fworkflow:github-actions-inspection`) |\n| Customizing which workflows trigger auto-fix | Writing new workflows from scratch (`\u002Fworkflow:dev`) |\n\n## Context\n\n- Inline workflow exists: !`find . -path '*\u002F.github\u002Fworkflows\u002F*' -maxdepth 3 -name 'github-workflow-auto-fix.yml'`\n- Reusable workflow exists: !`find . -path '*\u002F.github\u002Fworkflows\u002F*' -maxdepth 3 -name 'reusable-ci-autofix.yml' -type f`\n- Caller workflow exists: !`find . -path '*\u002F.github\u002Fworkflows\u002F*' -maxdepth 3 -name 'auto-fix.yml' -type f`\n- Current workflows: !`find . -path '*\u002F.github\u002Fworkflows\u002F*' -maxdepth 3 -name '*.yml' -type f`\n- Claude secrets configured: !`gh secret list`\n\n## Parameters\n\nParse from `$ARGUMENTS`:\n\n- `--setup`: Create or update the single-repo inline workflow in `.github\u002Fworkflows\u002Fgithub-workflow-auto-fix.yml`\n- `--reusable`: Create or update the reusable `workflow_call` definition in `.github\u002Fworkflows\u002Freusable-ci-autofix.yml` (see Step 5)\n- `--caller`: Create the thin caller workflow in `.github\u002Fworkflows\u002Fauto-fix.yml` that invokes the reusable definition (see Step 5)\n- `--workflows \u003Cnames>`: Comma-separated workflow names to monitor (default: auto-detect CI workflows)\n- `--dry-run`: Show what would be created without writing files\n\nDefault (no `--reusable`\u002F`--caller`) generates the single-repo inline workflow described in Steps 1–4. `--reusable`\u002F`--caller` switch to the reusable variant in Step 5.\n\n## Execution\n\nExecute this workflow setup process:\n\n### Step 1: Assess current state\n\n1. Check if `.github\u002Fworkflows\u002Fgithub-workflow-auto-fix.yml` already exists\n2. List all current workflow files and their `name:` fields\n3. Check if `CLAUDE_CODE_OAUTH_TOKEN` secret is configured\n\n### Step 2: Select workflows to monitor\n\nIf `--workflows` provided, use those. Otherwise, auto-detect suitable workflows:\n\n**Good candidates for auto-fix monitoring:**\n- CI\u002Ftest workflows (lint, test, build, type-check)\n- Code quality checks (formatting, style)\n- Config validation workflows\n\n**Skip these (not suitable for auto-fix):**\n- Release workflows (release-please, deploy)\n- Claude-powered workflows (avoid recursive triggers)\n- Scheduled audit workflows\n- Reusable workflow definitions\n\n### Step 3: Generate workflow file\n\nIf `--setup` or workflow is missing, create `.github\u002Fworkflows\u002Fgithub-workflow-auto-fix.yml`.\n\nThe workflow's display name follows `\u003CDomain>: \u003CAction>` (`Auto-fix:` is the canonical domain for `workflow_run`-triggered remediation; quote the value because YAML treats `:` as a key separator). The strings under `workflows:` must match the **display names** of the target workflows exactly — update both sides whenever a target's `name:` changes. See `.claude\u002Frules\u002Fworkflow-naming.md`.\n\n```yaml\nname: \"Auto-fix: CI failures\"\n\non:\n  workflow_run:\n    workflows:\n      # List monitored workflows by display name (must match their `name:` exactly)\n      - \"Test: Suite\"\n      - \"Plugin: Lint skills\"\n    types: [completed]\n\nconcurrency:\n  group: auto-fix-${{ github.event.workflow_run.head_branch }}\n  cancel-in-progress: false\n\npermissions:\n  contents: write\n  pull-requests: write\n  issues: write\n  actions: read\n  id-token: write\n\njobs:\n  auto-fix:\n    if: >-\n      github.event.workflow_run.conclusion == 'failure' &&\n      github.event.workflow_run.actor.type != 'Bot' &&\n      github.event.workflow_run.head_branch != 'main' &&\n      github.event.workflow_run.head_branch != 'master'\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout failed branch\n        uses: actions\u002Fcheckout@v4.4.0\n        with:\n          ref: ${{ github.event.workflow_run.head_branch }}\n          fetch-depth: 0\n\n      - name: Gather failure context\n        id: context\n        env:\n          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n        run: |\n          RUN_ID=\"${{ github.event.workflow_run.id }}\"\n          gh run view \"$RUN_ID\" --log-failed 2>&1 | tail -500 > .auto-fix-failed-logs.txt\n          gh run view \"$RUN_ID\" --json conclusion,status,name,headBranch,headSha,jobs > .auto-fix-run-summary.json\n          PR_NUMBER=$(gh pr list --head \"${{ github.event.workflow_run.head_branch }}\" --json number --jq '.[0].number' 2>\u002Fdev\u002Fnull || echo \"\")\n          echo \"pr_number=$PR_NUMBER\" >> \"$GITHUB_OUTPUT\"\n          echo \"run_id=$RUN_ID\" >> \"$GITHUB_OUTPUT\"\n          RECENT_FIX=$(git log --oneline -5 --format='%s' | grep -c 'fix:.*resolve CI failure' || true)\n          echo \"recent_fix_count=$RECENT_FIX\" >> \"$GITHUB_OUTPUT\"\n\n      - name: Skip if already attempted\n        if: steps.context.outputs.recent_fix_count != '0'\n        run: echo \"::notice::Skipping - recent auto-fix commit exists\"\n\n      - name: Analyze and fix with Claude\n        if: steps.context.outputs.recent_fix_count == '0'\n        uses: anthropics\u002Fclaude-code-action@v1.0.268\n        with:\n          claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}\n          # One flag per line: scripts\u002Fcheck-workflow-model.sh matches\n          # `--model`\u002F`--effort` anchored at line start in a folded scalar.\n          # The tool boundary belongs in `--allowedTools` here — `additional_permissions`\n          # takes a GitHub permissions MAP, so a tool list passed there is inert.\n          claude_args: >-\n            --model opus\n            --effort medium\n            --max-turns 30\n            --allowedTools \"Read,Write,Edit,Grep,Glob,Bash(git *),Bash(gh *)\"\n          prompt: |\n            \u003Canalysis-and-fix-prompt>\n          additional_permissions: |\n            actions: read\n```\n\n### Step 4: Validate and report\n\n1. Verify the workflow YAML is valid\n2. List the monitored workflows\n3. Check that required secrets exist\n4. Report any missing prerequisites\n\n### Step 5: Reusable variant (`--reusable` \u002F `--caller`)\n\nWhen `--reusable` or `--caller` is passed, generate the `workflow_call` shape instead of the single-repo inline workflow. The full templates live in [REFERENCE.md](REFERENCE.md).\n\n1. **`--reusable`** — create `.github\u002Fworkflows\u002Freusable-ci-autofix.yml` from [REFERENCE.md](REFERENCE.md) § Reusable Workflow. Customize:\n   - `auto_fixable_criteria` \u002F `not_auto_fixable_criteria` defaults to match the project's tech stack\n   - `verification_commands` default to match the project's linter\u002Fformatter commands\n   - `max_turns` (default: 50)\n2. **`--caller`** — create `.github\u002Fworkflows\u002Fauto-fix.yml` from [REFERENCE.md](REFERENCE.md) § Caller Workflow. Customize:\n   - The monitored workflow `name:` strings in the `workflows:` list (display names — must match each target's `name:` exactly)\n   - `auto_fixable_criteria` \u002F `verification_commands` overrides for the project's tools\n3. **Display-name convention** — the caller's `name:` follows `\u003CDomain>: \u003CAction>` (`Auto-fix: CI failures` is canonical; the reusable definition itself uses `Reusable: CI auto-fix`). Quote values containing colons. See `.claude\u002Frules\u002Fworkflow-naming.md`.\n4. Validate both YAML files, list the monitored workflows, and confirm `CLAUDE_CODE_OAUTH_TOKEN` or `ANTHROPIC_API_KEY` exists.\n\nThe reusable variant adds dedup (max 2 open auto-fix PRs), `workflow_dispatch` with a `pr_number` input, and fan-out — see the Architecture and Safety Guards below, and REFERENCE.md for the rationale.\n\n## Architecture\n\nSingle-repo inline (default):\n\n```\nworkflow_run (failure)\n        |\n        v\n  Gather logs & context\n        |\n        v\n  Claude analyzes failure\n        |\n    +---+---+\n    |       |\n    v       v\n  Fixable  Complex\u002FExternal\n    |       |\n    v       v\n  Fix &    Open issue\n  push     with analysis\n    |       |\n    v       v\n  Comment  Comment on PR\n  on PR    linking issue\n```\n\nThe reusable variant wraps the same analyze→fix\u002Fissue core in a `workflow_call` definition fronted by a thin caller (`workflow_run` + `workflow_dispatch` with fan-out and a dedup gate). See [REFERENCE.md](REFERENCE.md) § Reusable Workflow and § Cross-Repository Usage for the full templates.\n\n## Safety Guards\n\n| Guard | Variant | Purpose |\n|-------|---------|---------|\n| `actor.type != 'Bot'` | both | Prevent bot-triggered loops |\n| `head_branch != 'main'` | both | Never auto-fix main branch directly |\n| Recent fix check \u002F `!startsWith(commit, 'fix(auto):')` | both | Skip if auto-fix already attempted; prevent recursive loops |\n| Concurrency group per branch | both | One auto-fix per branch at a time |\n| `max-turns` limit | both | Limit Claude's iteration count (inline 30, reusable 50 default) |\n| Max 2 open auto-fix PRs | reusable | Prevent PR flooding across repos |\n| `timeout-minutes: 30` | reusable | Prevent runaway jobs |\n\n## Prerequisites\n\n| Requirement | How to set up |\n|-------------|---------------|\n| `CLAUDE_CODE_OAUTH_TOKEN` | Repository secret with Claude Code OAuth token |\n| `contents: write` permission | Included in workflow permissions |\n| `pull-requests: write` permission | Included in workflow permissions |\n| `issues: write` permission | For creating issues on complex failures |\n\n## Agentic Optimizations\n\n| Context | Command |\n|---------|---------|\n| Check recent failures | `gh run list --status failure --json name,headBranch,conclusion -L 10` |\n| Get failed logs | `gh run view \u003Cid> --log-failed \\| tail -500` |\n| Run summary | `gh run view \u003Cid> --json conclusion,status,jobs` |\n| Find associated PR | `gh pr list --head \u003Cbranch> --json number --jq '.[0].number'` |\n| List workflow names | `grep -h '^name:' .github\u002Fworkflows\u002F*.yml` |\n",{"args":49,"name":5,"created":50,"modified":51,"reviewed":51,"description":7,"allowed-tools":52,"argument-hint":53,"disable-model-invocation":54},"[--setup] [--reusable] [--caller] [--workflows \u003Cnames>] [--dry-run]",1771372800000,1788307200000,"Bash(gh run *), Bash(gh pr *), Bash(gh issue *), Bash(git status *), Bash(git diff *), Bash(git log *), Read, Write, Edit, Grep, Glob, TodoWrite","--setup for single-repo inline, --reusable for a workflow_call template",true,"main","9d783554148f9c8a9c55a486b480760d3da673e6","github-actions-plugin\u002Fskills\u002Fgithub-workflow-auto-fix",6,"https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins","https:\u002F\u002Fgithub.com\u002Flaurigates","Linux enthusiast, cloud engineer, neovim addict, electronics hobbyist.","2026-11-12 03:43:32",{"source":8,"skillName":5,"commands":64,"prompt":74,"zipAvailable":54},[65,68,71],{"tool":66,"command":67},"npx","npx skills add laurigates\u002Fclaude-plugins --skill github-workflow-auto-fix",{"tool":69,"command":70},"bunx","bunx skills add laurigates\u002Fclaude-plugins --skill github-workflow-auto-fix",{"tool":72,"command":73},"pnpm","pnpm dlx skills add laurigates\u002Fclaude-plugins --skill github-workflow-auto-fix","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fgithub-actions-plugin\u002Fskills\u002Fgithub-workflow-auto-fix\u002FSKILL.md",[76],{"path":77,"resourceType":78,"resourceTypeDesc":79,"sizeBytes":80,"sourceHtmlUrl":81},"REFERENCE.md","REFERENCE","参考文档",25401,"https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fgithub-actions-plugin\u002Fskills\u002Fgithub-workflow-auto-fix\u002FREFERENCE.md",[83,111,132,148,169,199],{"skillNo":84,"name":85,"nameZh":6,"description":86,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":87,"categories":88,"keywords":92,"publishedAt":44},"01M70PFHMH9ADY0CRE6047Y4B2","kitty-show-image","Show the user an image with a note on what to judge, via a file send or a labelled kitty tab. Use when the user must see an image, or icat fails with no \u002Fdev\u002Ftty.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fkitty-plugin\u002Fskills\u002Fkitty-show-image\u002FSKILL.md",[89],{"categoryNo":90,"categoryName":91,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体",[93,94,95,96,97,98,99,100,101,102,103,33,36,104,105,106,107,108,109,110],"show","kitty show image","image","kitty","show image","ls","get","send","open","dev","use","file","text","with","xdg","via","2026","read",{"skillNo":112,"name":113,"nameZh":6,"description":114,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":115,"categories":116,"keywords":117,"publishedAt":44},"01M70PFEN18HKQ4RCQ1VPGMPTB","kitty-session-persistence","Snapshot and restore kitty terminal sessions on macOS. Use when surviving WindowServer hangs without losing tabs, configuring snapshots, or restoring after a force-reboot.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fkitty-plugin\u002Fskills\u002Fkitty-session-persistence\u002FSKILL.md",[],[96,118,119,120,121,122,33,36,123,124,125,109,110,126,127,128,129,130,131,103],"kitty session persistence","session","persistence","false","snapshots","uname","reboot","terminal","write","edit","snapshot","macos","sessions","restore",{"skillNo":133,"name":134,"nameZh":6,"description":135,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":136,"categories":137,"keywords":138,"publishedAt":44},"01M70PFC77XGXCVQ1543VGZHYR","kitty-remote-control","Safe kitty remote control from an agent — read panes with kitty @ ls\u002Fget-text, notify, and never mutate the live terminal unasked. Use when running inside kitty.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fkitty-plugin\u002Fskills\u002Fkitty-remote-control\u002FSKILL.md",[],[139,140,96,141,142,98,143,144,99,145,146,103,33,147,36,105,106,125,109,110],"kitty remote control","remote","control","remote control","running","never","panes","notify","query",{"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":44},"01M70P6WVMCT5JG4SACTM69AF9","docs-reference-check","Dangling doc-reference gate: flag markdown naming repo paths or relative links that no longer exist. Use when docs cite moved\u002Fdeleted files, or wiring a doc-drift lint.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fdocumentation-plugin\u002Fskills\u002Fdocs-reference-check\u002FSKILL.md",[],[155,156,157,158,159,160,161,162,34,24,103,33,36,163,104,164,165,166,167,168],"docs reference check","check","reference check","reference","docs","links","python3","repo","drift","lint","wiring","chezmoi","references","cp",{"skillNo":170,"name":171,"nameZh":6,"description":172,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":173,"categories":174,"keywords":184,"publishedAt":44},"01M6C6NDE7DAQGNWSF22J5CJ0Z","youtube-upload","Upload a video to YouTube via the Data API v3 and edit its title, description, tags or thumbnail afterwards. Use when publishing or retitling a YouTube video.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fyoutube-plugin\u002Fskills\u002Fyoutube-upload\u002FSKILL.md",[175,178,179],{"categoryNo":176,"categoryName":177,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":90,"categoryName":91,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":180,"categoryName":181,"taxonomyType":182,"taxonomyTypeDesc":183},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[185,186,187,188,161,189,110,190,127,191,192,193,103,36,104,194,195,33,196,197,198,108,109],"youtube upload","upload","youtube","Video","run","uv run","publishing","data","uv","api","v3","tags","id","title",{"skillNo":200,"name":201,"nameZh":6,"description":202,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":203,"categories":204,"keywords":206,"publishedAt":44},"01M6C6NABWW1X58KJJM4F6GQMQ","youtube-studio-share","Share a private YouTube video with a whole Google Workspace organization by scripting YouTube Studio in the browser. Use when a video must be org-only.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fyoutube-plugin\u002Fskills\u002Fyoutube-studio-share\u002FSKILL.md",[205],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[207,208,209,210,187,188,211,212,213,214,215,110,216,217,218,219,103,220,33,106,221,109],"youtube studio share","share","youtube studio","studio","browser","javascript","scripting","google workspace","workspace","tool","google","only","MCP","chrome","organization"]