| name | jira-task-management |
| description | Manage Jira issues on Red Hat Jira (redhat.atlassian.net) using jira-cli. Use this skill whenever the user mentions Jira tickets, issues, bugs, tasks, epics, sprints, or wants to create/update/search work items. Also use when the user references issue keys like MGMT-*, NVIDIA-*, RHEL-*, asks about task status, or wants to track work. |
Jira Task Management
Manage issues on Red Hat Jira (redhat.atlassian.net) via jira-cli. The tool is pre-configured with bearer token auth for the MGMT project.
Key constraints: --comments requires a numeric argument (e.g., --comments 10) — using it alone errors. jira-cli has no --json flag — use --plain or --raw. --no-input is only valid for create/edit, not move/assign/comment. Never include ORDER BY in -q queries — jira-cli appends its own.
Setup
- Binary:
jira (installed via go install github.com/ankitpokhrel/jira-cli/cmd/jira@latest)
- Config:
~/.config/.jira/.config.yml — initialized with jira init --installation cloud --server https://redhat.atlassian.net --auth-type bearer
- Auth: Bearer token in
~/.netrc (machine redhat.atlassian.net login <user> password <token>)
- Token generation: https://id.atlassian.com/manage-profile/security/api-tokens
- Default project: MGMT
- Jira URL pattern:
https://redhat.atlassian.net/browse/<KEY>
Before Creating Issues
When the user asks to create a Task or Bug, two things are required before running the command:
-
Epic link — Every Task and Bug must be linked to an epic via -P <EPIC-KEY>. If the epic isn't obvious from the conversation (e.g., the user has been discussing a specific epic, or there's a CLAUDE.md reference), ask: "Which epic should I link this to?"
-
Label — Default to -l OSAC. Only use a different label if the user explicitly says so.
Do not set priority — it's not relevant for this project.
Command Reference
--plain is supported on read commands (view, list, epic list, sprint list) for clean output. --no-input is needed on create and edit only to skip interactive prompts — do not use --no-input with move, assign, comment, or link (they don't support it and will error). --plain is also not supported on create, edit, move, assign, or comment — use --raw on create if you need JSON output.
jira-cli does NOT support --json. Never use --json — it is not a valid flag on any command. Use --plain for readable output or --raw (on create only) for JSON.
View
jira issue view <KEY> --plain
jira issue view <KEY> --plain --comments 100
Search
jira-cli always prepends project="MGMT" to -q/--jql queries. Use -q (not --jql) for all searches, and follow these rules:
- Within MGMT project: Use
-q normally — the project is auto-prepended.
- Across all projects: Start the query with
project IS NOT EMPTY AND ... — jira-cli detects the existing project clause and skips prepending.
- Specific other project: Start with
project = OTHERKEY AND ....
- Never include
ORDER BY in -q queries — jira-cli appends its own ORDER BY created DESC, causing a JQL syntax error from duplicate ORDER BY clauses.
- Use filter flags (
-r, -t, -a, -s) instead of embedding them in JQL when possible — they're appended cleanly.
jira issue list -q 'status = "In Progress"' --plain
jira issue list -q 'labels = OSAC AND updated >= -7d' --plain
jira issue list -q 'assignee = currentUser() AND status not in (Closed, Done)' --plain
jira issue list -q 'project IS NOT EMPTY AND type = Epic AND text ~ "search term"' -r "$(jira me)" --plain
jira issue list -q 'project = CNF AND type = Epic' --plain
jira issue list "search text" --plain
jira issue list -q '...' --paginate 50 --plain
JQL tips: String values with spaces need double quotes inside single quotes — 'status = "In Progress"'. Field names with spaces need double quotes too — '"Epic Link" = MGMT-22619'.
Epics
jira epic list <EPIC-KEY> --plain
jira epic create -s "Title" -b "Description" -l OSAC
jira epic add <EPIC-KEY> <ISSUE-1> <ISSUE-2>
jira epic remove <ISSUE-KEY>
jira issue list --jql '"Epic Link" = <EPIC-KEY> AND status != Closed' --plain
jira issue list --jql '"Epic Link" = <EPIC-KEY> AND assignee is EMPTY' --plain
Create
jira issue create -tTask -s "Summary" -b "Description" \
-P <EPIC-KEY> -a <assignee> -l OSAC --no-input
jira issue create -tBug -s "Bug title" \
-b $'**Description of the problem:**\n\n<describe>\n\n**How reproducible:**\n\n<rate>\n\n**Steps to reproduce:**\n\n1. <step>\n\n**Expected result:**\n\n<expected>\n\n**Actual result:**\n\n<actual>' \
-P <EPIC-KEY> -l OSAC --no-input
jira issue create -tStory -s "Title" -b "Description" \
-P <EPIC-KEY> -l OSAC --no-input
jira issue create -tSub-task -s "Title" -P <PARENT-KEY> -l OSAC --no-input
jira issue create -tTask -s "Summary" --template /path/to/desc.md -l OSAC --no-input
echo "Description" | jira issue create -tTask -s "Summary" -l OSAC --no-input
jira issue create -tTask -s "Summary" -b "Body" -l OSAC --no-input --raw
Issue types: Bug, Task, Story, Epic, Sub-task, Spike, Risk
Edit
jira issue edit <KEY> -s "New summary" --no-input
jira issue edit <KEY> -b "New description" --no-input
jira issue edit <KEY> -a "username" --no-input
jira issue edit <KEY> -P <EPIC-KEY> --no-input
jira issue edit <KEY> -l newlabel --no-input
jira issue edit <KEY> --label -oldlabel --no-input
jira issue edit <KEY> -y Critical --no-input
jira issue edit <KEY> --fix-version "v1.0" --no-input
echo "Updated desc" | jira issue edit <KEY> --no-input
Transition
jira issue move <KEY> "In Progress"
jira issue move <KEY> "Code Review"
jira issue move <KEY> "Done"
jira issue move <KEY> "To Do"
jira issue move <KEY> "In Progress" --comment "Starting work"
jira issue move <KEY> "In Progress" -a username
Common statuses: To Do, New, In Progress, Code Review, QE Review, Done, Closed
Assign
jira issue assign <KEY> username
jira issue assign <KEY> $(jira me)
jira issue assign <KEY> x
Comment
jira issue comment add <KEY> "Comment text"
jira issue comment add <KEY> $'Line 1\n\nLine 2'
echo "Comment" | jira issue comment add <KEY>
jira issue comment add <KEY> --template /path/to/file.md
Link
jira issue link <KEY-1> <KEY-2> "Blocks"
jira issue link <KEY-1> <KEY-2> "Duplicate"
jira issue link <KEY-1> <KEY-2> "is blocked by"
Sprints
jira sprint list --plain
jira sprint add <SPRINT_ID> <KEY-1> <KEY-2>
Browser
jira open <KEY>
jira open
Troubleshooting
- "No result found for given query in project MGMT": The query is scoped to the default MGMT project. To search across projects, start
-q with project IS NOT EMPTY AND .... See the Search section above.
- "Expecting ',' but got 'ORDER'" JQL error: You included
ORDER BY in a -q query. Remove it — jira-cli appends its own ORDER BY created DESC automatically.
- "unknown flag: --json":
jira-cli has no --json flag. Use --plain for clean output or --raw (create only) for JSON.
- "flag needs an argument: --comments":
--comments requires a numeric count (e.g., --comments 10). Never use --comments without a number.
- "unknown flag: --no-input" on move/assign/comment:
--no-input is only valid for create and edit. Remove it — move, assign, comment, and link don't need it.
- Auth errors / HTML in response: Token may be expired. Regenerate at https://id.atlassian.com/manage-profile/security/api-tokens, update
~/.netrc.
- "API v3" errors: Config must use
installation: Cloud. Re-run jira init --installation cloud.
- Interactive prompts hang: Always pass
--no-input for create/edit operations.
--debug flag: Shows the actual REST API calls — useful for diagnosing unexpected behavior.
- Current user:
jira me returns the authenticated username.