
Trocar de Claude Code para Codex, Cursor ou Grok no meio de uma tarefa normalmente custa contexto: é preciso explicar de novo a arquitetura, as tentativas que falharam e o próximo passo. O ai-memory resolve esse problema com uma memória local compartilhada entre agentes. Este guia instala a versão nativa no Linux, cria um serviço systemd --user, liga MCP e hooks nos quatro clientes e mostra onde os dados ficam.
O que o ai-memory guarda — e o que não guarda
O ai-memory é um servidor de memória de longo prazo para agentes de programação. Os hooks registram eventos da sessão; o servidor consolida esse material em páginas Markdown e permite recuperar contexto e handoffs pelo MCP. A fonte de verdade é uma wiki em arquivos .md; o SQLite é um índice derivado. Isso torna a memória inspecionável, versionável e recuperável sem depender de um banco vetorial opaco.
O caminho padrão não exige chave de API nem chamadas a LLM: captura, busca textual e handoff continuam disponíveis. Na primeira execução do servidor, o ai-memory baixa o modelo local all-MiniLM-L6-v2 para embeddings; ele não precisa de chave de API. Uma LLM é opcional para recursos de consolidação e recuperação. Para desligar embeddings locais, defina embedding_provider = "none" na configuração. Antes de ativar hooks, avalie o que pode entrar no histórico do projeto. Para áreas sensíveis, use uma política de captura e mantenha a instância apenas no loopback.
Pré-requisitos e escolha da instalação
O projeto oferece binários Linux para x86_64 e aarch64. A alternativa recomendada pelo próprio projeto para instalações nativas é mise use -g github:akitaonrails/ai-memory; abaixo usaremos o tarball da release para deixar versão, checksum, binário e hooks explícitos.
Não use cargo install ai-memory: esse nome já pertence a outro crate no crates.io. Para compilar, use o workspace do repositório; para operar normalmente, prefira um binário da release v2.1.1.
command -v curl sha256sum tar systemctl
uname -m
mkdir -p ~/.local/bin ~/.config/ai-memory ~/.local/share/ai-memory
Baixando e verificando o binário nativo
Baixe sempre o arquivo .sha256 publicado junto ao tarball e interrompa a instalação se a soma não conferir. O bloco abaixo seleciona a arquitetura, usa a release v2.1.1 e preserva os hooks que vêm no pacote.
set -euo pipefail
VER=2.1.1
case "$(uname -m)" in
x86_64) ARQ=ai-memory-linux-x86_64.tar.gz ;;
aarch64|arm64) ARQ=ai-memory-linux-aarch64.tar.gz ;;
*) echo "Arquitetura sem binário publicado: $(uname -m)" >&2; exit 1 ;;
esac
BASE="https://github.com/akitaonrails/ai-memory/releases/download/v${VER}"
TMP=$(mktemp -d)
trap 'rm -rf "$TMP"' EXIT
curl -fL "$BASE/$ARQ" -o "$TMP/$ARQ"
curl -fL "$BASE/$ARQ.sha256" -o "$TMP/$ARQ.sha256"
(
cd "$TMP"
sha256sum -c "$ARQ.sha256"
mkdir release
tar -xzf "$ARQ" -C release
)
install -m 0755 "$TMP/release/ai-memory" "$HOME/.local/bin/ai-memory"
install -d "$HOME/.local/share/ai-memory/release-$VER"
cp -a "$TMP/release/hooks" "$HOME/.local/share/ai-memory/release-$VER/"
export PATH="$HOME/.local/bin:$PATH"
ai-memory --version
Se ai-memory não aparecer em um terminal novo, acrescente export PATH="$HOME/.local/bin:$PATH" ao arquivo de inicialização do shell, como ~/.bashrc ou ~/.zshrc.
Inicializando a base local
Vamos manter a configuração em ~/.config/ai-memory/config.toml e os dados em ~/.local/share/ai-memory, o padrão esperado em uma instalação de usuário no Linux.
ai-memory
--data-dir "$HOME/.local/share/ai-memory"
--config "$HOME/.config/ai-memory/config.toml"
init
Após o primeiro uso, a wiki fica em ~/.local/share/ai-memory/wiki/, o índice SQLite em ~/.local/share/ai-memory/db/memory.sqlite e os modelos locais em ~/.local/share/ai-memory/models/. A wiki é a fonte de verdade das páginas, mas sessões, observações, handoffs e auditoria também vivem no banco. Para uma cópia completa, use o comando de backup do próprio ai-memory:
mkdir -p "$HOME/backups/ai-memory"
ai-memory backup --to "$HOME/backups/ai-memory/ai-memory-$(date +%Y%m%d-%H%M).tar.gz"
Subindo o servidor com systemd do usuário
O servidor MCP precisa ficar rodando para que os CLIs e hooks falem com ele. Este serviço de usuário escuta somente em 127.0.0.1:49374: não publique essa porta na rede.
cat > ~/.config/systemd/user/ai-memory.service <<'UNIT'
[Unit]
Description=ai-memory local MCP and lifecycle server
After=network.target
[Service]
Type=simple
WorkingDirectory=%h
ExecStart=%h/.local/bin/ai-memory --data-dir %h/.local/share/ai-memory --config %h/.config/ai-memory/config.toml serve --transport http --bind 127.0.0.1:49374
Restart=on-failure
RestartSec=5
NoNewPrivileges=true
PrivateTmp=true
[Install]
WantedBy=default.target
UNIT
systemctl --user daemon-reload
systemctl --user enable --now ai-memory.service
systemctl --user status ai-memory.service --no-pager
Em uma máquina que deve manter o serviço ativo mesmo sem login gráfico, habilite linger uma única vez:
loginctl enable-linger "$USER"
Confira o processo e os logs quando algo não responder:
systemctl --user is-active ai-memory.service
journalctl --user -u ai-memory.service -n 80 --no-pager
ai-memory status
Usando ChatGPT/Codex como provedor LLM
Sem provedor, o ai-memory continua capturando sessões, buscando na wiki e criando resumos determinísticos. Um LLM acrescenta consolidação mais rica, lint e melhorias em segundo plano. Para usar a assinatura ChatGPT Plus, Pro ou Codex, selecione openai-oauth: ele usa o backend ChatGPT/Codex por OAuth, não precisa de OPENAI_API_KEY e guarda o token renovável em ~/.local/share/ai-memory/auth.json.
Para consolidação, um modelo econômico é suficiente. O exemplo fixa gpt-5.6-luna, com none para não gastar tokens de raciocínio em tarefas de resumo. Crie um drop-in do systemd, em vez de editar a unidade principal:
mkdir -p ~/.config/systemd/user/ai-memory.service.d
cat > ~/.config/systemd/user/ai-memory.service.d/llm-openai-oauth.conf <<'EOF'
[Service]
Environment=AI_MEMORY_LLM_PROVIDER=openai-oauth
Environment=AI_MEMORY_LLM_MODEL=gpt-5.6-luna
Environment=AI_MEMORY_LLM_REASONING_EFFORT=none
Environment=AI_MEMORY_CONSOLIDATE_ON_SESSION_END=true
EOF
systemctl --user daemon-reload
O último parâmetro agenda a consolidação com LLM depois de um encerramento de sessão; a captura e o handoff não ficam bloqueados esperando a resposta do modelo. O GPT-5.6 Luna aceita esforço de raciocínio none e é voltado a cargas de alto volume e menor custo.
Login OAuth e teste
Faça o login interativo no mesmo usuário que executa o serviço. O comando mostra uma URL e um código temporário: abra a URL, entre na sua conta ChatGPT/Codex e informe o código. Não copie o arquivo auth.json, nem cole tokens em arquivos de configuração.
ai-memory auth login openai-oauth
# depois de autorizar no navegador:
systemctl --user restart ai-memory.service
ai-memory auth status
ai-memory llm-test
--provider openai-oauth
--model gpt-5.6-luna
--prompt 'Responda somente: OK'
O teste deve devolver OK. Se o login expirar ou for revogado, repita ai-memory auth login openai-oauth; para trocar de conta, execute antes ai-memory auth logout openai-oauth. Consulte a documentação de provedores do ai-memory para Anthropic, OpenAI por API, Gemini, Copilot e endpoints compatíveis com OpenAI.
Registrando MCP e hooks nos agentes
O MCP dá ao agente ferramentas como consulta de memória e aceitação de handoff. Os hooks fazem a captura automática do ciclo de vida. Os dois são necessários para a experiência completa. Os comandos abaixo fazem merge das entradas pertencentes ao ai-memory, sem exigir edição manual dos JSON e TOML dos clientes.
Defina o diretório de hooks extraído na instalação e execute a dupla de comandos para cada cliente instalado:
export PATH="$HOME/.local/bin:$PATH"
HOOKS_DIR="$HOME/.local/share/ai-memory/release-2.1.1/hooks"
# Claude Code
ai-memory install-mcp --client claude-code --apply
ai-memory install-hooks --agent claude-code --hooks-dir "$HOOKS_DIR" --apply --project-strategy repo-root
# OpenAI Codex
ai-memory install-mcp --client codex --apply
ai-memory install-hooks --agent codex --hooks-dir "$HOOKS_DIR" --apply --project-strategy repo-root
# Cursor
ai-memory install-mcp --client cursor --apply
ai-memory install-hooks --agent cursor --hooks-dir "$HOOKS_DIR" --apply --project-strategy repo-root
# Grok Build CLI
ai-memory install-mcp --client grok --apply
ai-memory install-hooks --agent grok --hooks-dir "$HOOKS_DIR" --apply --project-strategy repo-root
Reinicie os clientes depois do merge. No Codex, aprove os hooks quando o cliente pedir confirmação. No Grok, o stdout do evento SessionStart não é inserido no contexto; ao retomar trabalho, peça ao agente para chamar memory_handoff_accept. No Codex CLI 0.145.0 ou mais novo, o evento SessionEnd entrega o handoff automaticamente. Em versões antigas — ou quando esse evento não estiver disponível — o evento Stop não encerra a sessão: execute ai-memory finalize-session --agent codex ao concluir uma tarefa importante.
Escopo por repositório e regras de privacidade
Sem configuração, o projeto é identificado pelo nome do diretório corrente. O parâmetro --project-strategy repo-root usado acima evita que um cd para um subdiretório crie uma memória separada. Para declarar o escopo no próprio repositório, crie .ai-memory.toml na raiz:
workspace = "pessoal"
project = "site-linuxpro"
[briefing]
inject_on_session_start = "true"
max_chars = 4000
[capture]
ignore_paths = ["private/**", "~/.ssh/**"]
Os valores de workspace e project aceitam letras minúsculas ASCII, dígitos, ponto, hífen e sublinhado. A seção capture evita registrar eventos reconhecidos de ferramentas de arquivo sob os caminhos indicados; não é uma solução completa de DLP para comandos de shell ou conteúdo que você mesmo escrever no prompt. Para máxima cautela, instale os hooks em modo allowlist e coloque o marcador somente nos repositórios que devem ser capturados:
ai-memory install-hooks --agent claude-code --hooks-dir "$HOOKS_DIR" --apply --capture-mode allowlist
Consultando a memória e entregando contexto
Depois de trabalhar normalmente pelo agente, use o MCP para pedir uma busca sobre decisões, arquivos ou tentativas anteriores. Ao encerrar, finalize a sessão quando necessário; o próximo agente deve aceitar o handoff pendente em vez de começar do zero.
# Útil principalmente após uma sessão do Codex:
ai-memory finalize-session
# Diagnóstico e manutenção local
ai-memory status
ai-memory lint
Dentro de Claude, Codex, Cursor ou Grok, uma instrução simples basta: “busque na memória decisões sobre autenticação deste projeto” ou “aceite o handoff pendente”. O agente usa as ferramentas MCP registradas; não é preciso copiar a wiki para a conversa.
Acesso remoto: não exponha a porta crua
O exemplo deste artigo é local e não usa autenticação porque o bind é exclusivo de loopback. Para atender outra máquina, configure token bearer, allowed_hosts e HTTPS por um proxy reverso antes de alterar o bind. Autenticação não cifra o tráfego. O projeto mantém um guia de proxy HTTPS com exemplos para Caddy e Cloudflare Tunnel.
Atualizações e recuperação
Para atualizar uma instalação por tarball, baixe a nova release, valide o checksum, substitua o binário, atualize o diretório de hooks e reinicie o serviço. Depois, rode novamente install-hooks --apply para cada agente. Não apague wiki/ nem db/ durante esse processo e faça antes um backup completo com ai-memory backup.
systemctl --user restart ai-memory.service
systemctl --user status ai-memory.service --no-pager
Se houver problema após uma atualização, restaure o arquivo gerado por ai-memory backup e examine journalctl --user -u ai-memory.service. Esse backup inclui a wiki e o estado SQLite necessário para preservar também sessões, observações e handoffs.
Crédito ao autor e licença
O ai-memory é criado e mantido por Fábio Akita, autor do repositório akitaonrails/ai-memory. O arquivo LICENSE da release identifica “Copyright (c) 2026 Fabio Akita” e disponibiliza o projeto sob a licença MIT. Obrigado ao Fábio por disponibilizar uma alternativa aberta, local e interoperável para memória de agentes.
Com o serviço local, MCP e hooks instalados, você pode alternar de agente sem abandonar o histórico técnico do projeto. Para comparar outras opções, veja também as alternativas ao Claude-Mem em Go, Rust e C e o artigo sobre memória persistente para agentes no Linux.