Skip to main content
O Renor dá às ferramentas e aos agentes de IA uma memória durável, para que lembrem o contexto sem que você repita. O ciclo tem três passos:
  1. Connect. Adicione um endereço MCP às ferramentas de IA que você usa e entre uma vez. Veja o Quickstart.
  2. Remember. Seu agente salva o que deve durar: um fato, uma decisão ou uma nota. Nada é salvo se um agente ou você não pedir. O Renor não grava suas conversas.
  3. Recall. Antes de trabalhar, seu agente chama get_context e recebe os fatos atuais e as notas mais próximas.

Arquitetura

Os agentes chegam ao Renor por um único endereço MCP. Um gateway verifica quem você é e repassa a chamada ao processo que atende o seu workspace. Esse processo guarda duas coisas:
  • um armazenamento em Markdown, que é a memória: um livro de fatos (sujeito, predicado, valor, histórico) e notas (suas palavras, organizadas por dia);
  • um índice SQLite derivado dele para a busca: trechos, busca por palavras, entidades e vetores onde a busca semântica está ligada. O índice pode ser apagado e reconstruído a partir do armazenamento.
Cada workspace tem o próprio diretório de memória, o próprio índice e o próprio processo de servidor.

O que é uma memória

  • Um fato é um sujeito, um predicado e um valor (Fjord, database, SQLite), salvo com a frase que você disse. Os fatos vão para um livro só de acréscimo (append-only).
  • Uma nota são as suas palavras, guardadas inteiras em um arquivo Markdown sob o dia em que foi salva.
  • Se você importa notas em Markdown, elas também são notas, sob Imported/<label>.

Como um agente escreve

  • remember recebe um statement em palavras simples, de até 4.000 caracteres. Um texto maior é recusado, nunca cortado. Sozinho, é salvo como nota e pode ser buscado na hora; uma nota com caractere de controle (U+0000 a U+001F, exceto tab, nova linha e retorno de carro, ou U+007F) é recusada e nada é gravado.
  • Com subject, predicate e object também, é salvo como fato. Use só para um valor que vale até mudar: uma cidade, o banco de dados de um projeto, um prazo.
  • save_memory é só a forma de fato. remember_note acrescenta uma linha com data e hora ao registro de um dia.
  • Salvar de novo a mesma frase para o mesmo fato não muda nada. Cada gravação devolve um recibo: store, supersede ou nochange, com um id de evento.
  • Um scope opcional, como project:fjord, mantém a memória ligada a um projeto.

Como um valor novo substitui um antigo

Digamos que um agente salve que um projeto usa PostgreSQL e depois salve que ele passou para SQLite. Perguntado qual banco o projeto usa, o Renor responde SQLite e guarda o PostgreSQL como histórico, com as datas em que valeu.
retrieve_memory com as_of e uma data ISO devolve o que valia naquele momento.
A substituição só acontece quando o agente salva o novo valor com o mesmo sujeito, predicado e escopo, escritos igual. Um agente que registra “mudamos para SQLite” como nota simples deixa a nota anterior no lugar: o Renor não lê a frase para concluir que ela contradiz algo. Ele avisa (possibleDuplicates) quando vê o mesmo predicado com um nome uma palavra maior ou menor, ou em outro escopo, e não muda nada por conta própria.

Como a busca escolhe

get_context devolve:
  • Fatos primeiro: os valores atuais dos fatos que melhor combinam, lidos do livro: até 12 para uma consulta (20 sem consulta), dentro da parte do orçamento de tokens que cabe aos fatos. O que passar disso fica de fora. Um fato salvo agora há pouco é encontrado pelas palavras exatas antes de o índice se atualizar.
  • Depois as notas, por significado e por palavras. O campo retrieval da resposta diz como foram encontradas: hybrid (busca por significado mais busca por palavras), semantic (só significado), keyword (só palavras exatas: a busca semântica está desligada ou ainda sendo construída) ou facts (só fatos: sem consulta, ou nenhuma busca de notas conseguiu responder).
  • Um orçamento de tokens: a resposta inteira cabe em max_tokens (800 por padrão, no máximo 4.000). Quando nem tudo cabe, saem primeiro os resultados por palavras, depois os de significado com menor pontuação, mas o resultado relevante mais novo é mantido.
  • Um erro honesto: se nada combina de perto, a resposta diz relevant: false, e os itens listados são apenas os mais próximos.
O Renor não injeta nada por conta própria. Seu agente chama get_context, e o aplicativo que o hospeda decide se e quando isso acontece. Os embeddings são calculados pelo Google Vertex AI (gemini-embedding-001, 768 dimensões): o workspace envia a ele o texto das notas quando são indexadas e a consulta quando busca. A busca também segue os [[wikilinks]] que você escreve entre notas: uma nota ligada a um resultado pode entrar como mais um resultado (seu reason é graph). O Renor não monta um grafo de conhecimento a partir do seu texto.

Aposentar e restaurar

retire_memory tira uma memória da busca sem apagá-la. restore_memory a devolve exatamente como estava. Um fato errado se corrige salvando o valor certo, não aposentando. Aposentar é reversível de propósito, então não é apagar. O dono pode então apagar de vez uma nota, entrada de registro ou fato aposentado na página Memories do painel, o que não pode ser desfeito e libera o armazenamento de uma nota aposentada; os agentes não podem. Uma entrada de registro aposentada já deixou de contar no armazenamento quando foi aposentada. Apagar um fato aposentado deixa uma linha no livro sem nenhuma de suas palavras; veja Security (em inglês) para a exclusão da conta.

Vários agentes, um workspace

Um workspace pertence a uma conta dona. Todo cliente MCP em que essa conta entra lê e escreve a mesma memória. Cada memória registra uma source, o nome do app ou agente que a salvou. O autor de uma conexão com nome é autenticado; só um rótulo de reserva sem nome é autodeclarado. O scope separa projetos dentro de um workspace, mas é uma pasta, não uma permissão: uma leitura sem escopo enxerga todos os escopos.

Quando o workspace não responde

Um workspace parado é desligado, e o gateway o liga de novo na próxima chamada, o que leva alguns segundos (o sono sob demanda está ligado em produção). Se não for possível iniciá-lo, a chamada falha com um 503 e um header Retry-After. Em todos esses casos a chamada falha e nada é gravado: o Renor não deixa uma gravação na fila para depois. Um agente deve tratar uma chamada falha ao Renor como “sem memória desta vez”, e não como “nada relevante”.

Velocidade

Uma medição, feita em 2026-10-06 a partir de um local de rede: um get_context hospedado levou cerca de 430 a 500 ms na mediana. O trabalho do próprio engine foi cerca de 20 ms disso, medido à parte em um workspace de teste parecido com um real (87 notas, 1.845 trechos e 994 linhas de fatos); o resto foi rede, uma consulta de conta e, para uma consulta nova, a chamada de embedding. Foi um dia, um lugar e uma carga que não estava calma, então leia os milissegundos como aproximados. O Renor não publica garantia de latência.

O que o Renor não faz hoje

  • A auto-hospedagem roda só o engine. O engine é de código aberto sob Apache-2.0 em https://github.com/renorai/renor-engine; o site, o painel, o cadastro e as operações vêm só com o serviço hospedado.
  • Não grava suas conversas.
  • Não percebe que uma nota simples contradiz outra nota.
  • Não tem permissões por agente nem compartilhamento de uma memória entre pessoas.
  • A exclusão permanente por conta própria cobre notas, entradas de registro e fatos aposentados, no painel; uma conta inteira se exclui em Settings → Delete account, ou por e-mail para privacy@renor.cloud.
  • Não documenta nenhuma API REST para memória; MCP é a interface.
  • Ainda não concluiu uma auditoria de segurança independente, e não há garantia de disponibilidade (SLA) nos planos atuais. Status ao vivo e histórico de disponibilidade: https://status.renor.cloud.