Um script único e fácil de rodar que faz um diagnóstico completo de saúde do seu Mac direto no terminal — e, mais importante, interpreta os números para você. Em vez de despejar dados crus, ele dá uma nota de saúde (0-100) e um veredito claro por item: 🟢 tudo certo,
Feito para Apple Silicon (M1–M4), testado em MacBook Pro M4 (16 GB RAM / 512 GB SSD), macOS 26.
| Seção | O que mostra |
|---|---|
| Sistema | Versão do macOS, modelo, chip, núcleos, uptime (avisa se você está há muito tempo sem reiniciar) |
| CPU / GPU | Núcleos de performance vs. eficiência, GPU, load average, uso atual, top 5 processos por CPU e apps que mais gastam energia |
| Memória | RAM total/usada/livre, memória app/wired/comprimida, pressão de memória e swap (o indicador mais importante), top 5 processos por RAM |
| Armazenamento | Espaço do SSD (usado/livre/capacidade) com barra visual |
| Limpeza de disco | O que come espaço: Downloads, Lixeira, Caches e snapshots locais do Time Machine — com dicas do que dá pra limpar |
| Bateria & energia | Carga, fonte, ciclos, condição, capacidade máxima, fluxo de energia em watts (carregando/descarregando, sem sudo), temperatura da bateria, carregador conectado e dispositivos Bluetooth (com nível de bateria quando o dispositivo reporta) |
| Rede | Interface ativa, IP, Wi-Fi (SSID, sinal/SNR, velocidade de link, banda/canal), VPN ativa, servidores DNS, tempo de resolução DNS, latência média e perda de pacotes |
| Térmica | Avisos térmicos e limite de CPU; com --deep, temperatura e consumo reais |
| Segurança & manutenção | FileVault, Firewall, SIP, Gatekeeper, saúde física do SSD (SMART), kernel panics, crashes de apps (7 dias), atualizações do macOS pendentes, status do backup Time Machine e launch agents de terceiros |
No final, uma nota de saúde de 0 a 100 resume tudo num relance (Excelente / Bom / Atenção / Crítico) — e, se você usa --save, uma linha "Desde DD/MM" compara RAM, swap, disco e nota com o último snapshot.
Nenhum. É Bash puro usando só ferramentas nativas do macOS. Não precisa instalar Python, Homebrew nem nada.
bash install.shIsso cria o comando healthcheck, que você pode rodar de qualquer pasta:
healthcheckchmod +x healthcheck.sh
./healthcheck.shhealthcheck # SEM flag, num terminal: abre um menu interativo
healthcheck --deep # inclui temperatura e consumo (pede sudo uma vez)
healthcheck --json # saída em JSON (para salvar/integrar)
healthcheck --no-color # sem cores (bom para pipes e arquivos)
healthcheck --save # roda e salva um snapshot no histórico
healthcheck --history # mostra a evolução ao longo do tempo (tendências)
healthcheck --fast # pula os scans lentos (limpeza de disco, energia por app)
healthcheck --summary # roda tudo mas mostra só a nota e os avisos
healthcheck --section rede # roda só uma seção (sistema, cpu, memoria, disco,
# limpeza, bateria, rede, termica, seguranca)
healthcheck --clean # apaga temporários seguros, com confirmação (ver abaixo)
healthcheck --clean --yes # o mesmo, sem pedir confirmação
healthcheck --help # ajudaMenu interativo: rodar healthcheck sozinho num terminal abre um menu numerado (diagnóstico completo, rápido, resumo, profundo, limpar temporários, histórico e ajuda) — é só digitar o número. Passar qualquer flag pula o menu e executa direto. Em pipe/arquivo (sem terminal), healthcheck continua rodando o diagnóstico completo, para não quebrar automações.
Enquanto coleta, o script mostra a etapa atual (⏳ escaneando Downloads…) numa linha que some sozinha — assim você sabe o que está demorando. As flags combinam: healthcheck --fast --summary é um check-up de segundos só com a nota.
Exemplos úteis:
# Salvar um snapshot com data
healthcheck --json > "healthcheck-$(date +%Y%m%d).json"
# Validar/formatar o JSON
healthcheck --json | python3 -m json.toolRode healthcheck --save de vez em quando (ou depois de reiniciar) para guardar um retrato da máquina. Depois:
healthcheck --historymostra uma mini-tabela dos últimos snapshots e setas de tendência comparando com o snapshot anterior — se RAM, swap e disco subiram (🔴↑) ou desceram (🟢↓) e como a nota de saúde evoluiu. Assim você percebe se algo está piorando aos poucos. O histórico fica em ~/.healthcheck/history.tsv (um arquivo de texto simples; pode apagar quando quiser).
Além de medir o que ocupa espaço (seção "Limpeza de disco"), o --clean pode
apagar o que é seguro remover:
healthcheck --cleanEle lista cada alvo com o tamanho, mostra o total recuperável e só apaga
depois que você confirmar (s/n):
- Lixeira (
~/.Trash) — o que você já mandou pro lixo. - Caches do usuário (
~/Library/Caches) — os apps recriam conforme precisam. - Temporários do sistema (
$TMPDIR) — o macOS recria sozinho. - Logs de crash antigos (
.ips/.crashcom mais de 30 dias).
Ele nunca toca em documentos, apps, ajustes ou no histórico do próprio
healthcheck. Itens em uso por apps abertos podem resistir à remoção — o script
mede o resultado real e informa quanto liberou de fato. Para automatizar (pular
a confirmação), use healthcheck --clean --yes.
Esta é a única ação que modifica o sistema, e é totalmente opt-in — sem
--clean, o healthcheck é 100% somente leitura.
Cada métrica ganha um símbolo:
- ✅ OK — dentro do saudável.
⚠️ Atenção — não é urgente, mas vale ficar de olho.- 🔴 Crítico — merece ação.
No fim, um resumo mostra a nota de saúde e lista só os pontos de atenção (críticos primeiro), cada um com uma dica do que fazer.
Começa em 100 e desconta por problema encontrado: −20 por item crítico e −8 por item de atenção, como base. Alguns itens de severidade contínua descontam proporcionalmente ao quão ruins estão: disco crítico desconta de −20 (92%) até −30 (97%+), swap ≥ 8 GB desconta −28, pressão de memória crítica −24. A faixa vira um rótulo:
| Nota | Rótulo |
|---|---|
| 90–100 | 🟢 Excelente |
| 75–89 | 🟢 Bom |
| 50–74 | |
| 0–49 | 🔴 Crítico |
| Métrica | 🔴 Crítico | |
|---|---|---|
| Uptime | > 14 dias | — |
| Load de CPU | ≥ 1× núcleos | ≥ 1,5× núcleos |
| Pressão de memória (livre) | < 25% | < 10% |
| Swap em uso | ≥ 1 GB | ≥ 4 GB |
| Disco (capacidade) | ≥ 85% | ≥ 92% |
| Lixeira / Downloads grandes | ≥ 1 GB / ≥ 5 GB | — |
| FileVault / Firewall / SIP / Gatekeeper | desligado | — |
| SSD (SMART) | — | ≠ Verified |
| Kernel panics (30 dias) | ≥ 1 | — |
| Crashes de apps (7 dias) | ≥ 8 | — |
| Atualizações do macOS | ≥ 1 pendente | — |
| Time Machine | sem destino, ou último backup > 7 dias | — |
| Capacidade máx. bateria | < 80% | — |
| Condição da bateria | — | ≠ Normal |
| Temperatura da bateria | ≥ 40 °C | ≥ 45 °C |
| Sinal do Wi-Fi (RSSI) | < −67 dBm | < −78 dBm |
| Resolução DNS | ≥ 100 ms | — |
| Latência de internet (média de 4 pings) | ≥ 150 ms | — |
| Perda de pacotes | > 0% | ≥ 25% |
Load de CPU logo após o boot: nos primeiros 5 minutos após ligar/reiniciar, o load average fica sempre inflado (Spotlight indexando, iCloud sincronizando, download de assets do sistema). Nesse período o healthcheck mostra a carga como informativa e não desconta da nota — evitando um "crítico" falso.
Por que o --deep pede senha?
Temperatura e consumo de energia vêm do powermetrics, que no macOS exige sudo. Sem --deep, o script roda 100% sem senha e ainda mostra os avisos térmicos.
O que é "swap"? Quando a RAM enche, o macOS move parte da memória para o SSD (swap). Um pouco é normal, mas swap alto (vários GB) deixa tudo mais lento e desgasta o SSD — sinal de que a RAM está saturando. Fechar apps pesados ou reiniciar resolve.
O que é "pressão de memória"? É o indicador mais fiel de "a memória está apertada?". Melhor que olhar só "RAM livre", porque o macOS usa RAM livre como cache de propósito. Enquanto a pressão estiver baixa (muito % livre), está tudo bem.
Por que "memória comprimida" às vezes aparece alta? O macOS comprime memória pouco usada em vez de mandar tudo pro swap. É um recurso normal; só vira preocupação junto com swap alto e pressão de memória alta.
O que são os "snapshots locais do Time Machine"?
Cópias temporárias que o macOS guarda no próprio SSD quando o disco de backup não está por perto. Ocupam espaço, mas o sistema as remove sozinho conforme precisa. Para forçar a limpeza: tmutil thinlocalsnapshots /.
Por que ligar o Firewall? Ele bloqueia conexões de entrada não solicitadas. É uma camada extra de proteção, especialmente em redes públicas (Wi-Fi de café, aeroporto). Ativa em Ajustes > Rede > Firewall.
A seção "Limpeza de disco" demora um pouco. Por quê?
Ela mede o tamanho real de pastas grandes (Downloads, Caches) com du, que precisa varrer os arquivos. Por isso o script mostra a etapa atual ("⏳ escaneando Downloads…") e tem um limite de tempo para não travar. Com pressa, use --fast para pular essa parte.
A latência apareceu alta, mas minha internet é boa. Por quê?
Se você usa VPN, todo o tráfego dá uma volta a mais — o script mostra a VPN ativa na seção Rede justamente para contextualizar. Teste desconectar a VPN e rodar healthcheck --section rede para comparar.
Onde fica o histórico?
Em ~/.healthcheck/history.tsv. Só é gravado quando você roda com --save. É um texto simples que você pode abrir, versionar ou apagar à vontade.
Ele altera algo no meu sistema?
Por padrão, não — é somente leitura. Só há duas exceções, ambas opt-in: --save, que escreve o histórico em ~/.healthcheck, e --clean, que apaga temporários seguros (Lixeira, caches, temporários e logs antigos) após você confirmar. Sem essas flags, ele apenas consulta e exibe.
rm -f /usr/local/bin/healthcheck ~/.local/bin/healthcheck
rm -rf ~/.healthcheck # remove também o histórico, se quiserhealthcheck/
├── healthcheck.sh # o script principal
├── install.sh # instalador do comando global
├── README.md # este arquivo
├── CONTRIBUTING.md # como contribuir
├── LICENSE # licença MIT
└── docs/
└── demo.gif # demonstração usada no README
- Somente leitura por padrão. O script apenas consulta e exibe informações
do sistema. Duas ações, ambas opt-in, fogem disso:
--saveescreve o histórico em~/.healthcheck/history.tsv, e--cleanapaga temporários seguros (Lixeira, caches, temporários e logs de crash antigos) após confirmação explícita. Sem essas flags, ele não altera nada no seu Mac. - Sem telemetria. Nada é enviado para lugar nenhum. Os únicos acessos de rede
são um
pinge uma consulta de DNS para medir sua própria latência — nenhum dado seu sai da máquina. - Sem privilégios por padrão. Tudo roda sem senha. Só o
--deeppedesudo, porque temperatura e consumo vêm dopowermetrics, que exige elevação. - Zero dependências. Não instala nada e não baixa pacotes.
Contribuições são bem-vindas! Leia o CONTRIBUTING.md para os princípios do projeto (zero dependências, somente leitura, compatível com Bash 3.2) e como testar antes de abrir um PR. Bugs e ideias: abra uma issue.
Distribuído sob a licença MIT. Veja LICENSE para o texto completo.
Feito por Bernardo Rodrigues — @berodcdev.
