
Cofre CLI criptografado para notas, configurações, chaves e arquivos. Pesquise, não organize.
Isto NÃO é um gerenciador de senhas. NÃO é um aplicativo de notas. E definitivamente NÃO é um registro de proveniência taxonômica de espécimes bentônicos aberrantes do fundo do mar. Mas faz os dois primeiros melhor do que qualquer um. Brincadeira (nem tanto).
Instalar • Início Rápido • Funcionalidades • Comando Link • Comandos • Como Funciona • Segurança • Porquê
Pesquise, não organize. Notas, configurações, chaves, segredos — cinco segundos a partir do seu terminal.
"Não me incomode com bagunça comum." — O Peixeiro
go install github.com/DeprecatedLuar/dredge-cargo/cmd/dredge@latest
git clone e você tem seus dados.dredge undo se excluir acidentalmente.Não vou te julgar. Chaves de API irritantes que aparecem apenas uma vez, configuração SSH, prompts de IA, senhas, scripts de shell literais que você pode executar, modelos de e-mail?, dotfiles (estranho, mas funciona bem), arquivos zip, lista de filmes, listas de URLs para acesso rápido... Até uma cópia legal do capítulo 2 de Chainsaw Man em japonês. (Eu posso ou não ter essa especificamente)
go install github.com/DeprecatedLuar/dredge-cargo/cmd/dredge@latest
Certifique-se de que $GOPATH/bin (geralmente ~/go/bin) está no seu PATH.
curl -sSL https://raw.githubusercontent.com/DeprecatedLuar/the-satellite/main/satellite.sh | bash -s -- install DeprecatedLuar/dredge-cargo:dredge
Instalação Manual
chmod +x dredge-*mv dredge-* ~/.local/bin/dredgeA partir da Fonte
git clone https://github.com/DeprecatedLuar/dredge-cargo
cd dredge-cargo
go build -o dredge ./cmd/dredge
mv dredge ~/.local/bin/
# Initialize with an existing git remote
dredge init yourusername/vault # GitHub shorthand
# or: dredge init [email protected]:you/vault.git
# Add your first item
dredge add "OpenAI Key" -c "sk-..." -t keys api #opens the editor without -c flag
# Search for it
dredge search openai
# Push to git
dredge push
# Add anything
dredge add My SSH Config -t ssh dotfiles --import ~/.ssh/config
dredge add "Master Architect Prompt" --import prompt.md -t ai prompts
dredge add "Watchlist" -c "Dune 2, Oppenheimer..." -t lists
dredge add "project-backup" --import project.tar.gz # binary files too :D
# Search — just type whatever you remember
dredge search prompt
dredge search aws key
dredge search ssh
# View, edit, remove
dredge view <id>
dredge edit <id>
dredge rm <id>
dredge undo # brought it back
# Search results are numbered — just type the number to view
dredge search ssh # shows: 1. [xKP] SSH Config 2. [mNq] SSH Key
dredge 1 # views it directly
# Git sync
dredge push
dredge pull
dredge sync # pull + push
"Não consigo imaginar o que está lá no fundo." — O Guardião do Farol
Ok, então resumindo:
Eu optei por usar duas principais tecnologias criptográficas: Argon2id e, claro, AES-256, mais especificamente a variante GCM.
Argon2id porque é A recomendação da RFC 9106 e o vencedor do PHC 2015. É isso. A variante GCM do AES porque torna todos os dados criptografados impossíveis de adulterar devido à impressão digital. É isso também.
Por enquanto estou armazenando tudo como arquivos criptografados em ~/.local/share/dredge/. Esse diretório também é um repositório git (pelo menos por enquanto). Então dredge push commita e envia tudo para backup. Cada item é um blob criptografado independente com um ID aleatório de 3 caracteres. Decidi que nenhum nome de arquivo deve ser exposto, então mesmo que alguém veja seus arquivos, não tem ideia do que está olhando.
Your password
+ 16-byte random salt ← the salt is stored in .dredge-key
→ Argon2id (64 MB memory · 4 threads · 1 iteration)
→ 32-byte master key (salt + password = the real key)
Master key + item content (TOML: title, tags, content)
→ AES-256-GCM with a fresh random 12-byte nonce per operation
→ [12B nonce][ciphertext + 16B auth tag]
→ written to disk as items/xKP (random ID, no extension)
Então todo o seu cofre compartilha a mesma chave derivada (isso significa que se você perder sua chave, perde seus dados — por favor, não perca sua chave). Cada item usa a mesma chave, cada um com seu próprio nonce aleatório. Se você criptografar o mesmo conteúdo duas vezes, produz ciphertext completamente diferente.
~/.local/share/dredge/ ← o cofre (repositório git)
├── .git/
├── .gitignore ← exclui .spawned/ e links.json
├── .dredge-key ← salt + string de verificação criptografada
├── items/
│ ├── xKP ← item criptografado
│ ├── mNq ← item criptografado
│ └── ...
├── .spawned/ ← cópias em texto plano de itens vinculados
└── links.json ← manifesto de links simbólicos
Então todos os seus arquivos criptografados e .dredge-key estão no repositório git; todos os arquivos em texto plano (aqueles que você decidiu tornar legíveis pelo sistema) nunca serão rastreados. Então faça o que quiser com eles.
Após seu primeiro comando em um terminal, a chave derivada de 32 bytes é armazenada em cache em $XDG_RUNTIME_DIR/dredge/$PPID/.key (acesso apenas root).
Todos os comandos subsequentes do dredge no MESMO terminal usam a chave em cache. Isso significa que você não será solicitado a digitar a senha novamente. Cada terminal tem seu próprio diretório isolado baseado no PID pai. Portanto, a chave é evaporada do disco assim que o terminal morre.
Derivação de chave — Argon2id: Parâmetros recomendados pela RFC 9106 (64 MB de memória, 4 threads, 1 iteração). O salt em .dredge-key não deve ser secreto; ele apenas garante que forçar sua senha por brute-force seja muito caro, mesmo com o arquivo. Sua senha é o que mantém você seguro, então você sabe o que fazer.
Cifra — AES-256-GCM: Basicamente, imprime uma impressão digital em cada criptografia. Você obtém confidencialidade e integridade. Adulterar o ciphertext não resultará em lixo; a descriptografia falhará e gritará por socorro.
Verificação de senha: .dredge-key contém a string dredge-vault-v1 criptografada com sua chave mestra. Em cada nova sessão, o dredge descriptografa isso para verificar se a senha está correta. Portanto, se você não obtiver dredge-vault-v1 disso, a senha está errada, então a falha ocorre em ~100ms, em vez de descobrir uma senha errada no meio da operação.
O que é armazenado em cache: O arquivo de sessão armazena a chave derivada de 32 bytes (senha + salt), não a senha em si (não sou tão estúpido). Portanto, mesmo que alguém leia .key durante uma sessão ativa, não é possível recuperar sua senha a partir dela.
Segurança"Melhor voltar com uma pequena captura do que não voltar de jeito nenhum." — O Peixeiro
Alguém clona seu repositório git privado:
Eles obtêm blobs criptografados e .dredge-key. O salt não é secreto — seu propósito é tornar ataques de pré-computação impraticáveis. Sem sua senha, os itens são dados binários opacos. Argon2id torna o brute-force offline caro. Use uma senha forte.
Alguém tem acesso à sua sessão ativa:
A chave derivada reside em $XDG_RUNTIME_DIR/dredge/$PPID/.key durante a duração daquela sessão de terminal. Cada terminal tem seu próprio diretório isolado — feche o terminal, a chave desaparece. Esse caminho tem escopo de usuário (modo 700) e é suportado por RAM. Um invasor com acesso de leitura ao seu diretório de sessão pode descriptografar seu cofre. Trate isso como qualquer credencial sensível em seu diretório home. Se alguém tem root na sua máquina, sua chave do dredge é a menor das suas preocupações.
Alguém tem acesso físico à sua máquina offline:
Os itens no disco estão criptografados. A chave de sessão está em armazenamento suportado por RAM e não sobrevive a uma reinicialização. Itens vinculados (.spawned/) estão em texto plano no disco — veja abaixo.
O arquivo gerado (.spawned) é o único texto plano persistente no disco, e ele só existe porque você explicitamente vinculou um item a um caminho do sistema. Todo o resto é apenas em memória.
--password / DREDGE_PASSWORD: Passar sua senha inline a expõe no histórico do shell e na saída do ps. Variáveis de ambiente podem vazar para processos filhos. Evite ambos em ambientes compartilhados.--vault / DREDGE_VAULT: Substitui o cofre ativo para um único comando sem persistir a alteração. Útil para scripts em vários cofres.~/.ssh/config). Não é rastreado pelo git, mas está no disco em texto plano.
Vincule qualquer item armazenado a um caminho no seu sistema de arquivos:
dredge link <id> ~/.ssh/config
Este comando criará um link simbólico em ~/.ssh/config apontando para uma cópia em texto plano gerenciada pelo dredge (o arquivo é exposto no disco para que você possa usá-lo). Você pode editar o arquivo diretamente ou através de dredge edit ou o que preferir; todas as alterações são sincronizadas de volta para o armazenamento criptografado automaticamente.
Auto-reparo: Se você renomear um link simbólico (ex.: mv ~/.ssh/config ~/.ssh/config-backup), o dredge detecta e rastreia o novo caminho automaticamente. Links simbólicos deletados são limpos na inicialização da sessão.
Em uma nova máquina:
git clone [email protected]:you/vault.git ~/.local/share/dredge
dredge link <id> ~/.ssh/config
# mesma configuração SSH, mesmas chaves, toda máquina rastreada pelo git para qualquer atualização
Esta é na verdade a razão pela qual construí o dredge. Minha configuração SSH é idêntica em todas as máquinas, mas eu não podia simplesmente colocá-las dentro dos meus dotfiles.
A sincronização Git usa git puro e funciona com qualquer remoto (GitHub/GitLab/Gitea/etc).
dredge init aceita um remoto git opcional. Se você omiti-lo, o dredge inicializa um repositório git apenas local (sem remoto).
Comportamento de auto-commit: push, pull e sync preservam alterações não commitadas sincronizadas em um commit antes de reconciliar com o remoto. Se você precisar descartar alterações locais para priorizar a versão remota, use dredge drop.
Retenção automática de histórico: push e sync aplicam a política em dredge.toml. Metadados de itens e armazenamento binário têm limites independentes de versão por item e de bytes criptografados, enquanto history.deleted.retain_for controla por quanto tempo IDs deletados permanecem recuperáveis. Se a política não remover nada, o Dredge faz push normalmente. Se for necessária compactação, o Dredge verifica o histórico de substituição e usa um force-with-lease exato; uma atualização remota concorrente para com segurança em vez de ser sobrescrita. pull nunca compacta nem faz force-push.
Inspecione o histórico retido com dredge history, dredge history deleted ou dredge history <id>. Restaure um item criptografado deletado com dredge history restore <id>. Alterações de senha não recriptografam blobs históricos, portanto versões restauradas criadas sob uma senha antiga podem não descriptografar com a senha atual.
Formatos remotos aceitos:
# Abreviação GitHub (expandido para https://github.com/<owner>/<repo>.git)
dredge init owner/repo
# HTTPS
dredge init https://github.com/owner/repo.git
dredge init https://gitlab.com/group/repo.git
# SSH (estilo scp)
dredge init [email protected]:owner/repo.git
dredge init [email protected]:group/repo.git
# URL SSH
dredge init ssh://[email protected]/owner/repo.git
# Caminho local remoto (avançado)
dredge init /srv/git/dredge-vault.git
origin não estiver configurado, dredge push/pull/sync emitirá erro com orientação.dredge init não o sobrescreverá.
"Sou um colecionador — de muitas coisas; arte e artefatos, tesouros e verdades... e curiosidades que ocupam a periferia do desejo." — O Colecionador
O custo mental de guardar algo e não saber onde encontrá-lo quando precisa.
Fiquei irritado por ter coisas importantes (e não importantes também, apenas coisas em geral) espalhadas por toda parte, eu teria que acessar uma conta de e-mail que criei há 6 anos porque estava vinculada a um serviço aleatório ao qual precisava acessar urgentemente sem motivo algum... Enfim, percebi que muitas ferramentas, apesar de terem seus truques, todas se sobrepõem em um aspecto muito importante que é armazenar informações, então criei uma ferramenta que se especializa nessa sobreposição específica e deixa as ferramentas fazerem o que fazem de melhor.
Sou preguiçoso, então queria algo que simplesmente funcionasse e lesse minha mente, que não exigisse esforço para adicionar uma entrada nem para recuperá-la da base de conhecimento.
Baixei jrnl uma vez e gostei muito da ideia, mas odiei a execução devido a alguns parâmetros estranhos; literalmente não tinha separação de itens e uma pesquisa que combinava tudo. O Dredge é o que eu realmente queria. (então sim, basicamente uma ferramenta pessoal)
Muito obrigado a vocês que contribuíram para o dredge:
por Luar
| Local | Quando | Tempo de vida |
|---|
| Apenas RAM | Cada visualização, pesquisa ou edição | Liberado quando o comando termina |
$XDG_RUNTIME_DIR/dredge/$PPID/edit-*.txt | Durante dredge edit apenas | Excluído após o editor fechar |
~/.local/share/dredge/.spawned/<id> | Após dredge link | Até você executar dredge unlink |
| Comando | Descrição | Exemplo |
|---|
add / a / new / + | Adiciona um item (abre editor se não houver flag -c) | dredge add "OpenAI Key" -c "sk-..." -t keys |
search / s | Pesquisa itens | dredge search aws key |
list / ls | Lista todos os itens | dredge ls |
view / v | Visualiza um item | dredge view xKP ou dredge 1 |
cat / c | Exibe conteúdo bruto (para pipe) | dredge cat xKP | bash |
edit / e | Edita um item | dredge edit xKP |
rm | Remove (vai para lixeira) | dredge rm 1 2 3 |
undo | Restaura o último item removido | dredge undo |
link / ln | Vincula item a um caminho do sistema | dredge link xKP ~/.ssh/config |
unlink | Remove um link | dredge unlink xKP |
mv / rename | Renomeia ID do item | dredge mv xKP abc |
export | Exporta um item de arquivo para o disco | dredge export xKP ./output/ |
copy / cp | Copia conteúdo do item para a área de transferência | dredge copy xKP |
lock | Bloqueia o cofre (limpa chave de sessão) | dredge lock |
init / use | Inicializa ou ativa um cofre | dredge init ~/vaults/work |
push / pull / sync | Sincronização Git (commita alterações automaticamente) | dredge sync |
drop | Descarta alterações não commitadas | dredge drop xKP ou dredge drop --all |
status | Mostra alterações pendentes | dredge status |
passwd | Altera a senha do cofre | dredge passwd |
update | Atualiza para a versão mais recente | dredge update |