Memoria retrospectiva para OpenCode, Cursor y otros agentes de codificación

Memoria de proyecto que persiste entre sesiones.

Índice

Cada sesión de agente de codificación comienza en frío. La regla de nomenclatura y el análisis del error del martes pasado estaban en el chat, y el chat ha desaparecido. La siguiente sesión comienza en blanco, y los vuelves a explicar.

Los comandos que siguen corresponden a @vectorize-io/hindsight-coding-agents 0.8.4, publicado el 30/10/2026, que depende de @vectorize-io/hindsight-all ^0.10.2. El comportamiento del paquete, las tarifas de la nube y Memory Defense en esta página se verificaron el 03/11/2026. Otras formas de mantener hechos entre sesiones están en las páginas de Memoria de sistemas de IA.

Entorno autoalojado en el hogar con escritorio, portátil, bastidor de servidores y puerta francesa

Un agente de codificación puede leer el repositorio, ejecutar las pruebas y modificar el código. Sin embargo, aún no puede ver una decisión que nunca llegó al archivo que tiene abierto. Supongamos que el error de exportación se investigó el año pasado: se intentó la citación CSV ordinaria y se revirtió porque el ERP receptor elimina los ceros a la izquierda, y el único formato que funciona es la fórmula de texto de Excel.

La documentación de coding-agents de Hindsight está orientada a ese tipo de decisión, la que reside en un mensaje de commit o en un chat anterior. El plugin copia los mensajes de commit recientes a un banco de memoria, escribe la sesión de vuelta mientras trabajas y mantiene cinco páginas para que la siguiente sesión pueda comenzar desde ellas. OpenCode, la CLI de Cursor, Claude Code y las otras herramientas que enumera el paquete comparten ese banco para un solo repositorio.

Qué es el plugin de coding-agents

Una instalación antigua debería seguir hablando con el servidor que ya elegiste. hindsight-claude-code, hindsight-cursor-cli y hindsight-codex son los paquetes que este reemplaza. Si ~/.hindsight/claude-code.json o ~/.hindsight/codex.json aún está en el disco, install copia la URL de la API y el token de ese archivo, y una URL vacía aún significa el demonio local. La herramienta que estás instalando se lee primero, por lo que una instalación de Codex mantiene el servidor de Codex incluso cuando un archivo antiguo de Claude está a su lado. Cursor CLI, Copilot CLI, OpenCode y Cline nunca escribieron un archivo de endpoint, por lo que esas instalaciones no tienen un servidor para copiar.

Los antiguos ajustes de recuerdo y retención, bankMission, retainMission y dynamicBankGranularity quedan atrás. La documentación de coding-agents dice que describen un pipeline que este paquete reemplazó, y reinterpretarlos sería conjetura. Lo que obtienes en su lugar es un banco por repositorio, coding-agent::{gitProject}, compartido por cada herramienta que abre ese checkout. Para volver a dar a cada herramienta su propio banco, establece la plantilla que la documentación dice que coincide con los nombres antiguos:

{ "bankIdTemplate": "{harness}::{gitProject}" }

Ejecutar npx @vectorize-io/hindsight-coding-agents install sin nombre de herramienta imprime la lista y no escribe nada. install all es el comando que configura cada herramienta detectada. update reemplaza la copia bajo ~/.hindsight/coding-agents y deja el archivo de configuración propio de cada herramienta intacto. autoUpdate hace ese reemplazo en segundo plano una vez al día; una liberación que añade un nuevo hook aún necesita install, porque la actualización en segundo plano no edita esos archivos de configuración. Si Hindsight es una opción entre varios backends, la comparación de proveedores de memoria para agentes lo alinea con Honcho, Mem0 y Mnemosyne.

Elige dónde reside la memoria

El banco tiene que residir en algún lugar antes de que una sesión pueda almacenar una decisión. En una terminal, install pregunta una vez: Hindsight Cloud, un servidor que ya ejecutas o un demonio en la misma computadora que el agente de codificación. Un script pasa --server. Una instalación posterior no pregunta de nuevo, y deja intacto un servidor que ya nombraste, a menos que pases --server para cambiarlo.

Modo Qué se ejecuta Qué suministras Qué sale de la máquina
cloud Hindsight Cloud. Base de API predeterminada https://api.hindsight.vectorize.io Un token de API Peticiones, texto de git que el plugin retiene y memorias extraídas, enviadas a esa API
self-hosted Un servidor de Hindsight que ya ejecutas Su URL, convencionalmente http://localhost:8888 Enviado a esa URL. Una URL de localhost permanece en la máquina
daemon Un hindsight-embed local que el plugin inicia en 127.0.0.1:9077 uv en PATH y un LLM para la extracción de hechos Los datos del banco permanecen en la máquina. La extracción aún llama al LLM que se le dé al demonio
npx @vectorize-io/hindsight-coding-agents install opencode --server daemon
npx @vectorize-io/hindsight-coding-agents install opencode --server self-hosted --api-url http://localhost:8888
npx @vectorize-io/hindsight-coding-agents install opencode --server cloud --api-token YOUR_TOKEN
flowchart LR A[Coding agent] --> P[plugin de coding-agents] P --> B["Banco coding-agent::{gitProject}"] P --> M{serverMode} M --> C[Hindsight Cloud] M --> S[API autoalojada :8888] M --> D["hindsight-embed 127.0.0.1:9077"]

El demonio se une a 127.0.0.1:9077 y deja el puerto 8888 para un servidor de Hindsight que ejecutes tú. Si algo ya está escuchando en 9077, el plugin usa ese proceso para cada herramienta de codificación y cada repositorio, y cerrar una sesión lo deja ejecutándose. El primer inicio descarga hindsight-embed y carga los modelos en segundo plano, porque no se permite que un hook espere tanto tiempo. Hasta que el puerto responda, esa sesión no tiene memoria por un turno o dos, de la misma manera que un servidor en la nube o autoalojado inalcanzable deja una sesión sin memoria.

Linux y Windows instalan litellm, que la API incluye, desde wheels. macOS lo compila, porque no hay una wheel para macOS, y la compilación necesita una cadena de herramientas Rust actual de rustup. Convertir una transcripción en memorias aún necesita un modelo de chat: HINDSIGHT_API_LLM_PROVIDER si lo estableces, de lo contrario la primera clave entre OPENAI_API_KEY, ANTHROPIC_API_KEY, GEMINI_API_KEY y GROQ_API_KEY, de lo contrario la CLI de Claude Code. Cualquier variable HINDSIGHT_API_* se pasa al demonio. El modelo de incrustación, el reranker, un servidor local compatible con OpenAI y una copia de seguridad del banco están en Hindsight para Hermes Agent. Con serverMode establecido en self-hosted, --api-url es la URL base de ese servidor.

La página de precios de Vectorize describe la edición autoalojada como de licencia MIT, sin tarifa por asiento ni tarifa por token. La nube factura cada operación. Las tarifas están en la última sección.

Configura OpenCode

OpenCode debe estar instalado antes de que el plugin pueda unirse a él. La guía rápida de OpenCode cubre esa instalación. Luego apunta el plugin al demonio:

npx @vectorize-io/hindsight-coding-agents install opencode --server daemon

El instalador escribe una ruta de plugin en el archivo de usuario ~/.config/opencode/opencode.json, apuntando a ~/.hindsight/coding-agents. Eso es independiente de un opencode.jsonc de proyecto. OpenCode carga las herramientas hindsight_* desde la ruta y no necesita un servidor MCP. OpenCode 2 (npm @opencode/cli, objetivo de instalación opencode2) lee el mismo archivo. Instalar cualquiera de las CLIs configura ambas, y desinstalar cualquiera elimina la entrada. OpenCode v1 rechaza el archivo si contiene la clave plugins de v2, por lo que el instalador escribe una única ruta y cada CLI carga su propio punto de entrada desde el paquete.

En OpenCode 2, la encuesta de solo lectura del repositorio se ejecuta bajo alguna otra herramienta instalada, porque un plugin de v2 no puede definir el agente de solo lectura que esa encuesta necesita, y la notificación “sembrada” va al registro del plugin porque un plugin de v2 no puede emitir un toast. El recuerdo, las herramientas hindsight_* y escribir la sesión de vuelta funcionan como lo hacen en v1.

OpenCode lee ~/.hindsight/coding-agent.json cuando el espacio de trabajo se carga, por lo que un cambio en ese archivo se aplica después de que reinicies OpenCode. Un apiToken nuevo es la excepción en cada herramienta: el cliente lo vuelve a leer cuando el servidor rechaza una solicitud, por lo que rotar la clave no necesita esa reiniciación.

Para ver si el banco realmente guardó una decisión, usa dos sesiones en un repositorio que estés dispuesto a almacenar:

  1. Inicia OpenCode allí y declara una decisión desechable, como un código de error público que no quieres que se cambie.
  2. Termina la sesión. OpenCode escribe la transcripción durante la sesión y vuelca la última respuesta cuando queda inactivo.
  3. Inicia una nueva sesión en el mismo directorio y pide ese código, y dónde se decidió.
  4. Pide al agente que llame a hindsight_sync_status. "synced": true significa que la memoria sembrada puede consultarse. El mismo resultado informa qué tan actual está la copia de git y cuántos documentos de encuesta han llegado (surveyDocs, de 0 a 4).

Si la segunda sesión no tiene memoria del código, busca en ~/.hindsight/coding-agents-logs/. plugin.log es el rastro legible, diag.jsonl registra cada reflejo y obtención de página, y usage.jsonl registra qué herramientas hindsight_* llamó el turno. npx @vectorize-io/hindsight-coding-agents stats resume ese archivo de uso por agente. Cuando un reflejo tiene tiempo de espera o devuelve un 5xx, diag.jsonl registra una búsqueda de las páginas de conocimiento y, si ninguna página coincide, un recuerdo plano de observaciones. El agente aún responde. Si esas alternativas también fallan, ese turno no tiene nada del banco frente a él.

Configura Cursor y otros agentes

Cursor se une al mismo banco a través de su CLI. El instalador escribe hooks y MCP bajo ~/.cursor:

npx @vectorize-io/hindsight-coding-agents install cursor-cli --server daemon

Eso escribe hooks en ~/.cursor/hooks.json, un servidor MCP en ~/.cursor/mcp.json y una habilidad compañera. Cada hook es un proceso de vida corta, por lo que una edición de coding-agent.json se aplica en la siguiente solicitud. El proceso MCP lee el archivo cuando se inicia, por lo que las herramientas hindsight_* ven la edición en la siguiente sesión.

Claude Code obtiene la misma configuración de hooks y MCP en los archivos de Claude. install claude-code añade tres hooks a ~/.claude/settings.json, registra MCP para tu usuario a través de claude mcp add e instala ~/.claude/skills/hindsight-coding-agent. Esa habilidad es lo que Claude lee cuando le dices que almacene algo en Hindsight. Codex CLI (install codex) escribe tres hooks en ~/.codex/hooks.json y un bloque [mcp_servers] en config.toml, y esos hooks se ejecutan solo cuando codex_hooks es true.

Herramienta Objetivo de instalación Configuración Cómo el agente accede a la memoria
OpenCode opencode ~/.config/opencode/opencode.json Herramientas nativas, sin MCP
OpenCode 2 opencode2 Mismo archivo que OpenCode Herramientas nativas, sin MCP
Cursor CLI cursor-cli ~/.cursor/hooks.json, ~/.cursor/mcp.json, habilidad compañera Hooks más MCP
Claude Code claude-code Tres hooks en ~/.claude/settings.json, MCP a nivel de usuario, habilidad bajo ~/.claude/skills/ Hooks más MCP
Codex CLI codex ~/.codex/hooks.json, [mcp_servers] en config.toml Hooks más MCP
pi pi Extensión en ~/.pi/agent/settings.json, habilidad bajo ~/.pi/agent/skills Herramientas nativas, sin MCP

Kilo, Copilot CLI, Cline, Devin CLI y los otros nombres de la página de coding-agents usan el mismo comando install <name>, y comparten el banco del repositorio que abras. Devin CLI no se instalará en Node menor que 22.5, porque sus hooks leen la base de datos de la sesión a través de node:sqlite. pi y Prime Agent también tienen que usar ese comando install. pi install npm:@vectorize-io/hindsight-coding-agents se deja sin configurar: ambas herramientas leen una única clave pi en package.json, y esa clave puede apuntar solo a una entrada.

Para mantener que Claude Code no escriba en el banco mientras OpenCode aún lo hace, establece disabled para esa herramienta:

{
  "serverMode": "daemon",
  "harnesses": {
    "claude-code": { "disabled": true }
  }
}

Claude Code entonces no almacena nada, no recuerda nada y no recibe herramientas de Hindsight. retainSessions establecido en false, para cada herramienta o para una de ellas, detiene el guardado de transcripciones y detiene la importación de antiguas. El recuerdo, el historial de git y las herramientas de memoria siguen funcionando, por lo que aún puedes preguntar por lo que ya está almacenado.

Bancos por repositorio y páginas de conocimiento

OpenCode y la CLI de Cursor en un solo checkout deberían recordar el mismo proyecto. El nombre del banco que hace eso es coding-agent::{gitProject}. {gitProject} es el nombre del directorio del checkout principal de git, desde git rev-parse --git-common-dir, por lo que un worktree enlazado usa el mismo banco que ese checkout. Un directorio que no es un repositorio de git toma el nombre del directorio donde comenzó la sesión.

Un directorio que debería usar un banco diferente va en mapPathToBank. Das una ruta absoluta, la ruta coincidente más larga gana, y listar la raíz del repositorio cubre cada subdirectorio bajo ella. Ese mapa se sobrepone a todo lo demás, incluyendo un bankId fijo. Establece bankId cuando cada directorio que abras debería escribir en un banco que nombraste. dynamicBankId establecido en false mantiene la resolución en ese banco estático en lugar de bankIdTemplate.

Si el agente hace cd a un directorio que pertenece a otro banco, los turnos desde entonces se almacenan en el nuevo banco. Los turnos ya guardados permanecen donde fueron escritos. Cada movimiento es una advertencia en plugin.log.

La primera vez que abres un repositorio, ese banco no tiene ninguna de las decisiones pasadas del proyecto. La sesión copia mensajes de commit recientes, que es como una elección que existe solo en git se convierte en algo que la siguiente sesión puede recordar. La copia está activada por defecto (autoSeed). Una escritura completa de ese documento mantiene los commits más nuevos, entre la mitad de seedLimit y seedLimit (300). La ventana se mueve en pasos de la mitad, y el registro dice cuántos commits más antiguos descartó.

gitIngest elige cuánto de ese historial de git se almacena, tanto para la primera copia como para los commits que hagas después. "message" almacena mensajes de commit y actualiza el documento cuando HEAD contiene un commit que el documento carece. "full" también almacena la diferencia de cada commit, más nuevos primero. "none" deja git fuera. Un commit posterior añade su propio mensaje. El documento completo se escribe de nuevo, aún dentro de esa ventana de seedLimit, cuando el commit guardado ya no es un ancestro de HEAD, cuando hay más de seedLimit commits nuevos, o cuando el servidor no puede agregar con seguridad.

Los mensajes de commit no muestran cómo está organizado el código ahora, por lo que la misma primera sesión también puede recorrer el árbol. Esa recorrida es codebaseSurvey, activada por defecto. La herramienta de codificación que estás usando la ejecuta cuando su CLI puede alojar un agente de solo lectura; de lo contrario, otra herramienta instalada la ejecuta.

En Claude Code, la recorrida es claude -p, y surveyBudgetUsd (predeterminado 2) detiene el gasto. Otras herramientas usan el modelo al que ya están apuntando, dentro de su propio entorno aislado de solo lectura. Después de 20 commits nuevos (surveyRefreshCommits), la recorrida se ejecuta de nuevo. Establece eso en 0 y se ejecuta solo en un banco que nunca haya sido encuestado.

Nota: La recorrida inicia un agente de codificación separado, como OpenCode sin cabeza. Esas llamadas van al modelo de ese agente, por lo que HINDSIGHT_API_LLM_MAX_CONCURRENT establecido en "1" no las ralentiza. Cuando el modelo es un servidor autoalojado que ya está respondiendo tu sesión, la encuesta es una segunda pasada completa en el mismo servidor. Establece codebaseSurvey en false cuando el servidor no pueda soportarlo.

La siguiente sesión comienza desde cinco páginas en lugar de releer cada hecho almacenado. Cada página se sintetiza de un nivel de conocimiento, por lo que solo lee los hechos que el extractor dirigió a ese nivel.

Página A qué responde Etiqueta
Mapa de componentes Componentes principales, sus responsabilidades y cómo dependen entre sí knowledge:component
Conceptos centrales Abstracciones de dominio y el vocabulario que un desarrollador debe conocer knowledge:concept
Convenciones y patrones Cómo este proyecto prueba, maneja errores, nombra cosas, estructura código y realiza cambios knowledge:convention
Decisiones clave y racionalización Decisiones técnicas significativas y por qué el proyecto las hace de esa manera knowledge:decision
Iniciativas y mejoras Iniciativas principales a lo largo del tiempo, con enlaces a páginas de iniciativas capturadas knowledge:feature-work

Un minuto compartido dispararía las cinco páginas a la vez, en el mismo grupo de trabajadores que almacena nuevas memorias, y una sesión ingiriendo entonces esperaría detrás de ese montón. El programador predeterminado las distribuye. pageTriggerCron es H * * * *: cada página obtiene su propio minuto, hasheado desde el id del banco y el nombre de la página, y un tique con nada nuevo se omite. pageTriggerType establecido en auto-refresh reescribe una página después de cada consolidación que produjo nuevo material. La documentación llama a eso el programador más actual y el más caro, una síntesis de modelo por página por consolidación. manual deja una página como está hasta que la actualices.

Una página integrada que no quieras actualizar es false bajo pages. La copia ya almacenada permanece hasta que la elimines en el plano de control. source_query reemplaza la pregunta que esa página hace, y el plugin aún agrega la cláusula que mantiene las decisiones de una dependencia fuera de la página. Una página propia va bajo customPages y necesita su propio source_query. Un nombre desconocido bajo pages se ignora, con una advertencia en plugin.log, por lo que un error tipográfico no crea una segunda página vacía. Pedir al agente que capture una iniciativa escribe una página separada, una por iniciativa, a través de hindsight_capture_initiative.

Eliminar el banco en el servidor borra la memoria de ese repositorio. La siguiente sesión copia el historial de git y recorre el árbol de nuevo. Desinstalar el plugin deja el banco donde está.

Controles de alcance y privacidad

Abrir un repositorio crea un banco para él, que es como un árbol de cliente puede almacenarse sin que lo pidas. optInOnly limita la memoria a directorios que nombras. En todas partes else el plugin no crea ningún banco, no almacena nada y no copia historial de git, y la herramienta de codificación se comporta como si el plugin no estuviera instalado.

{
  "optInOnly": true,
  "optInPaths": ["~/prj", "~/oss"]
}

Cada entrada es un prefijo de directorio, ~ se expande, y cada repositorio bajo él aún obtiene su propio banco coding-agent::{gitProject}. Una ruta en mapPathToBank también se permite, porque ya nombraste ese directorio. Un bankId solo no permite nada: nombra un banco, no un directorio, por lo que con optInOnly activado, los directorios sin nombrar permanecen fuera. El plugin no lee configuración del repositorio. La razón de la documentación es que un repositorio clonado no debe poder activar la memoria. Qué directorio usa qué banco permanece en mapPathToBank. Qué herramienta está encendida o apagada permanece en harnesses. Una vez que el id del banco se conoce, las reglas adicionales para ese único repositorio van en banks:

{
  "banks": {
    "coding-agent::secret-client": { "disabled": true }
  }
}

npx @vectorize-io/hindsight-coding-agents uninstall cursor-cli elimina los hooks de Cursor, la entrada MCP y la habilidad que el instalador añadió. uninstall all hace eso para cada herramienta que configuró. Un archivo que ya existía se copia a un .hindsight-backup a su lado antes de que el instalador lo edite. El banco, la base de datos del demonio y ~/.hindsight/coding-agent.json permanecen.

Un token pegado en un chat no debería convertirse en una memoria. Memory Defense es un escaneo de 45 patrones de texto antes de que se almacene, y permanece apagado hasta que ese banco tiene una política. redact reemplaza una coincidencia con un marcador como [REDACTED:github_token] y almacena el resto. block descarta el elemento coincidente y devuelve 422 cuando cada elemento en la solicitud coincidió. La política se aplica a almacenes posteriores en ese banco. Las memorias ya almacenadas se dejan como están. Esas dos acciones son la regla de código abierto sensitive_data.

Quién está permitido para activar el escaneo se escribe de manera diferente en dos lugares. La entrada empresarial del 03/09/2026 dice que el escáner básico está en todos los planes, y que los detectores adicionales, un catálogo de 220 o más patrones, reescaneo base64, comprobaciones de inyección de prompt y una pantalla LLM, son Empresariales. La comparación de precios marca Memory Defense como solo Empresarial, con las celdas autoalojada y nube vacías. Revisa esa fila en la página de precios actual antes de contar con un banco en la nube para eliminar secretos.

manageBankConfig predeterminado en true, lo que permite al plugin escribir la configuración del banco que su ingesta necesita, y cualquier campo que pongas en defaultBankConfig. Escribe un campo solo donde el banco no lo defina ya, por lo que un valor que establezcas en el plano de control permanece. El modo de extracción en las propias estrategias del plugin es la excepción: sigue retainExtractionMode en cada sesión. retainContext, enviado con cada escritura de sesión de vuelta, le dice a la extracción quién dijo la frase. El predeterminado nombra a ambos hablantes, y pide que el “fijo” o “pasa” propio del agente se almacene como la afirmación del agente en lugar de como hecho. Cuando una conclusión se almacena como si alguien la hubiera observado, las formas que alimentan la siguiente sesión están en Bucles de memoria autorreforzantes.

Ajustes para el desarrollo diario

Cada herramienta de codificación lee el mismo archivo, ~/.hindsight/coding-agent.json, por lo que un límite que establezcas una vez se aplica a OpenCode y a Cursor. HINDSIGHT_CONFIG mueve ese archivo. No crea un segundo. Para cada ajuste, un predeterminado integrado pierde contra una variable de entorno (HINDSIGHT_API_URL, HINDSIGHT_API_TOKEN o HINDSIGHT_<FIELD> para otros valores individuales), que pierde contra la parte superior del archivo, luego contra harnesses.<name>, luego contra paths.<prefix>, luego contra banks.<id>. Un valor escrito en el archivo permanece cuando más tarde estableces la misma variable de entorno. retainTags y optInPaths pueden ser una variable separada por comas. mapPathToBank, harnesses, paths, banks, retainMetadata y recallOptions se leen solo desde el archivo.

Cuando una sesión es lenta, costosa o recuerda el repositorio equivocado, el cambio es uno de estos campos. Los predeterminados son de la referencia de coding-agents.

Campo Predeterminado Cuándo cambiarlo
serverMode cloud daemon para un banco local, self-hosted para un servidor que ejecutas
autoInject "reflect" "pages" o "recall" omiten la síntesis al inicio de la sesión. "none" no inyecta nada; el agente busca páginas y refleja cuando son demasiado superficiales
reflectTimeoutMs 20000 El reflejo de sesión automático. En herramientas que usan hooks, el instalador establece un tiempo de espera de 30 segundos para el hook de solicitud, por lo que un valor pasado aproximadamente 20 segundos también necesita elevar ese timeout del hook
reflectBudget "high" Presupuesto para la herramienta hindsight_reflect llamada por el agente. El reflejo de sesión automático siempre usa "low" e ignora esto
recallOptions observaciones, presupuesto bajo, max_tokens 2000 Fusionado clave por clave. Un banco con consolidación deshabilitada no crece observaciones, y el recuerdo predeterminado regresa vacío, establece "types": ["world", "experience"] allí
retainExtractionMode "concise" "verbose" extrae más detalle. La referencia dice que cuesta varios veces los tokens, porque cada Stop escribe la sesión de vuelta. "chunks" almacena texto sin extracción
retainTags / retainMetadata sin establecer En un banco compartido, marca project:{gitProject} para que los recuerdos puedan filtrar. El id del banco ya responde “qué repositorio” cuando cada repositorio tiene su propio banco
bankIdTemplate coding-agent::{gitProject} {harness}::{gitProject} divide agentes. mapPathToBank envía un árbol de directorios a un banco nombrado
codebaseSurvey true false cuando la encuesta y tu sesión comparten un modelo autoalojado. surveyBudgetUsd (predeterminado 2) limita solo la receta de Claude
pageTriggerType "cron" "auto-refresh" sigue cada consolidación. "manual" deja las páginas donde están
maxParallelRetains 10 Bájalo si la API devuelve 429. La referencia dice que la API limita ráfagas

Un demonio local que recuerda solo repositorios bajo ~/prj, almacena mensajes de commit, deja la encuesta del repositorio apagada y pide a bancos nuevos que redacten secretos se ve así:

{
  "serverMode": "daemon",
  "optInOnly": true,
  "optInPaths": ["~/prj"],
  "gitIngest": "message",
  // codebaseSurvey inicia otro agente de codificación. HINDSIGHT_API_LLM_MAX_CONCURRENT no lo limita.
  "codebaseSurvey": false,
  "retainExtractionMode": "concise",
  "autoInject": "reflect",
  "defaultBankConfig": {
    "memory_defense": {
      "enabled": true,
      "rules": [{ "on": "sensitive_data", "action": "redact" }]
    }
  }
}

defaultBankConfig rellena memory_defense solo en un banco que no lo tenga ya, y no hace nada cuando manageBankConfig es false. hindsight_diagnose muestra el archivo como está ahora y los valores que el cliente en ejecución cargó realmente.

Cuánto cuesta, y cuándo un archivo es suficiente

Una sesión puede gastar tres cosas cuando comienza: un reflejo de presupuesto bajo en la primera solicitud, una copia de mensajes de commit recientes limitada por seedLimit, y la recorrida del árbol. Con retainSessions dejado activado, la transcripción se almacena a medida que avanza la sesión. Las cinco páginas se actualizan en su propio minuto de la hora cuando algo cambió. gitIngest establecido en "full" almacena diferencias junto con mensajes.

El FAQ de precios de Vectorize lista tarifas de la nube sin tarifa mensual fija ni precio por asiento. El FAQ dice que las nuevas cuentas reciben créditos gratuitos y no publica la cantidad de créditos.

Operación Precio
Retain $10.00 por millón de tokens
Recall $0.75 por millón de tokens
Reflect $0.05 por llamada
Iris Extract $7.50 por millón de tokens
Mental Model Retrieve $0.25 por millón de tokens
Mental Model Refresh $0.05 por llamada
Almacenamiento después de 30 días $0.25 por millón de tokens por mes

Las memorias son gratuitas de almacenar por los primeros 30 días. La descripción general de la nube dice que crear o actualizar páginas de conocimiento se factura por llamada, y el FAQ no publica una línea separada de página de conocimiento. Un demonio o un servidor autoalojado no incurre en estas tarifas de la nube. La extracción aún gasta lo que cuesta el LLM del demonio, incluyendo una clave de API en la nube si esa es la clave que install encontró.

La misma página de documentación informa una ejecución sdebench de AMB: 61 tareas de repositorio, tres ejecuciones cada una, con y sin memoria. Cada ejecución resolvió 60–61 de las 61 de cualquier manera. Lo que cambió son correcciones por tarea y costo por tarea. La página dice que las cifras de correcciones reproducen etiquetas que AMB imprime en su propio gráfico, y que el costo se deriva de la misma tabla por ejecución.

Agente Correcciones por tarea Costo por tarea
Claude Code 0.85 → 0.36 $0.445 → $0.338
Codex CLI 1.34 → 0.47 $0.577 → $0.276
opencode 1.20 → 0.80 $0.634 → $0.553

Sin memoria es el número de la izquierda. Esos tres agentes son la tabla completa que la página imprime.

Una regla que quieras revisar junto al código pertenece en AGENTS.md o CLAUDE.md. Ese archivo está en el repositorio cuando el demonio está caído, y guardarlo no almacena el chat. El banco lleva una decisión que nunca se escribió allí y que la siguiente sesión sigue acertando. En Hermes, un almacén SQLite local con sus propios interruptores de retención es Mnemosyne.

Fuentes

  • Agentes de codificación — objetivos de instalación, campos de coding-agent.json, nomenclatura de bancos, páginas de conocimiento, modo de demonio y la tabla sdebench. Paquete npm @vectorize-io/hindsight-coding-agents 0.8.4, publicado el 30/10/2026.
  • Precios — tarifas de operación de la nube, el reclamo de gratuito para autoalojar, y la fila de matriz de planes para Memory Defense.
  • Memory Defense — política de sensitive_data por banco, redactar y bloquear, 45 patrones, apagado hasta que se establezca una política de banco. Las memorias existentes permanecen sin escanear.
  • Funciones empresariales, 03/09/2026 — escáner básico descrito como todos los planes; detectores adicionales descritos como Empresariales.

Suscribirse

Recibe nuevas publicaciones sobre sistemas, infraestructura e ingeniería de IA.