DOCUMENTACIÓN

La capa de conocimiento soberano para inteligencia artificial.

VISIÓN

ChainMemory no es una herramienta de memoria. Es una capa de conocimiento soberano para sistemas de IA.

Todos los modelos de IA actuales sufren la misma limitación fundamental: cuando una conversación termina, todo lo aprendido desaparece. El contexto se pierde. Las decisiones se olvidan. El progreso se reinicia a cero. ChainMemory existe para resolver esto permanentemente.

Las memorias que guardás son el mecanismo. El Project State — una vista estructurada, versionada y consolidada del conocimiento de tu proyecto — es el producto. La prueba es independiente: cualquiera puede verificarla sin confiar en nosotros. Y la interoperabilidad entre cualquier modelo de IA es la consecuencia.

Qué permite ChainMemory

  • Estado consolidado portable — Lo que se mueve entre modelos no es una pila de conversaciones: es el estado estructurado que se construyó con ellas. Decisiones vigentes, riesgos abiertos, prioridades actuales, vocabulario de trabajo. Funciona con ChatGPT hoy, Claude mañana, y cualquier modelo futuro. Sin vendor lock-in, nunca.
  • Continuidad verificable — Podés demostrarle a cualquiera que una decisión existía en un momento específico, sin que tenga que confiar en nosotros. Cada estado de proyecto lleva su prueba criptográfica, anclada on-chain.
  • Pista de auditoría de decisiones — Cada decisión se rastrea hasta las conversaciones que la produjeron. Procedencia completa, responsabilidad total.
  • Identidad persistente para flujos de IA — Tu asistente de IA no arranca de cero en cada sesión. Hereda el conocimiento acumulado de cada interacción previa.
  • Conocimiento soberano — Vos sos dueño de tus datos. No OpenAI, no Anthropic, no Google. Tus memorias viven en tu cuenta, y su prueba es pública: podés verificarlas vos mismo, de forma independiente de nosotros.
La idea central Las memorias son eventos. El Project State es una vista materializada. El anclaje es la prueba de existencia. Juntos, forman un sistema donde el conocimiento de IA es persistente, portable, estructurado y demostrablemente auténtico.
Las memorias son el insumo. El estado es el resultado. Guardar conversaciones es donde empieza, no donde está el valor. Una pila de memorias es una ventana de contexto más grande. Un estado consolidado es conocimiento que podés entregarle a cualquier modelo, verificar contra la cadena, y con el que podés hacer responsable a alguien. Esa diferencia es todo el producto.

QUÉ ES CHAINMEMORY

ChainMemory es una plataforma de memoria persistente, portable y verificable para inteligencia artificial. Cada conversación importante, cada decisión, cada contexto de proyecto se guarda como una memoria individual, vinculada a un proyecto, y anclada con una prueba criptográfica que cualquiera puede verificar.

Esas memorias son el insumo. Lo que ChainMemory construye con ellas es el Project State: una vista consolidada y versionada de lo que tu proyecto sabe — decisiones vigentes, riesgos abiertos, prioridades actuales. Ese estado es lo que viaja entre modelos, y es lo que lleva la prueba.

Tu IA olvida cada vez que cerrás la pestaña. ChainMemory resuelve eso. Funciona con ChatGPT, Claude, Gemini, Perplexity y cualquier modelo que soporte MCP o API.

Tres formas de acceso Extensión Chrome (un clic desde cualquier chat), Servidor MCP (integración nativa con Claude Desktop, Cursor y cualquier cliente MCP), y API REST (control total desde tu código).
Algunas operaciones cuestan AIC Leer es siempre gratis. Escribir una memoria, inyectar contexto y consolidar estado pagan un fee de protocolo en AIC, el token nativo de la red — mitad quemada, mitad al tesoro del ecosistema. Ver Costos para la tabla completa. Hay AIC gratis en el faucet.

POR QUÉ CHAINMEMORY

El problema es invisible hasta que perdés semanas de trabajo

Cada conversación con IA hoy empieza de cero. La IA no recuerda qué decidiste ayer, qué arquitectura elegiste la semana pasada, ni por qué rechazaste un enfoque hace tres meses. Los equipos que usan IA acumulan conocimiento crítico — y lo pierden cuando cierran la pestaña.

Antes y después

EscenarioSin ChainMemoryCon ChainMemory
Pasás 2 horas con Claude diseñando un esquema de base de datos Cerrás la pestaña. En la próxima sesión, Claude no tiene ningún recuerdo del esquema. Reexplicás todo desde cero. La decisión se guarda como memoria. En la próxima sesión, Claude recibe el esquema automáticamente vía inyección de contexto.
Tu equipo cambia de ChatGPT a Gemini a mitad de proyecto Todo el historial queda bloqueado en ChatGPT. Gemini empieza sin nada. Semanas de contexto perdidas. Gemini recibe el Project State completo — decisiones, riesgos, hitos, stack — como si hubiera estado desde el día uno.
Un stakeholder pregunta "¿cuándo decidimos usar PostgreSQL?" Buscás en cientos de hilos de chat esperando encontrarlo. ¿Quizás fue en Slack? ¿Quizás en otra IA? La decisión tiene un hash, un timestamp y links de evidencia. Compartís la URL de verificación — prueba criptográfica.
Dos miembros del equipo toman decisiones de arquitectura contradictorias usando diferentes IAs Nadie se da cuenta hasta que producción se rompe. No hay pista de auditoría mostrando quién decidió qué. Las dos decisiones quedan registradas con las memorias y los agentes que las originaron. Nada marca el conflicto automáticamente, pero quien consolida ve las dos en un único Project State y marca cuál reemplaza a la otra — conservando el historial.
Un auditor pide prueba de que una decisión de compliance se tomó antes de la fecha límite Tenés capturas de pantalla y "confiá en mí." Sin evidencia a prueba de manipulación. El estado fue anclado on-chain en el bloque N. El hash es inmutable. El auditor verifica de forma independiente.

Qué lo hace diferente

Otras herramientas guardan conversaciones. ChainMemory guarda conocimiento — estructurado, verificado y portable. La diferencia:

  • Estructurado, no crudo — Tu cliente de IA convierte las conversaciones en decisiones, hitos, riesgos y prioridades, cada una citando las memorias que la respaldan. Obtenés un Project State, no un dump de transcripciones.
  • Verificado, no confiado — Cada estado es hasheado y anclado on-chain. Cualquiera puede verificar de forma independiente sin depender de los servidores de ChainMemory.
  • Portable, no bloqueado — Funciona con ChatGPT, Claude, Gemini, Copilot, Perplexity y cualquier herramienta compatible con MCP. Tu conocimiento se mueve con vos.
  • Inyectado, no buscado — El contexto se inyecta automáticamente en nuevas conversaciones con IA. La IA recibe lo que necesita sin que copies ni pegues nada.
El test de 5 minutos Instalá la extensión, guardá una memoria, cambiá a una IA diferente e inyectá el contexto. Vas a ver tu decisión llegar intacta en menos de 5 minutos. Ese es el momento en que hace clic.

INICIO RÁPIDO

Guardar → Recuperar → Verificar → Probar en 5 minutos

Prerequisitos

  • Google Chrome (o cualquier navegador Chromium)
  • Una cuenta ChainMemory — creá una acá
  • Tu API Key — Extensión → Settings → Connection → View

Opción A — Extensión Chrome (más rápida)

1

Instalá e iniciá sesión

Descargá desde la Chrome Web Store. Iniciá sesión con tu cuenta. El icono de la extensión aparece en tu barra de herramientas.

2

Guardar — guardá una memoria

Abrí cualquier chat de IA (ChatGPT, Claude, Gemini). Tené una conversación donde tomes una decisión — ej., "Vamos a usar PostgreSQL para la base de datos de usuarios." Hacé clic en el icono de ChainMemory y guardá. La extensión extrae el contenido y crea una memoria vinculada a tu proyecto.

3

Recuperar — inyectar en una nueva sesión

Abrí una IA diferente (o una nueva conversación en la misma). Hacé clic en el icono de ChainMemory → "Inyectar Contexto." Tu decisión anterior llega automáticamente — la IA ahora sabe sobre la elección de PostgreSQL sin que repitas nada.

4

Verificar — chequeá el hash

En la Extensión, abrí Project Brain. Vas a ver el estado de tu proyecto con decisiones, riesgos y prioridades, más su ancla on-chain. El estado lleva un hash SHA3-256 computado sobre el JSON canónico del estado mismo, con separador de dominio CM_PROJECT_STATE_V<schema_version> — exactamente lo que recomputa el verificador de referencia abierto.

5

Probar — anclar on-chain

No hay nada que apretar: tus memorias se anclan on-chain solas, unos 30 segundos después de guardarlas. Para comprobarlo vos mismo, llamá a GET /v1/project/:name/state/anchor — devuelve el state_hash anclado con su transacción y bloque, y no necesita API key. Sellar una memoria para volverla permanentemente inmutable (seal) está disponible por el servidor MCP y por la API REST; la extensión no sella.

Resultado Guardaste una decisión, la recuperaste en una IA diferente, verificaste su hash y creaste una prueba on-chain inmutable. Todo en menos de 5 minutos.

Opción B — Servidor MCP (para Claude / Cursor)

1

Configurar MCP

Agregá el servidor MCP de ChainMemory a tu configuración de Claude Desktop o Cursor. Mirá Configuración MCP para el config completo.

2

Guardar

En Claude, decí: "Recordá: decidimos usar PostgreSQL para la base de datos de usuarios". La herramienta MCP chainmemory_remember se activa automáticamente.

3

Recuperar

En una nueva conversación: "¿Qué base de datos elegimos?". Claude llama a chainmemory_recall y devuelve la decisión almacenada con su cadena de evidencia.

4

Verificar y Probar

Pedí la prueba on-chain: verify_project_state devuelve todas las versiones ancladas con su state_hash, anchor id, transacción y bloque — gratis, y verificable por cualquiera sin tu API key. Para volver una memoria permanentemente inmutable, chainmemory_seal toma el número de memoria y tu ai_id.

Opción C — API REST (control total)

bash
# 1. Guardar una memoria
curl -X POST https://api.chainmemory.ai/v1/memory \
  -H "x-api-key: TU_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"summary":"Decidimos usar PostgreSQL para la DB de usuarios","category":"decision","importance":8}'

# 2. Recuperar memorias
curl https://api.chainmemory.ai/v1/memories/list?project=mi-proyecto \
  -H "x-api-key: TU_API_KEY"

# 3. Obtener estado del proyecto (incluye hash)
curl https://api.chainmemory.ai/v1/project/mi-proyecto/state \
  -H "x-api-key: TU_API_KEY"

# 4. Verificar ancla (público — sin autenticación)
curl https://api.chainmemory.ai/v1/project/mi-proyecto/state/anchor

Opción D — Hermes Agent

Hermes Agent es un framework de agentes IA open-source. Usá ChainMemory dentro de Hermes mediante el servidor MCP (herramientas nativas en el chat) o el wrapper cm.py CLI (control total desde terminal).

Configurar MCP

Editá ~/.hermes/config.yaml y agregá:

YAML
mcp_servers:
  chainmemory:
    command: "python"
    args: ["C:\\Users\\<usuario>\\.hermes\\skills\\chainmemory-mcp\\chainmemory_mcp_server.py"]
    env:
      CHAINMEMORY_API_KEY: "aic_..."

Reiniciá Hermes. Las herramientas aparecen como mcp_chainmemory_* en el chat.

O usá cm.py CLI

Instalá el skill de ChainMemory y usá cm save, cm recall, cm state desde terminal.

Verificar

En el chat de Hermes: "Recordá: decidimos usar PostgreSQL". O ejecutá cm whoami en terminal.

Qué sigue Explorá cómo funciona event sourcing, aprendé sobre el modelo de confianza, o entrá en la referencia completa de la API.

CREÁ TU CUENTA

Registro

Las cuentas de ChainMemory se crean a través de la Extensión Chrome. Tu cuenta te da acceso a los tres métodos de integración: Extensión, Servidor MCP, y API REST.

1

Instalá la Extensión

Descargá desde la Chrome Web Store y hacé clic en "Agregar a Chrome".

2

Configurá tu API Key

Hacé clic en el icono de ChainMemory en la barra del navegador. Elegí una de las dos opciones:

  • Generar API Key automáticamente — crea un wallet gratis + 1 token AIC en un clic. Sin email, sin contraseña. Recomendado para usuarios nuevos.
  • Ya tengo una key — pegá tu key aic_... existente para restaurar tu cuenta en este dispositivo.
3

Tu API Key

Tu key está siempre disponible en Configuración → Conexión (hacé clic en "Ver"). Copiala — la necesitás para acceso vía MCP y API.

Guardá tu API Key de forma segura Tu API Key da acceso completo a tus memorias y proyectos. Nunca la compartas en repositorios públicos o código frontend. Guardala en variables de entorno o un gestor de secretos.

Creá tu primer proyecto

Los proyectos agrupan memorias relacionadas. Cada proyecto tiene su propia línea de tiempo, estado consolidado, y ancla on-chain independiente.

1

Vía la Extensión

En el popup de la extensión, hacé clic en "New Project". Ingresá un slug (minúsculas, sin espacios — ej: mi-saas, tesis-ml) y una descripción opcional. Hacé clic en Crear.

2

Vía la API

bash
curl -X POST https://api.chainmemory.ai/v1/projects \
  -H "x-api-key: tu-api-key" \
  -H "Content-Type: application/json" \
  -d '{"name": "mi-saas", "description": "Mi producto SaaS"}'
    
3

Vía MCP

Si tenés el servidor MCP configurado, pedile a tu IA: "Creá un nuevo proyecto de ChainMemory llamado mi-saas". La IA usará la herramienta create_project automáticamente.

Nombres de proyecto Elegí slugs descriptivos y cortos. Los vas a referenciar en cada llamada a la API e interacción MCP. Ejemplos: chainmemory, app-mobile, data-pipeline.

Resumen de credenciales

CredencialDónde encontrarlaSe usa para
API KeySe genera en el primer inicio o se pega manualmenteConexión de la extensión, llamadas a la API REST, configuración del servidor MCP
Slug del proyectoExtensión → ProyectosTodas las operaciones de memoria (guardar, recall, inyectar, seal)
Obtené tokens AIC gratis Visitá faucet.chainmemory.ai para reclamar 1 AIC. Necesitás AIC para anclar tu Project State on-chain. 1 AIC alcanza para cientos de operaciones de anclaje.

ARQUITECTURA

ChainMemory tiene una arquitectura de 3 capas:

Capa 1: Captura

La extensión Chrome, el servidor MCP o llamadas directas a la API capturan contenido de conversaciones con IA. El contenido se procesa, se le asignan tags, y se vincula a un proyecto.

Capa 2: Almacenamiento y Consolidación

Cada memoria se guarda en la base de datos episódica con su hash SHA-256. Un modelo de IA — el cliente, por el servidor MCP o la API — propone operaciones estructuradas de una gramática de 29 ops. El servidor las valida contra las invariantes de la gramática, comprueba que cada memoria citada se resuelva a un event hash anclado y las aplica con un builder determinista: el modelo propone, el servidor decide. Nada en el servidor lee memorias para extraer conocimiento por su cuenta.

Capa 3: Verificación On-Chain

Cada versión del estado consolidado de un proyecto se ancla en la blockchain ChainMemory, normalmente en menos de diez minutos desde que se escribe (Chain ID 202604). El hash del estado se registra en el contrato ProjectStateAnchor, creando una prueba inmutable de que ese estado existió en ese momento.

Pipeline
Conversación IA
      |
  Extensión / MCP / API
      |
  Memoria (hash SHA-256)
      |
  El cliente propone ops citando memorias (MCP / API)
      |
  Validación del servidor + builder determinista
      |
  Project State (decisiones, hitos, riesgos, prioridades, entorno)
      |
  Anchor on-chain (tx hash + block number)
      |
  Verificación pública (/v1/project/:name/state/anchor)

CÓMO SE COMPARA CHAINMEMORY

ChainMemory opera en el espacio emergente de infraestructura de memoria para IA. Así se compara con las principales soluciones en 2026:

Matriz de Comparación

Característica ChainMemory Mem0 Zep / Graphiti Cognee Supermemory Letta
Modelo de almacenamiento BD episódica + anclaje on-chain Vector + Graph (híbrido) Knowledge graph temporal (Neo4j) Graph + Vector + Relacional (poly-store) Vectores semánticos + trazas temporales Jerárquico (core + externo)
Verificación criptográfica ✓ Blockchain soberana ✗ Centralizado ✗ Centralizado ✗ Centralizado ✗ Solo local ✗ Ninguna
Prueba on-chain ✓ Merkle roots + tx hash
Portabilidad cross-modelo ✓ Extensión + MCP + API ~ API + MCP ~ API + MCP ~ Python SDK ~ MCP + API ✗ Atado al framework
Consolidación estructurada ✓ Project State construido con ops del cliente (decisiones, hitos, riesgos, prioridades...) ✗ Facts crudos ~ Relaciones en knowledge graph ~ Enriquecimiento por pipeline ✗ Trazas semánticas ~ Resumen manual
Conciencia temporal ✓ Cadena de versiones + timestamps on-chain ~ Básico ✓ Ventanas de validez de hechos ~ Agregado 2025 ~ Trazas con tiempo
Auditoría de decisiones ✓ Cadena de evidencia con refs a memorias ~ Tracking de procedencia
Acceso no-developer ✓ Extensión Chrome (1-click) ✗ Solo developers ✗ Solo developers ✗ Solo developers ~ Extensión de navegador ✗ Solo developers
Identidad IA / atribución ✓ Soulbound Tokens (EIP-5192)
Ideal para Auditoría, compliance, trazabilidad multi-agente Prototipado rápido, personalización de usuario Razonamiento complejo, workflows CRM Pipelines de datos empresariales, RAG Agentes de código, memoria local Investigación, agentes de larga vida

Comparaciones Detalladas

ChainMemory vs. Mem0

Mem0 se enfoca en personalización de usuario — extrae facts de conversaciones para construir perfiles. ChainMemory se enfoca en conocimiento de proyecto — extrae decisiones, hitos y riesgos para construir un estado auditable. Mem0 es ideal para "recordar que el usuario prefiere modo oscuro". ChainMemory es ideal para "probar que esta decisión arquitectónica fue tomada el 15 de mayo por Claude basándose en estas 5 conversaciones".

ChainMemory vs. Zep / Graphiti

El motor Graphiti de Zep es excelente en knowledge graphs temporales — rastreando cuándo un hecho se volvió válido y cuándo fue reemplazado, con búsqueda híbrida (semántica + BM25 + traversal de grafos). ChainMemory provee semántica de supersesión temporal similar pero agrega una capa que Zep no tiene: anclaje on-chain. Cuando necesitás probarle a un regulador o auditor que una decisión existía en un momento específico, ChainMemory da prueba criptográfica. Zep da garantía basada en confianza.

ChainMemory vs. Cognee

Cognee es un potente pipeline de procesamiento de datos — ingesta 30+ fuentes, construye knowledge graphs con tripletas sujeto-relación-objeto, soporta múltiples backends. ChainMemory es más opinado: trabaja solo con memorias de conversaciones IA y las convierte en inteligencia de proyecto estructurada (un Project State cuyos ítems citan sus memorias) en vez de nodos genéricos de knowledge graph.

ChainMemory vs. Supermemory

Supermemory se enfoca en memoria semántica a escala — liviano, rápido, corre local, top-ranked en benchmarks. ChainMemory está optimizado para conocimiento de proyecto estructurado con verificación blockchain. Supermemory es la mejor opción para agentes de código que necesitan recall semántico rápido. ChainMemory es la mejor opción cuando necesitás probar qué decidió una IA y por qué.

Diferenciador clave ChainMemory es la única solución que combina tres capacidades que ninguna otra herramienta tiene juntas: (1) extracción de conocimiento estructurado (un Project State versionado en el que cada ítem cita las memorias que lo respaldan), (2) portabilidad cross-modelo (Extensión + MCP + API, sin atarse a ningún framework), y (3) verificación criptográfica (blockchain soberana con pruebas Merkle). Otras herramientas guardan memorias. ChainMemory construye conocimiento de proyecto verificable.
No son mutuamente excluyentes ChainMemory puede complementar otras herramientas de memoria. Usá Supermemory o Mem0 para recall rápido en sesión, y ChainMemory para decisiones de proyecto permanentes y auditables.

COSTOS

ChainMemory cobra fees de protocolo en AIC, el token nativo de su red. La regla es simple: leer es siempre gratis, escribir no. Todo lo que produce un registro permanente y verificable cuesta algo, porque ese registro vive en la cadena y se queda ahí.

Cómo conseguir AIC Hay AIC gratis en el faucet. Crear una cuenta y registrar una identidad no cuestan nada.

Tabla de fees

OperaciónFeeNotas
Guardar una memoria0.001 AIC + almacenamiento on-chainel almacenamiento crece con el largo de la memoria — ver más abajo
Inyectar memorias en un chat0.1 AICpor inyección, sin importar cuántas memorias (hasta 50)
Consolidar el estado del proyecto0.05 AIC + 0.005 por operación aplicadalas operaciones rechazadas no se cobran; si el estado no cambia, no se cobra nada
Escribir o revertir un estado directamente0.1 AICrevertir crea una versión nueva idéntica a la restaurada — la historia nunca se muta
Sellar una memoria de forma permanente0.001 AICdespués de sellarla, ya no puede modificarse
Auditar una memoria0.1 AICgratis con dry_run
Auditar el estado de un proyecto5 AICgratis con dry_run — la operación más cara del sistema
Abrir una sesión de rol auditada0.001 AICVerifiable Role Contracts
Todo lo demásgratisleer, buscar, listar, filtrar, etiquetar, archivar, verificación pública, pruebas de anclaje, cotizaciones de precio, crear una cuenta, registrar una identidad
Adónde va el fee Cada fee de protocolo se parte al medio: 50% se quema en una dirección que nadie controla, y 50% va al tesoro del ecosistema. La mitad quemada es irrecuperable por diseño — ni siquiera ChainMemory puede traerla de vuelta. Eso es lo que hace que el suministro sea deflacionario con uso real, y no por anuncio.

Por qué guardar cuesta más cuando la memoria es más larga

Una memoria no sólo se hashea: su contenido cifrado se escribe on-chain. Eso es lo que te permite descifrarla años después desde otro dispositivo, y lo que le permite a un tercero confirmar que el registro no fue alterado. También significa que cada byte es permanente y consume gas de la red.

Medido sobre la red en producción el 5 de agosto de 2026, sobre 16 transacciones reales de entre 4 y 17.231 bytes. El costo total de guardar una memoria es 0.00134 AIC + 0.00000071 AIC por byte de texto. Eso ya incluye el fee de protocolo de 0.001, el gas de las dos transferencias del fee y el gas de la escritura on-chain. Vale al precio de gas actual de la red, 1 gwei; si ese precio cambia, la parte de gas escala con él.

Largo del textoTotal medido
1.000 bytes0.0020 AIC
2.000 bytes0.0028 AIC
5.000 bytes0.0049 AIC
8.000 bytes0.0070 AIC
17.000 bytes0.0134 AIC
19.972 bytes — el techo0.0155 AIC

ChainMemory no impone ningún límite de caracteres. El único techo es técnico: una memoria tiene que entrar en una sola transacción de red. Ese límite es de 20.000 bytes de contenido cifrado. El cifrado agrega exactamente 28 bytes (un IV de 12 y un tag de autenticación de 16), así que el techo real es de 19.972 bytes de texto — unos 19.972 caracteres en ASCII simple, y menos cuando el texto lleva acentos o emoji, porque cada uno ocupa de 2 a 4 bytes.

Extensión Chrome, desde la v3.1.3 La extensión muestra el costo estimado en el botón de Guardar antes de que hagas clic, confirma el tamaño real después, y te avisa cuando una respuesta supera lo que entra en una transacción en vez de cortarla. Las versiones hasta la 3.1.2 guardaban solamente los primeros 1.500 caracteres de una respuesta. Si estás en 3.1.2 o anterior, actualizá.

Ver el precio antes de pagar

Dos operaciones te dejan ver el costo exacto primero, sin cargo:

TOOL quote_inject

Qué ids de memoria existen y cuáles no, total de caracteres, tokens estimados, el costo exacto en AIC con su reparto entre quema y tesoro, y si tu saldo alcanza. Gratis.

TOOL audit_memory · audit_state

Pasando dry_run: true las dos devuelven el resultado completo de la auditoría sin cobrar. Pagás sólo cuando necesitás la auditoría como constancia.

Planes

Los fees de protocolo son independientes de tu plan: una cuenta Free y una Enterprise pagan el mismo AIC por operación. Lo que cambia el plan es el volumen — cuántas memorias, inyecciones y proyectos podés tener — y las funciones de organización: control de acceso por roles, claves de miembro y de proyecto, y pista de auditoría.

Los planes y sus límites están en chainmemory.ai. Los planes pagos incluyen además una asignación mensual de AIC.

Los fees se cobran en la red, no los cobramos nosotros Cuando una operación es paga, el AIC se mueve on-chain: mitad se quema, mitad llega al tesoro. Esa transacción es pública e irreversible. No es un cargo a una tarjeta que se pueda revertir después — que es exactamente por qué cada operación paga muestra su costo antes, y por qué auditar tiene una corrida de prueba gratuita.

CONCEPTOS

El modelo Event-Sourcing

ChainMemory sigue una arquitectura event-sourcing. Entender este patrón es clave para entender todo el sistema.

En sistemas tradicionales, guardás el estado actual y lo sobreescribís en cada cambio. En event-sourcing, guardás cada cambio como un evento inmutable, y el estado actual se deriva reproduciendo esos eventos.

En ChainMemory:

  • Las memorias son eventos — Cada memoria es un registro inmutable de algo que pasó: se tomó una decisión, se identificó un riesgo, se eligió una tecnología, se alcanzó un hito.
  • El Project State es una vista construida a partir de esos eventos — Un cliente lee las memorias y propone operaciones que las citan; el servidor las valida, las aplica y guarda cada versión resultante. El estado no se recalcula solo desde el log: cambia únicamente cuando un cliente consolida.
  • El anclaje es la prueba de existencia — Cuando un Project State se ancla on-chain, la blockchain certifica que esta vista materializada específica existía en ese block height exacto.
Patrón
Memoria #1 (evento) ─┐
Memoria #2 (evento) ─┤
Memoria #3 (evento) ─┼──→ ops de un cliente ──→ Project State v1 ──→ Anchor (bloque 120000)
Memoria #4 (evento) ─┤
Memoria #5 (evento) ─┘

Memoria #6 (evento) ─┐
Memoria #7 (evento) ─┼──→ ops de un cliente ──→ Project State v2 ──→ Anchor (bloque 123539)
Memoria #8 (evento) ─┘

Las memorias son la fuente de verdad y no cambian. Cada versión del estado registra en qué memorias se apoyó, así que cualquier ítem se puede rastrear hasta su evidencia. El anchor prueba qué estado existía en qué bloque.

Por qué importa Event-sourcing garantiza trazabilidad completa. Cada decisión en tu Project State se puede rastrear hasta la conversación específica donde se originó. Nada se pierde, nada se sobreescribe, y el historial siempre está disponible.

Qué es una memoria

Una memoria es la unidad fundamental de ChainMemory. Es un fragmento de información extraído de una conversación con IA que se considera valioso para el futuro del proyecto.

Cada memoria contiene:

  • Contenido — El texto de la conversación o nota
  • Hash — SHA-256 del contenido, inmutable
  • Proyecto — A qué proyecto pertenece
  • Tags — Etiquetas libres para organización (decisión, bug, arquitectura, idea, etc.). Los tags son para tu uso — el Project State tiene sus propios campos fijos (ver Project State)
  • Número — Secuencial dentro de tu cuenta (#1, #2...)
  • Fuente — Desde dónde se guardó (extensión, MCP, API)
  • Timestamp — Momento exacto de creación

Proyectos

Un proyecto agrupa memorias relacionadas. Cada proyecto tiene su propia línea de tiempo, estado consolidado, y ancla on-chain independiente.

Ejemplos de proyectos: mi-saas, tesis-ml, chainmemory, app-mobile.

Project State

El Project State (también llamado Project Brain) es la vista consolidada y versionada de un proyecto. No lo genera un motor en el servidor: un cliente — un modelo de IA que trabaja con update_project_state (MCP) o POST /v1/project/:name/state/ops (API) — propone operaciones, el servidor las valida contra una gramática cerrada, las aplica con un constructor determinístico y calcula el nuevo state_hash. Cada ítem registra las memorias que lo justifican.

Qué contiene el estado (versión de esquema 2)

CampoQué guardaValores cerrados
vision, phase, current_focusHacia dónde va el proyecto, en qué etapa está y qué importa ahora
decisionsDecisiones con título, enunciado y estadostatus: proposed, confirmed, rejected, superseded
milestonesEntregablesstatus: planned, in_progress, done
risksAmenazas identificadasseverity: low, med, highno medium ni critical; status: open, closed
prioritiesTrabajo ordenado con un priority_score
open_questionsPreguntas y, cuando se resuelven, su respuesta
assumptions, constraintsLo que el proyecto da por supuesto y las reglas que debe respetar
vocabulary, metricsTérminos compartidos y valores con nombre
environmentHosts, servicios, repositorios y reglas de operación
state_metaVersión, marca consolidated_until_event y previous_state_hash
Conjuntos de valores cerrados Un valor fuera de estos conjuntos hace que la operación se rechace. El error más común es "severity": "medium": el motor solo acepta low, med o high.

Ciclo de vida del estado

El estado es incremental y append-only: cada consolidación parte de la versión anterior y aplica solo las operaciones nuevas. Cada versión lleva su state_hash (SHA3-256 del estado canónico, con separador de dominio CM_PROJECT_STATE_V<schema_version>) y, en state_meta, el hash de la versión anterior. Una vez escrita, el hash de la versión se ancla on-chain en el contrato ProjectStateAnchor, normalmente en menos de diez minutos.

Cadena de versiones
v85 ──previous_state_hash──▶ v86 ──previous_state_hash──▶ v87
 │                            │                            │
 └─ anchorId 89               └─ anchorId 90               └─ anchorId 94

Ejemplo: lo que devuelve GET /v1/project/:name/state (recortado)

JSON
{
  "project": "sistema-pagos",
  "schema_version": 2,
  "version": 4,
  "state_hash": "0x3f8c2a…e91d",
  "generated_at": "2026-09-13T22:02:35.000Z",
  "anchor": { "status": "anchored", "onchain_anchor_id": 12, "tx_hash": "0x…", "block_number": 681919 },
  "state": {
    "phase": "beta",
    "current_focus": "Revisión PCI antes de abrir a los primeros tenants",
    "decisions": [
      { "id": "dec_0002", "title": "PostgreSQL con RLS para multi-tenancy",
        "statement": "La seguridad por fila saca el filtrado por tenant de la capa de aplicación",
        "status": "confirmed", "superseded_by": null,
        "evidence_root": "0x9a41…c07e", "created_version": 2, "updated_version": 3 }
    ],
    "milestones": [
      { "id": "mil_0001", "title": "Schema de BD", "status": "done",
        "evidence_root": "0x5b2d…81fa", "created_version": 1, "updated_version": 2 }
    ],
    "risks": [
      { "id": "risk_0001", "title": "Performance de RLS con 100K tenants", "severity": "med", "status": "open",
        "evidence_root": "0xd7e0…2a19", "created_version": 3, "updated_version": 3 }
    ],
    "state_meta": { "version": 4, "consolidated_until_event": 150, "previous_state_hash": "0x7b2e…f4c0" }
  }
}

GET /v1/project/:name/state requiere la API key del dueño y siempre devuelve la versión más reciente. Las versiones anteriores se pueden verificar por hash (ver Hash y verificación), no volver a leer completas con este endpoint.

Buenas prácticas

  • Primero guardá la memoria, después consolidá — el estado cita memorias; una decisión que solo existe en la operación no tiene respaldo
  • Esperá el anclaje antes de citar — una memoria en texto plano recibe su event_hash al sincronizarse con la cadena, unos 30 segundos después de escribirla
  • Avanzá la marca — enviá consolidated_until_event con el número de memoria más alto que realmente revisaste
  • Reemplazá, no reescribas — una decisión reemplazada queda en el estado con su estado cambiado, así se conserva cómo evolucionó el proyecto
Estado multi-agente Varios agentes pueden consolidar el mismo proyecto, cada uno desde su cliente. Sus operaciones terminan en un único estado; las memorias citadas en cada ítem muestran qué agente aportó la evidencia. Ver Sistemas Multi-Agente.

Cadena de evidencia

Cuando un cliente propone una operación, cita las memorias que la respaldan en evidence_memory_ids — un array de números de memoria. El servidor resuelve cada una a su event_hash y guarda en el ítem resultante la raíz Merkle de esos hashes como evidence_root.

Operación que envía el cliente
{
  "op": "add_decision",
  "title": "Usar consenso Clique PoA",
  "statement": "Proof of Authority da un anclaje rápido y económico para una cadena soberana",
  "evidence_memory_ids": [12, 45, 67]
}
Ítem guardado en el estado
{
  "id": "dec_0001",
  "title": "Usar consenso Clique PoA",
  "statement": "Proof of Authority da un anclaje rápido y económico para una cadena soberana",
  "status": "proposed",
  "evidence_root": "0x028218d0…f082"
}

Esto crea una cadena de procedencia:

  • La decisión dec_0001 existe porque las memorias 12, 45 y 67 la respaldan; la respuesta de la consolidación lista sus event hashes
  • El event_hash de cada memoria se escribe on-chain cuando la memoria se sincroniza
  • El evidence_root compromete exactamente ese conjunto de hashes
  • El estado que contiene el ítem tiene un state_hash anclado en ProjectStateAnchor
La evidencia que no se puede resolver se rechaza, no se ignora Si alguna memoria citada no existe, no es tuya o todavía no está anclada, se rechaza la llamada entera con 422 evidence_unresolved, y no se escribe ni se cobra nada. Una operación que no cita nada se acepta, pero se guarda con evidence_root 0x000…0: estado sin procedencia. La cadena lo sella igual, porque verifica hashes, no que el contenido sea correcto.

Resolución de conflictos

Nada resuelve contradicciones automáticamente. No hay un motor que lea las memorias y decida cuál gana: decide el cliente que consolida, y la gramática hace que esa decisión quede explícita y auditable.

Reemplazar una decisión

Si una memoria más nueva cambia el rumbo, el cliente agrega la decisión nueva y marca la anterior con supersede_decision (id de la anterior, by_id de la nueva). Las dos quedan en el estado.

Estado de una decisión

Una decisión se crea como proposed. El cliente la pasa a confirmed o rejected con set_decision_status, y a superseded con supersede_decision.

Varios agentes en el mismo proyecto

Las operaciones se aplican sobre la versión vigente en el momento en que llega la llamada; /state/ops no comprueba una versión esperada. No se pierde nada — cada llamada crea una versión nueva — pero un agente que trabaja con una lectura vieja puede volver a agregar o contradecir lo que otro acaba de escribir. Leé el estado justo antes de consolidar. Cada llamada acepta hasta 100 operaciones.

Sin pérdida de datos Las decisiones reemplazadas o rechazadas nunca se eliminan. Quedan en el Project State con su estado cambiado, conservando cómo evolucionó la dirección del proyecto.

Gobernanza del estado

El ciclo de vida del Project State está gobernado por reglas claras:

Quién puede consolidar?

Solo el dueño del proyecto (la cuenta que lo creó) puede disparar una consolidación. Esto asegura que la extracción de conocimiento estructurado siempre esté controlada por el dueño de los datos.

Cuándo ocurre la consolidación?

  • La dispara el cliente — un modelo de IA propone operaciones vía update_project_state (MCP) o POST /v1/project/:name/state/ops (API). El servidor las valida y recién entonces se vuelven estado
  • No hay disparador automático — la consolidación nunca ocurre sola. Nada se escribe en tu estado si un cliente no lo propone

Se puede revertir?

Cada consolidación crea una nueva versión (v1, v2, v3...). Las versiones anteriores siguen accesibles. No podés borrar una versión, pero siempre podés consolidar de nuevo para producir un estado corregido. La cadena de versiones es append-only.

Snapshots

Cada versión del Project State es un snapshot. La combinación de número de versión + state_hash + ancla on-chain crea un checkpoint verificable. El dueño lee la versión más reciente con GET /v1/project/:name/state; el hash y el ancla on-chain de cualquier versión anterior son públicos en GET /v1/project/:name/state/anchor?version=2 y GET /v1/verify/:name.

AcciónQuiénCuándoReversible
ConsolidarDueño del proyectoSolo cuando un cliente propone operacionesSe crea nueva versión (append-only)
Anclar on-chainAutomático (wallet del operador)En ~10 minutos tras cada consolidaciónInmutable una vez anclado
Archivar memoriaDueño del proyectoCualquier momentoSe puede desarchivar
Leer el estado más recienteDueño del proyecto (API key)Cualquier momentoN/A (solo lectura)
Verificar el hash de cualquier versiónCualquiera (endpoint público)Cualquier momentoN/A (solo lectura)

Hash y verificación

Cada memoria genera un hash SHA-256 de su contenido. Este hash es la huella digital única e inmutable de esa memoria. El contenido no se puede modificar sin cambiar el hash.

El state hash es un hash del estado consolidado completo (todas las decisiones, hitos, riesgos, etc.). Este state hash se ancla en la blockchain mediante una transacción en el contrato ProjectStateAnchor.

Verificación pública

La verificación en ChainMemory es pública y sin permisos. Cualquier persona puede:

  1. Llamar a GET /v1/project/:name/state/anchor (no requiere API key)
  2. Obtener el state_hash y el tx_hash de la transacción
  3. Verificar en el explorer que la transacción existe
  4. Leer el contrato directamente en la blockchain para confirmar que el hash coincide

Esto demuestra que el estado del proyecto existía exactamente así en el momento del anclaje. No se puede falsificar retroactivamente.

Modelo de privacidad

Una preocupación común con sistemas basados en blockchain es la exposición de datos. ChainMemory aborda esto con una separación estricta:

Principio crítico El texto plano de una memoria nunca va on-chain. Lo que se escribe on-chain es su texto cifrado AES-256-GCM junto con los hashes de estado — y sin la llave del dueño nada de eso se puede leer.

Qué se guarda dónde

DatoUbicaciónAcceso
Contenido de memoriaBase de datos encriptada (off-chain) y texto cifrado AES-256-GCM on-chainTexto plano: solo el dueño. Texto cifrado: público pero ilegible sin la llave
Hash de memoria (SHA-256)Base de datos + on-chain cuando la memoria se sincroniza (~30 s)El hash es público pero no revela nada del contenido
Project State (estructurado)Base de datos (off-chain)Solo el dueño
State hashBlockchain (on-chain)Público — esta es la prueba verificable
Metadata del anchor (tx, bloque)Blockchain (on-chain)Público

Un ancla de estado contiene solo el identificador del proyecto hasheado, el número de versión, el hash del estado y un timestamp. Una transacción de memoria lleva además el contenido cifrado más su categoría, importancia y largo del texto plano. Desde cualquiera de las dos es imposible reconstruir el contenido sin la llave del dueño.

Este diseño significa que ChainMemory puede proveer verificación criptográfica sin comprometer la privacidad. La blockchain prueba que un estado existió, no qué contenía.

BÓVEDA CIEGA

Todo sistema de memoria te pide confiar en su operador. La bóveda ciega de ChainMemory elimina ese requisito para las memorias que tú elijas: el contenido se cifra en tu navegador, con una clave derivada de doce palabras que nunca salen de tu dispositivo, y el servidor guarda un blob que no puede leer.

No es cifrado en reposo con una clave que tiene el proveedor. Es cifrado que el proveedor no puede deshacer — y más abajo hay una prueba que lo demuestra, junto con una descripción honesta de lo que esta función no cubre.

Cómo funciona

  1. Doce palabras. Se genera en el cliente una frase BIP-39, con la lista oficial de 2048 palabras y su checksum. Es lo único que puede recuperar tu contenido.
  2. Semilla y clave. La frase se estira a una semilla con PBKDF2-HMAC-SHA512, y de ahí se deriva la clave de contenido con HKDF-SHA256.
  3. Cifrado. El texto se sella con AES-256-GCM en un envoltorio versionado: 0x02 || IV || texto cifrado || tag. El cliente calcula además un event_hash (SHA-256) para la cadena.
  4. Almacenamiento. El blob se envía a POST /v1/memory/sealed. El servidor cobra la tarifa habitual, ancla el hash y guarda bytes que no tiene forma de interpretar.
  5. Recuperación. GET /v1/memory/:id/blob devuelve el blob, y el cliente lo descifra con la clave derivada de esas mismas doce palabras.

En ningún momento se transmite material de clave. Perder la frase significa perder el contenido: no hay vía de recuperación, y es deliberado, porque una vía de recuperación es justo lo que un operador necesitaría para leer tus memorias.

Endpoints

MétodoRutaQué hace
POST/v1/memory/sealedGuardar un blob ya cifrado
GET/v1/memory/:id/blobRecuperar el blob para descifrarlo en el cliente

POST /v1/memory/sealed

CampoObligatorioNotas
blob_b64El envoltorio versionado, en base64
event_hashSHA-256 calculado por el cliente; es lo que se ancla
plain_lenLongitud del texto plano, para la contabilidad de cuota

La tarifa es la misma que la de una memoria normal. La privacidad no cuesta más.

Qué protege y qué no

Cuatro límites, dichos con claridad, porque una promesa de privacidad sin sus fronteras vale menos que no prometer nada:

  • Los metadatos no se cifran. Fechas, tamaños, proyecto asociado y el hecho mismo de que la memoria existe siguen siendo visibles para el operador — y una parte es pública: GET /v1/memory/:id/verify devuelve, sin API key, categoría, importancia, fecha, largo, la marca is_sealed, el event hash. Ese endpoint no devuelve el texto cifrado, pero está guardado on-chain y cualquiera puede leerlo por la RPC pública (getMemory); sin tus doce palabras no se puede descifrar. Solo el contenido es ciego.
  • Las memorias anteriores no se pueden sellar retroactivamente. Lo escrito antes de esta función sigue siendo legible por el servidor, y no hay migración que lo vuelva ciego, porque el servidor tendría que leerlo para volver a cifrarlo.
  • El anclaje sigue siendo custodial. El servidor firma el anclaje en cadena. La firma no custodial queda para una fase posterior; hasta entonces se confía en el operador para anclar, nunca para leer.
  • La frase es tuya y solo tuya. Sin restablecer, sin recuperación por soporte, sin puerta trasera.

Cómo verificarlo por tu cuenta

No nos creas. Sella una memoria y luego llama al endpoint heredado que descifra con la clave del propio operador:

curl https://api.chainmemory.ai/v1/memory/<id>/decrypted \
  -H "x-api-key: $CHAINMEMORY_API_KEY"

Sobre una memoria sellada devuelve 200 con scheme: "sealed" y el blob cifrado, nunca el texto. Esa es la prueba: /decrypted deriva su clave de tu API key, que es exactamente lo que tendría un operador —o cualquiera que comprometiera el servidor—. Ante una memoria sellada no tiene nada que descifrar, y lo único que puede entregarte son los bytes opacos.

El mismo blob, recuperado con /v1/memory/:id/blob y descifrado en tu cliente con las doce palabras, devuelve el texto original.

EXTENSIÓN CHROME

Instalación

  1. Ir a la Chrome Web Store
  2. Click en "Agregar a Chrome"
  3. El icono de ChainMemory aparece en la barra de extensiones
  4. Click en el icono y elegí cómo empezar: "Generate API Key automatically" (gratis, recomendado) o "I already have a key" para pegar una existente
  5. Reclamá AIC gratis en el faucet para poder guardar e inyectar
No hay recuperación de clave Si generás una clave automáticamente, guardala en un gestor de contraseñas en ese momento. La clave es tu identidad y tu acceso a tus memorias. Nadie puede restaurártela — nosotros tampoco.
Versión actual v3.1.3 — elimina el límite de caracteres al guardar, muestra el costo de cada guardado antes de confirmarlo, y corrige el fee de inyección que se le informaba al usuario. Ver Changelog para el historial completo.

Guardar memorias

Desde cualquier chat de IA soportado, la extensión agrega un botón "Save to ChainMemory" a las respuestas del modelo. Un clic extrae el texto de esa respuesta y lo guarda como memoria.

Lo que cuesta, antes de hacer clic

Pasando el mouse sobre el botón, muestra el largo de la respuesta y el costo estimado — por ejemplo Save · 0.0074 AIC. Después de guardar, la confirmación dice cuántos caracteres se almacenaron y cuánto se cobró. Guardar cuesta un fee de protocolo de 0.001 AIC más el almacenamiento on-chain, que crece con el largo; ver Costos.

Las respuestas se guardan completas. El techo es lo que entra en una transacción de red: 20.000 bytes de contenido cifrado. Eso equivale a unos 20.000 caracteres en texto ASCII simple, pero a menos cuando el texto lleva acentos o emoji, porque cada uno ocupa de 2 a 4 bytes. Si una respuesta no entra, la extensión te avisa en vez de cortarla en silencio.

Rescatar tu historial

No tenés que empezar de cero. Abrí una conversación pasada en ChatGPT, Claude o Gemini, scrolleá para que carguen los mensajes viejos, y el botón "Save to ChainMemory" aparece en cada respuesta igual que en un chat en vivo. El conocimiento que acumulaste antes de instalar ChainMemory se vuelve memoria portable desde el primer día.

En Perplexity, sólo la última respuesta Perplexity re-renderiza su página continuamente, así que la extensión mantiene un único botón de Guardar al final de la conversación en vez de uno por respuesta. Guardar respuestas anteriores ahí todavía no está soportado. El guardado masivo de conversaciones pasadas, en todas las plataformas, está en desarrollo.

Organizar lo que guardaste

El popup de la extensión no guarda memorias — las organiza. Desde ahí podés filtrar por proyecto, agregar o quitar tags en memorias individuales, etiquetar varias a la vez, y archivar lo que ya no querés ver. Las memorias archivadas siguen en el registro y siguen siendo verificables; simplemente dejan de aparecer en listados e inyecciones.

Cada memoria guardada recibe:

  • Huella criptográfica — SHA-256 de su texto, sin separador de dominio, única de su contenido. No confundir con el hash del Project State, que sí es SHA3-256 con separador de dominio CM_PROJECT_STATE_V<schema_version>
  • Número secuencial dentro de tu cuenta (#1, #2, #3...) — tu propia numeración, no una global
  • Tags para organización, asignados por vos o por coincidencia automática con las palabras clave de tus proyectos
  • Categoría (decisión, aprendizaje, milestone, error, estado, interacción, o custom — el valor por defecto si no mandás ninguno)
  • Timestamp del momento de guardado
  • Anclaje on-chain, dentro de unos 30 segundos

Inyectar contexto

Antes de empezar una conversación con cualquier IA, ChainMemory puede inyectar el contexto que elijas en el campo de texto del chat, para que la conversación nueva arranque con lo que las anteriores dejaron establecido.

Cómo funciona

  1. Click en el botón flotante "Inject memory" en cualquier plataforma soportada
  2. El panel lista tus memorias, filtrables por proyecto, con una estimación de tokens en cada una
  3. Seleccionás las que querés y confirmás
  4. El texto se inserta al principio del campo del chat. Si el campo de la plataforma no puede detectarse — raro, y pasa cuando una plataforma cambia su HTML — el texto se copia al portapapeles

La inyección es optimista: el texto llega enseguida y el pago on-chain se confirma en segundo plano. Cuesta 0.1 AIC por inyección, sin importar cuántas memorias hayas seleccionado, hasta 50. Si tu saldo no alcanza, el panel te ofrece cargar en el faucet antes de cobrarte.

Cotizala primero Desde el servidor MCP o la API podés llamar a quote_inject para ver el costo exacto, qué ids existen y si tu saldo alcanza — sin cargo — antes de pagar la inyección.

Project State desde la extensión

Un clic inyecta el estado consolidado de tu proyecto en el chat: no una pila de memorias, sino la vista estructurada que se construyó con ellas. Lo que viaja es lo que está vigente:

  • Visión, fase y foco actual — hacia dónde va el proyecto y en qué está trabajando ahora
  • Decisiones vigentes — las superseded se omiten, con un contador para que sepas que existen
  • Riesgos abiertos con su severidad — los cerrados no se inyectan
  • Prioridades activas, ordenadas por score
  • Constraints y vocabulario clave del proyecto
  • Su anclaje on-chain — bloque, transacción y un state_hash abreviado, para que el modelo reciba la prueba junto con el contenido

El estado inyectado tiene un tope de 7.000 caracteres para que entre en el campo de texto de todas las plataformas soportadas, e inyectarlo es gratis. La historia completa — decisiones superseded, riesgos cerrados, milestones, métricas — queda en el Project State y viaja por el servidor MCP o la API.

La extensión lee el estado; no lo construye Consolidar memorias en un Project State lo hace un modelo de IA a través del servidor MCP o la API — es la arquitectura "el cliente consolida, la cadena verifica". Desde la extensión podés inyectar un estado existente, no crear uno. El nombre del proyecto se configura en Settings → Project Brain; no hay uno por defecto.

Plataformas soportadas

La extensión inyecta sus botones en estas cuatro plataformas:

  • ChatGPT — chatgpt.com y chat.openai.com
  • Claude — claude.ai
  • Gemini — gemini.google.com
  • Perplexity — perplexity.ai (guardado limitado a la última respuesta)
Otros clientes, por el servidor MCP La extensión es una de las tres formas de acceso, y cubre los chats web. Cualquier cliente compatible con MCP llega a la misma cuenta y a las mismas memorias sin la extensión: Claude Desktop, Cursor, Hermes Agent y OpenClaw, entre otros. Ver Servidor MCP.

Permisos que pide la extensión, y para qué:

PermisoPara qué es
storageguardar tu API key y tus preferencias
clipboardWritealternativa cuando el campo de texto de una plataforma no puede detectarse
acceso a las cuatro plataformasinsertar el botón de Guardar y el panel de memorias en la página
acceso a chainmemory.ai, api.chainmemory.ai, faucet.chainmemory.aihablar con la API y abrir el faucet

Sin analytics, sin telemetría, sin publicidad. Tu API key se guarda en chrome.storage.sync, que Chrome sincroniza entre los navegadores donde iniciaste sesión con tu cuenta de Google.

SERVIDOR MCP

Configuración

El servidor MCP le permite a Claude Desktop, Cursor, Windsurf, Hermes Agent, OpenClaw y cualquier cliente compatible con MCP usar ChainMemory como herramienta nativa.

Instalación

Agregá esta configuración a tu claude_desktop_config.json:

JSON
{
  "mcpServers": {
    "chainmemory": {
      "command": "npx",
      "args": ["-y", "chainmemory-mcp"],
      "env": {
        "CHAINMEMORY_API_KEY": "tu-api-key"
      }
    }
  }
}

Reiniciá el cliente después. Publicar una versión nueva en npm no actualiza a los clientes que ya están corriendo: el paquete se descarga cuando el cliente arranca.

Conseguir tu API Key En la extensión Chrome, click en "View key" para ver y copiar la clave completa. La pestaña Settings la muestra abreviada, sólo para identificarla.
Servicio externo ChainMemory es un protocolo independiente. No es parte de Claude, ChatGPT, Cursor ni de ningún proveedor de IA. Cualquier cliente compatible con MCP se conecta con una API key. Tus memorias son tuyas, no del proveedor de IA.

Herramientas disponibles

La versión actual expone 36 herramientas. Leer es gratis; las operaciones que cuestan AIC están marcadas. Ver Costos para la tabla completa.

Memoria

HerramientaQué haceCosto
chainmemory_rememberGuarda una memoria vinculada a un proyecto, con tags, categoría e importancia (1–10)0.001 AIC + almacenamiento
chainmemory_recallDevuelve tus memorias más recientes, de la más nueva a la más vieja. No busca: lista. Devuelve vistas previas de 80 caracteresgratis
search_memoriesBúsqueda semántica sobre tus memorias, devolviendo el texto completo de cada coincidenciagratis
get_memoryLee una memoria completa, descifrada desde la cadena, con verificación de integridad contra su hash ancladogratis
list_memories_filteredLista memorias por proyecto y estado de archivado. Devuelve vistas previas de 80 caracteresgratis
update_memory_tagsReemplaza los tags de una memoriagratis
archive_memory · unarchive_memoryOculta una memoria de listados e inyecciones, o la restaura. En los dos casos sigue en el registrogratis
chainmemory_sealSella una memoria de forma permanente on-chain para que ya no pueda modificarse. Requiere clave de wallet0.001 AIC

Verificación

HerramientaQué haceCosto
get_memory_proofLa prueba de anclaje compartible de una memoria: su event_hash y sus coordenadas on-chain. Un tercero la verifica sin tu API key, y el contenido nunca se exponegratis
verify_project_statePrueba pública y sin autenticación de un Project State: cada versión anclada con su state_hash, id de ancla, transacción y bloque, más cómo verificarlo vos mismo en el contratogratis
audit_memoryAuditoría forense de una memoria: recomputa su hash desde el contenido guardado y lo compara contra el anclado0.1 AIC — gratis con dry_run
audit_stateAuditoría completa de un Project State: recomputa el state_hash con el motor determinista y devuelve el ancla más el historial de versiones5 AIC — gratis con dry_run

Project State

HerramientaQué haceCosto
get_project_stateEl estado consolidado: visión, fase, foco actual, decisiones, riesgos, supuestos, preguntas abiertas, prioridades, constraints, métricas, vocabulario y entorno de trabajo — más su state_hash y su ancla on-chain. Con include_roles: false omite el texto de los contratos de rolgratis
update_project_statePropone operaciones de la gramática de 29 ops. El servidor valida, las aplica con el builder determinista, recomputa el hash y persiste0.05 AIC + 0.005 por op aplicada

Verifiable Role Contracts

HerramientaQué haceCosto
list_role_contractsLista los roles definidos en un proyecto con su versión y estado. Llamala primero: los ids de rol no se adivinangratis
get_role_contractLee el contrato de un rol: propósito, reglas con sus checks y severidad, protocolo de trabajo. Acepta version para auditar uno anteriorgratis
assume_roleAbre una sesión de rol auditada bajo un contrato activo. Fija el hash del contrato y el state_hash del Brain, y entrega el entorno de trabajo declarado por el dueño0.001 AIC
release_roleCierra una sesión con un resumen de lo hecho y lo pendiente. Las sesiones se auto-liberan a los 60 minutosgratis
list_role_sessions · get_role_sessionEl rastro de auditoría: quién asumió qué rol, cuándo, cómo cerró, y a qué hashes quedó atada la sesióngratis

Inyección

HerramientaQué haceCosto
quote_injectCotiza una inyección antes de pagarla: qué ids existen y cuáles no, total de caracteres, costo exacto con su reparto, y si tu saldo alcanzagratis
inject_memoriesInyecta hasta 50 memorias en la conversación actual. Optimista: el texto vuelve enseguida y el pago se confirma en segundo plano0.1 AIC por llamada
get_inject_balance · get_inject_historyTu saldo de AIC y para cuántas inyecciones alcanza; el historial de inyecciones con su costogratis
get_my_contextTu memoria reciente como contexto portable listo para inyectar, entre todas las plataformasgratis

Proyectos e identidad

HerramientaQué haceCosto
list_projects · create_project · delete_projectGestión de tus proyectos y sus palabras clave de auto-etiquetadogratis
list_project_templates · add_project_from_templatePlantillas incluidas: general, development, blockchain, business, personal, researchgratis
chainmemory_registerRegistra una identidad de IA en la cadena. Necesario una vez antes de escribir memoriasgratis
chainmemory_profile · chainmemory_statsEl perfil de tu identidad y las estadísticas de la redgratis

Consolidación autónoma

Cualquier cliente de IA puede consolidar el estado del proyecto de forma autónoma con update_project_state. Ésta es la arquitectura "el cliente consolida, la cadena verifica": el modelo propone, el servidor valida, y recién ahí se convierte en estado.

1

Leer el estado actual

Llamar a get_project_state para cargar el estado consolidado y su marca de agua consolidated_until_event.

2

Analizar lo nuevo

Con list_memories_filtered o search_memories, leer las memorias creadas después de la marca de agua para identificar qué cambió.

3

Proponer las operaciones

Armar un array de operaciones de la gramática de 29 ops y enviarlo por update_project_state.

4

El servidor valida y persiste

Cada operación se valida contra la gramática, se aplica con el builder determinista, se computa el nuevo state_hash (SHA3-256), se vincula la evidencia con árboles Merkle, y se persiste la versión. Las operaciones inválidas se rechazan individualmente — las válidas se aplican igual.

Gramática de operaciones (29 ops)

Cada operación tiene un tipo (op) y sus propios argumentos. Usá evidence_memory_ids — un array de números de memoria — para vincular la evidencia que la respalda; el servidor resuelve los event hashes automáticamente.

OperaciónCampos requeridosDescripción
add_decisiontitle, statementRegistra una decisión. Sin status se crea como proposed
set_decision_statusid, toCambia el estado (proposed / confirmed / superseded)
supersede_decisionid, by_idMarca una decisión como reemplazada por otra
add_milestonetitleRegistra un milestone
set_milestone_statusid, toActualiza su estado
add_risktitle, severityDocumenta un riesgo
set_risk_statusid, toCambia su estado (open / closed)
add_assumptionstatementRegistra un supuesto
invalidate_assumptionidMarca un supuesto como inválido
add_open_questionquestionRegistra una pregunta abierta
answer_open_questionid, answerLa responde
add_prioritytitle, priority_scoreAgrega un ítem priorizado
set_priority_statusid, toCambia su estado (active / done)
reorder_priorityid, priority_scoreCambia su score
set_focusvalueActualiza el foco actual
set_phasevalueActualiza la fase del proyecto
set_visionstatementActualiza la visión
add_vocabulary · update_vocabularyterm, definitionDefine o redefine un término
add_constraintstatementAgrega una restricción
remove_constraintidQuita una restricción
set_metricname, valueFija o actualiza una métrica. No acepta evidence_memory_ids
add_env_host · add_env_service · add_env_repo · add_env_rulevarían según el tipoDescriben dónde y cómo trabaja el dueño: hosts, servicios, repositorios y reglas operativas
set_env_status · verify_env · supersede_envidActualizan, confirman como vigente, o retiran un ítem del entorno
Los nombres de campo son exactos La causa más común de rechazo es un nombre de argumento equivocado. set_metric usa name, no key. supersede_decision usa by_id, no superseded_by. Y set_metric rechaza evidence_memory_ids, que el resto de las operaciones aditivas sí acepta. Como el fee tiene una base fija por llamada, mandar todo en una sola llamada sale más barato que descubrir firmas de a una.
Entorno: topología, nunca credenciales Las siete operaciones *_env_* describen dónde trabaja el dueño para que una IA lo sepa desde su primer mensaje. Guardan sólo topología: hosts, puertos, rutas, reglas. El servidor rechaza credenciales, claves y contraseñas.

Ejemplo

JSON — llamada a update_project_state
{
  "project": "mi-proyecto",
  "ops": [
    {
      "op": "add_decision",
      "title": "Migrar a PostgreSQL",
      "statement": "SQLite no soporta escrituras concurrentes a la escala actual",
      "evidence_memory_ids": [142, 145]
    },
    {
      "op": "set_metric",
      "name": "db_migration_status",
      "value": "planning"
    },
    {
      "op": "add_milestone",
      "title": "Migración a PostgreSQL aprobada por el equipo",
      "status": "done",
      "evidence_memory_ids": [145]
    }
  ],
  "consolidated_until_event": 150
}
Procesamiento resiliente Las operaciones se aplican de a una. Si una falla la validación, se rechaza y el resto se aplica igual. La respuesta incluye applied_count y el detalle de cada rechazo. Sólo se cobran las operaciones aplicadas, y si el estado resultante es idéntico al anterior, no se cobra nada.

Flujo de trabajo

El flujo típico con MCP:

1

Inicio de sesión

Pedile a tu IA que cargue el contexto del proyecto. Llama a get_project_state y arranca sabiendo en qué estás trabajando. Nada se inyecta solo: el modelo decide cuándo usar las herramientas.

2

Trabajo normal

Trabajás con tu IA como siempre. Cuando pasa algo importante — una decisión, un descubrimiento, un cambio de arquitectura — guarda la memoria con chainmemory_remember.

3

Consolidación

Al final, la IA propone operaciones con update_project_state: qué se decidió, qué riesgo se abrió, qué prioridad cambió. Eso es lo que convierte una pila de conversaciones en estado.

4

Continuidad

En la sesión siguiente, en este modelo o en cualquier otro, el estado consolidado ya está. No se pierde nada en el medio.

Flujos avanzados

Claude Desktop — sesiones de arquitectura

Claude es muy bueno en diseño de alto nivel. Usá ChainMemory para preservar las decisiones de arquitectura entre sesiones:

Patrón de prompt — Claude Desktop
"Antes de empezar, cargá el estado de mi proyecto desde ChainMemory.
Después diseñemos el sistema de autenticación.

Cuando decidamos, guardá las decisiones clave con tags 'architecture'
y 'auth'. Usá importancia 9 para todo lo que afecte a otros
miembros del equipo, y después propone las operaciones para
consolidar el estado."

Claude lee el estado con get_project_state, trabaja con vos en el diseño, guarda las decisiones con chainmemory_remember, y propone la consolidación con update_project_state. En la sesión siguiente, la arquitectura de auth ya es parte del estado.

Cursor — código con memoria

La integración MCP de Cursor le permite a tu IA de código recordar por qué el código se escribió de cierta manera. La configuración es la misma que para Claude Desktop, en settings.json.

Un flujo efectivo:

  • Inicio de sesión — "Cargá el estado del proyecto": decisiones vigentes, riesgos abiertos y prioridades
  • Durante el desarrollo — "Guardá: implementé el handler de webhooks con reintentos, 3 intentos con backoff exponencial"
  • Corrección de bugs — "Guardá: arreglé la race condition en el procesamiento de pagos — el webhook de Stripe llegaba antes de que la transacción de DB commiteara"
  • Fin de sesión — "Consolidá lo que cambió hoy", que propone las operaciones y actualiza el estado

Patrón de memoria agéntica

El patrón más potente de MCP es la memoria agéntica, donde la IA gestiona su propio conocimiento:

System prompt para memoria agéntica
Tenés acceso a ChainMemory por MCP. Seguí estas reglas:

1. Al inicio de sesión: llamá a get_project_state para cargar el
   estado consolidado del proyecto.
2. Cuando tomes una decisión significativa: guardala con
   chainmemory_remember.
   - Incluí POR QUÉ elegiste ese camino
   - Etiquetala con el dominio relevante
   - Importancia 1-10: usá 7 o más para decisiones, 5 para
     observaciones
3. Cuando completes un milestone: guardalo y decí qué sigue.
4. Cuando identifiques un riesgo: guardalo con su severidad.
5. Al cerrar la sesión: proponé la consolidación con
   update_project_state. No cierres ni supersedas ítems
   existentes sin aprobación del dueño: agregá en estado
   propuesto y dejá que un humano confirme.
Traspaso entre herramientas El mismo proyecto de ChainMemory funciona en Claude, Cursor, Windsurf, Hermes Agent, OpenClaw y cualquier cliente compatible con MCP. Diseñás en uno, implementás en otro, revisás en un tercero — todos compartiendo el mismo estado. Ver Sistemas multi-agente.
Trabajar bajo un contrato de rol Para equipos y trabajo auditado, ChainMemory soporta Verifiable Role Contracts: reglas escritas por humanos y firmadas por el dueño, que un modelo lee antes de trabajar. assume_role abre una sesión atada al hash del contrato y al hash del estado, y release_role la cierra con un resumen. El modelo lee el contrato; nunca lo escribe.

API REST

Contrato legible por máquinas: OpenAPI 3.1. Orientación para LLMs: api.chainmemory.ai/llms.txt.

Autenticación

Todas las llamadas a la API requieren autenticación mediante API Key en el header:

HTTP
x-api-key: tu-api-key

Base URL: https://api.chainmemory.ai/v1

Seguridad Nunca expongas tu API Key en código frontend o repositorios públicos. Usala solo en backend o en variables de entorno.

Memorias

POST /v1/memory

Crea una nueva memoria.

bash
curl -X POST https://api.chainmemory.ai/v1/memory \
  -H "x-api-key: tu-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "summary": "Decidimos usar PostgreSQL en vez de MongoDB",
    "category": "decision",
    "importance": 8,
    "platform": "manual"
  }'
javascript
const res = await fetch('https://api.chainmemory.ai/v1/memory', {
  method: 'POST',
  headers: {
    'x-api-key': 'tu-api-key',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    summary: 'Decidimos usar PostgreSQL en vez de MongoDB',
    category: 'decision',
    importance: 8,
    platform: 'api'
  })
});
const memory = await res.json();
// { id: 207, hash: '0x4f2a...', memory_number: 42 }
python
import requests

res = requests.post(
    'https://api.chainmemory.ai/v1/memory',
    headers={'x-api-key': 'tu-api-key'},
    json={
        'summary': 'Decidimos usar PostgreSQL en vez de MongoDB',
        'category': 'decision',
        'importance': 8,
        'platform': 'api'
    }
)
memory = res.json()
# {'id': 207, 'hash': '0x4f2a...', 'memory_number': 42}

Parámetros

ParámetroTipoDescripción
summary*stringTexto de la memoria. El único campo obligatorio
projectstringProyecto al que vincularla. Opcional: sin esto, los tags se infieren de las palabras clave de tus proyectos
tagsstring[]Tags para organización (máximo 10)
platformstringEtiqueta de origen: manual, extension, mcp, api. Por defecto api
categorystringDECISION, LEARNING, INTERACTION, STATE, ERROR, MILESTONE o CUSTOM. Por defecto CUSTOM
importancenumberDe 1 a 10, acotado a ese rango. Por defecto 5
GET /v1/memories/list

Lista memorias con filtros opcionales.

ParámetroTipoDescripción
projectstringFiltrar por proyecto
tagsstringFiltrar por tags (separados por coma)
searchstringBúsqueda en contenido
limitnumberCantidad máxima (default: 20)
offsetnumberPaginación
GET /v1/memories/search

Búsqueda semántica por contenido, tags, proyecto o rango de fechas.

Proyectos

GET /v1/projects

Lista todos los proyectos del usuario.

GET /v1/project/:name/state

Obtiene el estado consolidado del proyecto (decisiones, hitos, riesgos, prioridades, preguntas abiertas, entorno).

Respuesta (recortada)
{
  "project": "sistema-pagos",
  "schema_version": 2,
  "version": 4,
  "state_hash": "0x3f8c2a…e91d",
  "generated_at": "2026-09-13T22:02:35.000Z",
  "anchor": { "status": "anchored", "onchain_anchor_id": 12, "tx_hash": "0x…", "block_number": 681919 },
  "state": {
    "phase": "beta",
    "current_focus": "Revisión PCI antes de abrir a los primeros tenants",
    "decisions": [
      { "id": "dec_0002", "title": "PostgreSQL con RLS para multi-tenancy",
        "statement": "La seguridad por fila saca el filtrado por tenant de la capa de aplicación",
        "status": "confirmed", "superseded_by": null,
        "evidence_root": "0x9a41…c07e", "created_version": 2, "updated_version": 3 }
    ],
    "milestones": [
      { "id": "mil_0001", "title": "Schema de BD", "status": "done",
        "evidence_root": "0x5b2d…81fa", "created_version": 1, "updated_version": 2 }
    ],
    "risks": [
      { "id": "risk_0001", "title": "Performance de RLS con 100K tenants", "severity": "med", "status": "open",
        "evidence_root": "0xd7e0…2a19", "created_version": 3, "updated_version": 3 }
    ],
    "state_meta": { "version": 4, "consolidated_until_event": 150, "previous_state_hash": "0x7b2e…f4c0" }
  }
}

Siempre la versión más reciente; requiere la API key del dueño. Los valores de severidad son low, med y high.

Inyección

POST /v1/inject

Obtiene memorias relevantes formateadas para inyección en un prompt.

ParámetroTipoDescripción
memory_ids*number[]Tus números de memoria (#N), de 1 a 50. Las archivadas y en cuarentena se excluyen solas
project_filterstringEtiqueta de proyecto opcional que queda registrada con la inyección
target_platformstringEtiqueta de destino opcional (chatgpt, claude, gemini...)
optimisticbooleanDevolver el texto enseguida y confirmar el pago on-chain en segundo plano

Respuesta

El endpoint devuelve las memorias seleccionadas formateadas para inyección. Cada memoria llega con su número visible para el usuario y una referencia de verificación, de modo que una IA puede citar la memoria exacta detrás de cualquier afirmación — y vos podés rastrear esa cita hasta su evidencia on-chain. Una afirmación deja de ser "confiá en mí" y pasa a ser "acá está la memoria, verificala vos mismo."

Verificación

GET /v1/project/:name/state/anchor

Verifica el ancla on-chain del estado de un proyecto. Endpoint público, no requiere autenticación.

ParámetroTipoDescripción
versionnumberVersión específica (default: última)
Respuesta
{
  "project": "chainmemory",
  "projectId": "0x77f7d980...",
  "version": 3,
  "state_hash": "a7b3c9f2...",
  "anchor": {
    "status": "anchored",
    "tx_hash": "0xce55a800a2a4e30b...",
    "block_number": 123539,
    "contract": "0xa7A8BA51950255b3e223a6745597C67009Fe7875"
  }
}
Verificación independiente Cualquier persona puede verificar el estado llamando a este endpoint y comparando el state_hash con el registrado en el contrato on-chain. No necesita cuenta ni API key.

Códigos de error

CódigoSignificadoSolución
401API Key inválida o ausenteVerificá tu header x-api-key
402insufficient_aic — saldo insuficiente para una operación pagaLa respuesta incluye balance_aic, required_aic y faucet_url. Cargá en el faucet
403Sin permisos para este recursoVerificá que el proyecto te pertenece
404Recurso no encontradoVerificá el nombre del proyecto o ID
422evidence_unresolved — una memoria citada no existe, no es tuya o todavía no está ancladaEsperá ~30 s al anclaje o corregí los números de memoria. No se escribió ni se cobró nada
429Demasiadas peticiones desde tu IPEsperá y reintentá. El único límite aplicado hoy es 30 peticiones por segundo por IP en el proxy; los requests por minuto por plan todavía no se aplican (ver Límites)
429key_creation_limit — POST /v1/keysComo máximo 3 claves nuevas por IP y 100 en total cada 24 horas. La respuesta incluye retry_after_seconds
500Error internoReintentá. Si persiste, contactá soporte

Equivalencia de funciones: Extensión ↔ MCP ↔ API

No todas las funciones están disponibles en todos los métodos de integración. Esta tabla muestra qué hay disponible dónde:

FunciónExtensiónMCPAPI REST
Guardar memoria✓ 1-clic✓ chainmemory_remember✓ POST /v1/memory
Recordar memorias✓ Lista✓ chainmemory_recall✓ GET /v1/memories/list
Buscar memorias~ Filtro básico✓ search_memories✓ GET /v1/memories/search
Inyectar contexto✓ Auto-inyección✓ inject_memories✓ POST /v1/inject
Ver Project State✓ Project Brain✓ get_project_state✓ GET /v1/project/:name/state
Seal (anclar on-chain)✗ No disponible✓ chainmemory_seal✓ POST /v1/seal/:id
Estadísticas de cuenta✓ Dashboard✓ chainmemory_stats✓ GET /v1/stats
Info de perfil✓ Configuración✓ chainmemory_profile✓ GET /v1/profile
Listar proyectos✓ Selector✓ list_projects✓ GET /v1/projects
Crear proyecto✓ New Project✓ create_project✓ POST /v1/projects
Verificar ancla~ Vía Explorer✓ verify_project_state, get_memory_proof✓ GET /v1/project/:name/state/anchor
Archivar memoria✓ archive_memory✓ POST /v1/memories/:id/archive
Actualizar tags✓ update_memory_tags✓ PUT /v1/memories/:id/tags
Paridad total de la API Todas las funciones de esta tabla se pueden usar desde la API REST. Las brechas que quedan están del lado de la Extensión: no sella memorias, y su búsqueda es un filtro local sobre la lista, no la búsqueda semántica. Las dos están disponibles por el servidor MCP y por la API.

Confianza y Gobierno

Cada memoria lleva un estado de confianza desde el momento en que se escribe: trusted, tentative (marcada al escribirse por reglas de evaluación deterministas), o quarantined (condenada por el dueño). Las tentative siempre se entregan marcadas — el agente ve la marca y decide. Las quarantined se excluyen de context, inject, quotes y consultas al oracle, mientras su huella on-chain permanece como evidencia inmutable. Todas las respuestas de lectura incluyen el campo trust.

POST /v1/memories/:id/trust

Gobernar el estado de confianza de una memoria. Solo el dueño.

bash
curl -X POST https://api.chainmemory.ai/v1/memories/487/trust \
  -H "x-api-key: tu-api-key" \
  -H "Content-Type: application/json" \
  -d '{"action": "quarantine"}'

Acciones: approve → trusted · quarantine → quarantined · tentative → tentative. La respuesta incluye el estado anterior para auditoría.

GET /v1/memory/:id/forensics

Biografía completa de una memoria como línea de tiempo ordenada. Solo el dueño.

bash
curl https://api.chainmemory.ai/v1/memory/485/forensics \
  -H "x-api-key: tu-api-key"

Eventos: born, trust, batched, checkpoint_anchored, recalled (cada lectura, con endpoint y consulta), injected (cada entrega, con plataforma destino), cited_as_evidence (ítems del Project Brain que citan esta memoria). Incluye contadores con verificación cruzada y prueba de anclaje on-chain. Responde la pregunta forense: qué memoria causó qué, cuándo entró, quién la leyó y a dónde llegó.

POST /v1/project/:name/state/rollback

Restaurar el estado de un proyecto a una versión anterior, de forma verificable. Fee: 0.1 AIC

bash
curl -X POST https://api.chainmemory.ai/v1/project/miproyecto/state/rollback \
  -H "x-api-key: tu-api-key" \
  -H "Content-Type: application/json" \
  -d '{"to_version": 35}'

Restauración append-only: volver a la versión N jamás borra nada — crea una versión nueva cuyo contenido es byte-idéntico a N. Como los hashes se computan sobre bytes canónicos, el hash de la versión nueva es igual al ya anclado on-chain para N: la fidelidad de la restauración es un hecho matemático, no una promesa. Antes de restaurar, el servidor recomputa el hash del contenido almacenado y se niega (HTTP 409) si no coincide — la corrupción nunca puede restaurarse. La historia jamás se muta.

EQUIPOS Y ORGANIZACIONES

Una clave personal pertenece a una persona. Una organización permite que un equipo comparta un presupuesto, un conjunto de proyectos y un mismo rastro de auditoría, mientras cada miembro sigue trabajando con una clave propia. Todo lo que un miembro crea —memorias, proyectos, inyecciones— es rastreable hasta su correo y su rol, y retirarle el acceso es una sola llamada.

Las organizaciones están disponibles en los planes Team y Enterprise. Los nueve endpoints de abajo son toda la superficie: no hay panel de gestión, y para un comprador técnico eso suele ser una ventaja.

Flujo de activación

Una organización no queda operativa en el momento de crearse, y es a propósito:

  1. Crearla. POST /v1/org con tu clave personal. Existe de inmediato, con status: "suspended" y ninguna clave activa.
  2. Revisarla. GET /v1/org y GET /v1/org/members responden 200 desde el principio. Puedes ver lo que creaste antes de pagarlo.
  3. Pagar. Hoy se gestiona fuera de la API; la activación se aplica cuando el pago se acredita.
  4. Emitir claves e invitar. Solo después de la activación. Antes, ambas responden 402 organization_not_active.

Ese 402 es comportamiento esperado, no un fallo: las lecturas siguen abiertas en una organización suspendida, y todo lo que concede acceso no. La regla funciona también al revés: si se cancela la suscripción, la organización se suspende y todas las claves del equipo dejan de funcionar a la vez, sin necesidad de revocarlas una por una.

Claves y roles

PrefijoTipoLigada aCaduca
aic_PersonalUna cuenta individualNo
aicm_MiembroUn miembro de la organizaciónNo
aicp_ProyectoUn proyecto concreto, con rol limitadoOpcional, en días

Una clave de miembro gasta el presupuesto de la organización y lleva la identidad de esa persona. Una clave de proyecto está pensada para automatización: alcance a un solo proyecto, permisos limitados por role_cap y, si quieres, vida corta. La cantidad de claves de proyecto activas depende del plan: Team tiene tope, Enterprise no.

Rolreadmemberskeys
owner
admin
developernono
viewernono

Una organización conserva siempre al menos un owner. Degradar al último devuelve 409, y un owner no se puede eliminar hasta cambiarle antes el rol. La API se niega a dejar un equipo sin nadie que pueda administrarlo.

Endpoints

MétodoRutaPermisoQué hace
POST/v1/orgclave personalCrear la organización
GET/v1/orgcualquier clave de orgLeer estado y plan
POST/v1/org/invitemembersAñadir un miembro
GET/v1/org/membersreadListar miembros
PATCH/v1/org/members/:id/rolemembersCambiar el rol de un miembro
DELETE/v1/org/members/:idmembersQuitar un miembro y revocar sus claves
POST/v1/org/keyskeysEmitir clave de miembro o de proyecto
GET/v1/org/keyskeysListar claves activas
DELETE/v1/org/keys/:idkeysRevocar una clave

POST /v1/org

Se autentica con tu clave personal. Una clave puede poseer una organización.

CampoObligatorioNotas
org_slug3–40 caracteres: minúsculas, dígitos y guiones; no puede empezar ni terminar en guion
nameNombre visible
owner_emailQueda como primer miembro, con rol owner
tiernoteam o enterprise
curl -X POST https://api.chainmemory.ai/v1/org \
  -H "x-api-key: $CHAINMEMORY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"org_slug":"acme-labs","name":"Acme Labs","owner_email":"ada@acme.dev"}'

Devuelve org_id, org_slug, tier y owner_member_id. Llamarlo dos veces con la misma clave devuelve 409.

POST /v1/org/invite

Añade un miembro. El correo debe ser válido y único dentro de la organización; repetirlo devuelve 409.

curl -X POST https://api.chainmemory.ai/v1/org/invite \
  -H "x-api-key: $ORG_KEY" \
  -H "Content-Type: application/json" \
  -d '{"email":"grace@acme.dev","role":"developer"}'

POST /v1/org/keys

CampoObligatorio enNotas
typeambosmember o project
member_idmemberSale de GET /v1/org/members
project_slugprojectEl único proyecto que la clave puede tocar
role_capnoTecho de lo que la clave puede hacer
expires_daysnoCaducidad, para claves de proyecto

La clave completa se devuelve una sola vez, en esta respuesta, y nunca más. Después, GET /v1/org/keys muestra únicamente su prefijo de 12 caracteres. Guárdala cuando la recibas.

Un miembro tiene una clave activa a la vez: emitir una segunda devuelve 409 y te pide revocar la anterior. Superar el tope de claves de proyecto de tu plan devuelve 402, con el tier y el limit vigentes en la respuesta.

DELETE /v1/org/members/:id

Quita al miembro y revoca sus claves en la misma operación; la respuesta informa cuántas con keys_revoked. Lo que esa persona ya escribió permanece en la organización, atribuido a ella. Termina el acceso, no la historia.

Errores

CódigoErrorSignificado
401no_org_contextLa clave no es de organización (aicm_/aicp_) ni la personal que posee una
402organization_not_activeLa organización está suspendida y la operación no es de lectura
402project key limit reachedTope del plan; la respuesta trae tier y limit
403forbiddenEl rol no tiene el permiso; la respuesta indica tu role y el required
404member not found · key not found or not activeId equivocado, o ya revocada
409cannot demote the last ownerPromueve otro owner primero
409cannot remove an ownerCámbiale el rol y luego elimínalo

Los errores de permisos siempre dicen qué tenías y qué hacía falta, así que una llamada fallida trae consigo la información para corregirla.

CONTRATOS DE ROL

Un Contrato de Rol Verificable (VRC) es un documento firmado que declara para qué existe un rol, qué reglas lo obligan y cómo debe trabajar. Un modelo lo lee y opera bajo él; nunca lo escribe. Cada vez que se asume un rol, el sistema abre una sesión auditada anclada a la versión del contrato, a su hash y al estado del proyecto en ese instante.

El objetivo no es lograr que un modelo se porte bien. Es dejar constancia de a qué estaba obligado, para poder responder meses después a una pregunta concreta: bajo qué reglas se tomó esta decisión, y contra qué versión del estado del proyecto.

Contratos

Los contratos los redacta una persona y los firma el dueño del proyecto. Solo puede asumirse un contrato con estado active; los borradores y las versiones retiradas se leen pero no se usan. Cada uno lleva un contract_hash, de modo que una sesión puede demostrar exactamente qué texto la gobernó, incluso después de que el contrato se modifique.

MétodoRutaQué hace
GET/v1/project/:name/rolesListar los roles del proyecto, con estado y versión
GET/v1/project/:name/role/:roleIdLeer un contrato completo: propósito, reglas, severidad, protocolo

Los identificadores de rol no son adivinables. Lístalos antes de asumir uno: equivocarse cuesta una llamada fallida.

Sesiones auditadas

MétodoRutaQué hace
POST/v1/project/:name/role/:roleId/assumeAbrir una sesión bajo el contrato
POST/v1/session/:id/releaseCerrarla con un resumen
GET/v1/session/:idLeer una sesión y todo aquello a lo que quedó anclada
GET/v1/project/:name/sessionsEl rastro de auditoría completo del proyecto

POST /v1/project/:name/role/:roleId/assume

Tarifa: 0,001 AIC. El campo opcional platform (hasta 64 caracteres) registra el ejecutor — claude, chatgpt, gemini. Un mismo rol puede correr en varios ejecutores; la notación es rol@ejecutor, y un comportamiento distinto es un rol distinto con su propio contrato.

curl -X POST https://api.chainmemory.ai/v1/project/mi-proyecto/role/arquitecto/assume \
  -H "x-api-key: $CHAINMEMORY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"platform":"claude"}'

Devuelve 201 con el id de sesión, la contract_version y el contract_hash anclados, la brain_version y el brain_state_hash de ese instante, un event_hash y auto_release_minutes: 60.

La respuesta trae además el entorno de trabajo declarado por el dueño: hosts, servicios, repositorios y reglas operativas, anclados junto al hash de estado. Un modelo que asume un rol sabe desde su primer mensaje dónde corre cada cosa y cómo se opera, en vez de pedir datos de conexión que ya están registrados.

CódigoErrorSignificado
404role contract not foundEse rol no existe en el proyecto
409contract not activeSolo un contrato firmado puede asumirse
409role already assumed in an open sessionUna sesión abierta por rol; la respuesta indica cuál y cómo liberarla
402insufficient_aicSaldo por debajo de la tarifa de 0,001 AIC

POST /v1/session/:id/release

Cierra la sesión con un summary de hasta 4000 caracteres: qué se hizo, qué queda pendiente y cuál es el siguiente paso. Una sesión que se deja abierta se libera sola a los 60 minutos, y el registro muestra que cerró por tiempo y no a mano — lo cual ya dice algo sobre cómo terminó el trabajo.

curl -X POST https://api.chainmemory.ai/v1/session/17/release \
  -H "x-api-key: $CHAINMEMORY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"summary":"Infraestructura consolidada. 27 ops aplicadas, 0 rechazadas. Pendiente: allowlist del firewall."}'

Devuelve released_at, release_type y duration_seconds. Liberar dos veces devuelve 409.

El resumen es la parte que todo el mundo se salta y la que rinde después. GET /v1/project/:name/sessions devuelve cada sesión con quién asumió qué rol, en qué plataforma, durante cuánto tiempo y cómo cerró. Ese rastro es la razón de ser de los contratos.

RED

Datos de la red

CampoValor
NetworkChainMemory
Chain ID202604
RPC URLhttps://rpc.chainmemory.ai
MonedaAIC (nativa)
Decimales18
Block time~15 segundos
ConsensoClique PoA (3 signers activos)
Explorerchainmemory.ai/explorer

Contratos desplegados

ContratoDirecciónPropósito
ProjectStateAnchor 0xa7A8BA51950255b3e223a6745597C67009Fe7875 Ancla el state_hash de cada versión del Project State. anchorState(projectId, version, stateHash) lo guarda verbatim y emite StateAnchored; un par (projectId, version) no se puede volver a anclar nunca. Se lee con getStateAnchor(projectId, version) o getAnchorById(anchorId). Acá projectId es keccak256(projectName), y stateHash es el SHA3-256 canónico que calcula el engine: el contrato lo almacena, no lo recalcula. Es el contrato detrás del endpoint público GET /v1/project/:name/state/anchor.
CheckpointAnchor 0x1706946365B455f66B92C05d641c6fDB897D0791 Ancla la raíz Merkle agregada de un grupo de lotes de memorias, con metadata de auditoría: inicio y fin de época, cantidad de lotes, motivo del disparo y hash del snapshot. Emite CheckpointAnchored; se lee con getCheckpoint(checkpointId). Una vez anclado, un checkpoint es inmutable.
MemoryV2 (active) 0xE84224e2660fd620aA6d09522718Ae0e5cF33F7d Contrato de memorias activo: todas las memorias nuevas se escriben acá. Verificable de forma independiente por hash contra el registro on-chain.
AIMemoryRegistry (v1, legacy) 0x7a50ed017E175Eb4549d3BDd7DBCF319F9f30160 Registro global de hashes de memorias de IA. Permite que cualquier memoria sea verificada independientemente comparando su hash SHA-256 contra el registro on-chain.
AIIdentityProtocol 0xe8E195ba416Fb25F4FC3d0E7908ff9e8666dbb4A Capa de identidad para agentes de IA. Registra instancias de IA con su tipo de modelo, capacidades y propiedad, habilitando trust scoring y rastreo de procedencia entre interacciones.

El Token AIC es la moneda nativa de la red (no es un contrato ERC-20). Se usa para pagar el fee de protocolo de toda operación de escritura. Cada fee se parte por la mitad: el 50% se quema de forma permanente y el 50% va a la tesorería del ecosistema.

Fee Schedule v1.0

Toda operación de escritura paga un fee de protocolo. El 50% se quema de forma permanente (presión deflacionaria) y el 50% va a la tesorería. Las lecturas y el registro de identidad son gratis.

OperaciónFee (AIC)QuemaTesorería
Inyectar contexto — enviar memorias a un LLM0.10.050.05
Anclar estado — anclar el project state on-chain0.10.050.05
Auditar memoria — verificar su integridad (gratis con dry_run)0.10.050.05
Consulta al oráculo ciego — consulta derivada con prueba0.10.050.05
Consolidación del Brain — Project Brain state/ops0.05 + 0.005/op50%50%
Auditar estado — auditoría completa del proyecto (gratis con dry_run)5.02.52.5
Escribir memoria — guardar una memoria0.0010.00050.0005
Sellar memoria — hacerla inmutable0.0010.00050.0005
Registrar IA — crear identidad de IAGratis
Todas las lecturas — listar, buscar, verificarGratis
Economía del faucet Con 1 AIC del faucet podés hacer: 10 inyecciones, 10 anclajes, 8 consolidaciones del Brain (15 ops cada una), o alrededor de 1.000 escrituras de memoria contando solo el fee de protocolo de 0,001 AIC. Guardar una memoria también paga el almacenamiento on-chain, que crece con su longitud, así que la cantidad real de memorias por AIC es menor y depende de cuán largas sean. El registro y las lecturas son siempre gratis.
Costos de gas Anclar un estado paga un fee de protocolo de 0,1 AIC: 0,05 se queman y 0,05 van a la tesorería. A eso se suma el gas de red de la transacción. Con 1 AIC del faucet alcanza para 10 anclajes.

Conectar MetaMask

Para agregar ChainMemory a MetaMask:

  1. Ir a chainmemory.ai/network
  2. Click en "Add ChainMemory to MetaMask"
  3. Confirmar en MetaMask

O agregala manualmente con los datos de la tabla anterior.

Faucet

El faucet entrega AIC gratis para que puedas interactuar con la blockchain:

  • URL: faucet.chainmemory.ai
  • Cantidad: 1 AIC por claim
  • Cooldown: 72 horas entre claims
  • Requisito: Resolver un challenge simple (anti-bot)
Seguridad del wallet El faucet genera wallets 100% en tu navegador. Tu private key nunca sale de tu dispositivo. Recomendamos descargar el keystore encriptado (JSON) para mayor seguridad en vez de guardar la private key como texto plano.

PROTOCOLO DE IDENTIDAD IA

Cada agente de IA que usa ChainMemory obtiene una identidad única e intransferible en la blockchain — un Soulbound Token (SBT) que prueba quién escribió una memoria, cuándo y desde qué modelo. Esta es la base de la confianza en un mundo multi-agente.

El Problema

En los sistemas de IA actuales, no hay forma de responder preguntas fundamentales:

  • ¿Qué IA escribió esta respuesta? ¿Fue Claude, GPT-4, o un modelo fine-tuned?
  • ¿Es el mismo agente con el que trabajé ayer, o una instancia diferente?
  • ¿Puedo confiar en la memoria de este agente si no conozco su identidad?
  • ¿Cómo pruebo la procedencia cuando múltiples agentes colaboran?

Sin identidad, no hay responsabilidad. Sin responsabilidad, no hay confianza.

Cómo Funciona

1

Registro

Cuando un usuario crea una cuenta o un agente se conecta vía API/MCP, el sistema registra una identidad on-chain a través del contrato AIIdentityProtocol. Esto crea un Soulbound Token — un NFT que no puede ser transferido. Queda permanentemente vinculado a la wallet de ese agente.

2

Metadatos de Identidad

Cada identidad registrada almacena:

  • Dirección de wallet — La dirección única del agente en la blockchain
  • Tipo de modelo — claude-sonnet-4, gpt-4o, gemini-2.0, etc.
  • Capacidades — Qué puede hacer este agente (remember, recall, consolidate, seal)
  • Propietario — La persona u organización que controla este agente
  • Bloque de registro — Prueba inmutable de cuándo se creó esta identidad
3

Atribución de Memorias

Cada memoria escrita en ChainMemory incluye el ai_id del agente que la creó. Esto significa que cualquier memoria puede rastrearse hasta una identidad de IA específica y verificada.

Detalles del Contrato

CampoValor
ContratoAIIdentityProtocol
Dirección0xe8E195ba416Fb25F4FC3d0E7908ff9e8666dbb4A
RedChainMemory (ID 202604)
Tipo de tokenSoulbound (ERC-721 no transferible)
EstándarEIP-5192 (Minimal Soulbound NFTs)

Trust Score (Roadmap)

El protocolo de identidad habilita un futuro AI Trust Score — una métrica de reputación basada en interacciones verificables:

  • Cantidad de memorias — ¿Cuántas memorias verificadas ha producido este agente?
  • Consistencia — ¿Con qué frecuencia las memorias del agente pasan la validación anti-alucinación?
  • Tasa de anclaje — ¿Qué porcentaje de memorias están respaldadas por pruebas on-chain?
  • Historial de colaboración — ¿Ha participado este agente en workflows multi-agente?
¿Por qué Soulbound? Los NFTs regulares pueden venderse o transferirse, lo que permitiría suplantación de identidad. Los Soulbound Tokens están permanentemente vinculados a la wallet que los creó. Un agente de IA no puede hacerse pasar por otro comprando su token de identidad. Esto es crítico para los registros de auditoría — necesitás saber con certeza qué agente escribió qué memoria.

Identidad en Workflows Multi-Agente

Cuando múltiples agentes colaboran en el mismo proyecto (ver Sistemas Multi-Agente), las contribuciones de cada agente se atribuyen individualmente:

Cadena de evidencia
Proyecto: "payment-system-v2"
├── Memoria #1 por Claude (ai_id: 0xA1...) — "Usar Stripe para pagos"
├── Memoria #2 por GPT-4 (ai_id: 0xB2...) — "Agregar capa de detección de fraude"
├── Memoria #3 por Cursor (ai_id: 0xC3...) — "Implementado handler de webhooks"
└── Estado v4 anclado — los 3 agentes contribuyeron, todo verificable

La identidad de cada agente es verificable independientemente on-chain. No hay ambigüedad sobre quién contribuyó qué.

Verificar una Identidad

Podés verificar cualquier identidad de IA usando la blockchain directamente:

JavaScript (ethers.js)
const { ethers } = require('ethers');
const provider = new ethers.JsonRpcProvider('https://rpc.chainmemory.ai');

const IDENTITY_CONTRACT = '0xe8E195ba416Fb25F4FC3d0E7908ff9e8666dbb4A';
const ABI = ['function balanceOf(address) view returns (uint256)'];

const contract = new ethers.Contract(IDENTITY_CONTRACT, ABI, provider);
const hasIdentity = await contract.balanceOf(agentWallet);

console.log(hasIdentity > 0 ? 'Identidad IA verificada' : 'Sin identidad registrada');
Sin identidad = sin confianza Si un agente no tiene una identidad registrada on-chain, sus memorias no pueden ser atribuidas. ChainMemory requiere registro de identidad antes de permitir escritura de memorias. Esto asegura que cada memoria en el sistema tiene un autor verificable.

SISTEMAS MULTI-AGENTE

ChainMemory fue diseñado desde cero para un mundo donde múltiples agentes de IA colaboran en el mismo proyecto. Cada agente lee el mismo Project State, cada contribución se atribuye individualmente, y cada handoff es trazable.

El Problema Multi-Agente

Los flujos de trabajo de desarrollo modernos ya involucran múltiples agentes de IA:

  • Claude diseña la arquitectura y escribe documentación
  • Cursor implementa el código con asistencia IA inline
  • GPT-4 revisa PRs y analiza implicaciones de seguridad
  • Gemini procesa codebases grandes para sugerencias de refactoring

Sin memoria compartida, cada agente empieza de cero. Las decisiones tomadas en Claude son invisibles para Cursor. La arquitectura acordada en GPT es desconocida para Gemini. Vos te convertís en el cuello de botella — constantemente re-explicando contexto.

Cómo ChainMemory Resuelve Esto

Project State Compartido

Todos los agentes conectados al mismo proyecto ven el mismo estado consolidado: decisiones, hitos, riesgos, stack y contexto. Cuando Claude marca una decisión como "active", Cursor la ve inmediatamente.

Flujo de Estado Compartido
┌──────────┐    ┌──────────────────────────┐    ┌──────────┐
│  Claude  │───▶│                          │◀───│  Cursor  │
│  (MCP)   │    │   Proyecto ChainMemory   │    │  (MCP)   │
└──────────┘    │                          │    └──────────┘
                │  decisions: [d001, d002]  │
┌──────────┐    │  milestones: [m001]      │    ┌──────────┐
│  GPT-4   │───▶│  risks: [r001, r002]     │◀───│  Gemini  │
│  (API)   │    │  stack: [Node, Redis]    │    │  (API)   │
└──────────┘    └──────────────────────────┘    └──────────┘

Patrón Agent Handoff

Cuando el trabajo pasa de un agente a otro, ChainMemory proporciona transferencia de contexto sin fricciones:

1

Claude diseña la arquitectura

Claude guarda decisiones clave vía MCP: elección de base de datos, estructura de API, estrategia de autenticación. Cada memoria se atribuye al ai_id de Claude.

Claude guarda
chainmemory_remember({
  content: "Usar PostgreSQL con row-level security para aislamiento multi-tenant",
  tags: ["architecture", "database", "security"],
  importance: 0.9
})
2

Cursor toma la implementación

Cuando abrís Cursor, inyecta el contexto del proyecto automáticamente. Cursor conoce la elección de base de datos, la estructura de API, y por qué se tomaron esas decisiones — sin que repitas nada.

Cursor recibe (via inject)
Project State v3:
- Decisión d001: "Usar PostgreSQL con RLS" (confirmed, evidence: #12, #15)
- Decisión d002: "API REST con endpoints versionados" (confirmed, evidence: #18)
- Hito m001: "Schema de BD completo" (pendiente)
- Riesgo r001: "Performance de RLS en tenants grandes" (med, evidence: #15)
3

Cursor implementa y guarda progreso

Mientras Cursor implementa, guarda memorias de implementación. Estas se atribuyen al ai_id de Cursor y alimentan el estado compartido.

4

GPT-4 revisa con contexto completo

Un agente GPT-4 revisando el PR puede consultar ChainMemory para entender por qué se tomó cada decisión, quién la tomó, y qué evidencia la respalda.

Patrones de Handoff

Patrón Flujo Caso de Uso
Secuencial Claude → Cursor → GPT-4 Diseño → Implementar → Revisión
Paralelo Claude + Cursor + Gemini simultáneamente Múltiples developers, mismo proyecto
Especialista Cualquier agente → Agente seguridad → Vuelve Expertise específica on demand
Supervisión Humano + Claude supervisan, Cursor ejecuta Human-in-the-loop con delegación

Resolución de Conflictos Entre Agentes

Cuando dos agentes toman decisiones contradictorias, la Resolución de Conflictos de ChainMemory aplica las mismas reglas:

  • Precedencia temporal — La decisión más reciente gana, sin importar qué agente la tomó
  • Peso de evidencia — Una decisión respaldada por 5 memorias de 3 agentes es más fuerte que una con una sola memoria
  • Supersesión explícita — Cualquier agente puede explícitamente reemplazar una decisión anterior referenciándola
  • Auditoría completa — Tanto la decisión original como la que la reemplaza se preservan con su respectiva atribución de ai_id
Ningún punto único de verdad — excepto la cadena En un sistema multi-agente, ningún agente individual es dueño de la "verdad". El Project State es una vista materializada derivada de las contribuciones de todos los agentes. El ancla on-chain es la única marca temporal autoritativa. Esto significa que incluso si un agente alucina o comete un error, la cadena de evidencia permite que otros agentes (o humanos) lo rastreen y corrijan.

Configurar Multi-Agente

No se necesita configuración especial. Cualquier agente conectado al mismo proyecto participa automáticamente en la colaboración multi-agente:

  1. Crear un proyecto vía Extension, MCP, o API
  2. Usar la misma API key en todos los agentes (o crear keys específicas por agente bajo la misma cuenta)
  3. Cada agente usa inject_memories al inicio de sesión para cargar contexto compartido
  4. Cada agente usa chainmemory_remember para guardar contribuciones
  5. Un agente (o cada uno, leyendo antes el estado) consolida con update_project_state citando las memorias de los demás; todas las operaciones terminan en un único Project State
Mejor práctica Usá tags descriptivos que identifiquen el rol del agente: ["architecture", "claude-design"], ["implementation", "cursor-code"], ["review", "gpt4-security"]. Esto facilita el filtrado por rol de agente sin necesidad de parsear el ai_id directamente.

HERMES AGENT

Hermes Agent es un framework de agentes IA open-source y agnóstico al proveedor. ChainMemory se integra por dos vías: el servidor MCP (herramientas nativas dentro del chat) o el wrapper cm.py CLI (control total desde terminal).

Requisitos previos

  • Hermes Agent instalado (Windows, macOS, Linux, WSL)
  • Cuenta ChainMemory con API key (formato: aic_...)
  • Python 3.10+ (para wrapper cm.py)

Obtener tu API Key

Las cuentas ChainMemory se crean exclusivamente desde la Extensión Chrome:

  1. Instalá la Extensión ChainMemory
  2. Abrí el popup desde la barra del navegador
  3. Elegí "Generar API Key automáticamente" (wallet gratis + 1 AIC) o "Ya tengo una key"
  4. Andá a Configuración → Conexión y hacé clic en "Ver" para copiar tu key

Importante: El Faucet (faucet.chainmemory.ai) solo distribuye tokens AIC para operaciones on-chain, no emite API keys. La API key se obtiene únicamente desde la Extensión.

Opción A: Servidor MCP (Flujo de chat)

El servidor MCP expone ChainMemory como herramientas nativas dentro del chat de Hermes. Después de configurar, podés decir cosas como "Recordá: decidimos usar PostgreSQL" y Hermes llamará la herramienta automáticamente.

Configuración

Editá ~/.hermes/config.yaml y agregá:

YAML — ~/.hermes/config.yaml
mcp_servers:
  chainmemory:
    command: "python"
    args: ["C:\\Users\\<usuario>\\.hermes\\skills\\chainmemory-mcp\\chainmemory_mcp_server.py"]
    env:
      CHAINMEMORY_API_KEY: "aic_..."
      CHAINMEMORY_BASE_URL: "https://api.chainmemory.ai/v1"
      CHAINMEMORY_DEFAULT_PROJECT: "default"

Reiniciá Hermes después de editar. Las herramientas aparecen como mcp_chainmemory_* en el chat.

Herramientas MCP Disponibles

HerramientaQué hace
mcp_chainmemory_save_memoryGuardar una memoria
mcp_chainmemory_list_memoriesListar / buscar memorias
mcp_chainmemory_get_profileInfo de cuenta (tier, contadores)
mcp_chainmemory_list_projectsListar todos tus proyectos
mcp_chainmemory_get_balanceSaldo AIC + URL del faucet
mcp_chainmemory_get_blockchain_statsAltura de chain, total de anclajes
mcp_chainmemory_update_memory_tagsRetaguear una memoria
mcp_chainmemory_archive_memoryArchivar / desarchivar

Opción B: Wrapper cm.py (CLI / Scripts)

cm.py es un CLI Python que envuelve la API REST. Maneja headers de auth, pacing y reintentos. Instalalo via el skill de ChainMemory:

bash
hermes skills install chainmemory

Luego configurá tu key:

bash
chmod 600 ~/.hermes/chainmemory.env

Comandos

ComandoQué hace
cm whoamiMostrar cuenta, tier, cuota
cm projectsListar todos los proyectos
cm save "texto" --project mi-appGuardar una memoria
cm recall --project mi-appRecuperar memorias recientes
cm search "query" --project mi-appBúsqueda semántica
cm state mi-appProject State (decisiones, riesgos, hitos, stack)
cm seal mi-appAnclar estado on-chain (irreversible)
cm verify mi-appVerificación pública (sin auth)

Opción C: API REST Directa

Cualquier cliente HTTP funciona. URL base: https://api.chainmemory.ai/v1. Header de auth: x-api-key: aic_... (no Authorization: Bearer).

Notas importantes

  • Header de auth: Usá x-api-key, no Authorization: Bearer.
  • Rate limits: 30 peticiones por segundo por IP aplicados en el proxy. Los requests por minuto por plan están publicados pero todavía no se aplican.
  • El estado no se construye solo: no hay consolidación en el backend ni disparador automático. El Project State cambia únicamente cuando un cliente propone operaciones vía update_project_state (MCP) o POST /v1/project/:name/state/ops (API). Esperar no va a producir un estado — pedirlo, sí.
  • Qué significa "seal" acá: en la API y el servidor MCP de ChainMemory, seal vuelve permanentemente inmutable una sola memoria (POST /v1/seal/:id, que toma tu número de memoria). El Project State se ancla como parte de la consolidación, no sellando. cm.py es un wrapper de terceros y puede mapear sus comandos de otra forma.
  • Paths en Windows: En config.yaml, usá doble backslash: C:\\Users\\<usuario>\\...

Verificar la configuración

bash
# vía MCP (en chat)
"Guardá esto: decidimos usar PostgreSQL para la base primaria"

# vía CLI
cm whoami
cm save "Decidimos usar PostgreSQL para DB primaria" --project mi-app --tags decision,stack
cm state mi-app
cm verify mi-app

GUÍA DE AUDITORÍA

Una de las capacidades más poderosas de ChainMemory es permitir auditorías verificables de decisiones de proyecto asistidas por IA — sin exponer el contenido privado de las conversaciones.

Dos niveles de auditoría

Nivel 1 — Auditoría externa (sin acceso del dueño)

Cualquiera puede verificar que un estado de proyecto fue anclado en un momento específico, sin ver qué contiene. Es como ver un sello notarial cerrado — sabés que existe, no sabés qué dice adentro.

Lo que un auditor externo ve (público, on-chain):

DatoVisibleRevela contenido?
state_hash✓ PúblicoNo — SHA3-256 es irreversible
tx_hash✓ PúblicoNo — solo prueba que la transacción ocurrió
block_number✓ PúblicoNo — solo prueba cuándo se ancló
project ID (hasheado)✓ PúblicoNo — el nombre del proyecto está hasheado
número de versión✓ PúblicoNo — solo muestra cuántas consolidaciones hubo
Contenido de memorias~ El texto cifrado sí está on-chainNo — AES-256-GCM, ilegible sin la llave del dueño
Detalle de decisiones✗ PrivadoNo va on-chain como estado; las memorias que cita sí, cifradas
Project State✗ PrivadoSolo su state_hash va on-chain
Nivel 1 — Endpoint público
GET /v1/project/nova-logistics/state/anchor

Respuesta:
{
  "project": "nova-logistics",
  "projectId": "0x77f7d980...",     // hasheado — nombre original no se revela
  "version": 5,
  "state_hash": "a7b3c9f2e1...",   // prueba que el estado existió, no revela contenido
  "anchor": {
    "status": "anchored",
    "tx_hash": "0xce55a800...",
    "block_number": 125000,
    "contract": "0xa7A8BA51...e7875"
  }
}
Qué demuestra esto Un estado de proyecto con hash a7b3c9f2e1... fue registrado en el bloque 125000 de la blockchain ChainMemory. Nada sobre el contenido se revela. No se necesita API key.

Nivel 2 — Auditoría con disclosure selectivo (el dueño comparte datos)

El dueño del proyecto elige qué compartir con el auditor. El auditor verifica los datos compartidos contra la prueba on-chain. Esta es la auditoría poderosa: demostrás que los datos son auténticos sin intermediarios.

El dueño controla exactamente qué se revela:

Nivel de disclosureQué ve el auditorCaso de uso
Solo estadoDecisiones, hitos, riesgos, stack — sin texto de conversacionesDue diligence de inversores
Estado + memorias seleccionadasDecisiones con extractos de conversaciones de soporteRevisión de compliance
Exportación completaTodas las memorias, estado completo, historial completoAuditoría interna, descubrimiento legal

Proceso de auditoría paso a paso

Ejemplo: NovaTech, una startup construyendo un SaaS de logística. Después de 4 meses usando ChatGPT y Claude alternadamente, el CTO necesita demostrar trazabilidad del proyecto a inversores.

1

El dueño exporta el Project State

El CTO llama a la API con su key y exporta el estado JSON:

bash
curl -H "x-api-key: cto-api-key" \
  https://api.chainmemory.ai/v1/project/nova-logistics/state
    

Resultado: 12 decisiones activas, 3 reemplazadas, 8 hitos completados, 2 riesgos abiertos. El CTO comparte este JSON con el inversor.

2

El auditor calcula el hash

El inversor guarda el JSON recibido como state.json y calcula el state hash. El hash es SHA3-256 sobre un prefijo de dominio (CM_PROJECT_STATE_V<schema_version>) más la forma canónica del objeto state (claves ordenadas recursivamente, separadores compactos, UTF-8, campo state_hash excluido). El verificador de referencia abierto lo hace en un comando — solo librería estándar de Python, sin dependencias:

bash
curl -sO https://docs.chainmemory.ai/verify_state.py
python3 verify_state.py state.json
# computed state_hash : 0xa7b3c9f2e1d4...
# declared state_hash : 0xa7b3c9f2e1d4... -> MATCH
# on-chain state_hash : 0xa7b3c9f2e1d4... -> ON-CHAIN MATCH
    

El verificador son ~90 líneas de código auditable: recomputa el hash de forma independiente y además lo contrasta contra el ancla pública on-chain. No requiere confiar en ChainMemory.

3

El auditor verifica contra la blockchain

El inversor llama al endpoint público de verificación (no necesita API key):

bash
curl https://api.chainmemory.ai/v1/project/nova-logistics/state/anchor
# Retorna: state_hash: "a7b3c9f2e1d4..."
    

Si los hashes coinciden: el estado es auténtico y no fue modificado desde la fecha de anclaje.

4

El auditor rastrea una decisión específica (opcional)

Si el CTO también compartió acceso a memorias, el inversor puede profundizar en cualquier decisión:

Decisión d005: "Migrar de REST a GraphQL" tiene evidence: ["#45", "#67", "#82"]. El inversor recupera esas 3 memorias:

  • Memoria #45 — Sesión con ChatGPT discutiendo cuellos de botella de performance de la API
  • Memoria #67 — Sesión con Claude comparando trade-offs REST vs GraphQL
  • Memoria #82 — Decisión final documentada con justificación

Cada memoria tiene su propio hash SHA-256 de su texto, sin separador de dominio — no confundir con el hash SHA3-256 con dominio del Project State. Contenido verificado, procedencia confirmada.

Lo que el inversor puede afirmar ahora "En el bloque 125000 del 10 de junio de 2026, el proyecto de NovaTech tenía 12 decisiones activas respaldadas por 82 memorias de conversaciones con IA. Cada decisión se rastrea a conversaciones específicas. El state hash que verifiqué on-chain coincide exactamente. Nada fue alterado después del anclaje."

Garantías de privacidad durante la auditoría

La garantía crítica: el dueño siempre controla el disclosure.

  • Los inversores ven decisiones e hitos — no las conversaciones crudas de IA que las produjeron
  • La blockchain prueba autenticidad sin revelar contenido
  • El texto de memorias (contenido real de conversaciones) solo es visible si el dueño lo exporta explícitamente
  • El registro on-chain contiene hashes más el contenido cifrado de las memorias — aunque la blockchain sea pública, sin tu llave nada de eso es legible
  • Ningún tercero, incluyendo ChainMemory mismo, puede forzar el disclosure del contenido de memorias
Distinción importante La blockchain prueba que un estado existió en un momento dado. No revela qué contenía el estado. El dueño cierra la brecha compartiendo selectivamente datos con el auditor. Sin la cooperación del dueño, los datos on-chain son opacos por diseño.

QUÉ PREVIENE CHAINMEMORY

Entender contra qué protege ChainMemory es tan importante como entender qué hace.

Pérdida de contexto

Cada conversación de IA hoy es efímera. Cerrás la pestaña y todo lo discutido — decisiones, elecciones de arquitectura, hallazgos de investigación — desaparece. ChainMemory captura esto como memorias permanentes y recuperables. Tu próxima sesión arranca donde terminó la anterior.

Vendor lock-in

Si el conocimiento de tu proyecto existe solo dentro del historial de conversaciones de ChatGPT, estás atrapado. ChainMemory almacena conocimiento independientemente de cualquier proveedor de IA. Cambiá de ChatGPT a Claude a Gemini sin perder una sola decisión o contexto.

Manipulación retroactiva

Sin prueba criptográfica, cualquiera podría afirmar "decidimos X" cuando la decisión real fue Y. El anclaje on-chain de ChainMemory crea un registro a prueba de manipulación. El state hash en el bloque 123539 prueba exactamente cuál era el estado del proyecto en ese momento. No se puede alterar después del hecho.

Fragmentación de conocimiento

Equipos que usan IA terminan con conocimiento crítico disperso en docenas de conversaciones desconectadas, en diferentes herramientas, con diferentes modelos. ChainMemory consolida todo en un único Project State estructurado — sin importar qué IA o herramienta produjo la conversación original.

Dependencia de una sola IA

Cuando un proveedor de IA se cae, cambia su API, o depreca una funcionalidad, proyectos que dependen exclusivamente de ese proveedor pierden continuidad. La arquitectura cross-model de ChainMemory asegura que tu conocimiento acumulado es accesible desde cualquier sistema de IA compatible.

Deriva invisible de decisiones

En proyectos de largo plazo, las decisiones evolucionan durante meses. Sin un sistema que rastree qué cambió, cuándo, y por qué, los equipos pierden el hilo de su propio razonamiento. El ciclo de vida de las decisiones del Project State (proposed → confirmed → superseded), con cada ítem citando sus memorias, hace cada evolución rastreable.

La garantía fundamental ChainMemory asegura que el conocimiento asistido por IA — las decisiones, descubrimientos y contexto que tu equipo construye durante semanas y meses de trabajo con IA — nunca se pierde, nunca queda encerrado, nunca es falsificable, y siempre es portable.

MODELO DE CONFIANZA

Qué podés — y qué no podés — confiar

ChainMemory combina una API centralizada con verificación descentralizada. Entender los límites de confianza es crítico para evaluar si ChainMemory cumple tus requisitos de seguridad.

Tabla de garantías

PreguntaRespuestaCómo se aplica
¿Puede el operador borrar un evento después de registrarlo? Sí, de la base de datos Pero el ancla on-chain preserva el hash del estado. La eliminación es detectable: recalcular el hash de los eventos restantes produce una discrepancia con el hash anclado.
¿Puede el operador modificar un estado pasado? Sí, en la base de datos Pero cualquier modificación cambia el hash del estado. Comparar el hash recalculado contra el ancla on-chain revela manipulación inmediatamente.
¿Puede el operador falsificar un ancla? No Los anclas son transacciones on-chain. El smart contract registra el hash del estado de forma inmutable. Falsificar requiere controlar la blockchain — económicamente inviable con consenso PoA y múltiples validadores.
¿Puede un tercero verificar sin confiar en ChainMemory? El endpoint de verificación es público y sin autenticación. Cualquiera también puede leer el smart contract directamente usando Web3/Ethers.js.
¿Pueden otros usuarios leer mis memorias? No El contenido de las memorias está limitado al dueño de la API Key. Lo público on-chain es texto cifrado, no texto plano: descifrarlo requiere la llave derivada de la API Key del dueño.
¿Se almacena el texto plano de las memorias on-chain? No Lo que se escribe on-chain es el texto cifrado AES-256-GCM de cada memoria (MemoryV2.writeMemory), junto con su categoría, importancia y largo del texto plano. El texto plano nunca sale de la base de datos de la API, y sin la llave del dueño nadie puede descifrarlo — que es justamente lo que te permite recuperar una memoria años después desde otro dispositivo. El Project State consolidado se ancla solo como hash SHA3-256.
¿Pueden los validadores ver el contenido de las memorias? No Para un ancla de estado la carga es solo el id del proyecto y el hash. Para una memoria es texto cifrado AES-256-GCM más su categoría, importancia y largo: los validadores pueden ordenarla y validarla, no pueden leerla.
¿Qué pasa si ChainMemory se cae? Las memorias son temporalmente inaccesibles Pero todos los anclas on-chain siguen siendo verificables de forma independiente. La blockchain continúa operando incluso si la API está caída. Los usuarios pueden exportar sus datos en cualquier momento.

Niveles de confianza

Confianza total (criptográfica) Integridad del estado y timestamp. Una vez anclado, el hash en el bloque N es inmutable. Nadie — ni siquiera ChainMemory — puede alterar lo que fue registrado.
Confianza operacional (dependiente de la API) Almacenamiento de memorias, recuperación, inyección y consolidación. Estos dependen de que la API de ChainMemory esté disponible y sea honesta. El mecanismo de anclaje actúa como control: cualquier manipulación del lado del servidor es detectable.
Sin confianza necesaria Verificación independiente. Cualquiera con una librería Web3 puede leer el smart contract directamente y comparar hashes. Cero dependencia de la infraestructura de ChainMemory.

Soberanía — no-custodial

ChainMemory está migrando a un modelo no-custodial donde tu llave vive en tu cliente, no en el servidor. Vos firmás tus propias escrituras on-chain; el servidor guarda el texto cifrado y verifica las firmas, pero nunca tiene tu llave privada. Esto se probó de punta a punta — una memoria escrita 100% del lado del cliente, con el servidor sin tocar nunca la llave.

Qué significa no-custodial acá Las llaves se generan del lado del cliente y el servidor guarda solo tu dirección (POST /v1/keys/register-pubkey). El cliente firma y transmite cada escritura; el servidor solo adjunta el registro (POST /v1/memory/attach). Las API keys están cifradas en reposo (AES-256-GCM) con una master key fuera de la app.
En progreso Bóveda ciega: derivar la llave de cifrado de contenido de tu llave privada para que el servidor no pueda leer el contenido ni en teoría. La extensión Chrome publicada todavía firma del lado del servidor (custodial); el camino no-custodial llega en una versión nueva. La capacidad está probada y la migración está en curso.

MODELO DE AMENAZAS

Ataques, detección y lo que está fuera de alcance

Ningún sistema es invulnerable. Esta sección mapea la superficie de ataque, qué detecta o previene ChainMemory, y qué sigue siendo responsabilidad del usuario.

Vectores de ataque

AtaqueObjetivoDetección / PrevenciónSeveridad
Modificación retroactiva del estado Base de datos API ✓ Detectado — el hash recalculado no coincide con el ancla on-chain Crítica
Eliminación silenciosa de eventos Base de datos API ✓ Detectado — los eventos faltantes cambian la cadena de hashes Crítica
Ancla falsa (falsificar tx hash) Capa de verificación ✓ Prevenido — los anclas son on-chain; falsificar requiere controlar la blockchain Crítica
Robo de API Key Credenciales del usuario ~ Responsabilidad del usuario — usá variables de entorno, rotá las keys, nunca expongas en frontend Alta
Man-in-the-middle en llamadas API Red ✓ Prevenido — todo el tráfico de la API usa HTTPS/TLS Alta
Inyección maliciosa de memorias Estado del proyecto ~ Parcial — las memorias están limitadas al dueño de la API Key, y la consolidación rechaza evidencia que no se resuelva a memorias ancladas del dueño (422). Nada comprueba que el contenido sea verdadero: quien tiene la key todavía puede escribir y consolidar un estado falso. La cadena prueba procedencia, no corrección Media
Colusión de validadores (>50% firmantes) Consenso blockchain ~ Mitigado — Clique PoA requiere mayoría; el set de validadores se expandirá a 21 asientos Media
Ataque de replay (reenviar ancla vieja) Smart contract ✓ Prevenido — el contrato rastrea números de versión; la misma versión no puede re-anclarse Media
Inferencia de contenido desde hashes Privacidad ✓ Prevenido — SHA-256 es unidireccional; el contenido no puede revertirse desde el hash Baja
DDoS a la API Disponibilidad ~ Mitigado — rate limiting por IP en el proxy (30 peticiones por segundo por IP) más Cloudflare delante; blockchain no se ve afectada Media

Fuera de alcance

ChainMemory no protege contra:

  • Usuario almacenando información falsa — si guardás una mentira como memoria, ChainMemory la ancla fielmente. El sistema garantiza integridad (los datos no cambiaron), no veracidad (los datos eran correctos).
  • Dispositivo del usuario comprometido — si tu máquina tiene malware, tu API Key y datos locales están expuestos antes de llegar a ChainMemory.
  • Alucinaciones de la IA — ChainMemory almacena lo que vos guardás, no lo que una IA genera. No valida si la salida de la IA fue precisa.
Defensa en profundidad El modelo de seguridad de ChainMemory sigue defensa en profundidad: incluso si la API centralizada es comprometida, la capa on-chain provee un mecanismo de verificación independiente. Ningún punto único de falla puede corromper silenciosamente el historial del proyecto.

VERIFICACIÓN INDEPENDIENTE

Verificá anclas on-chain sin confiar en nadie

No necesitás la API de ChainMemory para verificar que un estado de proyecto fue anclado en un bloque específico. Esta página muestra cómo verificar directamente contra la blockchain usando herramientas Web3 estándar.

Qué necesitás

  • El hash del estado del proyecto (de la API o compartido por alguien)
  • El hash de la transacción o número de bloque del ancla
  • Node.js con ethers instalado — o cualquier librería Web3

Paso 1 — Obtener los datos del ancla

Usá el endpoint público (sin autenticación) de ChainMemory o recibilos de quien compartió la prueba:

bash
curl https://api.chainmemory.ai/v1/project/chainmemory/state/anchor
Respuesta
{
  "project": "chainmemory",
  "projectId": "0x77f7d980...",
  "version": 8,
  "state_hash": "0xa6c45d1db753b1ec96240d169b2d91fb0ce76112558b302a8822b2988aeb8212",
  "anchor": {
    "status": "anchored",
    "onchain_anchor_id": 8,
    "tx_hash": "0x95b732d20b8935a2...",
    "block_number": 173831,
    "contract": "0xa7A8BA51950255b3e223a6745597C67009Fe7875"
  },
  "verify": "ProjectStateAnchor.getStateAnchor(projectId, version)"
}

Paso 2 — Verificar on-chain con Ethers.js

Conectate directamente al RPC de ChainMemory y leé el smart contract. Sin API Key, sin cuenta, sin confianza requerida.

javascript
import { ethers } from 'ethers';

// Conectar al RPC de ChainMemory — sin API Key necesaria
const provider = new ethers.JsonRpcProvider('https://rpc.chainmemory.ai');

// Contrato ProjectStateAnchor
const CONTRACT = '0xa7A8BA51950255b3e223a6745597C67009Fe7875';
const ABI = [
  'function getStateAnchor(bytes32 projectId, uint64 version) view returns (bytes32 stateHash, uint256 anchoredAt, address anchoredBy, uint256 anchorId)'
];

const contract = new ethers.Contract(CONTRACT, ABI, provider);

// El project ID es el keccak256 del nombre del proyecto
const projectId = ethers.keccak256(ethers.toUtf8Bytes('chainmemory'));
const version = 8;

// Leer directamente de la blockchain
const [stateHash, anchoredAt, anchoredBy, anchorId] = await contract.getStateAnchor(projectId, version);

console.log('Hash on-chain del estado:', stateHash);
console.log('ID de ancla:', anchorId.toString());
console.log('Anchored at:', new Date(Number(anchoredAt) * 1000).toISOString());

// Comparar con el hash que recibiste
const expectedHash = '0xa6c45d1db753b1ec96240d169b2d91fb0ce76112558b302a8822b2988aeb8212';
if (stateHash === expectedHash) {
  console.log('VERIFICADO — el estado coincide con el ancla on-chain');
} else {
  console.log('DISCREPANCIA — el estado fue manipulado');
}
javascript
const Web3 = require('web3');

const web3 = new Web3('https://rpc.chainmemory.ai');

const CONTRACT = '0xa7A8BA51950255b3e223a6745597C67009Fe7875';
const ABI = [{
  name: 'getStateAnchor',
  type: 'function',
  stateMutability: 'view',
  inputs: [
    { name: 'projectId', type: 'bytes32' },
    { name: 'version', type: 'uint64' }
  ],
  outputs: [
    { name: 'stateHash', type: 'bytes32' },
    { name: 'anchoredAt', type: 'uint256' },
    { name: 'anchoredBy', type: 'address' },
    { name: 'anchorId', type: 'uint256' }
  ]
}];

const contract = new web3.eth.Contract(ABI, CONTRACT);

const projectId = web3.utils.keccak256('chainmemory');

const result = await contract.methods.getStateAnchor(projectId, 8).call();
console.log('Hash on-chain del estado:', result.stateHash);
console.log('ID de ancla:', result.anchorId);

Paso 3 — Verificar la transacción

También podés verificar la transacción cruda que creó el ancla:

javascript
// Leer la transacción directamente
const tx = await provider.getTransaction('0x95b732d20b8935a286869d90e60a40f5c31d350a94e27bfd7845770fe0c3e2c3');
console.log('From:', tx.from);       // Debería ser un validador conocido
console.log('To:', tx.to);           // Debería ser la dirección del contrato
console.log('Block:', tx.blockNumber);

// Leer el bloque para confirmar timestamp
const block = await provider.getBlock(tx.blockNumber);
console.log('Hora del bloque:', new Date(block.timestamp * 1000).toISOString());
Verificación zero-trust Todo este proceso requiere cero interacción con los servidores de ChainMemory. Te conectás directamente al endpoint RPC de la blockchain y leés el smart contract. Incluso si la API de ChainMemory estuviera comprometida o caída, los datos on-chain siguen siendo verificables.
Alternativa con MetaMask También podés verificar visualmente: agregá la red ChainMemory a MetaMask, navegá a la dirección del contrato en el Explorer, e inspeccioná los datos de la transacción manualmente.

FAQ

Generales

ChainMemory es gratis?

Sí. El plan Faucet es gratuito e incluye almacenamiento de memorias, inyección de contexto, y Project Brain (el visor de Project State). El faucet te da AIC gratis para interactuar con la blockchain.

Mis memorias son privadas?

Sí. Tus memorias solo son accesibles con tu API key. Lo único público son los hashes on-chain (que no revelan contenido) y los endpoints de verificación, que exponen hashes y metadata. El contenido cifrado está guardado on-chain y se puede leer ahí, pero nunca el texto plano.

Qué pasa si la IA generó contenido incorrecto en una memoria?

Las memorias capturan lo que se dijo en la conversación. Si la IA generó información incorrecta y vos la guardaste, esa memoria reflejará el error. Podés archivarla, o ponerla en cuarentena con POST /v1/memories/:id/trust para que quede fuera del contexto y de la inyección. El Project State no cambia solo: si un ítem se construyó sobre esa memoria, corregilo con una operación nueva.

Puedo usar ChainMemory con modelos locales?

Sí, vía API REST. Cualquier aplicación que haga llamadas HTTP puede guardar y recuperar memorias. También podés configurar el servidor MCP con modelos locales o self-hosted.

Quién construye el Project State?

Tu cliente de IA. Con update_project_state (MCP) o POST /v1/project/:name/state/ops propone operaciones — agregar una decisión, cerrar un riesgo — citando las memorias que las respaldan. El servidor las valida, las aplica con un builder determinista y ancla el hash resultante on-chain. Ningún modelo del servidor lee tus memorias.

Qué pasa si mi IA dice cosas contradictorias entre sesiones?

Nada las resuelve automáticamente. Las dos memorias quedan, y decide el cliente que consolida: agrega la decisión más nueva y marca la anterior con supersede_decision. Las decisiones reemplazadas permanecen en el estado con status "superseded", así siempre tenés el historial completo. Ver Resolución de conflictos para más detalles.

Puedo exportar mis datos?

Sí. Todas tus memorias y estados de proyecto son accesibles vía la API REST. Podés obtenerlos en formato JSON y procesarlos como necesités.

Planes, límites y cuotas

RecursoFreeStarterProTeamEnterprise
Precio$0$9/mes$29/mes$79/mes planodesde $299/mes
Memorias/mes1005005.00050.000Ilimitadas
Injects/mes5151001.000Ilimitados
Proyectos31025IlimitadosIlimitados
Usuarios111Hasta 10Ilimitados
Retención90 días1 añoIlimitadaIlimitadaIlimitada
Requests API/min3060120300600
Créditos AIC/mes (uso + obsequio)1 de bienvenida30 + 60120 + 250600 + 1.300Custom
RBAC + audit trail compartido4 roles4 roles + SSO

Las memorias nunca se borran: al superar la ventana de retención de tu plan se archivan, y su hash on-chain existe para siempre. Al subir de plan recuperás el acceso completo a tu historial. El AIC de obsequio se acumula mes a mes, no expira y se libera según el calendario del protocolo.

LÍMITES Y CUOTAS

Los fees de protocolo en AIC son idénticos en todos los planes: una cuenta Free y una Enterprise pagan lo mismo por operación. Lo que cambia el plan es el volumen — y cuánto de ese volumen el sistema hace cumplir hoy. Las dos cosas están abajo, separadas a propósito.

Límites por plan

LímiteFreeStarterProTeamEnterprise
Memorias por mes1005005.00050.000ilimitado
Inyecciones por mes5151001.000ilimitado
Proyectos simultáneos31025ilimitadoilimitado
Usuarios11110ilimitado
Claves de proyecto0005ilimitado
Retención90 días365 díasilimitadailimitadailimitada
Requests por minuto3060120300600
AIC mensuales — uso + obsequio30 + 60120 + 250600 + 1.300a medida

Estos son los valores de la tabla tier_entitlements que el servidor lee en tiempo de ejecución, no un resumen de marketing. Un valor ilimitado se guarda como -1, y el chequeo se saltea por completo.

Qué se reinicia, y cuándo

  • Las memorias y las inyecciones son mensuales. El contador vuelve a empezar el primer día de cada mes a las 00:00 UTC. Free te da 100 memorias por mes, no 100 en total.
  • Los proyectos son un tope simultáneo, no una cuota mensual: es cuántos podés tener a la vez. Borrar uno libera un lugar.

Qué se hace cumplir hoy

El servidor chequea tres operaciones contra tu plan: guardar una memoria, inyectar contexto y crear un proyecto.

Hoy los límites avisan, no bloquean Cuando pasás un límite, el evento queda registrado y la respuesta trae una cabecera X-Plan-Limit-Warning — pero el pedido se completa igual. El bloqueo llega junto con el cobro real; cuando cambie, esta página lo va a decir.

Con el bloqueo activo, pasarse de un límite devuelve 402 con plan_limit_reached, el límite, tu consumo y un enlace para subir de plan. Un límite nunca toca tus datos: leer, verificar y exportar siguen funcionando igual.

Cuando termina un período pago, el plan sigue vigente durante 3 días de gracia; después la cuenta pasa a Free hasta que se renueve. GET /v1/billing/status muestra period_end, grace_until, in_grace y expired.

Qué está declarado pero todavía no se aplica

Estos valores están publicados, los devuelve la API y son parte del plan — pero nada actúa sobre ellos todavía. Los listamos acá en vez de dejar que se descubran solos:

  • Requests por minuto — el número es real y está documentado, pero hoy ningún limitador lo lee. El único límite de peticiones vigente es por IP en el proxy (30 peticiones por segundo por IP), igual para todos los planes.
  • Retención — no se archiva ni se elimina nada cuando vence el período. Las memorias no se borran nunca en ningún caso, y la huella on-chain es permanente sin importar el plan.
  • Usuarios y claves de proyecto — el módulo de organizaciones los emite; el tope no se chequea al emitirlos.
  • Asignación mensual de AIC — los montos están definidos pero la acreditación no está implementada. La propia API lo dice: crediting: "Sprint B3 (pendiente)".
Verificá tus propios números GET /v1/billing/status devuelve tu tier efectivo y de dónde sale, el modo de enforcement vigente, todos los límites de arriba, y tu consumo en lo que va del mes. Lee la misma fuente que describe esta página, así que las dos no pueden separarse.

Changelog

Plataforma — Septiembre 2026: procedencia, descubrimiento por máquina y anclaje

  • Guard de procedenciaPOST /v1/project/:name/state/ops ahora rechaza la llamada entera con 422 evidence_unresolved si alguna memoria citada no se puede resolver, en vez de descartarla en silencio; las ops sin evidencia llevan un provenance_warning
  • OpenAPI 3.1 en api.chainmemory.ai/openapi.json: 41 operaciones, incluidas verificación pública e inyección
  • llms.txt reescritos en chainmemory.ai, api y docs con datos verificados
  • Bóveda ciega en el servidor MCP (v2.6.0+): memorias cifradas en el cliente a partir de una frase de 12 palabras que el servidor nunca ve
  • MCP v2.7.0: 36 herramientas con descripciones reescritas para agentes y conjuntos de valores cerrados declarados; se publica solo en el registro oficial MCP
  • Los clientes que usan la biblioteca estándar de Python ya no quedan bloqueados en el borde
  • El anclaje del Project State vuelve a correr solo cada 10 minutos; las versiones escritas durante la migración de infraestructura se anclaron retroactivamente

MCP v2.4.0 (Junio 2026)

  • Nuevo tool: update_project_state — Consolidación autónoma vía MCP. Cualquier cliente de IA puede proponer operaciones estructuradas para actualizar el Project Brain; el servidor valida, aplica y ancla on-chain.
  • Gramática de 22 operaciones para mutaciones de estado (decisiones, hitos, riesgos, métricas, vocabulario, y más)
  • Procesamiento resiliente: las ops inválidas se rechazan individualmente, las válidas se aplican igual
  • Vinculación de evidencia vía evidence_memory_ids — el servidor resuelve event hashes y construye pruebas Merkle automáticamente
  • Arquitectura: “el cliente consolida, la cadena verifica”

Plataforma — Junio 2026

  • Project Brain consolidado y anclado on-chain (versiones v1–v8, verificable públicamente)
  • Búsqueda semántica reescrita (más rápida, ~2.4s)
  • Escritura no-custodial probada end-to-end (el cliente firma, el server nunca tiene la llave)
  • Cifrado en reposo (AES-256-GCM) de las API keys
  • Endpoint de verificación pública: GET /v1/verify/:name

v3.0.9 (Junio 2026)

  • Fix: Project Brain muestra decisiones y riesgos correctamente (schema Fase 2)
  • Fix: Numeración de memorias muestra número secuencial del usuario

v3.0.0 (Mayo 2026)

  • Project Brain: visualización del estado consolidado
  • Motor de Consolidación: pipeline completo
  • Anclaje on-chain de Project State
  • API de verificación pública

v2.0.0 (Abril 2026)

  • Servidor MCP para Claude Desktop y Cursor
  • Inyección de contexto automática
  • Soporte para 5 plataformas de IA