Koog 1.0 idioms, gotchas, and scaffolding skills for Kotlin agents on the JVM
88
88%
Does it follow best practices?
Impact
88%
1.95xAverage score across 43 eval scenarios
Passed
No known issues
ai.koog. Pin the umbrella and most modules to 1.0.0 or later. A few satellite modules (agents-mcp, agents-mcp-server, standalone agents-ext) remain on 1.0.0-beta in the 1.0 release window — see the dedicated section belowdocs.koog.ai/quickstart/ still showed 0.7.1 at the time this rule was written. Don't copy it — use 1.0.0 (or the appropriate 1.0.0-beta for the satellite modules)ai.koog:koog-agents:1.0.0 is the umbrella that pulls everything needed for the README example: agent core, the simple executor factories, common providersai.koog:agents-planner — the planner DSL (Planners.llmBased, Planners.goap) lives in its own module since 1.0ai.koog:agents-mcp-jvm:1.0.0-beta (client) / ai.koog:agents-mcp-server-jvm:1.0.0-beta (server) — MCP support. See the 1.0.0-beta / -jvm notes belowai.koog:koog-spring-boot-starter — autoconfig for Spring Bootai.koog:koog-ktor — Ktor pluginai.koog:agents-features-opentelemetry — observabilityai.koog:agents-features-longterm-memory — cross-session memory (and *-longterm-memory-aws for Bedrock AgentCore backend)ai.koog:prompt-executor-<provider>-client — only when you want a provider that the umbrella does not bundle (e.g., DashScope, LiteRT)1.0.0-beta, not 1.0.0agents-mcp, agents-mcp-server, and the standalone agents-ext artifact publish as 1.0.0-beta even though the umbrella is 1.0.0. Pin them to 1.0.0-beta (or whatever stable tag publishes later). 1.0.0 does not exist for these modulessubgraphWithTask / subgraphWithVerification / CriticResult (package ai.koog.agents.ext.agent) are exceptions: they ship inside agents-core (which the umbrella pulls), NOT in the standalone agents-ext beta artifact. Reach for agents-ext only if you genuinely need something the standalone module exposes-jvm suffixagents-mcp and agents-mcp-server publish only JVM-specific variants at the versions we need. Declare them with the -jvm suffix: ai.koog:agents-mcp-jvm:1.0.0-beta (NOT bare ai.koog:agents-mcp:1.0.0-beta)-jvm suffix before assuming the artifact doesn't existKoogHttpClient.Factory is auto-discovered, so simpleOpenAIExecutor(apiKey) still works without naming a transportai.koog:http-client-ktor, ai.koog:http-client-okhttp, ai.koog:http-client-java and pass its factory to the executorprompt-executor-llms-all — that route was closed in 1.0; declare http-client-ktor directly if your code references Ktorbinary version of its metadata is 2.3.0, expected version is 2.1.0 (or similar)android.useAndroidX=true in gradle.propertiesevals
scenario-1
scenario-2
scenario-3
scenario-4
scenario-5
scenario-6
scenario-7
scenario-8
scenario-9
scenario-10
scenario-11
scenario-12
scenario-13
scenario-14
scenario-15
scenario-16
scenario-17
scenario-18
scenario-19
scenario-20
scenario-21
scenario-22
scenario-23
scenario-24
scenario-25
scenario-26
scenario-27
scenario-28
scenario-29
scenario-30
scenario-31
scenario-32
scenario-33
scenario-34
scenario-35
scenario-36
scenario-37
scenario-38
scenario-39
scenario-40
scenario-41
scenario-42
scenario-43
skills
add-observability
add-persistence
add-rag
add-structured-output
add-token-budgeting
add-tool
cache-llm-calls
define-prompt
domain-model-subtask-pipeline
references
enable-prompt-caching
handle-agent-events
manage-state
migrate-from-0-x
model-planner-subtasks
persist-chat-history
query-sql-from-agent
scaffold-agent
snapshot-and-restore
test-koog-agents
trace-agent-internals
use-attachments
use-functional-agent
use-llm-node-variants
use-planner
wire-a2a
wire-acp-server
wire-ktor-server
wire-mcp-server
wire-spring-boot