Herramienta CLI basada en Go que escanea bases de código para verificar la preparación para el lanzamiento, detectando configuraciones faltantes, problemas de higiene de seguridad, fugas de secretos y brechas de integración antes del despliegue en producción.
Preflight.sh es una herramienta de línea de comandos que analiza tu código en busca de preparación para el lanzamiento. Identifica configuración faltante, problemas de integración, preocupaciones de seguridad, brechas de metadatos SEO y otros errores comunes antes de que despliegues en producción.
No te avergüences en producción. Solo ejecuta el comando.
brew install preflightsh/preflight/preflight
npm install -g @preflightsh/preflight
go install github.com/preflightsh/preflight@latest
docker pull ghcr.io/preflightsh/preflight
curl -sSL https://preflight.sh/install.sh | sh
Descarga la última versión desde GitHub Releases.
# Inicializa en el directorio de tu proyecto
cd tu-proyecto
preflight init
# Ejecuta todas las comprobaciones
preflight scan
# Analiza un directorio específico
preflight scan /ruta/al/proyecto
# Ejecuta con salida detallada (muestra qué archivos coincidieron con cada comprobación)
preflight scan --verbose
preflight scan -v # forma abreviada
# Ejecuta en modo CI con salida JSON
preflight scan --ci --format json
# Ejecuta solo comprobaciones específicas, u omite algunas, para iteración rápida
# (puntual; a diferencia de `preflight ignore` no cambia preflight.yml)
preflight scan --only seo_meta,og_twitter
preflight scan --skip vulnerability,secrets
# Silencia una comprobación
preflight ignore sitemap
# Reactiva una comprobación
preflight unignore sitemap
# Lista todos los IDs de comprobaciones
preflight checks
Este repositorio incluye una habilidad de agente compatible con skills.sh en skills/preflight/SKILL.md. Proporciona a los agentes de codificación un flujo de trabajo Preflight repetible: inspeccionar preflight.yml, ejecutar análisis seguros para CI, clasificar hallazgos, evitar ignorados inseguros, reejecutar la validación e informar el riesgo residual de lanzamiento.
Lista la habilidad desde este repositorio:
# Con Bun
bunx --yes skills add preflightsh/preflight --list
# O con npm
npx --yes skills add preflightsh/preflight --list
Instala solo la habilidad Preflight:
# Con Bun
bunx --yes skills add preflightsh/preflight --skill preflight
# O con npm
npx --yes skills add preflightsh/preflight --skill preflight
Preflight es totalmente utilizable desde la línea de comandos sin cuenta. El panel de control opcional en app.preflight.sh añade un historial alojado de tus análisis y sugerencias de corrección generadas por IA para cada hallazgo. Tu código nunca abandona tu máquina: el análisis se ejecuta localmente, y solo se envía un resumen redactado de los resultados (IDs de comprobaciones, estados y mensajes, nunca valores secretos ni contenidos de archivos) cuando publicas.
Crea una cuenta gratuita y luego conecta la CLI:
preflight auth login # abre tu navegador para autorizar esta CLI
preflight auth status # muestra con qué usuario has iniciado sesión
preflight auth logout # elimina las credenciales almacenadas
Publica un análisis en tu panel de control con --publish. Imprime un enlace para ver la ejecución. La publicación es de mejor esfuerzo: si estás sin conexión o no has iniciado sesión, el análisis aún se ejecuta y sale normalmente.
preflight scan --publish
En el panel de control obtienes el desglose de aprobados/advertencias/fallos de cada ejecución, la lista completa de hallazgos y un historial por proyecto para que puedas ver qué cambió entre despliegues.
También puedes leer ese historial desde la terminal con preflight history:
preflight history # ejecuciones recientes en tus proyectos
preflight history --here # solo las ejecuciones del proyecto actual
preflight history <run-id> # resultados completos de comprobaciones de una ejecución
preflight history --here --format json # legible por máquina, para agentes
Requiere preflight auth login. --here empareja las ejecuciones con el repositorio actual mediante su remoto git, la misma clave utilizada al publicar.
Abre cualquier comprobación fallida o con advertencia en una ejecución publicada para generar una corrección paso a paso adaptada a tu pila detectada, con comandos y código listos para copiar.
| Comprobación | Descripción |
|---|---|
| Paridad ENV | Compara .env y .env.example en busca de variables faltantes |
| Endpoint de Salud | Verifica que el sitio sea accesible; auto-detecta /health, /healthz, /api/health o recurre a la raíz |
| Análisis de Vulnerabilidades | Comprueba vulnerabilidades de dependencias (bundle audit, npm audit, etc.) |
| Metadatos SEO | Comprueba título, descripción y etiquetas Open Graph |
| Tarjetas OG y Twitter | Valida og:image, twitter:card y metadatos de intercambio social |
| URL Canónica | Verifica que la etiqueta de enlace canónico esté presente |
| Viewport | Comprueba la etiqueta meta viewport adecuada para móviles |
| Atributo Lang | Valida el atributo html lang para accesibilidad |
| Datos Estructurados | Comprueba el marcado JSON-LD de Schema.org |
| Cabeceras de Seguridad | Valida HSTS, CSP, X-Content-Type-Options tanto en producción como en staging |
| Certificado SSL | Comprueba la validez de SSL y advierte antes de la expiración |
| Redirección WWW | Verifica la redirección www/no-www a la URL canónica |
| Autenticación de Email | Comprueba los registros DNS SPF/DMARC para la entregabilidad del correo (opt-in) |
| Detección de Secretos | Encuentra claves de API y credenciales filtradas en el código |
| Declaraciones de Depuración | Detecta console.log, var_dump, debugger dejados en el código |
| Páginas de Error | Comprueba páginas de error personalizadas 404/500 |
| Optimización de Imágenes | Encuentra imágenes grandes (>500KB) que perjudican los tiempos de carga |
| Páginas Legales | Comprueba páginas de política de privacidad y términos de servicio |
Preflight auto-detecta y valida la configuración de estos servicios:
Pagos
Seguimiento de Errores y Monitoreo
Email y Boletines
Analítica
Autenticación
Chat
Notificaciones
Infraestructura
Almacenamiento y CDN
Búsqueda
SEO
IA / LLMs
Preflight utiliza un archivo preflight.yml en la raíz de tu proyecto:
projectName: my-app
stack: rails # rails, next, react, vite, laravel, etc.
urls:
staging: "https://staging.example.com"
production: "https://example.com"
services:
stripe:
declared: true
sentry:
declared: true
checks:
envParity:
enabled: true
envFile: ".env"
exampleFile: ".env.example"
healthEndpoint:
enabled: true
path: "/health" # opcional - auto-detecta rutas comunes si no se establece
stripeWebhook:
enabled: true
url: "https://api.example.com/webhooks/stripe" # opcional - se sondea con un GET; se informa un 404 o sin respuesta
seoMeta:
enabled: true
mainLayout: "app/views/layouts/application.html.erb"
security:
enabled: true
secrets:
enabled: true
# Lista blanca por archivo para el análisis de secretos. Úsala para suprimir un
# hallazgo individual (p. ej., una clave pública restringida por referrer) sin
# deshabilitar toda la comprobación.
allowlist:
- path: web/js/golden-hour.js
fingerprint: "sha256:<hex>" # recomendado — fija el secreto exacto
reason: "Clave de Google Timezone restringida por referrer HTTP"
- path: "web/tools/**/*.php" # se admiten globs doublestar
indexNow:
enabled: true
key: "your32characterhexkeyhere00000"
emailAuth:
enabled: true # opt-in, comprueba SPF/DMARC en el dominio de producción
humansTxt:
enabled: false # opt-in, acredita al equipo
license:
enabled: false # opt-in, para proyectos de código abierto
# Silencia comprobaciones o servicios específicos por ID
ignore:
- sitemap
- llms_txt
- google_analytics
Silencia comprobaciones o servicios específicos usando preflight ignore <id>:
preflight ignore sitemap # Ignora la comprobación de sitemap
preflight ignore sentry # Ignora la validación del servicio Sentry
preflight unignore sitemap # Reactiva la comprobación de sitemap
preflight checks # Lista todos los IDs ignorables
Prefiere incluir en la lista blanca un hallazgo individual antes que silenciar toda la
comprobación secrets. Añade excepciones puntuales desde la línea de comandos:
preflight ignore secrets web/js/golden-hour.js
Eso añade una entrada de ruta bajo checks.secrets.allowlist en tu
preflight.yml. El campo path es un glob doublestar
(** coincide entre directorios) resuelto contra la ruta del archivo relativa al proyecto.
Fija la huella digital. Una lista blanca solo de ruta acepta silenciosamente cualquier
secreto futuro que aparezca en ese archivo. Edita la entrada y añade un
fingerprint: "sha256:<hex>" — el SHA-256 del valor del secreto detectado.
Ahora, si la clave se rota o aparece un secreto diferente en el mismo archivo,
preflight vuelve a alertar.
Los hallazgos se emparejan por ruta + huella digital, no por archivo completo. Una huella digital en lista blanca en un archivo no suprime otros secretos en otras líneas del mismo archivo.
SEO y Social:
seo_meta, canonical, structured_data, index_now (opt-in), og_twitter, viewport, lang
Seguridad e Infraestructura:
security_headers, ssl, www_redirect, email_auth (opt-in), secrets
Entorno y Salud:
env_parity, health_endpoint
Calidad de Código y Rendimiento:
vulnerability, debug_statements, error_pages, image_optimization
Legal y Cumplimiento:
legal_pages
Archivos Estándar Web:
favicon, robots_txt, sitemap, llms_txt, ads_txt (opt-in), humans_txt (opt-in), license (opt-in)
Cada ID de comprobación ahora es snake_case. Los nombres antiguos camelCase siguen funcionando
en cualquier lugar donde se acepte un ID (listas ignore:, --only, --skip,
preflight ignore) durante la línea 1.x, con una nota en stderr, y desaparecen
en 2.0. preflight ignore escribe el nombre nuevo. Las claves bajo
checks: en preflight.yml (healthEndpoint, seoMeta, ...) son un
esquema separado y no cambiaron.
| Antiguo | Nuevo |
|---|---|
seoMeta | seo_meta |
ogTwitter | og_twitter |
securityHeaders | security_headers |
envParity | env_parity |
healthEndpoint | health_endpoint |
robotsTxt | robots_txt |
llmsTxt | llms_txt |
adsTxt | ads_txt |
humansTxt | humans_txt |
indexNow | index_now |
Cada comprobación lee archivos; una ejecuta un programa. La comprobación vulnerability
ejecuta el gestor de paquetes de tu propio proyecto (npm audit, yarn audit,
composer audit, bundle audit, pip-audit, govulncheck, cargo audit)
dentro del directorio del proyecto, con un entorno depurado y un home temporal
para que no pueda leer tus tokens. Los gestores de paquetes aún respetan la
configuración local del proyecto, y parte de esa configuración puede ejecutar código
del repositorio (un yarnPath de Yarn, un alias de Cargo, un plugin de Composer).
Analizar tus propios proyectos es para lo que sirve Preflight. Al analizar un
repositorio que no confías, como una solicitud de extracción de un fork en CI, añade
--skip vulnerability.
Todos los servicios tienen comprobaciones de validación que verifican la integración adecuada (variables de entorno, patrones de SDK, archivos de configuración):
Pagos: stripe, paypal, braintree, paddle, lemonsqueezy
Seguimiento de Errores: sentry, bugsnag, rollbar, honeybadger, datadog, newrelic, logrocket
Email Transaccional: postmark, sendgrid, mailgun, aws_ses, resend
Email Marketing: mailchimp, convertkit, beehiiv, aweber, activecampaign, campaignmonitor, drip, klaviyo, buttondown
Analítica: plausible, fathom, google_analytics, fullres, datafast, posthog, mixpanel, amplitude, segment, hotjar
Autenticación: auth0, clerk, workos, firebase, supabase
Comunicación: twilio, slack, discord, intercom, crisp
Infraestructura: redis, sidekiq, rabbitmq, elasticsearch, convex
Almacenamiento y CDN: aws_s3, cloudinary, cloudflare
Búsqueda: algolia
IA: openai, anthropic, google_ai, mistral, cohere, replicate, huggingface, grok, perplexity, together_ai
SEO: index_now
Consentimiento de Cookies: cookieconsent, cookiebot, onetrust, termly, cookieyes, iubenda
| Código | Significado |
|---|---|
| 0 | Todas las comprobaciones pasaron |
| 1 | Solo advertencias |
| 2 | Se encontraron errores |
| 64 | Preflight no pudo ejecutarse (ruta incorrecta, configuración ilegible, ID de comprobación desconocido) |
| 130 | Análisis cancelado (Ctrl-C / SIGTERM) |
Los códigos 1 y 2 significan que el análisis se ejecutó e informó algo. El código 64 significa que nunca llegó tan lejos, por lo que CI puede distinguir "este proyecto tiene problemas" de "esta invocación fue incorrecta".
Completado con tabulador para comandos, banderas e IDs de comprobaciones (incluidos los valores de --only y --skip):
# bash (añade a ~/.bashrc)
source <(preflight completion bash)
# zsh (añade a ~/.zshrc)
source <(preflight completion zsh)
# fish
preflight completion fish | source
La salida también respeta la variable de entorno NO_COLOR.
Frameworks de Backend
Frameworks de Frontend
CMS Tradicionales
Generadores de Sitios Estáticos
CMS Headless
Otros
# Ejemplo de GitHub Actions (curl)
- name: Run Preflight
run: |
curl -sSL https://preflight.sh/install.sh | sh
preflight scan --ci --format json
# Ejemplo de GitHub Actions (Docker)
- name: Run Preflight
run: docker run -v ${{ github.workspace }}:/app ghcr.io/preflightsh/preflight scan --ci --format json
MIT
| Detecta la solución de consentimiento de cookies (cumplimiento GDPR/CCPA) |
| Favicon e Iconos | Comprueba favicon, apple-touch-icon (.png, .webp, .svg) y manifest web |
| robots.txt | Verifica que robots.txt exista y tenga contenido |
| sitemap.xml | Comprueba la presencia del sitemap o su generador |
| llms.txt | Comprueba el archivo de guía para rastreadores LLM |
| ads.txt | Valida ads.txt para sitios con publicidad (opt-in) |
| humans.txt | Comprueba humans.txt para acreditar al equipo (opt-in) |
| IndexNow | Verifica el archivo de clave IndexNow para una indexación de búsqueda más rápida (opt-in) |
| LICENCIA | Comprueba el archivo de licencia (opt-in, para proyectos de código abierto) |