npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

berimor

v0.41.0

Published

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

Readme

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

Русский · 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.

| | Типичный агентный CLI | Berimor | |---|---|---| | Кто решает, что делать дальше | Модель (надежда на здравомыслие) | Код (граф процесса, детерминированный цикл) | | Сбой посреди задачи | «Перезапустите и помолитесь» | Журнал событий: продолжение ровно с места обрыва | | Опасное действие | Подтверждение, которое усталость превращает в YOLO | Deny-статика: запрещённое не спрашивается вообще | | Слабая/локальная модель | «Купите модель подороже» | Медиация: ретрай с объяснением ошибки → эскалация человеку | | Расширения | Плагин получает всё | Субагент/плагин получает подмножество прав родителя — кодом | | Воспроизводимость | Нет | Полная: журнал → 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.search | regex по содержимому файлов (с номерами строк и контекстом) или glob по именам — .git/target/node_modules пропускаются; подстрока по лентам прошлых сессий с excerpt | | VCS | vcs.git | git status/diff/log/show — только чтение: хелперы репозитория (fsmonitor, внешний diff, textconv) отключены, произвольные флаги не принимаются | | Терминал | terminal.exec, terminal.start, terminal.output, terminal.kill | команда с таймаутом и капом вывода; фоновые процессы с опросом и остановкой (до 32 одновременно) | | Сеть | http.fetch, web.search | GET с капом тела и сетевым гейтом; поисковая выдача 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).

Волна 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-окружении».

Волна 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: внешние агенты (Claude Code, Cursor) гоняют процессы 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 (989 тестов: юнит, интеграционные, 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 | | Песочница CodeAct | codeact-guest/ | QuickJS-гость под wasm32-wasip1 — отдельный crate, закоммичен как готовый артефакт | | Bootstrap | bootstrap/ | 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/ | золотые наборы: примеры процессов, контрактов, вредоносных вводов | | Исследования | docs/rnd/ | вспомогательный слой: источники и анализ существующих агентных фреймворков. См. docs/rnd/README.md |

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

Лицензия

Apache License 2.0 — см. LICENSE.

Участие

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