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

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

```ts
const program = createProgram()

// Регистрация инструмента для поиска, доступен всем частям program
const tool = program.setTool('fw_deep_research', {
	// тут какая-то реализация
});

// 0. Ключевые Принципы (Core Principles)
// те мы можем легко их расширять
program.addCorePrinciples(...)

// PHASE 1: DISCOVERY (Intent Reactor)
const discoverLoop = program.createLoop({
	steps: [
		// UserIntent: Запрашиваем намерение (задачу) от пользователя.
		// - Выполняется в основной сессии program
		// - По возможности использует инструменты среды в которой запущен (например в некоторых есть tool чтобы задать вопрос пользователя, всё это определяется сессией)
		createLoopStep('UserIntent', {
			once: true, // Одноразовый шаг
			mode: 'question', // Режим вопроса пользователю
			prompt: 'Привет, какую задачу будем решать?', // Вопрос пользователю
		}),

		// Deconstruction: Анализ запроса, выявление пробелов.
		// - Выполняет в том основном потоке
		// - Строго следует инструкция промпта
		createLoopStep('Deconstruction', {
			prompt: loadSubPrompt('path/to/agents/name.xml'),
		}),

		// Research: Поиск информации (Best Practices, Edge Cases, "Crazy Ideas").
		// - 100% используется вызов инструмента
		createLoopToolStep('Research', {
			// Тут как-то надо описывать какие инструменты вызывать, притом это может быть последовательность инструментов, возможно для каждого инструмента должен быть ещё pre/post промпты, чтобы можно было объяснить, как именно вызывать и в каком формате отдавать результаты (преобразовывать), особенно как это должно работать в последовательности вызова шагов
		}),

		// Hypothesis: Генерация вариантов реализации (5+ вариантов).
		// - Выполняет в том основном потоке
		createLoopStep('Hypothesis', {
			prompt: loadSubPrompt('path/to/file'),
		}),

		// Critique: Проверка фактов и истории отказов.
		// - Критик запускается в отдельном процессе
		// - Какие-то образом получает структурированный xml-like-артефакт для анализа
		// - Возвращает структурированный ответ
		createLoopStep('Critique', {
			agent: loadAgentPrompt('path/to/agents/agent-critique.xml'),
			model: aiModel('gemini-pro'),
		}),

		// Sync: Презентация пользователю. Вопрос: "Я правильно понял? Какой вариант берем?"
		// - Выполняет в том основном потоке
		createLoopStep('Sync', {
			prompt: loadSubPrompt('path/to/file'),
		}),
	]
});


// Запускаем discover-сессию
const discoverSession = await discoverLoop.start({
	systemPrompt: loadSubPrompt('path/to/file'),
	mainModel: aiModel('gemini-flash'),
});

discoverSession.results; // результат выполнения сессии
```

Это всё псевдокод, но логика в следующем, мы динамически создаём prompt, у нас должен быть скелет, возможно скелет динамический в зависимости от программы, у нас есть возможность создавать в нём подпрограммы, например Loop, где описывать динамические задачи.

При выполнении например `discoverLoop.start()` мы получаем полностью самодостаточный структурированный, который запускается в нужной среде и начинает выполнение с поддержкой всех инструментов. Либо можно вызвать `discoverLoop.compose()` чтобы получить prompt который будет выполнен например в Cursor IDE (инструменты и как запусть агенты будут адаптированы под Cursor IDE).

Ты понимаешь логику? Как я уже сказал, что это очень примерный план, дай критику, найди слабые места, объясни, где оно будет не работать и почему.
