Skip to main content
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:
Expect verified: true, reason: "valid", and the login from the table above.

AI workflow App-token pattern

Every reusable AI workflow in JacobPEvans/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.
Consumers do not import the App credentials themselves. 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-side git 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 — App, user, or bot. Never anonymous. Decide auth:
  • App installation token (actions/create-github-app-token@v2) when commits must be attributed to JacobPEvans-claude[bot].
  • Default GITHUB_TOKEN when commits should be attributed to JacobPEvans-github-actions[bot].
  • GPG / SSH on the runner only when a workflow truly needs git commit on the runner (rebase, cherry-pick, generated patches that do not fit the Contents API). Document the exception inline.
Add a row to the identity table above; document operator setup in the consuming repo.

Canonical sources

Single source of truth — link from other repos rather than duplicating prose.

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.