CtrlK
BlogDocsLog inGet started
Tessl Logo

kotlin-ktor-patterns

Ktor server patterns including routing DSL, plugins, authentication, Koin DI, kotlinx.serialization, WebSockets, and testApplication testing. Use when building a Ktor server — routing, plugins, auth, DI, serialization, or tests.

69

Quality

85%

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

SKILL.md
Quality
Evals
Security

Quality

Content

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

A highly actionable, code-dense pattern library with excellent executable coverage of routing, serialization, auth, DI, and testing. Its main weaknesses are duplication of example/setup blocks and a monolithic single-file structure with no progressive disclosure of advanced topics into reference files.

Suggestions

Move the WebSockets and testApplication sections (and optionally the Koin section) into references/ files (e.g., references/websockets.md, references/testing.md) and link them from a short overview, converting the 690-line body into a lean core skill with one-level-deep references.

Deduplicate the repeated examples: show `userRoutes()` once and reference it from the auth and validation sections, and factor the repeated `application { install(Koin) { modules(testModule) } ... }` test setup into a single shared helper snippet.

Trim the "When to Activate" section (it restates the frontmatter description) and the final "Remember" paragraph, keeping only the non-obvious guidance (thin routes, logic in services).

DimensionReasoningScore

Conciseness

The body is almost entirely executable code with minimal concept-explaining prose, but there is noticeable duplication that could be trimmed: the `userRoutes()` example appears three times (routing, Koin, validation sections) and the `application { install(Koin) { modules(testModule) } ... }` setup block is repeated verbatim in four tests. Mostly efficient — matches anchor 4 rather than 3 because padding is confined to repetition, not explanation of things Claude already knows.

4 / 5

Actionability

Every section provides copy-paste-ready, complete Kotlin: full CRUD route handlers, JWT auth configuration reading from application.yaml, StatusPages exception mappings, Koin modules, WebSocket chat with concurrency handling, and executable testApplication test cases including an authenticated-route test with a helper-generated JWT.

5 / 5

Workflow Clarity

Sections follow a coherent build order (project layout → entry point → routing → serialization → auth → error handling → CORS → DI → validation → WebSockets → tests → config) and the closing "Remember" note gives orientation (thin routes, logic in services, test with testApplication). It is a patterns reference rather than a stepwise workflow, so there are no explicit validation checkpoints, but no destructive/batch operations require them — fits anchor 4, not 5, because a newcomer sequence ("start here, then add X") is implied rather than stated.

4 / 5

Progressive Disclosure

No bundle files exist (no references/, scripts/, or assets/), so all ~690 lines live inline in SKILL.md under well-organized headers. Structure is good, but substantial self-contained topics (WebSockets, testApplication testing, Koin) would be more discoverable and token-efficient as separate one-level reference files — matching anchor 3 ("content that should be separate is inline") rather than 2, since section headers and a quick-reference table provide real navigation.

3 / 5

Total

16

/

20

Passed

Description

92%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 strong description: it names the domain, lists concrete capabilities, and pairs them with an explicit "Use when..." trigger clause covering the main use cases. Minor room to broaden trigger vocabulary (e.g., "Kotlin", "REST API") but conflict risk and completeness are both excellent.

DimensionReasoningScore

Specificity

The description enumerates concrete capabilities — "routing DSL, plugins, authentication, Koin DI, kotlinx.serialization, WebSockets, and testApplication testing" — giving comprehensive, named coverage of the Ktor server domain rather than generic claims.

5 / 5

Completeness

It explicitly answers both what it does ("Ktor server patterns including...") and when to use it ("Use when building a Ktor server — routing, plugins, auth, DI, serialization, or tests"), with concrete trigger activities matching the anchor-5 example structure.

5 / 5

Trigger Term Quality

Natural trigger phrases a user would say are present ("building a Ktor server", "routing, plugins, auth, DI, serialization, or tests"), but common variations like "Kotlin", "REST API", or build-tool markers (build.gradle.kts) are absent, so coverage is good rather than comprehensive.

4 / 5

Distinctiveness Conflict Risk

"Ktor" is a clear, distinct niche trigger; a user needing Ktor patterns would say "Ktor", and the enumerated subtopics further disambiguate it from generic Kotlin or Spring skills.

5 / 5

Total

19

/

20

Passed

Validation

87%

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

Validation — 14 / 16 Passed

Validation for skill structure

CriteriaDescriptionResult

skill_md_line_count

SKILL.md is long (691 lines); consider splitting into references/ and linking

Warning

metadata_version

'metadata.version' is missing

Warning

Total

14

/

16

Passed

Repository
affaan-m/ECC
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.