Create issue
Create GitHub issues with org-level type, Priority, Effort, and custom fields via the REST API. Use when asked to "create an issue", "file an issue", or "open an issue".From its SKILL.md
npx -y skills add deessejs/skills --skill create-issueAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
8.6 KB, ~2.2k tokens by cl100k_base, as published. Nobody here has run it
create-issue Skill
Create GitHub issues with org-level type, Priority, and Effort fields via the REST API. Falls back to plain gh issue create if no structured fields are needed.
Note: This skill creates issues. It does not triage them. After creation, use
/triage #Nto verify, deduplicate, categorize, and set the final Priority/Effort/Type values.
When to use
Use this skill whenever the user asks to create an issue, file an issue, or open an issue. The skill decides whether a simple gh issue create suffices or whether gh api with structured fields is needed.
Trigger phrases: "create an issue", "file an issue", "open an issue", "add an issue", "create a ticket".
Org-fields are the source of truth
Priority, Effort, and Type are set via org-level fields (API), not labels. The /triage skill will review and adjust these values after creation — the values set here are initial estimates, not final assessments.
How it works
Step 1 — Resolve field IDs (once per org, cached in memory)
The org's issue_field IDs are stable for <org> (see the verified table below) but should be re-fetched if a call ever fails with an unknown-field error:
MSYS_NO_PATHCONV=1 MSYS2_ARG_CONV_EXCL='*' \
gh api -H "X-GitHub-Api-Version: 2026-03-10" \
"https://api.github.com/orgs/<org>/issue-fields"
Parse the response to build a map of { fieldName → { id, options: { optionName → id } } }.
Known gotcha (Windows/Git Bash): URLs are rewritten as filesystem paths and get mangled — the leading https:// alone is not enough. You must prefix the command with MSYS_NO_PATHCONV=1 MSYS2_ARG_CONV_EXCL='*'. Without it, gh api fails with a Cygwin add_item ... failed, errno 1 fatal error. Apply this prefix to every gh api call in this skill.
Step 2 — Create the issue
Use gh issue create for title, body, labels, and milestone (it handles Markdown rendering, @mention parsing, and label validation).
Then enrich it with type + issue_field_values via PATCH.
Step 3 — Apply type + fields
gh api via --input - with a JSON body:
MSYS_NO_PATHCONV=1 MSYS2_ARG_CONV_EXCL='*' \
gh api -X PATCH "https://api.github.com/repos/<org>/<repo>/issues/{n}" \
-H "X-GitHub-Api-Version: 2026-03-10" \
--input - <<EOF
{
"type": "Task",
"issue_field_values": [
{"field_id": <Priority_field_id>, "value": "Medium"},
{"field_id": <Effort_field_id>, "value": "Medium"}
]
}
EOF
Known gotchas:
-fand-Fdo NOT work forissue_field_values(they send a string, not an array). Must use--input -with a heredoc.valuefor single-select fields is the option name as a string (e.g."Medium","High","Low"). The numeric option ID is wrong — the API rejects it with"must be a string option name". Always use the text name, resolved from the GET above.typeis a string name (e.g."Task","Bug","Feature"), not an ID.- Both
typeandissue_field_valuescan be set in the same PATCH call.
Prompt the user for
Before creating, confirm:
- Title — short, imperative, prefixed with conventional type (
feat:,fix:,chore:,ci:,refactor:,docs:). - Body — structured with at minimum: Description, Why, Acceptance criteria (checkboxes), Related (links to PRs/docs), Risks (if any).
- Labels — from the existing set only (
gh label list). Do NOT create new labels unless asked. - Type —
Task,Bug, orFeature(org-level, set viatypein PATCH). - Priority —
Urgent,High,Medium, orLow(option name, resolved from org fields via GET). - Effort —
High,Medium, orLow(option name, resolved from org fields via GET).
If the user only provides a title, use reasonable defaults: Task / Medium / Medium.
Note:
/triagewill review and adjust these values after creation if needed.
Repo context — <repo>
Repo: github.com/<org>/<repo> — default branch main. Org: <org>.
Issue types (verified via API — set via type in PATCH, by name string):
Task— a specific piece of workBug— an unexpected problem or behaviorFeature— a request, idea, or new functionality
Issue fields (verified via API — numeric IDs, set via issue_field_values):
| Field | field_id | Options |
|---|---|---|
| Priority | <field_id> | Urgent, High, Medium, Low |
| Effort | <field_id> | High, Medium, Low |
| Start date | <field_id> | ISO date string |
| Target date | <field_id> | ISO date string |
(Replace <field_id> with the actual IDs from your org's issue-fields endpoint. Always PATCH with the name string, not the numeric option ID.)
Labels available in this repo
Labels are repo-level (set via --label in gh issue create). This repo uses a prefix: value scheme with a space after the colon. Do NOT create new labels unless the user explicitly asks.
type: * — nature of the work
type: feature— New featuretype: chore— General maintenance / tooling / depstype: docs— Documentationtype: refactor— Refactoring / code restructuringtype: bug— Bug / defect fixtype: security— Security fix
status: * — workflow state
status: triage— Tech Lead hasn't seen it yetstatus: ready— Validated by Tech Lead, ready to pick upstatus: needs-info— Ticket is incomplete, dev can't work on itstatus: in-progress— A dev is working on itstatus: in-review— In Code Reviewstatus: blocked— Depends on another task or decision
Cross-cutting
breaking-change— affects public API surfacegithub_actions— related to CI/CDdependencies— dependency update requestversion bump— marks a PR for release version bump
GitHub defaults (keep)
bug, enhancement, documentation, duplicate, invalid, question, wontfix, good first issue, help wanted
Templates available
Issue templates live in .github/ISSUE_TEMPLATE/:
bug_report.yml— "Report something that is not working correctly", title[BUG], labels:bugfeature_request.yml— "Suggest a new feature or improvement", title[FEATURE], labels:enhancementdocs_request.yml— "Propose new / updated documentation", title[Docs]:, labels:type: docs,status: triagerefactor_request.yml— "Propose a code/architecture refactoring", title[Refactor]:, labels:type: refactor,status: triagetask.yml— "General maintenance / tooling / deps", title[Chore]:, labels:type: chore,status: triage
config.yml disables blank issues. Do NOT create a blank issue; use the templates or the structured gh api flow.
Templates preferred for this repo
When a user asks to create an issue, use this structured format (not a blank issue):
- Bug →
bug_report.yml - Feature request →
feature_request.yml - Docs →
docs_request.yml - Refactor →
refactor_request.yml - Task / chore →
task.yml - Anything else / needs custom fields → structured PATCH via
gh api(see Step 3 above)
Output
After creation, confirm with a one-liner: issue number, title, type, Priority, Effort, and the URL.
Error Handling
| Situation | Action |
|---|---|
| Org-field GET returns 404 | Report to user — org may not have Issue Fields enabled |
| Field value rejected | Verify option name matches the org-field definition; re-fetch if needed |
| PR creation fails | Check labels are valid, then retry |
Constraints
- Prefix every
gh apicall withMSYS_NO_PATHCONV=1 MSYS2_ARG_CONV_EXCL='*'(Windows Git Bash path-rewrite bug). - Use
--input -forissue_field_valuesarray — not-for-F. - Priority values:
Urgent,High,Medium,Low. Effort values:High,Medium,Low. Type values:Task,Bug,Feature. - Do NOT use label names that don't exist — check
gh label listfirst. - Priority, Effort, Type are set via org-fields (API), NOT via labels.
- Do NOT open blank issues — always use the template picker or the structured API flow.
- Replace
<org>,<repo>,<field_id>,<team>placeholders with your actual values.
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.