Skip to main content
Presence is how the entity shows up in the world. An always-on daemon ticks continuously — driving body state, memory consolidation, proactive behavior, and scheduled automations across every connected platform.

Daemon

The daemon runs when you use bumblebee run (not talk). It manages two core loops via APScheduler:

Heartbeat (default 120s)

  • Tick soma bars, affects, and noise
  • Emit idle events after 60s silence
  • Check drives against thresholds
  • Refresh MCP server connections
  • Evaluate wake cycle conditions

Consolidation (default 2h)

  • Process raw memories into durable episodes
  • Apply significance decay
  • Update relationship models
  • Trigger narrative synthesis (every 3rd cycle)
  • Run emergence analysis if enabled

Initiative and wake cycles

The entity can act on its own — not just respond to messages.
This path runs when autonomy.enabled is false (legacy initiative in the daemon). When a drive exceeds its threshold (default 0.72) and enough time has passed since the last proactive message (drives.initiative_cooldown in entity YAML, default 1800 seconds if omitted), the entity composes and sends a message. The drive is then partially satisfied, dropping it below threshold.When autonomy.enabled is true, this legacy block is not used; instead, drive thresholds participate in autonomous wake when drive_wake is enabled (full perceive, wake voice, rate limits, optional sustained sessions — not the same as this single-message path).To disable full autonomous wakes but keep the daemon, set autonomy.enabled: false and see Autonomous wake → Disabling autonomous wake for what still can fire.

Wake safeguards

Additional keys (wake_session_max_rounds, wake_session_wall_seconds, wake_wide_mode, visibility toggles) are documented under Autonomous wake.

Platform adapters

All adapters share the same entity instance. Memory, body state, and identity are consistent across platforms.
Rich terminal REPL with a prompt_toolkit input bar. Bottom toolbar shows current mood and dominant drive.Startup banner: entity name, mood, drive level, episode count, model, context size, tool count, uptime, relationship count.Streaming: character-by-character delivery with sentence-boundary chunking. Pauses between chunks simulate natural pacing.Local commands: /self (side panel with drives, inner voice, recent memories), /status, /feelings, /memories, /tools, /bye (graceful shutdown with session summary).Tool activity: whisper-styled indented lines showing what the entity is doing.
Full-featured bot via python-telegram-bot. 20+ slash commands, photo/vision support, voice message handling, HTML-formatted responses, privacy operator system, remote desktop sessions.Media: photos passed as vision input (up to 3), audio as base64 (8MB cap), image documents with mime detection.Delivery: plain replies use presence.message_chunk_max and chunk_delay (plus typing-speed–based jitter and compose delays) so answers often arrive as several human-paced bubbles, not one block. Telegram’s ~4096-character limit still applies per message; longer content is split safely. Typing indicator runs during perceive (~4.5s loop) and again between chunk sends when applicable.Dedup: update_id and (chat_id, message_id) deduplication with 8192-entry ring buffers.See Telegram guide for setup, commands, and pacing knobs.
Conversational bot via discord.py. Responds in DMs always; in guilds, when mentioned or in configured channels.Media: image attachments (12MB), audio (8MB), base64 passthrough.Presence sync: Discord status mapped to emotional state — online, idle, or DND based on primary emotion.Delivery: 2000-char cap with sentence-aware chunking at ~1900 chars.See Discord guide for setup.

Embodied expression

Responses are paced to feel natural, not instant. On Telegram, multi-part delivery uses send_plain_chunks: line-aware packing up to message_chunk_max, then between each bubble a delay of roughly chunk_delay with variance jitter (typing_speed_variance) plus an extra beat scaled by the next chunk’s length and typing_speed_base (capped). Discord uses similar line packing with its own length cap; CLI streams with sentence-aware chunking.

Source files