jira-issue-creator
Create RHCLOUD Jira issues with validated fields. Python script enforces team UUIDs, activity types, security levels, and label rules.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Create RHCLOUD Jira issues with validated fields. Python script enforces team UUIDs, activity types, security levels, and label rules.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
| name | jira-issue-creator |
| description | Create RHCLOUD Jira issues with validated fields. Python script enforces team UUIDs, activity types, security levels, and label rules. |
| user-invocable | true |
| allowed-tools | ["Bash(python3 *jira_fields.py *)","AskUserQuestion","mcp__mcp-atlassian__jira_create_issue","mcp__mcp-atlassian__jira_update_issue","mcp__mcp-atlassian__jira_get_user_profile"] |
Extract from message (text after skill invocation):
If "assign to bot":
user = jira_get_user_profile("712020:c6b31fa1-eaf5-4921-af5b-cb625f24bb1a")
assignee = user["email"]
assignee_type = "bot"
If "assign to me":
assignee = git config user.email
assignee_type = "user"
If "assign to ":
# Skip lookup if already email (contains '@')
if '@' in identifier:
assignee = identifier
else:
user = jira_get_user_profile(identifier) # username, display name, or account ID
assignee = user["email"]
assignee_type = "user"
If no assignee hint:
assignee = None
assignee_type = "unassigned"
Use AskUserQuestion with single question:
Question: Assignee
If "Confirm: {assignee}": Use assignee from Step 2.
If "Unassigned":
assignee = None
assignee_type = "unassigned"
If "Bot":
user = jira_get_user_profile("712020:c6b31fa1-eaf5-4921-af5b-cb625f24bb1a")
assignee = user["email"]
assignee_type = "bot"
If "Assign to me":
assignee = git config user.email
assignee_type = "user"
If Other field used (user typed custom value):
user_identifier = answers["Assignee"] # From Other field
# Resolve "me"
if user_identifier.lower() == "me":
assignee = run("git config user.email")
assignee_type = "user"
# Email (has '@')
elif '@' in user_identifier:
assignee = user_identifier
assignee_type = "user"
# Lookup
else:
user = jira_get_user_profile(user_identifier)
assignee = user["email"]
assignee_type = "user"
IMPORTANT: Ask ALL 4 questions below in ONE AskUserQuestion call.
Infer recommended option for each:
Question 1: Team
Question 2: Activity Type
Question 3: Issue Type
Question 4: Prefix
[custom] from prompt if presentPass confirmed selections AND resolved assignee to Python.
Bot tickets (assignee-type=bot):
python3 claude/skills/jira-issue-creator/jira_fields.py \
--summary "<user summary>" \
--team "<selected team>" \
--issue-type "<selected type>" \
--description "<shorthand notes>" \
--assignee-type "bot" \
--labels "repo:scalprum,repo:chrome" \
--prefix "<selected prefix>" \
--activity-type "<selected activity type>"
User-assigned tickets (assignee-type=user):
python3 claude/skills/jira-issue-creator/jira_fields.py \
--summary "<user summary>" \
--team "<selected team>" \
--issue-type "<selected type>" \
--description "<shorthand notes>" \
--assignee-type "user" \
--assignee "user@redhat.com" \
--prefix "<selected prefix>" \
--activity-type "<selected activity type>"
Unassigned tickets (assignee-type=unassigned):
python3 claude/skills/jira-issue-creator/jira_fields.py \
--summary "<user summary>" \
--team "<selected team>" \
--issue-type "<selected type>" \
--description "<shorthand notes>" \
--assignee-type "unassigned" \
--prefix "<selected prefix>" \
--activity-type "<selected activity type>"
If valid: false → show errors, exit.
Use result dict verbatim (includes assignee from Step 3):
issue = jira_create_issue(
project_key=result["project_key"],
summary=result["summary"],
issue_type=result["issue_type"],
assignee=result["assignee"],
additional_fields=json.dumps(result["additional_fields"])
)
Show:
Created RHCLOUD-XXXX
View: https://redhat.atlassian.net/browse/RHCLOUD-XXXX
Transform shorthand into full Markdown:
For detailed test coverage guidelines and AC format, see @TEST_COVERAGE_GUIDELINES.md
Show full description as text output:
Proposed description for RHCLOUD-XXXX:
[Full enriched description in markdown - no truncation]
Then show approval dialog:
AskUserQuestion(
question="Approve this description for RHCLOUD-XXXX?",
header="Description",
options=[
{
"label": "Approve and update ticket",
"description": "Add the description shown above to Jira"
},
{
"label": "Request changes",
"description": "Provide feedback to regenerate"
},
{
"label": "Cancel",
"description": "Don't update ticket description"
}
]
)
If "Approve" → proceed to Step 10.
If "Request changes" → user provides feedback via "Other" text input → regenerate description with feedback → repeat Step 9.
If "Cancel" → stop, show ticket link only.
jira_update_issue(
issue_key=issue["key"],
fields=json.dumps({"description": enriched_description})
)
--labels when assignee_type == "bot". Never for user/unassigned.result dict only. Never reconstruct from input.