Linear Integration

Connect Otto to Linear to automatically respond to tickets and updates.

Connecting Linear

  1. Go to Settings → Integrations in your Otto dashboard
  2. Click Connect Linear
  3. Sign in to Linear and authorize Otto
  4. Select which teams Otto should have access to

Webhook Events

Otto listens for these Linear events:

EventDescription
Issue createdNew ticket is created
Issue updatedTicket title, description, or fields change
Issue status changedTicket moves between statuses
Label added/removedLabels are modified
Comment createdSomeone comments on a ticket

Setting Up Triggers

Status-Based Triggers

Trigger Otto when a ticket moves to a specific status:

  1. Go to Triggers → Create Trigger
  2. Select Linear status change
  3. Choose the status (e.g., "In Progress")
  4. Select which agent should handle it
  5. Optionally filter by team or project

Label-Based Triggers

Trigger Otto when a specific label is applied:

  1. Create a label in Linear (e.g., otto:implement)
  2. In Otto, create a trigger for Linear label added
  3. Select the label
  4. Choose the agent

Comment-Based Triggers

Trigger Otto when someone mentions it in a comment:

  1. Create a trigger for Linear comment created
  2. Set a keyword filter (e.g., @otto or otto:)
  3. Otto will respond to comments containing that keyword

Project Mapping

Map Linear projects to GitHub repositories:

  1. Go to Projects in Otto
  2. Click Add Project
  3. Select a Linear project
  4. Select the corresponding GitHub repository
  5. Choose the default branch

Now Otto knows where to create PRs for tickets in that project.

Best Practices

Use Dedicated Statuses

Create a status specifically for Otto-handled work:

Backlog → Todo → Otto Working → In Review → Done

Prefix Labels

Use a consistent prefix for Otto-related labels:

  • otto:implement — Full implementation
  • otto:plan — Planning only
  • otto:review — Review existing code

Team Isolation

If you have multiple teams, consider separate agents for each with team-specific context.