Skip to content

Nori Integrations

Assign a Linear ticket to an AI agent and get a PR back

Turn Linear issues into agent runs through MCP and webhooks, with the PR linked back to the ticket.

Quick answer

Connect Linear to Nori in two places. A Linear webhook starts a Nori session when an issue gets a label or assignee you choose. The Linear MCP server lets the agent in that session read the issue, its comments and its attachments, then write back. The agent works in an isolated cloud machine with your repositories, opens a pull request, and comments on the issue with the link, so the ticket and the PR point at each other.

How it works

There are two connections, and each does one job. The webhook is the trigger: it tells Nori that an issue is ready. MCP is the access: it lets the agent read and update Linear while it works.

  1. An admin connects the Linear MCP server as an organization integration in Nori. Every session can then search issues, read comments and post updates.
  2. The admin creates a webhook automation in Nori. It has a URL, a prompt and a destination channel for results.
  3. In Linear, a webhook for issue events is pointed at that URL.
  4. Someone adds the agent label to an issue, or assigns it to the agent's Linear user. Linear sends the event.
  5. Nori starts a session on a fresh cloud machine with your repositories cloned, the team's skillset installed and the event payload in the prompt.
  6. The agent reads the full issue through MCP, including comments and linked issues, and decides whether the ticket is specific enough to act on.
  7. It makes the change, runs the tests, pushes a branch named with the issue ID and opens a pull request.
  8. It comments on the Linear issue with the PR link and a summary, and posts the same summary to Slack. The machine is released.

Because the branch name and the PR description carry the issue ID, Linear's GitHub integration attaches the pull request to the issue and moves its status as the PR is opened and merged, the same way it does for a human's branch.

Which tickets to hand over

The agent does well with tickets that a new engineer could finish without a meeting. Use a label so the choice is deliberate and visible on the board.

A simple rule for labelling Linear issues for the agent.
TicketHand to the agent?Why
Bug with steps to reproduce and an expected resultYesThe agent can write a failing test first and prove the fix
Copy change, config change, small UI fix with a screenshotYesClear scope and quick review
Dependency bump or deprecation cleanupYesMechanical, and the test suite is the judge
"Improve onboarding" with no acceptance criteriaNot yetThe agent will ask questions on the issue; a person has to answer first
Change that needs a product or pricing decisionNoThe decision is the work, not the code

When a ticket is too vague, the agent does not guess. It comments on the issue with the specific questions it needs answered and stops. Adding the label again after the answers are in starts a new run with the full comment history.

Worked example: from ENG-482 to a merged PR

A team keeps a agent label in Linear and a #eng-agent channel in Slack. The names and numbers below are illustrative.

The issue

ENG-482  CSV export drops rows with a null region
Labels: bug, agent

Steps: Reports > Sales by region > Export CSV, with the March data set.
Expected: 1,204 rows, same as the on-screen table.
Actual: 1,187 rows. The 17 missing rows all have region = NULL.
Acceptance: null region exports as an empty cell. Add a regression test.

The automation prompt

This is the prompt stored on the Nori webhook automation. It is the whole configuration; the event payload is appended when the webhook fires.

A Linear issue event arrived. The payload is below.

1. If the issue does not have the "agent" label, stop without doing anything.
2. Read the full issue with the Linear MCP tools: description, comments,
   attachments and linked issues.
3. If the acceptance criteria are unclear, comment on the issue with your
   questions and stop.
4. Otherwise create a branch named <issue-id>-<short-title>, reproduce the
   problem with a failing test, fix it, and run the test suite.
5. Open a pull request. Put the issue ID in the title and "Fixes <issue-id>"
   in the description.
6. Comment on the Linear issue with the PR link and a three-line summary.
7. Post the same summary to #eng-agent.

What comes back

Nori  commented on ENG-482
PR opened: ENG-482 Export rows with a null region (#912)
- reports/export.py joined on region_id with an inner join, which removed
  rows where region_id is NULL. Changed to a left join.
- New test: tests/reports/test_export.py::test_null_region_is_exported
- 96 report tests pass. Export of the March fixture now returns 1,204 rows.

The review

  1. Linear shows the pull request on ENG-482 and moves the issue to In Review.
  2. A reviewer asks on the PR for the empty cell to be quoted consistently. The agent picks up the comment and pushes a follow-up commit. See the GitHub PR comment agent.
  3. The reviewer approves and merges. Linear moves ENG-482 to Done.
  4. The run appears in the automation's history in Nori with its prompt, its transcript and its result.

Other ways to start from Linear

The webhook is the hands-off path. The same MCP connection supports two more.

  • From Slack. Write @nori pick up ENG-482 in a thread. The agent reads the issue through MCP and the thread becomes the place to steer it. This suits tickets that need a short conversation first. See the Slack coding agent.
  • On a schedule. A cron automation such as 0 7 * * 1-5 asks the agent to read the triage queue each weekday morning, comment on issues that lack steps to reproduce, and post a short list of tickets that are ready for the agent label. See scheduled coding agents.
  • From an alert. An error tracker webhook can open the Linear issue and the fix in one run. The pattern is in how to turn a Sentry webhook into a reviewed fix PR.

Access and review

Ticket-driven runs happen without anyone watching, so the limits matter more than they do in chat.

  • Scoped access. The Linear integration can be scoped to the organization, to one person or to one custom agent. Give the ticket agent the Linear workspace and the repositories it needs, and nothing else.
  • Pull requests only. The agent pushes branches and opens pull requests. Your branch protection and required reviews decide what merges.
  • A visible trail. Every run has a history entry with the triggering event, the transcript and the outcome. The issue, the PR and the Slack summary all link to each other.
  • Your model account. Runs use the Claude or ChatGPT subscription, API keys or LLM gateway you connected. Nori never charges for tokens, so a busy backlog does not change the Nori bill.
  • Any harness. The run can use Jiro, Claude Code, Codex, Gemini CLI or any ACP agent. The skillset that describes how your team ships applies to all of them.

Frequently asked questions

Can I assign a Linear issue directly to an AI agent?

Yes. Point a Linear webhook at a Nori automation and choose the signal, such as an agent label or assignment to the agent's Linear user. When that event arrives, Nori starts a session that reads the issue through the Linear MCP server and works on it.

How does the pull request get linked back to the Linear issue?

In two ways. The agent comments on the issue with the PR link and a summary. It also puts the issue ID in the branch name and PR description, so Linear's GitHub integration attaches the pull request and updates the issue status as the PR moves.

What does the agent do when a ticket is too vague?

It comments on the issue with the specific questions it needs answered and stops, without opening a pull request. After someone answers, add the label again. The next run reads the whole comment history, so nothing has to be repeated.

Do I need both MCP and a webhook?

They do different jobs. MCP gives the agent access to read and update Linear during a session. The webhook starts a session without a person. With MCP alone you can still ask from Slack; add the webhook when you want label-driven runs.

Does this work with Jira or GitHub Issues too?

The pattern is the same for any tracker that sends webhooks and has an MCP server or API: a webhook starts the session and the integration lets the agent read and update the ticket. Nori connects any MCP server at organization, person or agent scope.

What does each ticket run cost?

Nori charges a flat plan price for machines, not per run. Developer is $99 per month and Team starts at $250 per month for five machines, with a 30-day free trial. Model usage goes to your own Claude or ChatGPT subscription, API keys or gateway.