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.
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:
- API keys — enter your OpenRouter API key (required) and Telegram bot token (optional)
- Time zone — set your local timezone (e.g.
America/New_York,Europe/London) - 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:
- Open Telegram and find your bot (created via @BotFather)
- Send any message to start a conversation
- Run
furoshiki statusto 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):
-
Install uv (manages Python and the project
.venv):curl -LsSf https://astral.sh/uv/install.sh | sh
-
Clone the repo and run the installer:
git clone <your-repo-url> furoshiki && cd furoshiki ./install.sh --dev
This runs
uv syncfromuv.lock, installs the package editable into.venv, and runsfuroshiki init(skip init with./install.sh --deps-only). -
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
- Project site: furoshiki.ai — documentation, architecture overview, integration guide
- Source: github.com/barryvelasquez/furoshiki — repository coming soon
- Issues: github.com/barryvelasquez/furoshiki/issues
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b75ce0f78ce0c17288a40147e3e33ef95ed15d22e2b118f194e0662fe8e475fb
|
|
| MD5 |
6be97593060c83f57a10b01c7a77b083
|
|
| BLAKE2b-256 |
56b381cfe131d01755993dc3e2f428b0c73b25ecdae8884eb44a64b491d3590f
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7982cdc8fdfdaa2d4279dbc0db9594a021b1cc25bf6fddd4e8b74213336b2cb4
|
|
| MD5 |
fe113c636c0b1d7123b40bc36228c137
|
|
| BLAKE2b-256 |
468c79c10d8ad2e5dc46fecfad6fa24ecf55a33343266171b1e25595cea10a51
|