CtrlK
BlogDocsLog inGet started
Tessl Logo

authoring-language-sdk-tasks

The language-neutral foundation for Airflow language SDKs — implement task logic in a non-Python language while the DAG stays in Python. Use when the user wants to run an Airflow task in another language (Java, Kotlin, Go, or other JVM/native languages), asks how the Python `@task.stub` pairs with native task code, how task/DAG IDs must match across the two sides, how data passes via XCom as JSON, or which language SDKs exist. This skill owns the shared Python-stub pattern and conceptual model; for a specific language's native API, build, and runtime, use that language's skill (e.g. authoring-java-sdk-tasks, authoring-go-sdk-tasks).

75

Quality

93%

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

86%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 tight, well-structured foundation document: an executable Python example, concrete cross-language rules, a JSON type-mapping table, and pointed pitfalls including exact failure modes. Its only weaknesses are mild redundancy around the queue-routing rule and the absence of an explicit verification checkpoint for the ID-matching requirement that the skill itself flags as the primary failure source.

Suggestions

State the queue_to_coordinator requirement once instead of three times (inline comment, section prose, and rules list) — collapsing the duplicates would tighten conciseness without losing information.

Merge the 'Both sides need the upstream reference' pitfall with the earlier 'arg only declares the dependency' explanation, since they restate the same rule.

Add a short validation hint for the skill's most fragile operation, e.g. how to confirm the stub queue name exists in queue_to_coordinator or that DAG/task IDs match before running, turning the 'no DAGs' error note into a pre-flight check.

DimensionReasoningScore

Conciseness

The body is dense with non-obvious specifics (stub AST rules, retry_policy ValueError rationale, XCom JSON table) and wastes no tokens explaining what Airflow or XCom generically are. Minor trimmable redundancy keeps it below the top anchor: the queue/queue_to_coordinator rule is stated three times (inline comment, section prose, and the rules list), and "Both sides need the upstream reference" in the pitfalls repeats the earlier "arg only declares the dependency" explanation.

4 / 5

Actionability

The Python DAG example is complete and copy-paste ready (imports, @dag, @task.stub with queue/retries/retry_delay, dependency wiring, invocation), and the rules are concrete and verifiable: "The stub function name is the task ID", "retry_policy is rejected on stubs (@task.stub raises ValueError)", "only pass, ..., or a docstring is allowed in the body". The absence of native-side code is explicit, justified delegation to per-language skills rather than a gap, so the common case is fully covered.

5 / 5

Workflow Clarity

The authoring workflow is clearly sequenced (declare stubs in the DAG with matching IDs, set queue/retries on the stub, delegate native implementation) and the pitfalls section provides error feedback ("Mismatches surface as 'no DAGs' or missing-XCom errors"), which covers the error-recovery side of the top anchor. However, there is no explicit verification step (e.g., a command or check to confirm IDs match or the queue is registered) for the skill's most fragile operation, so it fits 'clear sequence with most checkpoints present; minor validation gaps' better than a 5.

4 / 5

Progressive Disclosure

No bundle files exist (references/, scripts/, assets/ are all absent) and none are needed: the ~125-line body is a compact conceptual foundation whose per-language details are deliberately and clearly delegated to named sibling skills ("authoring-java-sdk-tasks", "configuring-airflow-language-sdks") rather than buried. Sections are well-organized and each is appropriately sized to be inline, matching the well-organized self-contained-skill case.

5 / 5

Total

18

/

20

Passed

Description

100%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.

The description is exemplary: it states the concrete shared capabilities, gives an explicit and varied 'Use when' clause with natural trigger terms including the specific languages, and clearly delineates its scope from sibling per-language skills. It is specific, complete, and highly distinguishable with no over-claims or filler.

DimensionReasoningScore

Specificity

The description names concrete capabilities: "implement task logic in a non-Python language while the DAG stays in Python", how "the Python @task.stub pairs with native task code", "task/DAG IDs must match across the two sides", and "data passes via XCom as JSON". This matches the anchor 'Lists multiple specific concrete actions; comprehensive coverage' — it covers implementing, stub pairing, ID matching, and data passing, and even delimits what is out of scope.

5 / 5

Completeness

Both 'what' ("The language-neutral foundation for Airflow language SDKs — implement task logic in a non-Python language while the DAG stays in Python") and 'when' ("Use when the user wants to run an Airflow task in another language..., asks how..., how..., or which...") are explicit with concrete trigger phrases. It also states ownership boundaries, matching the anchor for clearly and explicitly answering both what AND when.

5 / 5

Trigger Term Quality

Natural trigger phrasing is comprehensive for this domain: "run an Airflow task in another language", "(Java, Kotlin, Go, or other JVM/native languages)", "@task.stub", "XCom as JSON", "task/DAG IDs", and "which language SDKs exist". A user asking any of these questions would naturally use these terms, matching the top anchor's coverage of natural terms and synonyms.

5 / 5

Distinctiveness Conflict Risk

It carves a clear niche (shared language-neutral foundation) and explicitly redirects to sibling skills: "for a specific language's native API, build, and runtime, use that language's skill (e.g. authoring-java-sdk-tasks, authoring-go-sdk-tasks)". Triggers are specific to cross-language task authoring, so conflict with adjacent skills is minimal. The voice is third-person throughout, so no penalty applies.

5 / 5

Total

20

/

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
astronomer/agents
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.