fleet-memory/skills/hindsight-docs/references/developer/api/memory-banks.md
Nicolò Boschi dd1e0986a1
feat: add docs skill (#335)
* feat: add docs skill

* feat: add docs skill
2026-02-10 14:41:51 +01:00

6.2 KiB

Memory Banks

Memory banks are isolated containers that store all memory-related data for a specific context or use case.

{/* Import raw source files */}

What is a Memory Bank?

A memory bank is a complete, isolated storage unit containing:

  • Memories — Facts and information retained from conversations
  • Documents — Files and content indexed for retrieval
  • Entities — People, places, concepts extracted from memories
  • Relationships — Connections between entities in the knowledge graph
  • Directives — Hard rules the agent must follow during reflect operations

Banks are completely isolated from each other — memories stored in one bank are not visible to another.

You don't need to pre-create a bank. Hindsight will automatically create it with default settings when you first use it.

💡 Prerequisites

Make sure you've completed the Quick Start to install the client and start the server.

Creating a Memory Bank

Python

client.create_bank(
    bank_id="my-bank",
    name="Research Assistant",
    mission="You're a research assistant specializing in machine learning - keep track of papers, methods, and findings.",
    disposition={
        "skepticism": 4,
        "literalism": 3,
        "empathy": 3
    }
)

Node.js

await client.createBank('my-bank', {
    name: 'Research Assistant',
    mission: 'I am a research assistant specializing in machine learning',
    disposition: {
        skepticism: 4,
        literalism: 3,
        empathy: 3
    }
});

CLI

# Set mission
hindsight bank mission my-bank "I am a research assistant specializing in ML"

# Set disposition
hindsight bank disposition my-bank \
    --skepticism 4 \
    --literalism 3 \
    --empathy 3

Mission and Disposition

Mission and disposition are optional settings that influence how the bank reasons during reflect operations.

:::info Mission and disposition only affect the reflect operation. They do not impact retain, recall, or other memory operations.

Mission

The mission is a first-person narrative providing context for reasoning:

Python

client.create_bank(
    bank_id="financial-advisor",
    name="Financial Advisor",
    mission="""You're a conservative financial advisor - keep track of client risk tolerance,
    investment preferences, and market conditions. Prioritize capital preservation over growth."""
)

Node.js

await client.createBank('financial-advisor', {
    name: 'Financial Advisor',
    mission: `I am a conservative financial advisor with 20 years of experience.
    I prioritize capital preservation over aggressive growth.
    I have seen multiple market crashes and believe in diversification.`
});

Disposition Traits

Disposition traits influence how reasoning is performed during reflection. Each trait is scored 1 to 5:

Trait Low (1) High (5)
Skepticism Trusting, accepts information at face value Skeptical, questions and doubts claims
Literalism Flexible interpretation, reads between the lines Literal interpretation, takes things exactly as stated
Empathy Detached, focuses on facts and logic Empathetic, considers emotional context

Directives

Directives are hard rules that the agent must follow during reflect operations. Unlike disposition traits which influence how the agent reasons, directives are explicit instructions that are always enforced.

:::info Directives only affect the reflect operation. They are injected into prompts and the agent is required to comply with them in all responses.

When to Use Directives

Use directives for rules that must never be violated:

  • Language/style constraints: "Always respond in formal English"
  • Privacy rules: "Never share personal data with third parties"
  • Domain constraints: "Prefer conservative investment recommendations"
  • Behavioral guardrails: "Always cite sources when making claims"

Creating Directives

Python

# Create a directive (hard rule for reflect)
directive = client.create_directive(
    bank_id=BANK_ID,
    name="Formal Language",
    content="Always respond in formal English, avoiding slang and colloquialisms."
)

print(f"Created directive: {directive.id}")

Node.js

// Create a directive (hard rule for reflect)
const directive = await client.createDirective(
    BANK_ID,
    'Formal Language',
    'Always respond in formal English, avoiding slang and colloquialisms.'
);

console.log(`Created directive: ${directive.id}`);

Listing Directives

Python

# List all directives in a bank
directives = client.list_directives(bank_id=BANK_ID)

for d in directives.items:
    print(f"- {d.name}: {d.content[:50]}...")

Node.js

// List all directives in a bank
const directives = await client.listDirectives(BANK_ID);

for (const d of directives.items) {
    console.log(`- ${d.name}: ${d.content.slice(0, 50)}...`);
}

Updating Directives

Python

# Update a directive (e.g., disable without deleting)
updated = client.update_directive(
    bank_id=BANK_ID,
    directive_id=directive_id,
    is_active=False
)

print(f"Directive active: {updated.is_active}")

Node.js

// Update a directive (e.g., disable without deleting)
const updated = await client.updateDirective(BANK_ID, directiveId, {
    isActive: false
});

console.log(`Directive active: ${updated.is_active}`);

Deleting Directives

Python

# Delete a directive
client.delete_directive(
    bank_id=BANK_ID,
    directive_id=directive_id
)

Node.js

// Delete a directive
await client.deleteDirective(BANK_ID, directiveId);

Directives vs Disposition

Aspect Directives Disposition
Nature Hard rules, must be followed Soft influence on reasoning style
Enforcement Strict — responses are rejected if violated Flexible — shapes interpretation
Use case Compliance, guardrails, constraints Personality, character, tone
Example "Never recommend specific stocks" High skepticism: questions claims