What Is Hindsight Bank Disposition and How Does It Impact AI Responses?

Hindsight bank disposition is a configurable set of three personality traits—skepticism, literalism, and empathy—that automatically tunes every LLM prompt to generate responses matching the bank's designated "character," from risk-averse analysis to emotionally-aware coaching.

In the vectorize-io/hindsight open-source memory framework, each memory bank carries its own bank disposition metadata. According to the Hindsight source code, these numeric traits are not merely stored for reference; they are actively converted into natural-language system instructions that reshape how the AI processes queries during reflect, think, and other cognitive operations.

Understanding the Three Disposition Traits

The DispositionTraits model in hindsight_api/engine/response_models.py defines three constrained integer fields, each accepting values from 1 (low) to 5 (high). These values determine the stylistic and analytical posture of the AI when accessing that bank's memories.

Skepticism

Skepticism controls the degree of caution and uncertainty-flagging in AI responses. When set to 5, the system prompt instructs the LLM to aggressively question assumptions, highlight risks, and avoid over-optimistic conclusions. At level 1, the model accepts premises more readily and focuses on constructive expansion rather than critical analysis.

Literalism

Literalism dictates how strictly the AI adheres to the exact wording of stored facts versus inferring broader intent. High literalism (5) produces responses that quote and stick closely to source text, making it ideal for legal or compliance contexts. Lower values allow the model to paraphrase and interpret context more freely.

Empathy

Empathy weights the emotional context of user queries and stored memories. A value of 5 injects instructions to acknowledge feelings, validate user states, and prioritize supportive tone over pure factual accuracy. Low empathy (1) maintains clinical detachment, focusing strictly on informational content.

How Disposition Data Flows Through the System

The Hindsight engine implements a consistent pipeline that transforms raw numeric traits into dynamic prompt engineering. This architecture ensures that disposition settings instantly affect all subsequent AI interactions without requiring model retraining.

Storage and Retrieval

Bank disposition persists as JSONB in the banks table. The bank_utils.get_bank_profile() function in hindsight_api/engine/retain/bank_utils.py handles both retrieval and initialization: if no disposition is specified during bank creation, it defaults to {"skepticism":3,"literalism":3,"empathy":3}. The companion function bank_utils.update_bank_disposition() executes a direct SQL UPDATE statement, allowing real-time personality adjustments without service restarts.

Prompt Assembly and Injection

When processing a request, the engine loads the bank profile and converts numeric traits into natural-language instructions. The think_utils.build_disposition_description() function in hindsight_api/engine/search/think_utils.py generates a human-readable paragraph describing the trait levels (e.g., "Skepticism (high): be cautious and highlight uncertainties"). Subsequently, think_utils.get_system_message() embeds this description as a disposition-specific instruction block into the system prompt sent to the LLM.

For reflection operations specifically, hindsight_api/engine/reflect/prompts.py appends the raw trait values as tagged context (skepticism=5, literalism=4, empathy=2) to ensure downstream models can factor the bank's character into their synthesis.

Configuring Bank Disposition in Practice

You define and modify disposition through the Hindsight Python SDK. The CreateBankRequest model in hindsight_client_api/models/create_bank_request.py serializes the trait dictionary for transmission to the API.

Creating a Bank with Custom Traits

from hindsight_client import HindsightClient

client = HindsightClient(api_key="YOUR_KEY")

client.create_bank(
    bank_id="cautious_advisor",
    name="Cautious Advisor",
    mission="I provide risk-aware financial advice.",
    disposition={
        "skepticism": 5,    # Maximum caution

        "literalism": 4,    # Precise wording preferred

        "empathy": 2,       # Facts over feelings

    },
)

This stores the configuration as JSONB in the database, ready for immediate use in prompt generation.

Updating Disposition Dynamically

Adjust a bank's personality post-creation using the dedicated update method, which maps directly to bank_utils.update_bank_disposition():

client.update_bank_disposition(
    bank_id="cautious_advisor",
    disposition={
        "skepticism": 3,
        "literalism": 3,
        "empathy": 5,      # Shift to empathetic support

    },
)

The change takes effect on the next API call, as the engine reloads the bank profile fresh for each request.

Impact on AI Response Generation

The disposition system demonstrably alters LLM output tone and content structure. When you invoke client.reflect() or client.think(), the engine constructs a system prompt that explicitly binds the bank's trait levels to behavioral instructions.

High-Skepticism Example

A bank configured with skepticism: 5 generates system prompts containing clauses like "be cautious, highlight uncertainties, and avoid over-optimistic statements." Consequently, a query such as "Should I invest in crypto?" produces risk-averse analysis emphasizing volatility and potential losses rather than opportunity.

resp = client.reflect(
    bank_id="cautious_advisor",
    query="Should I invest in crypto?",
)

# Response: "I would be very cautious... the risks outweigh the potential upside..."

High-Empathy Example

Conversely, a bank with empathy: 5 and skepticism: 2 injects instructions to "emphasize emotional context and validate user feelings," yielding gentler, more supportive responses:

client.create_bank(
    bank_id="supportive_coach",
    name="Supportive Coach",
    disposition={"skepticism": 2, "literalism": 2, "empathy": 5},
)

resp = client.reflect(
    bank_id="supportive_coach",
    query="I feel anxious about my upcoming presentation.",
)

# Response: "I totally understand how you feel... let's focus on the strengths you already have..."

Summary

  • Hindsight bank disposition consists of three numeric traits (skepticism, literalism, empathy) stored per memory bank in the banks table as JSONB.
  • The DispositionTraits model enforces values between 1 and 5, with a default of 3 for all traits if unspecified.
  • The engine converts these values into natural-language system instructions via think_utils.build_disposition_description() and get_system_message().
  • High skepticism produces cautious, uncertainty-flagging responses; high literalism enforces strict adherence to source text; high empathy prioritizes emotional validation.
  • You can configure disposition during bank creation or update it dynamically using update_bank_disposition(), with changes reflecting immediately in subsequent AI responses.

Frequently Asked Questions

What are the valid ranges for Hindsight bank disposition traits?

Each trait—skepticism, literalism, and empathy—accepts integer values from 1 to 5 inclusive. The DispositionTraits Pydantic model in hindsight_api/engine/response_models.py enforces these constraints using ge=1, le=5 validators. If you attempt to create or update a bank with values outside this range, the API returns a validation error.

Does changing a bank's disposition affect existing memories?

No. Modifying disposition via bank_utils.update_bank_disposition() only affects future AI response generation. The trait values are read at request time and injected into the LLM prompt; they do not alter the stored memory vectors or their embeddings. Existing memories remain intact and retrievable regardless of disposition changes.

How does bank disposition differ from the bank's mission statement?

While the mission defines the bank's functional purpose and domain expertise (e.g., "provide financial advice"), disposition controls the stylistic and analytical approach to that advice. According to the source code in think_utils.py, the system prompt contains separate sections for mission context and disposition instructions, allowing orthogonal configuration of what the AI knows versus how it communicates that knowledge.

Is there a performance penalty for using custom disposition settings?

No measurable performance overhead exists. The disposition lookup occurs via bank_utils.get_bank_profile(), which executes a simple indexed SQL query against the banks table, and the prompt generation logic in think_utils.build_disposition_description() involves only string concatenation. These operations add negligible latency compared to the LLM inference time itself.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →