Author, edit, compile, validate, and debug any OpenVINO gh-aw agentic workflow (e.g. ci-doctor, ci-doctor-mq, and any future ones) and their shared safe-output jobs under .github/workflows/shared/agentic-workflows. Use when a user wants to create a new agentic workflow; change an existing one's prompt, triggers, tools, permissions, or safe-outputs; add or edit a shared job/step; recompile a .lock.yml; update a workflow's persisted-state JSON schemas; or test a workflow via workflow_dispatch. Do NOT use for regular (non-agentic) GitHub Actions workflows, plugin/runtime code, or diagnosing a specific live CI failure.
Guides changes to any gh-aw agentic workflow in this repository and its shared jobs — not just
the ones that exist today. New agentic workflows are expected to be added over time; treat every
.github/workflows/*.md file with gh-aw frontmatter (on:, engine:, safe-outputs:, etc.) as in
scope for this skill.
Read docs/dev/ci/github_actions/agentic_workflows.md first — it documents the workflows that exist today (ci-doctor, ci-doctor-mq, ci-doctor-post-commit) in
detail: what they are, how they are built, their algorithms, and the shared jobs. Treat it as the
worked example of the concepts in this skill, and keep it up to date (see the Skill
self-improvement section below) whenever a new agentic workflow is added or an existing one changes
meaningfully.
For the framework itself, consult the official GitHub Agentic Workflows (gh-aw) documentation — the authoritative reference for frontmatter
keys, imports, safe-outputs, tools, and the gh aw compile workflow.
.github/workflows/*.md with a gh-aw YAML frontmatter (on:, engine:,
safe-outputs:, tools:, ...) — as opposed to a plain .yml workflow.<name>.md compiles to a generated <name>.lock.yml in the same
directory. This is what GitHub Actions actually runs..github/workflows/shared/agentic-workflows/*.md. There are two kinds:
permissions:, steps);
the actual logic lives in standalone Python scripts under .github/scripts/agentic-workflows/*.py
(one per job, plus a shared common.py). A shared job step sparse-checks-out that scripts
directory and runs its script.ci-doctor-*.md) carry shared prompt text parameterised with an
import-schema; importers pass their flavour via uses:/with: and
${{ github.aw.import-inputs.<key> }} is substituted at compile time in both frontmatter and body.
They may also carry flavour-dependent frontmatter (tools.repo-memory, post-steps).ci-doctor.md (on-demand PR investigator), ci-doctor-mq.md (automatic
merge-queue investigator), ci-doctor-post-commit.md (automatic post-commit investigator,
report-only — never re-runs/re-queues), and ci-doctor-remediation.md (weekly/workflow_dispatch
maintenance job that consumes the two doctors' knowledge base read-only and opens up to 3 draft
remediation PRs plus a Markdown report artifact). The two automatic investigators share their whole
protocol via the ci-doctor-investigation-protocol.md / ci-doctor-knowledge-base.md /
ci-doctor-reporting.md prompt fragments; their own bodies hold only workflow-specific addenda.
ci-doctor-remediation.md reuses the collect-ci-doctor-history.md step fragment
(collect_ci_doctor_history.py) to pre-download the recent knowledge base. Do not assume this is the
complete list — check .github/workflows/*.md for the current set of gh-aw sources, since more
will be added over time..lock.yml by hand. It is generated. Edit the .md source (or an imported shared
file), then recompile. If a user skips recompilation, tell them to recompile themselves before committing..lock.yml file directly. It is a generated artifact; the source .md is the authoritative description of the workflow..md source or imported file:
gh aw compile.md and the regenerated .lock.yml together in the same change.if: condition
(an actor allow-list, a specific event/conclusion combination, a slash command, etc.). Do not loosen
a guard without explicit intent — re-read the workflow's own description of how it is
invoked/triggered first.safe-outputs as the only side-effect boundary. The agent itself must never be granted
permission to directly comment, notify, merge, or otherwise mutate shared state — that must go
through a safe-outputs job with its own narrowly-scoped permissions:..github/workflows/<name>.md with gh-aw frontmatter (on:, permissions:, engine:,
network:, tools:, safe-outputs:, imports: as needed) and a natural-language body describing
the mission and investigation/action protocol..github/workflows/shared/agentic-workflows/ instead of
duplicating logic (for example log pre-download, notification jobs) — add a new shared file only for
genuinely new, reusable behavior.permissions: and the smallest safe-outputs surface it needs.gh aw compile) and commit the .md and the generated .lock.yml together..md source. If the text you want to change lives in
a shared ci-doctor-*.md prompt fragment, edit it there (once) — never re-add a diverging copy
to a workflow body. Flavour-dependent wording goes behind an import-schema input; behaviour that
applies to a single workflow goes in that workflow's own body (the "Workflow-Specific Instructions"
section, which the shared fragments tell the agent to read and prefer on conflict).on:/if:, re-read that workflow's own "how it is invoked/triggered" description
(in the doc, or in the workflow's frontmatter comment) to keep the guard semantics correct..github/scripts/agentic-workflows/<name>.py
(shared helpers in common.py) — edit the Python there.permissions:, which script runs, step order) lives in the
shared .md under .github/workflows/shared/agentic-workflows/ — edit that, then recompile.on: and is prepended to importers; a safe-output job lives under
safe-outputs.jobs:.imports: and that its body instructs the
agent when to call the new safe output.permissions: it needs..md changed).permissions, steps) in a shared file (or inline if genuinely single-use),
import it, and document in the workflow body exactly when the agent may emit it and any valid
combinations with other safe outputs. Remember: all numeric-looking safe-output fields must be
passed as strings (see pitfalls).Some agentic workflows persist structured JSON state across runs (for example via the repo-memory
tool). If a workflow you're changing does this:
.github/ci-doctor-mq/schemas/)..md body so the agent writes
conforming artifacts.python3 -c "import jsonschema, json, sys; jsonschema.validate(json.load(open(sys.argv[1])), json.load(open(sys.argv[2])))" sample.json path/to/schema.jsonGeneral, applies to any agentic workflow:
gh aw compile and stage the .lock.yml?pr_number, counts) must be a quoted
string, never a bare number, unless the field is explicitly typed otherwise.permissions: than it
needs?Known pitfalls from existing workflows (check whether they still apply, and add new ones as you find them — see below):
ci-doctor-mq) — Adaptive Cards render a limited subset; use ~~~ (tilde)
fences for log excerpts, no raw HTML (<details>, <br>, <table>).ci-doctor-mq) — the pattern hash must stay job-agnostic (normalized error +
category, no job name), or recurrence counting breaks.ci-doctor) — must never write under /tmp/gh-aw/repo-memory/default/;
only ci-doctor-mq (branch memory/ci-doctor-mq) and ci-doctor-post-commit (branch
memory/ci-doctor-post-commit) write to their own memory branches.notify-teams.md) — the shared Teams job is used by both ci-doctor-mq and
ci-doctor-post-commit; each must pass the source input (merge_queue / post_commit) so the
card shows the right [MQ] / [PC] badge and uploads the correctly-named statistics artifact.TEAMS_WEBHOOK_URL,
MERGE_QUEUE_TOKEN); the default GITHUB_TOKEN cannot re-trigger merge_group runs.ci-doctor-*.md fragments) — gh-aw inlines imported bodies before the
workflow's own body, in imports: order; workflow-specific text can therefore only follow the shared
protocol, never interleave with it. Keep the name: frontmatter key so the fragment's H1 does not
rename the workflow, and never leave a ${{ github.aw.import-inputs.* }} key unsupplied — every
import-schema input is required, so gh aw compile fails on a missing with: value.This skill must evolve alongside the agentic workflows it describes. Whenever you make a change that reveals a new rule, reusable pattern, shared job, or footgun, update this file (and its mirror, see below) before finishing:
.claude/skills/ov-agentic-workflows/SKILL.md
for tool compatibility. When you edit one copy, apply the identical edit to the other so they never
drift apart.2219c2f
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.