Chimera — архитектура
Этот документ сопоставляет кодовую базу с замыслом и с исследованиями, на которые она опирается. О том, «зачем», смотрите в VISION.md.
Ядро рассуждения: LLM-Fusion
chimera/fusion/
Движок слияния прогоняет задачу через панель моделей, поручает судье составить
структурированный разбор (согласие / противоречия / частичный охват / уникальные наблюдения / слепые
пятна), а затем синтезатор пишет итоговый ответ, опираясь на этот разбор (FusionEngine). Он
реализует протокол SupportsComplete, поэтому подставляется как движок рассуждения всюду, где
ожидается модель, — в том числе внутри цикла агента.
Маршрутизатор, знающий цену (RoutedBackend + RoutingPolicy), держит слияние выборочным: ходы
с вызовами инструментов идут к одной модели (слияние не вызывает инструменты), и сливаются только
глубокие ходы с высокой ценой ошибки. Идея взята у OpenRouter Fusion (подъём даёт шаг синтеза, а не
только разнообразие моделей) и AURORA-AI (подстраиваемый бюджет по разнородным моделям).
Цикл агента и самостоятельность второго уровня
chimera/core/
Agent— минимальный цикл ReAct с вызовом инструментов и явной стенограммой (состояние живёт вне модели). Зависит только отSupportsCompleteиToolRegistry.AutonomousAgent— второй уровень: собрать контекст Spine, ограниченный владением → план → снимок → выполнение → разбор управляющим (кто делает, тот не проверяет) → проверить или откатить → повтор с обратной связью, записывая каждую попытку в буфер опыта.WorkspaceGuard— снимок и восстановление текстовых файлов, механизм за «проверить или откатить».CommandVerifier— «исполняемое свидетельство» (код выхода 0 означает успех).
Борьба с деградацией при непрерывной эволюции
Открытая задача (по Agentic Software, 2606.05608): качество падает с более чем 80% на отдельных
задачах примерно до 38% при непрерывной эволюции — из-за длинного контекста и накопления ошибок. Меры
Chimera, каждая со своим основанием в литературе:
| Мера | Где | Основание |
|---|---|---|
| Вынести состояние наружу (стенограмма и рабочая папка, а не контекст модели) | core, WorkspaceGuard |
HORIZON 2606.28279 |
| Контекст, ограниченный владением (Spine) | core/spine.py |
Spec Growth Engine 2606.27045 |
| Разделение «сделать» и «проверить» | core/supervisor.py |
AdvancedShelLM 2606.27990 |
| Проверить или откатить | core/autonomous.py |
autoresearch / AutoMegaKernel 2606.09682 |
| Буфер опыта (провалы как отрицательные примеры) | evolution/experience.py |
HORIZON 2606.28279 |
| Сведение сообщений в командах | orchestration/comms.py |
MOC 2606.02359 |
| Замер непрерывной эволюции | eval/continuous.py |
постановка задачи EvoClaw |
Память и самоэволюция
chimera/memory/, chimera/evolution/
- Управляющий памятью — иерархические записи (рабочие / эпизодические / смысловые / о личности) с
операциями
ADD / UPDATE / DELETE / NOOP(remember) и слиянием повторов черезmerge(Memory-R1,2606.14502). - Эволюция навыков —
SkillEvolverпредлагает переиспользуемыйLearnedSkillпо итогам успеха, проверяет его и оставляет, только если он проходит (предложить → проверить → оставить или выбросить). Усвоенные навыки — это шаблоны промптов, а не исполняемый код: их безопасно сочинять самостоятельно ещё до самомодификации на уровне кода. Доработка улучшает шаблон по его же провалам (VIBEMed2606.15504). - Самостоятельно усвоенные задания —
CronLearnerзамечает повторяющиеся задачи и предлагает задания по расписанию (created_by=agent, выключенные до одобрения человеком). - Замер непрерывной эволюции — прогоняет цепочку задач через решатель и сообщает деградацию (общая доля прохождения, первая половина против второй, самая длинная серия).
Управление и безопасность
chimera/governance/
Самосовершенствующееся ядро доверия (AgentTrust v2, 2606.08539):
TrustKernel.evaluate(action)→ разрешить / предупредить / заблокировать / разобрать. ЛексическийRuleSetдетерминированно разбирается с угрозами фиксированной формы; необязательный смысловой судья разбирается с намерением; выведенные правила со временем удешевляют работу. Неизменное условие: никогда не блокировать наглухо безобидное действие.SkillValidator/ScheduleValidator— ограниченная, статически проверяемая поверхность правок для самомодификации (AutoMegaKernel2606.09682): небезопасные предложения отвергаются ещё до запуска.AuditLog— JSONL только на дозапись, с решениями и изменениями эволюции.GovernedTool/govern_registry— обёртка вокруг любого инструмента, ставящая его выполнение под контроль; складывается с существующим циклом агента без изменений (chimera ... --guard).
Слой заражения (сдерживание внедрения в промпт)
Лежит поверх ядра — эвристический, честный и никогда не являющийся жёсткой границей (граница — это песочница):
TaintLedger+LedgeredTool(ledger.py,ledger_tool.py) — журнал полномочий на запуск. Загрузка заражает своё содержимое; запись или выполнение, поглощающие заражённое содержимое, поднимаются до разбора (assess_action). Недоверенное загруженное содержимое возвращается обособленным как данные и с вырезанными управляющими токенами шаблона чата (sanitize.py), а долговечные артефакты заражённого запуска сохраняют происхождениеtainted, чтобы отрава не могла отмыться в «чистую» память или навык.AggregateMonitor(aggregate_monitor.py) — монитор уровнем выше: получая события полномочий каждого подагента, он ловит разделённые потоки, которых монитор одного агента не видит (агент A забирает недоверенное содержимое, агент B его выполняет или отправляет наружу).check_drift(drift.py) —Specиз исполняемых требований (defines/contains/absent/command), который заодно служит эталоном дляsolve --verifyи единственной инстанцией, решающей «готово» для оркестратора проектов (ниже). Отрицательные проверки на файлах, которые не удалось прочитать, срабатывают в сторону отказа.QuarantineTool+ подстраивающийся список разрешений (quarantine.py,allowlist.py) — изолированный читатель по приёму двух моделей (CaMeL) и список разрешённых инструментов, который сужается, как только запуск заражён.
Команды агентов (третий уровень)
chimera/orchestration/
Role+RoleAgent— специализация по ролям (в духе CrewAI).SequentialCrew— роли по очереди, каждая видит сведённые предыдущие результаты и может писать в общую память.SupervisorCrew— работники берутся за задачу параллельно, результаты сводятся, а руководитель синтезирует (parallel_reviewв духе CAPRA,2606.18976).consolidate— слияние сообщений по MOC держит контекст команды лёгким (2606.02359).
Самоэволюционирующая экосистема (четвёртый уровень)
chimera/ecosystem/
MetaAgent— проектирует, собирает и оценивает специализированных агентов (агенты, строящие агентов). Две меры предосторожности из Meta-Agent Challenge (2606.04455): изоляция инструментов (инструменты спроектированного агента фильтруются по разрешённому списку) и отделение скрытых тестов (видимые прошли, скрытые провалились ⇒ подозрение на подгонку под награду, успехом не засчитывается).ChangeQueue— управляет темпом изменений (очередь слияния FIFO и ограничения на пакет), а не численностью («Govern the Repository»,2606.28235).TrajectoryCollector— записывает тройки (промпт, ответ, исход) и выгружает наборы для SFT и DPO. Само дообучение включается по желанию и делается снаружи — Chimera собирает, но не обучает.
Экономика стоимости и иерархия делегирования
chimera/orchestration/ (иерархия, каскад, бюджет, расписки, envelope_verify)
Делегирование окупается, только когда оно дешевле, чем сделать работу на месте, и это утверждение измерено, а не заявлено:
HierarchicalOrchestrator— разложить → разослать работникам с бюджетом → проверить каждый результат → синтезировать. Веерная работа, похожая на чтение, делегируется; совсем мелкую подзадачу доверенная верхняя модель отвечает сама.CascadeBackend— слабая → проверка → средняя → проверка → слияние, поднимаясь по ступеням, только когда ответ ступени не проходит дешёвую приёмку. Журнал маршрута записывает каждый переход, поэтому стоимость — это сумма по всем испробованным переходам, а не только по принятому: за подъёмы платят.TokenBudget/BudgetedBackend/EffortPolicy— жёсткий потолок по токенам, соблюдаемый на уровне движка, для каждого работника.EnvelopeVerifier— схема → критерии приёмки → вероятностная выборочная проверка (оценить добросовестность пересказа против исходного артефакта); повторный запрос, вызванный неудачной выборочной проверкой, проверяется заново.- Расписки делегирования (
receipts.py) — каждое делегирование записывает измеренные токены и стоимость и тут же, в той же строке, встречный вариант «сделать на месте», посчитанный по тарифу каждой модели (неизвестная модель →None, никогда не выдуманное число). Собственные накладные расходы оркестратора на разложение и синтез тоже учитываются, поэтомуsummarize_delegations(chimera delegations) сообщает проверяемую чистую экономию, аcascade-benchсообщает хвост стоимости (p50/p95/p99), а не только среднее.
Маховик самоэволюции
chimera/evolution/
«Обучение», которое никогда не трогает веса, — с сигналом пригодности, без градиентов и обратимое:
EvolutionContext— общая сборка (опыт, траектории, память, автоэволюция, карточки навыков, сборник приёмов), благодаря которой обучение становится свойством всего стека агента, а не только командыsolve.- Карточки навыков и доработка GEPA, сборник приёмов ACE и
SkillLifecyclePolicy, который повышает и понижает навык по измеренной статистике применений и удач (новый навык рождаетсяprovisional). - Проверка разницы — «пустой успех» (проверяющий прошёл, но разница в рабочей папке пуста) не чеканит ни навык, ни память: маховик учится только на работе, которая действительно была сделана.
- Проверка переноса (
eval/transfer.py) — доработанный артефакт повышается, только если держится и на отложенной выборке, что защищает от отрицательного переноса. Цель задаётmaturity.Scorecard.weakest(): цикл бьёт по самой слабой способности. Откат при ухудшении происходит автоматически только при статистически значимом падении (по интервалу, а не по одной точке).
Каждая смена значения по умолчанию проходит через заранее объявленный парный A/B (bench/),
публикуемый независимо от того, выигран он или проигран, — без перезапусков ради значимости.
Самостоятельность на уровне проекта (от начала до конца)
chimera/orchestration/project.py
ProjectOrchestrator ведёт целый проект по Spec: граф задач (ориентированный ациклический граф
Kanban с depends_on) → каждая готовая карточка решается (с описанным выше контекстом эволюции) →
принимается по Spec через check_drift (единственная инстанция, решающая «готово») →
невыполненные требования порождают следующие карточки, и так по кругу, пока Spec не сойдётся или пока
не остановят бюджет, предел итераций или контрольная точка человека. Рискованные шаги
(risk: high — развёртывание, миграция, удаление) встают на одобрение человеком; запуск
долговечен и возобновляем.
Сквозные части
- Поставщики (
providers/) — один шлюз поверх LiteLLM, не зависящий от поставщика; ключи могут жить в.envи экспортируются в окружение, чтобы LiteLLM их видел. - Инструменты (
tools/) — родные примитивы; метаданные инструмента являются атрибутами экземпляра, поэтому динамически создаваемые инструменты (OpenAPI, MCP) работают. - Интеграции (
integrations/) — клиент MCP (необязательное дополнениеmcp), импортёр OpenAPI → инструмент и реестр соединителей. - Планировщик (
scheduler/) — задания по расписанию и по событиям; время подаётся снаружи ради детерминированных тестов. - Перенос (
migration/) — импорт конфигурации и навыков плюс слияние долговременной памяти из Hermes и OpenClaw, без повторов и без разрушения.
Подход к тестированию
Каждая подсистема покрыта модульными тестами с поддельными движками — детерминированно, без сети
и без ключей. Команды, которые действительно обращаются к модели, проверяются дымовым тестом на путь
отказа без ключа. Заслон качества (ruff + mypy --strict + pytest) работает в CI на Python 3.11
и 3.12.