
CLI-инструмент на базе Go, который сканирует кодовые базы на готовность к запуску, обнаруживая отсутствующую конфигурацию, проблемы гигиены безопасности, утечки секретов и пробелы интеграции перед развёртыванием в production.
Preflight.sh — это инструмент командной строки, который сканирует вашу кодовую базу на готовность к запуску. Выявляет отсутствующую конфигурацию, проблемы интеграции, вопросы безопасности, пробелы в SEO-метаданных и другие распространённые ошибки до развёртывания в продакшене.
Не позорьте себя в проде. Просто выполните команду.
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
Скачайте последний релиз в GitHub Releases.
# Инициализация в каталоге вашего проекта
cd your-project
preflight init
# Запуск всех проверок
preflight scan
# Сканирование конкретного каталога
preflight scan /path/to/project
# Запуск с подробным выводом (показывает, какие файлы соответствуют каждой проверке)
preflight scan --verbose
preflight scan -v # краткая форма
# Запуск в режиме CI с JSON-выводом
preflight scan --ci --format json
# Запуск только конкретных проверок или пропуск некоторых для быстрой итерации
# (разовый запуск; в отличие от `preflight ignore` не изменяет preflight.yml)
preflight scan --only seoMeta,ogTwitter
preflight scan --skip vulnerability,secrets
# Отключить проверку
preflight ignore sitemap
# Включить проверку снова
preflight unignore sitemap
# Список всех ID проверок
preflight checks
Этот репозиторий включает совместимый со skills.sh навык агента в skills/preflight/SKILL.md. Он даёт агентам кодирования повторяемый рабочий процесс Preflight: изучить preflight.yml, запустить безопасные для CI сканирования, распределить находки по приоритетам, избегать небезопасных игнорирований, повторно запустить валидацию и сообщить об остаточном риске запуска.
Вывести список навыков из репозитория:
# С помощью Bun
bunx --yes skills add preflightsh/preflight --list
# Или с помощью npm
npx --yes skills add preflightsh/preflight --list
Установить только навык Preflight:
# С помощью Bun
bunx --yes skills add preflightsh/preflight --skill preflight
# Или с помощью npm
npx --yes skills add preflightsh/preflight --skill preflight
Preflight полностью работает из командной строки без учётной записи. Опциональный дашборд на app.preflight.sh добавляет облачную историю ваших сканирований и AI-генерируемые предложения по исправлению для каждой находки. Ваш код никогда не покидает вашу машину: сканирование выполняется локально, и при публикации отправляется только редактированная сводка результатов (ID проверок, статусы и сообщения — никогда секретные значения или содержимое файлов).
Создайте бесплатную учётную запись, затем подключите CLI:
preflight auth login # открывает браузер для авторизации этого CLI
preflight auth status # показывает, под кем вы вошли
preflight auth logout # удаляет сохранённые учётные данные
Опубликуйте сканирование на дашборд с помощью --publish. Будет выведена ссылка для просмотра запуска. Публикация выполняется по принципу «best-effort»: если вы офлайн или не вошли в систему, сканирование всё равно выполнится и завершится нормально.
preflight scan --publish
На дашборде вы получаете по каждому запуску разбивку pass/warn/fail, полный список находок и историю по каждому проекту, чтобы видеть, что изменилось между деплоями.
Вы также можете читать эту историю из терминала с помощью preflight history:
preflight history # последние запуски по вашим проектам
preflight history --here # только запуски текущего проекта
preflight history <run-id> # полные результаты проверок одного запуска
preflight history --here --format json # машиночитаемый формат для агентов
Требуется preflight auth login. --here сопоставляет запуски с текущим репозиторием по его git-remote — тот же ключ, что используется при публикации.
Откройте любую проверку со статусом failed или warning в опубликованном запуске, чтобы сгенерировать пошаговое исправление с учётом вашего стека, с готовыми к копированию командами и кодом.
Preflight автоматически определяет и проверяет конфигурацию этих сервисов:
Платежи
Отслеживание ошибок и мониторинг
Email и рассылки
Аналитика
Аутентификация
Чат
Уведомления
Инфраструктура
Хранилище и CDN
Поиск
SEO
AI / LLM
Preflight использует файл preflight.yml в корне вашего проекта:
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
Отключите конкретные проверки или сервисы с помощью 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
Предпочтительнее добавить отдельную находку в allowlist, чем отключать всю проверку secrets целиком. Добавляйте разовые исключения из командной строки:
preflight ignore secrets web/js/golden-hour.js
Эта команда добавляет элемент пути в checks.secrets.allowlist вашего preflight.yml. Поле path — это doublestar glob (** сопоставляется через каталоги), который разрешается относительно пути файла в проекте.
Зафиксируйте fingerprint. Allowlist только по пути молча принимает любой будущий секрет, попавший в этот файл. Отредактируйте запись и добавьте fingerprint: "sha256:<hex>" — SHA-256 от обнаруженного значения секрета. Теперь, если ключ будет ротирован или в том же файле появится другой секрет, preflight снова предупредит.
Находки сопоставляются по пути + fingerprint, а не по всему файлу. Fingerprint из allowlist в файле не подавляет другие секреты на других строках того же файла.
SEO и соцсети:
seoMeta, canonical, structured_data, indexNow (опционально), ogTwitter, viewport, lang
Безопасность и инфраструктура:
securityHeaders, ssl, www_redirect, email_auth (опционально), secrets
Окружение и здоровье:
envParity, healthEndpoint
Качество кода и производительность:
vulnerability, debug_statements, error_pages, image_optimization
Юридическое и соответствие:
legal_pages
Стандартные веб-файлы:
favicon, robotsTxt, sitemap, llmsTxt, adsTxt (опционально), humansTxt (опционально), license (опционально)
Все сервисы имеют проверки валидации, которые подтверждают корректную интеграцию (переменные окружения, паттерны SDK, конфигурационные файлы):
Платежи: stripe, paypal, braintree, paddle, lemonsqueezy
Отслеживание ошибок: sentry, bugsnag, rollbar, honeybadger, datadog, newrelic, logrocket
Транзакционные email: postmark, sendgrid, mailgun, aws_ses, resend
Email-маркетинг: mailchimp, convertkit, beehiiv, aweber, activecampaign, campaignmonitor, drip, klaviyo, buttondown
Аналитика: plausible, fathom, google_analytics, fullres, datafast, posthog, mixpanel, amplitude, segment, hotjar
Аутентификация: auth0, clerk, workos, firebase, supabase
Коммуникации: twilio, slack, discord, intercom, crisp
Инфраструктура: redis, sidekiq, rabbitmq, elasticsearch, convex
Хранилище и CDN: aws_s3, cloudinary, cloudflare
Поиск: algolia
AI: openai, anthropic, google_ai, mistral, cohere, replicate, huggingface, grok, perplexity, together_ai
SEO: indexNow
Согласие на cookies: cookieconsent, cookiebot, onetrust, termly, cookieyes, iubenda
| Код | Значение |
|---|---|
| 0 | Все проверки пройдены |
| 1 | Только предупреждения |
| 2 | Найдены ошибки |
Коды 1 и 2 означают, что сканирование выполнилось и сообщило о чём-то. Код 64 означает, что до этого дело не дошло, поэтому CI может отличить «у этого проекта есть проблемы» от «этот запуск был ошибочным».
Автодополнение по Tab для команд, флагов и ID проверок (включая значения --only и --skip):
# bash (добавьте в ~/.bashrc)
source <(preflight completion bash)
# zsh (добавьте в ~/.zshrc)
source <(preflight completion zsh)
# fish
preflight completion fish | source
Вывод также учитывает переменную окружения NO_COLOR.
Бэкенд-фреймворки
Фронтенд-фреймворки
Традиционные CMS
Генераторы статических сайтов
Headless CMS
Прочее
# Пример для GitHub Actions (curl)
- name: Run Preflight
run: |
curl -sSL https://preflight.sh/install.sh | sh
preflight scan --ci --format json
# Пример для GitHub Actions (Docker)
- name: Run Preflight
run: docker run -v ${{ github.workspace }}:/app ghcr.io/preflightsh/preflight scan --ci --format json
MIT
| Проверка | Описание |
|---|
| ENV Parity | Сравнивает .env и .env.example на наличие отсутствующих переменных |
| Health Endpoint | Проверяет доступность сайта; автоматически определяет /health, /healthz, /api/health или переключается на корневой путь |
| Vulnerability Scan | Проверяет уязвимости зависимостей (bundle audit, npm audit и т. д.) |
| SEO Metadata | Проверяет наличие title, description и тегов Open Graph |
| OG & Twitter Cards | Проверяет og:image, twitter:card и метаданные для соцсетей |
| Canonical URL | Проверяет наличие тега canonical link |
| Viewport | Проверяет корректный тег viewport для мобильных устройств |
| Lang Attribute | Проверяет атрибут html lang для доступности |
| Structured Data | Проверяет разметку JSON-LD Schema.org |
| Security Headers | Проверяет HSTS, CSP, X-Content-Type-Options на продакшене и стейджинге |
| SSL Certificate | Проверяет действительность SSL и предупреждает до истечения срока |
| WWW Redirect | Проверяет редирект www/без www на канонический URL |
| Email Auth | Проверяет DNS-записи SPF/DMARC для доставляемости почты (опционально) |
| Secret Scanning | Находит утёкшие API-ключи и учётные данные в коде |
| Debug Statements | Обнаруживает console.log, var_dump, debugger, оставленные в коде |
| Error Pages | Проверяет наличие кастомных страниц ошибок 404/500 |
| Image Optimization | Находит большие изображения (>500 КБ), которые ухудшают время загрузки |
| Legal Pages | Проверяет наличие страниц политики конфиденциальности и условий использования |
| Cookie Consent | Обнаруживает решение для согласия на cookies (соответствие GDPR/CCPA) |
| Favicon & Icons | Проверяет favicon, apple-touch-icon (.png, .webp, .svg) и web manifest |
| robots.txt | Проверяет, что robots.txt существует и содержит содержимое |
| sitemap.xml | Проверяет наличие sitemap или генератора |
| llms.txt | Проверяет файл с рекомендациями для LLM-краулеров |
| ads.txt | Проверяет ads.txt для сайтов с рекламой (опционально) |
| humans.txt | Проверяет humans.txt для указания команды (опционально) |
| IndexNow | Проверяет файл ключа IndexNow для ускоренной индексации в поисковиках (опционально) |
| LICENSE | Проверяет наличие файла лицензии (опционально, для open source проектов) |
| 64 | Preflight не смог выполниться (неверный путь, нечитаемый конфиг, неизвестный ID проверки) |
| 130 | Сканирование отменено (Ctrl-C / SIGTERM) |