Migrando 177 sessões do OpenCode para o AI Memory: passo a passo com comandos

Migrando 177 sessões do OpenCode para o AI Memory: passo a passo com comandos

●1 ●2 ●13
calendar_today ago • schedule5 min read

Como importar o histórico de desenvolvimento para uma memória local pesquisável, validar os dados e organizar o processo de migração no Debian.

O histórico de uma ferramenta de desenvolvimento com IA pode acumular meses de decisões técnicas, diagnósticos, comandos e soluções. O desafio é tornar esse conhecimento reutilizável em novas sessões, sem depender de buscas manuais em conversas antigas.

Neste artigo, compartilho o processo que utilizei para migrar sessões do OpenCode para o AI Memory, incluindo os comandos, as validações e os resultados obtidos.

1. Preparando o ambiente

O ambiente utilizado foi Debian Linux, com OpenCode 2.0.28 e AI Memory 2.6.5 durante a importação inicial. Posteriormente, atualizei o AI Memory para a versão 2.6.6 para corrigir um problema no comando list-projects.

O banco de dados original do OpenCode estava em:

~/.local/share/opencode/opencode.db

Antes de iniciar, preservei o histórico original e mantive backups em ~/backups/opencode/.

Para conferir os arquivos de backup:

ls -lh ~/backups/opencode/

Importante: não remova nem sobrescreva o banco original do OpenCode. A importação deve ocorrer para o armazenamento do AI Memory, mantendo uma cópia de segurança do histórico de origem.

2. Iniciando e validando o servidor

O AI Memory estava configurado para executar como serviço do usuário, na porta 49375.

Verifiquei o serviço:

systemctl --user is-active ai-memory
systemctl --user status ai-memory --no-pager

Caso seja necessário reiniciá-lo:

systemctl --user restart ai-memory

Em seguida, defini a URL correta para o CLI:

export AI_MEMORY_SERVER_URL=http://127.0.0.1:49375

Para persistir essa configuração no Bash:

grep -q 'AI_MEMORY_SERVER_URL=http://127.0.0.1:49375' ~/.bashrc || \
  echo 'export AI_MEMORY_SERVER_URL=http://127.0.0.1:49375' >> ~/.bashrc

source ~/.bashrc

A variável é importante porque o CLI utilizava por padrão a porta 49374, enquanto o servidor estava escutando na 49375.

Validei a conexão:

ai-memory status

Esse comando apresenta informações sobre o armazenamento, as sessões, as observações, a indexação textual e os embeddings.

3. Identificando as sessões que poderiam ser migradas

O histórico estava distribuído entre vários projetos. Como o backfill depende do diretório de trabalho para identificar o projeto e selecionar sessões, não bastava executar a importação a partir de qualquer pasta.

Primeiro, inventariei as sessões no banco original e gerei um relatório de validação chamado:

~/backups/opencode/session-validation.log

O relatório continha entradas com o status OK para sessões validadas e MISSING para sessões cujos diretórios originais não estavam disponíveis.

O inventário identificou 197 sessões. Dessas, 177 estavam associadas a diretórios disponíveis e passaram pela validação. Outras 20 pertenciam a projetos legados ou diretórios removidos e foram deixadas de fora deliberadamente.

O relatório foi usado como fonte para automatizar a importação sem tentar processar as sessões excluídas.

4. Validando antes de importar

Antes da gravação definitiva, executei o backfill em modo dry-run, selecionando uma sessão por vez.

Exemplo:

cd "$HOME/Documentos/github/meu-projeto"

export AI_MEMORY_SERVER_URL=http://127.0.0.1:49375

ai-memory backfill \
  --session ses_047652742ffeDkF5OI6oK3Ewpd \
  --max-sessions 1 \
  --dry-run \
  --json

O parâmetro --session restringe a execução a uma sessão específica. --max-sessions 1 limita o processamento a uma sessão por chamada, enquanto --dry-run permite verificar a seleção sem efetivar a importação.

A validação confirmou que a sessão era elegível e que o comando não registrava falhas.

Esse cuidado foi importante porque a seleção dependia do projeto atual. Quando executei o comando a partir de ~, o CLI identificou o projeto como marcos e não selecionou a sessão desejada.

5. Testando uma importação real

Depois de validar a seleção, importei uma sessão de teste:

cd "$HOME/Documentos/github/meu-projeto"

AI_MEMORY_SERVER_URL=http://127.0.0.1:49375 \
  ai-memory backfill \
  --session ses_047652742ffeDkF5OI6oK3Ewpd \
  --max-sessions 1 \
  --json

O resultado confirmou:

  • Uma sessão importada.
  • 542 eventos importados.
  • Zero falhas.

Como o armazenamento deixa de estar vazio após a primeira importação, utilizei --force nas chamadas seguintes. Esse parâmetro permite executar o backfill mesmo quando já existem sessões no armazenamento.

O uso de --force deve ser combinado com a seleção explícita da sessão e a validação dos resultados, para evitar processar mais histórico do que o pretendido.

6. Automatizando as 176 sessões restantes

Com o teste concluído, automatizei a importação das demais sessões elegíveis. O script abaixo utiliza o relatório de validação criado anteriormente, pula a primeira sessão já importada e registra os resultados em um log.

Salve como ~/backups/opencode/import-restantes.sh:

cat > "$HOME/backups/opencode/import-restantes.sh" <<'EOF'
#!/usr/bin/env bash

set -uo pipefail

REPORT="$HOME/backups/opencode/session-validation.log"
LOG="$HOME/backups/opencode/import-restantes.log"
export AI_MEMORY_SERVER_URL="http://127.0.0.1:49375"

JA_IMPORTADA="ses_047652742ffeDkF5OI6oK3Ewpd"

if [[ ! -f "$REPORT" ]]; then
  echo "Relatório não encontrado: $REPORT"
  exit 1
fi

total=0
sucesso=0
falha=0
ignorada=0

while IFS=$'\t' read -r status id dir; do
  [[ "$status" == "OK" ]] || continue
  [[ -n "$id" && -n "$dir" ]] || continue

  if [[ "$id" == "$JA_IMPORTADA" ]]; then
    ignorada=$((ignorada + 1))
    continue
  fi

  if [[ ! -d "$dir" ]]; then
    echo "ERRO: diretório ausente: $id — $dir" | tee -a "$LOG"
    falha=$((falha + 1))
    continue
  fi

  total=$((total + 1))
  echo "[$total] Importando $id — $dir" | tee -a "$LOG"

  if (
    cd "$dir" &&
    ai-memory backfill \
      --session "$id" \
      --max-sessions 1 \
      --force \
      --json
  ) >> "$LOG" 2>&1; then
    sucesso=$((sucesso + 1))
    echo "OK: $id" | tee -a "$LOG"
  else
    falha=$((falha + 1))
    echo "FALHA: $id — verificar $LOG" | tee -a "$LOG"
  fi
done < "$REPORT"

echo
echo "Importação concluída."
echo "Processadas: $total | Sucesso: $sucesso | Falhas: $falha | Já importada: $ignorada"
echo "Log: $LOG"

ai-memory status
EOF

chmod +x "$HOME/backups/opencode/import-restantes.sh"

Para executar:

"$HOME/backups/opencode/import-restantes.sh"

O script percorre somente as entradas OK, muda para o diretório original de cada sessão e executa uma importação por chamada. As sessões ausentes são registradas como falhas, e o processamento continua para as seguintes.

O resultado foi de 176 sessões importadas pelo script, sem falhas, além da sessão de teste já importada.

7. Conferindo os resultados

Ao final, executei:

AI_MEMORY_SERVER_URL=http://127.0.0.1:49375 ai-memory status

O armazenamento apresentou os seguintes indicadores:

Indicador Resultado
Sessões importadas 177
Falhas de importação 0
Observações armazenadas 16.610
Páginas, incluindo versões anteriores 189
Embeddings 189
Páginas mais recentes sem embedding 0
Eventos pendentes no spool 0
Espaço utilizado 26,8 MiB

A busca textual estava indexada para todas as 189 versões de páginas e para as 16.610 observações. O modelo local all-MiniLM-L6-v2, com vetores de 384 dimensões, estava operacional.

Para consultar os projetos disponíveis, utilizei:

ai-memory list-projects

Inicialmente, esse comando retornou 404 Not Found com a versão 2.6.5. Após atualizar o CLI para a versão 2.6.6, o comando passou a listar corretamente os projetos.

8. Problemas encontrados e como foram resolvidos

O CLI tentava acessar a porta errada.
A variável AI_MEMORY_SERVER_URL não estava definida no ambiente. A solução foi exportar a URL do servidor na porta 49375 e persistir a configuração no ~/.bashrc.

O backfill não encontrava a sessão.
A execução ocorria fora do diretório original do projeto. A solução foi entrar no diretório correto antes de executar o comando.

O armazenamento já não estava vazio.
Após a importação inicial, as chamadas seguintes precisaram de --force para executar o backfill. Para limitar o escopo, mantive --session e --max-sessions 1.

O comando list-projects retornava 404.
A atualização para o AI Memory 2.6.6 resolveu o problema observado, sem necessidade de reimportar as sessões.

Conclusão

O processo transformou 177 sessões do OpenCode em uma base local pesquisável, com 16.610 observações e embeddings gerados sem falhas de importação.

O ponto mais importante não foi apenas executar o backfill, mas validar as sessões, preservar o histórico original, respeitar o contexto dos projetos e registrar os resultados de cada etapa.

O AI Memory passa a oferecer uma base para recuperar decisões e investigações anteriores. A próxima etapa é validar essa recuperação em situações reais de desenvolvimento e manter a integração funcionando continuamente.

CodeLegion #OpenCode #AIMemory #IA #DevTools #LLM #EngenhariaDeSoftware #DevEx

🔥 Join developers growing publicly
Share your knowledge, build in public, and grow your developer presence with a global community.

More Posts

Do histórico perdido ao contexto reutilizável: migrando sessões do OpenCode para o AI Memory

Marcos Vilela - Oct 13

AI Memory no Debian: como integrar memória persistente ao OpenCode com mise, MCP e systemd

Marcos Vilela - Oct 13

Frameworks Are Institutional Memory

Ken W. Algerverified - Sep 17

Minha Experiência com o uso do SpecKit no desenvolvimento em Infra/Cloud

Marcos Vilela - Jul 2

AI Reliability Gap: Why Large Language Models are not for Safety-Critical Systems

praneeth - Mar 31
chevron_left
325 Points • 16 Badges
Montes Claros/MG • github.com/marcosvile
8Posts
3Comments
4Connections
Sou graduado em Análise e Desenvolvimento de Sistemas, com experiência em Linux, Docker, redes e amb... Show more

Commenters (This Week)

4 comments
1 comment
1 comment

Contribute meaningful comments to climb the leaderboard and earn badges!