| name | create-issue |
| description | Create a GitHub Issue following org templates (Feature/Task/Bug), auto-map to GitHub Project, auto-assign current gh user, and link parent for Task issues. Triggers on "์ด์ ๋ง๋ค์ด", "์ด์ ์์ฑ", "๊นํ๋ธ ์ด์", "create issue", "new issue", "ํผ์ฒ ์ด์", "ํ์คํฌ ์ด์", "๋ฒ๊ทธ ์ด์", "์ด์ ๋ฐํ". Use this when creating issues from conversation context or user input. If the user references an Obsidian note as the source, use note-to-issue instead. |
Create GitHub Issue
End-to-end workflow: create a GitHub Issue in the current session's repo, register it to the GitHub Project board, and link parent issues when applicable.
Issue Types
| Type | Title format | GitHub Issue Type | Template |
|---|
| Feature | [Feature] {summary} | Feature | 01-๊ธฐ๋ฅ-๊ฐ๋ฐ.yml |
| Task | [Task] {parent feature} - {summary} | Task | 02-๊ธฐ๋ฅ-๊ฐ๋ฐ---ํ์-ํ์คํฌ.yml |
| Bug | [Bug] {summary} | Bug | 03-๋ฒ๊ทธ-๋ฆฌํฌํธ.yml |
Workflow
Phase 1: Gather project info
Collect from the current session's project repo:
A) Parse ## ๋ ํฌ/ํ๋ก์ ํธ ์ ๋ณด section from CLAUDE.md:
์กฐ์ง โ OWNER (e.g. AGMO-Inc)
ํ๋ก์ ํธ๋ช
โ PROJECT_NAME
ํ๋ก์ ํธ url โ PROJECT_URL โ extract project number (e.g. /projects/2 โ 2)
๋ ํฌ โ REPO (e.g. AGMO-Inc/monitor-server)
If CLAUDE.md is missing or lacks this section, extract OWNER/REPO from git remote and ask the user for the project number.
B) Resolve current user:
ASSIGNEE=$(gh api user --jq '.login')
Use the gh CLI authenticated user as assignee. If lookup fails, ask the user for their GitHub username.
Phase 2: Collect user input (single prompt)
Identify what the user already provided, then ask for missing items in one prompt.
Required:
- Issue type โ feature / task / bug (ask only if not already specified)
- Issue content โ map user's description to template sections
Conditional:
- If Task: parent Feature issue number (e.g.
#100) โ must ask, required for parent linking
Always ask:
- Project Status โ ask user to choose:
Todo / In Progress / Weekly Done. Default to Todo if user does not specify.
This is the single user-facing prompt. Collect everything at once, never ask multiple rounds:
"์ด์ ์์ฑ ์ ํ์ธ:
- ์์ Feature ์ด์ ๋ฒํธ๋? (์: #100)
- Project Status: Todo / In Progress / Weekly Done (๊ธฐ๋ณธ: Todo)"
Phase 3: Create issue
Build the issue body following the org template. Fill required sections from user input; use reasonable defaults for optional sections. See references/issue-templates.md for required/optional sections per type.
Feature issue body:
> ๐ค **AI created**
### 1. ํ ์ค ์์ฝ
{summary}
### 2. ๋ฐฐ๊ฒฝ/๋ฌธ์
{background}
### 3. ์๊ตฌ ์ฌํญ
{requirements โ checkbox format}
### 4. ์์
ํญ๋ชฉ
{tasks โ checkbox format}
### 5. ์ฐธ๊ณ
{references โ optional}
### 6. ์์ฉ ๊ธฐ์ค (์ ํ)
{acceptance criteria โ optional}
Task issue body:
> ๐ค **AI created**
### ์์ Feature
#{parent_number}
### 1. ์์
์์ฝ
{summary}
### 2. ์ฒดํฌ๋ฆฌ์คํธ
{checklist โ checkbox format}
### 3. ์ฐธ๊ณ (์ ํ)
{references}
Bug issue body:
> ๐ค **AI created**
### 1. ์ฆ์ ํ ์ค ์์ฝ
{summary}
### 2. ๊ธฐ๋ ๋์
{expected behavior}
### 3. ์ค์ ๋์
{actual behavior}
### 4. ์ฌํ ๋ฐฉ๋ฒ (Optional)
{reproduction steps}
### 5. ๋น๋
{ํญ์/๊ฐ๋/ํน์ ์กฐ๊ฑด์์๋ง/์ฌํ ๋ถ๊ฐ}
### 6. ์ฌ์ฉ์ ์ํฅ
{์น๋ช
/๋์/์ค๊ฐ/๋ฎ์}
### 7. ํด๊ฒฐ ๋ฐฉ๋ฒ
{resolution}
Create command:
gh issue create --repo "$REPO" \
--title "{title per template format}" \
--body "$BODY" \
--assignee "$ASSIGNEE" \
--type "{Feature|Task|Bug}"
Capture the created issue URL and number.
Phase 4: Project integration (sequential)
4-1. Add to project:
gh project item-add {PROJECT_NUMBER} --owner "{OWNER}" --url "{ISSUE_URL}"
4-2. Set Status:
PROJECT_ID=$(gh project view {PROJECT_NUMBER} --owner "{OWNER}" --format json --jq '.id')
ITEM_ID=$(gh project item-list {PROJECT_NUMBER} --owner "{OWNER}" --format json \
--jq ".items[] | select(.content.url == \"{ISSUE_URL}\") | .id")
FIELD_DATA=$(gh project field-list {PROJECT_NUMBER} --owner "{OWNER}" --format json \
--jq '.fields[] | select(.name == "Status")')
FIELD_ID=$(echo "$FIELD_DATA" | jq -r '.id')
OPTION_ID=$(echo "$FIELD_DATA" | jq -r ".options[] | select(.name == \"{STATUS}\") | .id")
gh project item-edit \
--project-id "$PROJECT_ID" \
--id "$ITEM_ID" \
--field-id "$FIELD_ID" \
--single-select-option-id "$OPTION_ID"
4-3. Link parent (Task only):
gh issue edit {NEW_ISSUE_NUMBER} --repo "$REPO" --add-parent {PARENT_ISSUE_NUMBER}
If --add-parent is not supported by the gh version, use GraphQL fallback:
PARENT_ID=$(gh issue view {PARENT_NUMBER} --repo "$REPO" --json id --jq '.id')
CHILD_ID=$(gh issue view {NEW_NUMBER} --repo "$REPO" --json id --jq '.id')
gh api graphql -f query='
mutation {
addSubIssue(input: { issueId: "'"$PARENT_ID"'", subIssueId: "'"$CHILD_ID"'" }) {
issue { id }
}
}'
Phase 5: Report
Summarize all results:
- Issue URL (clickable link)
- Issue type + title
- Assignee: {ASSIGNEE}
- Project: {PROJECT_NAME} โ Status: {STATUS}
- Parent link: #{PARENT_NUMBER} (Task only)
Completion checklist
Before reporting success, verify every item:
Safety
- Do not create the issue if project info cannot be resolved โ ask user first
- Do not proceed with Task type if parent Feature number is missing
- First line of body must include
AI created marker
- On failure, report the error and ask whether to retry