
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 escanea tu código base para verificar la preparación para el lanzamiento. Identifica configuraciones faltantes, problemas de integración, preocupaciones de seguridad, brechas de metadatos SEO y otros errores comunes antes de desplegar 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.
# Initialize in your project directory
cd your-project
preflight init
# Run all checks
preflight scan
# Scan a specific directory
preflight scan /path/to/project
# Run with verbose output (shows which files matched each check)
preflight scan --verbose
preflight scan -v # short form
# Run in CI mode with JSON output
preflight scan --ci --format json
# Run only specific checks, or skip some, for fast iteration
# (one-off; unlike `preflight ignore` it doesn't change preflight.yml)
preflight scan --only seoMeta,ogTwitter
preflight scan --skip vulnerability,secrets
# Silence a check
preflight ignore sitemap
# Unsilence a check
preflight unignore sitemap
# List all check IDs
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 escaneos seguros para CI, clasificar hallazgos, evitar ignorados inseguros, re-ejecutar validación e informar el riesgo residual de lanzamiento.
Lista la habilidad desde este repositorio:
# With Bun
bunx --yes skills add preflightsh/preflight --list
# Or with npm
npx --yes skills add preflightsh/preflight --list
Instala solo la habilidad Preflight:
# With Bun
bunx --yes skills add preflightsh/preflight --skill preflight
# Or with npm
npx --yes skills add preflightsh/preflight --skill preflight
Preflight es totalmente usable desde la línea de comandos sin necesidad de cuenta. El panel opcional en app.preflight.sh añade un historial alojado de tus escaneos y sugerencias de corrección generadas por IA para cada hallazgo. Tu código nunca sale de tu máquina: el escaneo se ejecuta localmente, y solo se envía un resumen redactado de los resultados (IDs de verificación, estados y mensajes, nunca valores secretos o contenidos de archivos) cuando publicas.
Crea una cuenta gratuita, luego conecta la CLI:
preflight auth login # opens your browser to authorize this CLI
preflight auth status # show who you're logged in as
preflight auth logout # remove stored credentials
Publica un escaneo en tu panel con --publish. Imprime un enlace para ver la ejecución. La publicación es de mejor esfuerzo: si estás desconectado o no has iniciado sesión, el escaneo aún se ejecuta y sale normalmente.
preflight scan --publish
En el panel obtienes el desglose de cada ejecución (pasa/advertencia/error), la lista completa de hallazgos y un historial por proyecto para ver qué cambió entre despliegues.
También puedes leer ese historial desde la terminal con preflight history:
preflight history # recent runs across your projects
preflight history --here # only the current project's runs
preflight history <run-id> # one run's full check results
preflight history --here --format json # machine-readable, for agents
Requiere preflight auth login. --here empareja las ejecuciones con el repositorio actual mediante su git remote, la misma clave utilizada al publicar.
Abre cualquier verificación fallida o con advertencia en una ejecución publicada para generar una corrección paso a paso adaptada a tu stack detectado, con comandos y código listos para copiar.
Preflight detecta automáticamente y valida la configuración de estos servicios:
Pagos
Seguimiento de errores y monitoreo
Correo electrónico y newsletters
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" # optional - auto-detects common paths if not set
stripeWebhook:
enabled: true
url: "https://api.example.com/webhooks/stripe"
seoMeta:
enabled: true
mainLayout: "app/views/layouts/application.html.erb"
security:
enabled: true
secrets:
enabled: true
# Per-file allowlist for the secrets scan. Use this to suppress an
# individual finding (e.g. a referrer-restricted public key) without
# disabling the whole check.
allowlist:
- path: web/js/golden-hour.js
fingerprint: "sha256:<hex>" # recommended — pins to the exact secret
reason: "HTTP-referrer-restricted Google Timezone key"
- path: "web/tools/**/*.php" # doublestar globs are supported
indexNow:
enabled: true
key: "your32characterhexkeyhere00000"
emailAuth:
enabled: true # opt-in, checks SPF/DMARC on production domain
humansTxt:
enabled: false # opt-in, credits the team
license:
enabled: false # opt-in, for open source projects
# Silence specific checks or services by ID
ignore:
- sitemap
- llmsTxt
- google_analytics
Silencia verificaciones o servicios específicos usando preflight ignore <id>:
preflight ignore sitemap # Ignore sitemap check
preflight ignore sentry # Ignore Sentry service validation
preflight unignore sitemap # Re-enable sitemap check
preflight checks # List all ignorable IDs
Prefiere incluir un hallazgo individual en lista blanca en lugar de silenciar toda la verificación de 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 en checks.secrets.allowlist dentro de tu preflight.yml. El campo path es un glob doublestar (** coincide a través de directorios) resuelto contra la ruta relativa al proyecto.
Fija la huella digital (fingerprint). Una lista blanca solo por 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 volverá a alertar.
Los hallazgos se emparejan por ruta + fingerprint, no por archivo completo. Un fingerprint en lista blanca dentro de un archivo no suprime otros secretos en otras líneas del mismo archivo.
SEO y Social:
seoMeta, canonical, structured_data, indexNow (opt-in), ogTwitter, viewport, lang
Seguridad e infraestructura:
securityHeaders, ssl, www_redirect, email_auth (opt-in), secrets
Entorno y salud:
envParity, healthEndpoint
Calidad de código y rendimiento:
vulnerability, debug_statements, error_pages, image_optimization
Legal y cumplimiento:
legal_pages
Archivos web estándar:
favicon, robotsTxt, sitemap, llmsTxt, adsTxt (opt-in), humansTxt (opt-in), license (opt-in)
Todos los servicios tienen verificaciones de validación que confirman la integración correcta (variables de entorno, patrones SDK, archivos de configuración):
Pagos: stripe, paypal, braintree, paddle, lemonsqueezy
Seguimiento de errores: sentry, bugsnag, rollbar, honeybadger, datadog, newrelic, logrocket
Correo transaccional: postmark, sendgrid, mailgun, aws_ses, resend
Marketing por correo: 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: indexNow
Consentimiento de cookies: cookieconsent, cookiebot, onetrust, termly, cookieyes, iubenda
| Código | Significado |
|---|---|
| 0 | Todas las verificaciones pasaron |
| 1 | Solo advertencias |
Los códigos 1 y 2 significan que el escaneo se ejecutó e informó algo. El código 64 significa que nunca llegó a ese punto, por lo que CI puede diferenciar "este proyecto tiene problemas" de "esta invocación fue incorrecta".
Finalización por tabulación para comandos, flags e IDs de verificación (incluyendo valores de --only y --skip):
# bash (add to ~/.bashrc)
source <(preflight completion bash)
# zsh (add to ~/.zshrc)
source <(preflight completion zsh)
# fish
preflight completion fish | source
La salida también respeta la variable de entorno NO_COLOR.
Frameworks backend
Frameworks frontend
CMS tradicionales
Generadores de sitios estáticos
CMS sin cabeza (headless)
Otros
# GitHub Actions example (curl)
- name: Run Preflight
run: |
curl -sSL https://preflight.sh/install.sh | sh
preflight scan --ci --format json
# GitHub Actions example (Docker)
- name: Run Preflight
run: docker run -v ${{ github.workspace }}:/app ghcr.io/preflightsh/preflight scan --ci --format json
MIT
| Verificación | Descripción |
|---|
| ENV Parity | Compara .env y .env.example en busca de variables faltantes |
| Health Endpoint | Verifica que el sitio sea accesible; detecta automáticamente /health, /healthz, /api/health o recurre a la raíz |
| Vulnerability Scan | Busca vulnerabilidades de dependencias (bundle audit, npm audit, etc.) |
| SEO Metadata | Comprueba la presencia de título, descripción y etiquetas Open Graph |
| OG & Twitter Cards | Valida og:image, twitter:card y metadatos para compartir en redes sociales |
| Canonical URL | Verifica que la etiqueta de enlace canónico esté presente |
| Viewport | Comprueba la etiqueta meta viewport adecuada para móviles |
| Lang Attribute | Valida el atributo html lang para accesibilidad |
| Structured Data | Comprueba el marcado JSON-LD Schema.org |
| Security Headers | Valida HSTS, CSP, X-Content-Type-Options tanto en producción como en staging |
| SSL Certificate | Verifica la validez del SSL y advierte antes de la expiración |
| WWW Redirect | Verifica la redirección www/no-www a la URL canónica |
| Email Auth | Comprueba registros SPF/DMARC DNS para la entregabilidad del correo (opt-in) |
| Secret Scanning | Encuentra claves API y credenciales filtradas en el código |
| Debug Statements | Detecta console.log, var_dump, debugger dejados en el código |
| Error Pages | Comprueba la existencia de páginas de error personalizadas 404/500 |
| Image Optimization | Encuentra imágenes grandes (>500KB) que perjudican los tiempos de carga |
| Legal Pages | Verifica la presencia de páginas de política de privacidad y términos de servicio |
| Cookie Consent | Detecta la solución de consentimiento de cookies (cumplimiento GDPR/CCPA) |
| Favicon & Icons | Comprueba favicon, apple-touch-icon (.png, .webp, .svg) y el manifiesto web |
| robots.txt | Verifica que exista robots.txt y tenga contenido |
| sitemap.xml | Comprueba la presencia del sitemap o del generador |
| llms.txt | Verifica la existencia del archivo de guía para crawlers 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 más rápida (opt-in) |
| LICENSE | Comprueba la existencia del archivo de licencia (opt-in, para proyectos de código abierto) |
| 2 |
| Errores encontrados |
| 64 | Preflight no pudo ejecutarse (ruta incorrecta, configuración ilegible, ID de verificación desconocido) |
| 130 | Escaneo cancelado (Ctrl-C / SIGTERM) |