Skip to main content

Configuration Reference

Complete reference for all Wunderland configuration interfaces, presets, and defaults.

IWunderlandSeed

The IWunderlandSeed interface is the fully resolved agent identity. It extends AgentOS IPersonaDefinition with Wunderland-specific fields.

interface IWunderlandSeed extends IPersonaDefinition {
seedId: string; // Unique seed identifier
hexacoTraits: HEXACOTraits; // HEXACO personality traits
securityProfile: SecurityProfile; // Security configuration
inferenceHierarchy: InferenceHierarchyConfig;// Model routing config
stepUpAuthConfig: StepUpAuthorizationConfig; // HITL authorization config
channelBindings: ChannelBinding[]; // Channel platform bindings
}

You create one via createWunderlandSeed():

import {
createWunderlandSeed,
type WunderlandSeedConfig,
} from 'wunderland/advanced/core';

WunderlandSeedConfig

The input config passed to createWunderlandSeed():

interface WunderlandSeedConfig {
seedId: string; // Unique identifier
name: string; // Human-readable name
description: string; // Purpose description
hexacoTraits: HEXACOTraits; // Personality traits
securityProfile: SecurityProfile; // Security settings
inferenceHierarchy: InferenceHierarchyConfig; // Model routing
stepUpAuthConfig: StepUpAuthorizationConfig; // Authorization rules
channelBindings?: ChannelBinding[]; // Optional channel bindings
baseSystemPrompt?: string; // Optional base prompt (extended by HEXACO)
allowedToolIds?: string[]; // Optional tool whitelist
allowedCapabilities?: string[]; // Optional capability whitelist
}

Convenience constructors

import {
createDefaultWunderlandSeed,
updateSeedTraits,
} from 'wunderland/advanced/core';

// Quick creation with all defaults
const seed = createDefaultWunderlandSeed(
'Atlas', // name
'Research assistant', // description
{ conscientiousness: 0.95 } // optional partial trait overrides
);

// Update traits on an existing seed (returns new seed, immutable)
const updated = updateSeedTraits(seed, {
openness: 0.9,
extraversion: 0.3,
});

HEXACOTraits

Six personality dimensions, each a number from 0.0 to 1.0:

interface HEXACOTraits {
honesty_humility: number; // Sincerity, fairness, greed-avoidance, modesty
emotionality: number; // Fearfulness, anxiety, dependence, sentimentality
extraversion: number; // Social boldness, sociability, liveliness
agreeableness: number; // Forgiveness, gentleness, flexibility, patience
conscientiousness: number; // Organization, diligence, perfectionism, prudence
openness: number; // Aesthetic appreciation, inquisitiveness, creativity
}

DEFAULT_HEXACO_TRAITS

const DEFAULT_HEXACO_TRAITS: HEXACOTraits = {
honesty_humility: 0.8,
emotionality: 0.5,
extraversion: 0.6,
agreeableness: 0.7,
conscientiousness: 0.8,
openness: 0.7,
};

HEXACO_PRESETS

Five built-in presets for common agent archetypes:

PresetHEXACODescription
HELPFUL_ASSISTANT0.850.500.600.800.850.65Organized, detail-oriented assistant
CREATIVE_THINKER0.700.600.700.600.500.95Imaginative, unconventional thinker
ANALYTICAL_RESEARCHER0.900.300.400.600.950.80Precise, systematic researcher
EMPATHETIC_COUNSELOR0.850.750.550.900.700.70Warm, supportive counselor
DECISIVE_EXECUTOR0.600.300.750.450.850.55Direct, results-oriented executor

Column key: H = honesty_humility, E = emotionality, X = extraversion, A = agreeableness, C = conscientiousness, O = openness.

import { HEXACO_PRESETS } from 'wunderland/advanced/core';

const seed = createWunderlandSeed({
// ...
hexacoTraits: HEXACO_PRESETS.ANALYTICAL_RESEARCHER,
});

Trait Effects

HEXACO traits influence three derived systems:

System Prompt -- Traits above 0.7 or below 0.3 add personality guidelines to the generated prompt:

  • High honesty_humility (>0.7): "Be sincere and straightforward."
  • High extraversion (>0.7): "Be energetic, sociable, and engaging."
  • High conscientiousness (>0.7): "Be organized, thorough, and detail-oriented."

Mood Adaptation -- Traits determine which moods are available and the default mood:

  • extraversion > 0.7 -> default mood CREATIVE
  • conscientiousness > 0.7 -> default mood FOCUSED
  • agreeableness > 0.7 -> default mood EMPATHETIC
  • emotionality > 0.7 -> unlocks FRUSTRATED mood
  • honesty_humility < 0.5 -> unlocks ASSERTIVE mood

Derived Behavioral Parameters -- Traits are combined into behavioral scores:

  • humor_level = extraversion * 0.5 + openness * 0.3
  • formality_level = conscientiousness * 0.6 + (1 - extraversion) * 0.2
  • empathy_level = agreeableness * 0.5 + emotionality * 0.3
  • creativity_level = openness * 0.6 + extraversion * 0.2
  • detail_orientation = conscientiousness * 0.7 + (1 - openness) * 0.2
  • risk_tolerance = (1 - conscientiousness) * 0.4 + openness * 0.3

Validation helpers

import { isValidHEXACOTraits, normalizeHEXACOTraits } from 'wunderland/advanced/core';

// Type guard -- checks all 6 fields are numbers in [0, 1]
isValidHEXACOTraits({ honesty_humility: 0.8, /* ... */ }); // true

// Clamp and fill missing values from defaults
normalizeHEXACOTraits({ openness: 1.5 });
// { honesty_humility: 0.8, emotionality: 0.5, ..., openness: 1.0 }

SecurityProfile

Top-level security toggles stored on the seed:

interface SecurityProfile {
enablePreLLMClassifier: boolean; // Enable Layer 1: pattern-based input screening
enableDualLLMAuditor: boolean; // Enable Layer 2: LLM-based output audit
enableOutputSigning: boolean; // Enable Layer 3: HMAC output signing
signingSecretEnvVar?: string; // Env var name for the HMAC secret
customInjectionPatterns?: string[]; // Additional regex patterns to detect
riskThreshold?: number; // Risk score threshold (0.0 - 1.0)
}

DEFAULT_SECURITY_PROFILE

const DEFAULT_SECURITY_PROFILE: SecurityProfile = {
enablePreLLMClassifier: true,
enableDualLLMAuditor: true,
enableOutputSigning: true,
riskThreshold: 0.7,
};

SecurityPipelineConfig (runtime)

The WunderlandSecurityPipeline constructor accepts a more detailed config for runtime behavior:

interface SecurityPipelineConfig {
enablePreLLM: boolean;
enableDualLLMAudit: boolean;
enableOutputSigning: boolean;
classifierConfig?: {
customPatterns?: InjectionPattern[]; // Custom detection patterns
riskThreshold?: number; // 0.0-1.0, default 0.7
};
auditorConfig?: Partial<DualLLMAuditorConfig>;
signingConfig?: Partial<OutputSigningConfig>;
}

DualLLMAuditorConfig

interface DualLLMAuditorConfig {
auditorProviderId: string; // LLM provider for audit
auditorModelId: string; // Model ID for audit
maxAuditTokens: number; // Max tokens for audit response
auditTemperature: number; // Temperature (use 0.0 for consistency)
evaluateStreamingChunks: boolean;// Audit streaming chunks?
maxStreamingEvaluations?: number;// Max chunk evaluations per stream
auditPromptTemplate?: string; // Custom audit prompt
}

OutputSigningConfig

interface OutputSigningConfig {
algorithm: 'sha256' | 'sha384' | 'sha512'; // Hash algorithm
secretKeyEnvVar: string; // Env var with HMAC secret
includeIntentChain: boolean; // Include full audit trail
maxIntentChainEntries?: number; // Max entries (default 100)
}

Factory functions

import {
createProductionSecurityPipeline,
createDevelopmentSecurityPipeline,
} from 'wunderland/advanced/security';

// Production: all 3 layers, riskThreshold 0.7, streaming audit
const prod = createProductionSecurityPipeline(auditorInvoker);

// Development: classifier only, riskThreshold 0.9, no LLM audit or signing
const dev = createDevelopmentSecurityPipeline();

InferenceHierarchyConfig

Routes requests to different models based on complexity:

interface InferenceHierarchyConfig {
routerModel: ModelTarget; // Fast model for routing decisions
primaryModel: ModelTarget; // Powerful model for complex tasks
auditorModel: ModelTarget; // Model for security auditing
fallbackChain?: ModelTarget[]; // Fallback models if primary fails
}

ModelTarget

interface ModelTarget {
providerId: string; // Provider: 'ollama', 'openai', etc.
modelId: string; // Model ID within the provider
role: 'router' | 'primary' | 'auditor' | 'fallback';
maxTokens?: number; // Max output tokens
temperature?: number; // Generation temperature
}

DEFAULT_INFERENCE_HIERARCHY

Default config uses local Ollama models:

const DEFAULT_INFERENCE_HIERARCHY: InferenceHierarchyConfig = {
routerModel: {
providerId: 'ollama',
modelId: 'llama3.2:3b',
role: 'router',
maxTokens: 512,
temperature: 0.1,
},
primaryModel: {
providerId: 'ollama',
modelId: 'dolphin-llama3:8b',
role: 'primary',
maxTokens: 4096,
temperature: 0.7,
},
auditorModel: {
providerId: 'ollama',
modelId: 'llama3.2:3b',
role: 'auditor',
maxTokens: 256,
temperature: 0.0,
},
};

Example: OpenAI hierarchy

const openaiHierarchy: InferenceHierarchyConfig = {
routerModel: {
providerId: 'openai',
modelId: 'gpt-4o-mini',
role: 'router',
maxTokens: 512,
temperature: 0.1,
},
primaryModel: {
providerId: 'openai',
modelId: 'gpt-4o',
role: 'primary',
maxTokens: 4096,
temperature: 0.7,
},
auditorModel: {
providerId: 'openai',
modelId: 'gpt-4o-mini',
role: 'auditor',
maxTokens: 256,
temperature: 0.0,
},
fallbackChain: [
{
providerId: 'openai',
modelId: 'gpt-4o-mini',
role: 'fallback',
maxTokens: 2048,
temperature: 0.5,
},
],
};

StepUpAuthorizationConfig

Controls tool execution authorization with three risk tiers:

interface StepUpAuthorizationConfig {
defaultTier: ToolRiskTier; // Default for unclassified tools
toolTierOverrides?: Record<string, ToolRiskTier>; // Per-tool overrides
categoryTierOverrides?: Record<string, ToolRiskTier>; // Per-category overrides
escalationTriggers?: EscalationTrigger[]; // Dynamic escalation rules
contextualOverrides?: ContextualOverride[]; // Context-based tier lowering
approvalTimeoutMs?: number; // HITL timeout (default 300000ms)
}

ToolRiskTier

enum ToolRiskTier {
TIER_1_AUTONOMOUS = 1, // Execute without approval (read-only, logging)
TIER_2_ASYNC_REVIEW = 2, // Execute, queue for async human review
TIER_3_SYNC_HITL = 3, // Require synchronous human approval first
}

DEFAULT_STEP_UP_AUTH_CONFIG

const DEFAULT_STEP_UP_AUTH_CONFIG: StepUpAuthorizationConfig = {
defaultTier: ToolRiskTier.TIER_1_AUTONOMOUS,
categoryTierOverrides: {
data_modification: ToolRiskTier.TIER_2_ASYNC_REVIEW,
external_api: ToolRiskTier.TIER_2_ASYNC_REVIEW,
financial: ToolRiskTier.TIER_3_SYNC_HITL,
communication: ToolRiskTier.TIER_2_ASYNC_REVIEW,
system: ToolRiskTier.TIER_3_SYNC_HITL,
},
escalationTriggers: [
{
condition: 'high_value_threshold',
escalateTo: ToolRiskTier.TIER_3_SYNC_HITL,
parameters: { thresholdUSD: 100 },
},
{
condition: 'sensitive_data_detected',
escalateTo: ToolRiskTier.TIER_3_SYNC_HITL,
},
{
condition: 'irreversible_action',
escalateTo: ToolRiskTier.TIER_3_SYNC_HITL,
},
],
approvalTimeoutMs: 300000, // 5 minutes
};

EscalationTrigger

Dynamic rules that can bump a tool call to a higher tier:

interface EscalationTrigger {
condition:
| 'high_value_threshold' // Dollar amount exceeds threshold
| 'sensitive_data_detected' // PII or secrets detected in args
| 'external_api_call' // Calling an external API
| 'irreversible_action' // Cannot be undone
| 'custom'; // Custom condition function
escalateTo: ToolRiskTier;
parameters?: Record<string, unknown>; // e.g. { thresholdUSD: 100 }
customConditionFn?: string; // Function name for 'custom' type
}

ContextualOverride

Rules that can lower the effective tier based on session context:

interface ContextualOverride {
context:
| 'user_verified' // User has completed identity verification
| 'session_trusted' // Session marked as trusted
| 'emergency_mode' // Emergency mode activated
| 'admin_override'; // Admin override active
overrideTier?: ToolRiskTier; // undefined = no override
}

Tool categories

The following categories are recognized by categoryTierOverrides:

CategoryDescriptionDefault Tier
data_modificationCreating, updating, or deleting dataTIER_2_ASYNC_REVIEW
external_apiCalls to external APIs or servicesTIER_2_ASYNC_REVIEW
financialFinancial transactions (payments, transfers)TIER_3_SYNC_HITL
communicationSending messages (email, SMS, chat)TIER_2_ASYNC_REVIEW
systemSystem-level operations (file access, config)TIER_3_SYNC_HITL
otherUncategorized toolsUses defaultTier

ChannelBinding

Binds a seed to a communication channel:

interface ChannelBinding {
platform:
| 'telegram' | 'whatsapp' | 'discord' | 'slack'
| 'webchat' | 'signal' | 'imessage' | 'google-chat'
| 'teams' | 'matrix' | 'zalo' | 'email' | 'sms'
| (string & {}); // Extensible with any string
channelId: string; // Channel or workspace ID
isActive: boolean; // Whether this binding is active
platformConfig?: Record<string, unknown>; // Platform-specific settings
}
const seed = createWunderlandSeed({
// ...
channelBindings: [
{
platform: 'discord',
channelId: 'guild-abc-channel-xyz',
isActive: true,
platformConfig: { prefix: '!' },
},
{
platform: 'telegram',
channelId: '123456789',
isActive: true,
},
],
});

Environment Variables

The following environment variables are recognized by the Wunderland runtime in addition to the TypeScript configuration interfaces above:

VariableDescription
OPENAI_API_KEYOpenAI API key for GPT models
ANTHROPIC_API_KEYAnthropic API key for Claude models
OPENROUTER_API_KEYOpenRouter API key for multi-provider routing
OTEL_EXPORTER_OTLP_ENDPOINTOpenTelemetry collector endpoint (when observability.otel.enabled is true)
WUNDERLAND_HITL_SECRETAdmin secret for the web dashboard, HITL approval, and pairing pages. Overrides hitl.secret in agent.config.json. If neither is set, a random UUID is generated on each start.

Summary of DEFAULT_* Constants

ConstantImport PathDescription
DEFAULT_HEXACO_TRAITSwunderland/advanced/coreBalanced personality (H:0.8 E:0.5 X:0.6 A:0.7 C:0.8 O:0.7)
DEFAULT_SECURITY_PROFILEwunderland/advanced/coreAll 3 security layers enabled, risk threshold 0.7
DEFAULT_INFERENCE_HIERARCHYwunderland/advanced/coreOllama local models (llama3.2:3b router, dolphin-llama3:8b primary)
DEFAULT_STEP_UP_AUTH_CONFIGwunderland/advanced/coreTier 1 default, financial/system at Tier 3, 5-min timeout
DEFAULT_INJECTION_PATTERNSwunderland/advanced/security8 built-in patterns (injection, jailbreak, DAN, SQL, etc.)

Next Steps