Skip to main content
The Linear intake agent turns the DinoAI Slack bot into a data-request intake specialist. Anyone in your company DMs the bot, answers a short interview in plain business language, and gets a well-formed Linear issue filed in your team’s triage flow: the right priority inferred rather than asked, a duplicate check against the existing backlog, and acceptance criteria derived from their own answers. This is the Linear version of the Jira intake agent, and it is simpler to configure: Linear priority is a first-class field, and there are no required custom fields to map.
Prerequisites
  • Linear connected so the agent can call create_linear_issue, get_linear_issue, and list_linear_issues.
  • Slack connected with the Paradime bot installed, so teammates can DM it.
  • Your repository connected, so the agent can research model and dashboard references.
  • The Linear team key you file into (for example "DATA").
  • Familiarity with customizing the Slack Agent: this guide replaces the default Slack bot personality.
Estimated time: 15 minutes.

Steps

1

Create the agent

Build the agent in the Agent UI, naming it exactly dinoai-slack-bot, and use the definition below for its role, goal, backstory, and tools. (Alternatively, commit the file directly at .dinoai/agents/dinoai-slack-bot.yml.) Either way, the name dinoai-slack-bot is the reserved convention that binds the agent to Slack DMs and @Paradime mentions, so this definition becomes what your teammates talk to.
.dinoai/agents/dinoai-slack-bot.yml
tools.mode: allowlist keeps the bot scoped to intake: it can research and file issues, but not write code, run SQL, or trigger pipelines. You do not need to list run_subagent: core research and navigation tools are always available to every agent regardless of the allowlist. See the Tools Reference.
2

Map it to your Linear team

Only three things to adapt, all in the backstory:
  • Team key: swap DATA for the key of the team the issues belong to. If different request types belong to different teams, describe the routing in plain “if this, file in that team” language.
  • Priority mapping: the 1–4 scale above matches Linear’s convention (1=Urgent, 2=High, 3=Medium, 4=Low). Adjust the plain-language rules to your team’s culture if needed.
  • Triage state: leaving state_id empty files new issues into the team’s default state, which is the right behavior for teams using Linear’s triage flow. Only set a state_id (a state UUID) if you want intake issues to land in a specific custom state.
Unlike Jira, there are no required custom fields, so issue creation does not fail on a missing field map.
3

Deploy it to your repo

Deploying from the Agent UI opens a PR that adds the agent file to your repository; review and merge it. If you authored the YAML by hand instead, commit it to your repository’s default branch, alongside your dbt™ project:
Once the file is on the default branch, DinoAI loads this definition for every new Slack message instead of the default general-purpose assistant.
4

Try it in Slack

DM the Paradime bot something deliberately vague, the way a real requester would:
The bot should ask one question at a time (business question, consumer, urgency), resolve “the customer dashboard” against your repo on its own, present a confirmation summary, and only file the issue after you confirm.
You know it works when a vague DM ends with a confirmed summary and a reply containing a real Linear issue identifier and URL, with the priority inferred rather than asked, and the issue sitting in your team’s triage state. If issue creation fails, the most likely cause is a wrong team key: check the error the bot reports and confirm the key with list_linear_issues.

How it works

The design is identical to the Jira intake agent, and the three decisions that make it work are covered there: an interview shaped around what the requester can know, repo research delegated to run_subagent so raw search results stay out of the billable conversation, and one issue per conversation with a fresh-chat nudge. What changes for Linear is the handoff. The Linear backlog agent picks up tickets labelled Agent Ready, and the intake tools do not set labels on creation. That gap is deliberate in this recipe: intake files structured issues into the team’s triage state, and a human applies the Agent Ready label during triage to decide which ones an agent should implement. The label becomes your human-in-the-loop gate between “well-formed request” and “autonomous implementation”, which is exactly where you want a person in the flow.

Next steps

Linear backlog agent

Close the loop: an agent that implements the issues this one files.

Jira intake agent

The same pattern for Jira, including custom field mapping.

Customize the Slack Agent

How the dinoai-slack-bot convention binds an agent to Slack.

Programmable Agents reference

The agent YAML schema and tools.