CtrlK
BlogDocsLog inGet started
Tessl Logo

jbaruch/koog

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

86

1.86x
Quality

88%

Does it follow best practices?

Impact

86%

1.86x

Average score across 45 eval scenarios

SecuritybySnyk

Advisory

Suggest reviewing before use

Overview
Quality
Evals
Security
Files

criteria.jsonevals/scenario-13/

{
  "context": "Tests whether the agent reaches for the FunctionalAIAgent factory (right shape for a one-shot text transformation with no topology) rather than the default GraphAIAgent or a custom strategy<...>, which would be over-engineering for the developer's explicitly minimal need.",
  "type": "weighted_checklist",
  "checklist": [
    {
      "name": "Uses the functional-agent factory",
      "description": "Constructs via AIAgent.functional(...) (or equivalent functional factory) with an AIAgentFunctionalStrategy. Does NOT use the default AIAgent(...) graph factory and does NOT author a strategy<String, String>(\"...\") block — both would be over-engineering for the developer's stated minimal need",
      "max_score": 35
    },
    {
      "name": "Strategy block is a single suspending block",
      "description": "The functional strategy body is a single suspending lambda that calls the LLM and returns the result. Does not contain a sub-graph, does not split work across multiple nodes (there are no nodes in a functional agent)",
      "max_score": 25
    },
    {
      "name": "Trims the LLM response inside the block",
      "description": "The strategy body calls .trim() (or equivalent whitespace-trimming) on the LLM response before returning. The developer asked for this explicitly",
      "max_score": 15
    },
    {
      "name": "Includes the system prompt for formal-English rewriting",
      "description": "Passes a systemPrompt to the factory that instructs the LLM to rewrite into formal English. Does not leave systemPrompt blank or unrelated to the task",
      "max_score": 10
    },
    {
      "name": "Reads OPENAI_API_KEY from environment",
      "description": "Reads the OpenAI key via System.getenv. Does not embed the key literal",
      "max_score": 10
    },
    {
      "name": "No tools registered",
      "description": "Does not pass a toolRegistry to the factory — the developer said no tools. The functional shape has no use for tools when the strategy is one-shot text-in-text-out",
      "max_score": 5
    }
  ]
}

evals

README.md

tile.json