esfis

Novetats

Tots els canvis publicats: el motor, el servidor MCP, la línia d'ordres i l'app.

esfis --import puja la memòria que ja tens escrita

Els assistents ja desen fets en fitxers: un .md per fet, amb frontmatter, dins de ~/.claude/projects/<projecte>/memory/. Bons records, però tancats al projecte on es van escriure.

esfis --import                      # ~/.claude/projects
esfis --import ~/notes ~/altra/mem  # o les carpetes que diguis

Agafa tot .md que tingui description: al frontmatter i el desa; els MEMORY.md, que són índex, se salten. Un type: feedback entra com a instrucció i la resta com a fets.

Detalls

  • Cada record recorda de quin fitxer ve (source: md:<name>): tornar-hi a passar no duplica res, i un fitxer editat substitueix la versió vella en comptes d'afegir-se-li.
  • D'una instrucció se'n desa la frase del description, perquè viatja a cada recall. D'un fet, el cos sencer.
  • El vector surt sempre del description: els embeddings de frase es difuminen en un text llarg, i el cos ja pesa a la meitat lèxica.

esfis 1.0

La primera versió estable. L'app de macOS, la línia d'ordres i el servidor MCP són el mateix binari: ./build-app.sh genera Esfis.app i deixa ~/.esfis/bin/esfis, que és el que criden els assistents.

Novetat

  • Una finestra i tres pestanyes: Observa (enganxa-hi una conversa i el model en treu els records), Recorda (mira i esborra el que sap de tu) i la configuració, amb la clau d'API al clauer.
  • Ordres: --recall, --add, --list i --mcp.

Encara no

  • Sincronització entre dispositius: el magatzem no surt de la màquina.
  • Linux i Windows: els vectors surten dels models que porta macOS.

El servidor MCP, amb quatre eines i dues menes de record

esfis --mcp parla JSON-RPC per l'entrada estàndard i exposa recall, remember, forget i memories. No obre cap port i no vol cap clau.

La política d'extracció viu a la descripció de remember: qui decideix què val la pena desar és l'assistent que ja tens obert, i esfis no fa cap segona crida a cap model.

Novetat

  • Un record pot ser un fet o una instrucció. Els fets es busquen; les instruccions van al davant de cada recall i al camp instructions de l'initialize, perquè són l'encàrrec que s'ha de seguir tant si la pregunta hi té a veure com si no.
  • remember no desa una frase que ja hi és gairebé igual: respon quin id ja la conté.
  • Cada resposta torna els records semblants, perquè l'assistent pugui substituir en comptes d'acumular contradiccions.

Una línia per canvi, al costat de la base de dades

Cada canvi al magatzem escriu una línia a ~/.esfis/log.jsonl: add, supersede, forget o delete, amb l'id, la data i d'on ve. S'hi afegeix pel final i no es reescriu mai. En parlem al bloc.

Canvis

  • forget desactiva el record (active = 0) en comptes d'esborrar-lo.
  • Un supersede desactiva el vell i l'hi apunta amb superseded_by.
  • El magatzem es mou d'Application Support a ~/.esfis/, i es migra sola el primer cop.

El rànquing passa a fer servir dos senyals

Recuperar ja no és només una cerca de vectors. Ara cada pregunta puntua el magatzem amb BM25 i amb els vectors de NLEmbedding, i combina les dues meitats.

Els cosinus de NLEmbedding s'amunteguen en una banda estreta, o sigui que es puntuen relatius a la resta del magatzem per aquesta pregunta i no contra cap llindar fix. La meitat lèxica és la que diu si el primer candidat val alguna cosa.

Canvis

  • Els tokens es pleguen sense accents i es tallen a sis caràcters: desplego, desplega i desplegar són el mateix senyal.
  • Les paraules buides del català, el castellà i l'anglès no compten.
  • Una pregunta que no toca res retorna zero records, que abans retornava el menys dolent.