cast: агент, которому всё равно, какая модель
≈ 2 минуты
Про устройство cast у меня есть серия из девяти частей. Там про цикл, компакцию, роли и демон. Здесь короче: что это, зачем и как поставить.
Боль была простая. Кодовые агенты привязаны к своему вендору: один работает только с Claude, другой только с OpenAI, а у меня модели крутятся где придётся: на OpenRouter и на vLLM на своей машине. Каждый раз новый инструмент, новые привычки, новый формат конфигов. Хотелось одну оболочку, которая говорит с любым OpenAI-совместимым API и не спрашивает, чья модель за ним.
Так в июле появился cast. Сейчас в нём 345 коммитов и версия 0.41.
Главная идея в названии: это состав ролей. Семь встроенных: senior-разработчик, аналитик, ревьюер, планировщик, исследователь, ассистент и кодер с субагентами. Инструменты у всех одни, bash, read, write, edit, glob, grep, ls, ssh, веб-поиск, суждение разное. Наведи senior и ревьюера на один коммит, и они посмотрят в разные места. Своя роль пишется markdown-файлом с frontmatter, где можно и сузить набор инструментов, и запретить делегирование. Ограничение проверяет код, промпт тут ни при чём.
Дальше обычный набор для работы в репозитории: параллельные вызовы инструментов, субагенты с изолированным контекстом, режим планирования с read-only bash, правила проекта в формате Cursor, навыки по спецификации Agent Skills, MCP-серверы, AGENTS.md из корня и всех родительских каталогов. Память между сессиями в markdown-файлах.
Интерфейсов два. Терминальный на Ink, с многострочной вставкой и картинками. И cast web: браузерная комната с фоновыми агентами, потоком токенов и просмотром диффов, те же сессии, что в терминале. Оба ходят в один демон, поэтому сессию, начатую с ноутбука, можно проверить с телефона. Плюс ACP, так что cast подключается к Zed и JetBrains как подпроцесс редактора.
curl -fsSL https://aa-blinov.github.io/cast/install | bash
cast # спросит URL провайдера и ключ
cast -m qwen/qwen3-235b-a22b "объясни, что делает этот проект"
cast -c # продолжить последнюю сессию
Нужен Node 22, дальше один бандл без npm-пакетов в рантайме. Ни аккаунта, ни телеметрии, ни облачной зависимости: если модель стоит на твоём железе, наружу не уходит ничего.
Если тебе нравится Claude Code и ты сидишь на Claude, cast не нужен. Он для случая, когда моделей несколько, часть из них локальные, и хочется одну оболочку с понятными границами.