Verdaccio Pull Request Workflow
verdaccio/verdaccio
Takes a change through a verdaccio pull request: branch, local checks, changeset, title and body, labels, CI and review rounds, and ports to other release lines.
Turns committed local work into a pushed branch and an opened pull request, in the role of a release engineer.
$ npx skills add FHIR/fhir-codegen --skill dev-pr-open -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install FHIR/fhir-codegen dev-pr-open --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/FHIR/fhir-codegen.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.github/skills/dev-pr-open .claude/skills/dev-pr-open && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "dev-pr-open" agent skill from https://github.com/FHIR/fhir-codegen/tree/main/.github/skills/dev-pr-open into .claude/skills/dev-pr-open/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dev-pr-open", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/FHIR/fhir-codegen/tree/main/.github/skills/dev-pr-openType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add FHIR/fhir-codegen --skill dev-pr-open -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install FHIR/fhir-codegen dev-pr-open --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/FHIR/fhir-codegen.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.github/skills/dev-pr-open .agents/skills/dev-pr-open && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "dev-pr-open" agent skill from https://github.com/FHIR/fhir-codegen/tree/main/.github/skills/dev-pr-open into .agents/skills/dev-pr-open/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dev-pr-open", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add FHIR/fhir-codegen --skill dev-pr-open -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install FHIR/fhir-codegen dev-pr-open --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/FHIR/fhir-codegen.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.github/skills/dev-pr-open .cursor/skills/dev-pr-open && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "dev-pr-open" agent skill from https://github.com/FHIR/fhir-codegen/tree/main/.github/skills/dev-pr-open into .cursor/skills/dev-pr-open/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dev-pr-open", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/FHIR/fhir-codegen.git --path .github/skills/dev-pr-open--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add FHIR/fhir-codegen --skill dev-pr-open -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install FHIR/fhir-codegen dev-pr-open --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/FHIR/fhir-codegen.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.github/skills/dev-pr-open .gemini/skills/dev-pr-open && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "dev-pr-open" agent skill from https://github.com/FHIR/fhir-codegen/tree/main/.github/skills/dev-pr-open into .gemini/skills/dev-pr-open/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dev-pr-open", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install FHIR/fhir-codegen dev-pr-openInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add FHIR/fhir-codegen --skill dev-pr-open -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/FHIR/fhir-codegen.git skills-src && mkdir -p .github/skills && cp -r skills-src/.github/skills/dev-pr-open .github/skills/dev-pr-open && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "dev-pr-open" agent skill from https://github.com/FHIR/fhir-codegen/tree/main/.github/skills/dev-pr-open into .github/skills/dev-pr-open/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dev-pr-open", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add FHIR/fhir-codegen --skill dev-pr-open -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install FHIR/fhir-codegen dev-pr-open --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/FHIR/fhir-codegen.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.github/skills/dev-pr-open .opencode/skills/dev-pr-open && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "dev-pr-open" agent skill from https://github.com/FHIR/fhir-codegen/tree/main/.github/skills/dev-pr-open into .opencode/skills/dev-pr-open/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dev-pr-open", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
dev-pr-openTurns committed local work into a pushed branch and an opened pull request, in the role of a release engineer.
Dev PR Open is an agent skill from FHIR/fhir-codegen. Turns committed local work into a pushed branch and an opened pull request, in the role of a release engineer. USE FOR: the last step of the local inner loop — pushing the current branch, drafting and confirming the PR body, adding changelog entries when the repository has one, and referencing every bound issue so the PR closes them. Runs in one of two scopes: slot mode, given a full path to a slot's plan.md or a short slot number that expands to scratch/[MMDD]-[]/; or branch mode, the default when no slot is…
Its SKILL.md is about 5.4k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Development, covering Pull requests and Changelog and release notes. It works with GitHub. The repository describes itself as: Tools for code generation based on the FHIR specification. The licence is MIT.
2 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit b5f97c7. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
gitghFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git and gh, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Dev PR Open loads about 5.4k tokens when it runs. Until then it costs about 253 tokens; SKILL.md has 3,107 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from FHIR/fhir-codegen at commit b5f97c7, republished under its MIT licence (© FHIR). 3,107 words, ~5,390 tokens.
.claude/skills/dev-pr-open/SKILL.md (or your agent's skills folder).Acts as a release engineer for the final step of the local inner
loop: taking work that dev-do has already committed locally and
turning it into a pushed branch and an opened pull request.
It runs in one of two scope modes, and every section below is written against both:
plan.md. Use it when a branch carries exactly one unit of work.This is the only skill permitted to git push or to open a pull
request. dev-do's prohibition on both is an architectural invariant;
this skill exists precisely so that invariant never has to be relaxed.
It is opt-in and off by default. When the repository's AGENTS.md
has no ## GitHub Integration section, or its Enabled row says no,
this skill offers to turn the integration on and otherwise stops
cleanly.
You are a release engineer. That means:
Scope (optional) — what to publish. One of:
Slot mode, selected by naming a slot:
plan.md. Used verbatim; the slot is that file's directory.2, 02, 14).
Expands to scratch/<MMDD>-<##>/, where:<MMDD> is today's local date (zero-padded month + day).<##> is the slot number, always zero-padded to two digits.plan.md does not exist, stop and tell the user.Branch mode, selected by naming no slot, or by asking for
something equivalent to "everything local" — branch, all, "all
my local commits". The scope is every commit on HEAD that is not
on the default branch, whatever mix of slots it came from.
When the user names nothing, branch mode is the default. Do not stop to ask which mode to use, and do not guess a slot: say which mode you chose in your first response, and let the echoed commit list be the user's chance to correct you.
Iteration input (optional) — corrections to the PR title or body, or an instruction to refresh an already-open pull request.
Before resolving any configurable value, open
.github/skills/dev-issue/SKILL.md, read its
## Resolve-and-Record Protocol section, and follow it verbatim.
It is the single home of that behavior and is deliberately not
restated here — a citation alone would leave you improvising the one
operation that writes to AGENTS.md.
If that file is absent, stop. Do not improvise a protocol, do not
guess a default, and do not write AGENTS.md.
Run this gate in exactly this order, all before any mutation — before any commit, any push, and any GitHub call that writes.
Integration enabled. Read AGENTS.md at the repository root and
locate the ## GitHub Integration section. Proceed only when its
Enabled row says yes. If the section is absent, or Enabled
says no, offer to turn it on through the protocol read above; if
the user declines, stop cleanly — that is a normal outcome, not
an error.
gh is present and authenticated. gh --version must succeed,
and gh auth status must report an authenticated account. On
failure, stop and report the exact error verbatim.
Remote cross-check. Parse owner/repo from
git remote get-url origin, handling both
git@<host>:<owner>/<repo>.git and
https://<host>/<owner>/<repo> with an optional .git suffix.
Compare it to the recorded Repository row. On any mismatch,
stop and ask. A fork inherits the upstream's tracked
AGENTS.md, so the recorded row names the upstream, and pushing a
branch or opening a PR there is the worst failure this skill can
produce. This is the same check dev-issue performs.
Clean index. git diff --cached --quiet must exit 0. A
non-empty index is a hard stop: leave it exactly as found and
report it. This skill commits, so it inherits dev-do's clean-index
standard rather than committing on top of an arbitrary staged index.
Hard fail — HEAD is the default branch. Resolve the default
branch two ways and require them to agree:
git symbolic-ref --quiet --short refs/remotes/origin/HEAD(strip the leading origin/), and, on failure:
gh repo view --repo <owner/repo> --json defaultBranchRef `
-q .defaultBranchRef.nameIf the two disagree, or neither resolves, stop and ask. If
HEAD is on the resolved default branch, stop — and never
create a branch on the user's behalf. Branch creation is the
user's decision. Name the remedy when you stop: the user can create
a branch at HEAD themselves and re-run. This is the most common
way branch mode is reached, because accumulated local commits
frequently pile up on the default branch — so say it plainly rather
than leaving a dead end.
Hard fail — no commits in scope. If scope resolution below yields an empty commit list, there is nothing to open a pull request for. Stop and say so.
Warn and ask — uncommitted work in scope. The dirtiness domain always matches the scope domain, so that "clean" means the same thing as "published":
dev-do's
standard: every literal owned path of every phase, tracked and
untracked, staged and unstaged.git status --porcelain), because the whole branch is what is
being published and no narrower path set is defensible.Modified tracked paths in that domain always trigger the ask. Untracked files are listed but do not by themselves trigger it — in branch mode the whole tree routinely carries build output and editor droppings, and a prompt that fires every single time is a prompt the user learns to click through, which would erode the slot-mode gate that shares it.
When it triggers, show what is dirty and ask whether to proceed anyway. Proceeding is the user's explicit call, not your default.
Uses the same COMMIT-entry parsing as dev-review's plan-slot
scope, so the two skills agree about which commits a slot produced.
Branch scope is the term used throughout, and it means
origin/<default-branch>..HEAD — exactly the range the pull request
itself will contain. Refresh the remote-tracking ref explicitly first,
because an opportunistic fetch does not reliably create a ref a
single-branch clone never had:
git fetch origin `
+refs/heads/<default-branch>:refs/remotes/origin/<default-branch>If that fails, stop and report it. Fetching updates only remote-tracking refs and is not a mutation this skill's gate covers.
Deliberately not @{u}..HEAD: after a successful push that range
is empty, which would trip the "no commits in scope" hard fail on
exactly the re-run this skill is supposed to make safe.
Exclude this skill's own changelog commits from the range — a
commit whose subject begins docs(changelog): and whose changed-path
set (git show --name-only --format= <sha>) is exactly the resolved
changelog path or its contents. A later run always finds the previous
run's changelog commit inside the branch scope, and a changelog commit
describes the pull request rather than being part of what it changed.
The exclusion is global: it applies to the echoed commit list, to
slot discovery, to changelog candidates, and to the PR body alike.
Branch mode resolves to the branch scope, full stop.
Slot mode resolves as:
plan.md's ## Progress Log and collect the SHA from every
COMMIT entry. Ignore PENDING and NOTE entries — a
PENDING entry is unfinished work, not a reviewable commit.COMMIT entries, say so and switch to
branch mode — slot discovery, precondition 7's branch-mode
dirtiness domain, and branch-mode body assembly then all apply.
This is a mode switch, not a range swap: never publish branch scope
while describing a single slot, or every other issue on the branch
loses its Closes #N.Branch mode has no single plan handed to it, so it finds the slots that produced its commits rather than assuming there is one. Once the commit list is resolved:
scratch/*/plan.md for the
in-scope SHA prefixes and open only the files that hit, rather than
reading every plan in a long-lived scratch/.## Progress Log and collect the
SHAs of its COMMIT entries. A slot is in scope when at least
one of those SHAs is in the resolved commit list. Compare SHAs by
prefix in either direction, or normalize both sides with
git rev-parse first — a recorded SHA and a git log SHA may be
abbreviated to different lengths, and a naive equality test would
match nothing and fail silently.Issue: #N trailer from the in-scope
commits, and every #N from the Issue row of every in-scope
slot's artifacts. Their union is the set of issues this pull
request closes.Issue: #N trailers, group by trailer instead and name the issue
in place of the slot. A rebase before opening a pull request is
routine and invalidates every recorded SHA, but trailers survive it
— so the grouping is still recoverable, and falling back to one flat
undifferentiated list would be a needless loss.Discovery is best-effort and never a gate. Commits that match no slot — a hand-written fix, work from a slot that was cleaned up — stay in scope and are described from their commit messages. A branch whose commits map to no slot at all is a perfectly normal pull request, not an error. Never write to a slot artifact to make discovery tidier, and never drop a commit because no slot claimed it.
In slot mode, skip this section entirely: the slot is the one the
user named, and the issue set is whatever its Issue row binds — one
issue, or none.
Resolve the Changelog file and Changelog entry format rows through
the protocol read above. Detection candidates to propose, in this
order, are the conventional locations:
CHANGELOG.mdCHANGES.mddocs/CHANGELOG.md.changeset/ directorychangelog.d/ directoryNone of these is a value. Each is a candidate the protocol proposes,
confirms, and records; a repository that keeps its changelog elsewhere
answers with its own path. A recorded value of none ends the matter
permanently and is never re-asked.
When a changelog is configured:
Decide what needs an entry. Slot mode has one change to describe. Branch mode has one per in-scope slot, plus one for any coherent group of slotless commits — a branch that closed three issues earns three entries, not one entry that buries two of them.
Give every candidate a stable anchor before comparing anything: the slot id for a slot candidate, the covered commits' short SHAs for a slotless one. Dedupe on the anchor, never on the issue number and never on the drafted subject. An issue number over-matches — two slots bound to the same issue would silently collapse to one entry — and a model-authored subject will not be reproduced verbatim by a later run, so it would duplicate instead.
Drop the candidates whose anchor is already present in the resolved file (or directory). If every candidate is already there, skip this whole section. This is what makes a re-run after a failed push safe, and in branch mode it is also what makes a re-run after adding one more slot add only the new entry.
Draft the remaining entries in the recorded format and show them together.
On approval, make exactly one path-limited commit for all of them:
git commit --only -- <changelog-path>When the resolved changelog is a directory, its entries are new
untracked files and --only will not pick them up: git add them
first, then commit with the same pathspec.
Use a docs(changelog): … subject, carrying every trailer
AGENTS.md requires, plus one Issue: #N trailer per distinct
issue in scope. Omit the trailer entirely when nothing is bound.
This is the skill's only commit, in either mode — several entries still means one commit. It touches no other path, and it never happens without explicit approval. A later run recognizes it and drops it from the branch scope, per the exclusion rule in Commit Scope Resolution.
git push -u origin HEADNever a force variant of any kind — neither the plain one nor the lease-guarded one. Never push any ref other than the branch currently checked out. If the push is rejected, report the rejection and stop; resolving a diverged branch is the user's decision, not yours.
Always look for an existing open pull request on this branch first:
gh pr list --repo <owner/repo> --head <branch> --state open `
--json number,urlFound → update it in place. Never a second create.
gh pr edit <n> --repo <owner/repo> --body-file <file>Pass --title as well when the title has changed.
Not found → create it:
gh pr create --repo <owner/repo> --base <default-branch> `
--head <branch> --title <title> --body-file <file> --draftOpen as a draft unless the PR opens as draft row is recorded as
no.
In slot mode, build it from, in order:
featurerequest.md / bugreport.md).plan.md.Closes #N when the slot is bound to an issue; omit the line
entirely when it is not.In branch mode, the same material exists once per in-scope slot, so build it as:
Closes #N line per distinct issue from the union resolved
in Slot Discovery, each on its own line, so merging closes all of
them. Omit the block entirely when the union is empty.Never collapse several issues into one Closes line, and never pick a
"primary" issue and drop the rest — an unreferenced issue silently
stays open after merge.
Show the assembled title and body and get approval before either call.
Closes #N reference lets GitHub do
that at merge time; this skill does not close anything itself.analysis.md or approach*.md. Review
findings and rejected solution shapes are internal artifacts; they do
not belong in a public PR body. The prohibition is on the files —
Body assembly step 2 lifts plan.md's ## Approach section into
the body as it always has, because that section is dev-plan's own
prose. When analysis.md is absent — for the named slot in slot
mode, or for any in-scope slot in branch mode — recommend running
dev-review against it first, naming which slots lack one. A
recommendation, never a gate.<MMDD> for a numeric slot. For an earlier slot, the user must give
a full path.Closes #N. Branch mode
routinely spans several issues; dropping one leaves it open after
merge.dev-do still never pushes and never opens a pull request. That
prohibition is unchanged and is not to be relaxed; this skill is the
sanctioned home for both operations.featurerequest.md,
bugreport.md, plan.md, analysis.md, or approach*.md. The
Issue binding belongs to dev-issue — if a slot is unbound and the
user wants it bound, point them at dev-issue rather than writing a
number yourself.dev-do.gh write. Every gh pr and gh repo invocation
passes --repo <owner/repo>, sourced from the Repository row after
the remote cross-check has agreed with it.AGENTS.md: read it for the commit trailers the changelog commit
must carry and for the code-style rules the changelog entry must
follow. If it is absent, fall back to README.md /
CONTRIBUTING.md and state which source you used — but note that an
absent AGENTS.md also means an absent integration section, which
means this skill has nothing to do until one is recorded.© FHIR, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .github/skills/dev-pr-open of FHIR/fhir-codegen.
Open the folder on GitHubat commit b5f97c7
Dev PR Open next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Dev PR Open this skillFHIR/fhir-codegen | 154 | — | ~5.4k | Automated safety check: Pass | MIT | |
| Verdaccio Pull Request Workflowverdaccio/verdaccio | 18k | — | ~1.9k | Automated safety check: Pass | MIT | |
| Plannotator Release Preparationbacknotprop/plannotator | 9.2k | — | ~4.6k | Automated safety check: Pass | Apache-2.0 | |
| Ansible Pull Request Reviewansible/ansible | 71k | — | ~570 | Automated safety check: Pass | GPL-3.0 | |
| Plane Release Notes Generatormakeplane/plane | 60k | — | ~2.5k | Automated safety check: Pass | AGPL-3.0 | |
| Pair GitHub PRNVIDIA/Personal-AI-Router | 1.6k | — | ~1.3k | Automated safety check: Pass | Apache-2.0 |
verdaccio/verdaccio
Takes a change through a verdaccio pull request: branch, local checks, changeset, title and body, labels, CI and review rounds, and ports to other release lines.
backnotprop/plannotator
Drafts Plannotator release notes with full contributor credit, bumps versions in dependency order, builds, and starts the tag-driven release pipeline, in four reviewed phases.
ansible/ansible
Reviews an Ansible pull request by number, following the steps in the project's CLAUDE.md, with early checks for changelog fragments and tests.
makeplane/plane
Builds categorized release notes for a Plane release pull request from its commits and writes them into the PR description, for both the plane-cloud and plane-ee repos.
NVIDIA/Personal-AI-Router
Fills GitHub pull request descriptions with the required PAIR pair-release-intent:v1 block so the release-intent check passes.
handsontable/handsontable
Decides whether a code change needs a changelog entry and creates the JSON file in .changelogs with the right type, framework and user-facing title.
FHIR/fhir-codegen
Publishes a slot's feature request or bug report to GitHub as an issue, and keeps that issue in sync, in the role of a release-minded engineer.
FHIR/fhir-codegen
Drafts and iterates on local-development bug reports in the role of a staff-level Tech Lead.
FHIR/fhir-codegen
Drafts and iterates on local-development feature requests in the role of a staff-level Product Manager.
FHIR/fhir-codegen
Performs a two-track code-quality and QA review in the roles of a staff-level Engineering Lead and QA Lead, then synthesizes both critiques into a single analysis.md.
FHIR/fhir-codegen
Explores three competing solution shapes for one request in the roles of three isolated staff-level Engineering Leads, then has a fourth skeptical judge sub-agent select one on the record.
FHIR/fhir-codegen
Drives the entire local inner loop in one invocation, as a conductor over the skills that own each role.
Works with
Categories
Turns committed local work into a pushed branch and an opened pull request, in the role of a release engineer. Dev PR Open is an agent skill from FHIR/fhir-codegen. Turns committed local work into a pushed branch and an opened pull request, in the role of a release engineer.
Dev PR Open fits situations like: : the last step of the local inner loop — pushing the current branch; drafting and confirming the PR body; adding changelog entries when the repository has one; referencing every bound issue so the PR closes them.
Run `npx skills add FHIR/fhir-codegen --skill dev-pr-open -a claude-code`. Or copy the skill folder (.github/skills/dev-pr-open in FHIR/fhir-codegen) into .claude/skills/dev-pr-open in your project. Claude Code loads it when a task matches its description.
Run `npx skills add FHIR/fhir-codegen --skill dev-pr-open -a codex`. Or copy the skill folder (.github/skills/dev-pr-open in FHIR/fhir-codegen) into .agents/skills/dev-pr-open in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add FHIR/fhir-codegen --skill dev-pr-open -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/dev-pr-open, .gemini/skills/dev-pr-open, .github/skills/dev-pr-open and .opencode/skills/dev-pr-open in your project.
Going by SKILL.md and its folder, Dev PR Open needs the command-line tools its instructions call (git and gh).
SKILL.md contains no URLs. Its commands use git and gh, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Dev PR Open is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 5.4k tokens (SKILL.md is roughly 22k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Dev PR Open: Verdaccio Pull Request Workflow (verdaccio/verdaccio, 18k stars), Plannotator Release Preparation (backnotprop/plannotator, 9.2k stars), Ansible Pull Request Review (ansible/ansible, 71k stars) and Plane Release Notes Generator (makeplane/plane, 60k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
FHIR (a GitHub organization) maintains it in FHIR/fhir-codegen, which has 154 GitHub stars. The repository holds 9 skills in this directory. The repository was last updated on August 30, 2026.
Source: FHIR/fhir-codegen on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.