CtrlK
BlogDocsLog inGet started
Tessl Logo

orchestra-hq/orchestra-skills

A curated collection of Agent Skills for working with Orchestra, for agents to effectively implement standards, common workflows, and manage pipelines.

70

Quality

88%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide

SecuritybySnyk

Low

Low-risk findings worth noting

Overview
Quality
Evals
Security
Files

README.md

orchestra-skills

Agent skills and reference docs for diagnosing, fixing, and triaging Orchestra data pipelines with an AI assistant. The workflows assume Orchestra's cloud MCP server is connected so the agent can list runs, fetch logs and artifacts, and retry pipelines from your workspace.

This repo is a plugin marketplace with two plugins, installed independently into both Claude Code and Cursor from the manifests at the repo root (see Install):

  • orchestra — diagnose/fix/triage runs, author pipeline YAML, dbt Slim CI, data-quality tests, account health.
  • migrate-to-orchestra — convert pipelines from another orchestrator (Dagster, Prefect, and Airflow) into Orchestra pipeline YAML.

What is in this repo

Skills

Each skill auto-triggers when your prompt matches it — just describe the problem in natural language. The "Try saying" column shows a prompt that activates each one. Skills are grouped below by what they're for.

Diagnose & fix pipelines

SkillWhat it doesTry saying
identify-pipeline-errorEntry point for fixing anything. Gets the pipeline run and task runs, identifies which task broke and why, then routes to the right fixer (or handles non-code causes itself)."Fix my pipeline" / "what's broken?" — or paste a run URL, UUID, or error
fix-pipeline-dbt-taskFixes a dbt Core task once identified as a dbt code/config issue — reproduce, fix in repo, validate on a branch, confirm, merge. Usually invoked by identify-pipeline-error."Fix the broken dbt task"
fix-pipeline-python-taskFixes a Python task once identified as a code / dependency / destination-schema issue — edit the script, additive-only schema changes, validate, confirm. Usually invoked by identify-pipeline-error."Fix the broken python task"
fix-orchestra-pipelineFixes an Orchestra-platform/configuration issue (YAML/inputs/ordering/retry) or a repo code fix in an integration with no dedicated skill — apply fix, PR/poll, retry, confirm. Usually invoked by identify-pipeline-error."The pipeline config is wrong, fix it"
triage-orchestra-pipelineSame diagnosis, but opens a fix PR and validates it on a branch, then stops for your approval before merging."Triage my pipeline but don't merge yet"

Author & maintain pipelines

SkillWhat it doesTry saying
create-orchestra-pipelineAuthor, validate, and remediate a version: v1 pipeline YAML from a description; also handles edits to an existing pipeline."Create a pipeline that runs dbt then loads Snowflake"
merge-duplicate-pipelinesFinds pipelines that are the same process duplicated per environment or conceptually (per customer/region), drafts a consolidated pipeline using Environment overlays/inputs/matrices, and asks per duplicate set before creating, PR-ing, or pausing anything."Why do I have three copies of this pipeline? Consolidate them."
build-data-reconciliation-pipelineBuilds a pipeline using Orchestra's native Data Reconciliation tasks to prove two systems (Snowflake/SQL Server/Databricks) match — a full validation check for migration cutover, plus an optional scheduled cursor-field drift monitor afterward."Make sure our Snowflake-to-Databricks migration matches before we cut over."

Account health & governance

SkillWhat it doesTry saying
account-health-checkRead-only audit of your Orchestra workspace against best practices — findings grouped by area with severity, evidence, and fixes, written to a report plus chat summary. Never edits anything."Audit my Orchestra account / is my setup following best practices?"

dbt state-aware orchestration

SkillWhat it doesTry saying
orchestra-dbt-slim-ci-setupRetrofit dbt Slim CI (run-pipeline, latest_production, state:modified+, --defer) onto an existing production dbt pipeline."Set up dbt Slim CI in Orchestra"
configure-dbt-source-freshnessAuthor dbt source freshness (warehouse-correct loaded_at_field/thresholds) and enable use_state_orchestration so Orchestra skips downstream models when sources are unchanged."Set up source freshness for state-aware orchestration"
configure-dbt-build-afterAuthor per-model build_after (SLA + upstream-freshness gating) so Orchestra rebuilds a model only when it's due and its data is fresh."Make my marts state-aware — only rebuild when due and fresh"

Data-quality testing

SkillWhat it doesTry saying
write-snowflake-dq-testsProfile Snowflake data, design tests that fit what each column actually means, then build and deploy a DQ testing pipeline to Orchestra."Write data quality tests for my Snowflake tables"
write-bigquery-dq-testsSame profile-then-test workflow as above, for BigQuery."Write data quality tests for my BigQuery tables"
write-clickhouse-dq-testsSame profile-then-test workflow as above, for ClickHouse."Write data quality tests for my ClickHouse tables"
write-databricks-dq-testsSame profile-then-test workflow as above, for Databricks."Write data quality tests for my Databricks tables"

To get going: connect Orchestra's cloud MCP server (see Install below), install the orchestra plugin so the skills are discoverable by your client (see Install), then just ask.

Migrate to Orchestra

A separate plugin (migrate-to-orchestra) for converting pipelines from another orchestrator into Orchestra pipeline YAML. Point your client at the source project (Dagster, Prefect, or Airflow code) and describe what you want migrated — each skill auto-triggers off the APIs it recognizes. Start with dagster-definitions-to-orchestra (Dagster), prefect-flow-structure-to-orchestra (Prefect), or airflow-dag-structure-to-orchestra (Airflow) for any whole-job/whole-flow/whole-DAG conversion; it establishes the pipeline root that the task-level skills below build on.

Not yet in .tessl-plugin/plugin.json — intentionally excluded from Tessl publishing for now.

Pipeline structure & cross-cutting concerns

SkillWhat it does
dagster-definitions-to-orchestraConverts Definitions/ScheduleDefinition/RetryPolicy/concurrency/Config into the Orchestra pipeline root (schedule, configuration, inputs). Apply first, before any task-level skill.
dagster-connections-to-orchestraMaps Dagster resources (ConfigurableResource, SnowflakeResource, EnvVar, etc.) to Orchestra connections and naming/secrets conventions.
dagster-alerts-to-orchestraConverts run-failure/status sensors and success/failure hooks into Orchestra's alerts: block across all six destination types.
dagster-sensors-to-orchestraConverts @sensor/@asset_sensor/@multi_asset_sensor polling external state into Orchestra sensors:.
dagster-cross-job-to-orchestraConverts cross-job/cross-code-location triggers (@run_status_sensor yielding RunRequest, @asset_sensor on another job's asset) into Orchestra pipeline-triggers-pipeline patterns.
dagster-branching-to-orchestraConverts conditional op branching, DynamicOut fan-out, and conditional asset materialization into Orchestra condition:/matrix patterns.
dagster-asset-checks-to-orchestraConverts @asset_check/AssetCheckResult/dbt-test-via-dagster-dbt/ExpectationResult into Orchestra DQ test tasks.
dagster-io-managers-to-orchestraConverts op/asset return values, Out/In wiring, and IO managers into Orchestra task OUTPUTS/${{ }} data passing.
dagster-shell-ssh-to-orchestraConverts non-dbt shell/container execution (PipesSubprocessClient, dagster-shell, SSHResource, k8s_job_op) into Orchestra LINUX_SSH/container tasks.

Integration & task conversion

SkillWhat it does
dbt-core-dagster-to-orchestraConverts DbtCliResource/@dbt_assets/dagster-dbt into an Orchestra DBT_CORE task.
python-dagster-to-orchestraConverts plain @op/@asset Python logic (pandas, boto3, API calls) into an Orchestra PYTHON task.
slack-dagster-to-orchestraConverts SlackResource and Slack-posting hooks/sensors into an Orchestra SLACK alert or task.
tableau-dagster-to-orchestraConverts TableauCloudWorkspace/TableauServerWorkspace asset materialization into an Orchestra TABLEAU_CLOUD task.
powerbi-dagster-to-orchestraConverts PowerBIWorkspace/semantic-model refresh assets into an Orchestra POWER_BI task.
fivetran-dagster-to-orchestraConverts FivetranResource/FivetranWorkspace assets into an Orchestra FIVETRAN task.
airbyte-cloud-dagster-to-orchestraConverts AirbyteCloudResource assets into an Orchestra AIRBYTE_CLOUD task.
airbyte-server-dagster-to-orchestraConverts self-hosted AirbyteResource(host=,port=) assets into an Orchestra AIRBYTE_SERVER task.

Prefect

SkillWhat it does
prefect-flow-structure-to-orchestraConverts @flow/CronSchedule/retries/typed parameters into the Orchestra pipeline root (schedule, configuration, inputs). Apply first, before any task-level skill.
prefect-connections-to-orchestraMaps Prefect blocks (SnowflakeCredentials, AwsCredentials, SlackWebhook, etc.) to Orchestra connections and naming/secrets conventions.
prefect-alerts-to-orchestraConverts on_failure/on_completion hooks and Prefect Automation notification actions into Orchestra's alerts: block across all six destination types.
prefect-automations-to-orchestraConverts Automations reacting to external events (storage events, DB polling, webhooks) into Orchestra sensors:/webhook:.
prefect-cross-flow-to-orchestraConverts run_deployment() calls and subflows into Orchestra trigger_events: pipeline-triggers-pipeline patterns.
prefect-conditions-to-orchestraConverts input-driven and runtime output-driven branching, plus allow_failure, into Orchestra condition: expressions.
prefect-testing-to-orchestraConverts @task-based SQL assertions, Great Expectations, and Soda checks into Orchestra DQ test tasks (with the Prefect-pass/Orchestra-fail semantic inversion).
prefect-data-passing-to-orchestraConverts implicit return-value passing, .submit() futures, and .map() fan-out into Orchestra set_outputs/OUTPUTS/matrix patterns.
prefect-secrets-to-orchestraProduces a secrets checklist from Secret/SecretStr/SecretDict usage — never asks for or writes real secret values.

Integration & task conversion (Prefect)

SkillWhat it does
dbt-core-prefect-to-orchestraConverts DbtCoreOperation/ShellOperation/DbtCloudJob into an Orchestra DBT_CORE or DBT task.
python-prefect-to-orchestraConverts plain @task Python logic (pandas, boto3, API calls) into an Orchestra PYTHON task.
slack-prefect-to-orchestraConverts SlackWebhook/hooks/raw slack_sdk calls into an Orchestra SLACK alert or task.
tableau-prefect-to-orchestraConverts hand-rolled tableau-server-client refresh tasks into an Orchestra TABLEAU_CLOUD task.
powerbi-prefect-to-orchestraConverts hand-rolled msal+requests Power BI refresh tasks into an Orchestra POWER_BI task.
fivetran-prefect-to-orchestraConverts FivetranConnector sync tasks into an Orchestra FIVETRAN task.
airbyte-cloud-prefect-to-orchestraConverts AirbyteConnection tasks pointed at api.airbyte.com into an Orchestra AIRBYTE_CLOUD task.
airbyte-server-prefect-to-orchestraConverts AirbyteConnection tasks pointed at a self-hosted host into an Orchestra AIRBYTE_SERVER task.

Airflow

SkillWhat it does
airflow-dag-structure-to-orchestraConverts schedule_interval/default_args/max_active_runs/TaskGroup/params into the Orchestra pipeline root (schedule, configuration, inputs). Apply first, before any task-level skill.
airflow-connections-to-orchestraMaps Airflow's conn_id/_conn_id= idioms, BaseHook.get_connection(), AIRFLOW_CONN_*, and Secrets Backends to Orchestra connections; distinguishes them from Variable/AIRFLOW_VAR_*.
airflow-alerts-to-orchestraConverts on_failure_callback/on_success_callback/EmailOperator/PagerDutyEventsHook into Orchestra's alerts: block across all six destination types.
airflow-sensors-to-orchestraConverts S3KeySensor/SqlSensor/ExternalTaskSensor/FileSensor polling into Orchestra sensors:.
airflow-cross-dag-to-orchestraConverts TriggerDagRunOperator/ExternalTaskSensor/SubDagOperator/Datasets into Orchestra TRIGGER_PIPELINE tasks and trigger_events:.
airflow-conditions-to-orchestraConverts trigger_rule/BranchPythonOperator/ShortCircuitOperator/LatestOnlyOperator into Orchestra condition: expressions.
airflow-testing-to-orchestraConverts SqlCheckOperator/SQLThresholdCheckOperator/Great Expectations/Soda into Orchestra DQ test tasks.
airflow-xcoms-to-orchestraConverts xcom_push/xcom_pull/TaskFlow return values into Orchestra task OUTPUTS/${{ }} data passing.
airflow-dynamic-task-mapping-to-orchestraConverts .expand()/.partial()/expand_kwargs() dynamic task mapping into Orchestra matrix: task groups.
airflow-bash-ssh-to-orchestraConverts non-dbt BashOperator/SSHOperator/WinRMOperator/KubernetesPodOperator into Orchestra PYTHON/LINUX_SSH/WINDOWS_SSH/container tasks.

Integration & task conversion (Airflow)

SkillWhat it does
dbt-core-airflow-to-orchestraConverts dbt Core run via BashOperator/SSHOperator/KubernetesPodOperator/Astronomer Cosmos into an Orchestra DBT_CORE task.
python-airflow-to-orchestraConverts PythonOperator/PythonVirtualenvOperator/@task logic into an Orchestra PYTHON task.
slack-airflow-to-orchestraConverts SlackAPIOperator/SlackWebhookOperator/raw slack_sdk calls into an Orchestra SLACK alert or task.
tableau-airflow-to-orchestraConverts TableauOperator/TableauRefreshWorkbookOperator into an Orchestra TABLEAU_CLOUD task.
powerbi-airflow-to-orchestraConverts PowerBIDatasetRefreshOperator (and hand-rolled dataflow refresh calls) into an Orchestra POWER_BI task.
fivetran-airflow-to-orchestraConverts FivetranOperator/FivetranSensor into an Orchestra FIVETRAN task.
airbyte-cloud-airflow-to-orchestraConverts AirbyteTriggerSyncOperator/AirbyteSensor pointed at Airbyte Cloud into an Orchestra AIRBYTE_CLOUD task.
airbyte-server-airflow-to-orchestraConverts AirbyteTriggerSyncOperator/AirbyteSensor pointed at a self-hosted Airbyte Server into an Orchestra AIRBYTE_SERVER task.

To get going: install the migrate-to-orchestra plugin (see Install), open a Claude/Cursor session in the source Dagster, Prefect, or Airflow project, and describe the migration — no upload step needed, the skills read the project's own source files directly.

Reference library

Start at skills/orchestra/references/orchestra/README.md. Highlights:

  • Pipeline — authoring schema + examples, failure classification, remediation playbooks, and an optional local fix-history template (knowledge-store.md)
  • State-aware orchestration (dbt SAO) — source-freshness and build_after schemas, enabling use_state_orchestration, and a per-warehouse freshness matrix for Snowflake, BigQuery, Databricks, MotherDuck/DuckDB, Redshift, Microsoft Fabric, and Postgres (plus an other fallback) (dbt-sao/)
  • MCPcloud MCP setup and tool quick reference

Pipeline validation hook

The orchestra plugin installs a PostToolUse hook. After the agent writes or edits a YAML file that is an Orchestra pipeline, it is validated against the public /pipelines/schema endpoint and any errors go straight back to the agent, which fixes them before you ever start a run. Other YAML is left alone.

The hook itself needs no API key, no CLI install and no MCP connection, so it works before a workspace is configured. Set ORCHESTRA_API_KEY and integration connection references get checked too. If the endpoint is unreachable, rate limited, or PyYAML is missing, the hook stays silent and lets the edit stand.

Install for humans

Prerequisites

  • An Orchestra API key (Orchestra UI → Settings → API Keys) — needed for the MCP tools and the skills that call them. The pipeline validation hook works without one.
  1. Connect Orchestra's cloud MCP server. Point your client at the hosted endpoint following the cloud MCP docs (~/.claude/mcp.json for Claude Code, or Cursor MCP settings) and authenticate with your ORCHESTRA_API_KEY — no local install required. Restart/reload so tools such as list_pipeline_runs and list_task_run_logs appear.
  2. Install the plugin(s) you need so the skills are discoverable by your client — the two install independently:
    • Claude Code — add this repo as a marketplace, then install one or both plugins:
      /plugin marketplace add orchestra-hq/orchestra-skills
      /plugin install orchestra@orchestra-marketplace
      /plugin install migrate-to-orchestra@orchestra-marketplace
      (or point at a local clone: /plugin marketplace add /path/to/orchestra-skills).
    • Cursor — add the marketplace and install orchestra and/or migrate-to-orchestra from .cursor-plugin/marketplace.json per Cursor's plugin docs. Each skill auto-triggers from a matching prompt once installed.
  3. For agent behavior in this repo, read AGENTS.md.

Typical workflows

Failed run — Paste a pipeline run URL, run UUID, pipeline name, or error snippet. identify-pipeline-error parses the input, loads the pipeline run and failed task runs, identifies the failing task and its cause, then routes to the right fixer: a dbt code issue → fix-pipeline-dbt-task, a Python code/schema issue → fix-pipeline-python-task, an Orchestra-platform/config issue → fix-orchestra-pipeline. Data, vendor/ingestion, auth, network, and other causes are reported with the right next action by identify-pipeline-error itself.

Author pipeline YAML — Describe the desired stages/tasks and create a version: v1 pipeline YAML. The authoring skill validates (via orchestra-cli or MCP) and remediates validation errors until clean.

Review before merge — Use the triage skill when you want a branch fix, validation run, and triage summary, then explicit approval before merge and production retry.

Downstream symptom — Triage can start from a downstream issue (stale dashboard, bad dbt output) and walk upstream through the pipeline graph.

Contributing

  • Skills live under skills/orchestra/skills/ (the orchestra plugin) and skills/migrate-to-orchestra/skills/ (the migrate-to-orchestra plugin), each its own plugin bundle with its own .claude-plugin/plugin.json/.cursor-plugin/plugin.json. Shared Orchestra pipeline/schema material lives under skills/orchestra/references/orchestra/ and is the single source of truth for pipeline YAML schema/validation — migration skills should link to it rather than re-deriving schema tables locally, to avoid two sources drifting apart.
  • To add a skill, create skills/<plugin>/skills/<skill-name>/SKILL.md with name + description frontmatter, put any supporting references//templates/ in the same folder, and add it to the relevant category table under Skills (or Migrate to Orchestra). The plugin exposes it automatically — bump the version in that plugin's .claude-plugin/plugin.json and .cursor-plugin/plugin.json. Also add its path to the skills array in .tessl-plugin/plugin.json and bump its version — this isn't auto-generated, so a skill left out here silently stops showing up in Tessl's published listing (Tessl has no plugin concept, so both plugins show up in one flat list there — the skills/<plugin>/... path prefix is the only separation). CI (Validate Skills) checks the frontmatter, that SKILL.md stays under ~500 lines, that the manifests are valid JSON, and that every skill on disk lives inside some plugin's skills/ directory. Write skills to be client-agnostic — describe capabilities (e.g. "if your client can schedule a wake-up…") rather than naming a specific tool.
  • To add a new orchestrator's migration skills alongside Dagster's, Prefect's, and Airflow's, add them under skills/migrate-to-orchestra/skills/<orchestrator>-*-to-orchestra/ following the existing naming convention — one plugin covers all source orchestrators, so no new plugin/marketplace entry is needed. If a shared/reused skill from another orchestrator's set (e.g. a connections-style skill) doesn't have a same-orchestrator equivalent, author or complete a self-contained one rather than pointing the new orchestrator's skills at another orchestrator's vocabulary.
  • Recording fixes is optional and deferred to your client's persistent memory — never commit workspace-specific fix history. Extend pipeline/diagnosis-patterns.md only with generic, reusable patterns.
  • Evals. Skill evals live under evals/ — an eval-driven harness that runs a skill with and without it via the headless claude CLI and grades the output. Currently wired up for write-snowflake-dq-tests. See evals/README.md for setup and how to run, grade, and add a suite.
  • Do not commit API keys, .env files, or other secrets.

Agents editing this repo should follow AGENTS.md.

README.md

tile.json