Every commit is signed. The path is always Contents API web-flow; the identity changes with the execution context.
required_signatures is enforced org-wide by Repository Rulesets on every protected branch. A
commit without a valid web-flow or GPG signature is rejected at the API. The five rows below are the
only ways to land a commit that satisfies the ruleset.
Identity per context
Verification for any commit:
verified: true, reason: "valid", and the login from the preceding table.
AI workflow App-token pattern
Every reusable AI workflow inJacobPEvans/ai-workflows mints a JacobPEvans-claude installation
token immediately before calling anthropics/claude-code-action@v1, then hands the token in as
github_token. The action’s use_commit_signing: true sends edits through the Contents API, which
web-flow-signs every commit and attributes it to whichever bot owns the token.
secrets-sync
distributes vars.GH_APP_CLAUDE_BOT_ID and secrets.GH_APP_CLAUDE_BOT_PRIVATE_KEY to every repo in
the *github_app_repos set. To add a new consumer repo: append it to that anchor in
JacobPEvans/secrets-sync/secrets-config.yml and re-run the distribution workflow.
The AI never constructs Contents API payloads itself. It edits files locally inside the workflow.
claude-code-action@v1 translates those edits into Contents API calls on commit. AI workflows enjoy
normal file-editing ergonomics without losing signed-commit attribution.
Deterministic GHA pattern
Workflows where no AI generates content use whichever marketplace action fits. They sign automatically as long as the action makes its commits through the Contents API rather than runner-sidegit commit.
Never build a custom Contents-API or Git-Data-API helper for content the runner can hand off to a trusted action.
Adding a new context
Pick a real identity, never an anonymous one: a GitHub App, a user, or a bot. Then pick the auth method:- App installation token (
actions/create-github-app-token@v2) when commits must be attributed toJacobPEvans-claude[bot]. - Default
GITHUB_TOKENwhen commits should be attributed toJacobPEvans-github-actions[bot]. - GPG / SSH on the runner only when a workflow truly needs
git commiton the runner (rebase, cherry-pick, generated patches that do not fit the Contents API). Document the exception inline.
Canonical sources
Single source of truth. Link from other repos rather than duplicating prose.- Architecture: this page
- Operator setup for cloud routines:
docs/CLOUD_ROUTINES_AUTH.mdinJacobPEvans/claude-code-routines - Local Mac identity values: a gitignored local file outside the repo, read by nix-home
- AI-action App-token pattern: the reusable workflows in
JacobPEvans/ai-workflows/.github/workflows/(issue-resolver, ci-fix, code-simplifier, post-merge-tests, post-merge-docs-review, final-pr-review) - Native cloud-routine pattern:
JacobPEvans/claude-code-routines/.github/workflows/issue-solver.yml - App credential distribution: the
secrets:block inJacobPEvans/secrets-sync/secrets-config.yml(GH_APP_CLAUDE_BOT_PRIVATE_KEY,GH_APP_CLAUDE_BOT_ID)
Where to go next
CI/CD policy
Marketplace actions, release-please, version pinning, runner choice.
secrets-sync
How the GitHub App credentials reach every consumer repo.
Golden laws
Why every commit is signed, audit-trail rules, MFA on elevated sessions.