One repo of reusable workflows. Consumer repos write thin callers, choose Claude or Codex once, and inherit workflow updates.
dryvist/ai-workflows ships reusable GitHub Actions workflows (on: workflow_call:). The workflow
orchestration, provider routing, and rate guards live there. Prompt text comes from the pinned
Prompt catalog. Consumers declare triggers and permissions.
Event-triggered workflows
These run on GitHub events. Wire one caller per workflow you want.
MERGED in git; NOT DEPLOYED: PR #465
(commit
95448fa) gives the post-merge docs review a shared reusable-workflow
alias. PR #463 fixes the
scheduler actor.
Scheduled workflows
These run on cron, typically called withschedule: and a manual workflow_dispatch:.
How a reusable caller looks
A reusable-workflow caller is the smallest YAML that declares a trigger, sets permissions, and forwards to the upstream:issue-resolver needs pull-requests: write, ci-fix needs
actions: read, and post-merge-* needs actions: write for the re-dispatch. The canonical caller
templates list the exact
permission block for each.
How prompts are loaded
The reusable workflows check out the catalog at its pinned release commit and select an asset fromautomation/.
They remove its OKF frontmatter before passing the prompt to the selected model. Local workflow YAML still owns
triggers, permissions, publishing, and provider configuration.
Versioning
Per Dependency automation, consumers pinai-workflows, and every dryvist/* reusable workflow, at @main, never a SHA or
version pin. The SemVer tags still exist (@v0.15.1), and release-please keeps bumping them for the
changelog and the per-run resolved-SHA audit trail. Callers ride @main instead, so upstream fixes land
immediately with no per-repo Renovate PR (the first-party immediate-propagation model). Every org
scanner is configured to allow @main. See scanner
posture.
Authentication
Reusable.yml workflows select the AI agent through one organization variable:
GH_ACTION_AI_AGENT=claude|codex. The default is claude, so existing
callers keep their current behavior. Set it to codex once at the organization,
repository, or environment level to switch every inherited workflow.
OAuth tokens are prohibited in unattended CI. A Claude Code subscription token (GitHub Agentic Workflows are retired. The catalog keeps one dormant reference template, but no active repository compiles or runs GH-AW Markdown. Provider details and model configuration live in AUTHENTICATION.md.CLAUDE_CODE_OAUTH_TOKEN) used inside a GitHub Actions workflow violates the Claude Code Terms of Service and risks an account ban. The subscription is intended for interactive sessions only. Use a standard API key (GH_ACTION_AI_API_KEY) instead; it is purpose-built for programmatic access with no ToS concerns.
Security boundary
The model job does not receive a privileged GitHub App token. It checks out code without persisted credentials and returns structured output or a workspace change. A separate publisher job validates that handoff and performs the requested GitHub write. This boundary keeps repository comments, labels, branches, commits, and pull requests deterministic. It also applies to both agents, so changingGH_ACTION_AI_AGENT does not change the workflow’s GitHub permissions.
The workflows also read GH_APP_CLAUDE_BOT_PRIVATE_KEY and GH_APP_CLAUDE_BOT_ID.
Where to go next
Getting started
Caller templates for every workflow, with the correct permission blocks.
Patterns
The post-merge dispatch pattern, bot guards, and other recurring shapes.
Authentication
Full
GH_ACTION_AI_* reference, provider routing, and model variables.Prompt catalog
Versioned OKF prompt assets and the immutable consumer pin.
Verification
The e2e runbook for checking a freshly-wired repo end to end.
Issue → PR pipeline on this repo
Exactly which six callers are wired on
JacobPEvans/docs and why.