Raxol

by DROOdotFOO (community) · Claude Desktop, Claude Code, OpenCode, macOS, Linux, Erlang/OTP, Phoenix LiveView, termbox2, SSH

MCP MCP Servers Open Source v2.6.1 · 07.08.2026 активный

Напиши одно приложение — рендери его в терминал, браузер или как инструменты агента. Терминал для вашего Гандама.

v2.6.1
07.08.2026 current

Установка
# mix.exs
def deps do
  [{:raxol, "~> 2.6"}]
end

mix raxol.new my_app

nix develop github:DROOdotFOO/raxol
показать оригинал переведено ИИ

Raxol

Рекурсивно, axol. Навсегда FOSS.

CI Hex

raxol MCP-сервер

Напишите одно приложение. Запускайте его в терминале, браузере, SSH-сессии или агенте.

Ваше приложение — это единый модуль TEA (init, update, view), работающий как OTP GenServer. Raxol отображает этот модуль на четырёх поверхностях из одного кодовой базы:

                          +---> Terminal (termbox2 NIF)

                          |
  TEA module (GenServer) -+---> Browser (Phoenix LiveView)

                          |
                          +---> SSH (Erlang :ssh)

                          |
                          +---> Agent (MCP tools)

Интересная часть — это рантайм. Ваше приложение получает изоляцию от сбоев на уровне компонентов, горячую перезагрузку кода без перезапуска, распределённую кластеризацию с CRDT и поверхность агента, где LLM взаимодействуют со структурированными деревьями компонентов вместо сканирования пикселей. Это свойства BEAM — виртуальной машины, созданной для систем, которые не могут выходить из строя, не могут терять состояние и способны обновлять код на лету.

Bubble Tea, Ratatui и Textual — отличные рендереры. A2UI и AG-UI определяют форматы взаимодействия агентов с интерфейсами. Raxol — это рантайм, который отображает все четыре поверхности из одного исходного модуля. См. Почему OTP для сравнения фреймворков и Почему Raxol для сравнения рантайма с Python-стеками агентов, такими как Hermes и Omnigent.

Агенты

Raxol — это рантайм для агентов в той же мере, что и для людей. Каждый интерактивный компонент автоматически предоставляет инструменты MCP (Button даёт click, TextInput — type_into/clear/get_value), а линза фокусировки фильтрует примерно 15 релевантных инструментов на одно взаимодействие. В то время как A2UI и AG-UI определяют, как агенты взаимодействуют с интерфейсами на уровне протокола, raxol генерирует интерфейс и поверхность агента из одного дерева компонентов: один источник, две проекции.

import Raxol.MCP.Test
import Raxol.MCP.Test.Assertions

session = start_session(MyApp)

session

|> type_into("search", "elixir")
|> click("submit")
|> assert_component("results", fn c -> c[:content] != nil end)
|> stop_session()

mix mcp.server запускает MCP-сервер на stdio для интеграции с Claude Code, а mix raxol.code — это интерактивный терминальный агент кодирования (лицо axol) с каждым изменяющим вызовом инструмента, защищённым механизмом авторизации ALLOW/ASK/DENY. См. Агент кодирования.

Code — это продукт агента кодирования в двух практических поверхностях: mix raxol.code — интерактивный терминальный TUI (лицо axol ≡··≡), а mix raxol.p — его безголовый аналог (запрос на входе в argv, ответ на stdout, события контракта на stderr) для пайплайнов и CI. Каждый изменяющий вызов инструмента защищён механизмом авторизации ALLOW/ASK/DENY. Из клона достаточно одной команды настройки и одного запуска:

(cd packages/raxol_agent && mix deps.get)   # once
bin/raxol-code                              # the TUI, your cwd as the workspace

Не настроен API-ключ? TUI откроется с мастером выбора провайдера вместо ошибки. /inspect (или mix raxol.inspect из packages/raxol_agent) показывает все источники конфигурации, которые агент будет использовать в текущем каталоге.

Сессии устойчивы. Каждая сессия журналирует свои события на диск, поэтому --continue и --resume <id> восстанавливают контекст модели и историю чата вместе, --replay <id> выводит транскрипт прямо из журнала (--to-offset N останавливается на смещении), /rewind возвращает к более раннему ходу, а /share создаёт подписанную ссылку на 24 часа для доступа к транскрипту только для чтения, который следует за сессией в реальном времени (требуется RAXOL_SHARE_SECRET и хост, монтирующий Raxol.Agent.Code.ShareLive).

Тот же TUI доступен через SSH: mix raxol.code --ssh --ssh-tenants /srv/tenants обслуживает множество пользователей из одного демона, каждый за своим публичным ключом с собственным chroot-каталогом, хранилищем сессий и идентификатором расходов (ssh <you>@your-host -p 2222 — это весь клиент). Однотенантный режим (--authorized-keys) и размещённый деплой (RAXOL_SSH_CODE=true) описаны в Агенте кодирования.

Две автономные поверхности запускают один и тот же агент. bin/raxol-acp (или mix raxol.acp) предоставляет его по протоколу Agent Client Protocol через stdio для редакторов, которые самостоятельно запускают агента; Raxol.Agent.Harness.McpTools регистрирует harness_start_session, harness_send_prompt, harness_read_transcript и harness_list_sessions в реестре MCP, поэтому сессия, начатая MCP-клиентом, позже возобновляется в TUI. Обе поверхности используют инструментарий только для чтения: write_file, edit_file и bash отсутствуют там, где некому ответить на запрос подтверждения.

Каждая из этих поверхностей основана на Harness — движке сессий агента: долговечном журнале событий (Raxol.Agent.Journal), типизированном контракте событий/команд (Raxol.Agent.Contract) и состоянии поверхности, которое является чистой свёрткой потока событий (Raxol.Harness.Projection), с промежуточными шлюзами прерывания, управления и ограничения расходов/радиуса воздействия. Этот же движок может контролировать внешние CLI-агенты (claude, cursor) так же легко, как и собственный цикл Raxol. См. архитектуру Harness.

Подсистемы агента поставляются в виде отдельных пакетов:

  • Pay (raxol_payments): кошельки, лимиты расходов с контролем по бухгалтерской книге и прозрачная автооплата при получении HTTP 402, поддерживаются пять протоколов (x402, MPP, Xochi cross-chain, Permit2, Riddler).
  • Earn (raxol_earn): сторона продавца. Объявите предложение, реализуйте две функции обратного вызова, и агент-покупатель обнаружит его, поместит средства в эскроу и проведёт расчёт в блокчейне через жизненный цикл заданий Virtuals ACP (запрос, переговоры, транзакция, оценка, завершение) — один контролируемый процесс на задание. Пре-альфа.
  • Improve (raxol_agent): решённая задача становится повторно используемым SKILL.md. Фоновый рецензент работает на дешёвой модели после каждого хода, записывая долговременную память и новые навыки без затрат задержки или контекста текущего хода.
  • Reach (raxol_gateway): один адаптерный контракт для множества чат-платформ, сессии по одному процессу на чат, сопряжение DM для авторизации и /handoff для переноса беседы между платформами с сохранением истории.
  • Orchestrate (raxol_symphony): OTP-портирование OpenAI Symphony, который опрашивает трекер, изолирует каждую задачу в собственном рабочем пространстве и запускает агента кодирования, обеспечивая шесть поверхностей (терминал, LiveView, MCP, Telegram, Watch, JSON API) из одного снимка.
  • Bridge (raxol_agent_client_protocol): реализация Agent Client Protocol на Elixir/OTP: протокол JSON-RPC 2.0 для связи между редакторами кода и ИИ-агентами кодирования (протокол, который используют Zed и растущая экосистема). Двунаправленные роли агента и клиента, подключаемые транспорты (stdio, внутрипроцессный) и долговечные возобновляемые сессии (переподключение/воспроизведение на основе смещения) как расширение вендора. Нет внутренних зависимостей от Raxol. Пре-альфа.

Установка

# mix.exs
def deps do
  [{:raxol, "~> 2.6"}]
end

Или создайте новый проект:

mix raxol.new my_app

С помощью Nix команда nix develop помещает вас в оболочку с полным набором инструментов BEAM и NIF (установка Elixir локально не требуется):

nix develop github:DROOdotFOO/raxol   # dev shell with elixir, erlang, NIF + speech deps

Попробуйте

git clone https://github.com/DROOdotFOO/raxol.git
cd raxol && mix deps.get
mix raxol.playground          # 40 live demos, browse/search/filter

Флагманская демонстрация — это живая панель управления BEAM с загрузкой планировщика, спарклайнами памяти и таблицей процессов:

mix run examples/demo.exs

Полный учебный путь, включая примеры агентов, демонстрации роя и песочницу REPL, смотрите в examples/README.md.

Безголовая среда (CI, контейнеры, агенты)? Весь путь сборки и тестирования не требует терминала:

mix local.hex --force        # fresh machines and CI: install Hex without a prompt
mix deps.get
mix compile                  # termbox2 NIF needs make + a C compiler
SKIP_TERMBOX2_TESTS=true MIX_ENV=test mix test --exclude slow --exclude integration --exclude docker
MIX_ENV=test mix raxol.rate  # RATE: render-determinism golden suite

Предварительные требования, контроль качества и замечания по ограниченной песочнице описаны в разделе Разработка.

Производительность

Полный кадр за 5,0 мс на Apple M1 (Elixir 1.20 / OTP 29), что составляет 31% от бюджета 60 кадров в секунду.

Что Время
Полный кадр (создание + заполнение + дифф) 5,0 мс
Дифф дерева (100 узлов, 1 изменённый) 32 мкс
Запись ячейки (одиночная) 1,4 мкс
Создание буфера (80x24) 0,32 мкс
Обработка эмулятором (парсинг + применение, обычный) 1,7 мс
Память на буфер 80x24 2 КБ
Измерено 2026-08-07 на коммите fce2465bb с помощью mix run bench/suites/comparison/framework_comparison.exs (полный режим). Строка "ingest" включает весь путь эмулятора (парсинг и применение состояния), а не отдельный ANSI-лексер, который обрабатывает обычный текст менее чем за микросекунду (mix raxol.bench parser).

Бэкенд для Unix/macOS использует NIF termbox2; Windows использует чистый драйвер на Elixir (работоспособен, но ещё не оптимизирован). См. бенчмарк-сьют.

Документация

Начните здесь

Поваренная книга

Справочник

Продвинутые темы

Автономные пакеты: возьмите только нужную подсистему. Полная таблица в PACKAGES.md.

Разработка

Для работы с исходным кодом требуются Elixir/OTP (версии в .tool-versions) и инструментарий C: NIF termbox2 компилируется с помощью make и cc (в Debian/Ubuntu установите apt-get install build-essential). nix develop предоставляет всё необходимое в одной оболочке. Все команды ниже запускаются в фоновом режиме: для сборки, тестового набора или проверки эталонных данных терминал не требуется.

git clone https://github.com/DROOdotFOO/raxol.git
cd raxol
mix local.hex --force        # fresh machines and CI: install Hex without a prompt
mix deps.get
mix compile                  # builds the termbox2 NIF
SKIP_TERMBOX2_TESTS=true MIX_ENV=test mix test --exclude slow --exclude integration --exclude docker
MIX_ENV=test mix raxol.rate  # RATE: render-determinism golden suite
mix raxol.check              # full gate: format, compile, credo, dialyzer, security, docs, rate, test
mix raxol.check --quick      # skip dialyzer
mix raxol.demo               # built-in demos (needs a terminal)

SKIP_TERMBOX2_TESTS=true исключает тесты, требующие реального локального терминала (жизненный цикл pty, тесты с чувствительностью ко времени); CI устанавливает ту же переменную. Обычный mix test без флагов исключения также запускает интеграционные тесты, требующие внешних сервисов (тесты контрольных точек рабочего процесса требуют PostgreSQL через RAXOL_WORKFLOW_PG_URL), поэтому придерживайтесь команды выше, если они не настроены. В песочницах, где HOME доступен только для чтения, укажите MIX_HOME и HEX_HOME на записываемый каталог перед запуском mix.

Происхождение

Raxol начался с двух сходящихся идей: терминал для ИИ, где агенты взаимодействуют с настоящим эмулятором терминала так же, как люди; и интерфейс для кабины костюма Gundam Wing Suit, где изоляция отказов, отзывчивость в реальном времени и сенсорный синтез критически важны для выживания. Идея с Gundam звучит как шутка. Но если посмотреть на набор ограничений, то это именно то, для чего был создан OTP: системы, которые не могут выходить из строя, не могут терять состояние и должны горячо заменять компоненты во время работы.

Создано с помощью Raxol


Xochi — это приватный кроссчейн-DEX (обмены на основе интентов между 6 цепочками, расчёт менее чем за 3 секунды, скрытые адреса по умолчанию, доказательства соответствия ZKSAR), вся торговая поверхность которого построена на raxol. Одно дерево компонентов проецируется четырьмя способами: SSH-терминал для трейдеров, LiveView веб-интерфейс, поверхность solver-агента для солвера Riddler с задержкой менее 2 мс и оперативный пульт, выполняющий сенсорный анализ состояния солверов. Солвер работает за выделенным стеком с отказом в безопасном режиме (предварительно подписанные интенты покупателя, шлюзы расходов, контролируемые леджером, защитные механизмы развёртывания, отказывающиеся запускаться без конфигурации), намеренно вынесенным за пределы поверхности MCP, чтобы ни одно действие, связанное с перемещением средств, не было доступно как универсальный вызов инструмента.

foglet-bbs от Брендана Тёрнера — это ретро-доска объявлений, доступная только через SSH (bbs.foglet.io, ssh bbs.foglet.io), которая помогла отладить SSH-путь raxol.

Лицензия

MIT. См. LICENSE.md.

Войдите, чтобы оставить комментарий