Comments¶
Four verbs for the conversation on an issue: add writes one, list reads the
thread, edit rewrites one by id, delete removes one. Comment bodies are
ADF — pass Markdown for convenience, pre-flight it with
adf convert, or send native ADF JSON for exact
control. JSON examples below show the data block only; the envelope wrapper and
exit codes live on Output, and each command links to its
reference page for the full flag and field tables.
comment add¶
Write one comment to one or more issues. Supply the body as --markdown
(converted to ADF on the way out) or --json-input pointing at a native ADF JSON
file — the two are mutually exclusive. The body runs through the
validate-and-encode pipeline before submission; --dry-run previews the
validated ADF and never contacts Jira.
jira issue comment add PROJ-123 --markdown "Deployed to staging."
jira issue comment add PROJ-1..10 -p 4 --markdown "Release note"
jira issue comment add PROJ-123 --json-input ./comment.json
jira adf convert --input notes.md --output=compact | jira issue comment add PROJ-123 --json-input -
jira issue comment add PROJ-123 --markdown "Internal note." --visibility-role Developers
jira issue comment add PROJ-123 --markdown "Draft." --dry-run --output=json
addtakes multiple keys — separate arguments, comma lists, orA..Branges. The same body and visibility are applied to each.-p/--parallelismfans the writes out (default1, max16).
The data.comment object carries the created comment with snake-case keys; the
body is the native ADF document as Jira stored it:
{
"issue": "PROJ-123",
"comment": {
"id": "10244",
"body": { "type": "doc", "version": 1, "content": [ { "type": "paragraph", "content": [ { "type": "text", "text": "Deployed to staging." } ] } ] },
"author": { "account_id": "712020:…", "display_name": "John Doe", "email_address": "john.doe@example.com" },
"update_author": { "…": "same shape as author" },
"visibility": null,
"created": "2026-05-27T07:13:03.338-0400",
"updated": "2026-05-27T07:13:03.338-0400"
},
"dry_run": false
}
A single key returns the data above; multiple keys return ordered
data.results[], each with ok and either the per-issue data or an error.
Legacy shorthand
jira issue comment PROJ-123 --markdown "…" (no subcommand) still works
as an alias of comment add and builds an identical request.
comment list¶
Read the thread, or find a comment id before editing or deleting. list takes
the same key lists and ranges as issue view.
--limit sets the page size (default 50); --all walks every page until Jira
reports the last one.
jira issue comment list PROJ-123
jira issue comment list PROJ-123 --all
jira issue comment list PROJ-1..10 -p 4
jira issue comment list PROJ-123 --output=json
Human output is one row per comment, newest pages last:
Comments (2 comments)
#10244 John Doe 2026-05-27T07:13:03.338-0400 Deployed to staging.
#10245 John Doe 2026-05-27T07:13:03.697-0400 Rollout complete.
The JSON data carries each comment with its native ADF body; the pagination
block rides in meta.pagination with the same camelCase shape every paginated
command uses:
{
"data": {
"comments": [
{ "id": "10244", "body": { "type": "doc", "version": 1, "content": [ "…" ] }, "author": { "…": "…" }, "update_author": { "…": "…" }, "visibility": null, "created": "…", "updated": "…" }
]
},
"meta": {
"pagination": { "startAt": 0, "maxResults": 50, "total": 2, "isLast": true }
}
}
Multiple keys return data.results[]; each successful entry's data holds that
issue's comments, a per-key pagination block in the same shape, and any
per-key warnings.
Bodies round-trip losslessly
body is the document exactly as Jira stores it — mentions keep their
accountId, status lozenges and cards survive — so it can be fed straight
back to comment edit via --json-input, or reviewed as
Markdown with adf render. Human output
flattens each body to a one-line preview for display only.
Lossy Markdown renderings surface as warnings
A comment containing constructs with no Markdown spelling is listed under
warnings[] (type: adf-lossy-comment) naming them — the JSON body is
unaffected; the warning concerns the human preview and any Markdown
projection you apply. If --all stops on a rate limit,
meta.pagination.isLast stays false, nextCursor carries the resume
offset, and a rate-limit-during-paginate warning is added.
comment edit¶
Rewrite one comment by id — edit KEY COMMENT_ID is single-target. Run
comment list first to find the id. The replacement body takes
the same --markdown / --json-input pair as add, and visibility can be
replaced (--visibility-role / --visibility-group) or removed
(--clear-visibility). --dry-run previews the validated body and visibility
change without contacting Jira.
jira issue comment edit PROJ-123 10042 --markdown "Updated: rollout complete."
jira issue comment edit PROJ-123 10042 --markdown "Now public." --clear-visibility
jira issue comment edit PROJ-123 10042 --json-input ./comment.json --dry-run
A live edit returns the updated comment under data.comment — the same shape as
comment add.
comment delete¶
Remove one comment by id — delete KEY COMMENT_ID is single-target. --dry-run
previews the deletion and never contacts Jira.
The data block confirms the removal:
Destructive — --force required when headless
A live delete in headless, agent, or --no-input mode must pass --force,
or the command errors before calling Jira. An interactive terminal is
prompted to confirm when --force is omitted.
See also¶
- Reading issues — view, list, and mine
- ADF — the comment-body document format
- Output — the JSON envelope and exit codes