Todos os comandos do seu gerenciador de senhas, do uso diário à emergência. O nome de um item pode ser só um pedaço do título: pfm get conta acha contabo.com.
Começar
Uma vez por notebook. O cofre fica em ~/.local/share/passforme, cifrado.
pfm init criar o cofre
Pede a frase mestra (pelo menos 12 caracteres) e mostra o Emergency Kit: a Secret Key, que começa com SB1-. Uma frase de palavras é mais fácil de lembrar que uma senha aleatória, e o gerador sugere uma.
Anote a frase mestra e a Secret Key em papel e guarde longe do notebook. Sem as duas não há recuperação: o cofre é cifrado no seu aparelho, e ninguém mais tem a chave.
pfm register URL ligar a um servidor (opcional)
Sem servidor, o pfm funciona só neste notebook. Com um passforme-server seu, o cofre sincroniza entre aparelhos, e o servidor só guarda o cofre cifrado. O registro pede um convite de uso único, gerado no servidor.
pfm register https://pfm.example.com
Uso diário
Copiar, consultar e ver. Tudo o que vai para o clipboard se apaga sozinho em 30 segundos.
Tab completa comandos, opções e tipos
Toda opção tem um nome só, por extenso: --username, --generate, --symbols. Para não digitar tudo, use Tab: pfm add x --us + Tab vira --username, e --kind + Tab lista os tipos. Uma forma curta antiga, como -u, responde com o nome novo.
Para ligar, acrescente esta linha ao seu ~/.bashrc:
source <(passforme completions bash)
Também há scripts para zsh, fish, elvish e powershell:
Copia o segredo principal do item: a senha de um login, o número de um cartão, o PIN de um PIN.
Opção
O que faz
--field username
copia o usuário
--field url
copia o endereço
--field totp
copia o código 2FA de agora
--field cvv, --field pin, --field number…
copia um campo pelo nome; um nome errado lista os que existem
--attachment NOME
salva um anexo no diretório atual, ou onde --output mandar; nunca sobrescreve
pfm get contabo
pfm get contabo --field username # copia o usuário
pfm get contabo --field url # copia o endereço
pfm get github --field totp # copia o código 2FA de agora
pfm get nubank --field cvv
pfm get proton-recovery --attachment proton-recovery.txt --output ~/Desktop # salva o anexo numa pasta
pfm list ver todos os itens
Tabela com título, tipo, usuário, URL e o que mais cada item guarda: campos extras, 2FA, quantos códigos de recuperação restam, quantos arquivos anexados, e se programas podem ler o item. Nunca mostra senhas.
pfm list
pfm list | grep -i kimi # filtrar
pfm show NOME ver um item inteiro
Todos os campos, com os segredos como ********. Com --reveal, mostra os segredos na tela. Os anexos aparecem como Attachment: nome (tamanho): é ali que você vê o nome exato para o get --attachment.
pfm show nubank # segredos escondidos
pfm show nubank --reveal # segredos na tela
pfm totp NOME código 2FA
Mostra o código de 6 dígitos de agora e por quantos segundos ele vale. Para copiar: pfm get NOME --field totp. O segredo do 2FA entra com pfm edit NOME --totp.
pfm totp github # mostra o código
pfm get github --field totp # copia o código
pfm codes NOME código de recuperação
Copia o próximo código ainda não usado e o marca como usado. Avisa quando restam dois ou menos. Com --list, mostra todos e quais já foram usados (na tela, em texto puro). Para cadastrar os códigos, ver códigos de recuperação.
pfm codes openai # copia o próximo e marca como usado
pfm codes openai --list # todos, com (used) nos usados
Não há como desmarcar um código: rode pfm codes só na hora de usar. Marcar ao copiar é o lado seguro do erro: no pior caso sobra um código a menos, e nunca um já gasto volta para a lista. Se precisar refazer a lista, cole os códigos de novo com pfm edit NOME --codes.
Cadastrar
Uma senha nova gerada na hora, uma senha que já existe, ou várias de uma vez.
pfm add NOME cadastrar um item
Sem --generate, pede a senha duas vezes, para conferir. Use assim para guardar uma senha que você não quer trocar.
deixa programas (scripts, agentes de IA) lerem o item (ver Agente)
Com --generate valem as opções do gerador: --symbols, --length 16, --words 6… Sem --generate, elas dão erro, em vez de serem ignoradas.
pfm add contabo.com --username root --url https://contabo.com --generate # conta nova
pfm add roteador --username admin --url http://192.168.1.1 # senha que já existe
pfm add banco.com --generate --symbols # com símbolos
pfm add app.com --generate --length 16 # site que limita o tamanho
pfm add-many várias de uma vez
Pede label, senha, label, senha… até um Enter vazio. A frase mestra é pedida uma vez e cada item é salvo na hora: parar no meio não perde nada. A senha colada não aparece na tela. Bom para trazer senhas de outro gerenciador; depois complete cada item com pfm edit.
pfm add-many # Label: github.com, a senha, Label: … Enter vazio termina
Para o site que entra pelo celular ou pela conta Google, cadastre sem --generate e, quando ele pedir o segredo, aperte Enter sem digitar nada: o item fica sem senha. Vale cadastrar mesmo assim, porque daqui a um ano o difícil é lembrar como você entrava.
--username: o número de celular ou o e-mail usado. No login pelo Google, o e-mail da conta Google, porque com várias contas é fácil esquecer qual foi.
Notas: o método ("login com Google", "código por SMS"). O add não tem opção de notas: acrescente com pfm edit NOME --notes e termine o texto com Ctrl-D numa linha vazia.
Códigos de recuperação: se o site tiver 2FA e oferecer códigos de backup, guarde-os num item próprio do tipo recovery-codes.
Se um dia o site passar a pedir senha, gere uma no item que já existe com pfm edit NOME --generate.
pfm add ifood.com.br --username "+55 51 9xxxx-xxxx" --url https://ifood.com.br # Enter vazio no segredo
pfm edit ifood --notes # escreva o método; Ctrl-D termina
pfm add "ifood codes" --kind recovery-codes # códigos de backup do 2FA
pfm edit ifood --generate # se passar a pedir senha
Tipos de item
pfm add NOME --kind TIPO pergunta os campos do tipo, um por vez; Enter pula o campo. pfm kinds lista os tipos no terminal. --username, --url e --file só valem nos tipos que têm esse campo, e --generate só em login, wifi e bank, cujo segredo é uma senha: um PIN, um cartão ou uma frase de cripto gerados não fariam sentido.
Tipo
Para quê
get copia
login (padrão)
site ou app: usuário, senha, URLs, 2FA
a senha
note
texto livre
—
recovery-codes
códigos de backup; um por linha ao colar, linha vazia termina (exemplos)
use pfm codes
recovery-phrase
frase de recuperação de uma conta (Proton…); confere o BIP-39 quando for um
as palavras
security-questions
perguntas e respostas de segurança
--field "a pergunta"
pin
celular, alarme, cadeado
o PIN
api-key
chave de API ou token: o nome dela no site, a validade
a chave
crypto-seed
frase da carteira; confere o checksum do BIP-39
as palavras
ssh-key
chave SSH ou GPG, lida com --file
a chave privada
card
titular, número (confere o dígito), validade MM/AA, CVV, PIN
o número
bank
agência, conta, senhas do app e de transação, chave Pix
pfm add "wifi casa" --kind wifi --generate # a senha da rede, gerada
pfm add itau --kind bank
pfm add cpf --kind document
pfm add "gov.br perguntas" --kind security-questions # pergunta → resposta, até uma pergunta vazia
pfm add "anotações servidor" --kind note # texto livre; Ctrl-D numa linha vazia termina
pfm add jetbrains --kind license
pfm kinds # lista os tipos e os campos de cada um
Frase de cripto e número de cartão são conferidos na hora. Se houver palavra trocada ou dígito errado, o pfm avisa e pergunta antes de salvar, enquanto o papel ainda está na sua mão.
pfm add NOME --kind api-key guardar uma chave de API
O add pergunta um campo por vez, nesta ordem, e Enter pula qualquer um. O Key name já é perguntado aqui: não precisa de --set-field. A conta e a URL também podem ir no comando, com --username e --url, e aí ele pergunta só o resto.
Campo
O que vai nele
Account
a conta da qual a chave saiu, em geral o e-mail. É o username do item, com outro nome. Se a chave vazar, ele diz em qual conta revogá-la.
Key name
o nome que você deu à chave no site, como meu-notebook: com várias chaves na mesma conta, diz qual revogar
Key
a chave, colada; não aparece na tela
URL
o painel onde a chave foi criada
Expires
a validade; vazio se não expira
Com --agent, programas (scripts, agentes de IA) podem ler a chave (ver Agente). Use só se um programa vai ler a chave; para copiar e colar você mesmo, deixe sem, e ela nunca passa pelo agente. Na configuração deles, use o título inteiro: deepseek casaria também com o login deepseek.com.
pfm add "deepseek api key" --kind api-key --username [email protected] --url https://platform.deepseek.com # conta e URL no comando
pfm add "deepseek api key" --kind api-key --agent # chave que um programa vai ler
pfm get "deepseek api key" # copia a chave
pfm get "deepseek api key" --field account # copia o e-mail da conta
pfm edit "deepseek api key" --password # trocar por uma chave nova
pfm edit "deepseek api key" --set-field "Key name" # mudar o nome depois, ou num item criado antes do campo existir
pfm get "deepseek api key" --field "key name" # copia só o nome
Várias chaves na mesma conta: um item por chave, com o nome dela também no título, como deepseek api key notebook e deepseek api key servidor. Assim o get, o list e a configuração dos programas diferenciam uma da outra só pelo título.
Um serviço, vários logins um item para cada login
Alguns serviços têm um login para o app e outro para a API, como o Kimi: o chat em kimi.ai entra pelo telefone, e a plataforma de API em platform.kimi.ai entra por e-mail ou Google. Cadastre um item para cada login, cada um com o seu username, e a chave num terceiro item.
Com vários itens começando por "kimi", pfm get kimi responde "matches several items" e lista os itens. Use o título exato, que sempre ganha, ou um pedaço que só um título tenha.
Duas contas no Zoho, no Google ou na AWS são dois itens, cada um com o seu usuário e a sua senha. Ponha no título o que diferencia uma da outra (pessoal, trabalho, o domínio), para o get achar a certa.
Se é o mesmo login, com a mesma senha, e a conta tem outros e-mails (o de cadastro, um alias, o de recuperação), o --username fica com o que você digita para entrar, e os outros vão em campos extras. O nome do campo é livre: Alias, Signup email, Recovery email, o que fizer sentido para você.
Campos extras só existem no edit: cadastre primeiro, acrescente depois. Se o outro e-mail entra com outra senha, é outro login, e vira outro item.
pfm add "zoho.com empresa" --username [email protected] --url https://www.zoho.com --generate # o e-mail com que você entra
pfm get "zoho.com empresa" --field "signup email" # copia o campo
pfm edit "zoho.com empresa" --rm-field "Signup email" # remove o campo
pfm add NOME --kind recovery-codes códigos de recuperação e o arquivo
Os códigos de backup do 2FA (OpenAI, GitHub, Google…). O tipo pergunta a conta e a URL, que também podem vir no comando, e então os códigos: cole todos, um por linha, e termine com uma linha vazia. Código com espaço no meio vale. Não aparecem na tela.
Se o site deu um arquivo com os códigos, anexe-o com edit --attach, como cópia do original. Mesmo assim os códigos ficam no item, porque o pfm codes usa os do item.
pfm get "openai recovery codes" --attachment openai-recovery-codes.txt --output ~/Desktop # devolve o arquivo
pfm edit github --codes # códigos dentro de um login, ou trocar por um lote novo
Gerou códigos novos no site? pfm edit NOME --codes --attach ARQUIVO_NOVO troca os códigos e anexa o arquivo novo; --rm-attachment tira o antigo. Depois apague o arquivo de ~/Downloads.
pfm add NOME --kind recovery-phrase frase e arquivo de recuperação
Serviços como o Proton dão uma frase de recuperação (12 palavras) e às vezes um arquivo de recuperação. O tipo recovery-phrase pergunta a conta, a URL e as palavras. Se a frase tem o tamanho de uma frase BIP-39 (12, 15, 18, 21 ou 24 palavras), o pfm a confere: uma palavra trocada ou digitada errada aparece na hora. Frases de outro formato são guardadas como foram digitadas.
O arquivo vai como anexo, cifrado dentro do item, com edit --attach. Os anexos de um item somam no máximo 512 KiB: o cofre inteiro viaja a cada sincronização, então só cabem arquivos pequenos.
pfm add proton-recovery --kind recovery-phrase # conta, URL e as 12 palavras
pfm edit proton-recovery --attach ~/Downloads/proton-recovery.txt # guarda o arquivo no item
pfm get proton-recovery # copia as palavras
pfm get proton-recovery --attachment proton-recovery.txt --output ~/Downloads # devolve o arquivo
pfm edit proton-recovery --rm-attachment proton-recovery.txt # remove o anexo
O get --attachment nunca sobrescreve um arquivo e grava legível só por você. Depois de guardar o arquivo no pfm, apague a cópia de ~/Downloads.
Alterar e apagar
pfm edit NOME mudar um item
Muda só o que você pedir; a senha continua a mesma, a menos que use --generate ou --password.
Opção
O que faz
--title NOVO
renomeia
--username USUÁRIO
troca o usuário
--url / --rm-url
acrescenta / remove um endereço
--password
digita uma senha nova
--generate
gera uma senha nova e copia; só em itens login, wifi e bank
--totp
cola o segredo do 2FA (texto ou link otpauth://)
--notes
escreve notas; termina com Ctrl+D
--set-field NOME
cria ou troca um campo visível
--set-secret-field NOME
cria ou troca um campo oculto
--rm-field NOME
remove um campo
--codes
substitui os códigos de recuperação
--attach ARQUIVO
guarda um arquivo pequeno no item; um de mesmo nome é substituído
--rm-attachment NOME
remove um anexo
--kind TIPO
muda o tipo, sem perder dados
--agent / --no-agent
liga ou desliga o acesso de programas
pfm edit deepseek --url https://chat.deepseek.com --url https://deepseek.com # endereços num item que já existe; a senha fica
pfm edit contabo --generate # trocou a senha no site
pfm edit deepseek --rm-url https://deepseek.com # remove um endereço
pfm edit roteador --password # digita a senha nova, duas vezes
pfm edit contabo --generate --symbols --length 20 # gera com as regras do site
pfm edit ifood --notes # notas; Ctrl-D numa linha vazia termina, vazio apaga
pfm edit nubank --set-secret-field "Senha do app" # campo oculto, digitado sem eco
pfm edit nubank --rm-field "Senha do app" # remove o campo
pfm edit "deepseek api key" --agent # programas podem ler; --no-agent desfaz
Anexos arquivos pequenos dentro de um item
Arquivo de recuperação, códigos em .txt, um PDF com as palavras: edit --attach guarda o arquivo dentro do item, e get --attachment devolve. Até 512 KiB somando os anexos de um item; um anexo com o mesmo nome substitui o anterior.
O anexo é cifrado sempre, junto com o resto do item: no cofre do notebook, no .bak, no servidor e no histórico dele, e na sincronização. Programas (o agente) nunca recebem anexos. Ele só fica em texto puro em dois lugares, os dois por ação sua: o arquivo original, até você apagar, e a cópia que o get --attachment grava (legível só por você, nunca sobrescreve nada). O servidor vê só o tamanho aproximado do item, nunca o conteúdo nem o nome do arquivo.
Nenhuma opção é ignorada: se uma não fizer sentido no comando, o pfm recusa antes de pedir qualquer coisa. Frase e caracteres não se misturam: --words não aceita --length, --symbols, --no-… nem --avoid-ambiguous. No add e no edit, todas as opções do gerador precisam de --generate.
Sessão e segurança
Sessão automática
Digitou a frase mestra uma vez, os próximos comandos não pedem de novo. Trava em 15 minutos sem uso, quando a tela bloqueia, quando o notebook suspende, ou com pfm lock. Só vale para comandos digitados no terminal.
Para mudar o tempo, crie ~/.config/passforme/config com uma linha:
session = 1h # ou 30m; "off" pede a frase sempre
pfm lock travar agora
Fecha a sessão e esvazia o agente. Bom antes de emprestar o notebook ou sair de perto.
pfm lock
pfm status ver o estado
Se a sessão está aberta e por quanto tempo, se o agente está ativo e com quais itens, e o servidor de sincronização. Não recebe nome de item.
pfm status
pfm passwd trocar a frase mestra
Recifra o cofre com uma chave nova. A Secret Key continua a mesma. Anote a frase nova no Emergency Kit. Com servidor, os outros aparelhos pedem a frase nova na próxima sincronização.
pfm passwd # frase atual, depois a nova duas vezes
Agente (programas)
Programas (scripts, agentes de IA) não usam a sessão. Eles só leem os itens que você marcar, e nada mais do cofre.
Comando
O que faz
pfm edit openrouter --agent
marca o item para programas
pfm unlock
entrega os itens marcados ao agente por 8 horas
pfm unlock --for forever
até travar, reiniciar ou sair da sessão
pfm unlock --for 2h gemini
só os itens citados, pelo tempo dado
pfm get NOME --stdout
o que o programa chama para ler o valor
pfm edit "deepseek api key" --agent # 1. marcar
pfm unlock --for 8h # 2. liberar, com a frase mestra
pfm get "deepseek api key" --stdout # 3. o que o programa roda
DEEPSEEK_API_KEY="$(pfm get 'deepseek api key' --stdout)" ./meu-script # num script
pfm status # o que o agente guarda e por quanto tempo
pfm lock # esvazia o agente agora
Sem agente liberado, o get --stdout fora de um terminal falha na hora, em vez de ficar esperando uma frase que ninguém vai digitar.
Sincronização
Acontece sozinha a cada add, edit, rm e codes. Se o servidor estiver fora do ar, a mudança fica no notebook e sobe na próxima vez. O servidor só guarda o cofre cifrado.
Comando
Quando usar
pfm sync
forçar a troca com o servidor
pfm register URL
ligar o cofre a um servidor vazio
pfm init
criar um cofre novo
pfm sync # depois de mudar algo em outro aparelho
pfm status # mostra a qual servidor está ligado
Item editado nos dois aparelhos ao mesmo tempo: fica a versão do servidor e a sua vira "título (conflict)". Nada digitado se perde.
Emergência
Notebook quebrou, foi roubado ou trocou? O cofre volta inteiro do seu servidor, com o Emergency Kit.
pfm login URL configurar um aparelho novo
Pede a Secret Key (começa com SB1-) e a frase mestra, as duas do Emergency Kit, e baixa o cofre.
pfm login https://pfm.example.com
Sem a Secret Key e a frase não há recuperação: nem o servidor consegue abrir o cofre. Por isso o Emergency Kit fica em papel, guardado longe do notebook.