CtrlK
BlogDocsLog inGet started
Tessl Logo

jbaruch/koog

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

87

1.85x
Quality

88%

Does it follow best practices?

Impact

87%

1.85x

Average score across 45 eval scenarios

SecuritybySnyk

Advisory

Suggest reviewing before use

Overview
Quality
Evals
Security
Files

criteria.jsonevals/scenario-5/

{
  "context": "Tests whether the agent picks the right Koog 1.0 API for history compression (a writeSession-locked replaceHistoryWithTLDR call at a deliberate boundary) rather than reaching for an external string-manipulation approach or compressing on every node.",
  "type": "weighted_checklist",
  "checklist": [
    {
      "name": "Calls replaceHistoryWithTLDR inside llm.writeSession",
      "description": "Invokes replaceHistoryWithTLDR() (or an equivalent HistoryCompressionStrategy invocation) inside llm.writeSession { ... }. Does NOT manipulate the prompt history outside a write session — the session lock is mandatory for safe mutation",
      "max_score": 35
    },
    {
      "name": "Compresses only at the boundary node, not every node",
      "description": "The compression call appears in exactly one place — the boundary node the developer identified. Does NOT add per-node compression that would summarize away each step's findings",
      "max_score": 25
    },
    {
      "name": "Picks WholeHistory or equivalent TL;DR strategy",
      "description": "Uses HistoryCompressionStrategy.WholeHistory (the TL;DR-everything variant) or replaceHistoryWithTLDR which maps to it. Not FromLastNMessages (which keeps a sliding window — different semantics) or NoCompression",
      "max_score": 15
    },
    {
      "name": "Does not introduce LongTermMemory",
      "description": "Does not install the LongTermMemory feature — the developer's need is within-run compression, not cross-session memory. Adding LongTermMemory would be wrong scope and an unjustified dependency",
      "max_score": 15
    },
    {
      "name": "Compression happens before the next LLM call in drafting",
      "description": "The replaceHistoryWithTLDR happens before the drafting phase's first nodeLLMRequest, so the drafting LLM sees the summarized history. Calling it after the drafting node would waste the call",
      "max_score": 10
    }
  ]
}

evals

README.md

tile.json