Permissions
A called reusable workflow cannot hold more GITHUB_TOKEN permissions than the caller grants, and most repos default to a read-only token. So workflows that need to write must have the caller grant it on the calling job. The stubs in examples/ already include the right permissions: blocks; copy them as-is.
Per-workflow grants
check-bibliography-dois,check-non-standard-chars,check-phineed onlycontents: read(the default), so nopermissions:block is needed.check-linksopens an issue onmainfailures, so grantissues: write,pull-requests: read,contents: read.summarycomments on issues and calls the models API, so grantissues: write,models: read,contents: read.update-snapshotspushes the snapshot-update commit back to the branch, so grantcontents: write.quarto-publishdeploys to thegh-pagesbranch, so grantcontents: write, and set Settings -> Pages -> Source to “Deploy from a branch”, branchgh-pages/(root)once. Grantcontents: writeeven withdeploy: false: the deploy job is part of the workflow, so the caller must grant its permissions even when it is skipped.preview(build half, read-only) needs onlycontents: read(the default).preview-deploy(deploy half) pushesgh-pagesand comments, so grantcontents: write,pull-requests: write,actions: read.cleanup-pr-previewscommits deletions togh-pages, so grantcontents: write,pull-requests: read.bump-submodule,sync-shared-fragments,sync-upstreamopen a PR, so grantcontents: write,pull-requests: write, and enable Settings -> Actions -> General -> “Allow GitHub Actions to create and approve pull requests”.report-failurefiles or updates the issue tracking a failing workflow, so grantissues: writeon the reporting job – and nothing else. It performs no checkout, so it needs nocontentsgrant; the job it watches keeps its own permissions.claudepushes branches, opens PRs, and dispatches the review workflow, so grantcontents: write,pull-requests: write,issues: write,id-token: write,actions: write, and add either theCLAUDE_CODE_OAUTH_TOKENorANTHROPIC_API_KEYsecret.claude-code-review(read-only review) grantscontents: read,pull-requests: write,issues: write,id-token: write, and either theCLAUDE_CODE_OAUTH_TOKENorANTHROPIC_API_KEYsecret.request-dependabot-reviewrequests a reviewer on the PR, so grantpull-requests: write.bump-dev-versionopens (or auto-merges) a PR, so grantcontents: write,pull-requests: write, enable the same “Allow GitHub Actions to create and approve pull requests” setting as above, and (for its defaultauto-merge: true) “Allow auto-merge” too.version-checkis read-only, so grant onlypull-requests: read,contents: read.
Optional secrets
WORKFLOW_TOKEN(a PAT or GitHub App token withcontents:write+workflows:write). The integratedGITHUB_TOKENcannot push changes to files under.github/workflows/; GitHub rejects them without theworkflowsscope. Add this secret ifclaudewill edit workflow files, or to push to a protected branch. UnlikeGITHUB_TOKEN, a PAT or App-token push does trigger otherpush-based workflows, so enabling it can set off extra CI runs. When the secret is absent andclaudedoes edit a workflow file, the rejected push is reported as an error naming this secret, and the commits are posted to the thread as agit format-patchso they survive the run.SUBMODULES_TOKEN. Public submodules clone anonymously; private ones need this secret. Relevant toclaude,claude-code-review, andbump-submodulewhencheckout-submodules(or the submodule update) touches a private submodule.
Notes for private consumers
Reusable workflows in this public repo are callable from public repos automatically. A private consumer must allow access to this repo under Settings -> Actions -> General -> Access before it can call these workflows.