ExperimentConfig
AgentInvoker
Single-method interface — implement this to plug in any agent:- Blocking: returns when agent completes, times out, or fails
- Thread-safe: callable from multiple threads
- NOT responsible for: timeout enforcement, workspace setup, result tracking
Template Invokers
The agent-experiment-template provides a hierarchy of ready-made invokers. Choose based on your orchestration needs:AbstractTemplateAgentInvoker provides:
- Pre/post invoke hooks (
preInvoke,postInvoke) - Knowledge file injection into workspaces
- Phase capture collection
WorkflowAgentInvoker wraps a single ClaudeStep in a Workflow with journal integration wired automatically — step events are recorded as WorkflowStepEvent entries via WorkflowJournal. The experiment name is pulled from context.metadata("experimentId").
WorkflowInvoker<S> is the base for multi-step workflows with typed state. Journal and cost tracking are built in. Subclasses implement three methods:
InvocationContext
What the runner passes to your agent:InvocationResult
What your agent returns:ExecutionDetail
Marker interface that decouples shared experiment infrastructure (ComparisonEngine, ResultStore, VerdictExtractor) from domain-specific per-item execution details.ItemResult.executionDetail() returns @Nullable ExecutionDetail. Consumers use instanceof pattern matching to access domain-specific fields:
Dataset Format
dataset.json
item.json
Directory layout
ItemFilter
ResultStore
Both implement:
ExperimentResult
Re-Evaluation
Re-evaluate stored experiment results with a different jury without re-invoking the system under test.ReEvaluationContextFactory
Functional interface that reconstructs aJudgmentContext from a stored ItemResult:
Optional.empty() when re-evaluation is not possible (failed item, missing execution detail, workspace not preserved).
AgentReEvaluationContextFactory
Default implementation for agent experiment results. Pattern-matches onInvocationResult to reconstruct the context:
TerminalStatus to ExecutionStatus (COMPLETED → SUCCESS, TIMEOUT → TIMEOUT, ERROR → FAILED). Preserves original costUsd and totalTokens.
ReEvaluator
Orchestrates post-hoc re-scoring of stored experiment results:
Re-evaluated results carry metadata:
reEvaluated=true, systemReinvoked=false, originalCostUsd, reEvaluationJury, originalTimestamp. Skipped items carry reEvaluationSkipped=true with a reason.
Judge Experiment
Run a judge as the system under test against a labeled dataset to measure agreement rate.JudgeScorer
Functional interface that scores a candidate judge’sJudgment against the expected label:
JudgeScoringInput
JudgeScorerResult
JudgeScorers
Built-in scoring implementations:JudgeExecutionDetail
Domain evidence preserved for each item:JudgeExperiment
Builder-based experiment runner where the system under test is aJudge:
Takes
List<DatasetItem> directly — judge datasets do not require filesystem loading.