[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M735009FY0QZWYXWR7RTT0F9":3,"skill-same:01M735009FY0QZWYXWR7RTT0F9":51},{"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":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":30,"commitSha":31,"skillDirectory":32,"forksCount":33,"repositoryHtmlUrl":34,"repositoryHomepageUrl":35,"ownerHtmlUrl":36,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":37,"install":38,"resources":50},"01M735009FY0QZWYXWR7RTT0F9","claude-review-workflow",null,"Add or update claude-review workflow.","Morrison-Lab\u002Fai-config","Morrison-Lab","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F104235520?v=4","01M734G0451S2G35MN4HFQK7XP","Morrison Lab","01M734G059BYFDFQA8YTPDGPMH",4,"MIT","https:\u002F\u002Fgithub.com\u002FMorrison-Lab\u002Fai-config\u002Fblob\u002Fmain\u002Fskills\u002Fclaude-review-workflow\u002FSKILL.md",[],[],"2026-11-11 15:11:14",false,"---\nname: claude-review-workflow\ndescription: \"Add or update claude-review workflow.\"\nuser-invocable: true\nallowed-tools:\n  - Read\n  - Edit\n  - Write\n  - Bash\n---\n\n# claude-review-workflow\n\nSets up or edits the Claude PR **review** workflow (`.github\u002Fworkflows\u002Fclaude-code-review.yml` or `.github\u002Fworkflows\u002Fclaude-review.yml`),\nwhich delegates to the reusable [`claude-code-review.yml`](https:\u002F\u002Fgithub.com\u002FMorrison-Lab\u002Fgha\u002Fblob\u002Fv3\u002F.github\u002Fworkflows\u002Fclaude-code-review.yml) workflow from `Morrison-Lab\u002Fgha`.\nFor the **agent** workflow that edits files in response to `@claude` mentions,\nuse [`claude-agent-workflow`](..\u002Fclaude-agent-workflow\u002FSKILL.md).\n\nPath: `.github\u002Fworkflows\u002Fclaude-code-review.yml` (or `.github\u002Fworkflows\u002Fclaude-review.yml`)\n\n## Standard caller stub\n\n```yaml\nname: Claude Code Review\n\non:\n  pull_request:\n    types: [opened, synchronize, ready_for_review, reopened]\n  workflow_dispatch:\n    inputs:\n      pr_number:\n        description: 'Pull request number to review'\n        required: true\n        type: string\n\njobs:\n  gather-context:\n    runs-on: ubuntu-latest\n    permissions:\n      issues: read\n    outputs:\n      prior-reviews: ${{ steps.fetch.outputs.prior-reviews }}\n    steps:\n      - id: fetch\n        env:\n          GH_TOKEN: ${{ github.token }}\n          PR_NUMBER: ${{ github.event.pull_request.number || inputs.pr_number }}\n          REPO: ${{ github.repository }}\n        run: |\n          REVIEWS=$(gh api \"repos\u002F${REPO}\u002Fissues\u002F${PR_NUMBER}\u002Fcomments\" \\\n            --jq '[.[] | select(.user.login == \"claude[bot]\")] | .[-3:] |\n                  .[] | \"=== Review posted \\(.created_at) ===\\n\\(.body)\\n\"' \\\n            2>\u002Fdev\u002Fnull | head -c 12000 || true)\n          {\n            echo 'prior-reviews\u003C\u003C__REVIEWS_EOF__'\n            echo \"$REVIEWS\"\n            echo '__REVIEWS_EOF__'\n          } >> \"$GITHUB_OUTPUT\"\n\n  review:\n    needs: gather-context\n    permissions:\n      contents: read\n      pull-requests: write\n      issues: write\n      actions: read\n      checks: read\n    uses: Morrison-Lab\u002Fgha\u002F.github\u002Fworkflows\u002Fclaude-code-review.yml@v3\n    secrets:\n      CLAUDE_CODE_OAUTH_TOKEN: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}\n      ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}\n      SUBMODULES_TOKEN: ${{ secrets.SUBMODULES_TOKEN }}\n    with:\n      pr-number: ${{ github.event.pull_request.number || inputs.pr_number }}\n```\n\n## Load-bearing pieces (managed by `Morrison-Lab\u002Fgha`)\n\nBy delegating to `Morrison-Lab\u002Fgha\u002F.github\u002Fworkflows\u002Fclaude-code-review.yml@v3`,\nthe consumer repo automatically inherits:\n\n1. **History preservation**: Fresh review comment posted per run without deleting prior review history.\n2. **Inline comment prompt**: Pushes review findings toward line-anchored comments via `mcp__github_inline_comment__create_inline_comment`.\n3. **Dispatch and event-gating**: Handles both `pull_request` and `workflow_dispatch` triggers, with branch-anchored dispatch resolution.\n4. **Draft and fork guards**: Skips unready drafts, Dependabot PRs, and tokenless fork PRs while executing dispatched runs.\n5. **Concurrency & self-cancellation safety**: Concurrency group keyed per PR with `cancel-in-progress: true`.\n6. **Package customization**: Supports `apt-packages` and `pip-packages` (e.g. `maxima`, `sympy`) for CAS-driven mathematical verification when needed.\n7. **Prompt extensions**: Custom repo-level instructions passed via `prompt-addendum`.\n\n## Inputs and customization\n\n- `pr-number`: Required PR number passed from caller.\n- `prompt-addendum`: Repo-specific review instructions (e.g. Quarto\u002FR checks, domain invariants).\n- `apt-packages` \u002F `pip-packages`: Optional system\u002FPython packages for verification (e.g. CAS engines).\n- `setup-r`: Set `true` if R packages or renv environment need initialization during review.\n\n## Setting up in a new repo\n\n1. Confirm `CLAUDE_CODE_OAUTH_TOKEN` secret exists in repo\u002Forg secrets (`gh secret list`).\n2. Add the caller stub at `.github\u002Fworkflows\u002Fclaude-code-review.yml`.\n   Diff it against gha's `examples\u002Fclaude-code-review.yml` at the tag you pin, not against another consumer's caller:\n   see [`gha-reusable-workflows.md`](..\u002F..\u002Fmemories\u002Fgha-reusable-workflows.md)'s \"Template propagation hazard\".\n   If this is the repository's **first** workflow, the PR adding it cannot get a bot review:\n   see [`claude-review-dispatch.md`](..\u002F..\u002Fmemories\u002Fclaude-review-dispatch.md)'s first-workflow section.\n3. Ensure required permissions (`contents: read`, `pull-requests: write`, `issues: write`, `actions: read`, `checks: read`) and named secrets (`CLAUDE_CODE_OAUTH_TOKEN`, `ANTHROPIC_API_KEY`, `SUBMODULES_TOKEN`) are declared on the caller job.\n   Pass secrets explicitly rather than via `secrets: inherit`:\n   GitHub only inherits secrets into a reusable workflow owned by the same organization or user,\n   and naming secrets satisfies zizmor's default `secrets-inherit` rule so no ignore rule is needed in `.github\u002Fzizmor.yml`.\n4. Pass any project-specific guidance via `prompt-addendum`.\n   Fact-check it like a PR body, not less:\n   it is the standing instruction every future review runs under\n   (see [`fact-check-prose`](..\u002F..\u002Fshared\u002Fwriting\u002Ffact-check-prose.md)'s \"A prompt is a standing instruction\").\n\n## Relationship to other skills\n\n- [`claude-agent-workflow`](..\u002Fclaude-agent-workflow\u002FSKILL.md) — Companion skill for the interactive editing agent workflow.\n- [`upgrade-to-gha`](..\u002F..\u002Fshared\u002Fworkflow\u002Fupgrade-to-gha.md) — Migration guidelines for upgrading standalone workflows to `Morrison-Lab\u002Fgha`.\n- [`config-ai`](..\u002Fconfig-ai\u002FSKILL.md) — Router for AI workflow capability requests.\n","# claude-review-workflow\n\nSets up or edits the Claude PR **review** workflow (`.github\u002Fworkflows\u002Fclaude-code-review.yml` or `.github\u002Fworkflows\u002Fclaude-review.yml`),\nwhich delegates to the reusable [`claude-code-review.yml`](https:\u002F\u002Fgithub.com\u002FMorrison-Lab\u002Fgha\u002Fblob\u002Fv3\u002F.github\u002Fworkflows\u002Fclaude-code-review.yml) workflow from `Morrison-Lab\u002Fgha`.\nFor the **agent** workflow that edits files in response to `@claude` mentions,\nuse [`claude-agent-workflow`](..\u002Fclaude-agent-workflow\u002FSKILL.md).\n\nPath: `.github\u002Fworkflows\u002Fclaude-code-review.yml` (or `.github\u002Fworkflows\u002Fclaude-review.yml`)\n\n## Standard caller stub\n\n```yaml\nname: Claude Code Review\n\non:\n  pull_request:\n    types: [opened, synchronize, ready_for_review, reopened]\n  workflow_dispatch:\n    inputs:\n      pr_number:\n        description: 'Pull request number to review'\n        required: true\n        type: string\n\njobs:\n  gather-context:\n    runs-on: ubuntu-latest\n    permissions:\n      issues: read\n    outputs:\n      prior-reviews: ${{ steps.fetch.outputs.prior-reviews }}\n    steps:\n      - id: fetch\n        env:\n          GH_TOKEN: ${{ github.token }}\n          PR_NUMBER: ${{ github.event.pull_request.number || inputs.pr_number }}\n          REPO: ${{ github.repository }}\n        run: |\n          REVIEWS=$(gh api \"repos\u002F${REPO}\u002Fissues\u002F${PR_NUMBER}\u002Fcomments\" \\\n            --jq '[.[] | select(.user.login == \"claude[bot]\")] | .[-3:] |\n                  .[] | \"=== Review posted \\(.created_at) ===\\n\\(.body)\\n\"' \\\n            2>\u002Fdev\u002Fnull | head -c 12000 || true)\n          {\n            echo 'prior-reviews\u003C\u003C__REVIEWS_EOF__'\n            echo \"$REVIEWS\"\n            echo '__REVIEWS_EOF__'\n          } >> \"$GITHUB_OUTPUT\"\n\n  review:\n    needs: gather-context\n    permissions:\n      contents: read\n      pull-requests: write\n      issues: write\n      actions: read\n      checks: read\n    uses: Morrison-Lab\u002Fgha\u002F.github\u002Fworkflows\u002Fclaude-code-review.yml@v3\n    secrets:\n      CLAUDE_CODE_OAUTH_TOKEN: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}\n      ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}\n      SUBMODULES_TOKEN: ${{ secrets.SUBMODULES_TOKEN }}\n    with:\n      pr-number: ${{ github.event.pull_request.number || inputs.pr_number }}\n```\n\n## Load-bearing pieces (managed by `Morrison-Lab\u002Fgha`)\n\nBy delegating to `Morrison-Lab\u002Fgha\u002F.github\u002Fworkflows\u002Fclaude-code-review.yml@v3`,\nthe consumer repo automatically inherits:\n\n1. **History preservation**: Fresh review comment posted per run without deleting prior review history.\n2. **Inline comment prompt**: Pushes review findings toward line-anchored comments via `mcp__github_inline_comment__create_inline_comment`.\n3. **Dispatch and event-gating**: Handles both `pull_request` and `workflow_dispatch` triggers, with branch-anchored dispatch resolution.\n4. **Draft and fork guards**: Skips unready drafts, Dependabot PRs, and tokenless fork PRs while executing dispatched runs.\n5. **Concurrency & self-cancellation safety**: Concurrency group keyed per PR with `cancel-in-progress: true`.\n6. **Package customization**: Supports `apt-packages` and `pip-packages` (e.g. `maxima`, `sympy`) for CAS-driven mathematical verification when needed.\n7. **Prompt extensions**: Custom repo-level instructions passed via `prompt-addendum`.\n\n## Inputs and customization\n\n- `pr-number`: Required PR number passed from caller.\n- `prompt-addendum`: Repo-specific review instructions (e.g. Quarto\u002FR checks, domain invariants).\n- `apt-packages` \u002F `pip-packages`: Optional system\u002FPython packages for verification (e.g. CAS engines).\n- `setup-r`: Set `true` if R packages or renv environment need initialization during review.\n\n## Setting up in a new repo\n\n1. Confirm `CLAUDE_CODE_OAUTH_TOKEN` secret exists in repo\u002Forg secrets (`gh secret list`).\n2. Add the caller stub at `.github\u002Fworkflows\u002Fclaude-code-review.yml`.\n   Diff it against gha's `examples\u002Fclaude-code-review.yml` at the tag you pin, not against another consumer's caller:\n   see [`gha-reusable-workflows.md`](..\u002F..\u002Fmemories\u002Fgha-reusable-workflows.md)'s \"Template propagation hazard\".\n   If this is the repository's **first** workflow, the PR adding it cannot get a bot review:\n   see [`claude-review-dispatch.md`](..\u002F..\u002Fmemories\u002Fclaude-review-dispatch.md)'s first-workflow section.\n3. Ensure required permissions (`contents: read`, `pull-requests: write`, `issues: write`, `actions: read`, `checks: read`) and named secrets (`CLAUDE_CODE_OAUTH_TOKEN`, `ANTHROPIC_API_KEY`, `SUBMODULES_TOKEN`) are declared on the caller job.\n   Pass secrets explicitly rather than via `secrets: inherit`:\n   GitHub only inherits secrets into a reusable workflow owned by the same organization or user,\n   and naming secrets satisfies zizmor's default `secrets-inherit` rule so no ignore rule is needed in `.github\u002Fzizmor.yml`.\n4. Pass any project-specific guidance via `prompt-addendum`.\n   Fact-check it like a PR body, not less:\n   it is the standing instruction every future review runs under\n   (see [`fact-check-prose`](..\u002F..\u002Fshared\u002Fwriting\u002Ffact-check-prose.md)'s \"A prompt is a standing instruction\").\n\n## Relationship to other skills\n\n- [`claude-agent-workflow`](..\u002Fclaude-agent-workflow\u002FSKILL.md) — Companion skill for the interactive editing agent workflow.\n- [`upgrade-to-gha`](..\u002F..\u002Fshared\u002Fworkflow\u002Fupgrade-to-gha.md) — Migration guidelines for upgrading standalone workflows to `Morrison-Lab\u002Fgha`.\n- [`config-ai`](..\u002Fconfig-ai\u002FSKILL.md) — Router for AI workflow capability requests.\n",{"name":5,"description":7,"allowed-tools":24,"user-invocable":29},[25,26,27,28],"Read","Edit","Write","Bash",true,"main","f8f5ea79cc52e903c30773b5e264e384e715c4c7","skills\u002Fclaude-review-workflow",1,"https:\u002F\u002Fgithub.com\u002FMorrison-Lab\u002Fai-config","https:\u002F\u002Fmorrison-lab.github.io\u002Fai-config\u002F","https:\u002F\u002Fgithub.com\u002FMorrison-Lab","2026-11-12 06:23:19",{"source":8,"skillName":5,"commands":39,"prompt":49,"zipAvailable":29},[40,43,46],{"tool":41,"command":42},"npx","npx skills add Morrison-Lab\u002Fai-config --skill claude-review-workflow",{"tool":44,"command":45},"bunx","bunx skills add Morrison-Lab\u002Fai-config --skill claude-review-workflow",{"tool":47,"command":48},"pnpm","pnpm dlx skills add Morrison-Lab\u002Fai-config --skill claude-review-workflow","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FMorrison-Lab\u002Fai-config\u002Fblob\u002Fmain\u002Fskills\u002Fclaude-review-workflow\u002FSKILL.md",[],[52,59,66,73,80,87],{"skillNo":53,"name":54,"nameZh":6,"description":55,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":56,"categories":57,"keywords":58,"publishedAt":19},"01M735B6T9KP24YK73HZYS361B","triage","Triage backlog: P1\u002FP2\u002FP3 or close.","https:\u002F\u002Fgithub.com\u002FMorrison-Lab\u002Fai-config\u002Fblob\u002Fmain\u002Fskills\u002Ftriage\u002FSKILL.md",[],[],{"skillNo":60,"name":61,"nameZh":6,"description":62,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":63,"categories":64,"keywords":65,"publishedAt":19},"01M735ABCWNZ3WJKPC1ABJ7W8B","st","Start task issue-first.","https:\u002F\u002Fgithub.com\u002FMorrison-Lab\u002Fai-config\u002Fblob\u002Fmain\u002Fskills\u002Fst\u002FSKILL.md",[],[],{"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":19},"01M7355RRVTEEFJ16QVM86EK7X","mwc","Session merge grant with confidence gate.","https:\u002F\u002Fgithub.com\u002FMorrison-Lab\u002Fai-config\u002Fblob\u002Fmain\u002Fskills\u002Fmwc\u002FSKILL.md",[],[],{"skillNo":74,"name":75,"nameZh":6,"description":76,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":77,"categories":78,"keywords":79,"publishedAt":19},"01M7355JBSBYP7AQQ2165FJKBW","migrate-discussion","Move items between Issues and Discussions.","https:\u002F\u002Fgithub.com\u002FMorrison-Lab\u002Fai-config\u002Fblob\u002Fmain\u002Fskills\u002Fmigrate-discussion\u002FSKILL.md",[],[],{"skillNo":81,"name":82,"nameZh":6,"description":83,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":84,"categories":85,"keywords":86,"publishedAt":19},"01M73558FN1TYWMMRZYJQSTAK8","memorize","Persist memory across sessions.","https:\u002F\u002Fgithub.com\u002FMorrison-Lab\u002Fai-config\u002Fblob\u002Fmain\u002Fskills\u002Fmemorize\u002FSKILL.md",[],[],{"skillNo":88,"name":89,"nameZh":6,"description":90,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":93,"publishedAt":19},"01M7351KXGW9QTKQHH1HJFS4YF","defer-issue","File issue for deferred work.","https:\u002F\u002Fgithub.com\u002FMorrison-Lab\u002Fai-config\u002Fblob\u002Fmain\u002Fskills\u002Fdefer-issue\u002FSKILL.md",[],[]]