Skip to content

Архитектура ​

Jarvis — один процесс на Node.js, который запускается на машине разработчика или в CI. Внешних оркестраторов, очередей и серверов у него нет: состояние лежит в локальной базе SQLite, код задачи — в отдельной рабочей копии git. Каждая задача исполняется своим процессом, поэтому несколько задач идут параллельно и не мешают друг другу.

Из чего состоит ​

ЧастьЧто делает
Движок сценариевведёт задачу по шагам из YAML, решает, куда идти после каждого шага, сохраняет состояние на каждой границе
Исполнитель агентовведёт разговор агента с моделью: промпт, вызовы инструментов, итоговый документ
Сборщик контекстасобирает промпт из слоёв и следит, чтобы он помещался в окно модели
Знаниявыбирает скиллы, стандарты и документы под задачу, ищет по базе знаний, строит граф кода
Роутер моделейвыбирает модель под роль агента, проверяет политику данных и квоту, переключает на запасную
Инструментычтение и запись файлов, поиск, команды проекта, MCP-серверы; перед каждым вызовом — проверка прав, после — вычистка секретов
Разговоры с человекомутверждения, вопросы агентов, замечания ревью: каждое — тред с состоянием
Адаптеры языковчто знает Jarvis о конкретном стеке: граф кода, разбор отчётов тестов. Ядро о стеках не знает ничего

Запуск задачи ​

Аренда нужна, чтобы задачу никогда не исполняли два процесса сразу. Процесс продлевает её, пока жив. Если он умер, задачу можно забрать: jarvis resume --steal.

Один шаг агента ​

Исход агента выбирается из списка, который объявлен заранее. Движок по нему выбирает следующий шаг: ревью с исходом «надо исправить» вернёт задачу в реализацию, а если возвратов было слишком много — остановит и спросит человека.

Проверки и возврат ​

Утверждение и продолжение ​

Процесс не висит, пока ждёт человека: он завершается, а состояние остаётся в базе. Продолжить можно из терминала, со страницы, из CI или фоновым процессом.

Принципы ​

  • Состояние только в базе. Всё, что нужно для продолжения, сохраняется на границе шага. Падение процесса стоит максимум текущего шага.
  • Наименьшие права. У каждого агента свой список инструментов. Модель видит только разрешённые.
  • Внешние действия ровно один раз. Комментарий в Jira или push сначала записывается как намерение, потом выполняется, потом отмечается. После падения Jarvis проверит на сервере, было ли действие, прежде чем повторять.
  • Ядро не знает о стеках. Всё про конкретный язык — в адаптерах. Тест архитектуры не даёт ядру упомянуть конкретный фреймворк.
  • Документы неизменяемы. Каждая правка — новая версия с указанием, кто её сделал и из чего. Утверждение привязано к версии.

Дальше: поток данных и надёжность и безопасность.

Apache-2.0