HarnessConfig
Properties
Section titled “Properties”agents
Section titled “agents”agents: AgentConfig[];aiSdkTelemetry?
Section titled “aiSdkTelemetry?”optional aiSdkTelemetry?: | boolean | AiSdkTelemetryConfig;Opt-in AI SDK OpenTelemetry (@ai-sdk/otel). Omitted or disabled: Kuralle does
not register an integration and model calls emit no SDK spans. Enabled: registers
once at runtime construction and passes per-call telemetry options where wired.
compaction?
Section titled “compaction?”optional compaction?: CompactionConfig;Automatic history compaction. When set, the runtime summarizes older
messages into one system note after any turn whose history exceeds
triggerTokens (off the user’s latency path), and force-compacts once as
the retry step after a provider context-overflow error.
defaultAgentId
Section titled “defaultAgentId”defaultAgentId: string;defaultModel?
Section titled “defaultModel?”optional defaultModel?: LanguageModel;defaultWorkingMemoryStore?
Section titled “defaultWorkingMemoryStore?”optional defaultWorkingMemoryStore?: PersistentMemoryStore;Default store for agent.memory.workingMemory when workingMemory.store is omitted.
driver?
Section titled “driver?”optional driver?: ChannelDriver;Default channel driver for every run. RunOptions.driver overrides it per call.
escalation?
Section titled “escalation?”optional escalation?: EscalationConfig;Escalation-to-human pipeline. When set, any escalation — a terminal
handoff (handoffs: ['human'], validator escalate decision, host
control) or a flow escalate() pause — builds an EscalationRequest
(state snapshot + recent messages + optional LLM handoff brief) and
invokes the handler. Resume with runtime.resumeFromEscalation().
extractedValueStore?
Section titled “extractedValueStore?”optional extractedValueStore?: ExtractedValueStore;Default store for agent.memory.extract when no per-agent store is configured.
flowDefinitionsStore?
Section titled “flowDefinitionsStore?”optional flowDefinitionsStore?: FlowDefinitionsStore;Default versioned store for addDynamicFlows / loadDynamicFlows when the
call does not pass store. Live registration still works without one.
flowGateJudge?
Section titled “flowGateJudge?”optional flowGateJudge?: | LanguageModel | FlowGateJudgeProvider;Structured judge for flow gates of kind judge. Absent provider is an
execution error (always blocking, even when the gate is declared advisory).
handoffInputFilter?
Section titled “handoffInputFilter?”optional handoffInputFilter?: HandoffInputFilter;Default handoff input filter when a route does not define filter.
hooks?
Section titled “hooks?”optional hooks?: Hooks;hostClassify?
Section titled “hostClassify?”optional hostClassify?: (options) => Promise<HostGuardVerdict>;Parameters
Section titled “Parameters”| Parameter | Type |
|---|---|
|
|
|
Returns
Section titled “Returns”Promise<HostGuardVerdict>
hostSelect?
Section titled “hostSelect?”optional hostSelect?: (options) => Promise<HostSelection>;Parameters
Section titled “Parameters”| Parameter | Type |
|---|---|
|
|
|
Returns
Section titled “Returns”Promise<HostSelection>
knowledge?
Section titled “knowledge?”optional knowledge?: KnowledgeProviderConfig;maxHandoffs?
Section titled “maxHandoffs?”optional maxHandoffs?: number;policy?
Section titled “policy?”optional policy?: Policy;Default decision for every tool call, when the agent does not supply its own.
Omitted, tools honour needsApproval exactly as before.
runStore?
Section titled “runStore?”optional runStore?: RunStore;Durable run journal. When omitted, each session uses SessionRunStore over
sessionStore. A shared adapter (e.g. PostgresRunStore) is used as-is.
sessionStore?
Section titled “sessionStore?”optional sessionStore?: SessionStore;silentHandoff?
Section titled “silentHandoff?”optional silentHandoff?: boolean;Silent handoff (default true). A transfer between agents reads as one
continuous assistant: the transfer is a silent control tool call, and the
target is given a continuation directive so it does not greet or
re-introduce itself. Set false for an explicit visible transfer (the
target follows its own instructions, e.g. “Bill here”).
terminalHandoffTargets?
Section titled “terminalHandoffTargets?”optional terminalHandoffTargets?: string[];tools?
Section titled “tools?”optional tools?: Record<string, AnyTool>;tracing?
Section titled “tracing?”optional tracing?: TracingConfig;Read-only observability, configured independently from durable session state.
trackGoals?
Section titled “trackGoals?”optional trackGoals?: boolean;Structured goal/thread tracking (G5). When enabled, a cheap control-model
pass at turn end patches session.workingMemory.__goals and open threads
are projected into the next turn’s prompt. Default off — opt-in cost/latency.
transcriptionModel?
Section titled “transcriptionModel?”optional transcriptionModel?: TranscriptionModel;Optional AI SDK transcription model. When set, inbound audio file parts (voice notes) are transcribed to text before the model turn — so voice input works on text-only models. When omitted, audio parts pass through to audio-capable models.
voiceMode?
Section titled “voiceMode?”optional voiceMode?: boolean;