Before You StartParadime
- Your Paradime API endpoint, API key, and API secret — generate these under Workspace Settings → API. Make sure to enable
DinoAI agent APIcapabilities. Requires Admin access.
- A Linear personal API key — generate one under Settings → API → Personal API keys
- The team key for the team whose backlog you want to process (e.g.
"DNA") - Issues you want to automate must carry the label Agent Ready and have a state type that is not
completed
- Linear — the agent calls
get_linear_issueto fetch linked tickets - Slack — the agent posts status updates to
#analytics-engviapost_slack_message
What You’ll Build
By the end of this guide you’ll have:- A Poetry project wired to the Paradime SDK and the Linear GraphQL API
- A
LinearClientthat paginates through all non-completed, label-filtered issues - An
AgentInvokerthat fires one DinoAI session per issue in parallel and polls until completion - A
run_notifier.pyentry point that ties everything together - A
linear-backlog-agentDinoAI agent YAML that reads the ticket, implements the dbt™ models, and opens a PR
What the Agent Does Per Ticket
Once triggered, the agent follows this sequence for each Linear issue:
Architecture Overview
How It Works
Whenrun_notifier.py is executed it loads environment variables, fetches all non-completed Linear issues labelled Agent Ready, then fires one DinoAI agent session per issue using a ThreadPoolExecutor. All sessions run concurrently — total wall-clock time is bounded by the slowest single ticket, not the sum of all tickets. Each session is polled every 20 seconds for up to 30 minutes.
1
Set Up the Poetry Project
Create the following Install dependencies by running:
pyproject.toml at the same directory level as your dbt_project.yml. This is required so the agent can locate and write dbt™ model files correctly.pyproject.toml
The only two third-party dependencies are
requests (for the Linear GraphQL API) and paradime-io (the Paradime SDK). All other imports — concurrent.futures, os, sys, time, typing — are part of the Python standard library.2
Create the Agent YAML
Create the following file in your repository at
.dinoai/agents/linear-backlog-agent.yml. This defines the agent’s role, goal, tools, and Slack output channel..dinoai/agents/linear-backlog-agent.yml
tools.mode: allowlist means the agent can only call the tools explicitly listed. This keeps each session focused and prevents unintended side effects across your repository.The Slack channel is set to
#analytics-eng by default. Update slack.channel before committing if your team uses a different channel.3
Create the Linear Client
Create
python/linear_slack_notifier/linear_client.py. This module communicates with the Linear GraphQL API and handles automatic pagination so no issues are missed regardless of backlog size.python/linear:slack:notifier/linear:client.py
The client accepts both a Linear team UUID and a short team key (e.g.
"DNA"). Pagination is handled automatically via pageInfo.hasNextPage and endCursor — all matching issues are returned regardless of backlog size.4
Create the Agent Invoker
Create
python/linear_slack_notifier/slack_notifier.py. Despite the filename, this module no longer posts to Slack directly — it triggers and polls DinoAI agent sessions, one per issue, in parallel threads.python/linear:slack:notifier/slack:notifier.py
Sessions are polled every 20 seconds with a 30-minute timeout per issue. The
ThreadPoolExecutor fires all sessions immediately — if you have 10 tickets, all 10 agent sessions start at the same time.5
Create the Main Orchestrator
Create
python/linear_slack_notifier/run_notifier.py. This is the entry point that loads configuration, fetches issues from Linear, and hands them to the AgentInvoker.python/linear:slack:notifier/run:notifier.py
6
Set Your Environment Variables
The orchestrator requires five environment variables. Set them in your shell before running:
Your Paradime API endpoint, key, and secret are available under Workspace Settings → API. Make sure the key has
DinoAI agent API capabilities enabled.7
Run the Orchestrator
From the repository root, run:You should see output like:Each issue gets its own parallel agent session. The orchestrator polls every 20 seconds and prints a summary once all sessions have reached a terminal state.
File Structure
Your repository should look like this after completing the setup:pyproject.toml must sit at the same directory level as dbt_project.yml. The agent uses run_terminal_command and read_file to navigate the dbt™ project, so the working directory at session start must be the repo root.Schedule with Bolt
Instead of running the orchestrator manually, you can have Bolt execute it on a schedule — every morning, once a week, or at any cadence that suits your team’s workflow. Bolt runs the two commands in sequence: firstpoetry install to ensure dependencies are up to date, then poetry run to trigger the agent sessions.
Add Environment Variables to Paradime
Before creating the schedule, store your secrets as environment variables in Paradime so Bolt can access them at runtime. Go to Account Settings → Environment Variables and add the following:Environment variables set in Workspace Settings → Environment Variables are available to all Bolt schedules in your workspace. You only need to set them once.
Create the Bolt Schedule
Go to Bolt → Schedules and click New Schedule. Give it a name likeLinear Backlog Agent and configure the two commands under the Commands section.
The schedule should run two commands in order:
poetry install is included as the first command so that any dependency updates committed to pyproject.toml are automatically picked up on every run — no manual intervention needed.Choose a Schedule Frequency
Pick the cadence that matches how often your team labels new tickets as Agent Ready. The table below covers the most common options:For most teams, weekdays at 9 AM (
0 9 * * 1-5) is a good default. The orchestrator exits cleanly with ✅ Nothing to process when there are no Agent Ready tickets, so there is no cost to running it on days with an empty queue.Related Docs
- Programmable Agents — Quick Start — getting started with DinoAI agents
- Programmable Agents — YAML Configuration — full reference for agent config options
- Programmable Agents — Tools Reference — all available tools including
read_file,get_linear_issue, andpost_slack_message - Linear Integration — connecting Linear to Paradime
- Slack Integration — connecting Slack to Paradime
- Paradime API & Credentials — where to find your API endpoint, key, and secret