Личности
Личность (Personality) - это выбранный образ и системная роль Велеса. Она отвечает на вопрос: “Кто сейчас говорит и как он должен мыслить?” Личности нужны, когда в одном рабочем пространстве хочется иметь несколько устойчивых стилей работы: например, аккуратного ревьюера, исследователя, архитектора или краткого оператора.Если вы просто пользуетесь Велесом: достаточно знать, что личность — это «специалист», которого вы выбираете при создании нового диалога (кнопка Новый), а создаёте и редактируете в разделе Личности. Остальное на этой странице — для тех, кто настраивает Велес и хочет понять, как это устроено внутри.
Где хранятся личности
Личности хранятся прямо в рабочей области: prompt остаётся в Markdown, а небольшие служебные данные - в JSON. Основная личностьmain использует файлы в корне workspace:
personalities/<id>/:
SOUL.md содержит сам prompt личности: тон, характер, стиль мышления, рабочие привычки и ограничения.
personality.json хранит служебные метаданные личности: имя, модель по умолчанию, уровень thinking/reasoning и даты. Он не попадает в system prompt.
SOUL.md и AGENTS.md
SOUL.md и AGENTS.md решают разные задачи.
SOUL.md - это идентичность активной личности. Он попадает в system prompt как слой “кто я”.
AGENTS.md - это общие инструкции проекта и workspace. Он остается общим для всех личностей и попадает в system prompt как проектный контекст.
Например:
SOUL.md: “Ты строгий ревьюер, сначала ищешь риски и регрессии.”AGENTS.md: “В этом репозитории не запускай тесты сам, попроси пользователя.”
Навыки личности
У дополнительной личности может быть свой каталог навыков:workspace/skills, затем встроенные veles/skills.
Готовые личности
Калиброванный рецензент идей
Вexamples/personalities/calibrated-idea-reviewer/ находится пример личности для доказательной проверки идей. Рецензент сначала точно восстанавливает замысел и его ключевые допущения, затем независимо строит сильнейшее обоснование и ищет конкретные механизмы неудачи.
Результат включает не более пяти главных уязвимостей, лучшую альтернативу, дешёвые решающие проверки и рекомендацию с указанной уверенностью. Установка, форма исходных данных и ограничения описаны на странице Калиброванный рецензент идей.
Медицинский навигатор
В репозитории есть исходный текст личностиexamples/personalities/medical-navigator/. Она устанавливается как обычная пользовательская личность и использует собственный набор навыков в personalities/medical-navigator/skills/.
Шаблон не копируется при каждом запуске. Иначе удалённая пользователем личность появлялась бы снова, а обновление поставляемого файла могло бы затереть пользовательскую редакцию. Инструкция по установке, ограничения медицинской роли и полный набор навыков приведены на странице Медицинский навигатор.
Медицинская личность не получает отдельную рабочую область, историю или режим памяти. На её разговоры распространяются обычные механизмы сохранения сессий и долговременной памяти Велеса, поэтому она не должна обещать изолированную медицинскую карту, анонимность или отсутствие хранения.
Консультант по питанию
Вexamples/personalities/nutrition-adviser/ находится пример личности для практичных и доказательных вопросов о питании. Она различает состав продукта, расчёт блюда, общую рекомендацию и лечебное питание, использует USDA FoodData Central для обычных продуктов и Open Food Facts для упакованных товаров.
Личность не изображает врача или дипломированного диетолога, не назначает лечебный рацион и не оптимизирует опасное ограничение питания. Для заболеваний, лабораторных результатов, лекарств и симптомов она подключает узкие медицинские навыки и сохраняет их ограничения. Установка, источники данных и полный набор навыков описаны на странице Консультант по питанию.
Правовой советник управляющей компании
Вexamples/personalities/npf-asset-management-legal-counsel/ находится пример личности для второго мнения руководителю управляющей компании, которая работает со средствами НПФ. Предметный навык npf-asset-management-legal-review устанавливается в её собственный каталог skills/ и содержит зафиксированный перечень нормативных источников.
Советник определяет юридическое лицо, лицензию, продукт и дату события, проверяет действующую или историческую редакцию по официальному первичному источнику и показывает наиболее сильное возражение к выбранной позиции. Он не выдаёт окончательное юридическое заключение, не создаёт адвокатскую тайну и не совершает подачу, уведомление или другое юридически значимое действие без отдельного прямого поручения. Установка и ограничения описаны на странице Правовой советник управляющей компании.
Советник по финансам управляющей компании
Вexamples/personalities/npf-asset-management-finance-adviser/ находится пример личности для финансового анализа руководителю управляющей компании. Шесть отдельных навыков разбирают стратегию пенсионных активов, согласование активов и обязательств, риск, качество отчётности, эмитентов и рыночные сценарии.
Личность не просит раскрывать портфели, обязательства, лимиты, договоры, внутренние отчёты или сведения о сделках. Если пользователь уже предоставил такие данные, они могут участвовать в анализе; отсутствующие показатели обозначаются как зависимости решения, а не как просьба раскрыть их. Установка и ограничения описаны на странице Советник по финансам управляющей компании.
Что не изолируется
В текущей реализации личности не создают отдельные рабочие области. Общими остаются:- workspace-файлы;
- память;
- сессии и история;
- cron-задачи;
- логи;
- runtime home.
Сессии
Корневая сессия личности имеет ключ:personality:<id>:..., но Markdown-файлы личности еще не созданы, Veles автоматически создаст пустую личность в personalities/<id>/, чтобы запуск не падал.
Управление в Nerve
В Nerve личности создаются и редактируются в разделе Личности. При создании можно указать:- имя;
- soul/personality prompt;
- модель по умолчанию;
- уровень thinking/reasoning.
SOUL.md.
Профиль пользователя не принадлежит отдельной личности. Корневой USER.md общий для всех личностей, а его безопасно ограниченная копия добавляется в активный контекст каждого обращения после общих проектных инструкций. Библиотека памяти Nerve показывает файл полностью в пределах общего текстового ограничения и явно отмечает его превышение. Поэтому сведения о пользователе достаточно обновить один раз; создавать копии USER.md внутри personalities/<id>/ не нужно.
В коде Nerve для этой сущности тоже используется термин Personality: создание, переключение, workspace-scoping и списки верхнеуровневых сессий не должны называться agents. Термины agent log, agent status, assistant display name и subagent остаются только там, где речь действительно идет о runtime-исполнении или дочерних подагентах.
Миграция
Старые runtime-ключиagent:<id>:... заменены на personality:<id>:....
veles gateway, veles agent и Railway startup-скрипт запускают эту миграцию автоматически перед стартом. Если миграция уже была выполнена или старых записей нет, она просто завершается успешно и продолжает запуск.
Команду можно запустить вручную для явной проверки:
agentId в personalityId.
После cutover Veles ожидает только новые ключи personality:*. Если старые agent:* записи всё ещё остались после автоматической миграции, startup останавливается с понятным сообщением, потому что это обычно означает конфликт файлов или повреждённые данные.
Переименование id личности
Если личность получила неудачный id, напримерagent-3, используйте скрипт:
--workspace нужен только если требуется явно указать другой workspace. Первый запуск без --yes показывает dry-run, а --yes применяет изменения.
Перед запуском остановите Veles/Nerve, чтобы они не писали новые session-файлы одновременно со скриптом.
Скрипт переименовывает папку personalities/<id>/, обновляет personality.json, переписывает ключи вида personality:<id>:... в sessions/, memory/, cron/ и tasks/, а также переименовывает live session JSONL-файлы. После применения запустите Veles/Nerve заново, чтобы сбросить in-memory кеши. Если включена векторная память, после проверки файлов переиндексируйте память.
Автовыбор личности
Veles может выбрать подходящую личность для нового пользовательского запроса на стороне gateway. EndpointGET /api/personalities/select?query=... и RPC personalities.select берут текст запроса, собирают имена, метаданные и SOUL.md всех личностей, затем просят модель по умолчанию выбрать лучший вариант.
Ответ возвращает personalityId, безопасные метаданные выбранной личности, reason, confidence, модель, которая сделала выбор, и количество рассмотренных кандидатов. Текст SOUL.md используется только внутри выбора и не возвращается в поле personality, чтобы Nerve мог начать сессию по rootSessionKey без повторной отправки prompt-текста в UI.
Для длинных запросов можно использовать POST /api/personalities/select с JSON-телом:
