CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

slack-airflow-to-orchestra

Use this skill when the user wants to convert an Airflow task that uses SlackAPIOperator, SlackWebhookOperator, or SlackAPIPostMessageOperator — or Airflow on_failure_callback / on_success_callback functions that send Slack messages — into an equivalent Orchestra pipeline alert or task. Also covers a plain PythonOperator (or @task) whose function body calls the Slack API directly via slack_sdk/WebClient/chat_postMessage rather than a dedicated Slack operator. Triggers: any mention of migrating or rewriting Slack notification Airflow tasks to Orchestra; Airflow DAG code using SlackAPIOperator, SlackWebhookOperator, SlackAPIPostMessageOperator, callback functions that fire SlackWebhookOperator, or a PythonOperator whose entire job is posting a Slack message via slack_sdk/WebClient.

Quality

82%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide
SecuritybySnyk

Passed

No findings from the security scan

SKILL.md
Quality
Evals
Security

Quality

Content

61%Weight 40%Scale 1-5

Reviews the quality of instructions and guidance provided to agents. Good implementation is clear, handles edge cases, and produces reliable results.

The body is a strong, actionable conversion guide with complete YAML examples, schema tables, and a good decision framework. Its weaknesses are redundancy (the alerts YAML and the task-vs-alert mapping each appear multiple times), no verification step in the conversion workflow, and a missing syntax example for the task-level alerts block it recommends.

Suggestions

Remove one of the two near-identical alerts YAML examples — abbreviate the Before/After 'after' example to reference the Option 1 block (or vice versa) — and consolidate the task-vs-alert mapping (Decision Guide table, bullets, and Conversion Steps) into a single location.

Add a final verification step to Conversion Steps, e.g. run the converted pipeline (or a deliberately failing task) and confirm the Slack alert fires to the expected channel before considering the migration done.

Show the task-level 'alerts' block syntax with a short YAML example, since step 4 ('Mid-DAG SlackWebhookOperator → task-level alerts block') recommends it but no example demonstrates it.

DimensionReasoningScore

Conciseness

The body never explains concepts Claude already knows (no 'what is Airflow/Slack' padding), but it is noticeably redundant: the full alerts YAML block appears twice (Option 1 and the Before/After 'after' example), and the task-vs-alert mapping is restated three times (Decision Guide table, 'When to use a task vs an alert' bullets, and Conversion Steps). This fits the 3 anchor ('mostly efficient but... could be tightened') better than 4, where duplication would need to be minor rather than a repeated ~25-line YAML block.

3 / 5

Actionability

Guidance is mostly copy-paste ready: complete Orchestra YAML for both the alerts block and the explicit SLACK task, exact schema tables (AlertModel/AlertDestinationModel fields, 'statuses' values), and exact integration values ('integration: SLACK', 'integration_job: SEND_SLACK_MESSAGE', 'channel_name'). It falls short of 5 because step 4 directs the reader to 'add an alerts: block directly on the upstream task' without ever showing the task-level alerts syntax — a real gap in the common cases.

4 / 5

Workflow Clarity

The Conversion Steps section gives a clear, correctly ordered 5-step sequence ('Identify Slack usage' → 'Callbacks → pipeline-level alerts block' → ... → 'Create the Orchestra Slack connection') reinforced by the decision table. However, validation is entirely absent — there is no step to verify the converted pipeline fires the Slack message (e.g., a test failure run), which matches the 3 anchor ('sequence present but checkpoints missing') rather than 4 ('most checkpoints present').

3 / 5

Progressive Disclosure

The single-file body is well organized with clear section headers (Overview, Decision Guide, Option 1, Option 2, Conversion Steps, Before/After, Gotchas, References) and clearly signaled external links, and at ~210 lines / 9KB it is a manageable size for inline content. It does not reach 5 because the schema tables and parts of the Gotchas list are detail that could be split into a one-level-deep reference file, and the body exceeds the simple single-page case the 5 anchor describes.

4 / 5

Total

14

/

20

Passed

Description

95%Weight 40%Scale 1-5

Based on the skill's description, can an agent find and select it at the right time? Clear, specific descriptions lead to better discovery.

A highly effective description: concrete, comprehensive, and explicit about both capability and triggers, with excellent natural keyword coverage for this niche. Its only weakness is length — the 'Triggers:' sentence duplicates the operator enumeration from the opening sentence, which adds tokens without adding information.

DimensionReasoningScore

Specificity

The description lists multiple concrete actions with comprehensive coverage — 'convert an Airflow task that uses SlackAPIOperator, SlackWebhookOperator, or SlackAPIPostMessageOperator... into an equivalent Orchestra pipeline alert or task' — and also covers callbacks and plain PythonOperator/slack_sdk usage, matching the 5 anchor. However, the 'Triggers:' sentence restates the operator list from the first sentence nearly verbatim, padding length without adding new capability information, so it falls just below the comprehensive-and-lean level 5 (not level 3, since coverage is far more than 1-2 actions).

4 / 5

Completeness

It explicitly answers both questions: what ('convert an Airflow task... into an equivalent Orchestra pipeline alert or task') and when ('Use this skill when the user wants to...' plus a dedicated 'Triggers:' clause enumerating concrete trigger phrases). This is a direct match to the 5 anchor; level 4 would require the 'when' to be less explicit, which it is not.

5 / 5

Trigger Term Quality

Comprehensive natural-term coverage including synonyms and variants: 'SlackAPIOperator', 'SlackWebhookOperator', 'SlackAPIPostMessageOperator', 'on_failure_callback / on_success_callback', 'PythonOperator (or @task)', 'slack_sdk/WebClient/chat_postMessage', and user-natural phrases like 'migrating or rewriting Slack notification Airflow tasks to Orchestra'. This matches the 5 anchor (comprehensive coverage including synonyms); level 4 would require natural terms to be missing, and none of the plausible user phrasings are absent.

5 / 5

Distinctiveness Conflict Risk

The niche is unambiguous — Airflow-to-Orchestra Slack notification conversion — with distinct triggers naming exact operator classes, making it very unlikely to fire for a wrong skill. Matches the 5 anchor ('clear niche with distinct triggers; minimal conflict risk'); level 4's 'minor overlap risk with closely related skills' does not apply since no generic Airflow or Slack terms stand alone.

5 / 5

Total

19

/

20

Passed

Validation

100%

Checks the skill against the spec for correct structure and formatting. All validation checks must pass before discovery and implementation can be scored.

Validation — 16 / 16 Passed

Validation for skill structure

No warnings or errors.

Repository

orchestra-hq/orchestra-skills

Path

skills/migrate-to-orchestra/skills/slack-airflow-to-orchestra/SKILL.md

Reviewed

Table of Contents

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.