Skip to main content
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 with schedule: 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:
Permission shape varies per workflow. 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 from automation/. 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 pin ai-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 (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.
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.

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 changing GH_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.