hax — минималистичный coding-агент для терминала, написанный на C

· 2 мин чтения
coding-agent terminal cli local-llm open-source
📂 Исходный код на GitHub

Минималистичный терминальный coding-агент, написанный на C: один нативный бинарник, локальные модели как первоклассные граждане, честный Unix-инструмент без плагин-рантаймов и IDE-панелей.

hax — минималистичный coding-агент для терминала, написанный на C

Большинство coding-агентов сегодня — это Node-пакеты на сотни мегабайт, с плагин-рантаймами, MCP-маркетплейсами и IDE-панелями. Проект hax идёт ровно в противоположную сторону: это терминальный агент, написанный на чистом C, который компилируется в один нативный бинарник, стартует мгновенно и потребляет лишь несколько мегабайт памяти. Идея простая: если агент экономный, у локальной модели остаётся больше оперативной памяти для контекста и весов.

Проект развивается активно — около 800 звёзд на GitHub, лицензия MIT, есть собственный сайт usehax.dev. В этой статье разберём, что внутри, кому он нужен и как его запустить.

Ключевые особенности

Лёгкость по дизайну. Один нативный бинарник на C с небольшим набором зависимостей. Никакого рантайма, никакого интерпретатора — отсюда мгновенный старт и минимальное потребление памяти. Автор прямо позиционирует это как преимущество для работы с локальными моделями: каждый мегабайт, сэкономленный агентом, достаётся модели.

Локальные модели как первоклассные граждане. Достаточно запустить llama-server -m [model].gguf, а затем hax --provider llama.cpp — hax сам обнаружит модель и возможности рантайма. Отдельный конфиг для провайдера не нужен. Ollama поддерживается аналогично: работает ollama serve — работает и hax.

Уважение к терминалу. Агент стримит Markdown и вывод инструментов в реальном времени, переразбивая строки под ширину окна. Перерисовывается только текущая стриминговая строка или область ввода — нативный scrollback терминала сохраняется. hax не захватывает терминал целиком и не ломает его поведение, что редкость для TUI-приложений.

Прозрачность. Встроенный просмотр транскрипта (Ctrl+T) показывает ровно то, что было отправлено модели и что она ответила. Опционально можно включить детальный трейс wire-протокола — полезно, если вы хотите понять, что именно агент шлёт в API.

Широкая поддержка провайдеров. OpenAI (и совместимые), Anthropic (и совместимые), Codex (через подписку ChatGPT), OpenRouter, OpenCode Zen/Go, llama.cpp, Ollama и произвольные кастомные эндпоинты.

Приличный Unix-инструмент. Пути по XDG-спецификации, чистый stdout в одношотовом режиме -p с подсказками для resume в stderr, читаемые текстовые конфиги и файлы сессий, композиция через подпроцессы вместо системы плагинов.

Философия: чего в hax сознательно нет

Это, пожалуй, самая интересная часть проекта. В hax намеренно отсутствуют:

  • MCP-маркетплейсы;
  • рантайм плагинов;
  • IDE-панели;
  • пермишен-промпты на каждую команду.

Автор не скрывает: если вам нужен именно такой набор функций — есть куча других агентов, которые его дают. hax вместо этого закрывает эти потребности проверенными Unix-паттернами: композиция через подпроцессы, текстовые файлы, стандартные потоки. Каждое «упущение» подробно обосновано в документе docs/philosophy.md в репозитории — редкий случай, когда проект честно объясняет, почему он чего-то не умеет.

Целевая аудитория сформулирована там же: разработчики, которые живут в терминале, гоняют локальные модели, аудитируют поведение своих инструментов, собирают пакеты для дистрибутивов или запускают агентов там, где ресурсов мало.

Установка

hax работает на Linux, macOS, FreeBSD и OpenBSD; на Windows — через WSL. BSD-системы собираются только из исходников.

Homebrew (macOS или Linux):

brew install oleksandrchekhovskyi/hax/hax

Arch Linux — пакет hax есть в AUR.

Любой другой дистрибутив — скачайте прекомпилированный статический бинарник (x86_64 или aarch64) со страницы релизов и распакуйте hax в любой каталог из PATH.

Сборка из исходников — даёт бинарник, слинкованный с системными shared-библиотеками вместо статического:

git clone https://github.com/OleksandrChekhovskyi/hax.git
cd hax
scripts/install_deps.sh   # Debian/Ubuntu, Fedora, Arch, openSUSE, Alpine, macOS, FreeBSD, OpenBSD
make                      # binary lands at ./build/hax
make install              # optional; may prompt for sudo

Скрипт install_deps.sh ставит зависимости: компилятор C, libcurl, jansson, meson, ninja, pkg-config, а также fzf — его hax использует для автодополнения @file, если он доступен. Для разработки удобно make symlink — свежесобранный бинарник линкуется в ~/.local/bin и остаётся на PATH между пересборками. Для линтера дополнительно нужны clang-format и clang-tidy (scripts/install_deps.sh lint).

В примерах ниже предполагается, что hax на PATH; после обычной сборки используйте ./build/hax.

Подключение провайдера

Самый простой первый запуск — интерактивный: стартуйте hax и выполните /provider, чтобы увидеть доступных провайдеров и выбрать модель. Интерактивные выборы провайдера, модели и уровня effort запоминаются.

Провайдер Настройка
codex /login внутри hax
openai переменная OPENAI_API_KEY
anthropic переменная ANTHROPIC_API_KEY
openrouter переменная OPENROUTER_API_KEY
opencode-zen / opencode-go переменная OPENCODE_API_KEY
llama.cpp запущенный llama-server
ollama запущенный ollama serve
совместимый или кастомный эндпоинт см. docs/providers.md

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

Запускайте hax из каталога проекта, в котором он должен работать:

hax                         # interactive REPL
hax -p "list TODOs"         # run one prompt, print the final answer
printf "explain x" | hax -p # read the prompt from stdin
hax -c                      # continue the latest session for this directory
hax --resume                # pick a past session for this directory
hax --resume=ID -p "next"   # resume a specific session in one-shot mode

hax --help покажет использование CLI, а /help в REPL — слэш-команды и горячие клавиши. Более подробная документация по использованию — в docs/usage.md.

Обратите внимание на то, как устроены сессии: hax -c продолжает последнюю сессию именно для текущего каталога, а --resume позволяет выбрать из прошлых. В одношотовом режиме -p stdout остаётся чистым — только финальный ответ, а служебные подсказки идут в stderr. Это делает hax удобным для пайпов: агент можно встроить в скрипт или вызвать из другого инструмента, получив предсказуемый вывод.

Конфигурация и сессии

Конфигурация опциональна. Логика разрешения настроек прозрачная: интерактивные выборы запоминаются отдельно от конфиг-файла, флаги CLI действуют только на текущий запуск, переменные окружения удобны для шелла и скриптов. Возобновлённые разговоры восстанавливают свои провайдер, модель, effort и пресет — если только флаг CLI не переопределяет выбор.

Формат файла конфигурации, порядок разрешения, пресеты и полный справочник настроек описаны в docs/configuration.md. Формат файлов сессий и поток hax --json — в docs/sessions.md: сессии лежат в человекочитаемом текстовом формате, что снова работает на прозрачность и совместимость с Unix-инструментами.

Отладка и вклад в проект

Для тех, кто хочет копнуть глубже, в docs/debugging.md описаны трейсы и логи транскрипта, mock-провайдер и демо-скрипты — можно разрабатывать и тестировать hax вообще без доступа к реальным LLM API.

Проект принимает контрибуции: правила подготовки и отправки изменений описаны в CONTRIBUTING.md. Для C-проекта настроен приличный инструментарий качества: .clang-format и .clang-tidy в репозитории, цель make lint, плюс тесты в каталоге tests и сборка через Makefile и meson.

Почему это интересно

hax — это ответ на вопрос: каким был бы coding-агент, если бы его писали в традициях Unix, а не в традициях npm. Небольшой бинарник на C, который стартует за миллисекунды, честно показывает, что отправляет модели, работает с локальной llama-server-инсталляцией «из коробки» и не пытается захватить ваш терминал — это одновременно и рабочий инструмент, и образец инженерной культуры. Если вы разработчик с локальной моделью на ноутбуке, мейнтейнер пакета в дистрибутиве или просто любите минимализм — hax заслуживает внимания. А если вам нужны маркетплейсы и плагины, автор честно скажет: возьмите другой агент.

Источник: https://github.com/OleksandrChekhovskyi/hax