[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M734ZY9H952MCS6NXAGHAZ10":3,"skill-same:01M734ZY9H952MCS6NXAGHAZ10":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},"01M734ZY9H952MCS6NXAGHAZ10","claude-agent-workflow",null,"Add or update claude.yml 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-agent-workflow\u002FSKILL.md",[],[],"2026-11-11 15:11:14",false,"---\nname: claude-agent-workflow\ndescription: \"Add or update claude.yml workflow.\"\nuser-invocable: true\nallowed-tools:\n  - Read\n  - Edit\n  - Write\n  - Bash\n---\n\n# claude-agent-workflow\n\nSets up or edits the `@claude` agent GitHub Actions workflow (`.github\u002Fworkflows\u002Fclaude.yml` or `.github\u002Fworkflows\u002Fclaude-bot.yml`),\nwhich delegates to the reusable [`claude.yml`](https:\u002F\u002Fgithub.com\u002FMorrison-Lab\u002Fgha\u002Fblob\u002Fv3\u002F.github\u002Fworkflows\u002Fclaude.yml) workflow from `Morrison-Lab\u002Fgha`.\nFor the read-only **PR review** workflow,\nuse [`claude-review-workflow`](..\u002Fclaude-review-workflow\u002FSKILL.md).\n\nPath: `.github\u002Fworkflows\u002Fclaude.yml` (or `.github\u002Fworkflows\u002Fclaude-bot.yml`)\n\n## Standard caller stub\n\n```yaml\nname: Claude Code\n\non:\n  issue_comment:\n    types: [created]\n  pull_request_review_comment:\n    types: [created]\n  # `opened` is safe: the callee's mention-filter runs detect-bot-mention on\n  # issue body and title and stands down on a quoted mention (gha#554).\n  # `assigned` fires only when the issue body or title also mentions the bot\n  # and the issue author is trusted -- or add a dispatch-on-assignee clause\n  # below AND pass the dispatch-on-assignee input (see gha examples\u002Fclaude.yml).\n  issues:\n    types: [opened, assigned]\n  pull_request_review:\n    types: [submitted]\n\njobs:\n  claude:\n    # Caller-side trusted-author gate, copied from gha examples\u002Fclaude.yml at\n    # the pinned tag: an untrusted mention never invokes a workflow that holds\n    # write permissions and secrets. Re-diff against the example on every bump.\n    if: |\n      (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude') && contains(fromJSON('[\"OWNER\",\"MEMBER\",\"COLLABORATOR\"]'), github.event.comment.author_association)) ||\n      (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude') && contains(fromJSON('[\"OWNER\",\"MEMBER\",\"COLLABORATOR\"]'), github.event.comment.author_association)) ||\n      (github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude') && contains(fromJSON('[\"OWNER\",\"MEMBER\",\"COLLABORATOR\"]'), github.event.review.author_association)) ||\n      (github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')) && contains(fromJSON('[\"OWNER\",\"MEMBER\",\"COLLABORATOR\"]'), github.event.issue.author_association))\n    permissions:\n      contents: write\n      pull-requests: write\n      issues: write\n      id-token: write\n      actions: write\n    uses: Morrison-Lab\u002Fgha\u002F.github\u002Fworkflows\u002Fclaude.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      WORKFLOW_TOKEN: ${{ secrets.WORKFLOW_TOKEN }}\n    with:\n      setup-r: false\n      eager-pr: true\n      review-workflow-file: claude-review.yml\n```\n\n## Load-bearing pieces (managed by `Morrison-Lab\u002Fgha`)\n\nBy delegating to `Morrison-Lab\u002Fgha\u002F.github\u002Fworkflows\u002Fclaude.yml@v3`,\nthe consumer repo automatically inherits:\n\n1. **Bot-actor filtering**: Evaluates mention triggers (`@claude`) on comments, reviews, and assigned issues while filtering out bot-generated loops.\n2. **Concurrency serialization**: Per-issue\u002FPR concurrency with `cancel-in-progress: false` to avoid clobbering concurrent in-flight agent pushes.\n3. **Late-comment polling**: Scans for comments arriving during execution so long-running sessions drain multi-comment bursts.\n4. **Post-push review triggering**: Captures head SHAs before and after execution;\n   if changes were pushed, automatically requests review and dispatches the review workflow.\n5. **Tool permission sandboxing**: Restricts allowed CLI tools (`gh` read commands, `git`, build tools) and enforces secure WebFetch domain allowlisting.\n6. **Threaded inline replies**: Automatically posts responses as threaded inline replies when triggered by pull request review comments.\n7. **Environment and secret propagation**: Handles private submodules (`SUBMODULES_TOKEN`) and optional domain tokens (`EPI202_TOKEN`).\n\n## Inputs and customization\n\n- `setup-r`: Initialize R toolchain and renv package cache (`true` for R packages \u002F Quarto R repos).\n- `eager-pr`: Open a draft PR up front when claiming an issue (`true` by default).\n- `review-workflow-file`: Name of the companion review workflow file (e.g. `claude-review.yml` or `claude-code-review.yml`).\n- `use-ai-config`: Automatically load `ai-config` agent instructions (defaults to `true`, set `false` for `Morrison-Lab\u002Fai-config` itself).\n- `apt-packages` \u002F `pip-packages`: Additional build or analysis packages.\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.yml`.\n   Diff it against gha's `examples\u002Fclaude.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\".\n3. Ensure required permissions (`contents: write`, `pull-requests: write`, `issues: write`, `id-token: write`, `actions: write`) and named secrets (`CLAUDE_CODE_OAUTH_TOKEN`, `ANTHROPIC_API_KEY`, `SUBMODULES_TOKEN`, `WORKFLOW_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. Configure appropriate inputs (`setup-r`, `review-workflow-file`, etc.).\n\n## Relationship to other skills\n\n- [`claude-review-workflow`](..\u002Fclaude-review-workflow\u002FSKILL.md) — Companion skill for the automated PR review 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-agent-workflow\n\nSets up or edits the `@claude` agent GitHub Actions workflow (`.github\u002Fworkflows\u002Fclaude.yml` or `.github\u002Fworkflows\u002Fclaude-bot.yml`),\nwhich delegates to the reusable [`claude.yml`](https:\u002F\u002Fgithub.com\u002FMorrison-Lab\u002Fgha\u002Fblob\u002Fv3\u002F.github\u002Fworkflows\u002Fclaude.yml) workflow from `Morrison-Lab\u002Fgha`.\nFor the read-only **PR review** workflow,\nuse [`claude-review-workflow`](..\u002Fclaude-review-workflow\u002FSKILL.md).\n\nPath: `.github\u002Fworkflows\u002Fclaude.yml` (or `.github\u002Fworkflows\u002Fclaude-bot.yml`)\n\n## Standard caller stub\n\n```yaml\nname: Claude Code\n\non:\n  issue_comment:\n    types: [created]\n  pull_request_review_comment:\n    types: [created]\n  # `opened` is safe: the callee's mention-filter runs detect-bot-mention on\n  # issue body and title and stands down on a quoted mention (gha#554).\n  # `assigned` fires only when the issue body or title also mentions the bot\n  # and the issue author is trusted -- or add a dispatch-on-assignee clause\n  # below AND pass the dispatch-on-assignee input (see gha examples\u002Fclaude.yml).\n  issues:\n    types: [opened, assigned]\n  pull_request_review:\n    types: [submitted]\n\njobs:\n  claude:\n    # Caller-side trusted-author gate, copied from gha examples\u002Fclaude.yml at\n    # the pinned tag: an untrusted mention never invokes a workflow that holds\n    # write permissions and secrets. Re-diff against the example on every bump.\n    if: |\n      (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude') && contains(fromJSON('[\"OWNER\",\"MEMBER\",\"COLLABORATOR\"]'), github.event.comment.author_association)) ||\n      (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude') && contains(fromJSON('[\"OWNER\",\"MEMBER\",\"COLLABORATOR\"]'), github.event.comment.author_association)) ||\n      (github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude') && contains(fromJSON('[\"OWNER\",\"MEMBER\",\"COLLABORATOR\"]'), github.event.review.author_association)) ||\n      (github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')) && contains(fromJSON('[\"OWNER\",\"MEMBER\",\"COLLABORATOR\"]'), github.event.issue.author_association))\n    permissions:\n      contents: write\n      pull-requests: write\n      issues: write\n      id-token: write\n      actions: write\n    uses: Morrison-Lab\u002Fgha\u002F.github\u002Fworkflows\u002Fclaude.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      WORKFLOW_TOKEN: ${{ secrets.WORKFLOW_TOKEN }}\n    with:\n      setup-r: false\n      eager-pr: true\n      review-workflow-file: claude-review.yml\n```\n\n## Load-bearing pieces (managed by `Morrison-Lab\u002Fgha`)\n\nBy delegating to `Morrison-Lab\u002Fgha\u002F.github\u002Fworkflows\u002Fclaude.yml@v3`,\nthe consumer repo automatically inherits:\n\n1. **Bot-actor filtering**: Evaluates mention triggers (`@claude`) on comments, reviews, and assigned issues while filtering out bot-generated loops.\n2. **Concurrency serialization**: Per-issue\u002FPR concurrency with `cancel-in-progress: false` to avoid clobbering concurrent in-flight agent pushes.\n3. **Late-comment polling**: Scans for comments arriving during execution so long-running sessions drain multi-comment bursts.\n4. **Post-push review triggering**: Captures head SHAs before and after execution;\n   if changes were pushed, automatically requests review and dispatches the review workflow.\n5. **Tool permission sandboxing**: Restricts allowed CLI tools (`gh` read commands, `git`, build tools) and enforces secure WebFetch domain allowlisting.\n6. **Threaded inline replies**: Automatically posts responses as threaded inline replies when triggered by pull request review comments.\n7. **Environment and secret propagation**: Handles private submodules (`SUBMODULES_TOKEN`) and optional domain tokens (`EPI202_TOKEN`).\n\n## Inputs and customization\n\n- `setup-r`: Initialize R toolchain and renv package cache (`true` for R packages \u002F Quarto R repos).\n- `eager-pr`: Open a draft PR up front when claiming an issue (`true` by default).\n- `review-workflow-file`: Name of the companion review workflow file (e.g. `claude-review.yml` or `claude-code-review.yml`).\n- `use-ai-config`: Automatically load `ai-config` agent instructions (defaults to `true`, set `false` for `Morrison-Lab\u002Fai-config` itself).\n- `apt-packages` \u002F `pip-packages`: Additional build or analysis packages.\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.yml`.\n   Diff it against gha's `examples\u002Fclaude.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\".\n3. Ensure required permissions (`contents: write`, `pull-requests: write`, `issues: write`, `id-token: write`, `actions: write`) and named secrets (`CLAUDE_CODE_OAUTH_TOKEN`, `ANTHROPIC_API_KEY`, `SUBMODULES_TOKEN`, `WORKFLOW_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. Configure appropriate inputs (`setup-r`, `review-workflow-file`, etc.).\n\n## Relationship to other skills\n\n- [`claude-review-workflow`](..\u002Fclaude-review-workflow\u002FSKILL.md) — Companion skill for the automated PR review 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-agent-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-15 04:39:15",{"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-agent-workflow",{"tool":44,"command":45},"bunx","bunx skills add Morrison-Lab\u002Fai-config --skill claude-agent-workflow",{"tool":47,"command":48},"pnpm","pnpm dlx skills add Morrison-Lab\u002Fai-config --skill claude-agent-workflow","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FMorrison-Lab\u002Fai-config\u002Fblob\u002Fmain\u002Fskills\u002Fclaude-agent-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},"01M7359QPSB0GMXCG2RB0V34YY","send-notes","Send content to Morrison-Lab notes repos.","https:\u002F\u002Fgithub.com\u002FMorrison-Lab\u002Fai-config\u002Fblob\u002Fmain\u002Fskills\u002Fsend-notes\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},"01M735ADD75T5N3CYSMV3PKZN7","stack-prs","Stack dependent PR on another.","https:\u002F\u002Fgithub.com\u002FMorrison-Lab\u002Fai-config\u002Fblob\u002Fmain\u002Fskills\u002Fstack-prs\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},"01M7353JY4NDFPQEMYDBJSTYGC","finish-wave","Finish the current wave; start no new one.","https:\u002F\u002Fgithub.com\u002FMorrison-Lab\u002Fai-config\u002Fblob\u002Fmain\u002Fskills\u002Ffinish-wave\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},"01M734Y0XAAEAWM3J2X7JFDZSM","advisor","Read-only second opinion from a different model family.","https:\u002F\u002Fgithub.com\u002FMorrison-Lab\u002Fai-config\u002Fblob\u002Fmain\u002Fskills\u002Fadvisor\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},"01M73593BZ33TKTNBDX8JNKYN8","resolve-conflicts","Resolve merge conflicts.","https:\u002F\u002Fgithub.com\u002FMorrison-Lab\u002Fai-config\u002Fblob\u002Fmain\u002Fskills\u002Fresolve-conflicts\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},"01M73584TVDWNA1HMAQ8XXGSZV","rec","Provide recommendations for choices.","https:\u002F\u002Fgithub.com\u002FMorrison-Lab\u002Fai-config\u002Fblob\u002Fmain\u002Fskills\u002Frec\u002FSKILL.md",[],[]]