Oxc — скиллы миграции на Oxlint и Oxfmt
Oxc migration skills
Два официальных скилла Oxc: агент переводит проект с ESLint на линтер Oxlint и с Prettier или Biome на форматтер Oxfmt
- 23 139 ★ репозитория
- Последний коммит
- MIT
Расширенный доступ
Почему такой уровень
- Агент запускает `npx @oxlint/migrate` и `npx oxfmt@latest` и ставит пакеты в `devDependencies`, то есть исполняет код из npm
- Миграция создает конфиги `.oxlintrc.json` и `.oxfmtrc.json` и правит команды в скриптах и CI проекта
Установка
- Работает в
В терминале, через SkillFoxx CLI
npx skillfoxx add skills/oxc-migration-skillsОпределит агенты на машине, покажет уровень доступа и зафиксирует версию.
Другие способы установки
Доступ и проверки
Как мы проверяемРасширенный доступИнструмент запускает код или ходит в сеть, а внешние данные только читает.
- Агент запускает `npx @oxlint/migrate` и `npx oxfmt@latest` и ставит пакеты в `devDependencies`, то есть исполняет код из npm
- Миграция создает конфиги `.oxlintrc.json` и `.oxfmtrc.json` и правит команды в скриптах и CI проекта
Это чужой код. Посмотрите файлы в репозитории перед установкой.
Что делает
В репозитории Oxc лежат два скилла для пользователей инструментов: `migrate-oxlint` переводит проект с ESLint на линтер Oxlint, `migrate-oxfmt` переводит с Prettier или Biome на форматтер Oxfmt. Оба ведут агента по шагам и опираются на встроенные команды миграции. `migrate-oxlint` запускает `npx @oxlint/migrate`: инструмент читает плоский конфиг ESLint и создает `.oxlintrc.json`. Ключи `--type-aware`, `--with-nursery`, `--js-plugins`, `--details`, `--replace-eslint-comments` и `--output-file` меняют результат. Затем агент сверяет карту плагинов, например `@typescript-eslint` превращается в `typescript`, смотрит перечень неперенесенных правил, ставит `oxlint` командой `npm install -D oxlint`, для правил с типами TypeScript добавляет `oxlint-tsgolint`, переносит локальные плагины в `jsPlugins` и заменяет вызовы `eslint` в CI на `oxlint`. `migrate-oxfmt` запускает `npx oxfmt@latest --migrate prettier` или `--migrate biome`: создается `.oxfmtrc.json`, переносятся `overrides`, шаблоны из `.prettierignore` и параметры плагинов Tailwind, Svelte и Astro. Затем агент решает, оставить ли `printWidth` равным 80 или принять умолчание Oxfmt, равное 100, проверяет `sortPackageJson`, по желанию включает `sortImports` и `sortTailwindcss` и меняет команды в CI на `npx oxfmt@latest` и `npx oxfmt@latest --check`.
Для кого. Для разработчиков на JavaScript и TypeScript, которые переводят проект с ESLint, Prettier или Biome на быстрые инструменты Oxc и поручают рутину ИИ-агенту.
Подходит, если
- В проекте ESLint с плоским конфигом `eslint.config.js`, и правила нужно перенести в Oxlint автоматически
- Prettier или Biome нужно заменить на Oxfmt с сохранением настроек форматирования и шаблонов игнорирования
- Нужно узнать, какие правила ESLint не переносятся, и решить, оставлять ли для них ESLint рядом: это показывает ключ `--details`
- В CI надо заменить вызовы `eslint`, `prettier` и `biome` командами Oxlint и Oxfmt
- Заодно нужно включить сортировку импортов или классов Tailwind средствами Oxfmt
Не подходит, если
- Конфиг ESLint остался в старом формате `.eslintrc`: скилл описывает перенос из плоского `eslint.config.js`
- Конфиг Prettier записан в YAML, JSON5 или TOML: команда `--migrate` такой формат не читает, и его сначала нужно перевести в JSON или JS
- Вы пишете правила линтера или правите код самого Oxc: остальные скиллы папки `.agents/skills` (`insta-snapshots`, `performance-lint-rules`) нужны разработчикам этого репозитория
Пример запроса к агенту
Переведи проект с ESLint на Oxlint: запусти миграцию, покажи правила, которые не перенеслись, и замени вызов eslint в CIОграничения
- Автоматический перенос частичный: `@oxlint/migrate` и `oxfmt --migrate` пропускают то, что не поддерживают, и печатают предупреждения. Список неперенесенных правил ESLint выводит ключ `--details`, а решение, оставлять ли ESLint для них, остается за вами.
- Динамический конфиг Prettier с ветвлением по окружению переносится снимком значений, и логику нужно вручную перенести в `oxfmt.config.ts`. Вложенные конфиги команда `--migrate` не обходит: ее запускают в каждой папке отдельно. `overrides` из Biome тоже переносятся вручную.
- Миграция Oxfmt завершается ошибкой, если рядом уже лежит конфиг Oxfmt. В Oxlint `settings` внутри `overrides` не поддерживаются, локальные плагины переносятся вручную в `jsPlugins`, и часть плагинов ESLint 9 и новее с его API JS-плагинов не работает.
- У Prettier и Biome `printWidth` по умолчанию 80, у Oxfmt 100, а инструмент миграции пишет 80, пока вы не решите иначе. Порядок ключей `sortPackageJson` у Oxfmt отличается от `prettier-plugin-packagejson`.
- Документация приводит команды установки скиллов, но клиентов агентов не называет. Лицензия MIT.
Как отключить. Удалите папки `migrate-oxlint` и `migrate-oxfmt` из каталога скиллов агента. Результат миграции остается в проекте: файлы `.oxlintrc.json` и `.oxfmtrc.json`, резервную копию `.oxlintrc.json.bak` и измененные команды в CI откатывайте через git.
Частые вопросы
Как поставить скиллы Oxc?
В документации Oxc для линтера дана команда `npx skills add https://github.com/oxc-project/oxc --skill migrate-oxlint`, а для форматтера `npx skills add https://github.com/oxc-project/oxc --skill migrate-oxfmt`. Скиллы лежат в папке `.agents/skills` репозитория.
Что делает npx @oxlint/migrate?
Команда находит плоский конфиг ESLint, обычно `eslint.config.js`, и создает по нему `.oxlintrc.json`. Путь к конфигу можно передать аргументом, а ключ `--output-file` меняет имя результата. Пакет нужен один раз, и добавлять `@oxlint/migrate` в `package.json` скилл не советует.
Как перейти с Biome на Oxfmt?
Команда `npx oxfmt@latest --migrate biome` читает `biome.json` или `biome.jsonc` и переносит параметры: `indentStyle` становится `useTabs`, `lineWidth` превращается в `printWidth`, `quoteStyle` в `singleQuote`. Незаданные в Biome опции записываются в `.oxfmtrc.json` с умолчаниями Biome, поэтому форматирование сохраняется.
Можно ли оставить ESLint рядом с Oxlint?
Да. По описанию скилла, Oxlint задуман как дополнение к ESLint на время миграции, а комментарии `eslint-disable` он понимает. Ключ `--replace-eslint-comments` переписывает их в `oxlint-disable`. Плагины без встроенного аналога подключаются через поле `jsPlugins`.
Какие команды в CI заменить?
`eslint .` заменяется на `oxlint`, который по умолчанию проверяет текущую папку, `eslint --fix` на `oxlint --fix`, `eslint --max-warnings 0` на `oxlint --deny-warnings` или `--max-warnings 0`. Для форматирования `prettier --write .` заменяется на `npx oxfmt@latest`, а проверка на `npx oxfmt@latest --check`.
Обсуждение
Вопросов и отзывов пока нет.
Похожие
СкиллыСкилл ставит набор правил Oxlint, которые ловят низкокачественные шаблоны в TypeScript и JavaScript, часто оставляемые генерацией кода
Линтер и форматтер для JavaScript и TypeScript без настройки, с готовыми профилями под десятки ИИ-агентов и редакторов
Builder Skills
Skills for agents
Набор небольших скиллов от Builder.io для рабочих привычек агента: визуальные планы и разборы диффов, сверка с документацией, кросс-агентное ревью и аккуратные
Набор скиллов от команды Kotlin для агентов: перевод Java в Kotlin, миграции сборки и правильная работа с бэкенд-фреймворками
agnix — линтер для CLAUDE.md, AGENTS.md, SKILL.md, хуков и MCP-конфигов: 702 правила, автофикс и редакторские расширения для VS Code и JetBrains
Orval — скилл для агентов
Orval skill
Официальный скилл Orval: агент настраивает генерацию TypeScript-клиентов, хуков Query, схем Zod и моков MSW из спецификации OpenAPI
Коротко о README
Репозиторий содержит набор инструментов для JavaScript и TypeScript на Rust: парсер, линтер Oxlint, форматтер Oxfmt, трансформер, минификатор и резолвер модулей. Приложения линтера и форматтера лежат в `apps/`, сборки для npm в `npm/`, исходники движка в `crates/`. Главная страница дает команды запуска `npx oxlint@latest` и `npx oxfmt@latest`, список проектов, которые используют Oxc, и ссылки на документацию на oxc.rs. Скиллы для агентов собраны в `.agents/skills`, там же правила для разработчиков репозитория.
Бейдж для README
Исходный SKILL.md
--- name: migrate-oxlint description: Guide for migrating a project from ESLint to Oxlint. Use when asked to migrate, convert, or switch a JavaScript/TypeScript project's linter from ESLint to Oxlint. --- This skill guides you through migrating a JavaScript/TypeScript project from ESLint to [Oxlint](https://oxc.rs/docs/guide/usage/linter/). ## Overview Oxlint is a high-performance linter that implements many popular ESLint rules natively in Rust. It can be used alongside ESLint or as a full replacement. An official migration tool is available, and will be used by this skill: [`@oxlint/migrate`](https://github.com/oxc-project/oxlint-migrate) ## Step 1: Run Automated Migration Run the migration tool in the project root: ```bash npx @oxlint/migrate ``` This reads your ESLint flat config (`eslint.config.js` for example) and generates a `.oxlintrc.json` file from it. It will find your ESLint config file automatically in most cases. See options below for more info. ### Key Options | Option | Description | | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | | `--type-aware` | Include type-aware rules from `@typescript-eslint` (will require the `oxlint-tsgolint` package to be installed after migrating) | | `--with-nursery` | Include experimental rules still under development, may not be fully stable or consistent with ESLint equivalents | | `--js-plugins [bool]` | Enable/disable ESLint plugin migration via `jsPlugins` (default: enabled) | | `--details` | List rules that could not be migrated | | `--replace-eslint-comments` | Convert all `// eslint-disable` comments to `// oxlint-disable` | | `--output-file <file>` | Specify a different output path (default: `.oxlintrc.json`) | If your ESLint config is not at the default location, pass the path explicitly: ```bash npx @oxlint/migrate ./path/to/eslint.config.js ``` ## Step 2: Review Generated Config After migration, review the generated `.oxlintrc.json`.