一键导入
ghpm-issue
File a GitHub issue and add it to the project board. Works mid-session or standalone. Reads .ghpm/config.json for repo list and project.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
File a GitHub issue and add it to the project board. Works mid-session or standalone. Reads .ghpm/config.json for repo list and project.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Initialize GitHub Project Management config. Auto-discovers project schema (fields, views, repos) and generates .ghpm/config.json + .ghpm/cache.json.
Shared reference for all ghpm skills — prerequisites, config format, startup sequence, and error handling.
GitHub Project health dashboard. Shows workflow distribution, component health, team workload, items needing attention, and available views.
Suggest what to work on next based on project state and session context. Considers proximity, momentum, status, and constraints.
Query GitHub Project items by named view or ad-hoc filter. Shows items in board, table, or roadmap format.
End-to-end work session on a GitHub Project item. Setup → Clarify → Plan → Implement → PR, with decisions captured throughout. Use when starting work on an issue, picking up a task, or resuming an interrupted session.
| name | ghpm-issue |
| description | File a GitHub issue and add it to the project board. Works mid-session or standalone. Reads .ghpm/config.json for repo list and project. |
| argument-hint | [title] |
| allowed-tools | Bash(gh:*), Bash(git:*), Read, Grep, Glob |
| compatibility | Requires gh CLI authenticated with read:project and project scopes |
| metadata | {"author":"jackchuka","scope":"generic","confirms":["create GitHub issues"]} |
PREREQUISITE: Read
../ghpm-shared/SKILL.mdfor prerequisites and error handling.
File a GitHub issue and add it to the project board in one step. Works mid-session (during ghpm-work) or standalone.
/ghpm-issue — interactive: asks for title and body/ghpm-issue <title> — uses argument as issue title, asks for optional bodyStartup sequence: Follow the startup sequence in ../ghpm-shared/SKILL.md. This loads config, refreshes cache if stale, and checks for stale sessions.
Extract from config:
config.project — id, owner, number, titleconfig.repos — eligible repositoriesconfig.workflow — columns, field_idconfig.fields — project fields with name, id, type, optionsconfig.conventions — natural language rules (if present)Title and body:
Pick repo:
config.repos has one entry → use it.config.repos is empty or missing → ask the user to specify a repo in owner/repo format.config.repos has multiple entries → present a numbered list and ask.Link to active session: Find active session per ../ghpm-shared/references/session.md (match current branch against session files). If found, prepend to the issue body:
Related to <repo>#<num>
<original body>
All inference is best-effort. Skip silently when no confident match exists.
Infer labels: Fetch the target repo's actual labels:
gh label list -R <repo> --json name,description --jq '.[] | "\(.name)\t\(.description)"'
Match the issue title and body against the fetched label names and descriptions (case-insensitive substring/keyword matching). Only use labels that exist on the repo — never assume a label exists.
If no labels match confidently, skip. Don't force a match.
Infer initial status: Use config.workflow.columns to determine the initial status:
config.conventions.status_sync is present, interpret it for new issue context (e.g., if it describes transitions from Planned, that implies new issues start at Planned or earlier).config.workflow.columns as the default.Infer project fields: Iterate over config.fields entries where type is "single_select" and options is non-empty. For each field, infer the best option from the issue context (title, body, labels, repo name):
options[].name (case-insensitive) against the issue context for a substring or keyword match.Confirm:
Prompt (
create_issue): Show the resolved issue details — title, repo, labels (if any), initial status, inferred fields — and ask: "Create this issue and add to <project.title>?"
Resolve via prompts.ghpm-issue.create_issue per ../ghpm-shared/references/prompts.md.
Create issue:
gh issue create -R <repo> --title "<title>" --body "<body>" [--label <labels>]
Extract the issue URL from stdout. Then fetch the node ID:
gh issue view <url> --json number,url,id --jq '{number: .number, url: .url, nodeId: .id}'
Add to project:
gh api graphql -f query='
mutation {
addProjectV2ItemById(input: {
projectId: "<config.project.id>"
contentId: "<issue nodeId>"
}) { item { id } }
}'
Extract the project item ID for field mutations.
If this fails: The issue still exists on GitHub. Report the URL and provide the manual fallback:
Could not add to project. Add manually:
gh project item-add <config.project.number> --owner <config.project.owner> --url <issue-url>
Set status: Using the status resolved in step 6:
gh api graphql -f query='
mutation {
updateProjectV2ItemFieldValue(input: {
projectId: "<config.project.id>"
itemId: "<project item ID>"
fieldId: "<config.workflow.field_id>"
value: { singleSelectOptionId: "<resolved status column id>" }
}) { projectV2Item { id } }
}'
If this fails, continue — the item is on the board, just without a status.
Set project fields: For each field inferred in step 7, set via GraphQL (run mutations in parallel where possible):
gh api graphql -f query='
mutation {
updateProjectV2ItemFieldValue(input: {
projectId: "<config.project.id>"
itemId: "<project item ID>"
fieldId: "<field.id>"
value: { singleSelectOptionId: "<matched option.id>" }
}) { projectV2Item { id } }
}'
If a mutation fails, continue with remaining fields.
Format per ../ghpm-shared/references/format.md:
Created #<num> "<title>" in <repo>
Project: <config.project.title> (<resolved status>)
<field.name>: <option.name> (for each field set in step 12)
URL: <issue-url>
Per ../ghpm-shared/references/prompts.md. Config lives at prompts.ghpm-issue in .ghpm/config.json.
Action keys: create_issue.
/ghpm-work <number> after filing to start working on the new issue.