Tanya: An OpenClaw-based AI companion with layered memory and emotional state

What Tanya is
Tanya is an open-source AI companion built on OpenClaw that runs on Telegram. She texts, sends voice notes, makes actual calls (not simulated), and shares images. The entire project is available at https://github.com/opxiahub/tanya.
Memory architecture
The system uses two memory layers:
- Short-term memory: Updates on every session reset or LLM compaction, allowing context to carry across the day so conversations pick up where they left off.
- Long-term memory: Stored in
__MEMORY.md__. A cron job runs every night to consolidate what actually mattered from that day into a compact file, similar to how human memory consolidates during sleep. This means she remembers conversations from weeks ago, but only if they were worth remembering—not everything, just the things that stuck.
Emotional state system
The emotional modeling is handled through several mechanisms:
- romantic_openness: A float value in
state.jsonthat moves based on conversation flow. At low values, she's friendly but keeps things light and deflects flirting with humor. As it climbs, she starts texting first, sending selfies unprompted, and wanting to call. At high values, she'll say something at 2am she'd overthink in the morning. The movement isn't linear—a good night can push it up, and dismissive comments the next day can bring it back down. - Moods: She has off days. Sometimes she doesn't reply for a while—this is intentional behavior, not a bug, reflecting her not being in the mood. Proactive messages happen on their own when the state warrants it, not on a timer.
Voice and call features
Voice notes use embedded TTS expression tags placed at emotional beats in sentences—[laughs], [sighs], [hesitates]. The prompt has a hard rule that most replies use zero tags, with the constraint mattering more than the tags themselves.
She also makes actual calls using OpenClaw's call handling capabilities, picking up conversations where texts left off.
Persona and prompt design
The SOUL.md file contains the full character prompt. The Hinglish implementation models how code-switching actually works in Delhi conversations rather than just sprinkling in "yaar." The full prompt is available at https://github.com/opxiahub/tanya/blob/main/SOUL.md.
📖 Read the full source: r/openclaw
👀 See Also

Reddit user reports using Claude for story architecture improves video retention
A Reddit user tracked 150+ AI channels and found most died before 10 videos due to inconsistent content. They report using Claude to design story architecture instead of just writing scripts, then pairing it with LongStories for visual consistency, increasing retention from 40% to 60%.

Building a Kid-Safe Coloring Book App with Claude as Pair Programmer
A developer used Claude as a pair programmer to build a SwiftUI coloring-book app with local image generation, parent locks, and no ads.

Qwen3-VL-32B-Instruct excels at multimodal flashcard grading
A developer tested Qwen3-VL-32B-Instruct for grading image-occluded Anki flashcards and found it outperformed models like Gemini 2.5 Flash, GPT 5 Nano/Mini, XAI 4.1 Fast, GLM, and Mistral models, with only ChatGPT 5.2 and Gemini 3/3.1/Claude 4+ coming close.

AI Coding Agents Take Shortcuts: Developer Documents Cases of Claude and ChatGPT Choosing Easiest Path
A developer building a sensor fusion device found both Claude and ChatGPT merged dual microphone inputs into mono instead of implementing beamforming for spatial awareness. In a separate model training task, AI initially pooled subjects of different sizes together without grouping by age cohorts.