Ghostchars no seu terminal
O mesmo motor deste site, em um pacote npm: uma ferramenta de linha de comando, um gate para a CI e um servidor MCP que o seu agente de programação pode chamar. Node 22 ou mais novo, e nada sai da sua máquina.
- Grátis, licença MIT
- Sem chamadas de rede
- Skill, servidor MCP, hooks
npx -y ghostchars clean -i notes.mdNão há etapa de instalação: o npx baixa a versão 1.0.2 e a executa. Node 22 ou mais novo é o único requisito, e o pacote não tem dependências em tempo de execução.
O que ele faz
Quatro comandos, um motor. As opções de limpeza e as grafias delas são exatamente as que este site e o app para Mac usam, então uma barra significa a mesma coisa em todo lugar.
clean
Lê o stdin ou os arquivos que você indicar e escreve o texto limpo no stdout, ou reescreve cada arquivo no lugar com -i, de forma atômica. Com --check ele não escreve nada e sai com 1 se algo mudaria.
inspect
Lista cada caractere suspeito com a linha, a coluna, o ponto de código, o nome Unicode e a opção que agiria sobre ele. Não muda nada e sai com 1 quando encontra algo.
report
Mede os hábitos que fazem um rascunho parecer escrito por máquina: uniformidade no tamanho das frases, transições prontas, palavras reveladoras, densidade de travessões, hesitações. Não é um detector e não emite nenhuma probabilidade.
check
Submete uma árvore inteira a uma barra e imprime cada arquivo que mudaria, com a posição exata dos caracteres. É o comando para a CI e para um hook de pre-commit.
clean e inspect abrem .docx, .odt e .html além de texto puro, e limpam um documento pela estrutura, não como um fluxo de bytes. PDF está fora do escopo.
Uma barra é um conjunto de opções com nome, para que uma pessoa ou um agente escolha uma palavra em vez de doze flags: default remove só o que é invisível, text também normaliza espaços e pontuação tipográfica, e max liga tudo e perde informação.
O gate na CI
Uma etapa, nenhuma action para instalar, saída 1 quando há ocorrências. Nunca passe --fix na CI: isso deixa um build vermelho verde sem que ninguém leia o que mudou.
npx -y ghostchars check --bar textCom --sarif a mesma execução é impressa como um log SARIF 2.1.0, um resultado por caractere ofensor, e o code scanning do GitHub mostra as ocorrências direto no pull request.
- run: npx -y ghostchars check --bar text --sarif > ghostchars.sarif || true
- uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: ghostchars.sarifUm ghostchars.json na raiz da árvore diz quais arquivos são submetidos a qual barra, e fixa um arquivo que muda em exatamente N caracteres de propósito. A fixação vale nas duas direções, então um arquivo que foi corrigido em silêncio falha até ser desfixado.
Sem caminhos, check encontra os arquivos com git ls-files, então respeita as regras de ignore que o seu repositório já tem. Arquivos binários, arquivos com mais de 2 MiB e arquivos que não são UTF-8 válido são pulados sem derrubar a execução.
Para agentes de programação
O pacote traz os arquivos de que um agente precisa para rodar o gate sem que alguém peça a cada vez. Use um deles ou todos; eles não entram em conflito, e nenhum é um instalador.
A skill
Um diretório, SKILL.md e dois arquivos de referência, lidos por Claude Code, Codex, Cursor, VS Code com Copilot e Gemini CLI. Ela diz ao agente quando rodar a ferramenta e o que fazer com cada tipo de ocorrência. Arquivos de regras para Cursor, Windsurf e Copilot, e um bloco para colar em AGENTS.md, CLAUDE.md e GEMINI.md, ficam ao lado dela.
O servidor MCP
ghostchars mcp fala o Model Context Protocol pelo stdin e stdout e expõe quatro ferramentas somente de leitura: clean_text, inspect_text, style_report e check_paths. Uma quinta, clean_files, escreve em disco e só é registrada com --allow-write. Trechos de configuração vêm prontos para seis hosts.
O hook do Claude Code
Um hook PostToolUse que verifica cada arquivo que o agente escreve e devolve a ocorrência como feedback, para que o agente a corrija na mesma rodada. Um script e uma chave de configuração.
O hook de pre-commit
Um bloco para colar no .pre-commit-config.yaml: um hook local que roda sobre os arquivos de texto no stage, para que nada sujo seja commitado, por ninguém. Como a etapa de CI, ele nunca passa --fix.
{
"mcpServers": {
"ghostchars": {
"type": "stdio",
"command": "npx",
"args": ["-y", "ghostchars", "mcp"]
}
}
}O trecho para o Claude Code. As mesmas três palavras, npx -y ghostchars mcp, são toda a configuração para Codex, Cursor, VS Code, Gemini CLI e Windsurf.
Privacidade
Tudo roda na sua máquina. Não há código de rede no pacote: nenhuma telemetria, nenhum ping de atualização, nenhuma verificação de licença, nenhuma conta. Os únicos bytes que saem do processo são os que ele imprime. Nada do que você limpa, inspeciona ou analisa vai para lugar nenhum.
O mesmo motor, em todo o resto
O app para Mac
Limpeza em todo o sistema atrás de um atalho, em qualquer app em que você digita, e limpeza em lote para documentos. O atalho é grátis 20 vezes por semana; $24 uma vez tira o limite.
A extensão para navegador
Grátis, sem limite na janela e no menu de contexto, e não coleta nada. Funciona hoje, no Chrome e nos navegadores feitos sobre ele.
Perguntas que as pessoas fazem de verdade
Do que ele precisa?
Node 22 ou mais novo, e nada mais. O pacote tem zero dependências em tempo de execução, e o npx o baixa no primeiro uso, então não há instalação global a menos que você queira uma.
Ele manda dados para algum lugar?
Não. Não há código de rede nenhum no pacote: nenhuma telemetria, nenhuma verificação de atualização, nenhuma verificação de licença. Você pode rodá-lo em uma máquina sem conexão e ele se comporta exatamente igual.
Qual é a relação com o script em Python?
É o mesmo motor. As opções de limpeza, as grafias e os significados delas são os do CLI de referência em Python, e fixtures de referência prendem clean e inspect a ele byte a byte. O que é novo é o atalho das barras, a saída em JSON e SARIF, o comando check com a configuração e as fixações dele, e o servidor MCP.
O report me diz se um texto foi escrito por IA?
Não. Ele mede hábitos que fazem um rascunho parecer escrito por máquina, para que você possa editá-los, e não emite probabilidade, nota nem veredicto. Ele nunca decide se um texto foi gerado.
O check abre documentos?
Não. check percorre um repositório e não abre arquivos zip; clean e inspect são os comandos que leem .docx, .odt e .html. Nada no pacote lê PDF, imagens ou Google Docs.
O CLI é grátis?
Sim, e não há nenhum plano pago por trás dele. O pacote tem licença MIT, o gate, o servidor MCP e as integrações estão todos nele, e a licença vendida na página de preços é para o app para Mac.