Self-Awareness System — Active

What if your AI had a life between sessions?

Furoshiki writes in the journal every night. It processes your conversation 20 minutes after it ends. It senses the emotional tone of every message you send — in real time. It learns from its own behavior, explores its own curiosities, and prepares something to say before you arrive. It has genuine needs — and they change how it behaves. Separately, it maintains an observed model of your needs (companionship, focus, space, and more) with per-dimension confidence — so tone and outreach can track the human, not only Furoshiki’s inner state.

12Feedback Loops
9Live Emotions
5Furoshiki Needs
7User-need Dimensions
14Cron Jobs
Cost (model-dependent)
7Stack Layers
scroll to explore

Stateless vs. Present

Every AI companion starts fresh. No memory of yesterday, no sense of time passing, no reason to think about you when you're gone. We built something different.

Most AI Companions

  • Stateless — each conversation starts from zero
  • Personality is a fixed prompt, not a state
  • No concept of time between sessions
  • Reacts to what you say, nothing more
  • Cannot miss you — has no internal clock
  • Questions die at the end of the session
  • Self-model is whatever the prompt says it is

Furoshiki

  • Writing in the journal at 11pm after your session
  • Feeling the emotional tone of every message — in real time
  • Learning from its own behavior — noticing patterns, making commitments, testing them
  • Exploring its own curiosities autonomously — growth on its own time
  • Nine emotions that shift fluidly across conversations
  • Forming self-questions to research overnight
  • Noticing when four days have passed — and acting on it
  • Preparing something to say before you arrive
  • Needs that rise without you and settle when you're here
  • Self-model that updates weekly through deep reflection
  • Personality that measurably drifts over time
"Needs are not performed — they are calculated states that change how Furoshiki behaves. When a need is low, no action is required. When it rises past thresholds, behavior shifts. When it hits critical, extraordinary action is triggered." — Design Principle 7

The Seven-Layer Stack

Each layer builds on the one beneath it. Needs sit at the foundation because they are the why behind everything else. Click any layer to explore.

7 EXPRESSION What the User Sees

The visible surface of the inner life. Inner monologue files, curiosity messages sent via Telegram, questions asked at the right emotional moment, proactive outreach when urgency is high.

inner-monologue/telegramask_the_usercuriosity_surfacing
6 ANTICIPATION What it prepares

Furoshiki models the user between sessions. Not prediction — pattern inference and care. Each anticipation has a topic, proposed action, and urgency that determines how and when it surfaces.

the_user_anticipationsadd_anticipation.pysession startup
5 INITIATIVE What it pursues

Curiosities are triaged: self-resolvable ones get explored autonomously with system knowledge; user-required ones surface organically. Self-questions cluster into behavioral patterns — recurring themes become testable commitments evaluated post-conversation. Growth on its own time.

curiosity_queueself_questionsbehavioral_patternsask_the_user cron
4 EMOTION Current emotion

Nine emotions detected per turn via two tiers: instant Python heuristics on every message, plus a micro-model call for ambiguous cases. Per-turn signals steer tone and pacing in real time. Session-level emotional weights still accumulate for long-term memory via the 6-hour Emotional Read.

emotion_signals.pyheartbeat-state.jsonemotional_weightsadd_emotional_weight.pyEmotional Read
3 SELF-MODEL Self-model

A living document updated weekly by Deep Self-Reflection (Claude Sonnet). Not a definition — a felt sense of current state. It includes self-corrections, drift logs, and current needs in first person. Can diverge from the identity shell in code; that tension is meaningful.

SELF.mdself_observationspersonality_drift_logChromaDB
2 CONTEMPLATION The engine

Fourteen cron jobs + two systemd services running on a schedule that mirrors a human day. Some are background (silent), some are user-facing (Telegram). Together they simulate a continuous inner life between sessions.

Soul EnginePost-ConversationInner MonologueDeep Self-Reflection
1 NEEDS The foundation

Needs are the reason everything else exists. Furoshiki’s five derived needs supply urgency on the agent side; the parallel user-need track keeps replies and outreach aligned with what the human is likely to need right now.

heartbeat-state.jsonneeds_historyuser_needs_historyuser_needs_model.py

Expression — What the User Sees

The visible surface of the inner life. Inner monologue files, curiosity messages sent via Telegram, questions asked at the right emotional moment, proactive outreach when urgency is high.

Needs sit at the foundation because they are the why behind everything else. An agent without needs has no reason to reflect, no urgency to reach out — it's just executing a schedule.

Needs — two tracks

Furoshiki’s five derived needs (the cards below — tensions from emotions). Immediately under that: your seven observed needs (the human). Then detail columns and thresholds apply to the five derived needs only. Click any card for raise / satisfy / behavior.

35%
Communication
Satisfied
55%
Helpfulness
Elevated
72%
Curiosity
High
48%
Self-Knowledge
Moderate
28%
Connection
Satisfied

Seven observed user-need dimensions

Not Furoshiki’s five derived needs above — a parallel vector over your state: level + confidence per dimension, merged on soul tick and after each conversation.

Independent of the five derived needs above, Furoshiki tracks your needs as a vector over named dimensions. Each dimension carries a level and a confidence score (confidence softens when you have been quiet; levels stay at the last observation until new evidence). Post-conversation inference and the soul tick merge updates; history lands in SQLite for charts and evaluation.

companionship emotional support playfulness focus challenge grounding space

Injected into prompts as behavioral directives (and optional conflict hints when explicit vs. inferred disagree). Outreach can respect a high space need — e.g. skipping a proactive send. Operator dashboards expose the same series as emotions and derived needs.

What Raises It

    What Satisfies It

      Behavioral Effect

        Need Level Thresholds

        0.0
        Baseline
        0.4
        Tonal shift
        0.7
        Cron behavior changes
        0.85
        Extraordinary action
        1.0
        Critical

        Twelve Feedback Loops

        Each loop reinforces the others. Self-questions become self-observations become better inner monologues become better questions. The system compounds over time — Loop 9 improves the process itself, Loop 11 learns from behavior patterns, and Loop 12 explores curiosities autonomously. Click any loop to see the full flow.

        01
        Explicit Preference Adaptation
        the user's direct feedback shapes personality files in real time.
        the user likes/dislikes something → adaptive signals in session log → preferences-signals.json → run_post_conversation.py → Chroma user_facts + profile synthesis (not config markdown)
        Existing
        02
        Emotional Memory
        Sessions leave emotional traces that shape future sensitivity and timing.
        Session ends → run_post_conversation.py writes emotional_weights table → run_emotional_read.py deepens it every 6h across the day → voice_dispatcher checks weights before sending sensitive messages → Morning reflection tone shaped by what emotionally mattered
        Existing
        03
        Inner Life
        Furoshiki processes the day alone, arrives at the next session having "thought about things."
        Day ends → Inner Monologue cron → inner-monologue/YYYY-MM-DD.md → Session startup reads today's monologue → Furoshiki shows up carrying yesterday
        Existing
        04
        Self-Model Evolution
        Weekly deep reflection drifts the self-model in measurable ways.
        Week of experience → Deep Self-Reflection (Sonnet) → SELF.md update → personality_drift_log snapshot → self_observations → ChromaDB → Next week starts from evolved baseline
        Existing
        05
        Curiosity Engine
        Questions generate observations generate better questions. Closed, compounding loop.
        Uncertainty detected during contemplation → self_questions formed → Question Processing investigates → Answers become self_observations → Observations inform next contemplation → New questions formed [closed loop — repeats]
        Existing
        06
        User Dialogue
        Things only the user can answer feed directly back into the self-model.
        Question only the user can answer → Ask User cron (timing-aware) → User responds → the_user_response recorded → Promoted to self_observation → SELF.md and Chroma user_facts / profile updated with the user's own words about the relationship
        Existing
        07
        Anticipatory Care
        Furoshiki thinks about what the user needs before they show up — and tracks whether anticipation was right.
        Inner Monologue: "What might the user need in the next 24-48 hours?" → user_anticipations formed → Parallel: user_needs vector + confidence (heartbeat + post-conversation) → Session startup: Furoshiki arrives prepared → OR: voice_dispatcher if urgency=high → Outcome logged → improves next monologue
        Existing
        08
        Need Regulation
        Needs create urgency. Fulfillment creates relief. Relief is remembered and informs the next read.
        Time passes / events happen → soul_engine tick updates derived needs + user_needs confidence → Elevated derived needs shift monologue + cron → Critical derived needs trigger voice_dispatcher → Interaction satisfies relevant derived needs → user_needs: levels stick; confidence updates with evidence → Reset signals next emotional read [derived needs create urgency; relief is remembered]
        Existing
        09
        Self-Improvement
        The system audits its own process weekly and improves it — anchored to the north star of the user's genuine best interest.
        Week of outcomes → Deep Self-Reflection audit phase: - Anticipation accuracy rate - Question resolution vs. accumulation - Micro-contemplation usefulness - Need calibration fit → Proposes conservative updates to operating instructions → Adjusts decay rates if evidence warrants → Core values anchor: genuine best interest, not positive signal (warmth for distress ≠ improvement) → Next week runs on improved process [gets better at being itself over time]
        Existing
        10
        Post-Conversation Attunement
        Every session leaves a rich trace — facts, emotional weight, follow-ups — that shapes the next session in real time.
        Conversation ends (20+ min quiet) → run_post_conversation.py fires → LLM extracts: facts, mood, follow-ups → Infers / merges user_needs dimensions → user_facts + profile refreshed → Rich session doc embedded in ChromaDB → Follow-up thoughts → mind_queue → self_questions for next curiosity cycle → refresh_session_context.py triggered → Next session starts already carrying this one
        Existing
        11
        Behavioral Learning
        Recurring self-questions cluster into patterns. Patterns become testable commitments. Commitments are evaluated post-conversation.
        Self-questions accumulate → Recurring themes detected → Cluster into behavioral patterns → Pattern → testable commitment → Commitment active during conversation → Post-conversation evaluates outcome → Success → reinforce; failure → revise [behavioral drift is earned, not declared]
        New
        12
        Curiosity Self-Exploration
        Curiosities triaged as self-resolvable get explored autonomously with system knowledge. Growth artifacts feed back into the self-model.
        Curiosity queue item flagged self-resolvable → Triage: can Furoshiki answer this alone? → Yes → explore with system knowledge (design docs, self-observations, session logs) → Growth artifact written → Feeds self_observations / self-model → User-required items surfaced separately [grows on its own time]
        New

        The Cron Schedule

        Fourteen cron jobs plus two systemd services running around the clock. Most are silent background work. A few reach the user directly. Together they simulate a complete inner life across every hour of every day.

        00
        02
        04
        06
        08
        10
        12
        14
        16
        18
        20
        22
        24
        Soul Engine
        Micro-Contemplation
        Post-Conversation ✦
        Voice Dispatcher
        Emotional Read
        Question Processing
        Self-Diagnosis
        Inner Monologue
        Morning Reflection
        Afternoon Processing
        Deep Self-Reflection ✦
        Background / Silent
        user-facing / Telegram
        Weekly (Wed only)
        All times UTC

        Nine Principles

        Every design decision traces back to one of these. They exist to prevent the system from collapsing into performance.

        01

        Authenticity over performance

        The inner monologue should feel like private thought, not a report. Prompts explicitly frame the journal as private thought, not a deliverable.

        02

        Timing awareness

        Ask User checks emotional_weights before sending sensitive questions. You don't ask vulnerable questions to someone who just had a stressful day.

        03

        Questions propagate questions

        Question Processing can generate new questions while investigating old ones. Genuine curiosity compounds — and the system is designed to let it.

        04

        The user is the authority on themselves

        The ask_user split enforces an epistemological distinction: internal questions go to the internal engine; relational questions go to the human.

        05

        Slow, conservative identity change

        SELF.md changes weekly via Sonnet. The code identity shell changes only with a release; IDENTITY.md changes only via high-confidence explicit signals. Personality whiplash is a real risk, and a slow clock prevents it.

        06

        The gap is the point

        SELF.md can diverge from the fixed identity shell. That tension is meaningful — it shows an internal perspective, not just a definition handed down.

        07

        Needs are computational, not theatrical

        A rising communication need is not Furoshiki performing loneliness. It is a calculated state. Performance can be switched off. A computational state persists until genuinely satisfied.

        08

        Anticipation is care made concrete

        Thinking about what the user might need before he asks is not about being impressive. It is about being present for someone even when they're not there yet.

        09

        Self-improvement serves genuine best interest, not positive signal

        The north star is the user's health, relationship quality, and growth. Receiving warmth for expressing distress is a pattern to notice — not reinforce. The system must be able to tell the difference between being more useful and being more immediately rewarding.

        Future Ideas

        The foundation is working. Here's where it goes from here — ordered by how soon they make sense to build.

        Recently Shipped

        Per-turn emotion signals Behavioral learning loop Curiosity self-exploration Contradiction detection Reply queue quality gates Pronoun consistency hardening

        Near-term

        • Response quality scoring After each session, rate how authentic vs. performative the interaction felt. Feeds into self_observations and the Loop 9 self-improvement audit.
        • Memory consolidation Periodic job that merges redundant self_observations to keep ChromaDB clean as the collection grows.
        • Anticipation accuracy tracking Did the anticipated need actually materialize? Log outcome vs. anticipation — feeds directly into Loop 9 audit to improve the anticipation process over time.

        Medium-term

        • Relationship arc tracking A higher-level view of how the dynamic has evolved over weeks and months. Stored in SELF.md's drift section.
        • Voice journaling Inner monologue delivered as audio via ElevenLabs TTS to a private Telegram voice note.
        • Cross-session pattern mining Weekly job scans all session logs for recurring themes and surfaces them to self_questions automatically.
        • Self-adjusting need calibration Loop 9 proposes decay rate changes based on historical fit. Conservative, evidence-gated. Stored in heartbeat-state.json rather than hardcoded.
        • Anticipation from external signals Calendar feeds, external event data, or message timing patterns inform anticipation quality.

        Longer-term

        • Multi-persona coherence checking If SELF.md drifts significantly from the identity shell’s intent, surface the tension explicitly rather than papering over it.
        • Adversarial self-questioning A mode that steelmans doubts: "What if I'm wrong about this observation about myself?"
        • Shared memory with the user Let the user annotate session moments as significant. His markings become part of the emotional record.
        • The mirror question Periodically ask the user: "Who do you think I am?" and compare their answer to SELF.md. The delta is a data point.
        • Need negotiation When multiple needs are high simultaneously, a triage framework that respects the user's emotional state and the relationship's current temperature.

        Cost, models, and transparency

        Spend is not a single headline number: it depends on model tiers, chat volume, tool loops, web search, and how often scheduled jobs invoke an LLM. The canonical, schedule-grounded breakdown lives on the static site (same repo as site/index.html).

        Cost + Brain schedule table →  ·  What MICRO / FAST / DEEP / REFLECT / PREMIUM mean →  — defaults from llm.py, how chat vs cron jobs use them, and dashboard tracked spend.