esfis

Memòria que desa,
substitueix i oblida.

L'assistent que ja tens obert veu la conversa, decideix què val la pena recordar i ho desa. Quan després li preguntes una altra cosa, esfis li torna només el que hi té a veure. Tot passa a la teva màquina i no costa res.

Què és un record

Una frase. I prou.

Sense subject/predicate/object, sense entitats, sense graf: el model entén la frase, que és per a qui està escrita. Un record és una fila d'una taula de SQLite amb el text, dues dates, si és actiu, d'on ve i el seu vector.

UN MISSATGE A DINS
Molt bona trucada amb l'Alex. Està content amb la feina nova de PM a
Stripe, tot i que el món dels pagaments és intens. S'ha mudat al
Poblenou per la feina. Vol que sopem el pròxim cop que hi passi.

QUATRE RECORDS A FORA
L'Alex treballa a Stripe, de product manager       · 2026-08
A l'Alex la feina de pagaments li sembla intensa   · 2026-09-04
L'Alex viu al Poblenou, Barcelona                  · substitueix: viu a Girona
L'Alex vol sopar quan passi per Barcelona          · pendent

Cada frase s'aguanta sola i diu de qui parla pel seu nom. Un record que necessita la conversa per entendre's no serveix d'aquí a tres mesos.

Desa, substitueix, oblida

Desa

L'assistent crida remember quan hi ha alguna cosa que encara importarà la setmana que ve. La majoria de torns no en generen cap, i això és una resposta bona.

Substitueix

Si la frase nova contradiu una de vella, la vella es desactiva i apunta cap a la nova. Ningú no esborra res: tens memòria temporal sense haver construït cap sistema temporal.

Oblida

forget desactiva un record quan li dius que és fals. Es queda al magatzem i al log.jsonl, una línia per canvi, per si te'n penedeixes.

Perquè això funcioni, remember no desa a cegues: si la frase ja hi és gairebé igual, respon quin id ja la conté en comptes de duplicar-la, i amb cada resposta torna els records semblants perquè l'assistent pugui substituir en comptes d'acumular contradiccions.

Fets i instruccions

Hi ha coses que no haurien de dependre de si la pregunta hi encaixa. Un fet es busca; una instrucció viatja sempre, perquè és l'encàrrec que l'assistent ha de seguir tant si la pregunta hi té a veure com si no.

instrucció  Quan em donis codi, no m'expliquis què fa línia a línia.
instrucció  Ves al gra: primer la resposta, després el perquè.
fet         En Francesc prefereix TypeScript per al projecte esfis.
fet         L'Alex viu al Poblenou, Barcelona.

Les instruccions van al davant de cada recall i també al camp instructions de l'initialize del servidor MCP, que és el que els clients posen al context tots sols. Per això han de ser curtes: les pagues a cada petició.

Recuperar

Tot local, sense xarxa ni cost: BM25 sobre el magatzem, vectors de NLEmbedding (els models que ja porta el sistema) i entre tres i vuit records com a molt. Si la pregunta no toca res del que sap, no retorna res.

  1. Lèxic

    BM25 sobre el text dels records. Una paraula rara —«esfis», «Alex»— pesa més que una de comuna, i els accents i les terminacions es normalitzen: desplego, desplega i desplegar són el mateix senyal.

  2. Sentit

    Els vectors hi posen les paraules que no has fet servir literalment. Els cosinus de NLEmbedding s'amunteguen en una banda estreta, o sigui que es puntuen relatius a la resta del magatzem per aquesta pregunta, no en una escala absoluta.

  3. Selecció

    Els dos senyals es combinen i es talla. Un mig fet que hi tingui a veure de lluny es queda fora: no valia el context que ocupa.

Per què dos senyals i no un: el lèxic sol no troba el que has dit amb altres paraules, i els vectors sols diuen que tot s'assembla a tot. El català no té model d'embeddings al sistema; s'hi fa servir el castellà, i la meitat lèxica compensa la resta.

$ esfis --recall "què cuino divendres"

0.94  Sopar amb la Laura i en Dani, divendres a les 9      (2026-09-08)
0.81  La Laura menja sense gluten des d'aquesta primavera  (2026-04-12)
0.77  En Dani no menja marisc                              (2025-11-30)

Prova-ho

Un magatzem d'exemple de dotze records, el mateix rànquing, que s'executa al teu navegador. Pregunta-li alguna cosa.

Lèxic2 ms
Sentit6 ms
Selecció1 ms

    Per on hi entra

    Assistents

    Claude Code, Claude Desktop, Cursor i qualsevol client MCP, amb l'eina remember.

    Observa

    Enganxa una conversa a l'app i el model en treu els records. Aquest camí sí que gasta API.

    Fitxers .md

    esfis --import puja la memòria que els assistents ja t'han escrit en fitxers.

    Terminal

    esfis --add "…" quan ho vols desar tu, sense passar per ningú.

    On funciona

    PeçaQuè tensEstat
    App de macOSUna finestra i tres pestanyes: Observa, Recorda i la configuracióVa
    Servidor MCPJSON-RPC per l'entrada estàndard, quatre eines, cap port obertVa
    Línia d'ordres--recall, --add, --import, --listVa
    SincronitzacióEl magatzem no surt de la màquinaEncara no
    Linux i WindowsEls vectors surten dels models que porta macOSEncara no

    Les peces