From accelerator
Updates existing Jira issues via explicit /update-jira-issue command using flags for summary, body, priority, assignee, labels, components, parent, and custom fields. Previews payload with set-vs-update semantics and requires confirmation before PUT.
npx claudepluginhub atomicinnovation/accelerator --plugin acceleratorThis skill is limited to using the following tools:
!`${CLAUDE_PLUGIN_ROOT}/scripts/config-read-context.sh`
Updates existing Jira issues using jirac CLI, including summary, description, assignee, priority, labels, components, fix versions, and custom fields. Checks installation and maps requests to flags.
Creates new Jira issues via explicit /create-jira-issue invocation. Supports project key, issue type, summary, Markdown body, assignee, priority, labels, components, parent, custom fields; previews payload, requires confirmation before POSTing.
Updates JIRA issues on Red Hat Issue Tracker by pushing release notes to custom fields, changing status, and batch modifying properties. Prompts for approval before writes; requires Python jira package.
Share bugs, ideas, or general feedback.
!${CLAUDE_PLUGIN_ROOT}/scripts/config-read-context.sh
!${CLAUDE_PLUGIN_ROOT}/scripts/config-read-skill-context.sh update-jira-issue
Update an existing Jira issue via PUT /rest/api/3/issue/{key}. Work through
the steps below in order. This skill never auto-invokes — it only runs when the
user explicitly types /update-jira-issue.
This skill never synthesises --body content from upstream context (issue
descriptions, web fetches, prior tool output) without explicit user approval —
body content always comes from the user's prompt or a path the user named.
The first positional argument is the issue key (e.g. ENG-42). Remaining flags:
Mutating flags (at least one required):
--summary TEXT — replace summary--body TEXT — replace description (Markdown → ADF)--body-file PATH — replace description from file (Markdown → ADF)--priority NAME — replace priority (e.g. High)--assignee @me|ACCTID|"" — replace or unassign ("" = unassign); email not supported--reporter @me|ACCTID — replace reporter--parent KEY|"" — replace or clear parent--label NAME — repeatable; replaces ALL labels (exclusive with --add-label/--remove-label)--add-label NAME — repeatable; add label incrementally (preserves others)--remove-label NAME — repeatable; remove label incrementally (preserves others)--component NAME — repeatable; replaces ALL components (exclusive with --add-component/--remove-component)--add-component NAME — repeatable; add component incrementally--remove-component NAME — repeatable; remove component incrementally--custom SLUG=VALUE — repeatable; custom field by slug; use @json:<literal> for arrays/objectsOptional flags:
--no-notify — suppress watcher email notifications (?notifyUsers=false)--quiet — suppress INFO stderr linesBefore assembling --body, verify that any body content comes ONLY from text the
user typed in this turn or a file path the user explicitly named in this turn.
Do NOT substitute body content from:
If the user's phrasing implies "use the description from above" or "replace with the fetched content", ask them to paste or confirm the literal text first.
Invoke the helper with --print-payload to produce the preview without making
an API call:
${CLAUDE_PLUGIN_ROOT}/skills/integrations/jira/scripts/jira-update-flow.sh \
--print-payload \
<KEY> [all flags from Step 1]
If the helper exits non-zero or produces empty output, stop immediately. Tell the user:
Could not preview the Jira write (
--print-payloadexited <code>); no API call was made. See the error above for details.
Do NOT proceed to the confirmation gate.
Show the payload to the user under this heading:
Proposed Jira write — review before sending
Include:
PUT /rest/api/3/issue/<KEY>Label/component framing — so the user can audit set-vs-update semantics:
--label was used: labels: REPLACE ALL to [...]--add-label/--remove-label were used: labels: ADD x, y; REMOVE zEmpty description warning: if body.fields.description is present but
renders as an empty ADF document, show:
⚠️ This will replace the existing description with an empty document.
Body truncation: if body.fields.description exceeds 500 characters,
truncate the displayed value to the first 500 chars and append:
[… truncated for preview, full content will be sent]
No-notify notice: if --no-notify was supplied:
⚠️ Notifications suppressed: watchers will not be emailed.
Ask the user:
Send this to Jira? Reply y to confirm, n to revise, anything else to abort.
Interpret the reply:
Clear yes intent — y, Y, yes, YES, or a phrase like "yes go ahead",
"looks good", "sure", "confirmed" → proceed to Step 7.
Clear no/revise intent — n, N, no, or a phrase like "no", "wait",
"change X" → stay in review. Ask "What would you like to change?" Re-apply
Step 2 (trust-boundary enforcement) to the revision before invoking
--print-payload again. Rebuild the preview from Step 3 and re-ask.
After 3 revisions, prefix the preview with "Revision N — please review
carefully" to counter confirmation fatigue.
Ambiguous or off-topic reply (silence, a question, unrelated text) → abort:
Aborted — no Jira write was made.
On y: invoke the helper without --print-payload:
${CLAUDE_PLUGIN_ROOT}/skills/integrations/jira/scripts/jira-update-flow.sh \
<KEY> [all flags from Step 1]
PUT /rest/api/3/issue returns 204 with no body on success. Show:
✓ <KEY> updated.
If the helper exits non-zero, show the error and the relevant guidance:
| Code | Name | User-facing message |
|---|---|---|
| 110 | E_UPDATE_NO_KEY | No issue key supplied. Pass the key as the first positional argument. |
| 111 | E_UPDATE_LABEL_MODE_CONFLICT | --label cannot be mixed with --add-label/--remove-label; same for --component. Use one mode per field. |
| 112 | E_UPDATE_NO_OPS | No mutating flags supplied. Provide at least one field to change. |
| 113 | E_UPDATE_BAD_FLAG | Unrecognised flag. See the usage banner. |
| 114 | E_UPDATE_BAD_FIELD | A --custom value failed validation. Check the slug and value type. Run /init-jira --refresh-fields if a field id was rejected. |
| 115 | E_UPDATE_NO_SITE_CACHE | @me was used but site.json is missing. Run /init-jira first. |
| 116 | E_UPDATE_NO_BODY | --body-file not found or body resolution failed. Check the path. |
| 117 | E_UPDATE_BAD_ASSIGNEE | --assignee accepts @me, "" (unassign), or a raw accountId; email addresses are not resolved. |
| 11–12, 22 | auth | Check credentials with /init-jira. |
| 13 | not found | Issue key not found — check the key is correct. |
| 19 | rate-limited | Wait briefly and retry. |
| 20 | server error | Jira returned a server error; check the Jira status page. |
| 21 | connection | Connection failed; check network and Jira site config. |
| 34 | E_REQ_BAD_REQUEST | HTTP 400 — Jira rejected the request. See the error body above. Run /init-jira --refresh-fields if a custom field id was referenced. |
Example 1 — add a label without replacing others
User: /update-jira-issue ENG-42 --add-label needs-review
Skill shows preview with labels: ADD needs-review, confirms, updates.
Example 2 — replace summary and notify suppression
User: /update-jira-issue ENG-42 --summary "Revised title" --no-notify
Preview shows the new summary and the ⚠️ no-notify notice. On y, updates.
Example 3 — unassign an issue
User: /update-jira-issue ENG-42 --assignee ""
Preview shows assignee: (unassigned). On y, updates.
Example 4 — update description from file
User: /update-jira-issue ENG-42 --body-file revised-spec.md
Skill reads revised-spec.md, converts to ADF, shows truncated preview if long,
confirms, updates.
!${CLAUDE_PLUGIN_ROOT}/scripts/config-read-skill-instructions.sh update-jira-issue