Как я писал в обзорной статье Gemini CLI:
GEMINI.MD — это не обязательный файл с инструкциями, о которых Gemini должен знать во время взаимодействия.
Файл хоть и не обязательный, но очень важный. Так как через него можно "познакомиться" и описать правила "игры" для Gemini.
Типы файлов GEMINI.MD
Если отправить промпт к gemini cli в режиме дебага, видно, что GEMINI попытается найти файл GEMINI.MD в нескольких местах:
1. В папке проекта из которой запущен gemini.
2. Поднимается вверх по дереву каталогов от папки проекта до корня диска.
3. Глобальный файл в рабочей папке .gemini.
Я создал файл GEMINI.MD в каждом из этих мест. Теперь запускаем gemini и отправляем команду /memory show (показ контекста).
Информация из каждого найденного файла объединяется в единый контекст.
Сам Gemini так отвечает на вопрос "Где он ищет файлы gemini.md"
Я ищу файлы gemini.md в определённом порядке, чтобы собрать наиболее полный контекст для нашей работы. Вот где я их ищу, в порядке приоритета:
1. В текущей директории проекта: Это наиболее важный файл, так как он содержит контекст, специфичный для проекта, над которым вы сейчас работаете. (В вашем случае, это D:\Dev\gemini_projects\gemini.md).
2. В родительской директории: Я проверяю на один уровень выше текущей директории. (Например, D:\Dev\gemini.md).
3. В специальной папке `.gemini` в вашей домашней директории: Это место для глобальных настроек и контекста, которые должны применяться ко всем вашим проектам. (Обычно это C:\Users\ <ваше_имя_пользователя>\.gemini\gemini.md).
Самый важный файл GEMINI.MD - тот, который хранится в папке проекта. Каждый последующий файл по уровням каталогов имеет приоритет все ниже. И самый низкий приоритет у файла из папки .gemini. То есть, если инструкции в файле в папе проекта и в файле .gemini будут противоречить друг другу, Gemini будет использовать инструкции из папки проекта.
Что писать в файле GEMINI.MD
Рекомендации по содержанию файла GEMINI.MD в папке проекта:
- Команды для сборки, запуска и тестирования (`npm test`, `go build`, `pytest`). Это позволит Gemini проверять его работу и гарантировать, что ничего не сломалось.
- Ключевые технологии, фреймворки и библиотеки (например, "Проект на React 18, TypeScript, Zustand"). Чтобы Gemini знал, с каким стеком технологий работать, и чтобы его изменения были корректными.
- Правила стиля кода и линтеры (например, "Стиль кода по гайдам Google, линтер ESLint"). Чтобы поддерживать единообразие кода. Можно также включать небольшие примеры кода.
- Структура проекта (например, "Вся бизнес-логика в `/src/domain`, компоненты UI в `/src/components`"). Помогает Gemini быстрее ориентироваться в проекте и размещать новый код в правильных местах.
- Запреты (например, "Никогда не изменять файлы в папке `/legacy`"). Чтобы Gemini не менял чувствительные или устаревшие части системы.
- Информация о базе данных или API (например, "Схема БД описана в `schema.sql`"). Полезно для понимания того, как проект взаимодействует с данными.
Рекомендации по содержанию файла GEMINI.MD в родительских папках:
- Общие стандарты кодирования для проектов. Если есть единый стандарт для всех репозиториев.
- Общие используемые библиотеки (например, "Всегда используем `axios` для HTTP-запросов"). Помогает поддерживать технологическую унификацию между несколькими проектами.
- Общие архитектурные паттерны (например, "Предпочитаем DDD-подход"). Задает общее направление для разработки в рамках одной экосистемы проектов.
Рекомендации по содержанию глобального файла GEMINI.MD в папке .gemini:
- Предпочтительный язык программирования. Чтобы Gemini учитывал это.
- Общие предпочтения по стилю (например, "Предпочитаю функциональный стиль программирования"). Gemini будет генерировать более привычный и понятный код.
- Настройка личности Gemini (например, "Отвечай кратко и по делу", "Объясняй сложные вещи простыми словами"). Позволяет получать ответы в том стиле, который привычен и убирать лишнее.
- Опыт пользователя (например, "Я начинающий разработчик", "Я опытный архитектор"). Помогает Gemini адаптировать сложность и детализацию объяснений под пользователя.
Общие рекомендации по составлению файла GEMINI.MD
- Инструкции должны быть четкими и понятными, но на "естественном языке". Например, вместо сухого test_command=pytest, лучше написать: "Для запуска тестов в этом проекте используется pytest. Запускай его без аргументов."
- Использовать форматирование Markdown для структурирования информации. Чтобы конечный результат был понятен как пользователю, так и Gemini.
- Не хранить в GEMINI.MD чувствительной информации (секреты и ключи, пароли, токены или другие личные данные)
- Файлы всегда должны быть актуальными.