Summer in Levittown, 1978
“Running until the street lights come on. Chasing fireflies. The heavy first drops of rain on pavement. The air is electric.”
ember
ember
Every AI memory system today is search. User asks, system retrieves. Ember is the opposite — memory that happens to you. No intent required. Scattered signals converge across dimensions until a dormant memory catches fire.
You just watched it happen. Fragments drifted. Dimensions fired. A memory assembled itself from convergent signals — the same way your brain works when a smell takes you back twenty years.
What is this about? 384-dimensional embeddings capture meaning, not just keywords.
How does it feel? Valence (grief to joy) and arousal (calm to intense) scored against memory baselines.
What senses are invoked? Visual, auditory, olfactory, tactile, gustatory markers matched across modalities.
Who is involved? People mentioned or implied, trust levels, relationship context.
When does this point? Time of day, season, era markers — childhood, college, present.
Where does this point? Location names, location types — beach, kitchen, city, neighborhood.
A single keyword never triggers recall. Real memory ignition requires convergence across multiple dimensions — the way human memory actually works.
Search requires intent. Memory happens to you. Ember runs unbidden on every message — your agent doesn’t decide to remember. It just does.
A single keyword never triggers recall. Real memory ignition requires convergence across multiple dimensions — semantic, emotional, sensory, relational, temporal. Just like human memory.
Embedding similarity is continuous. A faint echo feels different from a vivid flood. Your agent’s response modulates with match intensity — faint, warm, or vivid.
Warm memories go stale. They fade. They die. Ember doesn’t rescue memories from death — it lets them come back as ghosts. Partial, sensory, unbidden. Forgetting is what makes remembering mean something.
SQLite + local embeddings. No database server. No API keys. Just pip install ember-experiences
from ember import Ember
ember = Ember() # SQLite + MiniLM — zero config
ember.index(
"Summers in Philadelphia, running until the street lights come on...",
emotions=["nostalgic", "warm", "alive"],
sensory={"visual": ["fireflies"], "olfactory": ["bbq smoke"]},
location="Levittown, PA",
season="summer",
era="childhood",
)
# On every message — check for ignition
result = ember.check("lightning bugs on the porch, someone grilling...")
# → IgnitionResult(fired=True, intensity="warm", dimensions_fired=5)Experience packs are authored collections of memory constellations. Not code — data. Lived moments encoded as multi-dimensional fingerprints. Someone's felt truth that enriches your agent's palette.
“Running until the street lights come on. Chasing fireflies. The heavy first drops of rain on pavement. The air is electric.”
“Salt air and cold wax. The sound of sets rolling in before the sun breaks the horizon. Pre-dawn gray turning to gold.”
“Fish sauce and lemongrass. The cleaver on the cutting board. Steam rising from the pot. The way she never measured anything.”
“Neon reflections on wet pavement. Izakaya smoke drifting through an alley. The last train announcement echoing through the station.”
A complete AI agent relationship requires three dimensions of time. Ember solves the past — multi-dimensional memory that ignites when the present resonates with it. Two more open-source packages are in development: Context Mesh (identity continuity — your agent stays itself across every conversation) and Anticipation (forward temporal awareness — your agent carries the future the way a person does). Together they form the Temporal Stack. Follow the project on GitHub to stay current.
Past — Memory Ignition
LivePresent — Identity Continuity
In DevelopmentFuture — Temporal Awareness
In Development“Timeless is not as beautiful as impermanent.”