Pular para o conteúdo
Ghostchars

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.md

Nã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 text

Com --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.sarif

Um 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.

App para Mac

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.

Extensão do Chrome

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.

Estatísticas de uso anônimas?

O Ghostchars processa seu texto no navegador e nunca o envia para lugar nenhum. Gostaríamos de contar as visitas às páginas com um serviço de medição hospedado por nós, com o mínimo de cookies. Nunca o conteúdo, em hipótese alguma.