Lo que serás capaz de hacer
- Distinguir la pérdida por compactación de la pérdida entre sesiones y elegir la solución para cada una.
- Escribir una regla de consulta y una regla de guardado en el archivo de instrucciones que carga el agente.
- Añadir un hook de Stop que bloquee el final de una sesión que editó archivos y no guardó nada.
- Probar el hook con una transcripción sintética antes de fiarte de él.
- Compartir un mismo almacén de memoria entre Claude Code, OpenCode y Kimi Code.
Ideas clave
- Claude Code olvida el contexto entre sesiones porque cada sesión empieza con una ventana de contexto vacía; la memoria entre sesiones hace que el agente consulte las decisiones pasadas antes de trabajar y guarde las nuevas después.
- Olvidar dentro de una sesión (compactación) y olvidar entre sesiones son problemas distintos, y una rutina de memoria solo resuelve el segundo.
- Los archivos de memoria integrados son contexto, no una obligación: usamos un hook de Stop que devuelve al agente al trabajo cuando editó archivos y no guardó nada.
- El hook cuenta las llamadas por su nombre, así que demuestra que hubo un guardado, nunca que fuera bueno.
- OpenCode y Kimi Code leen las mismas reglas y llegan al mismo almacén; no ejecutamos ningún hook de memoria en ninguno de los dos.
Claude Code olvida el contexto entre sesiones porque cada sesión empieza con una ventana de contexto vacía. Dentro de una sesión, cuando la ventana se llena, se compacta: los turnos antiguos se convierten en un resumen. Entre una sesión y la siguiente no se conserva nada, salvo lo que quedó por escrito.
La memoria entre sesiones es una rutina que hace que un agente de programación con IA consulte las decisiones pasadas antes de trabajar y guarde las nuevas después, para que una ventana de contexto nueva empiece informada. La ejecutamos como un bucle en Claude Code, impuesto por un hook de Stop (un script que Claude Code ejecuta cada vez que termina de responder). OpenCode y Kimi Code comparten las mismas reglas y el mismo almacén.

Por qué Claude Code olvida y qué hace nuestro bucle de memoria
Claude Code no olvida por accidente. Cada sesión empieza vacía por diseño, así que la solución es una rutina, no un archivo más grande.
La documentación de Anthropic(se abre en una pestaña nueva), 2026: «Cada sesión de Claude Code empieza con una ventana de contexto nueva». Dos funciones integradas dan a Claude Code memoria entre sesiones:
| Función integrada | Qué conserva | Fuente (2026) |
|---|---|---|
| CLAUDE.md | Instrucciones que escribes tú y que se cargan al inicio de cada conversación. El archivo de la raíz del proyecto se vuelve a leer del disco después de /compact | Anthropic, memoria(se abre en una pestaña nueva) |
| Memoria automática | Notas que Claude escribe por su cuenta, guardadas por repositorio. Las primeras 200 líneas o 25 KB de MEMORY.md se cargan al iniciar la sesión | Anthropic, memoria(se abre en una pestaña nueva) |
| Ambas | «Claude las trata como contexto, no como configuración obligatoria». | Anthropic, memoria(se abre en una pestaña nueva) |
El contexto es algo que el agente sopesa, no un paso que esté obligado a dar. Por eso añadimos un bucle por encima, con un almacén compartido al que el agente llega por MCP:
| Parte | Qué ocurre |
|---|---|
| Disparador | Una sesión empieza a trabajar en algo que todavía no conoce |
| Consultar, trabajar, guardar | Consulta memorias y rutas, hace la tarea y guarda lo aprendido |
| Comprobación | Un hook de Stop, en casi cada parada, devuelve al agente al trabajo si editó archivos y no guardó nada |
| Resultados | Memorias, rutas y notas de tarea que encuentra la siguiente sesión |
El almacén es nuestro cerebro de empresa; cómo se clasifican las notas es la capa 1 de nuestro sistema que se mejora a sí mismo.
La versión lista para copiar (el hook, la entrada de configuración y la prueba) está en Crea tu propio bucle.
Por qué lo construimos: el agente se saltaba la regla escrita
Escribimos la regla y el agente se la saltó. Una regla que depende de que el agente se acuerde de cumplirla es una sugerencia.
La regla estaba en el archivo de instrucciones: consulta antes de explorar, guarda después. Las sesiones se saltaban la consulta y volvían a leer código que una sesión anterior ya había mapeado. Las sesiones editaban archivos y terminaban sin dejar nada escrito, así que la siguiente redescubría la misma respuesta.
La memoria existía y las herramientas funcionaban. Lo que faltaba era un momento en el que saltarse la regla tuviera un coste. Una persona aprueba el trabajo que importa (nuestro modelo de gobernanza), pero nadie vigila el final de cada sesión.
Descubre cómo ConvOps da a cada agente una sola memoria que consulta antes de trabajar(se abre en una pestaña nueva) y conserva las notas que deja cada sesión.
Cómo funciona el bucle de memoria
Consultar cuesta una llamada. Guardar cuesta una llamada. Lo único caro es conseguir que las dos cosas ocurran siempre, así que ese es el trabajo que le dimos al hook.

Cómo decide un hook de Stop. Lee la transcripción (el archivo donde Claude Code registra cada mensaje y cada llamada a herramienta) y termina con un código de salida, un número que le dice a Claude Code qué hacer a continuación. La salida 0 deja que la sesión termine. La salida 2 «impide que Claude se detenga y continúa la conversación» (Anthropic, hooks(se abre en una pestaña nueva), 2026), y el agente lee el mensaje del hook. Nuestro guardián de borrados usa el mismo código de salida en las llamadas a herramientas.
| Paso | Quién lo ejecuta | Control |
|---|---|---|
| Consultar | El agente, con context_query, antes de explorar cualquier cosa que no conozca ya. Una llamada devuelve memorias (lo que sabemos) y rutas (dónde está cada cosa) | Las respuestas ya conocidas se la saltan |
| Trabajar | El agente | Ninguno |
| Guardar | El agente, con memory_store, después de cada acción. Para sustituir una nota, guarda la nueva y luego olvida la antigua. En una acción sobre una tarea, una nota context= guarda de 2 a 3 líneas en la misma llamada | Saltárselo exige un motivo |
| Ruta | El agente, después de explorar archivos | Ninguno |
| Comprobación | El hook de Stop | La salida 2 devuelve al agente al trabajo |
Qué comprueba el hook de Stop que vigila la memoria
Cada umbral de esta sección es el que ejecuta nuestro hook.
| Regla | Valor exacto | Por qué existe |
|---|---|---|
| Cuándo se ejecuta | En cada evento Stop, con un tiempo límite de 15 segundos (600 por defecto, Anthropic, hooks(se abre en una pestaña nueva), 2026) | Es el último momento en que se puede retener una sesión |
| Qué lee | El name de cada llamada a herramienta de la transcripción | Lo que el agente hizo, no lo que dijo |
| Protección contra bucles | stop_hook_active es true: salida 0 | Un hook que bloquea su propio reintento no deja terminar nunca una sesión |
| Las sesiones pequeñas pasan | Menos de 3 llamadas a herramientas: salida 0 | Una respuesta de dos llamadas no tiene nada que merezca guardarse |
| Intervalo | Al menos 2 entradas del asistente en la transcripción desde la última comprobación. Claude Code escribe una entrada por bloque de contenido, así que la comprobación se ejecuta en casi cada parada | Cada comprobación revisa solo lo nuevo |
| Editó y no guardó nada | Una llamada a Edit, Write, MultiEdit o NotebookEdit y cero llamadas a memory_store, sin esperar a la regla de solo lectura de más abajo | Un cambio en un archivo merece un porqué por escrito |
| Sin consulta en la primera comprobación | Ninguna llamada a context_query ni a route_query | La regla es consultar primero; las comprobaciones posteriores no la repiten |
| Orden de la consulta | Cero consultas y cero guardados, guardados sin ninguna consulta, o un guardado desde la última comprobación que llegó antes de la primera consulta | Sin una consulta previa, el agente no ve la nota que tiene que sustituir, así que escribe un duplicado |
| Regla de solo lectura | Consultó, no guardó nada, no editó nada y lleva al menos 4 entradas en la transcripción | Explorar archivos es trabajo que merece guardarse |
| Qué cuenta | Consulta: nombres que contienen memory_recall o context_query. Guardado: nombres que contienen memory_store | Comparar por nombre mantiene el hook independiente del almacén |
Cada regla incumplida añade un mensaje, el bloqueo termina con «This is mandatory.» («Es obligatorio.») y el hook sale con 2.
Lo que el hook no ve
Confiamos más en el hook porque sabemos exactamente dónde está ciego.
- Cuenta las llamadas a herramientas por su nombre. Nunca lee qué devolvió una consulta ni si lo guardado valía algo.
- Solo
memory_storecuenta como guardado. Una sesión que solo escribe notascontext=y edita archivos también vuelve al trabajo. - No ve las ediciones hechas desde la shell. Un
sedo un heredoc no son una edición para el hook; solo lo son las cuatro herramientas de edición nativas. - La transcripción puede ir con retraso. La documentación de hooks(se abre en una pestaña nueva) de Anthropic dice que se escribe de forma asíncrona, así que un guardado de último momento se cuenta en la siguiente comprobación.
- Solo funciona en Claude Code; consulta las secciones de OpenCode y Kimi Code.
Los hooks contienen las reglas que nunca deben depender de la memoria (la capa de hooks). Este obliga a hacer las llamadas, no a recordar.
Cómo recuerda Claude Code entre sesiones
El momento útil no es el guardado. Es la mañana siguiente, cuando una sesión que nunca vio el trabajo del lunes arranca con la lección del lunes.
Copperfern es una tienda online ficticia de artículos para el hogar; sus nombres, archivos y notas son inventados, y los umbrales y los mensajes son reales.
Lunes. Maya, que dirige las operaciones, abre una tarea: «Los pedidos de España salen con un céntimo de diferencia al pagar». El agente de programación ejecuta context_query("spanish vat checkout rounding") y no encuentra nada sobre el redondeo. Lee shop/checkout/tax.py, ve que el IVA se redondea una sola vez sobre el total del pedido, edita el archivo y su prueba para redondear por línea e intenta detenerse.
El hook se ejecuta: 5 llamadas a herramientas y suficientes entradas nuevas desde la última comprobación. Hubo una consulta, así que solo se activa la comprobación de ediciones:
KNOWLEDGE CHECK: Modified 2 file(s) but stored nothing. memory_store() the change/decision (supersede if updating). If you explored files, create_route()/update_route() in ConvOps. This is mandatory.
El mensaje viene a decir: has modificado 2 archivos y no has guardado nada; guarda el cambio o la decisión con memory_store() (si actualizas una nota, sustituye la anterior) y, si has explorado archivos, crea o actualiza una ruta en ConvOps. Es obligatorio.
Salida 2. El agente guarda una nota de tipo gotchas, con importancia 7 y las etiquetas shop, checkout, vat. La nota dice: «El IVA español se redondea por línea, no sobre el total del pedido; redondear el total desvía un céntimo en los pedidos con varios artículos». Registra una ruta: «El redondeo del IVA está en shop/checkout/tax.py». Vuelve a detenerse. stop_hook_active es true y la sesión termina.

Martes. Una tarea nueva: «Añadir el IVA a la línea del envoltorio de regalo». Sesión nueva, ventana vacía: no hay nada del lunes en ella. El agente ejecuta context_query("vat gift wrap checkout") y recibe la nota del lunes y la ruta. Abre directamente shop/checkout/tax.py y redondea el IVA del envoltorio de regalo en su propia línea.
Resulta que el envío también es una línea aparte. El agente guarda la nota refinada, «El IVA español se redondea por línea; el envoltorio de regalo y el envío cuentan cada uno como una línea propia», y después olvida el registro del lunes con memory_forget, un borrado lógico reversible. En la parada, la consulta llegó antes que el guardado y la edición tiene su guardado: salida 0. Solo la nota refinada responde a la siguiente consulta.

Lo que deja el bucle
Una memoria vale exactamente lo que la siguiente sesión puede usar sin preguntar: un hecho, su motivo, un tipo y una importancia honesta.
Un registro de memoria, tal como lo guarda el agente:
content: Spanish VAT rounds per line, not per order total; rounding the
total is off by a cent on multi-item orders.
category: gotchas
importance: 7
tags: shop, checkout, vat
task_id: cf-131
El contenido recoge el hecho y su motivo. La importancia mide cuánto pierde la siguiente sesión si no ve la nota: la mayoría están entre 4 y 6, y esta es un 7 porque un total erróneo llega a los clientes. Entre dos y cinco etiquetas hacen que se pueda encontrar.
Una ruta indica dónde está algo:
title: VAT rounding
description: VAT rounding lives in shop/checkout/tax.py
paths: shop/checkout/tax.py, tests/test_tax.py
Una nota context= se escribe en la misma llamada que la actualización de una tarea y se guarda como una memoria vinculada a la tarea (importancia 4 por defecto; con menos de 40 caracteres no se guarda):
Rounded VAT per line, not per order; Spanish totals were a cent off on
multi-item orders.
Ningún campo sustituye un registro. El agente guarda la nota nueva y olvida la antigua. Una persona también puede sustituir una nota en la página del cerebro, que vincula el registro nuevo con el antiguo y saca el antiguo de las consultas.
Qué falla en un hook de memoria
Nuestro control falló dos veces, en direcciones opuestas: una vez dejó pasar ediciones en silencio y otra bloqueaba para siempre. Revisa las dos cosas en tu propio hook.
Dejaba pasar ediciones. La única comprobación de «no guardó nada» esperaba a que la sesión superara una longitud mínima. Una sesión corta de Copperfern edita la plantilla de la etiqueta de envío y termina limpiamente sin dejar nada escrito; la siguiente sesión repite la misma investigación. La regla que salió de ahí: las ediciones sin guardado se señalan en la siguiente comprobación, sin esa espera. El mínimo de 3 llamadas y el intervalo siguen aplicándose.
Bloqueaba para siempre. La comprobación de guardado antes de consulta comparaba el primer guardado con la primera consulta de toda la sesión. Una sesión guarda una nota antes de su primera consulta, después consulta correctamente y, aun así, vuelve al trabajo en cada parada hasta que se abandona. La regla que salió de ahí: cada comprobación mira solo lo ocurrido desde la anterior, así que un desliz temprano se señala en la comprobación que lo cubre, no en cada parada posterior.
El comentario de nuestro código explica por qué: «una marca que ningún comportamiento posterior puede satisfacer es un fastidio, no una protección». Esa regla tiene ahora una prueba que ejecuta el hook real con una transcripción sintética, un registro de sesión falso.

Acotamos la regla de consulta. Antes se aplicaba a cada mensaje. Ahora se aplica antes de explorar o de trabajar en algo que no se conoce ya; guardar después de cada acción sigue siendo obligatorio. Una sesión a la que se le pregunta «¿qué hora es en Madrid?» no hace ninguna consulta; una sesión a punto de leer el código del pago siempre la hace.
Crea tu propio bucle de memoria en Claude Code
Empieza por una regla que el hook pueda contar: si una sesión cambió archivos, deja escrito qué cambió y por qué antes de terminar.
Primero, conecta el almacén. Nosotros usamos ConvOps; un solo comando lo añade a Claude Code:
claude mcp add --transport http convops https://mcp.convops.app/
Después añade estas dos líneas a tu CLAUDE.md. Mantén ese archivo corto (qué recortar de un CLAUDE.md demasiado largo): el hook se encarga de imponer la regla y el archivo, del hábito.
Before exploring or working on anything you don't already know, query the memory store first. Known answers and chat skip the lookup.
After every action, store what you learned and why, with a type, an honest importance and two to five tags. To replace a note, store the new one, then forget the old one.
Esta versión reducida de nuestro hook (Claude Code 2.1.301) conserva la protección contra bucles, el mínimo de 3 llamadas, el intervalo, la comprobación de ediciones y la consulta en la primera comprobación. Guárdala como ~/.claude/hooks/memory-gate.py:
"""Stop hook: send the agent back when it edited files and stored nothing."""
import json, os, sys, tempfile
MIN_TOOL_CALLS = 3
INTERVAL = 2
EDIT_TOOLS = ("Edit", "Write", "MultiEdit", "NotebookEdit")
hook = json.load(sys.stdin)
if hook.get("stop_hook_active"):
sys.exit(0) # the retry after a block is not checked
names, entries = [], 0
with open(hook["transcript_path"]) as f:
for line in f:
entry = json.loads(line)
if entry.get("type") != "assistant":
continue
entries += 1
for block in entry.get("message", {}).get("content", []):
if isinstance(block, dict) and block.get("type") == "tool_use":
names.append(block["name"])
if len(names) < MIN_TOOL_CALLS:
sys.exit(0)
counter = os.path.join(tempfile.gettempdir(), f"memory_gate_{hook['session_id']}")
last = int(open(counter).read()) if os.path.exists(counter) else 0
if entries - last < INTERVAL:
sys.exit(0)
open(counter, "w").write(str(entries))
edits = sum(n in EDIT_TOOLS for n in names)
stores = sum("memory_store" in n for n in names)
lookups = sum("context_query" in n or "route_query" in n for n in names)
problems = []
if edits and not stores:
problems.append(f"Modified {edits} file(s) but stored nothing. Store the change and why.")
if last == 0 and not lookups:
problems.append("No lookup at the first check. Query the memory store first.")
if problems:
print("KNOWLEDGE CHECK: " + " | ".join(problems) + " This is mandatory.", file=sys.stderr)
sys.exit(2)
Regístralo en Stop dentro de .claude/settings.json:
{
"hooks": {
"Stop": [
{
"hooks": [
{ "type": "command", "command": "python3 ~/.claude/hooks/memory-gate.py", "timeout": 15 }
]
}
]
}
}
Pruébalo con una transcripción sintética antes de fiarte de él. Esta tiene una consulta y dos ediciones, así que el resultado esperado es la salida 2:
printf '%s\n' \
'{"type":"assistant","message":{"content":[{"type":"tool_use","name":"context_query"}]}}' \
'{"type":"assistant","message":{"content":[{"type":"tool_use","name":"Edit"}]}}' \
'{"type":"assistant","message":{"content":[{"type":"tool_use","name":"Edit"}]}}' \
> copperfern-test.jsonl
echo '{"session_id":"test-001","transcript_path":"copperfern-test.jsonl"}' \
| python3 ~/.claude/hooks/memory-gate.py; echo "exit $?"
Usa un session_id nuevo en cada ejecución, porque el archivo contador recuerda la última comprobación. Después añade una línea con memory_store y el resultado esperado pasa a ser la salida 0.
Memoria entre sesiones en OpenCode
Las sesiones de OpenCode 1.18.31 también empiezan vacías. Les damos el mismo texto y el mismo almacén.
Nuestros archivos AGENTS.md son enlaces simbólicos a CLAUDE.md, así que OpenCode lee las mismas reglas de consulta y guardado (un solo archivo para los dos). Nuestro opencode.json apunta su bloque mcp al mismo almacén de ConvOps, así que una nota guardada desde Claude Code aparece en una consulta de OpenCode. No ejecutamos ningún hook de memoria en OpenCode. Admite plugins con los que montar uno (plugins(se abre en una pestaña nueva)); nuestro guardián de borrados muestra cómo se estructura.
Memoria entre sesiones en Kimi Code
Kimi Code 0.31.1 recibe el mismo texto y el mismo almacén. Lee el AGENTS.md enlazado y nuestro .kimi-code/mcp.json incluye el mismo servidor de ConvOps, así que sus consultas devuelven lo que guardaron Claude Code y OpenCode. No ejecutamos ningún hook de memoria en Kimi Code. Admite entradas [[hooks]] en su configuración de usuario (hooks de Kimi Code(se abre en una pestaña nueva)), y la guía del guardián de borrados muestra una.
Crea una cuenta gratuita de ConvOps y conecta Claude Code, OpenCode o Kimi Code a una sola memoria(se abre en una pestaña nueva) y después añade la regla de consulta, la regla de guardado y el hook de Stop.
Pasos
Conecta un almacén de memoria por MCP
Elige un almacén al que tu agente llegue como servidor MCP, para que cada sesión y cada herramienta lean y escriban las mismas notas. Nosotros usamos ConvOps: crea una cuenta gratuita en my.convops.app/register y añádela a Claude Code como servidor MCP.
Escribe la regla de consulta
Añade una línea a CLAUDE.md: antes de explorar o trabajar en algo que no se conozca ya, consulta primero el almacén de memoria. Las respuestas ya conocidas y la conversación informal se saltan la consulta.
Escribe la regla de guardado
Añade una línea a CLAUDE.md: después de cada acción, guarda lo aprendido y el porqué, con un tipo, una importancia honesta y entre dos y cinco etiquetas. Para sustituir una nota, guarda la nueva y luego olvida la antigua.
Añade el hook de Stop
Guarda el script del hook como ~/.claude/hooks/memory-gate.py. Se salta el reintento después de un bloqueo y las sesiones de menos de 3 llamadas a herramientas, comprueba como máximo una vez cada 2 entradas del asistente en la transcripción y sale con 2 cuando la sesión editó archivos y no guardó nada.
Regístralo en Stop
Añade el hook a la lista Stop de .claude/settings.json con un tiempo límite de 15 segundos, para que se ejecute cada vez que Claude Code termina de responder.
Pruébalo con una transcripción sintética
Escribe una transcripción JSONL corta con una consulta y dos ediciones, pasa una carga útil al script por una tubería y espera la salida 2. Añade una línea con memory_store, usa un session_id nuevo y espera la salida 0.
Preguntas frecuentes
¿Qué es la memoria entre sesiones para un agente de programación con IA?
La memoria entre sesiones es una rutina que hace que un agente de programación con IA consulte las decisiones pasadas antes de trabajar y guarde las nuevas después, para que una ventana de contexto nueva empiece informada. ConvOps aloja el almacén compartido: el agente lo consulta por MCP antes de explorar y le escribe memorias, rutas y notas de tarea después de cada acción. En Neomanex, un hook de Stop en Claude Code devuelve al agente al trabajo cuando ha editado archivos y no ha guardado nada.
¿Quién necesita memoria entre sesiones?
La necesitan los desarrolladores y los responsables de desarrollo cuyas sesiones de Claude Code, OpenCode o Kimi Code repiten trabajo o reabren decisiones que una sesión anterior ya había cerrado. ConvOps guarda esas decisiones en un único almacén que cada sesión y cada herramienta pueden consultar. Así, la siguiente sesión empieza con lo que aprendió la anterior, en lugar de releer el mismo código para redescubrirlo.
¿Claude Code guarda el contexto entre sesiones?
Claude Code solo conserva lo que está escrito, así que en Neomanex guardamos las lecciones de cada sesión en ConvOps. Cada sesión de Claude Code empieza con una ventana de contexto vacía. CLAUDE.md y la memoria automática se cargan al inicio, y la documentación de Anthropic dice que Claude los trata como contexto, no como configuración obligatoria. Todo lo demás que aprende el agente se pierde, salvo que se guarde donde la siguiente sesión lo consulta.
¿Cómo hago que Claude Code recuerde entre sesiones?
Crea una cuenta gratuita de ConvOps en my.convops.app/register y conéctala a Claude Code como servidor MCP. Añade dos líneas a CLAUDE.md: consultar el almacén antes de explorar cualquier cosa que no se conozca ya, y guardar lo aprendido después de cada acción. Después añade un hook de Stop que bloquee el final de una sesión que editó archivos y no guardó nada, y pruébalo con una transcripción sintética.
¿OpenCode recuerda entre sesiones?
Las sesiones de OpenCode empiezan sin estado, así que en Neomanex conectamos OpenCode a ConvOps por MCP, el mismo almacén que usa Claude Code. Nuestros archivos AGENTS.md son enlaces simbólicos a CLAUDE.md, así que OpenCode lee las mismas reglas de consulta y guardado. La limitación: no ejecutamos ningún hook de memoria en OpenCode, así que guardar depende de que el agente siga el texto. OpenCode admite plugins con los que montar ese hook; nosotros no tenemos ninguno ahí.
¿Puede un hook obligar a Claude Code a guardar lo que aprendió?
Un hook obliga a hacer la llamada, pero no garantiza su calidad. En nuestra configuración, un hook de Stop de Claude Code cuenta las llamadas a memory_store por su nombre y bloquea la parada con la salida 2 cuando una sesión editó archivos y no guardó nada, y ConvOps recibe el guardado. El hook nunca lee lo guardado, así que una nota floja pasa. Solo cuenta memory_store, y no ve las ediciones hechas desde la shell.
¿Claude Code comparte contexto entre chats?
Las sesiones separadas de Claude Code no comparten ventana de contexto, pero pueden compartir un almacén, y el nuestro es ConvOps. Lo que una sesión guarda en ConvOps, otra lo encuentra en su primera consulta, aunque sea en OpenCode o Kimi Code. CLAUDE.md y la memoria automática también se cargan en cada sesión del mismo repositorio, como contexto que el agente sopesa y no como reglas que deba seguir.
