Linear
Also an agent toolLinear GraphQL project-management automation. Every action is a single POST /graphql with a named query/mutation + variables in the JSON body. Covers issues, comments, reactions, projects (updates, milestones, labels, relations), teams, cycles, workflow states, issue labels, users, attachments (URL links), documents, initiatives, roadmaps, favorites, notifications, and webhook management. Inbound webhooks deliver Issue/Comment/Project/Cycle/IssueLabel events (HMAC-SHA256 signed).
61 actions · 16 triggers
The Linear integration lets you connect Linear to your automations with 61 actions and 16 triggers — and every action is also a tool an AI agent can call. Examples: Get Viewer, Get Issue, List Issues, Search Issues, Create Issue. No blank-canvas wiring — connect it and use it in your workflows.
Every action below is also a tool an AI agent can call — the same pack powers your workflows and your agents.
Triggers 16
Events in Linear that can start a workflow.
Issue Created
An issue was created (webhook type=Issue, action=create).
Issue Updated
An issue was updated (webhook type=Issue, action=update).
Issue Removed
An issue was removed (webhook type=Issue, action=remove).
Comment Created
A comment was created (webhook type=Comment, action=create).
Comment Updated
A comment was updated (webhook type=Comment, action=update).
Comment Removed
A comment was removed (webhook type=Comment, action=remove).
Project Created
A project was created (webhook type=Project, action=create).
Project Updated
A project was updated (webhook type=Project, action=update).
Project Removed
A project was removed (webhook type=Project, action=remove).
Cycle Created
A cycle was created (webhook type=Cycle, action=create).
Cycle Updated
A cycle was updated (webhook type=Cycle, action=update).
Cycle Removed
A cycle was removed (webhook type=Cycle, action=remove).
Label Created
An issue label was created (webhook type=IssueLabel, action=create).
Label Updated
An issue label was updated (webhook type=IssueLabel, action=update).
Label Removed
An issue label was removed (webhook type=IssueLabel, action=remove).
New / updated Linear issues
Polls the issues query on a schedule using the Relay endCursor in variables.after.
Actions 61
What Zervanor can do in Linear.
Get Viewer
Fetch the authenticated user (identity / connectivity probe). POST /graphql { viewer { id name email } }.
Get Issue
Fetch a single issue by uuid or identifier (e.g. ENG-123). POST /graphql query issue($id:String!){ issue(id:$id){ ... } }.
List Issues
List / filter issues (cursor paginated). POST /graphql query issues($first:Int,$after:String,$filter:IssueFilter){ issues(...){ nodes{...} pageInfo{ hasNextPage endCursor } } }.
Search Issues
Full-text issue search. POST /graphql query searchIssues($term:String!){ searchIssues(term:$term){ nodes{ id title } } }.
Create Issue
Create an issue (requires teamId). POST /graphql mutation IssueCreate($input:IssueCreateInput!){ issueCreate(input:$input){ success issue { id } } }.
Update Issue
Update an issue by id. POST /graphql mutation IssueUpdate($id:String!,$input:IssueUpdateInput!){ issueUpdate(id:$id,input:$input){ success issue { id } } }.
Delete Issue
Delete (trash) an issue. POST /graphql mutation IssueDelete($id:String!){ issueDelete(id:$id){ success } }.
Archive Issue
Archive an issue. POST /graphql mutation IssueArchive($id:String!){ issueArchive(id:$id){ success } }.
Add Issue Label
Attach a label to an issue. POST /graphql mutation IssueAddLabel($id:String!,$labelId:String!){ issueAddLabel(id:$id,labelId:$labelId){ success } }.
Remove Issue Label
Detach a label from an issue. POST /graphql mutation IssueRemoveLabel($id:String!,$labelId:String!){ issueRemoveLabel(id:$id,labelId:$labelId){ success } }.
Get Comment
Fetch a comment by id. POST /graphql query comment($id:String!){ comment(id:$id){ id body } }.
List Comments
List comments (filterable by issue). POST /graphql query comments($filter:CommentFilter){ comments(filter:$filter){ nodes{ id body } } }.
Create Comment
Create a comment (requires issueId or documentId). POST /graphql mutation CommentCreate($input:CommentCreateInput!){ commentCreate(input:$input){ success comment { id } } }.
Update Comment
Edit a comment. POST /graphql mutation CommentUpdate($id:String!,$input:CommentUpdateInput!){ commentUpdate(id:$id,input:$input){ success comment { id } } }.
Delete Comment
Delete a comment. POST /graphql mutation CommentDelete($id:String!){ commentDelete(id:$id){ success } }.
Create Reaction
Add an emoji reaction (to a comment or issue). POST /graphql mutation ReactionCreate($input:ReactionCreateInput!){ reactionCreate(input:$input){ success reaction { id } } }.
Delete Reaction
Remove a reaction. POST /graphql mutation ReactionDelete($id:String!){ reactionDelete(id:$id){ success } }.
Get Project
Fetch a project by id. POST /graphql query project($id:String!){ project(id:$id){ id name } }.
List Projects
List projects (cursor paginated). POST /graphql query projects($first:Int,$after:String){ projects(first:$first,after:$after){ nodes{ id name } pageInfo{ hasNextPage endCursor } } }.
Create Project
Create a project. POST /graphql mutation ProjectCreate($input:ProjectCreateInput!){ projectCreate(input:$input){ success project { id } } }.
Update Project
Update a project. POST /graphql mutation ProjectUpdate($id:String!,$input:ProjectUpdateInput!){ projectUpdate(id:$id,input:$input){ success project { id } } }.
Delete Project
Delete a project. POST /graphql mutation ProjectDelete($id:String!){ projectDelete(id:$id){ success } }.
Create Project Update
Post a project status update. POST /graphql mutation ProjectUpdateCreate($input:ProjectUpdateCreateInput!){ projectUpdateCreate(input:$input){ success projectUpdate { id } } }.
Create Project Milestone
Create a project milestone. POST /graphql mutation ProjectMilestoneCreate($input:ProjectMilestoneCreateInput!){ projectMilestoneCreate(input:$input){ success projectMilestone { id } } }.
Get Team
Fetch a team by id. POST /graphql query team($id:String!){ team(id:$id){ id name key } }.
List Teams
List teams. POST /graphql query teams($first:Int,$after:String){ teams(first:$first,after:$after){ nodes{ id name key } pageInfo{ hasNextPage endCursor } } }.
Create Team
Create a team. POST /graphql mutation TeamCreate($input:TeamCreateInput!){ teamCreate(input:$input){ success team { id } } }.
Update Team
Update a team. POST /graphql mutation TeamUpdate($id:String!,$input:TeamUpdateInput!){ teamUpdate(id:$id,input:$input){ success team { id } } }.
Get Cycle
Fetch a cycle (sprint) by id. POST /graphql query cycle($id:String!){ cycle(id:$id){ id name number } }.
List Cycles
List cycles (sprints). POST /graphql query cycles($first:Int,$after:String){ cycles(first:$first,after:$after){ nodes{ id name number } pageInfo{ hasNextPage endCursor } } }.
Create Cycle
Create a cycle. POST /graphql mutation CycleCreate($input:CycleCreateInput!){ cycleCreate(input:$input){ success cycle { id } } }.
Update Cycle
Update a cycle. POST /graphql mutation CycleUpdate($id:String!,$input:CycleUpdateInput!){ cycleUpdate(id:$id,input:$input){ success cycle { id } } }.
Get Workflow State
Fetch a workflow state by id. POST /graphql query workflowState($id:String!){ workflowState(id:$id){ id name type } }.
List Workflow States
List workflow states (Backlog, In Progress, ...). POST /graphql query workflowStates($first:Int,$after:String){ workflowStates(first:$first,after:$after){ nodes{ id name type } pageInfo{ hasNextPage endCursor } } }.
Create Workflow State
Create a workflow state. POST /graphql mutation WorkflowStateCreate($input:WorkflowStateCreateInput!){ workflowStateCreate(input:$input){ success workflowState { id } } }.
Get Issue Label
Fetch an issue label by id. POST /graphql query issueLabel($id:String!){ issueLabel(id:$id){ id name color } }.
List Issue Labels
List issue labels. POST /graphql query issueLabels($first:Int,$after:String){ issueLabels(first:$first,after:$after){ nodes{ id name color } pageInfo{ hasNextPage endCursor } } }.
Create Issue Label
Create an issue label. POST /graphql mutation IssueLabelCreate($input:IssueLabelCreateInput!){ issueLabelCreate(input:$input){ success issueLabel { id } } }.
Update Issue Label
Update an issue label. POST /graphql mutation IssueLabelUpdate($id:String!,$input:IssueLabelUpdateInput!){ issueLabelUpdate(id:$id,input:$input){ success issueLabel { id } } }.
Delete Issue Label
Delete an issue label. POST /graphql mutation IssueLabelDelete($id:String!){ issueLabelDelete(id:$id){ success } }.
Get User
Fetch a workspace user by id. POST /graphql query user($id:String!){ user(id:$id){ id name email } }.
List Users
List workspace users. POST /graphql query users($first:Int,$after:String){ users(first:$first,after:$after){ nodes{ id name email } pageInfo{ hasNextPage endCursor } } }.
Get Attachment
Fetch an attachment by id. POST /graphql query attachment($id:String!){ attachment(id:$id){ id title url } }.
Link URL Attachment
Link an existing external URL as an attachment on an issue (single mutation; file upload is multi-step and deferred, linear-07). POST /graphql mutation AttachmentLinkURL($issueId:String!,$url:String!){ attachmentLinkURL(issueId:$issueId,url:$url){ success attachment { id } } }.
Delete Attachment
Delete an attachment. POST /graphql mutation AttachmentDelete($id:String!){ attachmentDelete(id:$id){ success } }.
Get Document
Fetch a document by id. POST /graphql query document($id:String!){ document(id:$id){ id title } }.
List Documents
List documents. POST /graphql query documents($first:Int,$after:String){ documents(first:$first,after:$after){ nodes{ id title } pageInfo{ hasNextPage endCursor } } }.
Create Document
Create a document. POST /graphql mutation DocumentCreate($input:DocumentCreateInput!){ documentCreate(input:$input){ success document { id } } }.
Update Document
Update a document. POST /graphql mutation DocumentUpdate($id:String!,$input:DocumentUpdateInput!){ documentUpdate(id:$id,input:$input){ success document { id } } }.
Get Initiative
Fetch an initiative by id. POST /graphql query initiative($id:String!){ initiative(id:$id){ id name } }.
Create Initiative
Create an initiative. POST /graphql mutation InitiativeCreate($input:InitiativeCreateInput!){ initiativeCreate(input:$input){ success initiative { id } } }.
Get Roadmap
Fetch a roadmap by id. POST /graphql query roadmap($id:String!){ roadmap(id:$id){ id name } }.
Create Roadmap
Create a roadmap. POST /graphql mutation RoadmapCreate($input:RoadmapCreateInput!){ roadmapCreate(input:$input){ success roadmap { id } } }.
Create Favorite
Create a favorite. POST /graphql mutation FavoriteCreate($input:FavoriteCreateInput!){ favoriteCreate(input:$input){ success favorite { id } } }.
Delete Favorite
Delete a favorite. POST /graphql mutation FavoriteDelete($id:String!){ favoriteDelete(id:$id){ success } }.
List Notifications
List the viewer's notifications. POST /graphql query notifications($first:Int,$after:String){ notifications(first:$first,after:$after){ nodes{ id type } pageInfo{ hasNextPage endCursor } } }.
Archive Notification
Archive a notification. POST /graphql mutation NotificationArchive($id:String!){ notificationArchive(id:$id){ success } }.
List Webhooks
List registered webhooks. POST /graphql query webhooks($first:Int,$after:String){ webhooks(first:$first,after:$after){ nodes{ id url resourceTypes } pageInfo{ hasNextPage endCursor } } }.
Create Webhook
Register a webhook (returns the signing secret once). Requires admin scope. POST /graphql mutation WebhookCreate($input:WebhookCreateInput!){ webhookCreate(input:$input){ success webhook { id url secret resourceTypes } } }.
Delete Webhook
Remove a webhook. POST /graphql mutation WebhookDelete($id:String!){ webhookDelete(id:$id){ success } }.
GraphQL (Raw)
Execute an arbitrary GraphQL query or mutation against POST /graphql. Escape hatch for operations not exposed as a named action; HTTP-200-with-errors is still classified as failure via response_error_field.
Nothing matches your search.
Automations using Linear
Build your own automation with Linear in the visual builder.
Automations with Linear
Linear → Slack
New Linear issues surface in the team channel as they are filed — triage starts in minutes instead of at the next standup.
AutomationIntercom → Linear
A customer conversation becomes a tracked Linear issue — the support-to-engineering handoff that usually dies in a copy-paste.
Frequently asked questions
What can I automate with Linear?
61 actions are available — for example: Get Viewer, Get Issue, List Issues, Search Issues, Create Issue, and more.
Which Linear events can start a workflow?
16 triggers — for example: Issue Created, Issue Updated, Issue Removed, Comment Created.
Can Linear be used as an AI agent tool?
Yes. Every Linear action automatically becomes a tool an AI agent can call — the same pack powers both your workflows and your agents.
How is the Linear integration modelled?
Linear is modelled as a versioned connector pack, and the steps that need reasoning fall to first-party agents hosted in the same runtime as the workflows.