Skip to main content

Bank Configuration

Each agent gets a bank config file — a JSON5 template that defines how Hindsight processes that agent's memories.

Bank Config File Reference

FieldTypeScopeDescription
retain_missionstringServerGuides fact extraction during retain
observations_missionstringServerControls observation consolidation
reflect_missionstringServerPrompt for reflect operations
retain_extraction_modestringServerExtraction strategy (concise, verbose)
disposition_skepticism1-5ServerHow skeptical during extraction
disposition_literalism1-5ServerHow literally statements are interpreted
disposition_empathy1-5ServerWeight given to emotional content
entity_labelsEntityLabel[]ServerCustom entity types for classification
directives{name,content}[]ServerStanding instructions for the bank
retain_strategiesRecordServerNamed extraction strategies
retain_default_strategystringServerFallback strategy when no named strategy is passed
retain_chunk_sizenumberServerText chunk size for processing
retainRetainRoutingRoutingTopic-based strategy routing (plugin-side)
retainTagsstring[]TagsTags added to all retained facts
retainContextstringTagsSource label for retained facts
recallFromstring[]Multi-bankBanks to query (parallel recall)
sessionStartModelsconfig[]SessionMental models loaded at session start
reflectOnRecallbooleanReflectUse reflect instead of recall
reflectBudgetlow|mid|highReflectReflect effort level

Server-side fields are synced to Hindsight via hindclaw apply. Routing and behavioral fields are used by the plugin at runtime.

Example Bank Config

// .openclaw/banks/agent-1.json5
{
// Server-side — synced to Hindsight
"retain_mission": "Extract strategic decisions, cross-departmental patterns.",
"reflect_mission": "You are the strategic advisor. Challenge assumptions.",
"disposition_skepticism": 4,
"disposition_literalism": 2,
"disposition_empathy": 3,
"entity_labels": { "$include": "./agent-1/entity-labels.json5" },
"directives": [
{ "name": "cross_dept_honesty", "content": "Flag contradictions between departments explicitly." }
],

// Named strategies — different extraction rules per context
"retain_strategies": {
"deep-analysis": { "$include": "./agent-1/deep-analysis.json5" },
"lightweight": { "$include": "./agent-1/lightweight.json5" }
},

// Strategy routing — which topics use which strategies
"retain": {
"strategies": {
"deep-analysis": { "topics": ["280304"] },
"lightweight": { "topics": ["280418"] }
}
},

// Multi-bank recall
"recallFrom": ["agent-1", "agent-2", "agent-3"],
"recallBudget": "high",
"recallMaxTokens": 2048
}

Named Retain Strategies

Route memory behavior per conversation context. Each Telegram topic can use a different retain strategy with its own extraction rules.

{
"retain_strategies": {
"deep-analysis": {
"retain_extraction_mode": "verbose",
"retain_mission": "Extract every decision, risk, and opportunity in full detail."
},
"lightweight": {
"retain_extraction_mode": "concise",
"retain_mission": "Only keep hard facts — dates, numbers, action items."
}
},
"retain": {
"strategies": {
"deep-analysis": { "topics": ["12345"] },
"lightweight": { "topics": ["67890"] }
}
}
}

Example Scenarios

Strategic advisor — one agent, three conversation contexts:

TopicStrategyWhat happens
"Strategy"deep-analysisEvery decision, risk, and opportunity extracted with verbose detail
"Daily updates"lightweightOnly hard facts — dates, numbers, action items
"Weekly review"(no strategy)Recall only, review conversation not retained

Health agent with data boundaries:

TopicStrategyWhat happens
"Fitness log"trainingExtracts sets, reps, PRs, recovery scores
"Medical"(disabled)No memory interaction — strict boundary
"Sleep"wellnessTracks sleep patterns, recovery scores

$include Directives

Split large configs into manageable files. Resolved recursively, relative to the containing file:

// Main bank config
{
"entity_labels": { "$include": "./agent-1/labels.json5" },
"retain_strategies": {
"detailed": { "$include": "./agent-1/detailed-strategy.json5" }
}
}
.openclaw/banks/
├── agent-1.json5 <- main bank config
├── agent-1/
│ ├── labels.json5 <- entity label definitions
│ ├── detailed-strategy.json5 <- strategy: verbose + custom labels
│ └── quick-strategy.json5 <- strategy: concise extraction

Limits: max depth 10, circular reference detection, paths relative to containing file.