Ghostchars en tu terminal
El mismo motor que este sitio web, en un solo paquete npm: una herramienta de línea de comandos, una puerta de control para CI y un servidor MCP al que tu agente de programación puede llamar. Node 22 o más reciente, y nada sale de tu equipo.
- Gratis, licencia MIT
- Sin llamadas de red
- Skill, servidor MCP, hooks
npx -y ghostchars clean -i notes.mdNo hay paso de instalación: npx descarga la versión 1.0.2 y la ejecuta. Node 22 o más reciente es el único requisito, y el paquete no tiene dependencias en tiempo de ejecución.
Qué hace
Cuatro comandos, un motor. Las opciones de limpieza y su forma de escribirse son exactamente las que usan este sitio y la app para Mac, así que un nivel significa lo mismo en todas partes.
clean
Lee stdin o los archivos que le indiques y escribe el texto limpio en stdout, o reescribe cada archivo en su sitio con -i, de forma atómica. Con --check no escribe nada y sale con código 1 si algo cambiaría.
inspect
Lista cada carácter sospechoso con su línea, columna, punto de código, nombre Unicode y la opción que actuaría sobre él. No cambia nada y sale con código 1 cuando encuentra algo.
report
Mide los hábitos que hacen que un borrador se lea como escrito por una máquina: uniformidad en la longitud de las frases, transiciones de manual, palabras delatoras, densidad de guiones, rodeos. No es un detector y no emite ninguna probabilidad.
check
Somete un árbol entero a un nivel e imprime cada archivo que cambiaría, con la posición exacta de cada carácter. Es el comando para CI y para un hook de pre-commit.
clean e inspect abren .docx, .odt y .html además de texto plano, y limpian un documento por su estructura y no como un flujo de bytes. PDF queda fuera del alcance.
Un nivel es un conjunto de opciones con nombre, para que una persona o un agente elija una palabra en lugar de doce banderas: default quita solo lo invisible, text normaliza además los espacios y la puntuación tipográfica, y max lo activa todo y pierde información.
La puerta de control en CI
Un paso, sin ninguna action que instalar, código de salida 1 si hay hallazgos. Nunca pases --fix en CI: pone en verde un build rojo sin que nadie lea qué cambió.
npx -y ghostchars check --bar textCon --sarif la misma ejecución se imprime como un registro SARIF 2.1.0, un resultado por cada carácter problemático, y el code scanning de GitHub muestra los hallazgos en línea en el pull request.
- run: npx -y ghostchars check --bar text --sarif > ghostchars.sarif || true
- uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: ghostchars.sarifUn ghostchars.json en la raíz del árbol indica qué archivos se someten a qué nivel, y fija un archivo que cambia exactamente en N caracteres a propósito. La fijación se aplica en ambos sentidos, así que un archivo que alguien corrigió sin avisar falla hasta que se le quite la fijación.
Sin rutas, check encuentra los archivos con git ls-files, así que respeta las reglas de exclusión que tu repositorio ya tiene. Los archivos binarios, los de más de 2 MiB y los que no son UTF-8 válido se omiten sin que la ejecución falle.
Para agentes de programación
El paquete incluye los archivos que un agente necesita para ejecutar la puerta de control sin que se lo pidan cada vez. Toma cualquiera de ellos o todos; no entran en conflicto, y ninguno es un instalador.
El skill
Un directorio, SKILL.md y dos archivos de referencia, que leen Claude Code, Codex, Cursor, VS Code con Copilot y Gemini CLI. Le dice al agente cuándo ejecutar la herramienta y qué hacer con cada tipo de hallazgo. A su lado hay archivos de reglas para Cursor, Windsurf y Copilot, y un bloque para pegar en AGENTS.md, CLAUDE.md y GEMINI.md.
El servidor MCP
ghostchars mcp habla el Model Context Protocol por stdin y stdout y expone cuatro herramientas de solo lectura: clean_text, inspect_text, style_report y check_paths. Una quinta, clean_files, escribe en disco y solo se registra con --allow-write. Se incluyen fragmentos de configuración para seis hosts.
El hook de Claude Code
Un hook PostToolUse que comprueba cada archivo que escribe el agente y le devuelve el hallazgo como comentario, para que lo corrija en el mismo turno. Un script y una clave de configuración.
El hook de pre-commit
Un bloque para pegar en .pre-commit-config.yaml: un hook local que recorre los archivos de texto preparados, para que nadie confirme nada sucio. Igual que el paso de CI, nunca pasa --fix.
{
"mcpServers": {
"ghostchars": {
"type": "stdio",
"command": "npx",
"args": ["-y", "ghostchars", "mcp"]
}
}
}El fragmento para Claude Code. Las mismas tres palabras, npx -y ghostchars mcp, son toda la configuración para Codex, Cursor, VS Code, Gemini CLI y Windsurf.
Privacidad
Todo se ejecuta en tu equipo. No hay código de red en el paquete: ni telemetría, ni avisos de actualización, ni comprobación de licencia, ni cuenta. Los únicos bytes que salen del proceso son los que imprime. Nada de lo que limpies, inspecciones o analices va a ninguna parte.
El mismo motor, en todo lo demás
La app para Mac
Limpieza en todo el sistema detrás de un atajo, en cualquier app en la que escribas, y limpieza por lotes de documentos. El atajo es gratis 20 veces por semana; $24 una sola vez levanta el límite.
La extensión para el navegador
Gratis, sin límite en su ventana y en el menú contextual, y no recopila nada. Funciona hoy, en Chrome y en los navegadores basados en él.
Preguntas que la gente hace de verdad
¿Qué necesita?
Node 22 o más reciente, y nada más. El paquete no tiene ninguna dependencia en tiempo de ejecución, y npx lo descarga la primera vez que lo usas, así que no hay instalación global a menos que la quieras.
¿Envía datos a algún sitio?
No. No hay ningún código de red en el paquete: ni telemetría, ni comprobación de actualizaciones, ni comprobación de licencia. Puedes ejecutarlo en un equipo sin conexión y se comporta exactamente igual.
¿Qué relación tiene con el script de Python?
Es el mismo motor. Las opciones de limpieza, su forma de escribirse y su significado son los de la CLI de referencia en Python, y unos fixtures de referencia fijan clean e inspect a ella byte a byte. Lo nuevo es la abreviatura de niveles, la salida JSON y SARIF, el comando check con su configuración y sus fijaciones, y el servidor MCP.
¿report me dice si un texto lo escribió una IA?
No. Mide hábitos que hacen que un borrador se lea como escrito por una máquina, para que puedas editarlos, y no emite ninguna probabilidad, ninguna puntuación ni ningún veredicto. Nunca decide si un texto fue generado.
¿check abre documentos?
No. check recorre un repositorio y no abre archivos zip; clean e inspect son los comandos que leen .docx, .odt y .html. Nada en el paquete lee PDF, imágenes ni Google Docs.
¿La CLI es gratis?
Sí, y no hay ningún plan de pago detrás. El paquete tiene licencia MIT, la puerta de control, el servidor MCP y las integraciones están todos dentro, y la licencia que se vende en la página de precios es para la app para Mac.