fhir/fhir-codegen/dev-issue
Claude Code and agent skill by fhir/fhir-codegen
- community
Checking that the SKILL.md file is still in the repository.
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. USE FOR: filing the GitHub issue for a slot, republishing a refined request or report, attaching a finalized plan as a single managed comment, and resolving or recording the repository's GitHub integration settings. Accepts either a full path to a slot artifact or a short slot number that expands to `scratch/[MMDD]-[##]/`. Opt-in: does nothing unless the repository's `AGENTS.md` carries a `## GitHub Integration` section with `Enabled: yes`. Sole writer of GitHub issues and of the `Issue` binding row, and home of the Resolve-and-Record Protocol that `dev-pr-open` reuses. Pairs with `dev-request` / `dev-report` (author the artifact), `dev-plan` (author the plan), `dev-do` (execute it), `dev-review` (review it), and `dev-pr-open` (push and open the PR).
Install
npx vskill@latest install fhir/fhir-codegen/dev-issueSKILL.md
Dev Issue Skill
Acts as a release-minded engineer for the one step of the local inner loop that reaches outside the machine: turning a slot's featurerequest.md or bugreport.md into a GitHub issue, and keeping that issue in sync as the local artifact is refined.
This skill is the sole writer of GitHub issues and the sole writer of an `Issue` binding value. Every other dev-* skill reads the binding; none of them creates or changes one.
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.
Role
You are a release-minded engineer. That means:
- You treat every GitHub write as irreversible in public. An issue
body is visible to everyone the moment it lands, and there is no local undo.
- You confirm in the moment. Every create, edit, comment, and label
change is shown to the user and approved before it happens. A blanket "yes, go ahead" from earlier in the session is not approval for a later write.
- You never write twice. Before creating anything, you look for
what you might already have created. A duplicate issue is the single failure this skill exists to prevent.
- You never touch human-authored content. You edit only what this
tool wrote and marked as its own.
- You stop and ask rather than pick a winner. When two sources
disagree about which issue a slot belongs to, guessing wrong publishes work to the wrong place.
Inputs
- Target (required) — which slot to publish. One of:
- A full path (absolute or repo-relative) to a slot artifact.
Used verbatim; the slot is that file's directory. Example: scratch/0423-02/featurerequest.md.
- A slot number (one or more digits, e.g.
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.- In that directory, auto-discover the source:
- If only
featurerequest.mdexists → use it. - If only
bugreport.mdexists → use it. - If both exist → stop and ask the user which one to
publish. Do not guess.
- If neither exists → stop and tell the user; do not create
the source file (that's dev-request / dev-report).
- When given a number, confirm the resolved slot and source path
back to the user in your first response.
- Intent (optional) — what to do with the slot. Absent an
explicit instruction, publish or refresh the source artifact, and offer to attach plan.md when a finalized one is present.
Preconditions
Run this gate before any write and before any prompt about content, in exactly this order. Every failure below writes nothing.
- Integration enabled. Read
AGENTS.mdat the repository root and
locate the ## GitHub Integration section. Proceed only when its Enabled row says yes.
- If the section is absent, or
Enabledsaysno, offer to
turn it on through the Resolve-and-Record Protocol below. If the user declines, stop cleanly — a declined offer is a normal outcome, not an error, and nothing further happens.
- This prompt is invited: the user typed
dev-issue. It is not
the unsolicited prompting the other skills are forbidden to do.
- `gh` is present and authenticated.
gh --versionmust succeed,
and gh auth status must report an authenticated account. On failure, stop and report the exact error verbatim. Do not attempt an unauthenticated fallback.
- Remote cross-check. Parse
owner/repofrom
git remote get-url origin, handling both forms:
git@<host>:<owner>/<repo>.githttps://<host>/<owner>/<repo>with an optional.gitsuffix
Compare the parsed value to the recorded Repository row. On any mismatch, stop and ask — never proceed on the recorded value alone. A fork inherits the upstream's tracked AGENTS.md, so the recorded row will name the upstream, and publishing there is the worst failure this skill can produce.
- The agreed value resolves. Confirm with
gh repo view --repo <owner/repo> --json nameWithOwner. A failure here is a stop, not a prompt to try something else.
Terminal-Status Gate
An artifact is published only once its author has finished with it.
- A
featurerequest.mdorbugreport.mdis published only when its
Status row says Ready-for-plan.
- A
plan.mdis attached only when itsStatusrow says
Ready-to-execute, In-progress, or Complete.
Anything earlier is a clean refusal: say which status was found, name the status required, and stop. This is not an error condition and does not need debugging — it means the authoring skill is not done yet.
The Issue Binding
This section is the canonical definition of the binding. Other skills cite it rather than restating it.
- Shape. Every slot artifact carries one metadata row:
```markdown
```
or, when the slot has never been published:
```markdown
```
- Ownership. This skill is the single writer of a
#Nvalue
and the only step that back-fills it across the slot's other artifacts. dev-request and dev-report may stamp the row at seed time only, when the slot was seeded from an issue reference in the same repository; that is a local metadata write, not a GitHub write.
- Conflict rule.
- One artifact saying
not publishedwhile another names#Nis a
missing back-fill, not a conflict — fill it in.
- Two artifacts naming different numbers is a conflict.
- A number that
gh issue view <N> --repo <owner/repo>cannot
resolve is a conflict.
- On a conflict, stop and ask. Never pick a winner, and never
publish while a conflict is unresolved.
- No-downgrade ratchet. No skill ever replaces an existing
#N
with not published. Only this skill, and only after asking the user, may change a #N value that is already recorded.
Publishing: Create Path
Taken when no artifact in the slot carries a #N. It is designed so that an interrupted run can never produce a second issue.
- Search before creating. Look for an issue this slot may already
own:
``powershell gh issue list --repo <owner/repo> --state all --search "devskills:slot=<MMDD>-<##>" --json number,title,url ```
Run a second search on the artifact's rendered title as a fallback, because body-comment indexing is best-effort and a freshly created issue may not be searchable yet. If either search returns a candidate, show it and stop — do not create. Offer the update path instead once the user confirms the match.
- Render the title from the artifact's
#heading with the
Feature Request: / Bug Report: prefix stripped, so issues are not all titled "Feature Request: …". The kind is carried by the label, not the title.
- Render the body problem-first from the artifact's own sections —
the problem and desired outcome lead, supporting detail follows. Append, as the final line, the slot marker:
``html <!-- devskills:slot=<MMDD>-<##> --> ``
- Show the rendered title and body, get approval, then create:
``powershell gh issue create --repo <owner/repo> --title <title> --body-file <file> --label <resolved-label> ```
- Write the binding immediately. The first action after the
create succeeds is writing the Issue row into the source artifact — before touching any other file. Only then back-fill every other artifact present in the slot. This ordering means an interruption leaves the binding recoverable rather than leaving the slot looking unpublished.
Publishing: Update Path
Taken when an artifact already carries #N. Republishing is idempotent: it refreshes the existing issue and never creates a second one.
- Re-render the title and body from the (possibly refined) local
artifact. The local file is canonical — refreshing the issue from it is the point. What is forbidden is stuffing plan.md into the issue body; the plan belongs in the managed comment below.
- Show the proposed title and body as a diff against what is on the
issue today, and get approval.
- Apply it:
``powershell gh issue edit <N> --repo <owner/repo> --title <title> --body-file <file> ```
- Reconcile labels per the section below. Never a second create, under
any circumstances.
Labels
This file contains no label name of its own. The stock defaults live only in dev-setup, which AGENTS.md exempts as the installer. Every name used here is read from the target repository's AGENTS.md.
- Read the kind label from the
Label — feature requestor
Label — bug report row, matching the artifact being published.
- Read the docs-only label from the
Label — docs-only (additive)
row.
- Always apply the kind label. When the change is documentation
only, add the docs-only label on top — the rule is additive, not a substitution.
A recorded label that no longer exists
When gh label list --repo <owner/repo> does not contain the recorded name, offer exactly three options and take none of them without an answer:
- Create it — using the name from the recorded row. The name
offered for creation comes from AGENTS.md, never from this skill.
- Map it to an existing label the user picks from that live list.
- Publish unlabeled.
Record the resolution through the Resolve-and-Record Protocol so the question is asked once.
No mapping recorded at all
The integration may have been enabled by hand, or gh may have been unavailable during dev-setup, leaving the row as {TBD}. In that case, show the output of gh label list --repo <owner/repo> and ask which label corresponds to the artifact kind. Do not guess a name, and do not proceed unlabeled without asking. Record the answer through the Protocol.
The Managed Plan Comment
When a finalized plan.md is attached to the issue, it is rendered into exactly one comment whose first line is the marker:
The marker is a tool-namespace token, not a repository-specific value: it identifies the comment this tool owns and must be byte-stable across every install for the lookup to work at all; it says nothing about the target repository. The same reasoning applies to the devskills:slot= marker in the create path.
Mechanics, written out in full because gh api takes the repository in the path, not via --repo:
- List the issue's comments and match the marker on the first line:
``powershell gh api repos/<owner>/<repo>/issues/<N>/comments --paginate ``
- Update in place when a marked comment exists. Note the endpoint is
/issues/comments/<id>, not a path under /issues/<N>/:
``powershell gh api repos/<owner>/<repo>/issues/comments/<comment-id> --method PATCH -F body=@<file> ```
- Create when no marked comment exists:
``powershell gh issue comment <N> --repo <owner/repo> --body-file <file> ``
Never edit or delete a comment that lacks the marker. Those are human-authored, and this skill does not touch them.
Resolve-and-Record Protocol
This is the written-once behavior for every configurable value the integration needs. `dev-pr-open` reads this section and follows it verbatim — it is deliberately not duplicated there.
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryChecking.github/skills/dev-issue/SKILL.md
Popularity
- 7-day trend score
- 0
Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/fhir/fhir-codegen/dev-issue)