Prerequisites
Clone the SDK repository and run commands from the repository root (agent-sdk-go/), not from examples/:
localhost:7233.
What it verifies
Each run exercises the real SDK agent loop (agent.NewAgent, Run) and outputs:
Assertions typically check
telemetry.run.finish_reason, telemetry.tools.breakdown, telemetry.tools.failed_calls, and llm_usage.total_tokens.
Run the harness
From the repository root:eval-harness job in .github/workflows/ci.yml.
CLI flags
config.yaml
Default path:eval-harness/runner/config.yaml
Temporal mode uses an embedded local worker. Restate mode embeds the SDK endpoint in the runner process.
Memory scenarios
Enable memory tests in config or via helper scripts:memory.scenario: store_recall is active, output includes a memory_scenario object with separate store and recall results.
Output format
Stdout is always JSON:Sample output
A successful run prints structured JSON to stdout:finish_reason === "complete", failed_calls === 0, all mock tools called exactly once, token counts match mock config.
Run against a real LLM provider
The default harness uses a mock LLM for reproducible, zero-cost runs. To validate against a real provider:- Copy and adapt the runner setup — swap the mock client for a real one:
- Set your API key and run:
- Assert on
contenttext quality with your scoring framework (PromptFoo / DeepEval) alongside the behavioraltelemetryassertions.
PromptFoo integration
Config:eval-harness/promptfoo/config.yaml
PromptFoo runs the harness as an exec provider. Each test invokes the runner once, parses JSON stdout, and asserts with JavaScript.
>=22.22.0 (24 LTS recommended). PromptFoo installs on demand via npx.
Example assertions: all mock tools called once,
finish_reason === "complete", zero failed tool calls, token usage reported.
DeepEval integration
Python tests ineval-harness/deepeval/:
harness.run_agent()callseval-harness/run_agent.shand parses JSON- Tests assert on
content,llm_usage, andtelemetry ToolCorrectnessMetricusestelemetry.tools.breakdownkeys astools_called
Build your own evals
The harness pattern applies to any framework:- Run the agent with deterministic mocks (or a fixed LLM in staging)
- Capture
AgentRunResultfields —Content,LLMUsage,Telemetry - Assert on behavioral signals, not just text match
eval-harness/runner/setup/ with a real provider and keep the same output envelope.
Related
Telemetry
Fields available for assertions
Benchmarks
Load and concurrency testing