github-workflows/skills/shared-workflow-org-refs/SKILL.md
Use when creating or editing GitHub Actions workflows that call reusable workflows (uses: OWNER/repo/.github/workflows/...) — org owner references must be the literal current org, and shared-CI homes are under dryvist.
npx skillsauth add jacobpevans/claude-code-plugins shared-workflow-org-refsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
GitHub Actions reusable-workflow and action uses: clauses are the one place the
"don't rewrite JacobPEvans/* on sight — the redirect holds" rule does NOT apply.
Two hard GitHub constraints:
uses: cannot contain expressions or variables — the owner is always a literal.
uses: ${{ vars.X }}/repo/...@ref is rejected. No org variable can centralize it.uses: does NOT follow repository transfer/rename redirects (by design). API, git, and the browser DO follow them; Actions does not.Consequence: when a shared-CI repo changes orgs, every consumer's uses: fails at parse time
(the run shows zero jobs and "workflow was not found"). There is no runtime variable that prevents this.
dryvist is the canonical home for everything dryvist uses. Anything a dryvist
repo consumes — reusable workflows, presets, policies — belongs under dryvist/*.
JacobPEvans-personal/* may depend on dryvist/*; dryvist/* must never depend
on JacobPEvans-personal/*. When a shared workflow is used by dryvist, its home is
dryvist/.github (or the relevant dryvist/* repo), not the personal account.
Because uses: does not follow redirects, reference each workflow by its literal
current owner from the table below until a pending relocation actually lands.
| Shared-CI workflow set | Current home | Status |
| --- | --- | --- |
| ai-workflows reusable workflows | dryvist/ai-workflows | canonical |
| Nix reusable workflows (_nix-validate.yml, _nix-build.yml) | dryvist/.github | canonical |
| Release-please (_release-please.yml) | dryvist/.github | canonical — org-native (dryvist release App, major-bump block, auto-merge) |
| _markdown-lint, _file-size, _osv-scan, _ci-gate, … | JacobPEvans-personal/.github | pending relocation to dryvist/.github |
Nix and release-please were deliberately relocated to dryvist/.github (the org owns
its own CI). The remaining non-Nix .github workflows are still in
JacobPEvans-personal/.github only until they are moved the same way — that is a
transitional home, not a permanent one. Repoint consumers via the sweep below as each
moves; do not move any back to the personal account.
uses:, always reference the literal current owner above.gh workflow run / checkout vars.* dispatcher
just to gain a variable: that loses required-check status, inputs/outputs, and secrets: inherit.{{#import ...}} references and compiled *.lock.yml files resolve at compile time
via the redirect — leave them to the don't-rewrite rule and gh-aw recompilation.gh search code 'OLD_OWNER/REPO' --owner dryvist (and --owner JacobPEvans-personal), filtered to .github/workflows/*.yml.uses: owner segment, preserving path and @ref; one PR per repo.*.lock.yml, {{#import}}, and docs.tools
Use when installing or choosing CLI tools in a Nix flake repo, editing flake.nix or home-manager config, or when tempted to pip/pipx/uv/brew/npm install anything. Tools come from the dev shell or nix shell — never ad-hoc package managers.
development
Use when adding or editing .pre-commit-config.yaml, wiring pre-commit hooks into a repo, scaffolding a new repo's lint/hook setup, or deciding where a hook or shared lint config should live. Covers the canonical nix-devenv/dryvist-.github architecture, profiles, and consumer patterns.
testing
Check PR merge readiness, sync local repo, cleanup stale worktrees; optional cross-repo sweep and stale-branch prune modes
tools
Local rebase-merge workflow for pull requests with signed commits