by DROOdotFOO (community) Claude Desktop, Claude Code, OpenCode, macOS, Linux, Erlang/OTP, Phoenix LiveView, termbox2, SSH
Напиши одно приложение — рендери его в терминал, браузер или как инструменты агента. Терминал для вашего Гандама.
Python-фреймворк для быстрого создания MCP-серверов. Декораторы @mcp.tool, @mcp.resource, @mcp.prompt — минимальный бойлерплейт. Поддерживает HTTP/SSE и stdio …
MCP-сервер для доступа к актуальной документации библиотек прямо в контексте LLM. Вместо устаревших обучающих данных — …
Официальный MCP от команды Chrome DevTools: дает AI-агентам полный доступ к инструментам разработчика браузера. Автоматизация через …
Официальный MCP-сервер от Microsoft для управления браузером через Playwright. Использует accessibility tree вместо скриншотов — быстрее, …
# mix.exs
def deps do
[{:raxol, "~> 2.6"}]
end
mix raxol.new my_app
nix develop github:DROOdotFOO/raxol
Рекурсивно, axol. Навсегда FOSS.
Напишите одно приложение. Запускайте его в терминале, браузере, 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).
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.
Подсистемы агента поставляются в виде отдельных пакетов:
raxol_payments): кошельки, лимиты расходов с контролем по бухгалтерской книге и прозрачная автооплата при получении HTTP 402, поддерживаются пять протоколов (x402, MPP, Xochi cross-chain, Permit2, Riddler).raxol_earn): сторона продавца. Объявите предложение, реализуйте две функции обратного вызова, и агент-покупатель обнаружит его, поместит средства в эскроу и проведёт расчёт в блокчейне через жизненный цикл заданий Virtuals ACP (запрос, переговоры, транзакция, оценка, завершение) — один контролируемый процесс на задание. Пре-альфа.raxol_agent): решённая задача становится повторно используемым SKILL.md. Фоновый рецензент работает на дешёвой модели после каждого хода, записывая долговременную память и новые навыки без затрат задержки или контекста текущего хода.raxol_gateway): один адаптерный контракт для множества чат-платформ, сессии по одному процессу на чат, сопряжение DM для авторизации и /handoff для переноса беседы между платформами с сохранением истории.raxol_symphony): OTP-портирование OpenAI Symphony, который опрашивает трекер, изолирует каждую задачу в собственном рабочем пространстве и запускает агента кодирования, обеспечивая шесть поверхностей (терминал, LiveView, MCP, Telegram, Watch, JSON API) из одного снимка.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: системы, которые не могут выходить из строя, не могут терять состояние и должны горячо заменять компоненты во время работы.
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.