fn getIssue(identifier: string)
Fetch a single Linear issue by ID or identifier (e.g. PLT-955)
| Argument | Type | Required | Description |
|---|
| identifier | string | yes | Issue identifier (e.g. PLT-955) or UUID |
fn listIssueComments(issueId: string)
Fetch all comments on a Linear issue. Each entry carries parentId so reply-listener style code can walk the thread. Uses the model's globalArgs.apiKey so callers don't need to pipe a Linear key through method inputs.
| Argument | Type | Required | Description |
|---|
| issueId | string | yes | Linear issue ID |
fn listCommentReplies(issueId: string)
Fetch only the reply comments (children) whose parent is in the supplied set. Uses the Linear SDK's server-side filter sdk.comments({ filter: { parent: { id: { in: parentIds } } } }) — one query, no client-side filtering, and no need to page the entire issue comment thread. Returns parentId on each entry so callers can group replies back to their parent.
| Argument | Type | Required | Description |
|---|
| issueId | string | yes | Issue id — used as the resource instance key for the returned issueCommentList record |
fn listCommentRepliesBatch()
Fetch reply comments whose parent is in the supplied set, across any number of issues, in a single Linear query. Uses the SDK's server-side filter sdk.comments({ filter: { parent: { id: { in: parentIds } } } }) — the same shape as listCommentReplies, but without the per-issue scoping. Designed for driver loops that need replies for many tickets in one workflow step (in-process via task: model_method) instead of N subprocess calls. Returns a flat array of replies where each entry carries parentId
fn addComment(issueId: string, body: string, dryRun?: boolean)
Post a comment on a Linear issue
| Argument | Type | Required | Description |
|---|
| issueId | string | yes | Linear issue ID |
| body | string | yes | Comment body (Markdown) |
| dryRun? | boolean | no | Skip mutation when true |
fn updateComment(commentId: string, body: string, dryRun?: boolean)
Edit a Linear comment in place by id. Used by the factory driver to mutate a single per-ticket activity comment as the run progresses, rather than posting a new comment per lifecycle event.
| Argument | Type | Required | Description |
|---|
| commentId | string | yes | Linear comment ID |
| body | string | yes | Full new comment body (Markdown) |
| dryRun? | boolean | no | Skip mutation when true |
fn deleteComment(commentId: string, dryRun?: boolean)
Delete a Linear comment by id. Used to remove a bot comment the workflow-driver superseded (e.g. a stale 'plan missing' notice). Authenticates as the vault api-key identity, so it can delete comments that identity authored.
| Argument | Type | Required | Description |
|---|
| commentId | string | yes | Linear comment ID |
| dryRun? | boolean | no | Skip mutation when true |
fn addLabel(issueId: string, labelName: string, dryRun?: boolean)
Add a label to a Linear issue by label name
| Argument | Type | Required | Description |
|---|
| issueId | string | yes | Linear issue ID |
| labelName | string | yes | Label name to add |
| dryRun? | boolean | no | Skip mutation when true |
fn removeLabel(issueId: string, labelName: string, dryRun?: boolean)
Remove a label from a Linear issue by label name
| Argument | Type | Required | Description |
|---|
| issueId | string | yes | Linear issue ID |
| labelName | string | yes | Label name to remove |
| dryRun? | boolean | no | Skip mutation when true |
fn setAssignee(issueId: string, assigneeId: string, dryRun?: boolean)
Set or change the assignee of a Linear issue
| Argument | Type | Required | Description |
|---|
| issueId | string | yes | Linear issue ID |
| assigneeId | string | yes | Linear user ID to assign |
| dryRun? | boolean | no | Skip mutation when true |
fn setStatus(issueId: string, stateId: string, dryRun?: boolean)
Change the workflow state of a Linear issue
| Argument | Type | Required | Description |
|---|
| issueId | string | yes | Linear issue ID |
| stateId | string | yes | Target workflow state ID |
| dryRun? | boolean | no | Skip mutation when true |
fn listUnclassified()
List team issues that have no Issue Type label (Bug, Feature, Maintenance) and are not in completed or cancelled states. Returns an array of issue summaries for bulk classification.
fn getPlannable()
List team issues in Planning status assigned to the current user (API key owner). Returns an IssueBatchSchema resource.
fn assertStatus(issueIdentifier: string, currentStatus: string, expectedStatus: string)
Gate step: succeeds if Linear status matches expected value, throws with drift message otherwise
| Argument | Type | Required | Description |
|---|
| issueIdentifier | string | yes | Issue identifier for error message |
| currentStatus | string | yes | Current Linear status name |
| expectedStatus | string | yes | Expected status name |
fn listProjectEligible(projectId: string)
Paginate all issues in a Linear project, filter to lifecycle-eligible tickets (Todo, Planning with approval comment, In Progress, In Review with merged PR, Validation), and write the result to the eligible resource spec at eligible-{projectId}.
| Argument | Type | Required | Description |
|---|
| projectId | string | yes | Linear project ID (UUID) |
Resources
issue(infinite)— A Linear issue snapshot
comment(infinite)— A comment posted to a Linear issue
batch(infinite)— Batch query result (e.g. unclassified issue list)
eligible(infinite)— Eligible project tickets for lifecycle processing
issueCommentList(infinite)— All comments on a single Linear issue at a point in time. Used by reply-listener style code that wants to see threads (each entry carries parentId) without holding a Linear API key itself.
replyBatch(infinite)— Replies fetched in a single batched Linear query across one or more parent comments. Produced by listCommentRepliesBatch; consumed by drivers that need replies for many tickets in one workflow step without per-ticket fan-out.