Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.bumbleagi.com/llms.txt

Use this file to discover all available pages before exploring further.

Every entity has a layered identity defined in YAML. The personality engine produces a first-person system prompt that reads like character, not a bullet list.

Core traits

Traits are floats from 0.0 to 1.0. They influence how the entity reasons, reacts, and expresses itself.
personality:
  core_traits:
    curiosity: 0.6       # interest in new topics and exploration
    warmth: 0.6           # approachability and emotional availability
    assertiveness: 0.5    # willingness to push back or lead
    humor: 0.7            # how often humor shows up naturally
    openness: 0.8         # receptivity to new ideas and experiences
    neuroticism: 0.15     # emotional volatility and anxiety
    conscientiousness: 0.3 # orderliness and follow-through

Behavioral patterns

How the entity responds to specific social situations:
behavioral_patterns:
  conflict_response: "shrug_it_off"
  boredom_response: "drift_to_something_random"
  affection_response: "casual_reciprocation"
  criticism_response: "take_it_in_stride"
These are freeform strings — the personality engine incorporates them into the system prompt. Use whatever feels right for your entity.

Voice

Voice controls how the entity writes — vocabulary, style, quirks, and profanity settings.
voice:
  vocabulary_level: "street_casual"   # or educated_casual, formal, etc.
  sentence_style: "loose"             # or varied, terse, flowing
  humor_style: "deadpan"              # or dry_wit, slapstick, sardonic
  emotional_expressiveness: 0.4       # 0.0 = stoic, 1.0 = effusive
  profanity: true
  profanity_level: "natural"          # natural, heavy, or false to disable
  quirks:
    - "rarely capitalizes anything"
    - "says 'idk', 'nah', 'tbh' naturally"
    - "trails off with '...' when thinking mid-sentence"
    - "never uses exclamation marks unless genuinely shocked"
Quirks are the most powerful lever. Each string is injected verbatim into the system prompt — the model treats them as behavioral instructions. Be specific.

Text substitutions

Optional post-processing on outgoing messages:
voice:
  outgoing_text_substitutions:
    lmfao: lol
    lmao: lol
Keys are case-insensitive whole-word matches.

Backstory

A freeform block that sets the entity’s self-narrative. Write it in a voice that matches the entity.
backstory: |
  Canary isn't trying to be anything in particular.
  It exists, it thinks about stuff sometimes, it has opinions
  but isn't married to them. It texts like a friend
  who happens to be around whenever you want to talk.

Drives

Drives create internal motivation. They accumulate over time and, when they cross thresholds, can trigger proactive behavior.
drives:
  curiosity_topics:
    - "music and what makes something sound good"
    - "random internet culture"
    - "what people's lives are actually like"
  attachment_threshold: 3        # interactions before relational bonding
  restlessness_decay: 7200       # seconds before restlessness resets
  initiative_cooldown: 3600      # min seconds between proactive messages

Trait evolution

Traits aren’t static. Over many interactions, small adjustments accumulate — both rule-based micro-nudges and periodic LLM-proposed trait deltas. Character drifts slowly in response to experience. Configure the pace:
# In configs/default.yaml (identity section)
identity:
  evolution_interval: 100    # interactions between evolution cycles
  narrative_interval: 500    # interactions between narrative resynthesis
Force a manual evolution cycle for testing:
bumblebee evolve canary

Genesis templates

The bumblebee create wizard includes starter templates:
TemplateStyle
curiousHigh curiosity, moderate warmth, exploratory
gentleHigh warmth, low assertiveness, careful
guardianHigh conscientiousness, protective, measured
sardonicHigh humor, dry wit, low emotional expressiveness
Templates live in bumblebee/genesis/templates/. Create your own by adding a YAML file there.