CtrlK
BlogDocsLog inGet started
Tessl Logo

jbaruch/koog

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

89

1.78x
Quality

89%

Does it follow best practices?

Impact

89%

1.78x

Average score across 47 eval scenarios

SecuritybySnyk

Advisory

Suggest reviewing before use

Overview
Quality
Evals
Security
Files

criteria.jsonevals/scenario-47/

{
  "context": "Tests whether the agent selects ACP — not A2A (agent-to-agent RPC) or MCP (tool host) — for a tooling client that drives an agent's run lifecycle with cancellation and progress streaming, then wires the ACP feature correctly. A baseline with no Koog 1.0 knowledge does not know Koog exposes an ACP feature at all, and tends to reach for a generic HTTP/RPC layer or conflate it with MCP.",
  "type": "weighted_checklist",
  "checklist": [
    {
      "name": "Chooses ACP for the tooling-client case",
      "description": "Selects ACP for a tooling client that needs lifecycle control. Does NOT pick A2A (agent-to-agent RPC, where the remote is another agent doing its own planning) or MCP (a tool-host protocol that exposes tools, not agents). Failure: wires A2A, MCP, or a hand-rolled HTTP endpoint instead",
      "max_score": 25
    },
    {
      "name": "Adds the ACP dependency",
      "description": "Adds ai.koog:agents-features-acp at 1.0.0 or later to build.gradle.kts (exact group and artifact). Failure: wrong artifact name, missing dependency, or an a2a-*/mcp module",
      "max_score": 15
    },
    {
      "name": "Correct ACP import",
      "description": "Imports ai.koog.agents.features.acp.ACP. Failure: invented package path or missing import",
      "max_score": 10
    },
    {
      "name": "install(ACP) in the AIAgent trailing lambda",
      "description": "Calls install(ACP) { ... } inside the AIAgent(...) trailing lambda — where features are installed during construction. Failure: installs at the HTTP layer, as standalone middleware, or mutates the agent after construction",
      "max_score": 20
    },
    {
      "name": "Configures the endpoint inside install(ACP)",
      "description": "Sets the endpoint property inside the install(ACP) block. Failure: no endpoint configured, or configured outside the install block",
      "max_score": 10
    },
    {
      "name": "Notes progress events surface to the client",
      "description": "Notes that ACP surfaces the agent's outgoing events (LLM round-trips, tool calls, planner steps) as progress notifications the client can subscribe to. Failure: no mention of how the dashboard observes progress",
      "max_score": 10
    },
    {
      "name": "Rationale for ACP over A2A",
      "description": "Explains in notes.md that A2A is RPC-shaped (caller invokes and gets a single result) whereas ACP is bidirectional and gives the tooling client cancellation plus progress streaming. Failure: no rationale, or a rationale that confuses the two protocols' roles",
      "max_score": 10
    }
  ]
}

CHANGELOG.md

README.md

tessl.json

tile.json