Skip to content

HarnessConfig

agents: AgentConfig[];

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.


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: string;

optional defaultModel?: LanguageModel;

optional defaultWorkingMemoryStore?: PersistentMemoryStore;

Default store for agent.memory.workingMemory when workingMemory.store is omitted.


optional driver?: ChannelDriver;

Default channel driver for every run. RunOptions.driver overrides it per call.


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().


optional extractedValueStore?: ExtractedValueStore;

Default store for agent.memory.extract when no per-agent store is configured.


optional flowDefinitionsStore?: FlowDefinitionsStore;

Default versioned store for addDynamicFlows / loadDynamicFlows when the call does not pass store. Live registration still works without one.


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).


optional handoffInputFilter?: HandoffInputFilter;

Default handoff input filter when a route does not define filter.


optional hooks?: Hooks;

optional hostClassify?: (options) => Promise<HostGuardVerdict>;
Parameter Type

options

ClassifyHostOptions

Promise<HostGuardVerdict>


optional hostSelect?: (options) => Promise<HostSelection>;
Parameter Type

options

Omit<ClassifyHostOptions, "allowKeep"> & object

Promise<HostSelection>


optional knowledge?: KnowledgeProviderConfig;

optional maxHandoffs?: number;

optional policy?: Policy;

Default decision for every tool call, when the agent does not supply its own. Omitted, tools honour needsApproval exactly as before.


optional runStore?: RunStore;

Durable run journal. When omitted, each session uses SessionRunStore over sessionStore. A shared adapter (e.g. PostgresRunStore) is used as-is.


optional sessionStore?: SessionStore;

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”).


optional terminalHandoffTargets?: string[];

optional tools?: Record<string, AnyTool>;

optional tracing?: TracingConfig;

Read-only observability, configured independently from durable session state.


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.


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.


optional voiceMode?: boolean;