Creates GitHub issues and adds them to the ExamJam V.Next 25 project (project 19) with custom field values. Handles the complete workflow of gathering issue details, fetching project field options dynamically, creating the issue, adding it to the project, and setting Priority, Type, Initiative, and Status fields.
From kw-pluginnpx claudepluginhub kwiggen/claude-code-plugin --plugin kw-pluginThis skill uses the workspace's default tool permissions.
references/GRAPHQL_REFERENCE.mdGuides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Migrates code, prompts, and API calls from Claude Sonnet 4.0/4.5 or Opus 4.1 to Opus 4.5, updating model strings on Anthropic, AWS, GCP, Azure platforms.
Details PluginEval's skill quality evaluation: 3 layers (static, LLM judge), 10 dimensions, rubrics, formulas, anti-patterns, badges. Use to interpret scores, improve triggering, calibrate thresholds.
Create GitHub issues and add them to GitHub Projects V2 with custom field values.
Requires gh CLI authenticated with project scope. Verify with:
gh auth status
If missing project scope, user must run:
gh auth refresh -s project
The skill expects these single-select fields in project 19:
Get project GraphQL ID (required for item-edit):
gh project view 19 --owner atypical-ai --format json --jq '.id'
Store the result as PROJECT_ID (format: PVT_kwDOxxxxxx).
Get field definitions with options:
gh project field-list 19 --owner atypical-ai --format json
Expected JSON structure:
{
"fields": [
{
"id": "PVTSSF_lADOxxxxxx",
"name": "Priority",
"type": "ProjectV2SingleSelectField",
"options": [
{ "id": "option-id-1", "name": "P0" },
{ "id": "option-id-2", "name": "P1" },
{ "id": "option-id-3", "name": "P2" },
{ "id": "option-id-4", "name": "P3" }
]
},
{
"id": "PVTSSF_lADOxxxxxx",
"name": "Type",
"type": "ProjectV2SingleSelectField",
"options": [...]
},
{
"id": "PVTSSF_lADOxxxxxx",
"name": "Initiative",
"type": "ProjectV2SingleSelectField",
"options": [...]
},
{
"id": "PVTSSF_lADOxxxxxx",
"name": "Status",
"type": "ProjectV2SingleSelectField",
"options": [
{ "id": "option-id-1", "name": "Todo" },
{ "id": "option-id-2", "name": "In Progress" },
{ "id": "option-id-3", "name": "Done" }
]
}
]
}
Parse with jq:
# Get Priority field ID and options
gh project field-list 19 --owner atypical-ai --format json \
--jq '.fields[] | select(.name == "Priority")'
# Get Type field and options
gh project field-list 19 --owner atypical-ai --format json \
--jq '.fields[] | select(.name == "Type")'
# Get Initiative field and options
gh project field-list 19 --owner atypical-ai --format json \
--jq '.fields[] | select(.name == "Initiative")'
# Get Status field and options
gh project field-list 19 --owner atypical-ai --format json \
--jq '.fields[] | select(.name == "Status")'
Title:
AskUserQuestion to prompt the userDescription:
AskUserQuestion to prompt for issue body (supports multi-line markdown)Use AskUserQuestion for each field:
Priority:
Present fixed options:
Type:
Present dynamically fetched options from the project field.
Initiative:
Present dynamically fetched options from the project field.
Status:
Present dynamically fetched options from the project field (e.g., Todo, In Progress, Done).
gh issue create --title "<title>" --body "$(cat <<'EOF'
<description>
EOF
)"
Important: Use a heredoc for the body to handle multi-line content and special characters.
Capture the issue URL from the output (format: https://github.com/owner/repo/issues/123).
gh project item-add 19 --owner atypical-ai --url <issue-url> --format json --jq '.id'
Store the returned item ID as ITEM_ID (format: PVTI_lADOxxxxxx).
Important: Each item-edit call can only set ONE field value. Run four separate commands.
Set Priority:
gh project item-edit \
--id "<ITEM_ID>" \
--project-id "<PROJECT_ID>" \
--field-id "<PRIORITY_FIELD_ID>" \
--single-select-option-id "<SELECTED_PRIORITY_OPTION_ID>"
Set Type:
gh project item-edit \
--id "<ITEM_ID>" \
--project-id "<PROJECT_ID>" \
--field-id "<TYPE_FIELD_ID>" \
--single-select-option-id "<SELECTED_TYPE_OPTION_ID>"
Set Initiative:
gh project item-edit \
--id "<ITEM_ID>" \
--project-id "<PROJECT_ID>" \
--field-id "<INITIATIVE_FIELD_ID>" \
--single-select-option-id "<SELECTED_INITIATIVE_OPTION_ID>"
Set Status:
gh project item-edit \
--id "<ITEM_ID>" \
--project-id "<PROJECT_ID>" \
--field-id "<STATUS_FIELD_ID>" \
--single-select-option-id "<SELECTED_STATUS_OPTION_ID>"
Display confirmation to user:
## Issue Created
**Title:** <title>
**URL:** <issue-url>
**Project Assignment:**
- Added to: ExamJam V.Next 25 (Project #19)
- Priority: <selected priority>
- Type: <selected type>
- Initiative: <selected initiative>
- Status: <selected status>
If you see:
error: your authentication token is missing required scopes [read:project]
Inform user:
Your GitHub CLI needs the project scope. Run:
gh auth refresh -s project
Then try again.
If Priority, Type, Initiative, or Status field is not found in project:
gh project field-list 19 --owner atypical-ai --format json --jq '.fields[].name'
If project 19 doesn't exist or isn't accessible:
Could not access project 19 in atypical-ai organization.
Verify you have access to: https://github.com/orgs/atypical-ai/projects/19/
Show the gh CLI error and suggest:
If adding issue to project fails:
WRONG — bare title with no structure:
Title: Dark mode Body: We need dark mode.
CORRECT — structured with problem, solution, and acceptance criteria:
Title: Add dark mode support for low-light environments Body:
Problem
Users report eye strain when using the app in low-light conditions, generating 15+ support tickets/month.
Proposed Solution
Add a system-aware dark color scheme with manual toggle.
Acceptance Criteria
- Dark theme covers all screens
- Respects OS-level dark mode setting
- Manual toggle in user preferences
For complete examples, customization options, and GraphQL notes, see:
references/GRAPHQL_REFERENCE.md