New:Socket for Asana Is Now Available.Learn more
Sign In

berimor

Package Overview
Dependencies
Maintainers
1
Versions
61
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

berimor

Berimor — агентный CLI для LLM: интерактивный чат с инструментами (файлы, терминал, HTTP), детерминированные процессы, аудит и replay. Этот пакет — установщик платформенного бинарника.

latest
Source
npmnpm
Version
0.48.0
Version published
Weekly downloads
1.5K
3.93%
Maintainers
1
Weekly downloads
 
Created
Source
Berimor

Модель думает. Код решает.

Русский · English · Deutsch · Français · Español · 简体中文 · 日本語 · 한국어

Универсальный агент для LLM с детерминированным ядром: маршрутизацию задач, ветвление процесса, отбор контекста и допуск к выполнению решает код — модель исполняет узкие, проверяемые шаги. Работает с локальными и облачными моделями, слабыми и сильными.

GitHub release npm CI License Tests

Rust WebAssembly QuickJS SQLite tokio MCP ratatui sigstore Socket oxc

Зачем это нужно

Большинство «ИИ-агентов» устроены одинаково: модели дают набор инструментов и просят её саму решить, что делать. Для демо — удобно. В работе — ненадёжно: модель забывает шаги, выдумывает факты, сворачивает не туда, а опасная команда уходит в терминал по нажатию «y» на автомате.

Berimor построен на противоположном допущении: модели нельзя доверять оркестровку — ей можно доверить исполнение. Задача раскладывается на шаги заранее или руководится детерминированным циклом; всё, что выдаёт модель, проходит строгую проверку прежде, чем на это можно положиться; всё, что может навредить, проходит через гейт, который не отменяется нажатием Enter.

Типичный агентный CLIBerimor
Кто решает, что делать дальшеМодель (надежда на здравомыслие)Код (граф процесса, детерминированный цикл)
Сбой посреди задачи«Перезапустите и помолитесь»Журнал событий: продолжение ровно с места обрыва
Опасное действиеПодтверждение, которое усталость превращает в YOLODeny-статика: запрещённое не спрашивается вообще
Слабая/локальная модель«Купите модель подороже»Медиация: ретрай с объяснением ошибки → эскалация человеку
РасширенияПлагин получает всёСубагент/плагин получает подмножество прав родителя — кодом
ВоспроизводимостьНетПолная: журнал → replay → состояние на любой момент

Чем отличается

1. Решения — детерминированный код, не текст в промпте. Ветвление, циклы, таймауты, параллельные ветви с join-барьером, миграция версий работающего процесса — всё это Process Engine, а не надежда на то, что модель помнит инструкции. Слабым моделям нельзя доверять отбор контекста и маршрутизацию — значит, этим занимается код.

2. Безопасность — структура, а не дисциплина пользователя. Deny-таблица деструктивных операций не переизбирается подтверждением. Файловый jail не выходит за рабочую папку. Сетевой гейт не пускает в закрытые диапазоны (включая NAT64/6to4/Teredo-маскировки и обходы через редиректы и userinfo в URL). Секреты маскируются на всех точках утечки — но гейт допуска видит настоящие значения: маскировка не ослепляет проверку.

3. Свободный цикл — под надзором. Режим «рассуждение → действие → наблюдение» для задач, которые не разложить по шагам заранее. Каждое действие внутри проходит тот же capability-гейт, что и шаг процесса — свобода рассуждения не значит свобода от правил. Опционально: самокритика и стратегия «предложи — выполни — проверь».

4. Код модели исполняется в настоящей песочнице. Для «смержи 12 таблиц и найди аномалии» модель пишет JavaScript-программу. Она проходит статический анализ реальным парсером (белый список идентификаторов — eval/Function/Math.random отклоняются до исполнения), а исполняется QuickJS внутри WebAssembly (Wasmtime) с топливом, лимитом памяти и потолком вызовов инструментов. WASI — с пустым набором прав: ни файлов, ни сети даже потенциально. Единственная host-функция идёт через тот же гейт.

5. Память — как инженерная система, а не как буфер. Рабочая память сворачивается при переполнении бюджета. Эпизодическая — полнотекстовый поиск (FTS5). Семантическая — дедупликация фактов, конфликты не перезаписываются молча, сбой хранилища неотличим от «фактов нет» и не порождает ложных дублей. Граф сущностей — связи между фактами, персистентный. Навыки — переиспользуемые рецепты решения похожих задач, читаемые файлы.

6. Экосистема расширений с потолком прав.

  • Скилы (SKILL.md) — экспертные роли для чата: триггер — кодом (не моделью), потолок инструментов — фильтром диспетча.
  • Субагенты (agent.yaml) — вложенный агентный цикл с собственным бюджетом и журналом; права ребёнка = пересечение с правами родителя, расшириться нельзя. Вложенное порождение — только с явным allow_spawn: true, глубина ограничена кодом.
  • Плагины — изолированные процессы с ACL-манифестом и keyless-подписью sigstore: установка из доверенного списка с TOFU-подтверждением, как SSH.
  • MCP — внешние серверы инструментов по открытому протоколу Model Context Protocol (официальный Rust SDK rmcp, ADR-0023): подключаются секцией [[mcp_servers]] в конфиге, встают в общий диспетчер после встроенных инструментов и плагинов и проходят тот же capability-гейт, что и любой шаг процесса. Работает и в обратную сторону: Berimor может отдавать собственные инструменты по MCP. Курируемый список серверов с готовыми блоками конфига — docs/mcp-servers.md.

Всё это устанавливается одной командой — из каталога или любого git-репозитория: berimor skill install code-review-ru --from https://github.com/....

Возможности

Встроенные инструменты

Инструменты — встроенные в бинарник (не плагины), все вызовы проходят capability-гейт: мутирующие (помечены *) требуют подтверждения по режиму гейта, читающие исполняются без вопросов.

ГруппаИнструментыЧто делают
Файлыfiles.read, files.list, files.write, files.editчтение/листинг; запись целиком; точечная правка по строковому якорю (old_string → new_string, контроль уникальности)
Поискfiles.search, session.searchregex по содержимому файлов (с номерами строк и контекстом) или glob по именам — .git/target/node_modules пропускаются; подстрока по лентам прошлых сессий с excerpt
VCSvcs.gitgit status/diff/log/show — только чтение: хелперы репозитория (fsmonitor, внешний diff, textconv) отключены, произвольные флаги не принимаются
Терминалterminal.exec, terminal.start, terminal.output, terminal.killкоманда с таймаутом и капом вывода; фоновые процессы с опросом и остановкой (до 32 одновременно)
Сетьhttp.fetch, web.searchGET с капом тела и сетевым гейтом; поисковая выдача DuckDuckGo (заголовок/ссылка/сниппет)
Памятьmemory.search, memory.saveпоиск фактов семантической памяти; запись факта с дедупликацией — по умолчанию выключена (включается осознанно: [memory] tool_writes = true), секреты маскируются до записи
Организацияtodo.read, todo.write, human.askсписок задач сессии (хранится в .berimor/todo.json); вопрос пользователю прямо из агентного цикла
Снапшотыsnapshot.list, snapshot.restore*автоматически: перед каждой перезаписью файла его состояние сохраняется (ротация 50); list — метки и пути, restore — откат (сам тоже со снапшотом)
Субагентыagents.runпоручение вложенному агенту с пересечением прав

Сверх встроенных — инструменты плагинов и MCP-серверов (та же гейт-политика). Полный список в чате: стартовая строка «инструменты: …».

Меню чата (TUI)

Наберите / — палитра покажет команды с описаниями на языке интерфейса и фильтрует по мере набора. Подменю работают по пробелу: /config показывает продолжения.

КомандаЧто делает
/helpсписок команд
/modelsпровайдеры: список, /models add — мастер (пресеты → выбор → ключ/OAuth), удаление — через пикер с подтверждением
/skills, /agentsнавыки и субагенты (глобальные/проектные), навык — Enter на строке
/configменю параметров: показ эффективной конфигурации и пункт «Локаль интерфейса» (с текущим значением) → выбор языка из 8 (ru, en, de, fr, es, zh-CN, ja, ko). Сохраняется в локальный конфиг ([ui]), действует сразу. Шорткат: /config locale ja
/mouseпереключатель мыши: захвачена — колесо листает журнал (справа — полоса прокрутки с позицией), клик по журналу даёт фокус прокрутки; отпущена — режим выделения: инфо-панель скрывается, журнал на всю ширину, нативное выделение покрывает только журнал (при захвате выделение — через Shift)
/copyпоследний ответ агента — в буфер обмена (wl-copy/xclip/xsel/pbcopy)
/clear, /exitочистка журнала диалога; выход

Остальное в интерфейсе: модалки подтверждений опасных действий (варианты «один раз / до конца сессии / для проекта» — выбор стрелками ←→↑↓, y/n — сразу); вопросы агента (human.ask) — модалка со свободным вводом, Enter — ответить, Esc — отказ; многострочный ввод — Alt+Enter переводит строку, поле растёт до трети экрана, вставка из буфера — одним событием; мышь — колесо и клик-фокус (см. /mouse).

Процессы: графовые агенты

Основной «боевой» режим berimor — процесс: декларативный YAML-план, который исполняется как граф. Это тот же подход, что у «графовых агентов» (LangGraph и подобных): узлы — шаги, рёбра — переходы, состояние — разделяемый объект; отличие в том, что топология и маршрутизация у berimor детерминированы — модель никогда не выбирает ветку: она может предложить значение через строгий контракт, а маршрутизирует код (инвариант I1).

Узлы графа (типы шагов процесса):

УзелНазначение
sequentialобычный шаг — переход к следующему
toolвызов инструмента (аргументы — шаблоны из состояния)
llm_structuredвызов модели со строгим контрактом ответа (JSON Schema — отклоняется до приёма)
codeactпрограмма модели в WASM-песочнице (QuickJS, топливо, белый список вызовов)
agent_stepсвободный цикл «рассуждение → действие → наблюдение» как узел: max_turns, опционально самокритика и «предложи—выполни—проверь»
branchусловные рёбра: on — поле состояния, cases — ветки по значениям
loopпетля по условию
parallelпараллельные ветви с join-барьером
human_gateпауза на человека: причина, таймаут, политика таймаута (fail/ветка/эскалация)
checkpointявная точка восстановления

Журнал событий покрывает чекпоинтинг с запасом: любой прогон можно продолжить ровно с места обрыва и воспроизвести состояние на любой момент (replay).

Честная граница подхода (по результатам независимого полевого тестирования 0.27.0): контракт проверяет форму, не смыслbranch маршрутизирует код, но по значению, которое предложила модель; доверие не устранено, а спущено на уровень «значение, по которому вычисляется маршрут». Семантически значимые маршруты прикрывайте дополнительно: правилами политики контракта (диапазоны/перечисления), шагом верификации у сильной модели или human_gate. Вторая граница — слабые (локальные) модели: строгий контракт простой формы они выдерживают, а внутренний протокол свободного цикла требует модели среднего класса и выше; сценарий «полностью локально» сегодня реален для llm_structured-шагов, не для agent_step.

Контракты из конфигурации (0.28.0): свои контракты без форка и пересборки — секция [[contracts]] в конфиге с JSON Schema (inline schema или schema_path), дальше llm_structured/codeact/agent_step ссылаются на неё по имени наравне с кодовыми. Вывод модели валидируется по схеме (crate jsonschema), ошибка валидации уходит в промпт повтора — тот же цикл медиации. Ограничения: policy-правил (ссылки на состояние) и версий схем у конфиг-контрактов нет, publishable — весь объект, реестр читается при старте (смена конфига — новый запуск). Пример — fixtures/golden/processes/config-contracts/.

Нормализатор формы хода (0.29.0): слабые модели часто пишут «почти протокольный» ответ — плоскую форму {"thought", "tool", "args"}, "action": "tool" строкой, верхнеуровневый reply или оборванный на лимите токенов JSON. Известные формы достраиваются детерминированно до протокола ДО медиации (ремонт журналируется событием agent_turn_normalized; смысл по-прежнему решают валидация и гейт). Промпт хода дополнен парой few-shot примеров.

SGR: схема ведёт рассуждение (0.30.0): контракт может объявлять поля-обоснования ДО целевых — risk_factors (непустой список) перед risk в ClassificationOut; заполнив факторы, модель назначает оценку с опорой, а не произвольно. Порядок полей в JSON Schema соответствует порядку объявления (schemars preserve_order). На провайдерах с constrained decoding (response_format = "json_schema" в [[providers]]: OpenAI-совместимые, Ollama через format, llama.cpp) порядок генерации принуждается схемой физически — модель не может выдать число, не заполнив факторы. На провайдерах без constrained decoding (DeepSeek, Kimi — только json_object) работает мягкий уровень: порядок полей в промпте + обязательность по схеме + валидация медиации. Правило для конфиг-контрактов: поля-обоснования объявляйте раньше целевых. Автономный llama.cpp (in-process) принуждает порядок GBNF-грамматикой, построенной из схемы контракта (0.31.0).

Волна E: память (0.42.0): Qdrant-адаптер слоя Facts — [memory] qdrant_url = "http://127.0.0.1:6333" (+ qdrant_collection, qdrant_api_key_env): семантический поиск по HNSW-индексу вместо полного скана SQLite (чистый HTTP/JSON, gRPC-клиент не прибавлен); upsert/scroll/cosine/hybrid/delete проверены живым прогоном против реального Qdrant. Кэш ответов модели по ТОЧНОМУ хэшу запроса — [agent] response_cache = true: повторный вызов с тем же входом не идёт к провайдеру (попадание не пишет usage — вызова не было); хранилище — отдельный <storage>.cache.db (удаление = инвалидация); кэш по похожести эмбеддингов осознанно не строится (недетерминизм ответа).

Волна D: Rego-правила гейта (0.41.0): внешняя политика OPA/Rego поверх статических правил capability-гейта — через regorus (in-process, без sidecar). [gate] rego_policy = "policy.rego" + environment = "prod": политика (package berimor, deny contains msg if { ... }) видит input.tool, input.args, input.mutates, input.environment и может только запрещать строже статики — разрешить слабее нельзя, ядро остаётся детерминированным. Ошибка разбора — отказ старта, ошибка вычисления — fail-closed. Пример из заявки работает: «terminal.exec запрещён в prod-окружении».

Волна F: berimor как GitHub App (0.43.0): berimor serve принимает вебхуки GitHub на POST /webhooks/github — верификация HMAC-SHA256 (webhook secret), JWT RS256 → installation token, триггер-метка в комментарии (дефолт /berimor) запускает процесс неинтерактивно, итог возвращается комментарием в issue/PR. Ответ 202 немедленно, процесс — в фоне. Конфиг [github_app]: app_id, private_key_path, process, trigger.

Волна G: ACP — berimor в редакторе (0.44.0): berimor acp говорит Agent Client Protocol по stdio — Zed и совместимые редакторы подключают berimor как внешнего агента. Сессия = прогон процесса из [acp] process: prompt запускает процесс (вход {text}), события журнала стримятся в редактор (ходы инструментов, гейты, отказы медиации), ответ — по завершении; cancel отменяет ожидание, прогон доезжает в журнале. Печать прогона в ACP-режиме уходит в stderr — stdout принадлежит протоколу.

Волна H: сеть в песочнице (0.45.0): [sandbox] network = "restrict" + allow_connect_ports/allow_bind_ports — подпроцессы terminal.exec/terminal.start получают сетевые правила Landlock (ABI 4, ядро 6.7+): TCP connect/bind разрешены только перечисленным портам, остальное ядро отвергает (EACCES). На старом ядре: auto — предупреждение и пропуск сетевых правил, require — fail-closed. Дефолт off — поведение не меняется.

Волна I: федеративный журнал (0.46.0): berimor journal export <instance> --out <file> / import <file> — перенос прогона между машинами в переносимом JSON со свёрткой sha256. Импорт сверяет хеш (повреждённый файл отвергается), при коллизии id переименовывает (-imported-N) — допись в существующий инстанс невозможна («один писатель» сохраняется и на чужой машине); метки времени событий сохраняются исходные, а не момент импорта.

Волна K: TUI-прокрутка (0.48.0): перетаскивание ползунка журнала следует за указателем до отпускания кнопки — даже когда курсор уехал за узкую колонку полосы (раньше драг терялся). Клик по дорожке — прыжок пропорционально высоте, ▲/▼ — шаг; координата драга зажимается в дорожку. (Волна J — 0.47.0 — была каталожной: скилл security-pentest-ru в berimor-skills, без релиза ядра.)

Волна C: LLM-as-a-Judge (0.40.0): berimor eval <dir> --judge — после прогона golden-набора сильный провайдер (первый в порядке failover) оценивает финальное состояние каждого завершённого сценария: скор 1-5 и обоснование пишутся событием judge_score в журнал прогона сценария и в вывод. Критерии — файл <сценарий>.judge.md рядом с входом (иначе рубрика по умолчанию: полнота, точность, отсутствие выдумок, форма). --judge-threshold <N> — CI-гейт: средний балл ниже порога = ошибка команды. Разбор ответа судьи идёт через тот же EOF-ремонт медиации; незавершённые сценарии (гейт, ошибка) судья честно пропускает.

Волна B: наблюдаемость (0.39.0): berimor otlp <run> --endpoint <url> — прогон процесса как трейс в OTLP/HTTP JSON: корневой спан запуска, спан на узел графа, спан вызова LLM (латентность + токены в атрибутах), human_gate (интервал до ответа/таймаута), ходы инструментов свободного цикла. traceId/spanId детерминированы (повторный экспорт идемпотентен). Принимается коллекторами Jaeger и Grafana Tempo (порт 4318) и Langfuse — единый OTLP, отдельные экспортёры не нужны; заголовки авторизации — --header 'Name: value'.

Волна A: отказоустойчивость и стоимость (0.38.0): circuit breaker в Model Pool — N последовательных транспортных сбоев провайдера открывают автомат, провайдер пропускается до полуоткрытой пробы по cooldown, об открытии — видимый алерт «<имя> → circuit-open» ([agent] breaker_failures, breaker_cooldown_secs; 0 = выключено). Атрибуция стоимости: каждый вызов модели журналирует usage (токены, латентность, шаг — событие model_usage), у локального llama.cpp токены считает токенизатор; berimor cost <run> — отчёт по шагам и итог (цены — cost_per_1k_tokens провайдера; без цены — честные токены без выдуманных денег).

Слой правил и berimor как MCP-сервер (0.37.0, по мотивам Harness AI 3.0): (1) правила — markdown-стандарты из ~/.config/berimor/rules/ и .berimor/rules/ подмешиваются в контекст всех шагов с моделью ДО генерации (мягкий слой; жёсткий — по-прежнему медиация); проектные сильнее глобальных; (2) berimor mcp-serve — MCP-сервер по stdio: внешние агенты и редакторы гоняют процессы berimor через инструменты process.list/process.run/trace.read — модель думает снаружи, код решает внутри; (3) GitHub Action devpilgrin/berimor-action@v1 — процессы как шаги CI.

Заимствования из DeepSeek Harness (0.36.0): (1) pruner наблюдений — длинный результат инструмента обрезается в промпте (голова+маркер+хвост, оригинал в журнале; [agent] tool_result_max_chars, 0 = выкл); (2) Landlock-песочница для terminal.exec/terminal.start — собственная реализация на libc (без внешнего бинаря): подпроцесс физически не выходит за рабочую область, системные каталоги — read-only; [sandbox] landlock = off|auto|require, require — fail-closed; (3) compaction чата — история длиннее порога сжимается в конспект старшим провайдером, хвост дословно, сбой суммаризации не роняет ход ([agent] compact_threshold_chars, 0 = выкл).

Устойчивость к обрыву генерации (0.35.2): локальная модель, упёршаяся в потолок токенов, обрывает JSON («EOF while parsing») — раньше это сжигало 3 попытки и останавливало процесс эскалацией. Теперь стадия parse медиации достраивает обрыв структурно (закрывающие кавычки/скобки, содержимое не трогается; мусор по-прежнему отклоняется), ремонт виден в журнале (mediation_parse_repaired) — ретраи и эскалация остаются для настоящих ошибок. Контекст локального провайдера поднят до 8192 и настраивается (local_ctx_tokens).

Бюджет ходов свободного цикла (0.34.0): потолок на сообщение — [agent] max_turns (дефолт 32, было 12). Защита от зацикливания отделена от лимита длины: повтор одного и того же действия подряд (инструмент + те же аргументы) — предупреждение в промпт, четыре подряд — остановка StuckLoop с говорящей причиной; длинная РАЗНАЯ работа (анализ проекта за десятки чтений) лимитом не наказывается. За ~20% до потолка движок добавляет в промпт замечание «осталось N ходов — своди результат в Finish».

Пентест с PoC-валидацией (0.33.0, по мотивам usestrix/strix): эталонный процесс fixtures/golden/processes/pentest/ — разведка → гипотезы (evidence перед классом, SGR) → human_gate → активная проверка → отчёт, где находка принимается только с доказательством исполнения; неподтверждённое честно попадает в unconfirmed. Гард-рейлы обязательны: цели из явного scope, активные действия через человека, всё в журнале. Попутно: статический deny capability-слоя в свободном цикле стал наблюдением хода, а не смертью прогона — модель корректирует действие под правила, гейт каждую попытку по-прежнему режет.

Управляемость расширений (0.32.0): berimor skill lint / berimor agent lint — статические проверки манифеста (контракт имени, известные инструменты, согласованность permissions — net/exec/fs-write/spawn — с потолком tools); установка из каталога fail-closed: ошибка линта — откат. berimor skill review / agent review — мультимодельное ревью содержимого как недоверенных данных: каждый настроенный провайдер выносит вердикт независимо, итог кворумом (fail любого = fail), JSON-отчёт с находками. В релизах — release-evidence.json (хэши, подписи, SBOM, след CI) и release-smoke-linux-x64.json.

Графовые идиомы как процессы. Классические паттерны (routing, prompt chaining, parallelization, orchestrator-workers, evaluator-optimizer) выражаются без нового кода: llm_structured пишет решение-маршрут в состояние → branch маршрутизирует по валидированному значению; evaluator-optimizer — это loop с вердиктом; orchestrator-workers — parallel + join. Примеры процессов — в fixtures/golden/processes/.

Архитектура агента

flowchart TD
    U["Пользователь / расписание / HTTP"] --> CLI["berimor CLI<br/>(chat · run · serve · daemon)"]
    CLI --> PE["Process Engine<br/>граф процесса: branch · loop · parallel · join"]
    CLI --> EX["Свободный цикл<br/>agent_step"]
    PE --> MED["Mediation<br/>валидация контрактов"]
    EX --> MED
    MED --> GATE["Capability Gate<br/>deny-статика → jail → подтверждение"]
    GATE --> TOOLS["Инструменты<br/>встроенные → плагины → MCP"]
    PE --> J[("Журнал событий SQLite<br/>resume · replay · аудит")]
    EX --> J
    MED --> MEM[("Память: эпизодическая FTS5,<br/>семантическая, граф сущностей")]
    PE --> POOL["Model Pool<br/>провайдеры · тиры · failover"]
    EX --> POOL
    POOL --> LLM["LLM: облачные и локальные"]

Интерактивные версии (тёмная/светлая тема, фокус по узлам, экспорт): компонентная карта, жизненный цикл задачи, состояния процесса, шаг через Mediation — см. docs/arch/views/diagrams/.

Пример графа процесса (evaluator-optimizer)

flowchart LR
    A["llm_structured:<br/>черновик"] --> B["llm_structured:<br/>оценка по контракту"]
    B --> C{"branch on: verdict"}
    C -->|"не годится"| A
    C -->|"годится"| D["human_gate:<br/>публикация?"]
    D --> E["tool: запись результата"]
    E --> F["checkpoint"]

Модель предлагает verdict — но в cases попадёт только значение, прошедшее контракт; выбор ветки вычисляет код.

Инфраструктура проекта

Rust-workspace по крейту на компонент — Process Engine, Mediation, Executors, Memory, Capability, Model Pool, Actors, Tool Runtime, Context Engine, Eval, Storage. Гостевой WASM-модуль (codeact-guest/) живёт отдельным crate и закоммичен как готовый артефакт — обычная сборка не замедляется.

Дисциплина проверок. Каждый релиз: cargo fmt + clippy -D warnings + cargo test --workspace (992 тестов: юнит, интеграционные, e2e через настоящий бинарник, золотые фикстуры процессов и вредоносных вводов). Критические компоненты проходят обязательное независимое ревью. Полный самостоятельный аудит (docs/audit-2026-07-31.md) — все находки закрыты или осознанно задокументированы.

Supply chain как у взрослых. Кросс-платформенные релизы (Linux x64/arm64, macOS arm64, Windows x64) с keyless-подписью cosign/sigstore — приватного ключа не существует нигде. Проверка: berimor verify <архив>. npm-публикация с provenance, SBOM (CycloneDX) в пайплайне, самообновление (berimor self-update) реализовано на примитивах Process Engine — тот же журнал и восстановление после сбоя, что у обычных процессов, а не ad hoc скрипт.

npm-установщик вообще без install-скриптов (класс замечаний Socket.dev закрыт структурно, с 0.24.1): на этапе npm install не выполняется НИЧЕГО — в пакете нет ни одного life-cycle скрипта. Скачивание происходит при первом запуске — с фиксированного github.com/devpilgrin/berimor/releases, со сверкой SHA-256 скачанного архива против пина checksums.json, который CI кладёт в сам npm-пакет при публикации (доверие из npm-канала, независимого от раздающего GitHub Release). Сравнение — константным временем, несовпадение — отказ без распаковки.

Архитектура задокументирована до кода. docs/arch/ — самодостаточная спецификация, реализуемая на любом стеке; docs/ADR/ — журнал решений с отклонёнными альтернативами; docs/ROADMAP.md — очередь задач с классом модели-исполнителя на каждую.

Установка

Способ 1: npm (проще всего)

npm install -g berimor
berimor --version

Установщик сам определяет платформу, скачивает подписанный бинарник из последнего релиза GitHub и сверяет SHA-256 до распаковки. Пакет публикуется с provenance (привязка сборки к CI-workflow).

Способ 2: готовый бинарник с GitHub

Актуальные версии — на странице релизов. Ниже — команды для скачивания; версия подставляется автоматически (последний выпуск).

Linux (x64 или arm64):

VERSION=$(curl -s https://api.github.com/repos/devpilgrin/berimor/releases/latest | grep '"tag_name"' | cut -d '"' -f 4)
ARCH=x64   # или arm64
curl -LO "https://github.com/devpilgrin/berimor/releases/download/${VERSION}/berimor-${VERSION}-linux-${ARCH}.tar.gz"
tar -xzf "berimor-${VERSION}-linux-${ARCH}.tar.gz"
chmod +x berimor
sudo mv berimor /usr/local/bin/
berimor --version

macOS (только Apple Silicon — M1/M2/M3 и новее; сборки под Intel пока не публикуются, для Intel-Mac — способ 3 ниже):

VERSION=$(curl -s https://api.github.com/repos/devpilgrin/berimor/releases/latest | grep '"tag_name"' | cut -d '"' -f 4)
curl -LO "https://github.com/devpilgrin/berimor/releases/download/${VERSION}/berimor-${VERSION}-darwin-arm64.tar.gz"
tar -xzf "berimor-${VERSION}-darwin-arm64.tar.gz"
xattr -d com.apple.quarantine berimor   # бинарник пока не подписан Apple — иначе Gatekeeper откажется его запускать
chmod +x berimor
sudo mv berimor /usr/local/bin/
berimor --version

Windows (x64), PowerShell:

$Version = (Invoke-RestMethod "https://api.github.com/repos/devpilgrin/berimor/releases/latest").tag_name
Invoke-WebRequest -Uri "https://github.com/devpilgrin/berimor/releases/download/$Version/berimor-$Version-win32-x64.zip" -OutFile berimor.zip
Expand-Archive -Path berimor.zip -DestinationPath .
.\berimor.exe --version

Бинарник пока не подписан — Windows SmartScreen может показать предупреждение «Windows защитила ваш компьютер»: «Дополнительные сведения» → «Выполнить в любом случае». Чтобы вызывать berimor из любой папки, переложите berimor.exe в каталог, который уже есть в PATH, или добавьте текущую папку в PATH самостоятельно.

Каждый архив сопровождается файлом <архив>.sigstore.json — keyless-подпись cosign/sigstore, привязанная к идентичности CI-workflow, которым собран релиз (ADR-0026). Проверить: berimor verify <архив> — сама команда уже в скачанном бинарнике (устанавливает свежий доверенный корень sigstore по сети при первом вызове). Это независимая от Apple/Microsoft подпись — предупреждения Gatekeeper/SmartScreen выше она не снимает, они про отдельный, ещё не сделанный шаг.

Способ 3: собрать из исходников (любая ОС)

Нужен только Rust (стабильная версия):

git clone https://github.com/devpilgrin/berimor.git
cd berimor
cargo build --release -p berimor-cli
./target/release/berimor --version

На Windows последняя команда — .\target\release\berimor.exe --version.

Быстрый старт

berimor          # = berimor chat: интерактивный диалог с агентом

При первом запуске мастер предложит подключить модели из пресетов (Kimi, DeepSeek, OpenAI, Claude через OpenRouter, локальные через Ollama/llama.cpp/LM Studio) — выберите номера или имена, вставьте ключ API (он попадёт в ~/.config/berimor/secrets.env с правами «только владелец», не в конфиг). Вместо API-ключа можно войти по подписке — berimor login (OAuth с PKCE: Claude Pro/Max, ChatGPT Plus/Pro; токены — в том же secrets.env, обновление — прозрачно). Позже то же самое — berimor setup или прямо в чате командой /models add.

Полезные команды чата: /help, /models, /skills, /config, /exit. Локаль интерфейса TUI — /config locale (8 языков: ru, en, de, fr, es, zh-CN, ja, ko; выбор сохраняется в локальном конфиге — секция [ui]).

Детерминированные процессы (декларативный YAML-план со строгими контрактами — основной «боевой» режим): berimor run <process.yaml>. Примеры процессов и конфигураций — в fixtures/golden/processes/ и CONTRIBUTING.md.

Автоматизация поверх процессов: berimor schedule add + berimor daemon — исполнение процессов по расписанию (у демона и HTTP-сервиса нет терминала: запрос подтверждения трактуется как отказ с диагностикой — для автоматизации мутирующих шагов используйте точечное автоподтверждение в .berimor/allow либо флаг berimor run --non-interactive / BERIMOR_NON_INTERACTIVE=1 в своих скриптах); berimor serve — HTTP-сервис поверх run/schedule/sessions (с токеном, без анонимного доступа); berimor sessions — реестр живых сессий хоста; berimor trace <инстанс> — человекочитаемая трассировка журнала любого прогона.

Расширения одной командой:

berimor skill install code-review-ru                                    # из каталога
berimor skill install my-skill --from https://github.com/user/repo      # из любого git
berimor agent install researcher
berimor plugin install devpilgrin/berimor-plugin-hello                  # подписанный плагин
berimor plugin install-local ./my-plugin --allow-unsigned               # локальный, осознанно

Как устроен проект

СлойДиректорияСодержимое
Ядро агентаcrates/Rust-workspace — по одному крейту на компонент: Process Engine, Mediation, Executors, Memory, Capability, Model Pool, Actors, Tool Runtime, Context Engine, Eval, Storage
Песочница CodeActcodeact-guest/QuickJS-гость под wasm32-wasip1 — отдельный crate, закоммичен как готовый артефакт
Bootstrapbootstrap/npm-пакет установщика/обновления (TypeScript), см. «Установка» выше
Архитектураdocs/arch/самодостаточная спецификация — принципы, компоненты, диаграммы (docs/arch/views/), интерактивные HTML-диаграммы (docs/arch/views/diagrams/). См. docs/arch/README.md
Решенияdocs/ADR/журнал архитектурных решений: контекст, альтернативы, последствия. См. docs/ADR/README.md
План разработкиdocs/ROADMAP.mdочередь задач по фазам, декомпозиция на подзадачи, сложность, класс модели-исполнителя
Аудитdocs/audit-2026-07-31.mdнезависимый аудит безопасности — все находки закрыты или осознанно задокументированы
Тестовые данныеfixtures/golden/золотые наборы: примеры процессов, контрактов, вредоносных вводов

crates/ и bootstrap/ — сам агент, код, написанный по очереди из docs/ROADMAP.md. docs/arch/ — слой чистых решений позади него: не упоминает конкретные проекты и продукты (кроме docs/arch/deployment.md и docs/arch/stack.md, где это осознанное исключение), излагает архитектуру так, чтобы её можно было реализовать на любом стеке. docs/ADR/ фиксирует, почему принято каждое решение, включая отклонённые альтернативы.

Лицензия

Apache License 2.0 — см. LICENSE.

Участие

См. CONTRIBUTING.md и docs/ROADMAP.md для выбора задачи.

FAQs

Package last updated on 25 Aug 2026

Related posts