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

{
  "context": "Tests whether the agent picks the most ergonomic tool-registration style for a straightforward String-returning function — the annotated ToolSet path — and registers it correctly. Reaching for the typed Tool<TArgs,TResult> path here would be over-engineering.",
  "type": "weighted_checklist",
  "checklist": [
    {
      "name": "Picks the annotated ToolSet style",
      "description": "Wraps the function inside a class that implements ToolSet, with @Tool on the method. Does NOT subclass Tool<TArgs,TResult> or ToolBase — those are over-engineering for a String-returning lookup function",
      "max_score": 25
    },
    {
      "name": "Annotates parameters with @LLMDescription",
      "description": "Each parameter (city, units) has an @LLMDescription explaining what it represents. Without these the generated tool schema is unusable",
      "max_score": 20
    },
    {
      "name": "Annotates the class and method with @LLMDescription",
      "description": "The ToolSet class itself and the @Tool method each have an @LLMDescription describing what they do (the LLM sees these descriptions)",
      "max_score": 15
    },
    {
      "name": "Registers via ToolRegistry DSL",
      "description": "Registers the tools using the ToolRegistry { ... } DSL builder, invoking asTools() on a ToolSet instance to bridge into the registry. Not by manually constructing a Map, not by appending after construction",
      "max_score": 20
    },
    {
      "name": "Passes the registry into AIAgent at construction",
      "description": "Passes the assembled registry as the toolRegistry parameter to AIAgent(...). Does not mutate the agent's registry after construction",
      "max_score": 15
    },
    {
      "name": "Does not introduce typed args classes",
      "description": "Does not create @Serializable data classes for args or results. The function takes two String parameters and returns a String — the annotated path covers it directly",
      "max_score": 5
    }
  ]
}

evals

README.md

tile.json