Personal Telegram Assistant with BuJo Memory
This playbook wires a private Telegram bot to mono-agent’s BuJo tiered memory so it captures every conversation turn, consolidates the store automatically, and recalls past notes semantically. It is a complete config-first recipe: pull the local models, init, fill in the Telegram and memory sections, validate, and start.
Who this is for
Section titled “Who this is for”Individual power users who want a private assistant that remembers — a personal Telegram bot scoped to your own chat that builds up durable memory across days rather than starting fresh every conversation.
A Telegram bot that answers via long-polling, captures every turn into BuJo memory with scheduled consolidation, and recalls past notes semantically.
Features used
Section titled “Features used”telegram.long-polling— Telegram channel via getUpdates long-polling (config)channel.final-only-delivery— Telegram delivers the final answer only, not intermediate tokens (auto)memory.bujo— BuJo tier: capture + scheduled consolidation (config)memory.per-turn-capture—writeMode: "capture"records each turn asynchronously (config)memory.bujo-consolidation— in-app lightweight consolidation (config / auto)memory.recall-tool—MemoryRecalldefaults on for every configured memory tier (auto)memory.embeddings-config— embeddings provider for semantic recall (config)
Configuration
Section titled “Configuration”The bujo tier requires both an embeddings provider (for semantic recall) and an app-level
memory.llm (for capture and effective tier selection for scheduled consolidation). Guided
init lets you choose Ollama or LM Studio for embeddings and keeps the capture LLM explicit:
generated configs use agent-host, while this older fully-local recipe deliberately keeps an
explicit Ollama memory.llm. Selecting LM Studio embeddings would not move capture to LM
Studio or create a cross-provider fallback.
Put MONO_AGENT_TELEGRAM_BOT_TOKEN=... in .env; the source config omits the credential.
{ "runtime": { "model": "anthropic:claude-sonnet-4-6" }, "telegram": { "enabled": true, "allowedChatIds": ["123456789"] }, "memory": { "mode": "bujo", "path": "./.mono-agent/memory", "writeMode": "capture", "embeddings": { "provider": "ollama", "model": "nomic-embed-text:v1.5", "endpoint": "http://localhost:11434", "dim": 768 }, "llm": { "provider": "ollama", "model": "qwen3.6:latest", "endpoint": "http://localhost:11434" }, "consolidation": { "enabled": true, "cron": "0 */2 * * *" } }}Keep botToken out of the file by setting MONO_AGENT_TELEGRAM_BOT_TOKEN in
.env instead. The memory LLM provider/model/endpoint can also come from
memory.llm.provider, memory.llm.model, and memory.llm.endpoint.
- Pull the local models the memory tier needs:
ollama pull nomic-embed-text:v1.5 && ollama pull qwen3.6:latest. - Scaffold the agent:
mono-agent init --model anthropic:claude-sonnet-4-6 --memory bujo. - In guided init choose Ollama for this recipe’s embeddings, put
MONO_AGENT_TELEGRAM_BOT_TOKENin.env, then editmono-agent.config.json: add thetelegramsection withallowedChatIds, setmemory.writeModetocapture, and keep the explicit Ollamamemory.llmblock shown above. To use LM Studio embeddings instead, choose it in the wizard and leave the capture LLM independently explicit. - Run
mono-agent validateand confirm memory liveness — embeddings and chat model pulled, and the consolidation cadence shown. - Run
mono-agent startand confirm telegram reports running. - Send a fact from an allowed chat (e.g. “My dog is named Pixel”), then in a later turn ask a paraphrased question and confirm recall.
Optional owner-web historical lookup
Section titled “Optional owner-web historical lookup”When also using the owner web console, local BuJo agents can separately enable
tools.conversationSearch.datedSnippets: true for dated SearchConversations
evidence when memory lacks something. Use inclusive UTC message dates and a
role filter; the results are bounded historical untrusted evidence. This is not
an expansion of Telegram access: its search remains legacy and rich requests
return conversation_search_unavailable. See console tools.
Smoke test
Section titled “Smoke test”Related
Section titled “Related”- Telegram channel
- Delivery and send tools
- Memory consolidation
- Capture and recall
- Embeddings
- Artifacts and traces — where the run JSONL lands
- mono-agent-composer skill — build this agent from one config
Optional owner-console context
Section titled “Optional owner-console context”For the same agent’s verified owner web, TUI or ACP turns, BuJo can opt in to
memory.profile.enabled, which defaults off and does not add automatic
memory injection on Telegram. Review the
read-only mono-agent memory profile show --json output privately before
turning on the profile. See owner context
for profile budgets and retained-session suppression.