CtrlK
BlogDocsLog inGet started
Tessl Logo

jbaruch/koog

Koog 1.0 idioms, gotchas, and scaffolding skills for Kotlin agents on the JVM

88

1.95x
Quality

88%

Does it follow best practices?

Impact

88%

1.95x

Average score across 43 eval scenarios

SecuritybySnyk

Passed

No known issues

Overview
Quality
Evals
Security
Files

criteria.jsonevals/scenario-41/

{
  "context": "Tests whether the agent picks the stdio (process-based) MCP transport when the user explicitly wants the server launched as a local subprocess — rather than reaching for HTTP transports that don't apply here.",
  "type": "weighted_checklist",
  "checklist": [
    {
      "name": "Uses the process-based MCP transport",
      "description": "Builds the MCP registry using McpToolRegistryProvider.fromProcess(process). Does NOT use streamableHttp or fromSseUrl — the user explicitly chose stdio against a local subprocess",
      "max_score": 30
    },
    {
      "name": "Launches the process with ProcessBuilder",
      "description": "Creates the subprocess via ProcessBuilder(\"npx\", \"-y\", \"@playwright/mcp@latest\").start() (or an equivalent constructor producing a java.lang.Process). Each argument is its own element in the command list — does not pass the whole command as a single shell-quoted string",
      "max_score": 20
    },
    {
      "name": "Adds the agents-mcp dependency",
      "description": "Adds the MCP client dependency `ai.koog:agents-mcp-jvm:1.0.0-beta` to build.gradle.kts. The umbrella koog-agents does not include MCP, so the dependency must be added explicitly. The artifact requires the `-jvm` suffix (only JVM variants are published at this version) and the `1.0.0-beta` version (Koog 1.0 stable did not publish `agents-mcp` at `1.0.0`)",
      "max_score": 20
    },
    {
      "name": "Builds the registry before constructing the agent",
      "description": "Calls McpToolRegistryProvider.fromProcess(...) and assigns it to a variable BEFORE the AIAgent(...) call, then passes that variable as toolRegistry. Does not try to add MCP tools after the agent is constructed",
      "max_score": 15
    },
    {
      "name": "Calls the suspending builder inside a coroutine context",
      "description": "The fromProcess builder runs inside the existing runBlocking { ... } (or another coroutine scope), since it is a suspending call",
      "max_score": 10
    },
    {
      "name": "Does not import Ktor or HTTP-client types",
      "description": "The stdio transport has no HTTP component — the produced file should not import Ktor HttpClient, OkHttp, or any HTTP-transport configuration the agent does not need",
      "max_score": 5
    }
  ]
}

evals

README.md

tile.json