Skip to content

Пользовательский путь вывода ​

Что вы сможете сделать после изучения ​

  • Использовать флаг -o или --output для синхронизации навыков в файл .md в любом месте
  • Понять, как инструмент автоматически создает несуществующие файлы и каталоги
  • Настроить разные AGENTS.md для разных инструментов (Windsurf, Cursor и др.)
  • Управлять списком навыков в многофайловой среде
  • Пропустить стандартный AGENTS.md и интегрироваться в существующую систему документации

Предварительные знания

В этом руководстве предполагается, что вы уже освоили базовую синхронизацию навыков. Если вы еще не установили ни одного навыка или не синхронизировали AGENTS.md, пожалуйста, сначала пройдите предварительный курс.


Ваша текущая проблема ​

Возможно, вы уже привыкли к тому, что openskills sync по умолчанию создает AGENTS.md, но можете столкнуться с:

  • Инструмент требует определенный путь: Некоторые AI-инструменты (например, Windsurf) ожидают AGENTS.md в определенном каталоге (например, .ruler/), а не в корне проекта
  • Конфликт нескольких инструментов: Одновременное использование нескольких инструментов кодирования, которые могут ожидать AGENTS.md в разных местах
  • Интеграция с существующей документацией: У вас уже есть документ со списком навыков, и вы хотите интегрировать навыки OpenSkills в него, а не создавать новый файл
  • Каталог не существует: Вы хотите вывести вложенный каталог (например, docs/ai-skills.md), но каталог еще не существует

Корень этих проблем: путь вывода по умолчанию не удовлетворяет все сценарии. Вам нужен более гибкий контроль вывода.


Когда использовать этот прием ​

Пользовательский путь вывода подходит для этих сценариев:

  • Многоинструментальная среда: Настройка независимых AGENTS.md для разных AI-инструментов (например, .ruler/AGENTS.md против AGENTS.md)
  • Требования структуры каталогов: Инструмент ожидает AGENTS.md в определенном каталоге (например, .ruler/ в Windsurf)
  • Интеграция с существующей документацией: Интеграция списка навыков в существующую систему документации вместо создания нового AGENTS.md
  • Организационное управление: Классификация и хранение списков навыков по проектам или функциям (например, docs/ai-skills.md)
  • CI/CD среда: Использование фиксированного пути вывода в автоматизированных процессах

Рекомендуемая практика

Если ваш проект использует только один AI-инструмент, и инструмент поддерживает AGENTS.md в корне проекта, используйте путь по умолчанию. Используйте пользовательский путь вывода только при необходимости управления несколькими файлами или специфических требований инструмента.


🎒 Подготовка перед началом ​

Перед началом, пожалуйста, подтвердите:

Предварительная проверка

Убедитесь, что у вас есть установленные навыки:

bash
npx openskills list

Если список пуст, сначала установите навыки:

bash
npx openskills install anthropics/skills

Основная идея: гибкий контроль вывода ​

Функция синхронизации OpenSkills по умолчанию выводит в AGENTS.md, но вы можете использовать флаг -o или --output для настройки пользовательского пути вывода.

[Поведение по умолчанию]                    [Пользовательский вывод]
openskills sync      →      AGENTS.md (корень проекта)
openskills sync -o custom.md →  custom.md (корень проекта)
openskills sync -o .ruler/AGENTS.md →  .ruler/AGENTS.md (вложенный каталог)

Ключевые особенности:

  1. Произвольный путь: можно указать любой путь к файлу .md (относительный или абсолютный)
  2. Автоматическое создание файла: если файл не существует, инструмент автоматически создает его
  3. Автоматическое создание каталога: если каталог файла не существует, инструмент рекурсивно создает его
  4. Умный заголовок: при создании файла автоматически добавляется заголовок на основе имени файла (например, # AGENTS)
  5. Проверка формата: должен заканчиваться на .md, иначе будет ошибка

Зачем нужна эта функция?

Разные AI-инструменты могут иметь разные ожидаемые пути:

ИнструментОжидаемый путьДоступен ли путь по умолчанию
Claude CodeAGENTS.md✅ Доступен
CursorAGENTS.md✅ Доступен
Windsurf.ruler/AGENTS.md❌ Недоступен
Aider.aider/agents.md❌ Недоступен

Используя флаг -o, вы можете настроить правильный путь для каждого инструмента.


Следуйте за мной ​

Шаг 1: Базовое использование - вывод в текущий каталог ​

Сначала попробуйте синхронизировать навыки в пользовательский файл в текущем каталоге:

bash
npx openskills sync -o my-skills.md

Почему

Использование -o my-skills.md сообщает инструменту вывести в my-skills.md вместо стандартного AGENTS.md.

Вы должны увидеть:

Если my-skills.md не существует, инструмент создаст его:

Created my-skills.md

Затем запустится интерактивный интерфейс выбора:

Found 2 skill(s)

? Select skills to sync to my-skills.md:
❯ ◉ pdf                        (project)  Comprehensive PDF manipulation toolkit...
  ◉ git-workflow                (project)  Git workflow: Best practices for commits...

<Space> Выбрать  <a> Выбрать все  <i> Инвертировать  <Enter> Подтвердить

После выбора навыков вы увидите:

✅ Synced 2 skill(s) to my-skills.md

Проверьте созданный файл

Просмотрите созданный файл:

bash
cat my-skills.md

Вы увидите:

markdown
<!-- Заголовок файла: # my-skills -->

<skills_system priority="1">

## Available Skills

<!-- SKILLS_TABLE_START -->
<usage>
When users ask you to perform tasks, check if any of available skills below can help...
</usage>

<available_skills>

<skill>
<name>pdf</name>
<description>Comprehensive PDF manipulation toolkit...</description>
<location>project</location>
</skill>

</available_skills>
<!-- SKILLS_TABLE_END -->

</skills_system>

Обратите внимание, что первая строка - # my-skills, это заголовок, автоматически сгенерированный инструментом на основе имени файла.


Шаг 2: Вывод во вложенный каталог ​

Теперь попробуйте синхронизировать навыки в несуществующий вложенный каталог:

bash
npx openskills sync -o .ruler/AGENTS.md

Почему

Некоторые инструменты (например, Windsurf) ожидают AGENTS.md в каталоге .ruler/. Если каталог не существует, инструмент автоматически создаст его.

Вы должны увидеть:

Если каталог .ruler/ не существует, инструмент создаст каталог и файл:

Created .ruler/AGENTS.md

Затем запустится интерактивный интерфейс выбора (такой же, как на предыдущем шаге).

Руководство по операциям:

┌─────────────────────────────────────────────────────────────┐
│  Описание автоматического создания каталога                  │
│                                                             │
│  Введенная команда: openskills sync -o .ruler/AGENTS.md     │
│                                                             │
│  Выполнение инструмента:                                     │
│  1. Проверка существования каталога .ruler  →  Не существует│
│  2. Рекурсивное создание каталога .ruler   →  mkdir .ruler  │
│  3. Создание .ruler/AGENTS.md  →  Запись заголовка # AGENTS │
│  4. Синхронизация содержимого навыков  →  Запись списка навыков в формате XML │
│                                                             │
│  Результат: файл .ruler/AGENTS.md создан, навыки синхронизированы │
└─────────────────────────────────────────────────────────────┘

Рекурсивное создание

Инструмент рекурсивно создаст все несуществующие родительские каталоги. Например:

  • docs/ai/skills.md - если docs и docs/ai не существуют, оба будут созданы
  • .config/agents.md - будет создан скрытый каталог .config

Шаг 3: Управление несколькими файлами - настройка для разных инструментов ​

Предположим, вы одновременно используете Windsurf и Cursor и вам нужно настроить разные AGENTS.md для них:

bash
<!-- Настройка для Windsurf (ожидает .ruler/AGENTS.md) -->
npx openskills sync -o .ruler/AGENTS.md

<!-- Настройка для Cursor (использует AGENTS.md в корне проекта) -->
npx openskills sync

Почему

Разные инструменты могут ожидать AGENTS.md в разных местах. Используя -o, вы можете настроить правильный путь для каждого инструмента, избегая конфликтов.

Вы должны увидеть:

Два файла созданы отдельно:

bash
<!-- Просмотр AGENTS.md для Windsurf -->
cat .ruler/AGENTS.md

<!-- Просмотр AGENTS.md для Cursor -->
cat AGENTS.md

Независимость файлов

Каждый файл .md независим и содержит свой собственный список навыков. Вы можете выбирать разные навыки в разных файлах:

  • .ruler/AGENTS.md - навыки, выбранные для Windsurf
  • AGENTS.md - навыки, выбранные для Cursor
  • docs/ai-skills.md - список навыков в документации

Шаг 4: Неинтерактивная синхронизация в пользовательский файл ​

В среде CI/CD вам может потребоваться пропустить интерактивный выбор и напрямую синхронизировать все навыки в пользовательский файл:

bash
npx openskills sync -o .ruler/AGENTS.md -y

Почему

Флаг -y пропускает интерактивный выбор и синхронизирует все установленные навыки. В сочетании с флагом -o, можно выводить в пользовательский путь в автоматизированном процессе.

Вы должны увидеть:

Created .ruler/AGENTS.md
✅ Synced 2 skill(s) to .ruler/AGENTS.md

Сценарий использования CI/CD

Использование в CI/CD скриптах:

bash
#!/bin/bash
<!-- Установка навыков -->
npx openskills install anthropics/skills -y

<!-- Синхронизация в пользовательский файл (неинтерактивно) -->
npx openskills sync -o .ruler/AGENTS.md -y

Шаг 5: Проверка выходного файла ​

Наконец, проверьте, правильно ли создан выходной файл:

bash
<!-- Просмотр содержимого файла -->
cat .ruler/AGENTS.md

<!-- Проверка существования файла -->
ls -l .ruler/AGENTS.md

<!-- Подтверждение количества навыков -->
grep -c "<name>" .ruler/AGENTS.md

Вы должны увидеть:

  1. Файл содержит правильный заголовок (например, # AGENTS)
  2. Файл содержит XML-тег <skills_system>
  3. Файл содержит список навыков <available_skills>
  4. Каждый <skill> содержит <name>, <description>, <location>

Проверка пути вывода

Если вы не уверены в текущем рабочем каталоге, можно использовать:

bash
<!-- Просмотр текущего каталога -->
pwd

<!-- Просмотр, куда разрешается относительный путь -->
realpath .ruler/AGENTS.md

Контрольная точка ✅ ​

После завершения вышеуказанных шагов, пожалуйста, подтвердите:

  • [ ] Успешно использован флаг -o для вывода в пользовательский файл
  • [ ] Инструмент автоматически создал несуществующий файл
  • [ ] Инструмент автоматически создал несуществующий вложенный каталог
  • [ ] Созданный файл содержит правильный заголовок (на основе имени файла)
  • [ ] Созданный файл содержит XML-тег <skills_system>
  • [ ] Созданный файл содержит полный список навыков
  • [ ] Можно настроить разные пути вывода для разных инструментов
  • [ ] Можно использовать комбинацию -y и -o в среде CI/CD

Если все вышеперечисленные пункты пройдены, поздравляем! Вы освоили метод использования пользовательского пути вывода и можете гибко синхронизировать навыки в любое место.


Предупреждения о подводных камнях ​

Проблема 1: Выходной файл не является markdown ​

Проявление:

Error: Output file must be a markdown file (.md)

Причина:

При использовании флага -o, расширение указанного файла не .md. Инструмент принудительно требует вывод в markdown-файл, чтобы AI-инструмент мог правильно разобрать его.

Решение:

Убедитесь, что выходной файл заканчивается на .md:

bash
<!-- ❌ Ошибка -->
npx openskills sync -o skills.txt

<!-- ✅ Правильно -->
npx openskills sync -o skills.md

Проблема 2: Ошибка прав на создание каталога ​

Проявление:

Error: EACCES: permission denied, mkdir '.ruler'

Причина:

При попытке создания каталога у текущего пользователя нет прав на запись в родительский каталог.

Решение:

  1. Проверьте права на родительский каталог:
bash
ls -ld .
  1. Если прав недостаточно, обратитесь к администратору или используйте каталог с правами:
bash
<!-- Использование каталога проекта -->
cd ~/projects/my-project
npx openskills sync -o .ruler/AGENTS.md

Проблема 3: Слишком длинный путь вывода ​

Проявление:

Путь к файлу очень длинный, что затрудняет чтение и обслуживание команды:

bash
npx openskills sync -o docs/ai/skills/v2/internal/agents.md

Причина:

Слишком глубокая вложенность каталогов, что затрудняет управление путем.

Решение:

  1. Используйте относительные пути (начиная с корня проекта)
  2. Упростите структуру каталогов
  3. Рассмотрите использование символических ссылок (см. Поддержка символических ссылок)
bash
<!-- Рекомендуемая практика: упрощение структуры каталогов -->
npx openskills sync -o docs/agents.md

Проблема 4: Забыли использовать флаг -o ​

Проявление:

Ожидался вывод в пользовательский файл, но инструмент все равно выводит в стандартный AGENTS.md.

Причина:

Забыли использовать флаг -o или допустили ошибку в написании.

Решение:

  1. Проверьте, содержит ли команда -o или --output:
bash
<!-- ❌ Ошибка: забыли флаг -o -->
npx openskills sync

<!-- ✅ Правильно: использование флага -o -->
npx openskills sync -o .ruler/AGENTS.md
  1. Используйте полную форму --output (более понятно):
bash
npx openskills sync --output .ruler/AGENTS.md

Проблема 5: Имя файла содержит специальные символы ​

Проявление:

Имя файла содержит пробелы или специальные символы, что приводит к ошибке разбора пути:

bash
npx openskills sync -o "my skills.md"

Причина:

Некоторые оболочки по-разному обрабатывают специальные символы, что может привести к ошибкам пути.

Решение:

  1. Избегайте использования пробелов и специальных символов
  2. При необходимости использования, заключайте в кавычки:
bash
<!-- Не рекомендуется -->
npx openskills sync -o "my skills.md"

<!-- Рекомендуется -->
npx openskills sync -o my-skills.md

Резюме урока ​

В этом уроке вы научились:

  • Использовать флаг -o или --output для синхронизации навыков в пользовательский файл .md
  • Механизму автоматического создания файлов и каталогов, не требующему ручной подготовки структуры каталогов
  • Настройке разных AGENTS.md для разных инструментов, избегая конфликтов нескольких инструментов
  • Техникам управления несколькими файлами, классификации и хранения списков навыков по инструментам или функциям
  • Использованию в среде CI/CD комбинации -y и -o для автоматической синхронизации

Основные команды:

КомандаНазначение
npx openskills sync -o custom.mdСинхронизация в custom.md в корне проекта
npx openskills sync -o .ruler/AGENTS.mdСинхронизация в .ruler/AGENTS.md (автоматическое создание каталога)
npx openskills sync -o path/to/file.mdСинхронизация в любой путь (автоматическое создание вложенных каталогов)
npx openskills sync -o custom.md -yНеинтерактивная синхронизация в пользовательский файл

Ключевые моменты:

  • Выходной файл должен заканчиваться на .md
  • Инструмент автоматически создает несуществующие файлы и каталоги
  • При создании файла автоматически добавляется заголовок на основе имени файла
  • Каждый файл .md независим и содержит свой собственный список навыков
  • Применимо к многоинструментальным средам, требованиям структуры каталогов, интеграции с существующей документацией и другим сценариям

Анонс следующего урока ​

В следующем уроке мы изучим Поддержку символических ссылок.

Вы узнаете:

  • Как использовать символические ссылки для обновления навыков на основе git
  • Преимущества и сценарии использования символических ссылок
  • Как управлять навыками в локальной разработке
  • Механизмы обнаружения и обработки символических ссылок

Пользовательский путь вывода позволяет вам гибко контролировать расположение списка навыков, а символические ссылки предоставляют более продвинутый способ управления навыками, особенно подходящий для сценариев локальной разработки.


Приложение: Справка по исходному коду ​

Нажмите, чтобы развернуть и посмотреть расположение исходного кода

Время обновления: 2026-01-24

ФункцияПуть к файлуНомер строки
Вход точки команды syncsrc/commands/sync.ts18-109
Определение опций CLIsrc/cli.ts66
Получение пути выводаsrc/commands/sync.ts19
Проверка выходного файлаsrc/commands/sync.ts22-26
Создание несуществующего файлаsrc/commands/sync.ts28-36
Рекурсивное создание каталогаsrc/commands/sync.ts31-32
Автоматическая генерация заголовкаsrc/commands/sync.ts34
Интерактивная подсказка использует имя выходного файлаsrc/commands/sync.ts70

Ключевые функции:

  • syncAgentsMd(options: SyncOptions) - синхронизация навыков в указанный выходной файл
  • options.output - пользовательский путь вывода (опционально, по умолчанию 'AGENTS.md')

Ключевые константы:

  • 'AGENTS.md' - имя файла вывода по умолчанию
  • '.md' - принудительно требуемое расширение файла

Важная логика:

  • Выходной файл должен заканчиваться на .md, иначе ошибка и выход (sync.ts:23-26)
  • Если файл не существует, автоматически создаются родительские каталоги (рекурсивно) и файл (sync.ts:28-36)
  • При создании файла записывается заголовок на основе имени файла: # ${outputName.replace('.md', '')} (sync.ts:34)
  • В интерактивной подсказке отображается имя выходного файла (sync.ts:70)
  • В сообщении об успешной синхронизации отображается имя выходного файла (sync.ts:105, 107)