Referência da CLI do Anotae¶
Diátaxis: reference. Para tutorial passo-a-passo, veja
docs/tutorials/. Para receitas práticas, vejadocs/how-to/.
A CLI do Anotae expõe operações administrativas que não acessam o conteúdo do vault — apenas registram extensões de navegador, criam snapshots cifrados e verificam integridade. Sua senha-mestra nunca é solicitada pela CLI.
Convocação geral¶
| Forma | Comportamento |
|---|---|
anotae (sem args) |
Inicia a interface gráfica (PySide6). |
anotae -V ou anotae --version |
Imprime versão e sai. |
anotae version |
Idem (alias para discoverability). |
anotae <comando> |
Executa subcomando administrativo. |
Exit codes¶
| Código | Significado |
|---|---|
0 |
Sucesso. |
1 |
Erro de operação (vault inexistente, falha de NMH, hash inválido…). |
2 |
Erro de argumento (capturado pelo argparse, ou subcomando hierárquico sem ação). |
Subcomandos¶
install-extension¶
Registra o canal Native Messaging Host (NMH) entre o Anotae e o navegador escolhido. Não baixa nem instala a extensão em si — apenas cria o manifesto que permite à extensão se comunicar com o app.
| Argumento | Descrição |
|---|---|
--browser (obrigatório) |
Navegador alvo. |
--exe-path |
Caminho do executável do Anotae chamado pelo navegador. Default: sys.executable (útil em desenvolvimento). |
Após executar, a CLI imprime o passo-a-passo para carregar a pasta
extension/dist/<browser>/ no navegador (modo desenvolvedor).
uninstall-extension¶
Remove o manifesto NMH do navegador escolhido. Operação idempotente:
sai com código 0 mesmo se nenhum manifesto for encontrado.
extension-info¶
Imprime o ID determinístico da extensão (Chrome/Edge/Chromium) e
os caminhos de manifesto NMH para cada família de navegador. Útil
para confirmar que o ID que aparece em chrome://extensions/ bate
com o que o NMH espera.
version¶
Imprime Anotae vX.Y.Z. Idêntico a anotae --version.
backup create <vault>¶
Cria um snapshot do vault apontado em
<vault-dir>/backups/vault_<timestamp>.db com hash SHA-256
adjacente. Não descifra o vault — copia o arquivo cifrado.
| Flag | Descrição |
|---|---|
--extra-dir DIR |
Pasta extra opcional para receber cópia adicional do snapshot (pen drive, pasta sincronizada). O arquivo continua cifrado. Falhas aqui não invalidam o backup principal. |
--as-zip |
Produz anotae-vault-<ts>.zip portável com vault.db cifrado + vault.db.sha256 + metadata.json (versão, timestamp, hash). Útil para anexar a e-mail ou postar em issue — vault interno permanece cifrado. |
Saída:
[OK] Snapshot criado.
Arquivo: /caminho/para/backups/vault_20260507_143022_123456.db
Tamanho: 16384 bytes
SHA-256: 3a2f...
backup list <vault>¶
Lista backups existentes do vault apontado, mais recentes primeiro.
Saída (1 linha por backup):
Backups de vault.db (3 encontrados):
2026-05-07T14:30:22 16384 B 3a2f1c8d4b9a7e62… vault_20260507_143022_123456.db
2026-05-06T09:11:45 16384 B 9b8a7c6d5e4f3a21… vault_20260506_091145_654321.db
...
backup verify <vault> <name>¶
Verifica integridade SHA-256 do backup nomeado. Exit 0 se íntegro;
1 caso contrário.
telemetry status / list / clear¶
Gerencia a telemetria local opt-in — gravação de eventos categóricos (atalhos usados, fluxos abertos) só no disco do usuário, sem qualquer rede. Default: desabilitada.
anotae telemetry status # diz se está habilitada
anotae telemetry list [--days N] # sumário por contagem
anotae telemetry clear # apaga todos os arquivos
A telemetria só é gravada quando config.telemetry_enabled = true
(em ~/.anotae/config.toml). Sem esse opt-in, todas as chamadas a
record_event(...) no app são no-op.
A whitelist de eventos válidos vive em anotae/core/telemetry.py
(constante ALLOWED_EVENTS). Adicionar evento novo exige PR
explícito — defesa em profundidade contra deriva acidental.
doctor <vault>¶
Roda o healthcheck do vault — equivalente CLI ao Help → Verificar saúde do vault (PR #58). Útil para automação (cron, Tarefas Agendadas) ou diagnóstico rápido.
Senha-mestra fornecida via:
- Prompt interativo (default) —
getpassesconde caracteres. - Variável de ambiente
ANOTAE_VAULT_PASSWORD— para automação. Last-resort: prefira agente de senha do SO ou KMS para automação real.
Saída cron-friendly:
[OK] healthcheck: 6/6 verificações
OK Arquivo do vault — 16384 bytes, SHA-256 começa com 3a2f1c8d…
OK Schema — versão 3 (esperada 3)
OK Encounters — 12 total, todos com hash registrado
OK Audit log — 47 entradas, 8 ações distintas
OK Backups — 3 total, todos íntegros
OK Snapshot pre-restore — ausente (esperado em operação normal)
Exit codes:
| Código | Significado |
|---|---|
0 |
Todas as 6 verificações passaram. |
1 |
Pelo menos uma falhou (vault corrompido, schema desatualizado, backup com hash inválido, etc.) |
2 |
Erro de uso (vault não encontrado, senha incorreta, prompt cancelado) |
bench all¶
Roda a suite consolidada de benchmarks (KDF + vault open + encounter throughput + export). Útil para comparar o mesmo hardware em momentos diferentes ou comparar máquinas distintas (UBS-A vs. UBS-B). Resultados podem ser anexados a CSV.
anotae bench all [--encounters N] [--md-iterations N]
[--pdf-iterations N] [--skip-pdf]
[--csv PATH]
| Argumento | Default | Descrição |
|---|---|---|
--encounters |
50 |
Quantidade de encounters no throughput. |
--md-iterations |
10 |
Iterações do render_markdown. |
--pdf-iterations |
5 |
Iterações do render_pdf. |
--skip-pdf |
— | Pula export_pdf (útil em headless sem QGuiApplication). |
--csv |
— | Anexa medições a CSV consolidado. |
Saída exemplo (truncada):
benchmark label elapsed(s) iters
kdf t=2 m=19456KiB p=1 0.0500 1
kdf t=3 m=65536KiB p=1 0.1700 1
vault_open t=3 m=65536KiB 0.1650 2
encounter_throughput 50 encounters (light KDF) 0.4000 50
export_markdown 10x render_markdown(weak) 0.0000 10
export_pdf 5x render_pdf(weak) 0.0500 5
mappings list¶
Lista todos os plugins de mapping descobertos em ordem de prioridade.
Útil para diagnóstico de conflitos e para confirmar que mappings
custom (~/.anotae/mappings/ ou ANOTAE_MAPPING_PATHS) foram
carregados.
| Argumento | Default | Descrição |
|---|---|---|
--target-system |
— | Filtra por target_system (ex.: sei, esus-aps-pec). |
Saída exemplo:
3 mappings descobertos:
source target_system version id
builtin esus-aps-pec 1.0.0 esus-aps-pec-atendimento-individual
builtin sei 1.0.0 sei-relatorio-ses-df
user sisreg-iii 1.1.0 sisreg-iii-customizado-regional
Fontes (ordem de prioridade — maior vence em conflito de id):
| Source | Caminho |
|---|---|
builtin |
vocabularies/mappings/ (parte do pacote, assinada) |
user |
~/.anotae/mappings/ (opt-in do usuário) |
custom |
ANOTAE_MAPPING_PATHS env var (multi-instância / dev) |
vault-benchmark¶
Mede o caminho real de criar/abrir vault em uma grade de
KDFParams (Fallback, Intermediário, Default). Diferente de
kdf benchmark, este reflete o que o usuário sente ao digitar a
senha-mestra (lê meta, deriva chave, abre SQLite, decrypt do token).
| Argumento | Default | Descrição |
|---|---|---|
--iterations |
2 |
Vezes que cada vault é aberto para média. |
--csv |
— | Anexa resultados a CSV (opt-in). |
--host-label |
hostname | Identificador curto (≤16 chars) para o CSV. |
Senha placeholder fixa, vault sintético em tempfile.mkdtemp()
apagado ao final. Nenhum dado real envolvido.
kdf benchmark¶
Mede o tempo de derivação de chave Argon2id em diferentes
combinações de (time_cost, memory_cost, parallelism) e recomenda
os parâmetros mais pesados (mais seguros) que ainda cumprem um alvo
de latência. Útil para decidir, em hardware modesto (UBSs antigas),
se vale usar o FALLBACK em vez do DEFAULT.
| Argumento | Default | Descrição |
|---|---|---|
--target |
0.5 |
Latência alvo em segundos. |
A senha usada é uma placeholder fixa e o salt é aleatório — o comando não toca em nenhum vault real.
Saída:
Benchmark Argon2id (alvo: 0.50s)...
(usando senha placeholder + salt aleatório — sem tocar vaults)
time memory(KiB) parallelism elapsed(s) status
2 19456 1 0.045 ok
3 19456 1 0.062 ok
...
5 262144 1 2.131 lento
[OK] Recomendado para esta máquina:
time_cost=3 memory_cost=65536 KiB parallelism=1
Não exposto pela CLI (por design)¶
A CLI não oferece:
- Abrir/fechar vault, ler/escrever encounters — tudo isso exige a senha-mestra e fica restrito à GUI.
- Restaurar backup pela CLI (use a GUI: Vault → Backups… → Restaurar
selecionado… para snapshots
.db, ou Restaurar de ZIP… para arquivosanotae-vault-*.zipportáveis — PR #64). Restaurar é destrutivo e merece a dupla confirmação visual. - Sincronização ou envio para nuvem — viola o ethos privacy-first (CLAUDE.md §2.1). Sem exceções.
Variáveis de ambiente reconhecidas¶
A CLI consulta as variáveis de ambiente abaixo. Nenhuma é obrigatória; existem para casos de automação ou customização local.
| Variável | Onde é lida | Para que serve |
|---|---|---|
ANOTAE_VAULT_PASSWORD |
anotae doctor |
Fornece a senha-mestra sem prompt interativo (automação cron / Tarefas Agendadas). Last-resort: prefira agente de senha do SO ou KMS. Nunca commitar em scripts versionados. |
ANOTAE_MAPPING_PATHS |
descoberta de plugins de mapping | Lista separada por : (Linux/macOS) ou ; (Windows) de diretórios extras a procurar mappings, com prioridade mais alta que ~/.anotae/mappings/. Útil em testes e ambientes onde o vault padrão não é gravável. |
LC_ALL / LC_MESSAGES / LANG |
anotae.core.i18n._detect_language |
Define o idioma da UI/CLI (default pt_BR). Aceita pt_BR.UTF-8, pt-BR ou pt_BR. |
LOCALAPPDATA (Windows) |
NMH manifest install | Caminho do diretório %LOCALAPPDATA%; default ~/AppData/Local. Só relevante em Windows e raramente precisa ser sobrescrita. |
QT_QPA_PLATFORM=offscreen |
testes Qt | Não usada pela CLI em si, mas referida em pytest/conftest. Documentada aqui para evitar confusão durante automação. |
A CLI não consulta variáveis como ANOTAE_VAULT_PATH, ANOTAE_CONFIG,
etc. — o caminho do vault sempre vem como argumento explícito. Isso é
deliberado: evita "vault errado" por env var herdada de outro shell.
Exit codes consolidados¶
| Código | Significado |
|---|---|
0 |
Sucesso. Para subcomandos com múltiplas verificações (doctor, bench), significa "todas passaram". |
1 |
Falha de domínio (vault corrompido, hash não bate, healthcheck falhou, etc.). |
2 |
Erro de uso da CLI (argumento faltando, subcomando sem ação, vault inexistente). |
130 |
Cancelamento pelo usuário (Ctrl-C no prompt de senha — propagado de getpass). |
Para automação que toma decisão baseada em saída, sempre testar
explicitamente o código (0 vs ≠ 0) — nunca grep no stdout.
Exemplos de uso real¶
Backup diário automatizado (Linux/macOS)¶
crontab -e com:
0 2 * * * /usr/local/bin/anotae backup create /home/$USER/.anotae/vault.db && /usr/local/bin/anotae backup verify /home/$USER/.anotae/vault.db $(ls -t /home/$USER/.anotae/backups/vault_*.db | head -1 | xargs basename)
Backup diário automatizado (Windows, Tarefas Agendadas)¶
$vault = "$env:USERPROFILE\.anotae\vault.db"
& "C:\Program Files\Anotae\anotae.exe" backup create $vault