CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

sdk-container-publishing

Publish .NET services as container images with the built-in SDK tooling (dotnet publish /t:PublishContainer, Microsoft.NET.Build.Containers) - no Dockerfile required. Covers the MSBuild property surface, base-image inference, self-contained and AOT implications, and CI/CD publishing.

Quality

79%

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

Fix and improve this skill with Tessl

tessl review fix ./skills/sdk-container-publishing/SKILL.md
SKILL.md
Quality
Evals
Security

Quality

Content

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

An action-dense, well-structured body with executable commands, complete property examples, and a clean one-level-deep reference bundle. Its main weakness is duplication: the Troubleshooting section re-inlines detail that the troubleshooting reference already covers, and the overall workflow is sequenced implicitly rather than as explicit steps with checkpoints.

Suggestions

Cut the four inline Troubleshooting subsections to a compact symptom-to-fix table (one line each) and delegate detail to references/troubleshooting.md, which already covers them in depth.

Present the core flow as an explicit numbered quick-start sequence (set properties -> publish -> verify) with the Verification commands as a checkpoint step, especially the tag check before a registry push in CI.

Move the version-sensitive SDK notes (8.0.200 inference changes, 8.0.405/9.0.102 multi-arch support, 9.0.100 insecure registries) into the reference files to keep the overview stable over time.

DimensionReasoningScore

Conciseness

Mostly efficient - the Key Facts, output-mode table, and csproj example are lean and earn their tokens - but the Troubleshooting section opens by saying the failures 'are covered in depth in references/troubleshooting.md' and then re-details four of them inline with Symptom/Cause/Fix subsections (~35 lines duplicating the reference file), ending with 'For more, see references/troubleshooting.md' again. This is more than a minor instance of over-explanation, matching the anchor 'mostly efficient but includes some unnecessary explanation or could be tightened' rather than the 'minor instances' of level 4.

3 / 5

Actionability

Fully executable, copy-paste-ready guidance covering the common cases: 'dotnet publish /t:PublishContainer -c Release', a complete minimal csproj XML block, a concrete CI publish command with -p: property flags, named MSBuild properties (ContainerRepository, ContainerImageTags, ContainerArchiveOutputPath), an error code (CONTAINER2008), an env var name, and concrete verification commands. It clearly exceeds level 4 by covering the common local, tarball, CI, and registry cases.

5 / 5

Workflow Clarity

A clear implied sequence exists (choose output mode -> set minimal properties -> publish -> verify) with a dedicated Verification section of concrete commands and Symptom/Cause/Fix troubleshooting as an error-recovery loop. It falls short of level 5 because the sequence is never laid out as explicit ordered steps and validation checkpoints (e.g. verifying the tag before pushing in CI) are implicit rather than explicit; it is above level 3 because checkpoints and recovery paths are present, not absent.

4 / 5

Progressive Disclosure

The body is a well-organized overview with clearly signaled, one-level-deep references - all five references/*.md files cited in the body exist in the bundle and are linked with descriptive context (e.g. 'See [references/property-reference.md] for the full property catalog'). However, the four inline Troubleshooting subsections are content that already lives in references/troubleshooting.md and should be split out entirely, a minor organization gap that keeps this below the 'content appropriately split' bar of level 5.

4 / 5

Total

16

/

20

Passed

Description

75%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 specific, third-person description that names exact commands and coverage areas, but it omits any explicit 'use when' trigger guidance and misses a few natural trigger synonyms like 'containerize' or 'dockerize'. Strong on what, weak on when.

Suggestions

Add an explicit 'Use when...' clause with concrete trigger phrases, e.g. 'Use when the user wants to containerize a .NET service, asks about SDK-built image tags or base image selection, or needs container publishing in CI/CD.'

Include natural synonyms users would actually say - 'containerize', 'dockerize a .NET app', 'Docker image' - not just the tooling jargon.

Consider signaling the boundary (e.g. 'write a Dockerfile instead when RUN steps are needed') to further distinguish it from Dockerfile-based containerization skills.

DimensionReasoningScore

Specificity

The description names multiple concrete capabilities: 'Publish .NET services as container images with the built-in SDK tooling (dotnet publish /t:PublishContainer, Microsoft.NET.Build.Containers)' plus specific coverage areas 'MSBuild property surface, base-image inference, self-contained and AOT implications, and CI/CD publishing'. This matches the anchor for multiple specific concrete actions with comprehensive coverage, and it is written in third person ('Publish...', 'Covers...').

5 / 5

Completeness

The 'what' is clearly and explicitly answered, but there is no 'Use when...' clause or equivalent explicit trigger guidance anywhere in the description. Per the judging guidelines, a missing 'Use when' clause caps completeness at 3, which is exactly the anchor 'has a clear what but when is missing or only weakly implied'.

3 / 5

Trigger Term Quality

Good keyword coverage: '.NET', 'container images', 'Dockerfile', 'dotnet publish', 'MSBuild', 'base image', 'AOT', 'CI/CD'. However, common natural synonyms a user would say are missing - 'containerize' (the official tutorial's own term), 'dockerize', and 'Docker' beyond the single 'Dockerfile' mention - matching the anchor for good coverage with a few natural terms missing rather than comprehensive synonym coverage.

4 / 5

Distinctiveness Conflict Risk

The description claims a clear niche with distinct triggers: SDK-specific tooling names ('dotnet publish /t:PublishContainer', 'Microsoft.NET.Build.Containers', 'MSBuild property surface') make it very unlikely to fire for a generic Docker/containerization skill. This fits the anchor for a clear niche with minimal conflict risk; the score of 4 would require noticeable overlap with a closely related skill, which is not the case.

5 / 5

Total

17

/

20

Passed

Validation

93%

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

Validation — 15 / 16 Passed

Validation for skill structure

CriteriaDescriptionResult

frontmatter_unknown_keys

Unknown frontmatter key(s) found; consider removing or moving to metadata

Warning

Total

15

/

16

Passed

Repository

Aaronontheweb/dotnet-skills

Path

skills/sdk-container-publishing/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.