Issues

Generated automatically at build time from the madtea repository - do not edit here. Source: docs/reference/issues.md.

CLI Commands

madtea issue all-comments

List all comments in the repository

FlagTypeDefaultDescription
--limitint0Maximum number of items to return (0 = server default)
--pageint0Page number for pagination (0 = first page)
--sincestringFilter comments updated since this date (YYYY-MM-DD or RFC3339)

madtea issue attachments

List attachments on an issue

madtea issue attachments add

Upload an attachment to an issue

madtea issue attachments delete

Delete an attachment from an issue

madtea issue attachments edit

Edit an issue attachment

madtea issue attachments get

Get attachment info

madtea issue blocks

List issues this issue blocks

madtea issue blocks add

Add a block relationship

madtea issue blocks remove

Remove a block relationship

madtea issue body append

Append content to the end of an issue body

FlagTypeDefaultDescription
--filestringRead content from file (use - for stdin)

madtea issue body patch

Apply anchored (old -> new) replacements to an issue body

FlagTypeDefaultDescription
--filestringRead replacements JSON from file (use - for stdin)
--newstringArray[]Replacement text (repeatable; pairs with –old)
--oldstringArray[]Anchor text to find (repeatable; pairs with –new)
--replace-allboolSlice[]Replace every occurrence for the corresponding –old/–new pair (repeatable, in order)

madtea issue body section-replace

Replace the content of a named marked section in an issue body

FlagTypeDefaultDescription
--ensureboolfalseSeed the section (append a fresh marked block) if it does not exist yet
--filestringRead content from file (use - for stdin)

madtea issue body task-toggle

Set the one matched checklist line in an issue body to a checked state

FlagTypeDefaultDescription
--checkedboolfalseSet the matched line to checked (- [x])
--uncheckedboolfalseSet the matched line to unchecked (- [ ])

madtea issue close

Close one or more issues

FlagTypeDefaultDescription
--commentstringAdd a comment when closing (the why-note path is –reason)
--reasonstringWhy this issue is being closed; posted as a closing comment, then the issue is closed (takes precedence over –comment). close_requires_reason: env MADTEA_CLOSE_REQUIRES_REASON or git config madtea.closerequiresreason; allow|warn (default)|require.

madtea issue comment

Add comment to issue

FlagTypeDefaultDescription
--bodystringComment text
--filestringRead content from file (use - for stdin)

madtea issue comment-attachments

List attachments on a comment

madtea issue comment-attachments add

Upload an attachment to a comment

madtea issue comment-attachments delete

Delete an attachment from a comment

madtea issue comment-attachments edit

Edit a comment attachment

madtea issue comment-attachments get

Get comment attachment info

madtea issue comment-delete

Delete a comment

madtea issue comment-edit

Edit a comment (reads from stdin if no text provided)

FlagTypeDefaultDescription
--bodystringComment text
--expected-bodystringExpected current comment body; reject the edit if the comment changed (safety check)
--filestringRead content from file (use - for stdin)

madtea issue comment-get

Get a comment by ID

madtea issue comment-reactions

List reactions on a comment

madtea issue comment-reactions add

Add reaction to a comment

madtea issue comment-reactions remove

Remove reaction from a comment

madtea issue comments

List comments on an issue

madtea issue create

Create a new issue

FlagTypeDefaultDescription
--assigneestringSlice[]Assignees by username (can be repeated)
--bodystringIssue body/description
--due-datestringDue date deadline (ISO 8601 format: 2026-04-01T00:00:00Z)
--filestringRead content from file (use - for stdin)
--labelstringSlice[]Label names or IDs (can be repeated)
--milestoneint640Milestone ID
--refstringBranch reference for the issue
--titlestringIssue title

madtea issue deadline

Set deadline on one or more issues

FlagTypeDefaultDescription
--datestringDeadline date (ISO 8601 format)

madtea issue delete

Delete an issue (refused — close it, or use the forge web UI)

madtea issue deps

List issue dependencies

madtea issue deps add

Add issue dependencies (single edge or batch; ‘A -> B’ = A depends on B)

FlagTypeDefaultDescription
--depends-onstringIssue number that blocks this issue (single-edge form)
--dry-runboolfalseValidate and report the plan without writing anything
--epicstringParent issue to fan in over every node; name children with a bare node set expr (no self-referential ’epic -> …’ edge)
--epic-labelstringLabel name for the epic (default “epic”)

madtea issue deps remove

Remove dependency from issue

FlagTypeDefaultDescription
--depends-onstringIssue number to remove as blocker

madtea issue develop

Create a branch linked to an issue

FlagTypeDefaultDescription
--basestringBase branch to create from (default: current HEAD)
--namestringCustom branch name (overrides auto-generated name)

madtea issue edit

Edit issue fields (reads JSON from stdin if not provided)

FlagTypeDefaultDescription
--add-assigneestringSlice[]Add assignees (appends to existing)
--add-labelstringSlice[]Add labels by name or ID (appends to existing)
--assigneestringSlice[]Set assignees (replaces existing)
--commentstringAdd a comment (posted after the update)
--filestringRead JSON from file (use - for stdin)
--labelstringSlice[]Set labels by name or ID (replaces existing)
--milestoneint640Set milestone ID (0 to clear)
--reasonstringWhy this issue is being closed; posted as a comment. Satisfies the close-reason check when –state closed (see close_requires_reason)
--remove-assigneestringSlice[]Remove specific assignees
--remove-labelstringSlice[]Remove labels by name or ID
--remove-milestoneboolfalseClear the milestone
--statestringSet state: open or closed
--titlestringSet issue title

madtea issue epic status

Report a cross-repo epic’s children bucketed by state

madtea issue epic tick

Sync a cross-repo epic’s checklist checkboxes to child state

madtea issue get

Get issue details (includes comments)

madtea issue import

Bulk-import a roadmap: milestones + dependency-ordered issues from a JSON spec

FlagTypeDefaultDescription
--dry-runboolfalseValidate and print the plan without writing anything
--resumeboolfalseResume from an existing checkpoint, skipping already-created entities

madtea issue list

List issues with filtering options

FlagTypeDefaultDescription
--assigneestringFilter by assignee username
--beforestringFilter issues updated before this date (YYYY-MM-DD or RFC3339, e.g. 2026-01-01 or 2026-01-01T00:00:00Z)
--created-bystringFilter by creator username
--labelstringSlice[]Filter by label names or IDs (comma-separated or repeated)
--limitint0Maximum number of items to return (0 = server default)
--mentioned-bystringFilter by mentioned username
--milestonestringSlice[]Filter by milestone name or ID (comma-separated or repeated)
--orderstringSort order: asc or desc
--pageint0Page number for pagination (0 = first page)
--searchstringSearch/filter by keyword (–keyword accepted for tea compat)
--sincestringFilter issues updated at or after this date (YYYY-MM-DD or RFC3339, e.g. 2026-01-01 or 2026-01-01T00:00:00Z)
--sortstringSort by: created, updated, comments
--statestringopenFilter by state: open, closed, all
--typestringFilter by type: issues or pulls

madtea issue lock

Lock one or more issues

FlagTypeDefaultDescription
--reasonstringLock reason (e.g. off-topic, too heated, resolved, spam)

madtea issue pin

Pin an issue

madtea issue pin-move

Reorder a pinned issue

madtea issue pinned

List pinned issues

madtea issue rank

Rank open issues by open blockers and unblocks

FlagTypeDefaultDescription
--emit-graphboolfalseAlso emit the dependency graph (nodes, edges, cycles, looksDoneGated, repoSpread) as first-class data; –json result becomes {ranked, graph}, text gains a one-line graph footer (opt-in, backward-compatible)
--flatboolfalseUse the older two-section layout (Ready now / Blocked) instead of the bucketed view
--fuzzyboolfalseInfer blocker edges from ANY dependency mention in the body, not just marker-scoped ones (opt-in, noisy)
--limitint0In the text view caps rows per bucket independently (never silently empties a populated bucket; over-cap shows ‘… +K more’); a global row cap with –json. 0 = all.
--readyboolfalseShow only issues that are unblocked now (zero open blockers)

madtea issue reactions

List reactions on an issue or PR

madtea issue reactions add

Add reaction to one or more issues or PRs

madtea issue reactions remove

Remove reaction from one or more issues or PRs

madtea issue reopen

Reopen one or more issues

FlagTypeDefaultDescription
--commentstringAdd a comment when reopening

Search issues across all repositories

FlagTypeDefaultDescription
--keywordstringSearch query (–search and –q also accepted)
--labelstringSlice[]Label names or IDs (comma-separated or repeated)
--limitint0Maximum number of items to return (0 = server default)
--ownerstringFilter by repository owner
--pageint0Page number for pagination (0 = first page)
--statestringFilter by state: open, closed, all
--typestringFilter by type: issues or pulls

madtea issue stopwatch delete

Delete stopwatch on an issue

madtea issue stopwatch start

Start stopwatch on an issue

madtea issue stopwatch stop

Stop stopwatch on an issue

madtea issue subscribe

Subscribe to one or more issues

madtea issue subscribed

Check if subscribed to an issue

madtea issue subscribers

List subscribers of an issue

madtea issue time-add

Add tracked time to an issue

FlagTypeDefaultDescription
--timeint640Time in seconds to add

madtea issue time-delete

Delete a tracked time entry

madtea issue time-reset

Reset all tracked time on an issue

madtea issue timeline

Show issue timeline events

madtea issue times

List tracked time on an issue

madtea issue unlock

Unlock one or more issues

madtea issue unpin

Unpin an issue

madtea issue unsubscribe

Unsubscribe from one or more issues

MCP Tools

madt_issues

Manage issues (current repo by default): list/create/get/edit, comments, attachments, reactions, dependencies, blocks, subscriptions, pinning, locking, time tracking, deadlines, dev branches. Irreversible issue deletion is not a madtea operation on any surface — hard-delete an issue in the forge web UI, or close it to retire it reversibly. dir= targets a foreign clone by path for the report carve-out - create/comment/list/get against THAT checkout’s own origin, authenticated from the checkout itself (its own credentials), never the launch scope; any other action with dir= is refused, as is an owner_repo= that names a repo other than the dir’s origin.

Output schema: declared

One tool, action-dispatched. Set action to one of:

action="all_comments"

List all comments in the current repo. since accepts YYYY-MM-DD or RFC3339. Paginated: limit default 30 (max 200), page is 1-based. Formatted bodies truncate at 80 chars; set raw_json for full bodies.

Optional: since, limit, page

action="attachment_delete"

Delete attachment(s) from an issue by ID. Batch multiple via attachment_ids in one call (never loop).

Required: attachment_ids

One of: number | numbers

action="attachment_edit"

Edit (rename) an issue attachment.

Required: attachment_id, attachment_name

One of: number | numbers

action="attachment_get"

Get attachment details by ID.

Required: attachment_id

One of: number | numbers

action="attachments"

List attachments on an issue.

One of: number | numbers

action="attachments_add"

Upload a file as an attachment to an issue. file is a path to a local file.

Required: file

One of: number | numbers

action="blocks_add"

Mark another issue as blocked by this issue (reverse of a dependency: X blocks Y == Y depends on X). For multiple edges prefer deps_add.

Required: blocked_number

One of: number | numbers

action="blocks_list"

List issues blocked by this issue.

One of: number | numbers

action="blocks_remove"

Remove a block relationship.

Required: blocked_number

One of: number | numbers

action="body"

Safely edit the body via anchored, conflict-checked ops (no wholesale overwrite). Set op to choose the operation.

Required: op

One of: number | numbers

action="body" op="append"

Append content to the END of the body (no anchor). Conflict-checked (412 if the body changed since read). See madt_help(topic=“body”).

Required: content

action="body" op="patch"

Apply anchored (old→new) replacements to the body. Conflict-checked: a drifted/ambiguous anchor or a 412 body-changed-since-read is rejected. See madt_help(topic=“body”).

Required: replacements

action="body" op="section_replace"

Replace the content between the named section markers (ensure seeds them if absent). Conflict-checked (412 if the body changed since read). See madt_help(topic=“body”).

Required: section, content

Optional: ensure

action="body" op="task_toggle"

Set the one - [ ] / - [x] checklist line matched by match to an explicit checked state (not a blind flip). Idempotent; a 412 lost-update is rejected. See madt_help(topic=“body”).

Required: match, checked

action="close"

Close issue(s). Batch via numbers. Pass reason (WHY) — posted as a closing comment, then closed. A bare close warns, or is refused when close_requires_reason=require. See madt_help(topic=“issues-close”).

One of: number | numbers

Optional: reason, comment

action="comment"

Add a comment to an issue. Batch via numbers to post the SAME body to multiple issues in one call.

Required: body

One of: number | numbers

action="comment_attachments_add"

Upload a file as an attachment to a comment. file is a path to a local file.

Required: comment_id, file

action="comment_attachments_delete"

Delete an attachment from a comment.

Required: comment_id, attachment_id

action="comment_attachments_edit"

Edit (rename) a comment attachment.

Required: comment_id, attachment_id, attachment_name

action="comment_attachments_get"

Get a comment attachment by ID.

Required: comment_id, attachment_id

action="comment_attachments_list"

List attachments on a comment.

Required: comment_id

action="comment_delete"

Delete a comment by ID.

Required: comment_id

action="comment_edit"

Edit a comment by ID (full-body replace). expected_body is required — a comment changed since you read it is never silently overwritten. Read it first (comment_get).

Required: comment_id, body, expected_body

action="comment_get"

Get a comment by ID.

Required: comment_id

action="comment_reactions_add"

Add a reaction to a comment.

Required: comment_id, content

action="comment_reactions_list"

List reactions on a comment.

Required: comment_id

action="comment_reactions_remove"

Remove a reaction from a comment.

Required: comment_id, content

action="comments"

List comments on an issue.

One of: number | numbers

action="create"

Create an issue.

Required: title

Optional: body, labels, assignees, milestone, due_date, ref

action="deadline_set"

Set the deadline on an issue. Batch via numbers (same date applied to each).

Required: date

One of: number | numbers

action="deps_add"

Add dependencies in one validated batch (reverse of blocks_add). number+depends_on or expr ‘A -> B’: A depends on B (arrow points at the prerequisite). epic fans a parent across children (idempotent). See madt_help(topic=“deps”).

One of: expr | number

Optional: depends_on, epic, epic_label, dry_run

Example:

# Wire one parent to many prerequisites in ONE call (depends_on as an array):
deps_add number=42 depends_on=[43,44,45]           # #42 depends on each

# Wire an epic to its children in ONE call — bare COMMA-separated node set (commas, NOT spaces):
deps_add epic=42 expr="43,44,45"                   # epic #42 fans in over each, no self-referential edge

# Single edge, chain, and group:
deps_add number=5 depends_on=3                      # 5 depends on 3
deps_add expr="103 -> 102 -> 101"                   # chain
deps_add expr="5 -> 3, 4"                           # 5 depends on BOTH 3 and 4

action="deps_list"

List this issue’s dependencies (the prerequisites it depends on; reverse view is blocks_list).

One of: number | numbers

action="deps_remove"

Batch an issue’s dependency removals into ONE call (depends_on scalar or array). Never fire concurrent deps_remove against the same issue (writes race and 500). See madt_help(topic=“deps”).

Required: depends_on

One of: number | numbers

Example:

deps_remove number=42 depends_on=9              # drop one edge
deps_remove number=42 depends_on=[9,12]         # drop several from #42 in ONE serialized call

action="develop"

Create and check out an issue branch from HEAD (base= to branch off mainline), then push (non-fatal on failure). At finish it auto-closes only with no open dependencies; epics are referenced (Refs #N). See madt_help(topic=“workflow”).

One of: number | numbers

Optional: branch_name, base

action="edit"

Update issue fields (title, state, assignees, milestone, labels). Batch via numbers applies the same payload to each. add_/remove_ variants are incremental; remove_milestone clears. state=closed is gated like close. Body edits use action=body.

One of: number | numbers

Optional: data, title, state, assignees, add_assignees, remove_assignees, milestone, remove_milestone, add_labels, remove_labels, comment, reason

action="epic"

Cross-repo tracking-epic rollup over the body convention (distinct from deps_add’s same-repo epic param): parses the epic body’s child refs and reports/syncs state, no native dependency edges. Set op.

Required: op

One of: number | numbers

action="epic" op="status"

Resolve the epic’s cross-repo child refs and bucket them: Done / Blocked / Keystones, with counts and a per-child line. Warns when the body has zero resolvable refs. Read-only.

action="epic" op="tick"

Idempotent checkbox sync: flip ONLY the epic’s checkboxes whose state drifted from their child’s open/closed state (closed child → checked), diff-only. No drift is a no-op; a 412 retries against the fresh body.

action="get"

Get issue details with comments — full body and every comment, complete and never truncated. Batch multiple via numbers (never loop).

One of: number | numbers

action="import"

Bulk-import a roadmap JSON file (resumable, validate-first): idempotent milestones + topo-ordered issues with #N cross-refs and native deps. dry_run plans. File schema: madt_help(topic=“issues-import”).

Required: file

Optional: dry_run, resume

action="list"

List issues in the current repo. Filter by state, milestone, labels, assignee, creator, mentioned, type, date range (since/before: YYYY-MM-DD or RFC3339), or free text. Paginated: limit default 30 (max 200), page is 1-based.

Optional: state, type, milestone_filter, labels_filter, assignee, created_by, mentioned_by, sort, order, since, before, q, limit, page

action="lock"

Lock an issue or PR. Batch via numbers (same reason applied to each).

One of: number | numbers

Optional: reason

action="pin"

Pin an issue.

One of: number | numbers

action="pin_move"

Move a pinned issue to a new position.

Required: position

One of: number | numbers

action="pinned"

List pinned issues in the repository.

action="rank"

Rank open issues by open blockers and unblocks; rows show [blocked-by:N unblocks:M], bucketed into keystones / free leaves / blocked. target: current repo, owner/repo, or bare owner. See madt_help(topic=“workflow”).

Optional: target, ready, limit, fuzzy, flat, emit_graph

action="reactions_add"

Add a reaction to an issue. Batch via numbers (same reaction applied to each).

Required: content

One of: number | numbers

action="reactions_list"

List reactions on an issue.

One of: number | numbers

action="reactions_remove"

Remove a reaction from an issue. Batch via numbers.

Required: content

One of: number | numbers

action="reopen"

Reopen issue(s). Batch multiple via numbers in one call (never loop). Optionally adds a comment to each.

One of: number | numbers

Optional: comment

action="search"

Search issues across all accessible repositories — cross-repo equivalent of action=list. owner_repo does NOT filter (use search_owner to narrow by owner); to search one repo use action=list.

Optional: q, state, labels_filter, type, search_owner, limit, page

action="stopwatch_delete"

Delete the stopwatch on an issue.

One of: number | numbers

action="stopwatch_start"

Start the stopwatch on an issue.

One of: number | numbers

action="stopwatch_stop"

Stop the stopwatch on an issue.

One of: number | numbers

action="subscribe"

Subscribe to an issue. Defaults to the authenticated user. Batch via numbers.

One of: number | numbers

Optional: username

action="subscribed"

Check whether the authenticated user is subscribed to an issue.

One of: number | numbers

action="subscribers"

List subscribers of an issue.

One of: number | numbers

action="time_add"

Add tracked time to an issue (seconds).

Required: time

One of: number | numbers

action="time_delete"

Delete a tracked time entry from an issue.

Required: time_id

One of: number | numbers

action="time_list"

List tracked time on an issue.

One of: number | numbers

action="time_reset"

Reset all tracked time on an issue.

One of: number | numbers

action="timeline"

Show timeline events for an issue (comments, labels, assignments, state changes, etc.).

One of: number | numbers

action="unlock"

Unlock an issue or PR. Batch via numbers.

One of: number | numbers

action="unpin"

Unpin an issue.

One of: number | numbers

action="unsubscribe"

Unsubscribe a user from an issue. username is required even for yourself (use madt_auth_whoami to get your login). Batch via numbers.

Required: username

One of: number | numbers

Canonical source: docs/reference/issues.md in the madtea repo.