From 154be6b59471d91ee705f2c87499caa004187342 Mon Sep 17 00:00:00 2001 From: Geertjan Wielenga Date: Thu, 12 Nov 2026 09:44:10 +0100 Subject: [PATCH 1/3] draft: add evaluating Java AI agents with Harness Evals Article covers harness-evals framework for evaluating LLM agents, including Spring AI integration, OpenTelemetry support, and CI gating. AI-Session-Id: ec3a6019-33e9-470a-9a37-6e8018287660 AI-Tool: claude-code AI-Model: unknown --- .../harness-evals.jpg | Bin 0 -> 46152 bytes .../index.md | 186 ++++++++++++++++++ 2 files changed, 186 insertions(+) create mode 100644 draft/evaluating-java-ai-agents-with-harness-evals/harness-evals.jpg create mode 100644 draft/evaluating-java-ai-agents-with-harness-evals/index.md diff --git a/draft/evaluating-java-ai-agents-with-harness-evals/harness-evals.jpg b/draft/evaluating-java-ai-agents-with-harness-evals/harness-evals.jpg new file mode 100644 index 0000000000000000000000000000000000000000..248641f58040b5d319955b8b0d761bad76f06875 GIT binary patch literal 46152 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