linear.issue.created and linear.issue.updated. This page documents their payloads, the filters that make label-driven and mention-driven workflows work, and how sessions bind to the issues they own. A trigger on a linear.* event resolves against the project’s Linear connection at apply time; name it with connection: when more than one exists.
Event keys
Only Linear
Issue webhooks with action create or update are ingested; other actions and entity types are dropped at the ingress. Deliveries are verified with an HMAC-SHA256 signature over the raw body (Linear’s linear-signature header) and deduplicated by a hash of the body, so webhook retries never double-fire a trigger.
Comment activity on Linear issues does not produce a trigger event today. Inbound Linear is
linear.issue.created and linear.issue.updated only; a description edit arrives as linear.issue.updated. Sessions can still read and write comments through the chat tools with target provider linear.Payload
object
The issue as a bindable artifact:
type: "linear.issue" and externalId in the form linear:<organizationId>:issue/<issueId>. This is what bind-routed triggers and bind-at-spawn resolve against.string
create or update.object
The issue snapshot:
id, identifier (e.g. ENG-123), title, description, url, state ({ id, name, type }), team ({ id, key, name }), and labelNames — a flat array of the issue’s current label names.object
Who performed the change:
{ id, type, name }.object
Auto metadata:
authored (the change was made by the Auto app user — all agents share one Linear app user, so this says “an Auto session did this”, not which one), mentioned (the issue description @-mentions Auto), and context.kind: "explicit_mention" when mentioned.object
On
linear.issue.updated: the previous values Linear reported for the changed fields, augmented with labelNames: { added: [...], removed: [...] } — a computed diff of label names whenever labels changed.string
The Linear organization id.
webhookId and webhookTimestamp are also present.object
The raw Linear webhook payload.
Mention detection
linear.auto.mentioned is true when the issue description contains a Linear mention of the Auto app user — Linear renders mentions as @[Display Name](userId) markup, and auto matches the user id or display name. Mentions elsewhere (comments, other fields) are not detected.
Template placeholders
Filters
Pair a
linear.issue.created trigger with a linear.issue.updated trigger when you key off labels: creation with the label already set fires only created, and labeling an existing issue fires only updated.
Routing
Both Linear events carry the issue as alinear.issue routing target, so:
spawnstarts a fresh session for the issue. Addbind: { target: linear.issue }when the session should own the issue, so laterlinear.issue.updatedevents canbind-route back to it.bindwithtarget: linear.issuedelivers follow-up updates into the session bound to that issue;onUnmatched(defaultdrop) governs updates to issues no session owns.
Example: label-driven triage
An agent that triages any issue labeledauto-triage, whether the label was set at creation or added later. Adapted from the issue triage example.
.auto/agents/issue-triage.yaml
bind: { target: linear.issue } to each spawn and a third trigger:
See also
- Triggers reference — routing kinds, filter grammar,
optionalconnections - Chat tools —
chat.issue.get,chat.issue.update, and commenting on issues - GitHub events — the equivalent catalog for GitHub