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
| Flag | Type | Default | Description |
|---|---|---|---|
--limit | int | 0 | Maximum number of items to return (0 = server default) |
--page | int | 0 | Page number for pagination (0 = first page) |
--since | string | Filter 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
| Flag | Type | Default | Description |
|---|---|---|---|
--file | string | Read content from file (use - for stdin) |
madtea issue body patch
Apply anchored (old -> new) replacements to an issue body
| Flag | Type | Default | Description |
|---|---|---|---|
--file | string | Read replacements JSON from file (use - for stdin) | |
--new | stringArray | [] | Replacement text (repeatable; pairs with –old) |
--old | stringArray | [] | Anchor text to find (repeatable; pairs with –new) |
--replace-all | boolSlice | [] | 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
| Flag | Type | Default | Description |
|---|---|---|---|
--ensure | bool | false | Seed the section (append a fresh marked block) if it does not exist yet |
--file | string | Read 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
| Flag | Type | Default | Description |
|---|---|---|---|
--checked | bool | false | Set the matched line to checked (- [x]) |
--unchecked | bool | false | Set the matched line to unchecked (- [ ]) |
madtea issue close
Close one or more issues
| Flag | Type | Default | Description |
|---|---|---|---|
--comment | string | Add a comment when closing (the why-note path is –reason) | |
--reason | string | Why 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
| Flag | Type | Default | Description |
|---|---|---|---|
--body | string | Comment text | |
--file | string | Read 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)
| Flag | Type | Default | Description |
|---|---|---|---|
--body | string | Comment text | |
--expected-body | string | Expected current comment body; reject the edit if the comment changed (safety check) | |
--file | string | Read 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
| Flag | Type | Default | Description |
|---|---|---|---|
--assignee | stringSlice | [] | Assignees by username (can be repeated) |
--body | string | Issue body/description | |
--due-date | string | Due date deadline (ISO 8601 format: 2026-04-01T00:00:00Z) | |
--file | string | Read content from file (use - for stdin) | |
--label | stringSlice | [] | Label names or IDs (can be repeated) |
--milestone | int64 | 0 | Milestone ID |
--ref | string | Branch reference for the issue | |
--title | string | Issue title |
madtea issue deadline
Set deadline on one or more issues
| Flag | Type | Default | Description |
|---|---|---|---|
--date | string | Deadline 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)
| Flag | Type | Default | Description |
|---|---|---|---|
--depends-on | string | Issue number that blocks this issue (single-edge form) | |
--dry-run | bool | false | Validate and report the plan without writing anything |
--epic | string | Parent issue to fan in over every node; name children with a bare node set expr (no self-referential ’epic -> …’ edge) | |
--epic-label | string | Label name for the epic (default “epic”) |
madtea issue deps remove
Remove dependency from issue
| Flag | Type | Default | Description |
|---|---|---|---|
--depends-on | string | Issue number to remove as blocker |
madtea issue develop
Create a branch linked to an issue
| Flag | Type | Default | Description |
|---|---|---|---|
--base | string | Base branch to create from (default: current HEAD) | |
--name | string | Custom branch name (overrides auto-generated name) |
madtea issue edit
Edit issue fields (reads JSON from stdin if not provided)
| Flag | Type | Default | Description |
|---|---|---|---|
--add-assignee | stringSlice | [] | Add assignees (appends to existing) |
--add-label | stringSlice | [] | Add labels by name or ID (appends to existing) |
--assignee | stringSlice | [] | Set assignees (replaces existing) |
--comment | string | Add a comment (posted after the update) | |
--file | string | Read JSON from file (use - for stdin) | |
--label | stringSlice | [] | Set labels by name or ID (replaces existing) |
--milestone | int64 | 0 | Set milestone ID (0 to clear) |
--reason | string | Why this issue is being closed; posted as a comment. Satisfies the close-reason check when –state closed (see close_requires_reason) | |
--remove-assignee | stringSlice | [] | Remove specific assignees |
--remove-label | stringSlice | [] | Remove labels by name or ID |
--remove-milestone | bool | false | Clear the milestone |
--state | string | Set state: open or closed | |
--title | string | Set 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
| Flag | Type | Default | Description |
|---|---|---|---|
--dry-run | bool | false | Validate and print the plan without writing anything |
--resume | bool | false | Resume from an existing checkpoint, skipping already-created entities |
madtea issue list
List issues with filtering options
| Flag | Type | Default | Description |
|---|---|---|---|
--assignee | string | Filter by assignee username | |
--before | string | Filter issues updated before this date (YYYY-MM-DD or RFC3339, e.g. 2026-01-01 or 2026-01-01T00:00:00Z) | |
--created-by | string | Filter by creator username | |
--label | stringSlice | [] | Filter by label names or IDs (comma-separated or repeated) |
--limit | int | 0 | Maximum number of items to return (0 = server default) |
--mentioned-by | string | Filter by mentioned username | |
--milestone | stringSlice | [] | Filter by milestone name or ID (comma-separated or repeated) |
--order | string | Sort order: asc or desc | |
--page | int | 0 | Page number for pagination (0 = first page) |
--search | string | Search/filter by keyword (–keyword accepted for tea compat) | |
--since | string | Filter issues updated at or after this date (YYYY-MM-DD or RFC3339, e.g. 2026-01-01 or 2026-01-01T00:00:00Z) | |
--sort | string | Sort by: created, updated, comments | |
--state | string | open | Filter by state: open, closed, all |
--type | string | Filter by type: issues or pulls |
madtea issue lock
Lock one or more issues
| Flag | Type | Default | Description |
|---|---|---|---|
--reason | string | Lock 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
| Flag | Type | Default | Description |
|---|---|---|---|
--emit-graph | bool | false | Also 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) |
--flat | bool | false | Use the older two-section layout (Ready now / Blocked) instead of the bucketed view |
--fuzzy | bool | false | Infer blocker edges from ANY dependency mention in the body, not just marker-scoped ones (opt-in, noisy) |
--limit | int | 0 | In 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. |
--ready | bool | false | Show 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
| Flag | Type | Default | Description |
|---|---|---|---|
--comment | string | Add a comment when reopening |
madtea issue search
Search issues across all repositories
| Flag | Type | Default | Description |
|---|---|---|---|
--keyword | string | Search query (–search and –q also accepted) | |
--label | stringSlice | [] | Label names or IDs (comma-separated or repeated) |
--limit | int | 0 | Maximum number of items to return (0 = server default) |
--owner | string | Filter by repository owner | |
--page | int | 0 | Page number for pagination (0 = first page) |
--state | string | Filter by state: open, closed, all | |
--type | string | Filter 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
| Flag | Type | Default | Description |
|---|---|---|---|
--time | int64 | 0 | Time 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.