The Linear agent requires changes to the control plane to support callback routing.
LINEAR_BOT?: Fetcher; // Optional - only if linear-bot is deployedexport type MessageSource = "web" | "slack" | "linear" | "extension" | "github";The notifyCallbackClient() method routes based on the source field of the message:
"linear"→LINEAR_BOTservice binding"slack"→SLACK_BOTservice binding- default →
SLACK_BOT(backward compat)
Changed from Slack-specific interface to Record<string, unknown> so any integration can pass its
own context (e.g. agentSessionId for Linear agent activities).
getMessageCallbackContext() now returns { callback_context, source } for routing.
- OAuth2 with
actor=app— agent gets its own identity per workspace - Tokens stored in KV with auto-refresh (
oauth:token:{orgId}) - No personal API key needed
- User @mentions or assigns the agent → Linear sends
AgentSessionEvent - Agent emits
Thoughtactivities (visible as "thinking" in Linear) - Agent creates Open-Inspect session and sends prompt
- Agent emits
Responsewith session link - On completion callback, agent emits
Responsewith PR link
The callbackContext includes agentSessionId and organizationId so the completion callback can
emit AgentActivity on the correct session.
| Variable | Description |
|---|---|
linear_client_id |
OAuth Application Client ID |
linear_client_secret |
OAuth Application Client Secret |
linear_webhook_secret |
Webhook Signing Secret |
The old linear_api_key variable is no longer required but kept for backward compatibility in the
tfvars example.