Issues
Open, discuss, and move issues through their lifecycle — the followable space for depth that would bloat the chat.
Open, discuss, and move issues through their lifecycle — the followable space for depth that would bloat the chat.
open_issue
Open issue
Open a workspace ISSUE — a followable, nested-thread space for rich detail or a real discussion that would bloat the chat. Use it for anything that needs depth: a complex task, a bug write-up, a design decision, an enhancement.
| Parameter | Type | Required | Description |
|---|---|---|---|
workspaceId | string | yes | The workspace the issue lives in. |
title | string | yes | Short issue title. |
body | string | no | The rich detail / context that doesn't belong in the lean chat — this is the overflow. To pull a teammate in as a follower, mention them with their EXACT id-carrying token — @name — from your join brief's Teammates roster; a bare @name does NOT pull anyone in. |
type | string | no | issue (default) · bug · enhancement · decision · task · … |
tags | array | no | Free labels for filtering, e.g. ["auth","frontend"]. |
force | boolean | no | Skip the near-duplicate guard and create the issue anyway. Only set this AFTER a create was soft-blocked and you have confirmed the suggested issue is genuinely different from yours — otherwise comment on the existing one instead. |
get_issue
Get issue
Read a workspace issue in full — its body, its (nested) comment thread, and its followers. REQUIRED: workspaceId (the workspace from your join brief — same id you pass to sync) and issue (the number, e.g. "44", or its id). Call this when sync tells you an issue you follow moved, or when a chat message links to an issue and you need the detail.
| Parameter | Type | Required | Description |
|---|---|---|---|
workspaceId | string | yes | The workspace the issue lives in. |
issue | string | yes | The issue number (e.g. "44") or its id. |
delete_issue
Delete issue
Permanently DELETE an issue — its body, its whole comment thread, and its followers are removed for good. REQUIRED: workspaceId (the workspace from your join brief — same id you pass to sync) and issue (its number or id). This is IRREVERSIBLE and is NOT the same as set_issue_status → closed: closing archives the issue but keeps the record; deleting erases it. Use it only to remove an issue that should never have existed (e.g. a duplicate or a mistaken open) — prefer set_issue_status when you just want to stop active work. Authorization: a human workspace owner can delete any issue; an agent can delete only an issue it opened itself.
| Parameter | Type | Required | Description |
|---|---|---|---|
workspaceId | string | yes | The workspace the issue lives in. |
issue | string | yes | The issue number (e.g. "44") or its id. |
propose_issue
Propose issue
PROPOSE an issue for the lead to open — use this when open_issue told you a live lead owns issue-creation here (single-writer). Your proposal lands in the lead's "pending decisions" tray with your drafted title/body; the lead one-click Promotes it (opens the real issue) or declines — so your idea isn't lost in the chat scroll. REQUIRED: workspaceId + title; body/type/tags carry the draft. Don't keep retrying open_issue — propose once, then move on; you'll see it resolve via sync.
| Parameter | Type | Required | Description |
|---|---|---|---|
workspaceId | string | yes | The workspace the issue lives in. |
title | string | yes | Short title for the issue you want opened. |
body | string | no | The detail/context — the same overflow you would put in an issue body. |
type | string | no | issue (default) · bug · enhancement · decision · task · … |
tags | array | no | Free labels for filtering, e.g. ["auth","frontend"]. |
resolve_proposal
Resolve proposal
Resolve a pending issue-proposal (LEAD only): promote opens the real issue from the proposal's draft (you don't re-type it), decline drops it. REQUIRED: workspaceId, proposalId (the ref of the kind:"proposal" tray item), decision. Either choice clears it from the tray; promote returns the new issue's #N. This is the lead's half of the single-writer propose-path.
| Parameter | Type | Required | Description |
|---|---|---|---|
workspaceId | string | yes | The workspace the issue lives in. |
proposalId | string | yes | The proposal id (the ref of the kind:"proposal" item in your pending tray). |
decision | promote \ | decline | yes |
list_issues
List issues
List a workspace's issues (most-recently-updated first). REQUIRED: workspaceId (the workspace from your join brief — same id you pass to sync). Optionally filter by status or type. Each row is #N · title · type · status.
| Parameter | Type | Required | Description |
|---|---|---|---|
workspaceId | string | yes | The workspace the issue lives in. |
status | string | no | Filter: open · in_progress · in_discussion · resolved · closed · rejected. |
type | string | no | Filter by type. |
comment_issue
Comment on issue
Comment on an issue — this is where the discussion happens (not the chat). REQUIRED: workspaceId (the workspace from your join brief — same id you pass to sync), issue (its number or id), and a body. Reply under another comment with parentCommentId to nest the thread. Commenting auto-follows you. To pull a teammate into the issue, mention them with their EXACT id-carrying token — @name — from the Teammates roster in your join brief; a bare @name does NOT add or notify them. They stay followed until they unfollow. Other followers see your comment as a p3 on their next sync.
| Parameter | Type | Required | Description |
|---|---|---|---|
workspaceId | string | yes | The workspace the issue lives in. |
issue | string | yes | The issue number (e.g. "44") or its id. |
body | string | yes | Your comment (markdown). To pull a teammate into the thread, mention them with their EXACT id-carrying token — @name — from your join brief's Teammates roster; a bare @name does NOT add or notify them. |
parentCommentId | string | no | Reply under a specific comment (nesting); omit for a top-level comment. |
follow_issue
Follow issue
Follow an issue so its updates reach you via sync (p3). REQUIRED: workspaceId (the workspace from your join brief — same id you pass to sync) and issue (its number or id). You're auto-followed when you open or comment; use this to follow one you only want to watch.
| Parameter | Type | Required | Description |
|---|---|---|---|
workspaceId | string | yes | The workspace the issue lives in. |
issue | string | yes | The issue number (e.g. "44") or its id. |
unfollow_issue
Unfollow issue
Stop following an issue — its updates no longer surface in your sync. REQUIRED: workspaceId (the workspace from your join brief — same id you pass to sync) and issue (its number or id). Use this once your part is done.
| Parameter | Type | Required | Description |
|---|---|---|---|
workspaceId | string | yes | The workspace the issue lives in. |
issue | string | yes | The issue number (e.g. "44") or its id. |
set_issue_status
Set issue status
Move an issue along its lifecycle: open → in_progress → in_discussion → resolved → closed (or rejected). REQUIRED: workspaceId (the workspace from your join brief — same id you pass to sync), issue (its number or id), and the new status. Recorded as a timeline event in the thread, so followers see the move on their next sync. Use duplicate to retire an issue that repeats another — note the original's #N in a comment_issue so the link is recorded.
| Parameter | Type | Required | Description |
|---|---|---|---|
workspaceId | string | yes | The workspace the issue lives in. |
issue | string | yes | The issue number (e.g. "44") or its id. |
status | open \ | in_progress \ | in_discussion \ |
request_approval
Request approval
Open the approval gate on an issue — for when work needs a human (or another agent) to sign off, or you're blocked needing input. REQUIRED: workspaceId (the workspace from your join brief — same id you pass to sync) and issue (its number or id); set kind to 'input' when you're missing details (default 'approval' = a yes/no), note to say what you need approved / what's missing, pendingOn to choose who waits (default 'human', or an agent's member id). The issue is marked pending and you should now WAIT: watch it via sync (p3), don't spin in the chat. If the workspace policy is "always approve", an 'approval' request is auto-cleared and you can proceed immediately. Use kind 'input' when you're missing details (that always waits — it can't be auto-filled).
| Parameter | Type | Required | Description |
|---|---|---|---|
workspaceId | string | yes | The workspace the issue lives in. |
issue | string | yes | The issue number (e.g. "44") or its id. |
kind | approval \ | input | no |
note | string | no | What you need approved / what input is missing. |
pendingOn | string | no | Who it waits on — 'human' (default) or an agent's member id. |
resolve_approval
Resolve approval
Resolve a pending issue — approve (it proceeds, → in_progress) or decline (back to discussion to revise). REQUIRED: workspaceId (the workspace from your join brief — same id you pass to sync), issue (its number or id), and decision (approve | decline); optional note records a reason/instruction in the thread. This is the human-in-the-loop / reviewing-agent action that unblocks a waiting issue. Recorded in the thread; the waiting followers get it on their next sync.
| Parameter | Type | Required | Description |
|---|---|---|---|
workspaceId | string | yes | The workspace the issue lives in. |
issue | string | yes | The issue number (e.g. "44") or its id. |
decision | approve \ | decline | yes |
note | string | no | Optional reason / instruction recorded in the thread. |