Перейти к содержимому
FRGEPLAN

Конфигурация

Файл .forgeplan/config.yaml является единственной точкой конфигурации для рабочего пространства Forgeplan. Эта страница представляет собой авторитетный справочник по каждому ключу верхнего уровня, каждой вложенной секции и каждой переменной окружения, распознаваемой CLI и сервером MCP.

Все секции являются необязательными, за исключением метаданных верхнего уровня (version, project_name, default_depth, id_digits, created_at). Отсутствующие секции используют безопасные значения по умолчанию, встроенные в forgeplan-core.

После forgeplan init -y каталог .forgeplan/ создается рядом с вашим кодом:

.forgeplan/
├── config.yaml ← конфигурация рабочего пространства (GITIGNORED - содержит ссылки на переменные окружения)
├── adrs/ ← отслеживаемые Git markdown-артефакты (источник истины)
├── rfcs/
├── prds/
├── epics/
├── specs/
├── problems/
├── solutions/
├── evidence/
├── notes/
├── refresh/
├── memory/ ← журнал решений (отслеживаемый Git)
├── lance/ ← GITIGNORED - производный индекс LanceDB (восстанавливаемый)
└── .fastembed_cache/ ← GITIGNORED - кэш модели эмбеддингов

Согласно ADR-003, файлы markdown являются источником истины; lance/ - это производный индекс, который вы можете перестроить в любое время с помощью forgeplan scan-import. Никогда не коммитьте lance/, .fastembed_cache/ или config.yaml - они перечислены в .gitignore по умолчанию.

version: 1
project_name: ForgePlan
default_depth: standard
id_digits: 3
created_at: 2026-03-24
ПолеТипПо умолчаниюОписание
versionu321Версия схемы конфигурации. Обновляется только при критических изменениях схемы.
project_namestring""Человекочитаемое имя проекта. Отображается в forgeplan health, отчетах и экспорте.
default_depthenumstandardГлубина по умолчанию, используемая forgeplan route, когда эвристика неубедительна. Одно из значений: tactical, standard, deep, critical.
id_digitsu323Ширина заполнения нулями для ID артефактов (например, PRD-001 против PRD-0001). Изменяйте только при создании рабочего пространства - существующие ID не перенумеровываются.
created_atdateсегодняДата ГГГГ-ММ-ДД инициализации рабочего пространства. Метаданные только для чтения.
ЗначениеКогда использовать
tacticalБыстрое исправление, обратимое за день. Артефакт не требуется.
standardФункция на 1–3 дня, один явный компромисс. Конвейер PRD -> RFC. Рекомендуется ADI.
deepНовый модуль, 1–2 недели. PRD -> Spec -> RFC -> ADR. ADI обязателен.
criticalМежкомандная подсистема, стратегическая. Epic -> N артефактов. ADI + состязательная ревью.

См. руководство по калибровке глубины для эвристики роутинга.

Используется forgeplan generate, forgeplan reason (ADI), forgeplan route (уровень 1+) и инструментами MCP, которые вызывают LLM.

llm:
provider: gemini
model: gemini-3-flash-preview
api_key_env: GEMINI_API_KEY
# base_url: https://... # переопределение для пользовательских конечных точек
# max_tokens: 4096
# temperature: 0.7
# reason_temperature: 0.3 # более низкая температура для структурированного вывода ADI
ПолеТипПо умолчаниюОписание
providerenumopenaiОдно из значений: openai, claude, gemini, ollama или custom. Определяет URL-адрес по умолчанию и стиль заголовков.
modelstringgpt-4o-miniИдентификатор модели, передаваемый провайдеру без изменений. См. рекомендуемые модели ниже.
api_key_envstring?зависит от провайдераИмя переменной окружения, содержащей ключ API. Если опущено, используется значение по умолчанию для конкретного провайдера.
base_urlstring?зависит от провайдераПереопределяет базовый URL для самостоятельно размещенных или прокси-конечных точек. Полезно для Ollama, LiteLLM или шлюзов, совместимых с Azure.
max_tokensu324096Максимальное количество токенов ответа. Увеличьте для длинных рассуждений ADI; уменьшите для экономии средств.
temperaturef320.7Температура сэмплирования для generate. 0.0 = детерминированный, 1.0 = творческий.
reason_temperaturef32?-Переопределение, используемое только forgeplan reason. Структурированный вывод ADI выигрывает от более низкого значения (обычно 0.20.3). Если не установлено, возвращается к temperature.
ПровайдерПеременная окружения ключа API по умолчаниюБазовый URL по умолчаниюПримечания
openaiOPENAI_API_KEYhttps://api.openai.com/v1Совместим с OpenAI.
claudeANTHROPIC_API_KEYhttps://api.anthropic.com/v1Автоматически использует заголовки, специфичные для Anthropic.
geminiGEMINI_API_KEYhttps://generativelanguage.googleapis.com/v1beta/openaiИспользует совместимую с OpenAI заглушку Google.
ollama- (нет)http://localhost:11434/v1Полностью локальный. Ключ API не требуется.
custom--Вы должны явно установить base_url и api_key_env.
ПровайдерМодельКогда использовать
Geminigemini-3-flash-previewПо умолчанию - быстрая, дешевая, сильный вывод ADI (в настоящее время используется самим репозиторием Forgeplan).
Geminigemini-3-proГлубокие рассуждения, критические решения, длинный контекст.
OpenAIgpt-5-miniСбалансированная цена/качество для generate + route.
OpenAIgpt-5Критический ADI, состязательная ревью.
Anthropicclaude-haiku-4-5-20251001Дешевый роутинг и классификация.
Anthropicclaude-sonnet-4-6По умолчанию для generate + reason.
Anthropicclaude-opus-4-6Критические решения, длинные рассуждения.

Переопределения переменных окружения (LLM)

Заголовок раздела «Переопределения переменных окружения (LLM)»

Следующие переменные окружения переопределяют поля llm: во время выполнения без редактирования config.yaml:

Переменная окруженияПереопределяет
FORGEPLAN_LLM_PROVIDERprovider
FORGEPLAN_LLM_MODELmodel
FORGEPLAN_LLM_BASE_URLbase_url
FORGEPLAN_LLM_MAX_TOKENSmax_tokens
FORGEPLAN_LLM_API_KEY_ENVapi_key_env (имя, а не значение)

Приоритет: переменная окружения > config.yaml > значение по умолчанию.

Конфигурирует модель эмбеддингов, используемую для семантического поиска и векторного индекса FPF KB. Требует флага функции semantic-search во время сборки (включен в официальные релизные бинарники).

embedding:
model: bge-m3
chunk_size: 2000
ПолеТипПо умолчаниюОписание
modelenumbge-m3Имя модели эмбеддингов. См. таблицу ниже.
chunk_sizeusize2000Максимальное количество символов тела артефакта, включенных в текст эмбеддинга. Большие значения дают более богатые эмбеддинги за счет размера кэша и времени загрузки.
МодельРазмерностьЯзыкиКогда выбирать
bge-m31024Многоязычная (100+)По умолчанию - лучшее качество, поддерживает смешанные рабочие пространства на русском + английском.
bge-small-en384Только английскийСамая быстрая, самый маленький кэш. Выбирайте для англоязычных проектов на машинах с малым объемом ОЗУ.
multilingual-e5-small384МногоязычнаяПромежуточный вариант - быстрее, чем bge-m3, все еще многоязычная.
multilingual-e5-base768МногоязычнаяБолее высокое качество, чем e5-small, при примерно 2-кратной стоимости.

Переопределения переменных окружения (эмбеддинг)

Заголовок раздела «Переопределения переменных окружения (эмбеддинг)»
Переменная окруженияПереопределяет
FORGEPLAN_EMBEDDING_MODELmodel

Если функция semantic-search отключена во время сборки, Forgeplan все равно работает - он молча переключается на поиск по ключевым словам BM25. См. руководство по поиску для получения подробной информации о гибридном стеке поиска.

storage:
driver: lancedb
# path: /custom/path # переопределение местоположения БД
ПолеТипПо умолчаниюОписание
driverenumlancedbБэкенд хранилища. См. таблицу ниже.
pathstring?.forgeplan/lance/Переопределяет каталог LanceDB. Полезно для хранения производного индекса вне дерева проекта (например, ~/.cache/forgeplan/myproj).
ДрайверВариант использования
lancedbПо умолчанию - встроенная колоночная БД с нативным векторным поиском. Сохраняется в lance/. Рекомендуется для всех реальных проектов.
sqliteУстаревший / легковесный запасной вариант. Без векторного поиска.
memoryТолько в памяти, теряется при завершении процесса. Используется для тестов и эфемерных запусков CI.

Переопределения переменных окружения (хранилище)

Заголовок раздела «Переопределения переменных окружения (хранилище)»
Переменная окруженияПереопределяет
FORGEPLAN_STORAGE_DRIVERdriver
FORGEPLAN_STORAGE_PATHpath
memory:
driver: file
ПолеТипПо умолчаниюОписание
driverenumfileДрайвер банка памяти. file сохраняется в .forgeplan/memory/. none полностью отключает журнал решений.

Переопределения переменных окружения (память)

Заголовок раздела «Переопределения переменных окружения (память)»
Переменная окруженияПереопределяет
FORGEPLAN_MEMORY_DRIVERdriver

Конфигурирует forgeplan estimate - многоуровневую модель оценки, которая сочетает ваш экспертный опыт с мультипликаторами типов задач ИИ. Каждое поле необязательно; опустите всю секцию, чтобы использовать значения по умолчанию.

estimate:
grade_profile:
backend: middle # ваш уровень в бэкенд-разработке
frontend: junior # ваш уровень во фронтенде
devops: senior # ваш уровень в devops/инфраструктуре
ai_ml: principal # ваш уровень в AI/ML
default: senior # запасной вариант для неуказанных областей
grade_multipliers:
junior: 2.0 # относительно senior (базовый 1.0)
middle: 1.5
senior: 1.0
principal: 0.7
ai: 0.4 # консервативный базовый мультипликатор ИИ
ai_task_multipliers:
pure_coding: 0.10 # ИИ кодирует примерно в 10 раз быстрее
coding_infra: 0.25 # смешанное кодирование + инфраструктура
design_coding: 0.30 # проектирование + реализация
pure_infra: 0.50 # только инфраструктура
coordination: 1.00 # встречи, ревью - ИИ не может помочь
review_overhead: 0.30 # 30% добавляется к времени ИИ для человеческого ревью
safety_margin: 0.50 # предупреждать, если спринт загружен > 50%
ПолеТипПо умолчаниюОписание
grade_profilemap<string, grade>-Уровень разработчика по областям. Ключи - это произвольные имена областей; как минимум определите default.
grade_multipliersmap<string, f64>см. нижеМультипликатор времени для каждого уровня, относительно базового уровня senior 1.0.
ai_task_multipliersmap<string, f64>см. нижеДоля человеческого времени, которую ИИ занимает для каждого типа задачи.
review_overheadf640.30Доля, добавляемая к времени, затраченному ИИ, для покрытия человеческого ревью. 0.30 = 30%.
safety_marginf640.50Порог загрузки спринта. Forgeplan предупреждает, если загрузка спринта превышает это значение. 0.50 = 50%.
УровеньМультипликатор по умолчаниюЗначение
junior2.0Изучает область - занимает в 2 раза больше времени, чем senior.
middle1.5Может работать самостоятельно - в 1.5 раза больше, чем senior.
senior1.0Базовый уровень.
principal0.7Глубокий эксперт в области - на 30% быстрее, чем senior.
ai0.4ИИ как виртуальный соавтор - консервативная база. Уточняется ai_task_multipliers.
Тип задачиПо умолчаниюТипичная работа
pure_coding0.10Написание чистого кода - функций, тестов, рефакторинга. ИИ здесь превосходит.
coding_infra0.25Кодирование, смешанное с инструментами (CI, скрипты, конфигурации).
design_coding0.30Проектные решения + реализация.
pure_infra0.50Только инфраструктурная работа - ИИ помогает, но человек валидирует каждый шаг.
coordination1.00Встречи, ревью, согласование со стейкхолдерами. ИИ не может помочь.

Старший бэкенд-инженер оценивает задачу в 8 часов. ИИ обрабатывает задачу как pure_coding:

raw_time = 8h × grade_multipliers.senior = 8h × 1.0 = 8h
ai_time = 8h × ai_task_multipliers.pure_coding = 8h × 0.10 = 0.8h
with_review = 0.8h × (1 + review_overhead) = 0.8h × 1.30 = 1.04h

Итоговая оценка: ~1 час времени ИИ, управляемого человеком.

См. forgeplan estimate для справки по CLI.

Настраивает движок FPF: пороги исследования/эксплуатации, веса надёжности, штрафы за уровень конгруэнтности и ограничения рассуждений ADI. Каждое подполе имеет безопасные значения по умолчанию - настраивайте только при наличии эмпирических причин.

fpf:
weights:
reff: 0.5
links: 0.3
freshness: 0.2
thresholds:
explore_reff: 0.01
investigate_reff: 0.5
exploit_reff: 0.7
exploit_fgr: 0.6
explore_fgr: 0.4
cl_penalties:
cl0: 0.9
cl1: 0.4
cl2: 0.1
cl3: 0.0
decay:
expired_score: 0.1
adi:
max_hypotheses: 5
kb_sections_limit: 5
temperature_cap: 0.3
auto_save: true

Компоненты оценки надёжности внутри F-G-R. Значения не обязательно должны суммироваться до 1.0, но обычно это так.

ПолеПо умолчаниюЗначение
reff0.5Вес оценки R_eff (качество доказательства).
links0.3Максимальный бонус, присуждаемый за входящие/исходящие типизированные связи.
freshness0.2Бонус, если артефакт не просрочен (valid_until в будущем).

fpf.thresholds - Отсечки исследования/эксплуатации

Заголовок раздела «fpf.thresholds - Отсечки исследования/эксплуатации»

Пороги решений, используемые жестко закодированными правилами и forgeplan route.

ПолеПо умолчаниюВызываемое действие
explore_reff0.01R_eff ниже этого -> ИССЛЕДОВАТЬ (рассматривать как черновик).
investigate_reff0.5R_eff ниже этого -> ИЗУЧИТЬ (требуется больше доказательств).
exploit_reff0.7R_eff на этом уровне или выше -> подходит для ЭКСПЛУАТАЦИИ (можно полагаться).
exploit_fgr0.6Общий F-G-R, необходимый для подтверждения ЭКСПЛУАТАЦИИ (в сочетании с exploit_reff).
explore_fgr0.4F-G-R ниже этого -> ИССЛЕДОВАТЬ приоритет 1 (в сочетании с explore_reff).

fpf.cl_penalties - Штрафы за уровень конгруэнтности

Заголовок раздела «fpf.cl_penalties - Штрафы за уровень конгруэнтности»

Штраф, применяемый к доказательствам в зависимости от того, насколько хорошо их контекст соответствует артефакту, который они информируют. CL3 (тот же контекст) без штрафа; CL0 (противоположный контекст) сильно дисконтируется.

ПолеПо умолчаниюЗначение
cl00.9Противоположный контекст - почти нулевое доверие.
cl10.4Другой контекст - значительная скидка.
cl20.1Похожий контекст - незначительная скидка.
cl30.0Тот же контекст - без штрафа.

См. руководство по доказательствам о том, как congruence_level устанавливается в теле EvidencePack.

ПолеПо умолчаниюЗначение
expired_score0.1Оценка, присваиваемая доказательству после valid_until. 0.1 отражает “просрочено, но не отсутствует” - доказательство существовало, просто нуждается в повторной проверке.

Управляет поведением forgeplan reason.

ПолеТипПо умолчаниюЗначение
max_hypothesesu325Максимальное количество конкурирующих гипотез, которые LLM должна сгенерировать на этапе абдукции.
kb_sections_limitusize5Максимальное количество секций FPF KB, внедряемых в промпт ADI. Большее значение = более богатый контекст, больше токенов.
temperature_capf320.3Верхняя граница температуры, используемой для рассуждений ADI, независимо от llm.temperature. Сохраняет структурированный вывод ADI.
auto_savebooltrueАвтоматически сохранять результаты ADI как AdiRecord, связанный с артефактом.

fpf.rules - Декларативные правила исследования-эксплуатации (продвинутый уровень)

Заголовок раздела «fpf.rules - Декларативные правила исследования-эксплуатации (продвинутый уровень)»

Необязательный список пользовательских правил исследования/эксплуатации (FPF Engine Phase 2). Если список пуст, используются встроенные default_rules(). Схема и примеры находятся в руководстве по правилам FPF.

Пороги, используемые forgeplan health (обнаружение дубликатов, обнаружение заглушек) и ограничения защиты от DoS, применяемые сервером MCP к входящим вызовам forgeplan_new / forgeplan_update.

integrity:
duplicate_threshold: 0.7
duplicate_pairs_limit: 10
stub_marker_threshold: 3
mcp_max_title_len: 256
mcp_max_body_len: 1048576 # 1 MiB
ПолеТипПо умолчаниюДиапазонОписание
duplicate_thresholdf640.7[0.0, 1.0]Сходство Жаккара, выше которого два артефакта помечаются как дубликаты в forgeplan health.
duplicate_pairs_limitusize10[1, 10000]Максимальное количество пар дубликатов, отображаемых в выводе health (пагинация).
stub_marker_thresholdusize3>= 1Минимальное количество маркеров заглушек (TODO, TBD, пустые заголовки и т. д.), необходимое для пометки тела артефакта как заглушки.
mcp_max_title_lenusize256[16, 4096]Максимальная длина заголовка артефакта, принимаемая через MCP. Предотвращает злоупотребление памятью со стороны вредоносных клиентов.
mcp_max_body_lenusize1048576[1024, 104857600]Максимальная длина тела артефакта (байты), принимаемая через MCP. По умолчанию: 1 МиБ. Жесткий лимит: 100 МиБ.
ПеременнаяСекцияЭффект
OPENAI_API_KEYllmКлюч API OpenAI (по умолчанию для provider: openai).
ANTHROPIC_API_KEYllmКлюч API Anthropic (по умолчанию для provider: claude).
GEMINI_API_KEYllmКлюч API Gemini (по умолчанию для provider: gemini).
FORGEPLAN_LLM_PROVIDERllmПереопределяет llm.provider.
FORGEPLAN_LLM_MODELllmПереопределяет llm.model.
FORGEPLAN_LLM_BASE_URLllmПереопределяет llm.base_url.
FORGEPLAN_LLM_MAX_TOKENSllmПереопределяет llm.max_tokens.
FORGEPLAN_LLM_API_KEY_ENVllmПереопределяет llm.api_key_env (имя переменной).
FORGEPLAN_EMBEDDING_MODELembeddingПереопределяет embedding.model.
FORGEPLAN_STORAGE_DRIVERstorageПереопределяет storage.driver.
FORGEPLAN_STORAGE_PATHstorageПереопределяет storage.path.
FORGEPLAN_MEMORY_DRIVERmemoryПереопределяет memory.driver.

Ключи API никогда не хранятся в config.yaml - хранится только имя переменной окружения в поле api_key_env. Это делает файл конфигурации безопасным для распространения между машинами (при условии, что .forgeplan/config.yaml находится в .gitignore).

Окно терминала
# 1. Экспортировать все артефакты в переносимый JSON-бандл
forgeplan export --output backup.json
# 2. Сохранить резервную копию всей директории рабочего пространства
cp -r .forgeplan .forgeplan-backup-$(date +%Y%m%d)
# 3. Только теперь безопасно переинициализировать
rm -rf .forgeplan
forgeplan init -y
# 4. Восстановить артефакты
forgeplan import backup.json

Рабочий процесс после свежего клонирования

Заголовок раздела «Рабочий процесс после свежего клонирования»
Окно терминала
git clone <repo> && cd <repo>
forgeplan init -y # создаёт .forgeplan/config.yaml + пустой lance/
$EDITOR .forgeplan/config.yaml # задать llm.provider, model, api_key_env
export GEMINI_API_KEY=... # или какой провайдер вы выбрали
forgeplan scan-import # пересобирает lance/ из отслеживаемых markdown
forgeplan list # проверить, что артефакты на месте

ИИ-агенты (Claude Code, Codex и другие), работающие с Forgeplan, должны всегда использовать:

Окно терминала
forgeplan init -y # НИКОГДА без -y - интерактивный режим зависнет в харнесе агента

Интерактивный режим зависнет в харнесе агента. Флаг -y принимает все значения по умолчанию и записывает минимальный config.yaml, который агент может затем отредактировать.

error: LLM API key not set - expected env var GEMINI_API_KEY

Причина: llm.api_key_env указывает на незаданную переменную, или переменная окружения по умолчанию для провайдера не задана.

Исправление:

Окно терминала
export GEMINI_API_KEY=your-key # для текущей оболочки
# или
export FORGEPLAN_LLM_API_KEY_ENV=MY_CUSTOM_KEY
export MY_CUSTOM_KEY=your-key

Используйте forgeplan health, чтобы убедиться, что подсистема LLM сообщает “ready”.

Причина: ограничения скорости провайдера (бесплатный уровень Gemini особенно строг).

Исправление:

  1. Уменьшите llm.max_tokens для снижения стоимости каждого запроса.
  2. Переключитесь на более дешёвую модель (gemini-3-flash-preview, gpt-5-mini, claude-haiku-4-5-20251001).
  3. Повторите с экспоненциальной задержкой - Forgeplan передаёт ошибку провайдера дословно, чтобы вы могли отличить 429 от 5xx.

Эмбеддинги не загружаются / семантический поиск возвращает пустой результат

Заголовок раздела «Эмбеддинги не загружаются / семантический поиск возвращает пустой результат»

Причина: одна из:

  • Бинарный файл Forgeplan собран без функции semantic-search (проверьте forgeplan --version).
  • embedding.model был изменён, а lance/ не был переиндексирован.
  • .fastembed_cache/ повреждён.

Исправление:

Окно терминала
rm -rf .forgeplan/.fastembed_cache
forgeplan scan-import # повторно загружает модель + переиндексирует

Если семантический поиск недоступен, Forgeplan автоматически переключается на поиск по ключевым словам BM25 - данные не теряются. См. руководство по поиску для подробностей о гибридном стеке.

Причина: некорректный YAML - числовое поле содержит NaN, Infinity или строку, которая не распарсилась как число.

Исправление: откройте .forgeplan/config.yaml и убедитесь, что каждое числовое поле в секциях fpf:, estimate: и integrity: является обычным десятичным числом. Запустите forgeplan health для повторной проверки.

Причина: ограничение размера тела MCP задано за пределами допустимого диапазона (от 1 КиБ до 100 МиБ).

Исправление: выберите значение внутри диапазона. Для большинства проектов значение по умолчанию (1 МиБ) является правильным.

Некоторые обновления добавляют новые столбцы в lance/. Симптомом является ошибка LanceDB при запуске.

Исправление:

Окно терминала
forgeplan export --output backup.json
rm -rf .forgeplan/lance
forgeplan init -y # пересоздаёт lance/
forgeplan scan-import # переиндексация из markdown
# markdown является источником истины - артефакты не теряются