Skip to main content
The Snowflake Task migrator is a DinoAI agent that lifts and shifts Snowflake Tasks into your dbt™ project: it picks one un-migrated task, converts its SQL body into a dbt™ model, translates its CRON schedule into a Bolt schedules-as-code entry, builds the model, data-diffs it against the original task’s output, and opens a PR with the evidence. Run it repeatedly and it drains the task backlog one reviewed PR at a time.
PrerequisitesEstimated time: 20 minutes.

Steps

1

Create the agent

In the Agent app, open Agents, select New agent, and choose Start from scratch. Fill in the builder fields below, leave Model on Auto. See Build an agent in the UI for a tour of the builder.Name: snowflake-task-migratorRole:
Goal:
Backstory:
Allowed tools (everything else is refused, see the Tools Reference):
  • read_file, write_file, replace_in_file, search_files_and_directories, ripgrep_search
  • run_sql_query
  • run_terminal_command
  • list_bolt_schedules
  • post_slack_message
Output: set the Slack channel that should carry the migration audit trail (for example #snowflake-migration).
2

Deploy the agent

Select Deploy and choose where the agent lives: Just here saves it to the workspace and makes it live immediately (ideal while you validate the first migrations), Open a pull request commits it to your repo as .dinoai/agents/snowflake-task-migrator.yml so it is governed as code. Both appear in the Bolt agent picker. See Creating Agents in the App.
3

Run the first migration from Chat

Hover the agent card and select Chat, then send:
Watch the flow end to end: the Slack announcement first, then the model and schedule files, the dbt run, the data diff, and finally the PR. Review that first PR carefully; its “Migration validation” section tells you whether the translation is faithful before you let the agent loose on the backlog.
4

Drain the backlog with Bolt

Once the pattern is validated, add a Run Paradime DinoAI Agent command to a Bolt schedule with the Task:
Because the agent migrates exactly one task per invocation, a weekday cron (0 9 * * 1-5) turns the backlog into one reviewable PR per day. When every task is migrated, the agent finds nothing to pick and exits cleanly. See Run an agent with Bolt for the full walkthrough.
Each run produces one PR on migrate/snowflake-task/<task_name> containing the dbt™ model, its YAML entry, and the Bolt schedule, with the original task DDL, the dbt run summary, the row-level data diff, and a manual follow-ups checklist in the description. The Slack channel shows the “Migration started” announcement before any code moved. If the model fails to build or the announcement cannot be posted, the agent stops without opening a PR. Merge the PR, suspend the source task in Snowflake, and verify the first Bolt run.

How it works

The migration maps each Snowflake Task property onto its Paradime-native equivalent, and the data diff is what makes the PR reviewable: same dataset, new orchestration. Task graph parents (AFTER predecessors) do not translate to cron directly; the agent records them in the PR so the reviewer can chain the Bolt schedules with a run-completion trigger. The one-task-per-PR rule is deliberate: each migration carries its own validation evidence and its own manual follow-ups, so the review stays small enough to actually check the diff.

Next steps

Schedules as code

The schedule YAML format the agent writes.

Run an agent with Bolt

Trigger agents from a Bolt schedule.

Bolt pipeline healer

Keep the migrated schedules healthy after cutover.

Programmable Agents reference

The agent schema, tools, and API.