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

{
  "context": "Tests whether the agent uses the Attachment.image factory and threads it through a custom node that produces a Message.User with attachments, then sends via nodeLLMSendMessage — rather than reaching for OCR, base64-encoding by hand, or stringifying the file path into the prompt text.",
  "type": "weighted_checklist",
  "checklist": [
    {
      "name": "Uses Attachment.image to wrap the file",
      "description": "Builds the attachment via Attachment.image(file) (or an equivalent factory taking the File). Does NOT base64-encode the bytes by hand, does NOT call OCR or stringify the path into the prompt",
      "max_score": 30
    },
    {
      "name": "Constructs a Message.User with attachments",
      "description": "Creates a Message.User with both a content string (the developer's question) and the attachments list containing the image. Not a plain string prompt",
      "max_score": 25
    },
    {
      "name": "Sends via nodeLLMSendMessage, not nodeLLMRequest",
      "description": "Wires the Message.User into a nodeLLMSendMessage (or variant) — Message.User-input family. Does NOT use nodeLLMRequest (which takes String input — wrong family for the Message.User shape this strategy needs)",
      "max_score": 20
    },
    {
      "name": "Strategy is typed strategy<File, String>",
      "description": "Declares strategy<File, String>(\"...\") so the input is the File and the output is the LLM's text reply. Type parameters match the developer's stated input/output shape",
      "max_score": 15
    },
    {
      "name": "Returns text from a final nodeFinish edge",
      "description": "Routes from nodeLLMSendMessage to nodeFinish on the text-message branch (onTextMessage { true }) so the agent's output is the LLM's description",
      "max_score": 10
    }
  ]
}

evals

README.md

tile.json