home / skills / pluginagentmarketplace / custom-plugin-kotlin / kotlin-dsl
npx playbooks add skill pluginagentmarketplace/custom-plugin-kotlin --skill kotlin-dslReview the files below or copy the command above to add this skill to your agents.
---
name: kotlin-dsl
description: Kotlin DSL - type-safe builders, Gradle DSL, @DslMarker
version: "1.0.0"
sasmp_version: "1.3.0"
bonded_agent: 07-kotlin-dsl
bond_type: PRIMARY_BOND
execution:
timeout_ms: 30000
retry:
max_attempts: 3
backoff: exponential
initial_delay_ms: 1000
parameters:
required:
- name: type
type: string
validation: "^(gradle|custom|html|config)$"
optional:
- name: immutable
type: boolean
default: true
logging:
level: info
events: [skill_invoked, type_loaded, error_occurred]
---
# Kotlin DSL Skill
Build type-safe DSLs with Kotlin's language features.
## Topics Covered
### @DslMarker for Scope Control
```kotlin
@DslMarker
annotation class HtmlDsl
@HtmlDsl
class HTML { fun body(block: Body.() -> Unit) { } }
@HtmlDsl
class Body { fun p(text: String) { } }
// Usage - scoped correctly
html { body { p("Text") } }
```
### Gradle Convention Plugin
```kotlin
// kotlin-library.gradle.kts
plugins { kotlin("jvm"); `java-library` }
kotlin { jvmToolchain(17) }
dependencies {
testImplementation(kotlin("test"))
testImplementation("io.mockk:mockk:1.13.9")
}
tasks.test { useJUnitPlatform() }
```
### Type-Safe Config Builder
```kotlin
@ConfigDsl
class ServerConfig private constructor(val host: String, val port: Int) {
class Builder {
var host = "localhost"
var port = 8080
fun build() = ServerConfig(host, port)
}
}
fun serverConfig(block: ServerConfig.Builder.() -> Unit) =
ServerConfig.Builder().apply(block).build()
// Usage
val config = serverConfig { host = "api.example.com"; port = 443 }
```
## Troubleshooting
| Issue | Resolution |
|-------|------------|
| Scope pollution | Add @DslMarker annotation |
| Gradle cache stale | Run ./gradlew --stop |
## Usage
```
Skill("kotlin-dsl")
```