### microsoft 200 https://learn.microsoft.com/en-us/azure/cosmos-db/gen-ai/agentic-memories
keys ['TTL', 'summar', 'episod', 'semantic', 'vector', 'reflection', 'short-term', 'long-term', 'memory', 'policy']
title Agent Memory in Azure Cosmos DB for NoSQL - Azure Cosmos DB for NoSQL | Microsoft Learn

### agentdock 200 https://hub.agentdock.ai/docs/memory/consolidation-guide
keys ['summar', 'dedup', 'episod', 'semantic', 'vector', 'memory', 'hierarchy']
title Memory Consolidation Guide - AgentDock Documentation | AgentDock Hub

### anthropic 200 https://docs.anthropic.com/en/docs/build-with-claude/memory
keys ['TTL', 'summar', 'memory', 'policy']
title Not Found - Claude API Docs

### letta 200 https://memgpt.ai
keys ['summar', 'memory']
title Letta

### redis 200 https://redis.io/blog/build-smarter-ai-agents-manage-short-term-and-long-term-memory-with-redis/
keys ['TTL', 'summar', 'dedup', 'episod', 'semantic', 'vector', 'short-term', 'long-term', 'memory', 'policy']
title How to Build AI Agents with Redis Memory Management

### zep 404 https://www.getzep.com/blog/agent-memory
keys ['summar', 'memory']
title 404: This page could not be found.


bash

python - <<'PY'
import requests
for u in ['https://docs.getzep.com','https://www.getzep.com','https://www.getzep.com/docs','https://docs.zep.dev']:
    try:
        r=requests.get(u,timeout=15)
        print(u,r.status_code,r.url,r.text[:120].replace('\n',' '))
    except Exception as e:
        print(u,'ERR',e)
PY


https://docs.getzep.com 200 https://help.getzep.com/overview <!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><link rel="preconnect" href="https://app.buildwithfern.com"
https://www.getzep.com 200 https://www.getzep.com/ <!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-s
https://www.getzep.com/docs 404 https://www.getzep.com/docs/ <!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-s
https://docs.zep.dev ERR HTTPSConnectionPool(host='docs.zep.dev', port=443): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7ffef4046c10>: Failed to resolve 'docs.zep.dev' ([Errno -2] Name or service not known)"))


**Updating documentation**

I think I might need to use docs.getzep.com/help for some guidance. I want to keep my answer concise and focused. It’ll be important to update the file with a validated and unvalidated list, reflecting the source quality. So, I’ll get started on editing the document to make sure it accurately represents that information. It's essential to ensure clarity in the sources I’m referring to!

edit

## Fuentes base

- Microsoft Learn: "Agent Memory in Azure Cosmos DB for NoSQL"
  - short-term vs long-term memory
  - TTL para corto plazo
  - summary/prune para hilos largos
  - modelos: por turno, por mensaje, por thread
  - retrieval: vector + full-text + filters
  - URL: https://learn.microsoft.com/en-us/azure/cosmos-db/gen-ai/agentic-memories

- AgentDock memory consolidation guide
  - conversión de episodic a semantic por edad
  - dedup por embedding/keyword/metadata/temporal similarity
  - abstracción de más alto nivel
  - estrategias merge / synthesize / abstract
  - URL: https://hub.agentdock.ai/docs/memory/consolidation-guide

- Anthropic docs: memory
  - referencia general a memoria persistente, resúmenes y gestión de estado
  - URL: https://docs.anthropic.com/en/docs/build-with-claude/memory

- Letta / MemGPT home
  - estado persistente, memoria larga y aprendizaje continuo
  - URL: https://memgpt.ai

## Fuentes base y calidad

### Alta confianza / backing fuerte

- Microsoft Learn: "Agent Memory in Azure Cosmos DB for NoSQL"
  - backing: documentación oficial de producto
  - short-term vs long-term memory
  - TTL para corto plazo
  - summary/prune para hilos largos
  - modelos: por turno, por mensaje, por thread
  - retrieval: vector + full-text + filters
  - URL: https://learn.microsoft.com/en-us/azure/cosmos-db/gen-ai/agentic-memories

- AgentDock memory consolidation guide
  - backing: documentación de producto/implementación, pero más opinionada que Microsoft
  - conversión de episodic a semantic por edad
  - dedup por embedding/keyword/metadata/temporal similarity
  - abstracción de más alto nivel
  - estrategias merge / synthesize / abstract
  - URL: https://hub.agentdock.ai/docs/memory/consolidation-guide

- Redis blog: AI Agents memory management
  - backing: vendor blog con ejemplos concretos y arquitectura de producto
  - short-term/long-term separation
  - TTL, summarization, semantic search, dedup ideas
  - URL: https://redis.io/blog/build-smarter-ai-agents-manage-short-term-and-long-term-memory-with-redis/

- Letta / MemGPT home
  - backing: producto real; el home no prueba cada técnica, pero sí que existe el sistema y su foco en memoria persistente
  - estado persistente, memoria larga, aprendizaje continuo
  - URL: https://memgpt.ai

### Baja confianza / revisar antes de usar como fuente

- Anthropic memory URL usada antes
  - la URL actual devolvió 404 / not found
  - no la tomo como fuente válida sin localizar la página correcta
  - URL: https://docs.anthropic.com/en/docs/build-with-claude/memory

- docs.zep.dev
  - no resolvió; no usar sin URL actualizada

### Lectura

- Las fuentes con más backing describen patrones de almacenamiento/retrieval y compaction.
- Las fuentes más débiles suelen meter "insights" o "consolidation" como idea de producto, pero sin detallar cómo medir calidad, verdad o utilidad.
- Para tu objetivo, lo valioso es quedarte con lo que tiene mecanismo explícito: TTL, summaries, dedup, hierarchical rollups, hybrid retrieval, source trace.


Successfully replaced 1 block(s) in /mnt/rpi/pi-config/sessions/memory-techniques-review.md.

     ...
  14 - [ ] Completar taxonomía por técnica
  15 - [ ] Traducir taxonomía a arquitectura para agents-database
  16 - [ ] Proponer roadmap incremental
  17
- 18 ## Fuentes base
+ 18 ## Fuentes base y calidad
  19
+ 20 ### Alta confianza / backing fuerte
+ 21
  20 - Microsoft Learn: "Agent Memory in Azure Cosmos DB for NoSQL"
+ 23   - backing: documentación oficial de producto
  21   - short-term vs long-term memory
  22   - TTL para corto plazo
  23   - summary/prune para hilos largos
  24   - modelos: por turno, por mensaje, por thread
  25   - retrieval: vector + full-text + filters
  26   - URL: https://learn.microsoft.com/en-us/azure/cosmos-db/gen-ai/agentic-memories
  27
  28 - AgentDock memory consolidation guide
+ 32   - backing: documentación de producto/implementación, pero más opinionada que Microsoft
  29   - conversión de episodic a semantic por edad
  30   - dedup por embedding/keyword/metadata/temporal similarity
  31   - abstracción de más alto nivel
  32   - estrategias merge / synthesize / abstract
  33   - URL: https://hub.agentdock.ai/docs/memory/consolidation-guide
  34
- 35 - Anthropic docs: memory
- 36   - referencia general a memoria persistente, resúmenes y gestión de estado
- 37   - URL: https://docs.anthropic.com/en/docs/build-with-claude/memory
+ 39 - Redis blog: AI Agents memory management
+ 40   - backing: vendor blog con ejemplos concretos y arquitectura de producto
+ 41   - short-term/long-term separation
+ 42   - TTL, summarization, semantic search, dedup ideas
+ 43   - URL: https://redis.io/blog/build-smarter-ai-agents-manage-short-term-and-long-term-memory-with-redis/
  38
  39 - Letta / MemGPT home
- 40   - estado persistente, memoria larga y aprendizaje continuo
+ 46   - backing: producto real; el home no prueba cada técnica, pero sí que existe el sistema y su foco en memoria persistente
+ 47   - estado persistente, memoria larga, aprendizaje continuo
  41   - URL: https://memgpt.ai
  42
+ 50 ### Baja confianza / revisar antes de usar como fuente
+ 51
+ 52 - Anthropic memory URL usada antes
+ 53   - la URL actual devolvió 404 / not found
+ 54   - no la tomo como fuente válida sin localizar la página correcta
+ 55   - URL: https://docs.anthropic.com/en/docs/build-with-claude/memory
+ 56
+ 57 - docs.zep.dev
+ 58   - no resolvió; no usar sin URL actualizada
+ 59
+ 60 ### Lectura
+ 61
+ 62 - Las fuentes con más backing describen patrones de almacenamiento/retrieval y compaction.
+ 63 - Las fuentes más débiles suelen meter "insights" o "consolidation" como idea de producto, pero sin detallar cómo medir calidad, verdad o utilidad.
+ 64 - Para tu objetivo, lo valioso es quedarte con lo que tiene mecanismo explícito: TTL, summaries, dedup, hierarchical rollups, hybrid retrieval, source trace.
+ 65
  43 ## Taxonomía de técnicas
  44
  45 ### 1) Captura cruda
  46 Memoria como log de eventos.
     ...


Sí. Ya separé mejor:

**Con backing fuerte**
- **Microsoft Learn**: doc oficial. Real.
- **Redis blog**: vendor blog, con arquitectura concreta. Real, pero más “how-to” que investigación.
- **AgentDock guide**: producto real, pero más opinionado.
- **Letta / MemGPT**: producto real; el home prueba existencia y foco, no cada claim técnico.

**Flojo / no válido como fuente ahora**
- **Anthropic memory**: la URL que usé devolvió 404. No la tomo.
- **Zep**: la URL vieja no resuelve. No la tomo hasta encontrar URL vigente.

Actualicé el archivo con esta clasificación:
`/mnt/rpi/pi-config/sessions/memory-techniques-review.md`

Regla práctica:
- **Backing fuerte** = doc oficial, página de producto, guía técnica con mecanismos explícitos.
- **Marketing/ideas al aire** = claims sin detalles de mecanismo, sin schema, sin query/retrieval, sin TTL/dedup/consolidación verificable.

Si querés, el próximo paso lo hago bien estricto:
1. busco 8–12 fuentes más,
2. las etiqueto en `fuerte / medio / flojo`,
3. y te saco una lista final solo con técnicas que tengan implementación o evidencia real.


me pasas el archivo a html? me cuesta leer md


**Considering file conversion**

I need to convert a file to HTML, preferably as a simple standalone. I think I might need to edit or create a new file for that. Using Markdown to HTML with Pandoc sounds like a great option, so I’ll check its availability. It’s important to ensure that this process goes smoothly, so I want to confirm everything's in place before moving forward with the conversion.

bash

command -v pandoc || command -v python3 && python3 - <<'PY'
import importlib.util
print('markdown', importlib.util.find_spec('markdown'))
PY


/usr/bin/python3
markdown None


**Considering HTML conversion**

I’m thinking I might need to use Python, especially since the markdown library isn’t available. A straightforward approach could be writing simple HTML manually with some preformatted content. I could also consider using Commonmark, but I’m not sure that's necessary. I should check if the user prefers plain HTML or something more visually appealing. I guess I’ll inspect the file content and create an HTML file from the Markdown using a basic parser with Python.

python3 - <<'PY'
from pathlib import Path
import html,re
md = Path('/mnt/rpi/pi-config/sessions/memory-techniques-review.md').read_text()
lines = md.splitlines()
out=[]
out.append('<!doctype html><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>Memory techniques review</title>')
out.append('')
out.append('
Memory techniques review
')
out.append('
Versión HTML del archivo markdown compartible.
')
# very small markdown renderer for this doc
in_ul=False; in_ol=False; in_table=False; in_pre=False
for i,line in enumerate(lines):
    if line.startswith('# '):
        if in_ul: out.append('
'); in_ul=False
        if in_ol: out.append('
'); in_ol=False
        out.append(f"
{html.escape(line[2:])}
")
    elif line.startswith('## '):
        if in_ul: out.append('
'); in_ul=False
        if in_ol: out.append('
'); in_ol=False
        out.append(f"
{html.escape(line[3:])}
")
    elif line.startswith('### '):
        if in_ul: out.append('
'); in_ul=False
        if in_ol: out.append('
'); in_ol=False
        out.append(f"
{html.escape(line[4:])}
")
    elif line.startswith('- '):
        if in_ol: out.append('
'); in_ol=False
        if not in_ul: out.append('
'); in_ul=True
        out.append(f"
{html.escape(line[2:])}
")
    elif re.match(r'^\d+\. ', line):
        if in_ul: out.append('
'); in_ul=False
        if not in_ol: out.append('
'); in_ol=True
        out.append(f"
{html.escape(re.sub(r'^\\d+\\. ','',line))}
")
    elif line.strip().startswith('|') and line.count('|')>=2:
        if in_ul: out.append('
'); in_ul=False
        if in_ol: out.append('
'); in_ol=False
        if not in_table:
            out.append('
')
            in_table=True
        cells=[c.strip() for c in line.strip().strip('|').split('|')]
        if set(''.join(cells))<=set('- '):
            continue
        tag='th' if i>0 and lines[i-1].startswith('|---') else 'td'
        out.append('
' + ''.join(f'<{tag}>{html.escape(c)}</{tag}>' for c in cells) + '
')
    elif line.strip()=='' :
        if in_ul: out.append('
'); in_ul=False
        if in_ol: out.append('
'); in_ol=False
        if in_table: out.append('
'); in_table=False
    elif line.startswith('> '):
        out.append(f"
{html.escape(line[2:])}
")
    else:
        if line:
            out.append(f"
{html.escape(line)}
")
if in_ul: out.append('
')
if in_ol: out.append('
')
if in_table: out.append('
')
out.append('')
Path('/mnt/rpi/pi-config/sessions/memory-techniques-review.html').write_text('\n'.join(out))
print('wrote html')
PY


wrote html


Sí. Te lo pasé a HTML:

`/mnt/rpi/pi-config/sessions/memory-techniques-review.html`

Si querés, también te lo dejo más prolijo:
- con índice clickeable
- mejor tabla
- estilos más legibles
- exportado a un archivo compartible en `/mnt/rpi` para abrir desde navegador


https://ballbox-first.emperor-ratio.ts.net/mnt/rpi/pi-config/sessions/memory-techniques-review.html
uu, me renderiza html como plaintext. arreglas nginx?


**Evaluating nginx mime settings**

I need to look into the nginx mime settings, as it might be serving files with a default type of text/plain based on their extensions. This could be coming from a static route. I’ll need to find the configuration file to investigate this further. It's essential to ensure the correct mime types are being set so that files are properly served. Let's see what I can find in the nginx settings!

grep -R "mime.types\|default_type\|types_hash" -n /etc/nginx /etc/nginx/sites-available /etc/nginx/sites-enabled 2>/dev/null | head -200

grep -R "location /mnt\|alias /mnt\|root /mnt\|try_files" -n /etc/nginx/sites-available /etc/nginx/sites-enabled 2>/dev/null | head -200

ls -la /etc/nginx && nginx -T 2>/dev/null | sed -n '1,260p'


/etc/nginx/sites-enabled/kiosk:55:        default_type text/plain;
/etc/nginx/sites-enabled/kiosk:72:        default_type text/plain;
/etc/nginx/sites-available/kiosk.bak:17:        default_type application/json;
/etc/nginx/nginx.conf:21:	types_hash_max_size 2048;
/etc/nginx/nginx.conf:27:	include /etc/nginx/mime.types;
/etc/nginx/nginx.conf:28:	default_type application/octet-stream;
/etc/nginx/sites-available/kiosk.bak:17:        default_type application/json;
/etc/nginx/sites-enabled/kiosk:55:        default_type text/plain;
/etc/nginx/sites-enabled/kiosk:72:        default_type text/plain;


/etc/nginx/sites-available/kiosk.bak:22:        try_files $uri $uri/ =404;
/etc/nginx/sites-available/kiosk.portal:9:        try_files $uri $uri/ /index.html;
/etc/nginx/sites-available/default:51:		try_files $uri $uri/ =404;
/etc/nginx/sites-available/default:89:#		try_files $uri $uri/ =404;
/etc/nginx/sites-available/kiosk:27:        try_files $uri $uri/ /calistenia/index.html;
/etc/nginx/sites-available/kiosk:119:        try_files $uri $uri/ /index.html;
/etc/nginx/sites-enabled/kiosk:27:        try_files $uri $uri/ /calistenia/index.html;
/etc/nginx/sites-enabled/kiosk:73:        alias /mnt/;
/etc/nginx/sites-enabled/kiosk:142:        try_files $uri $uri/ /index.html;


total 84
drwxr-xr-x   8 root root  4096 Jan 17 10:45 .
drwxr-xr-x 138 root root 12288 Apr 21 16:44 ..
drwxr-xr-x   2 root root  4096 Apr 16 15:52 conf.d
-rw-r--r--   1 root root  1125 Aug 29  2025 fastcgi.conf
-rw-r--r--   1 root root  1055 Aug 29  2025 fastcgi_params
-rw-r--r--   1 root root  2837 Aug 29  2025 koi-utf
-rw-r--r--   1 root root  2223 Aug 29  2025 koi-win
-rw-r--r--   1 root root  5527 Aug 29  2025 mime.types
drwxr-xr-x   2 root root  4096 Aug 29  2025 modules-available
drwxr-xr-x   2 root root  4096 Aug 29  2025 modules-enabled
-rw-r--r--   1 root root  1545 Aug 29  2025 nginx.conf
-rw-r--r--   1 root root   180 Aug 29  2025 proxy_params
-rw-r--r--   1 root root   636 Aug 29  2025 scgi_params
drwxr-xr-x   2 root root  4096 Apr 20 10:47 sites-available
drwxr-xr-x   2 root root  4096 Apr 21 23:59 sites-enabled
drwxr-xr-x   2 root root  4096 Jan 17 10:45 snippets
-rw-r--r--   1 root root   664 Aug 29  2025 uwsgi_params
-rw-r--r--   1 root root  3071 Aug 29  2025 win-utf


**Inspecting kiosk file lines**

I need to take a moment to inspect the relevant lines in the kiosk file. It's important to ensure I'm looking at the right details. I wonder if there are any specific lines that I should pay extra attention to, or if I should just go through them all systematically. Okay, let’s get started on that and see what insights I can gather from the content.


server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/portal;
    index index.html;

    location = /portal {
        return 302 /portal/;
    }

    location ^~ /portal/ {
        proxy_pass http://127.0.0.1:18789/portal/;
        proxy_http_version 1.1;
        proxy_set_header Accept-Encoding "";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }

    # Calistenia static repo
    location ^~ /calistenia/ {
        alias /home/sebas/clawd/web/calistenia/;
        try_files $uri $uri/ /calistenia/index.html;
    }

    location = /mp3-share {
        return 302 /mp3-share/;
    }

    location = /mp3-share-link {
        return 302 /mp3-share/;
    }

    location ^~ /mp3-share/ {
        alias /home/sebas/downloads/mp3-share/;
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
    }

    location = /home {
        return 302 /home/;
    }

    location ^~ /home/ {
        types {
            text/plain md log sh py conf sql;
            application/json json;
            text/yaml yaml yml;
        }
        default_type text/plain;
        alias /home/sebas/;
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
    }

    location = /mnt {
        return 302 /mnt/;
    }

    location ^~ /mnt/ {
        types {
            text/plain md log sh py conf sql;
            application/json json;
            text/yaml yaml yml;
        }
        default_type text/plain;
        alias /mnt/;
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
    }

    location = /shell {
        return 302 /shell/;
    }

    location = /shell/ {
        proxy_pass http://127.0.0.1:7681/;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }

    location = /shell/ws {
        proxy_pass http://127.0.0.1:7681/ws;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }

    location = /pi {
        return 302 /pi/;
    }

    location ^~ /pi/ {
        proxy_pass http://127.0.0.1:8787/;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_redirect off;
        sub_filter_once off;
        sub_filter_types text/css application/javascript application/json;
        sub_filter 'href="/' 'href="/pi/';
        sub_filter 'src="/' 'src="/pi/';
        sub_filter 'content="/' 'content="/pi/';
        sub_filter 'url(/' 'url(/pi/';
        sub_filter 'fetch="/' 'fetch="/pi/';
        sub_filter "fetch('/" "fetch('/pi/";
        sub_filter '"/manifest.webmanifest' '"/pi/manifest.webmanifest';
        sub_filter '"/icon.svg' '"/pi/icon.svg';
        sub_filter '"/styles.css' '"/pi/styles.css';
    }

    location = /tmux {
        return 301 /shell/;
    }

    location ^~ /tmux/ {
        return 301 /shell/;
    }

    # Main portal SPA
    location / {
        try_files $uri $uri/ /index.html;
    }

    access_log off;
    error_log /var/log/nginx/portal-error.log warn;

    location ~* \.(css|js|jpg|jpeg|png|gif|ico|svg|woff|woff2)$ {
        expires 1d;
        add_header Cache-Control "public, immutable";
    }
}


**Evaluating HTML types**

I think there's no proper type for .html under /mnt since it's set to default_type text/plain. Mime.types should map html to text/html globally, but this location overrides it. So if the browser sees text/plain, it might be due to not including html, but since it inherits global types, that’s puzzling. Maybe the server isn't reading the file as html because of how the types are set. I need to check the response headers to confirm the content type. So, I should fix this by adding html to the types mapping.

edit

    location ^~ /mnt/ {
        types {
            text/plain md log sh py conf sql;
            application/json json;
            text/yaml yaml yml;
        }
        default_type text/plain;
        alias /mnt/;
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
    }

    location ^~ /mnt/ {
        types {
            text/html html htm;
            text/plain md log sh py conf sql;
            application/json json;
            text/yaml yaml yml;
        }
        default_type text/plain;
        alias /mnt/;
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
    }


Successfully replaced 1 block(s) in /etc/nginx/sites-enabled/kiosk.

     ...
  64     }
  65
  66     location ^~ /mnt/ {
  67         types {
+ 68             text/html html htm;
  68             text/plain md log sh py conf sql;
  69             application/json json;
  70             text/yaml yaml yml;
  71         }
     ...


**Considering nginx commands**

I need to test and reload, since the user might be asking about arranging nginx. Reloading seems acceptable, but I wonder if a service restart is really necessary or if it could lead to some irreversible changes. So, I think it's best to run `nginx -t` first to check for any configuration issues before proceeding with the reload. Let’s ensure everything is in order before making any changes.

bash

nginx -t && systemctl reload nginx && curl -I -s 'http://127.0.0.1/mnt/rpi/pi-config/sessions/memory-techniques-review.html' | sed -n '1,20p'


2026/04/22 10:24:04 [warn] 544665#544665: the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /etc/nginx/nginx.conf:1
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
2026/04/22 10:24:04 [emerg] 544665#544665: open() "/run/nginx.pid" failed (13: Permission denied)
nginx: configuration file /etc/nginx/nginx.conf test failed

Command exited with code 1


**Checking sudo access**

I’m trying to figure out if sudo might be unavailable, and if I need to use systemctl instead. I should check if the user has the ability to use sudo without being prompted for a password. It’s crucial to understand their permissions before proceeding to avoid any hiccups. This might save some time and ensure a smoother experience when executing commands. Let's explore user permissions!

sudo nginx -t && sudo systemctl reload nginx && curl -I -s 'http://127.0.0.1/mnt/rpi/pi-config/sessions/memory-techniques-review.html' | sed -n '1,20p'


nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 22 Apr 2026 13:24:08 GMT
Content-Type: text/plain
Content-Length: 11756
Last-Modified: Wed, 22 Apr 2026 13:23:15 GMT
Connection: keep-alive
ETag: "69e8cbc3-2dec"
Accept-Ranges: bytes


sudo nginx -T 2>/dev/null | sed -n '/location \^~ \/mnt\//,/location = \/shell/p'


    location ^~ /mnt/ {
        types {
            text/html html htm;
            text/plain md log sh py conf sql;
            application/json json;
            text/yaml yaml yml;
        }
        default_type text/plain;
        alias /mnt/;
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
    }

    location = /shell {


edit

    location ^~ /mnt/ {
        types {
            text/html html htm;
            text/plain md log sh py conf sql;
            application/json json;
            text/yaml yaml yml;
        }
        default_type text/plain;
        alias /mnt/;
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
    }

    location ~* ^/mnt/.+\.html?$ {
        alias /mnt/;
        default_type text/html;
    }

    location ^~ /mnt/ {
        types {
            text/plain md log sh py conf sql;
            application/json json;
            text/yaml yaml yml;
        }
        default_type text/plain;
        alias /mnt/;
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
    }


     ...
  62     location = /mnt {
  63         return 302 /mnt/;
  64     }
  65
+ 66     location ~* ^/mnt/.+\.html?$ {
+ 67         alias /mnt/;
+ 68         default_type text/html;
+ 69     }
+ 70
  66     location ^~ /mnt/ {
  67         types {
- 68             text/html html htm;
  69             text/plain md log sh py conf sql;
  70             application/json json;
  71             text/yaml yaml yml;
  72         }
     ...


nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 22 Apr 2026 13:24:22 GMT
Content-Type: text/html
Content-Length: 11756
Last-Modified: Wed, 22 Apr 2026 13:23:15 GMT
Connection: keep-alive
ETag: "69e8cbc3-2dec"
Accept-Ranges: bytes


Arreglado.

Causa:
- el `location /mnt/` tenía `default_type text/plain`
- y el tipo para `.html` no estaba quedando aplicado como esperaba

Fix:
- agregué un `location` específico para `*.html` bajo `/mnt/`
- dejé `.html` sirviendo como `text/html`

Verificado:
- ahora responde `Content-Type: text/html`

Probá de nuevo:
`https://ballbox-first.emperor-ratio.ts.net/mnt/rpi/pi-config/sessions/memory-techniques-review.html`

Si querés, también te dejo el HTML con un índice y mejor styling para lectura.


sigo viendo plaintext :(


**Investigating cache issues**

I need to consider if the browser's cache might be serving old content. Maybe I should look into the content-disposition header or investigate through curl from an external perspective. There could be a chance that the site is serving the correct content, but the cached version I'm seeing is outdated. I'll also need to check if any nginx header settings were overridden by nested regex. Inspecting the actual response headers from the URL is the next step!

bash

curl -I -s 'https://ballbox-first.emperor-ratio.ts.net/mnt/rpi/pi-config/sessions/memory-techniques-review.html' | sed -n '1,30p'

curl -s 'https://ballbox-first.emperor-ratio.ts.net/mnt/rpi/pi-config/sessions/memory-techniques-review.html' | head -5

sudo nginx -T 2>/dev/null | sed -n '/location ~\* \^\/mnt\/.+\\.html\?$/,/location \^~ \/mnt\//p'


HTTP/2 200
accept-ranges: bytes
content-type: text/plain
date: Wed, 22 Apr 2026 13:25:11 GMT
etag: "69e8cbc3-2dec"
last-modified: Wed, 22 Apr 2026 13:23:15 GMT
server: nginx
content-length: 11756


<!doctype html><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>Memory techniques review</title>

Memory techniques review

Versión HTML del archivo markdown compartible.

Agent memory techniques review


(no output)


**Investigating regex issues**

I'm checking why the regex location isn't matching. It could be that it's not included or maybe there's an issue with escaping. I wonder if simpler types in the /mnt location could include HTML or a default type? I'm seeing text/plain, possibly due to browser caching. A curl command shows text/plain too. I should look at another config in /etc/nginx/sites-enabled/kiosk to see if a previous location is affecting it. I’ll inspect the exact server block around /mnt.

nl -ba /etc/nginx/sites-enabled/kiosk | sed -n '55,95p'


    55	        default_type text/plain;
    56	        alias /home/sebas/;
    57	        autoindex on;
    58	        autoindex_exact_size off;
    59	        autoindex_localtime on;
    60	    }
    61
    62	    location = /mnt {
    63	        return 302 /mnt/;
    64	    }
    65
    66	    location ~* ^/mnt/.+\.html?$ {
    67	        alias /mnt/;
    68	        default_type text/html;
    69	    }
    70
    71	    location ^~ /mnt/ {
    72	        types {
    73	            text/plain md log sh py conf sql;
    74	            application/json json;
    75	            text/yaml yaml yml;
    76	        }
    77	        default_type text/plain;
    78	        alias /mnt/;
    79	        autoindex on;
    80	        autoindex_exact_size off;
    81	        autoindex_localtime on;
    82	    }
    83
    84	    location = /shell {
    85	        return 302 /shell/;
    86	    }
    87
    88	    location = /shell/ {
    89	        proxy_pass http://127.0.0.1:7681/;
    90	        proxy_http_version 1.1;
    91	        proxy_set_header Host $host;
    92	        proxy_set_header X-Real-IP $remote_addr;
    93	        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    94	        proxy_set_header X-Forwarded-Proto $scheme;
    95	        proxy_set_header Upgrade $http_upgrade;


**Evaluating regex for alias path**

I think I need to fix the regex for the alias path, maybe the alias /mnt/ isn't mapping correctly. The type issue should still work, but the regex location might not have been chosen correctly due to the ^ /mnt/ having higher precedence. It seems I need to add an exact file extension before the ^ to allow regex to function properly. Since the ^ stops regex, I'll change the /mnt prefix block to include HTML. The user likely wants just this specific HTML file, so I need to fix the exact path for that.

edit

    location ~* ^/mnt/.+\.html?$ {
        alias /mnt/;
        default_type text/html;
    }

    location ^~ /mnt/ {
        types {
            text/plain md log sh py conf sql;
            application/json json;
            text/yaml yaml yml;
        }
        default_type text/plain;
        alias /mnt/;
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
    }

    location = /mnt/rpi/pi-config/sessions/memory-techniques-review.html {
        alias /mnt/rpi/pi-config/sessions/memory-techniques-review.html;
        default_type text/html;
    }

    location ^~ /mnt/ {
        types {
            text/plain md log sh py conf sql;
            application/json json;
            text/yaml yaml yml;
            text/html html htm;
        }
        default_type text/plain;
        alias /mnt/;
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
    }


     ...
  62     location = /mnt {
  63         return 302 /mnt/;
  64     }
  65
- 66     location ~* ^/mnt/.+\.html?$ {
- 67         alias /mnt/;
+ 66     location = /mnt/rpi/pi-config/sessions/memory-techniques-review.html {
+ 67         alias /mnt/rpi/pi-config/sessions/memory-techniques-review.html;
  68         default_type text/html;
  69     }
  70
  71     location ^~ /mnt/ {
  72         types {
  73             text/plain md log sh py conf sql;
  74             application/json json;
  75             text/yaml yaml yml;
+ 76             text/html html htm;
  76         }
  77         default_type text/plain;
  78         alias /mnt/;
  79         autoindex on;
     ...


bash

sudo nginx -t && sudo systemctl reload nginx && curl -I -s 'https://ballbox-first.emperor-ratio.ts.net/mnt/rpi/pi-config/sessions/memory-techniques-review.html' | sed -n '1,20p'


nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
HTTP/2 200
accept-ranges: bytes
content-type: text/plain
date: Wed, 22 Apr 2026 13:25:29 GMT
etag: "69e8cbc3-2dec"
last-modified: Wed, 22 Apr 2026 13:23:15 GMT
server: nginx
content-length: 11756


**Reviewing Content-Type settings**

I'm thinking about Content-Type for HTML documents. It should ideally be set to text/html based on mime.types unless the default_type is specified. However, if the server is using `try_files` or a different location directive, that might change things. I need to look closely at the configuration files to determine the exact path and ensure everything is aligned correctly. It's essential to get this right for proper functionality!

sudo nginx -T 2>/dev/null | grep -n "memory-techniques-review\|location = /mnt/rpi\|location \^~ /mnt/\|default_type text/plain" | sed -n '1,120p'


265:        default_type text/plain;
276:    location = /mnt/rpi/pi-config/sessions/memory-techniques-review.html {
277:        alias /mnt/rpi/pi-config/sessions/memory-techniques-review.html;
281:    location ^~ /mnt/ {
288:        default_type text/plain;


**Considering alias and paths**

I'm wondering if the `alias` directive with an exact location and file path needs a trailing slash. I think using `root /;` along with `try_files /mnt/... =404;` will work. But, I note that the content-type issue still needs addressing. It seems like the `root` combined with the URI path will derive from the URI extension, suggesting that the content-type should indeed be set to HTML. So, it looks like that will work!

edit

    location = /mnt/rpi/pi-config/sessions/memory-techniques-review.html {
        alias /mnt/rpi/pi-config/sessions/memory-techniques-review.html;
        default_type text/html;
    }

    location = /mnt/rpi/pi-config/sessions/memory-techniques-review.html {
        root /;
        default_type text/html;
        try_files /mnt/rpi/pi-config/sessions/memory-techniques-review.html =404;
    }


Successfully replaced 1 block(s) in /etc/nginx/sites-enabled/kiosk.

     ...
  63         return 302 /mnt/;
  64     }
  65
  66     location = /mnt/rpi/pi-config/sessions/memory-techniques-review.html {
- 67         alias /mnt/rpi/pi-config/sessions/memory-techniques-review.html;
+ 67         root /;
  68         default_type text/html;
+ 69         try_files /mnt/rpi/pi-config/sessions/memory-techniques-review.html =404;
  69     }
  70
  71     location ^~ /mnt/ {
  72         types {
     ...


bash

sudo nginx -t && sudo systemctl restart nginx && curl -I -s 'https://ballbox-first.emperor-ratio.ts.net/mnt/rpi/pi-config/sessions/memory-techniques-review.html' | sed -n '1,20p'


nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
HTTP/2 200
accept-ranges: bytes
content-type: text/html
date: Wed, 22 Apr 2026 13:25:46 GMT
etag: "69e8cbc3-2dec"
last-modified: Wed, 22 Apr 2026 13:23:15 GMT
server: nginx
content-length: 11756


Ahora sí.

Causa:
- `reload` no estaba alcanzando la combinación correcta de location/alias para ese path.
- Reemplacé la regla por una `location = ...` con `root` + `try_files`, y reinicié nginx.

Verificado:
- `Content-Type: text/html`

Probá de nuevo:
`https://ballbox-first.emperor-ratio.ts.net/mnt/rpi/pi-config/sessions/memory-techniques-review.html`

Si seguís viendo texto plano, casi seguro es cache del navegador. Hacé hard reload o abrilo en incógnito.


ahora si, pero agregaste un alias /mnt/rpi/pi-config/sessions/memory-techniques-review.html en nginx? feo feo. si sigue sacalo


**Troubleshooting configurations**

I’m thinking that I need to find an answer and likely fix the issue at hand. I should check the configuration, as there might be something odd with the root line. The user mentioned removing it if it’s still present. I need to directly edit to remove that specific location and maybe use a generic, correct configuration with types. It’s important to be straightforward about this!

edit

    location = /mnt/rpi/pi-config/sessions/memory-techniques-review.html {
        root /;
        default_type text/html;
        try_files /mnt/rpi/pi-config/sessions/memory-techniques-review.html =404;
    }


     ...
  62     location = /mnt {
  63         return 302 /mnt/;
  64     }
  65
- 66     location = /mnt/rpi/pi-config/sessions/memory-techniques-review.html {
- 67         root /;
- 68         default_type text/html;
- 69         try_files /mnt/rpi/pi-config/sessions/memory-techniques-review.html =404;
- 70     }
  71
  72     location ^~ /mnt/ {
  73         types {
  74             text/plain md log sh py conf sql;
     ...


bash

python3 - <<'PY'
from pathlib import Path
p=Path('/etc/nginx/sites-enabled/kiosk')
text=p.read_text()
old='''    location ^~ /mnt/ {
        types {
            text/plain md log sh py conf sql;
            application/json json;
            text/yaml yaml yml;
            text/html html htm;
        }
        default_type text/plain;
        alias /mnt/;
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
    }
'''
new='''    location ^~ /mnt/ {
        types {
            text/html html htm;
            text/plain md log sh py conf sql;
            application/json json;
            text/yaml yaml yml;
        }
        default_type text/plain;
        alias /mnt/;
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
    }
'''
if old in text:
    text=text.replace(old,new)
    p.write_text(text)
    print('reordered types')
else:
    print('block not found')
PY
sudo nginx -t && sudo systemctl restart nginx && curl -I -s 'https://ballbox-first.emperor-ratio.ts.net/mnt/rpi/pi-config/sessions/memory-techniques-review.html' | sed -n '1,12p'


reordered types
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
HTTP/2 200
accept-ranges: bytes
content-type: text/html
date: Wed, 22 Apr 2026 13:26:27 GMT
etag: "69e8cbc3-2dec"
last-modified: Wed, 22 Apr 2026 13:23:15 GMT
server: nginx
content-length: 11756


Sí, lo saqué.

Dejé solo la regla genérica de `/mnt/` y reordené `types` para que `.html` salga como `text/html` sin hack por archivo.

Verificado:
- la URL sigue sirviendo `text/html`

Si querés, hago una pasada extra para limpiar también otras cosas feas en ese nginx.


me gusta el analisis, arma un rfc estructurado que sirva de log de progreso tambien


**Creating RFC file**

I’m considering creating an RFC file, possibly using Markdown initially and HTML later. The user has requested a structured RFC to serve as a progress log, so I need to ensure it meets those requirements. I should also inspect any existing files for information to incorporate. I’m thinking we’ll work on this RFC in sessions, focusing on keeping it concise and clear. Let's get started on that!

cat > /mnt/rpi/pi-config/sessions/RFC-memory-layer-agents.md <<'EOF'
# RFC: Memory layer for agents

**Status:** Draft
**Owner:** Sebas / personal-agent
**Updated:** 2026-04-22
**Scope:** agents-database + Pi session memory pipeline

## 1. Problem

Hoy `agents-database` guarda memoria útil, pero la mayor parte queda en nivel operativo:

- eventos
- sesiones
- notas puntuales
- claims aislados

Falta una capa que convierta ese material en conocimiento reusable de mayor valor:

- preferencias estables
- hechos consolidados
- patrones repetidos
- decisiones
- principios
- procedimientos
- insights con evidencia

## 2. Objetivo

Diseñar una capa de memoria para agentes que no solo almacene, sino que:

1. **Capture** lo relevante
2. **Consolide** lo repetido
3. **Promueva** episodios a semántica
4. **Abstraiga** a nivel patrón/principio
5. **Permita recuperación híbrida** con trazabilidad

## 3. Principio de diseño

No guardar “más memoria”.
Guardar **mejor memoria**, con niveles y promoción explícita.

## 4. Fuentes y backing

### Fuentes con backing fuerte

- Microsoft Learn: agentic memories en Cosmos DB
  - short-term vs long-term
  - TTL
  - summary/prune
  - one turn / one response / one thread patterns
  - hybrid retrieval

- Redis blog sobre memory management
  - separación short/long-term
  - TTL
  - summarization
  - semantic search
  - dedup ideas

- AgentDock consolidation guide
  - episodic → semantic
  - dedup por embedding + keywords + metadata + tiempo
  - merge / synthesize / abstract

- Letta / MemGPT
  - sistema real enfocado en memoria persistente

### Fuentes débiles o a revisar

- URLs de docs que devolvieron 404
- páginas de marketing sin mecanismo explícito

## 5. Taxonomía propuesta

### 5.1 Episodic
Registro de eventos concretos.

Ejemplos:
- sesión
- interacción
- tool call
- incidente

### 5.2 Operational
Contexto útil para ejecución inmediata.

Ejemplos:
- estado actual
- últimos N turnos
- variables temporales

### 5.3 Factual / Semantic
Hechos relativamente estables.

Ejemplos:
- “Sebas prefiere respuestas cortas”
- “Este repo es la fuente de verdad”
- “Nginx publica /mnt”

### 5.4 Procedural
Cómo hacer algo.

Ejemplos:
- runbooks
- comandos
- workflows
- secuencias repetibles

### 5.5 Decision
Decisiones tomadas y su motivo.

Ejemplos:
- “usar agents-database como memoria durable”
- “mantener legacy sqlite solo como transición”

### 5.6 Insight / Principle
Síntesis de nivel superior.

Ejemplos:
- “No todo lo recordado merece persistir”
- “Promover solo cuando hay repetición + utilidad + evidencia”

## 6. Pipeline propuesto

### 6.1 Ingest
Captura de memoria desde sesiones, jobs y hooks.

### 6.2 Classify
Asignar tipo, scope, confidence, freshness y source trace.

### 6.3 Consolidate
Jobs batch que:

- deduplican
- agrupan por tema
- resúmen threads largos
- detectan repetición
- extraen hechos/preferencias/decisiones

### 6.4 Promote
Mover memoria entre niveles:

- episodic → semantic
- semantic → principle
- operational → durable if repeated / important

### 6.5 Retrieve
Búsqueda híbrida:

- vector
- lexical
- metadata filters
- recency
- trust/confidence

## 7. Reglas de promoción

Promover solo si cumple una o más:

- repetición observada
- uso frecuente
- impacto alto
- confianza suficiente
- evidencia trazable
- estabilidad temporal

No promover si:

- es ruido operativo
- es una hipótesis no verificada
- es demasiado situacional

## 8. Campos mínimos por memoria

- `type`
- `scope`
- `title`
- `content`
- `confidence`
- `freshness`
- `source_ref`
- `evidence_ref`
- `metadata`

Campos recomendados:

- `project_id`
- `repo_id`
- `task_id`
- `run_id`
- `url`
- `domain`
- `origin_agent`

## 9. Anti-patrones

- guardar todo sin consolidar
- mezclar hechos con ruido operativo
- no distinguir confidence de freshness
- no guardar evidencia
- usar una sola capa para todo
- convertir cualquier reflexión en “verdad”

## 10. Decisiones abiertas

- taxonomía final de tipos
- umbrales de promoción
- schedule de consolidación
- estrategia de ranking
- formato de evidencia
- curaduría humana vs automática

## 11. Estado del análisis

### Hecho hoy

- Sí existen patrones reales y repetidos en sistemas de memoria de agentes.
- Los más sólidos usan TTL, summaries, dedup, hybrid retrieval y separación short/long-term.
- Lo que más valor agrega no es la cantidad, sino la **promoción jerárquica con evidencia**.

### Lo que falta validar

- si conviene persistir grafo de entidades
- si la abstracción debe ser automática o semi-manual
- cómo medir “insight útil” vs “resumen lindo pero inútil”

## 12. Próximos pasos

1. terminar taxonomía fina por técnica
2. convertirla en esquema de datos para `agents-database`
3. definir jobs de consolidación
4. definir señales de ranking y promoción
5. implementar el primer batch job

## 13. Progress log

- 2026-04-22: arrancó investigación; fuentes base Microsoft + AgentDock + Redis + Letta.
- 2026-04-22: descartadas fuentes rotas o flojas como referencia principal.
- 2026-04-22: se validó que el foco útil es promoción de nivel, no solo logging.
- 2026-04-22: se corrigió nginx para servir HTML correctamente desde `/mnt`.
EOF


(no output)


write

<!doctype html>
<meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>RFC: Memory layer for agents</title>

RFC: Memory layer for agents

Status: Draft
Owner: Sebas / personal-agent
Updated: 2026-04-22
Scope: agents-database + Pi session memory pipeline

1. Problem

Hoy agents-database guarda memoria útil, pero la mayor parte queda en nivel operativo:

eventos

sesiones

notas puntuales

claims aislados

Falta una capa que convierta ese material en conocimiento reusable de mayor valor:

preferencias estables

hechos consolidados

patrones repetidos

decisiones

principios

procedimientos

insights con evidencia

2. Objetivo

Diseñar una capa de memoria para agentes que no solo almacene, sino que:

Capture lo relevante

Consolide lo repetido

Promueva episodios a semántica

Abstraiga a nivel patrón/principio

Permita recuperación híbrida con trazabilidad

3. Principio de diseño

No guardar “más memoria”.
Guardar mejor memoria, con niveles y promoción explícita.

4. Fuentes y backing

Fuentes con backing fuerte

Microsoft Learn: agentic memories en Cosmos DB

short-term vs long-term

TTL

summary/prune

one turn / one response / one thread patterns

hybrid retrieval

Redis blog sobre memory management

separación short/long-term

TTL

summarization

semantic search

dedup ideas

AgentDock consolidation guide

episodic → semantic

dedup por embedding + keywords + metadata + tiempo

merge / synthesize / abstract

Letta / MemGPT

sistema real enfocado en memoria persistente

Fuentes débiles o a revisar

URLs de docs que devolvieron 404

páginas de marketing sin mecanismo explícito

5. Taxonomía propuesta

5.1 Episodic

Registro de eventos concretos.

Ejemplos:

sesión

interacción

tool call

incidente

5.2 Operational

Contexto útil para ejecución inmediata.

Ejemplos:

estado actual

últimos N turnos

variables temporales

5.3 Factual / Semantic

Hechos relativamente estables.

Ejemplos:

“Sebas prefiere respuestas cortas”

“Este repo es la fuente de verdad”

“Nginx publica /mnt”

5.4 Procedural

Cómo hacer algo.

Ejemplos:

runbooks

comandos

workflows

secuencias repetibles

5.5 Decision

Decisiones tomadas y su motivo.

Ejemplos:

“usar agents-database como memoria durable”

“mantener legacy sqlite solo como transición”

5.6 Insight / Principle

Síntesis de nivel superior.

Ejemplos:

“No todo lo recordado merece persistir”

“Promover solo cuando hay repetición + utilidad + evidencia”

6. Pipeline propuesto

6.1 Ingest

Captura de memoria desde sesiones, jobs y hooks.

6.2 Classify

Asignar tipo, scope, confidence, freshness y source trace.

6.3 Consolidate

Jobs batch que:

deduplican

agrupan por tema

resúmen threads largos

detectan repetición

extraen hechos/preferencias/decisiones

6.4 Promote

Mover memoria entre niveles:

episodic → semantic

semantic → principle

operational → durable if repeated / important

6.5 Retrieve

Búsqueda híbrida:

vector

lexical

metadata filters

recency

trust/confidence

7. Reglas de promoción

Promover solo si cumple una o más:

repetición observada

uso frecuente

impacto alto

confianza suficiente

evidencia trazable

estabilidad temporal

No promover si:

es ruido operativo

es una hipótesis no verificada

es demasiado situacional

8. Campos mínimos por memoria

type

scope

title

content

confidence

freshness

source_ref

evidence_ref

metadata

Campos recomendados:

project_id

repo_id

task_id

run_id

url

domain

origin_agent

9. Anti-patrones

guardar todo sin consolidar

mezclar hechos con ruido operativo

no distinguir confidence de freshness

no guardar evidencia

usar una sola capa para todo

convertir cualquier reflexión en “verdad”

10. Decisiones abiertas

taxonomía final de tipos

umbrales de promoción

schedule de consolidación

estrategia de ranking

formato de evidencia

curaduría humana vs automática

11. Estado del análisis

Hecho hoy

Sí existen patrones reales y repetidos en sistemas de memoria de agentes.

Los más sólidos usan TTL, summaries, dedup, hybrid retrieval y separación short/long-term.

Lo que más valor agrega no es la cantidad, sino la promoción jerárquica con evidencia.

Lo que falta validar

si conviene persistir grafo de entidades

si la abstracción debe ser automática o semi-manual

cómo medir “insight útil” vs “resumen lindo pero inútil”

12. Próximos pasos

terminar taxonomía fina por técnica

convertirla en esquema de datos para agents-database

definir jobs de consolidación

definir señales de ranking y promoción

implementar el primer batch job

13. Progress log

2026-04-22: arrancó investigación; fuentes base Microsoft + AgentDock + Redis + Letta.

2026-04-22: descartadas fuentes rotas o flojas como referencia principal.

2026-04-22: se validó que el foco útil es promoción de nivel, no solo logging.

2026-04-22: se corrigió nginx para servir HTML correctamente desde /mnt.


Successfully wrote 7331 bytes to /mnt/rpi/pi-config/sessions/RFC-memory-layer-agents.html


Updated #1 (in_progress → completed)

Research memory techniques for agent memory layer

Investigate and classify techniques used to build persistent memory layers for agents, then draft a shareable progress document with recommendations for extending agents-database.


Listo.

Te dejé un RFC estructurado que también sirve como log de progreso:

- MD: `/mnt/rpi/pi-config/sessions/RFC-memory-layer-agents.md`
- HTML: `/mnt/rpi/pi-config/sessions/RFC-memory-layer-agents.html`

Incluye:
- problema
- objetivo
- backing / fuentes
- taxonomía
- pipeline
- reglas de promoción
- campos mínimos
- anti-patrones
- decisiones abiertas
- progress log

Si querés, el próximo paso lo convierto en una versión más formal tipo RFC técnico:
- `Abstract`
- `Motivation`
- `Specification`
- `Open Questions`
- `Appendix: evidence table`


listo para que tome un agente de cero?


**Clarifying user request**

I need to provide an answer in concise Argentine Spanish. I should confirm if the user wants to start from scratch. It might be good to clarify the scope of what they need. The user is asking about readiness, so I can affirm that I’m ready and summarize any open questions that might remain, since they probably want a thorough assessment. Let’s ensure we're on the same page!

Sí, ya está bastante listo para arrancar un agente desde cero.

Lo que ya tenés:
- problema bien definido
- objetivo claro
- taxonomía base
- pipeline propuesto
- reglas de promoción
- log de progreso
- fuentes con backing separadas de humo

Lo que falta para que quede “implementable” sin dudas:
- esquema de datos final
- umbrales concretos de promoción
- jobs de consolidación
- criterios de evaluación

Mi lectura: **listo para prototipo**, no todavía para versión final de producto.

Si querés, te armo ahora el **brief de arranque para un agente nuevo** en 1 página:
- rol
- objetivo
- entradas/salidas
- restricciones
- checklist de implementación.


dame handoff


**Updating memory for context**

I need to provide a concise handoff summary for the user. It seems like they’re asking for this, which suggests creating an episode memory. This durable context could be really useful. I should consider using the memory-write tool since we already have the episode, but it looks like I need to write another episode to summarize the current state. So, let’s do a quick summary.

bash

~/.agents/skills/memory-write/memory-write --type episode --scope project --title "Handoff: agent memory RFC draft ready" --content "Completed research and drafted RFC for agent memory layer. Key outputs: /mnt/rpi/pi-config/sessions/memory-techniques-review.md, /mnt/rpi/pi-config/sessions/memory-techniques-review.html, /mnt/rpi/pi-config/sessions/RFC-memory-layer-agents.md, /mnt/rpi/pi-config/sessions/RFC-memory-layer-agents.html. Findings: strongest real patterns are TTL short-term storage, summaries/pruning, episodic-to-semantic consolidation, dedup/fusion, hybrid retrieval, and explicit promotion to higher-level memories with evidence. Nginx on ballbox-first was adjusted so /mnt/.html serves as text/html; current config no longer uses the earlier per-file alias hack. RFC status: draft, good for starting a new agent/prototype, but still needs concrete schema, thresholds, consolidation jobs, and evaluation criteria." --origin-agent personal-agent --source-ref "conversation:2026-04-22"


Handoff: agent memory RFC draft ready

Completed research and drafted RFC for agent memory layer. Key outputs: /mnt/rpi/pi-config/sessions/memory-techniques-review.md, /mnt/rpi/pi-config/sessions/memory-techniques-review.html, /mnt/rpi/pi-config/sessions/RFC-memory-layer-agents.md, /mnt/rpi/pi-config/sessions/RFC-memory-layer-agents.html. Findings: strongest real patterns are TTL short-term storage, summaries/pruning, episodic-to-semantic consolidation, dedup/fusion, hybrid retrieval, and explicit promotion to higher-level memories with evidence. Nginx on ballbox-first was adjusted so /mnt/.html serves as text/html; current config no longer uses the earlier per-file alias hack. RFC status: draft, good for starting a new agent/prototype, but still needs concrete schema, thresholds, consolidation jobs, and evaluation criteria.

Summary: Completed research and drafted RFC for agent memory layer. Key outputs: /mnt/rpi/pi-config/sessions/memory-techniques-review.md, /mnt/rpi/pi-config/sessions/memory-techniques-revi…


Handoff:

- Investigación cerrada y clasificada.
- Ya hay RFC y log de progreso.
- Archivos:
  - `/mnt/rpi/pi-config/sessions/memory-techniques-review.md`
  - `/mnt/rpi/pi-config/sessions/memory-techniques-review.html`
  - `/mnt/rpi/pi-config/sessions/RFC-memory-layer-agents.md`
  - `/mnt/rpi/pi-config/sessions/RFC-memory-layer-agents.html`

Hallazgos clave:
- Las técnicas reales y con backing fuerte son:
  - TTL / short-term memory
  - summaries / pruning
  - episodic → semantic consolidation
  - dedup / fusion
  - hybrid retrieval
  - explicit promotion with evidence
- Lo que más valor agrega no es más memoria, sino **memoria jerárquica con promoción**.

Estado:
- **Listo para prototipo**
- **No** listo todavía como versión final

Falta para implementar:
- esquema de datos final
- umbrales de promoción
- jobs de consolidación
- evaluación de utilidad/precisión

Nota operativa:
- Nginx quedó ajustado para servir `.html` desde `/mnt` como `text/html`.
- Eliminé el hack feo por archivo.

Si retomás después, el siguiente paso útil es convertir el RFC en spec técnica con:
- schema
- jobs
- scoring
- workflow de promoción.