Skip to main content

Self-aware AI companion system — memory, identity, contemplation, and self-model

Project description

Furoshiki

Persistent self-awareness for LLMs — memory, identity, needs, and an inner life that continues between conversations. Furoshiki runs as its own stack: Python owns behavior and budgets; models own prose and reflection.

PyPI version Python versions License


Installation

Prerequisites

  • Python 3.11 or later — install from python.org or your system package manager
  • OpenRouter API key — sign up at openrouter.ai/keys (free credits available)
  • (Optional) Telegram bot token — create a bot via @BotFather on Telegram for chat access

Install the package

pip install furoshiki

On some systems you may need pip3 instead of pip. The package installs a furoshiki command.

Run the setup wizard

furoshiki onboard

This interactive wizard guides you through:

  1. API keys — enter your OpenRouter API key (required) and Telegram bot token (optional)
  2. Time zone — set your local timezone (e.g. America/New_York, Europe/London)
  3. Identity files — optionally create a SOUL persona template and operator notes

You can rerun furoshiki onboard --keys-only later to update API keys without touching identity files.

Initialize the database

furoshiki db migrate

This creates the SQLite database and ChromaDB vector store under ~/.furoshiki/memory/.

Start the system

furoshiki start

This launches two processes:

  • Brain — the main scheduler, manages the Telegram listener and API server
  • Doctor — an independent watchdog that monitors health and triggers repairs

Check status with furoshiki status and view logs with furoshiki logs.


Connecting to Telegram

After starting, if you configured a Telegram bot token during onboarding:

  1. Open Telegram and find your bot (created via @BotFather)
  2. Send any message to start a conversation
  3. Run furoshiki status to confirm the listener is active

Furoshiki will respond, remember the conversation, and may reach out proactively when there's something to say (gated by do-not-disturb hours, cooldown, and mood).


Operator dashboard

With the system running, open http://localhost:7432/dashboard in your browser.

The dashboard provides live controls for:

Page What you can do
Status System health, process status, heartbeat
Scheduler View and edit scheduled tasks (reflection, backup, outreach, etc.)
Models Configure LLM routing, model tiers, provider settings
LLM budgets Set daily/monthly spending caps
Identity & context Edit SOUL persona, view session context
Settings Tune behavior: proactive outreach, conversation continuity, DND hours
Plugins Install and manage runtime plugins
API Keys Create bearer tokens for programmatic access
Logs Browse real-time log streams

The dashboard is served by the Brain-managed API server. To access it from another machine, set FUROSHIKI_API_HOST=0.0.0.0 in ~/.furoshiki/.env and restart.


What it is

Most AI assistants are stateless. Furoshiki isn't. It maintains:

  • Episodic memory — every conversation is logged, embedded in vector storage (ChromaDB), and retrievable
  • A self-model — evolving self-understanding updated by nightly reflection, separate from the chat-facing persona
  • Needs and inner life — internal states (connection, curiosity, rest, purpose) that decay over time and shape tone
  • Proactive voice — Furoshiki reaches out when there is genuinely something worth saying, with DND, cooldown, and mood gates
  • Operator dashboard — web UI for schedules, LLM routing, budgets, plugins, and system health

Harness-agnostic. Telegram is the primary interface. Any harness can integrate via a simple contract: write session logs, read structured context. See the project site for integration details.


Features

Persistent memory SQLite + ChromaDB vector store for episodic and semantic recall
Scheduled reflection Nightly journal, morning orientation, deep weekly self-review
Proactive outreach Gated by recency, mood, DND window, and duplicate detection
Operator dashboard Schedules, LLM routing, budgets, plugins, identity editing, API keys
Plugin system Runtime hooks for conversation, reflection, and scheduled tasks
LLM cost controls Daily/monthly budget caps, per-source model routing, provider selection
Repair & delegation Auto-healing watchdog + agentic CLI integration for proposals
Model tools In-conversation tools for emotion adjustment, observations, and user facts

Architecture

Furoshiki runs as two processes controlled by the furoshiki CLI:

  • Brain — internal task scheduler (replaces cron), manages Telegram listener and API server as child processes, auto-restarts them on failure
  • Doctor — independent watchdog, monitors health, rotates logs, triggers repairs for recurring errors

All runtime data lives under FUROSHIKI_DATA (default ~/.furoshiki/), keeping the installed package clean and portable. Use furoshiki export and furoshiki import to bundle and migrate instances between machines.


Management commands

Command Purpose
furoshiki start / stop Start or stop the Brain and Doctor processes
furoshiki status System status and health overview
furoshiki logs View log streams (all sources or by service)
furoshiki db migrate Apply database schema migrations
furoshiki onboard Interactive setup wizard
furoshiki onboard --keys-only Update API keys only
furoshiki mood Show emotional state and recent reflections
furoshiki schedules merge-defaults Add missing scheduled tasks from defaults
furoshiki export / import Backup or restore an instance archive

Use furoshiki --help for the full command list.


Development (from source)

For hacking on Furoshiki (not required if you only use pip install furoshiki from PyPI):

  1. Install uv (manages Python and the project .venv):

    curl -LsSf https://astral.sh/uv/install.sh | sh
    
  2. Clone the repo and run the installer:

    git clone <your-repo-url> furoshiki && cd furoshiki
    ./install.sh --dev
    

    This runs uv sync from uv.lock, installs the package editable into .venv, and runs furoshiki init (skip init with ./install.sh --deps-only).

  3. Daily commands:

    source .venv/bin/activate    # optional
    furoshiki start
    uv run pytest                # tests (or: pytest after activate)
    

Migrating an existing instance from another machine: copy a furoshiki-instance-*.tar.gz export and run furoshiki import <archive> — do not re-run onboard unless you want a fresh instance.

Repair a broken env: ./install.sh --repair or ./install.sh --recreate (removes .venv and re-syncs).


Links


License

Elastic License 2.0. See LICENSE and NOTICE for details.

© 2026 Barry Velasquez. All rights reserved under the terms of the Elastic License 2.0.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

furoshiki-0.1.1.tar.gz (1.3 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

furoshiki-0.1.1-py3-none-any.whl (981.6 kB view details)

Uploaded Python 3

File details

Details for the file furoshiki-0.1.1.tar.gz.

File metadata

  • Download URL: furoshiki-0.1.1.tar.gz
  • Upload date:
  • Size: 1.3 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.11

File hashes

Hashes for furoshiki-0.1.1.tar.gz
Algorithm Hash digest
SHA256 b75ce0f78ce0c17288a40147e3e33ef95ed15d22e2b118f194e0662fe8e475fb
MD5 6be97593060c83f57a10b01c7a77b083
BLAKE2b-256 56b381cfe131d01755993dc3e2f428b0c73b25ecdae8884eb44a64b491d3590f

See more details on using hashes here.

File details

Details for the file furoshiki-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: furoshiki-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 981.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.11

File hashes

Hashes for furoshiki-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 7982cdc8fdfdaa2d4279dbc0db9594a021b1cc25bf6fddd4e8b74213336b2cb4
MD5 fe113c636c0b1d7123b40bc36228c137
BLAKE2b-256 468c79c10d8ad2e5dc46fecfad6fa24ecf55a33343266171b1e25595cea10a51

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page