Pular para o conteúdo
Open Source•pt

shellmemory

Um logger de comandos de terminal que registra cada comando em todas as suas sessões de shell diretamente em um banco SQLite.

Demonstração ilustrativa de shellmemory em três etapas. Nenhum comando real é executado.

O que é o shellmemory?

shellmemory é um hook de shell que registra silenciosamente cada comando que você executa, em todas as suas sessões de terminal, em um banco de dados SQLite local. É um histórico de shell persistente e pesquisável que vai além do HISTFILE nativo do shell.

Seus comandos são registrados com timestamp, marcados com o diretório de trabalho e consultáveis via SQL ou um comando de busca integrado. Nada é enviado a lugar nenhum. Tudo fica local.

O Problema que Resolve

O histórico de shell é frágil. Por padrão, a maioria dos shells mantém um arquivo de texto plano com um número limitado de linhas. O histórico é truncado, sobrescrito quando múltiplas sessões fecham em paralelo, ou simplesmente perdido ao trocar de máquina.

O shellmemory substitui o arquivo de texto por um banco de dados real: cada comando, de cada sessão, preservado indefinidamente e consultável sem aprender novas ferramentas.

Funcionalidades Principais

Captura automática

Instale o hook uma vez e cada comando é registrado automaticamente. Sem necessidade de invocação manual.

# Hook dispara após cada comando
PROMPT_COMMAND="shellmemory log"  # bash
precmd() { shellmemory log }     # zsh

Metadados por entrada

Cada comando registrado inclui:

CampoDescrição
commandA string completa do comando
timestampData e hora em ISO 8601
exit_codeCódigo de retorno do comando
cwdDiretório de trabalho no momento da execução
session_idUUID por sessão de terminal
hostnameHostname da máquina

Pesquisa

shellmemory search "docker"          # busca de texto completo
shellmemory search --dir ~/projects  # filtrar por diretório
shellmemory search --failed          # apenas comandos com falha (exit_code != 0)
shellmemory search --since "7 days"  # busca com limite de tempo

Exportação e estatísticas

shellmemory stats                    # resumo: total de comandos, top comandos
shellmemory export --format csv      # exportar para CSV
shellmemory export --format json     # exportar para JSON

Instalação

# Clonar e fazer source do hook
git clone https://github.com/fernandobelotto/shellmemory ~/.shellmemory
echo 'source ~/.shellmemory/shellmemory.sh' >> ~/.bashrc  # ou .zshrc

O shellmemory requer que sqlite3 esteja disponível no seu PATH.

Stack Tecnológica

  • Shell (compatível com Bash/Zsh): o hook e a CLI são scripts shell puros
  • SQLite: banco de dados embutido, sem dependências além do binário sqlite3
  • Migrações de schema rodam automaticamente no primeiro uso

Filosofia de Design

O shellmemory é intencionalmente minimalista. Não tenta ser um substituto completo de shell ou uma ferramenta de sincronização em nuvem. Captura comandos localmente, armazena em um formato consultável com qualquer ferramenta SQL, e sai do caminho. O arquivo de banco de dados é seu. Faça backup, consulte com DBeaver, filtre com jq, faça o que quiser com ele.