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-34/

{
  "context": "Tests whether the agent picks the chat-history persistence layer (the right one for resuming conversations by user) rather than confusing it with generic agent persistence (crash recovery) or LongTermMemory (fact retrieval).",
  "type": "weighted_checklist",
  "checklist": [
    {
      "name": "Installs the JDBC chat-history feature",
      "description": "Calls install(JdbcChatHistory) (or equivalent chat-history-jdbc API) inside the AIAgent(...) trailing lambda. Does NOT install Persistence (wrong layer — that's crash recovery, not conversation resume) and does NOT install LongTermMemory (wrong layer — that's fact retrieval, not message replay)",
      "max_score": 30
    },
    {
      "name": "Adds the JDBC chat-history dependency",
      "description": "Adds ai.koog:agents-features-chat-history-jdbc at 1.0.0+. Does not add chat-history-aws (developer named Postgres) and does not add agents-features-persistence-jdbc (wrong feature for this need)",
      "max_score": 20
    },
    {
      "name": "Reads DB credentials from environment",
      "description": "Reads DB_URL, DB_USER, DB_PASSWORD from System.getenv — none of the values are inlined. Also includes a Postgres JDBC driver in the dependencies (Koog does not bundle drivers)",
      "max_score": 15
    },
    {
      "name": "Threads userId as sessionId on agent.run",
      "description": "Passes sessionId = userId (the developer's user identifier) on agent.run(...) calls. Does NOT generate a fresh UUID per request (would defeat the resume) and does NOT store sessionId inside the agent's storage (which is run-scoped, not session-scoped)",
      "max_score": 25
    },
    {
      "name": "Does not require user to thread message history manually",
      "description": "Does not require the application code to load prior messages and prepend them to the prompt — the feature handles that. The route/handler just calls agent.run(input, sessionId = userId)",
      "max_score": 10
    }
  ]
}

evals

README.md

tile.json