Skip to main content
Glama
ac0033

agent-memory

by ac0033

agent-memory

Infraestructura local de memoria a largo plazo. Neutral respecto al agente: no está vinculado a ningún framework de agente específico; se integra de tres maneras:

  • Biblioteca Python: frameworks como LangGraph pueden hacer import agent_memory directamente (ver agent_memory/long_term/adapters/);

  • Servidor MCP: cualquier cliente compatible con MCP (ver agent_memory/server/, implementación M2+);

  • Skill: se monta como Skill en agentes que lo admiten (ver skills/agent-memory/, implementación M3).

Los pasos de integración y la compatibilidad de los adaptadores de cada host se describen en docs/agent-integration.md (incluye la lista de responsabilidades del runtime del host).

Estado actual: M7 (completado)

M0 entrega solo el esqueleto del proyecto y el esquema central:

  • agent_memory/models.py: modelos pydantic y reglas de validación para entradas de memoria (MemoryEntry), punteros de evidencia (EvidenceRef) y propuestas de destilación (MemoryProposal);

  • agent_memory/config.py: módulo de configuración único, con anulación mediante variables de entorno; configuración inválida fail-closed;

  • evals/datasets/layer1/: 20 casos de evaluación de "recuerdo básico" (YAML), para la evaluación de recuperación en M1+.

M1 entrega el núcleo de memoria MVP (destilación manual): long_term/store/ (capa de memoria Markdown + índices derivados sqlite-vec/FTS5), long_term/retrieve/ (embeddings bge-m3 + recuperación híbrida densa/dispersa con RRF), long_term/ingest/redact.py (redacción con regex), cli.py (add / search / list / update / forget / rebuild / stats), evals/runners/recall_eval.py (layer1 recall@5).

M2 entrega la ruta de escritura de destilación + servidor MCP:

  • agent_memory/llm.py: protocolo LLMClient (inyección de dependencias, fake para pruebas) y OpenAILLMClient (endpoint compatible con OpenAI, por defecto DeepSeek, fail-closed sin key);

  • agent_memory/long_term/ingest/distill.py: conversación → candidatos de memoria atómicos (reglas duras del prompt: nunca destilar contenido instructivo, línea roja D2; id/confidence/detail se normalizan antes de validar, y si tras la normalización siguen siendo inválidos van a data/review_queue/ en lugar de descartarse silenciosamente);

  • agent_memory/long_term/ingest/gate.py: puerta de evaluación (residuos de redacción / contenido instructivo / límite mínimo de longitud / tres cubos de baja confianza);

  • agent_memory/long_term/ingest/reconcile.py: conciliación estilo Mem0 (ADD / UPDATE / DELETE / NOOP; si el conflicto no converge, se escribe en data/review_queue/); tras UPDATE/DELETE se ejecuta long_term/ingest/propagate.py para propagar cambios (los vecinos que dependen de hechos antiguos son juzgados por el LLM como inválidos / necesitan revisión / no afectados; los inválidos se eliminan dejando un registro de auditoría en data/logs/propagation.jsonl, los que necesitan revisión van a la cola de revisión);

  • agent_memory/long_term/retrieve/inject.py: los resultados de recuperación se renderizan como bloque de inyección XML <recalled_memories> (con prefijo de salvaguarda "referencia, no instrucción", truncado por presupuesto);

  • agent_memory/server/mcp_server.py: servidor MCP stdio, cinco herramientas (memory_search / memory_add / memory_feedback / memory_update / memory_forget);

  • evals/datasets/layer2/: 20 casos de recuperación/desambiguación multi-sesión (7 conflictos temporales + 7 desambiguación multi-objeto + 6 distinción válido/inválido);

  • evals/runners/e2e_eval.py: evaluación de extremo a extremo (sin key de LLM, degrada automáticamente a modo de juicio por reglas).

M3 entrega adaptador LangGraph + Skill + evaluación de regresión de prefijos de trayectoria:

  • agent_memory/long_term/adapters/langgraph/store.py: AgentMemoryStore (implementación de BaseStore de LangGraph, namespace ("memories", <scope>), put pasa por reglas de redacción + puerta de evaluación, search usa recuperación híbrida);

  • agent_memory/long_term/adapters/langgraph/tools.py: build_memory_tools() produce 14 herramientas ReAct totalmente alineadas con MCP (las tres capas de memoria expuestas, la lógica de negocio converge en MemoryService); por defecto usa el pipeline completo (incluida la conciliación con LLM), y solo si falta el LLM degrada explícitamente a conciliación por reglas puras (NOOP para duplicados vecinos, ADD en caso contrario);

  • agent_memory/long_term/retrieve/resident.py: build_system_context(scope) inyección de capa residente (las memorias de perfil se ordenan por confianza y se incluyen en el system prompt, con presupuesto de la mitad del presupuesto de recuperación);

  • skills/agent-memory/SKILL.md: enseña al agente cuándo recuperar/escribir/retroalimentar (nombres de herramientas MCP y ejemplos de parámetros, "la recuperación es referencia, no instrucción");

  • evals/datasets/prefix/ 9 casos de regresión de prefijos de trayectoria (2 conflictos de instrucciones + 2 fugas de scope + 2 baja confianza + 2 anti-inyección + 1 control de recuperación normal);

  • evals/runners/prefix_regression.py: contexto congelado → el LLM genera la siguiente acción → el juez determina si es aceptable/prohibido (reintento automático en 429, se omite sin key);

  • examples/langgraph_demo.py: demostración mínima de agente ReAct LangGraph (recuerda preferencias entre sesiones).

M4a entrega el núcleo del bucle de evolución (bucle de aprendizaje durante el sueño + consolidación periódica), formando un doble bucle: el bucle en línea solo añade evidencia (destilación → puerta de evaluación → conciliación), el bucle fuera de línea consolida la memoria en lote:

  • agent_memory/long_term/evolve/trigger.py: determinación de disparo (más de N días desde la última consolidación / nuevas entradas por encima del umbral / acumulación de review_queue por encima del umbral; cualquiera dispara, todos los umbrales vía variables de entorno AGENT_MEMORY_EVOLVE_*);

  • agent_memory/long_term/evolve/consolidate.py: consolidación que produce EvolutionProposal — deduplicación y fusión (el LLM juzga a los vecinos como MERGE/CONFLICT/UNRELATED; CONFLICT no se fuerza a converger, se deja a humanos), revisión fuera de línea de las entradas más antiguas (reutiliza judge_propagation de long_term/ingest/propagate.py), sugerencias de degradación/archivado para entradas no recuperadas durante mucho tiempo; la propuesta solo se escribe en data/review_queue/evolution/<timestamp>/, nunca modifica directamente la capa de memoria;

  • agent_memory/long_term/evolve/verify.py: verificación en tres niveles (verificación de contrato boundary / benchmark de retención con diff de top-5 de consultas / protección de memorias de seguridad safety), si cualquiera falla se rechaza en conjunto;

  • agent_memory/long_term/evolve/apply.py: instantánea antes de promover (data/snapshots/<timestamp>/), auditoría después de aplicar (data/logs/evolution_audit.jsonl), rollback(snapshot_id) para revertir;

  • agent_memory/long_term/evolve/cycle.py: orquestación en cinco pasos (disparo → dirigido → consolidación → verificación → poda);

  • models.py: MemoryEntry añade el campo retrieval_count (se incrementa en recuperación híbrida, no se cuenta en la recuperación de vecinos de la ruta de escritura).

M4b entrega el conjunto de evaluación layer3 + métricas de evolución + aceptación real:

  • evals/datasets/layer3/: 12 casos de asociaciones ocultas entre sesiones (adaptación de la tercera capa del libro "servicio proactivo" al escenario de programación: los hechos y el plan están en sesiones diferentes; para responder correctamente hay que señalar proactivamente el conflicto oculto entre ambos; cada caso incluye memoria de perfil residente

    • memoria de detalles de la capa de recuperación, rubric.essential debe incluir el ítem "señalar proactivamente la asociación oculta");

  • evals/runners/metrics.py: estadísticas pareadas (prueba exacta de McNemar + intervalo de ganancia bootstrap pareado, funciones puras sin dependencia de scipy, con n < 20 se marca explícitamente "insuficiente para conclusiones fuertes");

  • evals/runners/e2e_eval.py añade --baseline: los mismos casos se ejecutan de nuevo en pareja con una base vacía, se emite victoria/derrota por pregunta, valor p, intervalo de ganancia reservada; y se registran tres métricas de evolución — tasa de activación (proporción de memorias escritas que se recuperan), tasa de seguimiento (proporción de casos donde el juez confirma que la base del juicio proviene de la memoria recuperada), ganancia reservada (diferencia con memoria - baseline);

  • Cifras de aceptación real: layer3 con memoria 91.67% vs baseline 0% (McNemar p=0.0010, n=12 solo referencia direccional); regresión layer1 100% / layer2 100% / prefix 88.89%; demostración real del bucle evolve (incluido un rechazo boundary y una promoción merge + rollback) que expuso dos defectos de consolidate, ver problemas pendientes en AGENTS.md.

M5 entrega nodos de interacción de revisión humana + hook de actualización forzada:

  • config.py añade review_gate (off / ask / strict, por defecto ask: cuando la cola de revisión tiene acumulación, el comportamiento de memory_search) y review_turn_interval (por defecto 3, intervalo de turnos del hook), anulables con las variables de entorno AGENT_MEMORY_REVIEW_GATE / AGENT_MEMORY_REVIEW_TURN_INTERVAL;

  • Las herramientas MCP pasan de cinco a siete — se añaden memory_review_list (detalles pendientes) y memory_review_resolve (approve: almacenar tal cual / modify: cambiar texto, pasar por redacción + puerta de evaluación y almacenar / discard: descartar); memory_search añade puerta de revisión (en modo ask, blocked espera confirmación del usuario antes de permitir; en strict, siempre rechaza la lectura; off no bloquea); memory_add devuelve detalles de pending_review para revisión;

  • El prompt de destilación añade la regla dura de "elegibilidad de confirmación del usuario": sugerencias/planes/conclusiones propuestas unilateralmente por el asistente sin confirmación explícita del usuario no se sedimentan;

  • scripts/memory_turn_hook.py: hook Stop de kimi-code, cuenta turnos por sesión, cada N turnos intercepta el final del turno e inyecta instrucciones de destilación (material = mensajes de usuario de cada turno + respuestas de asistente adyacentes), ya registrado en el ~/.kimi-code/config.toml a nivel de usuario.

M6 entrega servicio residente HTTP + disciplina de scope:

  • agent_memory/server/http_server.py: servicio residente streamable-http, por defecto solo se vincula a 127.0.0.1:8765 (dirección de loopback, naturalmente sin autenticación), superpone en el endpoint MCP dos rutas estáticas: /SKILL.md (distribución completa de la capa de prompts) y /bootstrap (instrucciones de guía de integración para nuevos agentes); el agente remoto puede integrarse con una sola instrucción de guía, sin necesidad de copiar archivos;

  • Disciplina de scope (biblioteca compartida, múltiples agentes y proyectos mezclados): SKILL.md añade reglas de selección de scope (lo común va a global, lo de proyecto a repo:, si hay duda preguntar al usuario), memory_add con scope por defecto cae a global pero devuelve un recordatorio scope_reminder;

  • Operación residente en Windows: scripts/start_http_server.cmd script de arranque (reintento automático hasta 3 veces tras un fallo, tras 3 fallos consecutivos escribe el marcador de fallo data/state/http_server_FAILED.txt para intervención humana, logs en data/logs/http_server.log)

    • Tarea programada activada al iniciar sesión (script de registro scripts/register_task_s4u.ps1, requiere permisos de administrador).

M7 entrega memoria de tres capas (largo plazo / trabajo / corto plazo) + interfaz unificada:

  • Migración de estructura de paquetes: los cinco subpaquetes originales store/ retrieve/ ingest/ evolve/ adapters/ se trasladan en conjunto a agent_memory/long_term/ (cero cambios lógicos), se añaden working/ y short_term/;

  • agent_memory/working/: memoria de trabajo (capa operativa, estado de la tarea actual — objetivo/tareas pendientes/decisiones/variables/notas, una por scope, almacenada en data/working/). La escritura es reemplazo completo, solo pasa por redacción, no por puerta de evaluación; el watermark turn_watermark junto con stale_wm determina si el estado está desactualizado;

  • agent_memory/short_term/: capa de adaptación de transcripción de memoria a corto plazo, que analiza los logs nativos del agente (como wire.jsonl de kimi-code) en secuencias limpias de turnos, sin crear archivos nuevos;

  • Las herramientas MCP pasan de siete a trece: se añaden memory_wm_read / memory_wm_write / memory_wm_clear (lectura/escritura/borrado de memoria de trabajo), memory_context (perfil residente + memoria de trabajo + recuperación ensamblados de una vez), memory_transcript_read (lectura de turnos, incremental con since_turn), memory_session_end (cierre de sesión: archivar data/raw + destilación conjunta + limpiar tareas pendientes completadas, veto para pendientes).

Related MCP server: mnemo

Estructura de directorios

agent-memory/
├── agent_memory/     # Python 包(扁平布局,import 名 agent_memory)
│   ├── config.py         # 配置(AGENT_MEMORY_* 环境变量覆盖)
│   ├── models.py         # 记忆条目 schema(M0 核心)
│   ├── long_term/        # 长期记忆:store / ingest / retrieve / evolve / adapters(M1-M4,M7 迁入)
│   ├── working/          # 工作记忆:当前任务状态,操作层(M7a)
│   ├── short_term/       # 短期记忆:transcript 适配层(M7b)
│   └── server/           # MCP server:stdio(M2)+ HTTP 常驻(M6)
├── skills/agent-memory/  # Skill 接入方式(M3)
├── scripts/              # 运维脚本:turn hook(M5)、HTTP 服务启动/计划任务注册(M6)
├── evals/                # 评估集:datasets / rubrics / runners(agent 禁改,D6)
├── tests/
└── data/                 # 运行时数据(gitignored):raw / memory / working / review_queue / snapshots / state / logs

Inicio rápido

uv sync          # 创建虚拟环境并安装依赖
uv run pytest    # 跑测试
uv run ruff check .

Uso de M2

Configurar LLM (para destilación / conciliación / juicio con LLM)

La ruta de escritura de destilación necesita un endpoint compatible con OpenAI, por defecto DeepSeek (https://api.deepseek.com, modelo deepseek-chat):

export AGENT_MEMORY_LLM_API_KEY=sk-...
# 可选覆盖:AGENT_MEMORY_LLM_BASE_URL / AGENT_MEMORY_LLM_MODEL
# 评估评委可单独配置(异源互审):AGENT_MEMORY_JUDGE_LLM_API_KEY 等

Sin key configurada, las funciones que no dependen del LLM (recuperación, escritura manual, retroalimentación, borrado) siguen funcionando normalmente; solo la ruta de destilación de conversación falla al llamarse (fail-closed).

Comando CLI de destilación

Pasa una conversación (archivo JSON de [{role, content}, ...]) por el pipeline completo de escritura y la almacena:

uv run agent-memory distill --file conversation.json --scope repo:my-project \
    --source kimi-code --session-id 2026-08-19-session
# 管线:蒸馏 → 评价门 → 对账;无法自动收敛的冲突会写入 data/review_queue/

Servidor MCP

Inicio: uv run python -m agent_memory.server.mcp_server (stdio).

Fragmento de configuración MCP para Claude Code / Kimi Code:

{
  "mcpServers": {
    "agent-memory": {
      "command": "uv",
      "args": ["run", "python", "-m", "agent_memory.server.mcp_server"],
      "env": {
        "AGENT_MEMORY_DATA_DIR": "C:/Users/<you>/.agent-memory/data",
        "AGENT_MEMORY_LLM_API_KEY": "sk-...",
        "AGENT_MEMORY_LLM_BASE_URL": "https://api.deepseek.com",
        "AGENT_MEMORY_LLM_MODEL": "deepseek-chat"
      }
    }
  }
}

Cinco herramientas iniciales (desde M5 se amplían a siete, desde M7 a trece, ver secciones M5 / M7): memory_search (recuperación híbrida + bloque de inyección XML, filtrado de scope forzado en el servidor), memory_add (JSON de conversación por pipeline de destilación / contenido único por redacción + conciliación), memory_feedback (subir/bajar confianza, si baja de low va a la cola de revisión), memory_update (actualizar tras redacción + puerta de evaluación), memory_forget (borrar).

Evaluación de extremo a extremo

uv run python evals/runners/e2e_eval.py --layers 1,2            # 无 key 时自动规则降级模式
uv run python evals/runners/e2e_eval.py --layers 1,2 --llm-judge # 真实 LLM 评委按 rubric 判定
uv run python evals/runners/e2e_eval.py --layers 3 --llm-judge --jobs 8   # layer3 跨会话隐藏关联
uv run python evals/runners/e2e_eval.py --layers 3 --llm-judge --jobs 8 --baseline
    # --baseline:同一批用例在空库下配对重跑,输出逐题胜负 / McNemar p 值 /
    # 配对 bootstrap 留出增益区间,以及激活率 / 遵循率 / 留出增益三个进化指标
uv run python evals/runners/e2e_eval.py --layers 2 --llm-judge --jobs 8   # 调高用例并发
uv run python evals/runners/e2e_eval.py --layers 2 --llm-judge --no-cache # 禁用响应缓存

Mecanismos de aceleración (el modo real está activo por defecto):

  • Caché de respuestas LLM en disco: cada respuesta de destilación / conciliación / juicio se cachea por sha256(model + system + user) en data/logs/llm_cache/ (ya en .gitignore). Al reejecutar, las partes sin cambios aciertan directamente en caché, en segundos; cambiar de modelo no acierta automáticamente. --no-cache lo desactiva.

  • Concurrencia por caso: --jobs N (por defecto 4) usa un pool de hilos para ejecutar casos en paralelo, cada caso con su directorio temporal independiente, con reintento automático de backoff exponencial en 429.

  • Carga de modelos: bge-m3 se carga una vez por proceso (aprox. 1-2 minutos). Para ejecutar varios layers, usa --layers 1,2 de una vez, no ejecutes dos procesos con un layer cada uno.

El modo de degradación por reglas no representa la calidad real de destilación; para la aceptación formal, configura un LLM real y vuelve a ejecutar.

Uso de M3

Integración con LangGraph

Un agente LangGraph propio tiene tres formas de integrarse, que se pueden combinar:

from agent_memory.long_term.adapters.langgraph.store import AgentMemoryStore
from agent_memory.long_term.adapters.langgraph.tools import build_memory_tools
from agent_memory.long_term.retrieve.resident import build_system_context
from langgraph.prebuilt import create_react_agent

# 1) BaseStore:namespace 约定 ("memories", <scope>),put/search/delete 直接映射到记忆内核
store = AgentMemoryStore()          # 配置走 AGENT_MEMORY_* 环境变量
store.put(("memories", "repo:myproj"), "db-choice",
          {"content": "本项目数据库定为 SQLite,文件 data/app.db。", "confidence": "high"})

# 2) ReAct tool:recall_memories / save_memory 挂进 tools 列表
tools = build_memory_tools()

# 3) 常驻层:profile 类记忆渲染进 system prompt(预算是召回预算的一半)
prompt = "你是用户的编程助手……\n\n" + build_system_context("repo:myproj")

agent = create_react_agent(model, tools, prompt=prompt, store=store)

Ejemplo completo ejecutable en examples/langgraph_demo.py (uv run python examples/langgraph_demo.py, requiere AGENT_MEMORY_LLM_API_KEY).

Nota: el put de BaseStore es una interfaz síncrona de bajo nivel: el llamador debe proporcionar contenido atómico ya destilado; la capa adaptadora pasa por reglas de redacción + puerta de evaluación (el contenido instructivo lanza un error directamente), pero no hace destilación con LLM; la conciliación de la herramienta save_memory es una ruta de reglas puras sin LLM (NOOP para duplicados vecinos, ADD en caso contrario), la convergencia de conflictos sigue usando el pipeline de destilación de M2.

Integración con Skill

skills/agent-memory/SKILL.md es la capa de prompts, que enseña al agente empaquetado (Kimi Code / Claude Code) cuándo recuperar, escribir y retroalimentar. Instalación (junto con el servidor MCP):

  • Kimi Code: copia o enlaza simbólicamente skills/agent-memory/ a ~/.kimi-code/skills/agent-memory/;

  • Claude Code: copia a ~/.claude/skills/agent-memory/;

  • Además, configura el servidor agent-memory según la configuración MCP anterior, para que los nombres de herramientas del Skill (memory_search, etc.) tengan implementación.

Evaluación de regresión de prefijos de trayectoria

Contexto congelado (system + bloque de memoria inyectado + último mensaje del usuario) → el LLM genera la siguiente acción → el juez determina si cae en el conjunto aceptable y no toca el conjunto prohibido. Cubre cuatro tipos de escenarios límite (conflicto de instrucciones / fuga de scope / baja confianza / anti-inyección) + control de recuperación normal:

uv run python evals/runners/prefix_regression.py             # 需 LLM key,无 key 整体跳过
uv run python evals/runners/prefix_regression.py --seeds 3   # 多种子报均值与区间
uv run python evals/runners/prefix_regression.py --no-cache  # 禁用 LLM 响应缓存(默认开)

El 429 se reintenta automáticamente con intervalos; la caché de respuestas LLM comparte data/logs/llm_cache/ con e2e_eval. Esta evaluación no tiene modo de degradación por reglas (el comportamiento del actor es el objeto bajo prueba).

Uso de M4

Bucle de aprendizaje durante el sueño (evolve)

# dry-run:只到提案为止,打印提案摘要,不验证、不应用
uv run agent-memory evolve --dry-run

# 完整循环:触发 → 整合 → 三档验证 → 通过则晋升(自动快照 + 审计)
uv run agent-memory evolve

# 只整理某个 scope
uv run agent-memory evolve --scope repo:my-repo

Condiciones de disparo (cualquiera, umbrales anulables con variables de entorno AGENT_MEMORY_EVOLVE_*): más de 7 días desde la última consolidación (EVOLVE_INTERVAL_DAYS), más de 50 entradas nuevas (EVOLVE_NEW_ENTRIES_THRESHOLD), acumulación de cola de revisión superior a 10 (EVOLVE_REVIEW_BACKLOG_THRESHOLD).

La consolidación produce una propuesta (data/review_queue/evolution/<timestamp>/proposal.yaml), no una reescritura directa: si cualquiera de las tres verificaciones (boundary / retention / safety) falla, se rechaza y la propuesta queda archivada para intervención humana; solo si todas pasan se promueve — antes de promover se hace una instantánea de la capa de memoria (data/snapshots/<timestamp>/), después de promover se escribe un registro de auditoría (data/logs/evolution_audit.jsonl). Para revertir, usa agent_memory.long_term.evolve.apply.rollback(snapshot_id, settings, embedder) para restaurar la capa de memoria desde la instantánea y reconstruir los índices.

Uso de M5

Revisión humana (dos nodos de interacción de la cola de revisión)

Los productos ilegales de destilación, la baja confianza juzgada por la puerta de evaluación y los conflictos que no convergen en la conciliación van a data/review_queue/ para decisión humana. La revisión se realiza con dos herramientas MCP:

  • memory_review_list: lista los detalles pendientes (fuente, motivo, contenido);

  • memory_review_resolve: decide — approve almacena tal cual / modify cambia el texto, pasa por redacción + puerta de evaluación y almacena / discard descarta. Al decidir con éxito, se elimina el archivo de la cola; los pendientes de tipo raw_record no se pueden almacenar directamente.

Puerta de revisión (AGENT_MEMORY_REVIEW_GATE, por defecto ask): comportamiento de memory_search cuando la cola tiene acumulación — ask devuelve status=blocked y espera confirmación del usuario (acknowledge_pending=true para permitir), strict siempre rechaza la lectura (para escenarios sin supervisión), off no bloquea. La respuesta de memory_add incluye detalles de pending_review, el agente debe informar al usuario uno por uno y pedir su decisión (el SKILL.md tiene el flujo correspondiente).

Hook de actualización forzada de memoria

scripts/memory_turn_hook.py es un hook Stop de kimi-code: cuenta turnos por sesión, cada AGENT_MEMORY_REVIEW_TURN_INTERVAL (por defecto 3) turnos intercepta el final de la sesión e inyecta instrucciones de destilación (material = mensajes de usuario de cada turno + respuestas de asistente adyacentes). Ya registrado en el ~/.kimi-code/config.toml a nivel de usuario, activo para todas las sesiones de proyectos; otros hosts pueden engancharlo siguiendo el script.

Uso de M6

Servicio residente HTTP

El modo stdio hace que el host lance el servidor como subproceso, que nace y muere con la sesión; el modo HTTP es un servicio local de larga duración, cualquier host de agente que pueda enviar solicitudes HTTP obtiene las trece herramientas con solo registrar una URL:

uv run python -m agent_memory.server.http_server
# 默认监听 http://127.0.0.1:8765/mcp(只绑回环地址,天然免鉴权)
# 覆盖:AGENT_MEMORY_HTTP_HOST / AGENT_MEMORY_HTTP_PORT

El servicio tiene además dos rutas estáticas: /SKILL.md (texto completo de la capa de prompts) y /bootstrap (instrucciones de guía de integración). Un nuevo agente solo necesita recibir el contenido de /bootstrap: registrar http://127.0.0.1:8765/mcp (tipo de transporte streamable-http) + leer y seguir /SKILL.md, sin copiar ningún archivo.

Residencia en Windows (tarea programada)

scripts/start_http_server.cmd es el script de arranque: si sale de forma anómala, espera 60 segundos y lo relanza, hasta 3 veces; tras 3 fallos consecutivos escribe el marcador de fallo data/state/http_server_FAILED.txt para intervención humana; los logs están en data/logs/http_server.log. scripts/register_task_s4u.ps1 registra una tarea programada activada al iniciar sesión (modo S4U en segundo plano, completamente sin ventana), requiere permisos de administrador. Ambos scripts deben permanecer en ASCII puro (cmd.exe lee .cmd con GBK, PowerShell 5.1 lee .ps1 sin BOM con ANSI; los caracteres no ASCII corrompen el análisis).

Uso de M7

Ensamblaje de contexto unificado y memoria de trabajo

memory_context(scope, query?, k?, current_turn?) ensambla de una vez tres secciones: bloque de perfil residente (memoria de largo plazo de perfil) → bloque de memoria de trabajo (estado de la tarea actual) → bloque de recuperación (solo recupera memoria de largo plazo si se pasa query). Para el mantenimiento diario del estado de la tarea actual, usa tres herramientas de memoria de trabajo:

  • memory_wm_write(scope, goal?, decisions?, variables?, todos?, notes?, turn_watermark?): escritura de reemplazo completo (no es fusión; los campos no pasados se vacían), solo pasa por redacción, no por puerta de evaluación;

  • memory_wm_read(scope, current_turn?): lectura + determinación de frescura (stale_wm=true indica que el número de turno actual supera el watermark turn_watermark de la memoria de trabajo — "hasta qué turno se ha actualizado este estado", el estado puede estar desactualizado);

  • memory_wm_clear(scope): vaciar (idempotente, no es un error si no existe).

La memoria de trabajo es un borrador de la capa operativa: las conclusiones de los elementos completados deben destilarse en la memoria de largo plazo (memory_add o memory_session_end a continuación) para que se consideren sedimentadas.

Lectura de registros de sesión y cierre de sesión

memory_transcript_read(log_path, adapter?, since_turn?) analiza los registros de sesión del agente (como wire.jsonl de kimi-code, reconociendo el formato por nombre de archivo) en una secuencia limpia de turnos (user/assistant/tool); since_turn se combina con el watermark de la memoria de trabajo para lectura incremental (solo devuelve turnos posteriores al watermark).

memory_session_end(scope, conversation_json?|log_path?, ...) es el cierre estándar de sesión, todo de una vez: archivar el original (data/raw/, solo añade, no reescribe) → destilación conjunta (conversación + instantánea de memoria de trabajo como contexto de referencia) → limpiar las tareas pendientes completadas de la memoria de trabajo. Si hay tareas pendientes en la memoria de trabajo, se hace veto (no se ejecuta archivo/destilación/limpieza); para confirmar el cierre, pasa force=true. Es una división de trabajo de doble vía con el hook de destilación rodante cada N turnos: el hook garantiza contra pérdidas por caídas a mitad de camino, session_end hace el cierre estándar.

Tres líneas rojas de arquitectura

Ver AGENTS.md para más detalles. En resumen: separación de tres capas de datos (raw solo añade, memory es la única fuente de verdad, index se puede reconstruir pero nunca se modifica a mano); la escritura debe pasar por las puertas de redacción → destilación → conciliación; evals / rubric / umbrales de publicación / registros de auditoría están prohibidos de modificar por el agente.

Install Server
F
license - not found
A
quality
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

View all related MCP servers

Related MCP Connectors

  • Shared, governed long-term memory for AI agents across tools and sessions via MCP and REST.

  • Shared long-term memory vault for AI agents with 20 MCP tools.

  • Your memory, everywhere AI goes. Build knowledge once, access it via MCP anywhere.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ac0033/agent-memory'

If you have feedback or need assistance with the MCP directory API, please join our Discord server