Linear Action Nodes
Linear action nodes for issue management.
Linear action nodes let workflows read and update Linear issues, create comments, manage AgentSession state, and perform text manipulation on Linear content. All Linear action nodes use your organization's connected Linear OAuth credentials - no API key configuration is needed in individual node configs.
Linear uses team-canonical state names. The state "Started" is the correct name for active work on most Rensei teams - "In Progress" silently no-ops. Always verify state names in your Linear team settings before configuring linear.issue.update or linear.issue.advance.
AgentSession nodes
linear.agent_session.acknowledge
Acknowledges a Linear AgentSession, signaling to Linear that your workflow has accepted the work. Call this as the first action after a linear.agent_session.created trigger to prevent the session from timing out in Linear's UI before your agent begins.
Input ports
| Port | Type | Required | Description |
|---|---|---|---|
sessionId | string | yes | Linear AgentSession ID (from trigger output) |
organizationId | string | no | Override org context |
Output ports - success (acknowledged) / fail ({ error: string })
linear.agent_session.close
Closes a Linear AgentSession by emitting a response activity that transitions the session state from active to complete. Place this at the terminal branch of every SDLC stage to give users a clean session close in the Linear UI.
The Linear API has no explicit closeAgentSession mutation. Rensei implements close by emitting a response activity, which transitions the AgentSession to complete state. Sessions left without a close call appear perpetually active in the Linear interface.
Input ports
| Port | Type | Required | Description |
|---|---|---|---|
sessionId | string | yes | Linear AgentSession ID |
reason | string | no | Optional closing message shown in the Linear session thread |
organizationId | string | no | Override org context |
Output ports
| Port | Field | Description |
|---|---|---|
success | { closed: boolean, skipped?: boolean, reason?: string } | Session was closed (or suppressed if already closed) |
fail | { error: string } | Linear API error |
skipped: true is returned when the session was already closed (idempotent). Sessions that were never forwarded to Linear (self-dispatched stages with synthetic UUIDs) are also skipped silently - no error is raised.
Issue nodes
linear.issue.read
Fetches the current state of a Linear issue by ID.
Input ports
| Port | Type | Required |
|---|---|---|
issueId | string | yes |
Output ports - success (LinearIssue) / fail ({ error: string })
LinearIssue shape
{
id: string
identifier: string // e.g. "REN-1234"
title: string
description?: string
url: string
state: { id: string; name: string; type: string }
assignee?: { id: string; name: string; email: string }
labels?: Array<{ id: string; name: string; color: string }>
team: { id: string; name: string; key: string }
priority?: number
estimate?: number
}linear.issue.update
Updates one or more fields of a Linear issue.
Input ports
| Port | Type | Required | Description |
|---|---|---|---|
issueId | string | yes | Linear issue UUID |
title | string | no | New title |
description | string | no | New description (Markdown) |
status | string | no | New state name (must be a canonical team workflow state) |
assigneeId | string | null | no | Assign to user UUID; pass null to unassign |
labelIds | string[] | no | Replace label set |
estimate | number | no | Story point estimate |
priority | number | no | Priority (0=none, 1=urgent, 2=high, 3=medium, 4=low) |
Output ports - success (LinearIssue) / fail ({ error: string })
linear.issue.advance
Advances a Linear issue to its next workflow state. Uses the team's workflow state ordering - you specify the issue ID, and the platform resolves the next state automatically.
Input ports
| Port | Type | Required |
|---|---|---|
issueId | string | yes |
organizationId | string | no |
Output ports - success (LinearIssue) / fail ({ error: string })
linear.issue.create_sub_issue
Creates a new sub-issue under a parent Linear issue.
Input ports
| Port | Type | Required | Description |
|---|---|---|---|
parentIssueId | string | yes | Parent issue UUID |
title | string | yes | Sub-issue title |
description | string | no | Sub-issue description |
assigneeId | string | no | Assign sub-issue to user UUID |
labelIds | string[] | no | Initial labels |
estimate | number | no | Story point estimate |
Output ports - success (LinearIssue) / fail ({ error: string })
Comment node
linear.comment.create
Creates a comment on a Linear issue. Supports Markdown formatting. Used by the SDLC templates to post progress updates, summaries, and failure messages back to the issue thread.
Input ports
| Port | Type | Required | Description |
|---|---|---|---|
issueId | string | yes | Linear issue UUID |
body | string | yes | Comment body (Markdown) |
organizationId | string | no | Override org context |
Output ports - success ({ id: string; createdAt: string }) / fail ({ error: string })
Text utility
linear.text.strip_mentions
Strips Linear @mention syntax from a string. Returns the cleaned text and a list of mentioned user IDs. Use this before passing comment bodies to agents or LLM nodes - the raw mention syntax (@[User Name](mention://user/UUID)) is rarely what you want in a prompt.
Input ports
| Port | Type | Required |
|---|---|---|
text | string | yes |
Output ports
| Port | Field | Description |
|---|---|---|
success | { strippedText: string; mentionedUserIds: string[] } | Cleaned text + extracted user IDs |
Example: SDLC stage open/close pattern
The following YAML excerpt shows how the SDLC v2 template wires acknowledge and close around a dispatch:
steps:
- id: acknowledge
type: action
nodeId: linear.agent_session.acknowledge
config:
sessionId: "{{ $trigger.data.sessionId }}"
- id: dispatch
type: action
nodeId: agent.invoke
config:
stageEvent: "{{ $trigger.data }}"
- id: close
type: action
nodeId: linear.agent_session.close
config:
sessionId: "{{ $trigger.data.sessionId }}"
reason: "Development stage dispatched. I'll continue in the session thread."Related pages
- Linear Trigger Nodes -
linear.agent_session.created,linear.issue.assigned, etc. - Condition Nodes -
linear.issue.predicate,linear.comment.body_prefix_switch - Agent Action Nodes -
agent.dispatch_stage,agent.invoke - Linear Integration - OAuth setup, required scopes, AgentSession documentation
- Linear AgentSession Lifecycle - the full session state machine and platform behavior