Терминал как dev-окружение в эпоху агентов

Когда IDE перестала быть центром разработки

В какой-то момент я поймал себя на мысли: у меня больше нет «основного инструмента разработки».

Есть Xcode, VSCode, терминал, таск-трекер, wiki, Git-клиент — и ещё десяток окон. Любая задача превращается в переключение между ними.

И это казалось нормой. Потому что по-другому просто не было.

Но всё начало меняться, когда в рабочие процессы пришли БЯМ.

Больше года я использую их в работе, и постепенно дошёл до простой мысли:
большинство действий я теперь делаю через агента.

Агенты:

  • проводят исследования
  • пишут код
  • работают с задачами
  • взаимодействуют с календарём
  • и делают ещё десятки вещей

Раньше под каждую из этих задач был отдельный инструмент.

Теперь — один интерфейс.

И это полностью ломает привычную модель разработки.


Почему одного чата недостаточно

Когда агенты становятся основным инструментом, вскрывается важное ограничение.

Агент — это не «умный IDE». Это система с очень конкретными границами.

Первая проблема — контекст.

Контекстное окно не бесконечное. Более того, его эффективный размер довольно маленький.
Если складывать туда всё подряд, модель быстро начинает деградировать: теряет нить, путается и даёт всё более слабые ответы.

Вторая проблема — артефакты.

Чтобы агент работал эффективно, ему нужно помогать:

  • передавать документы
  • давать планы
  • подсовывать код
  • сохранять результаты отдельно

И вот тут происходит важный сдвиг:
работа начинает строиться не вокруг чата, а вокруг набора артефактов + контекста.

Чат — это просто интерфейс. Не источник истины.

Из этого следует простое правило:
под каждую задачу нужен отдельный контекст.

А значит:

  • отдельные чаты
  • отдельные наборы файлов
  • отдельные состояния

Изначально я пытался делать это в VSCode. Там есть всё: чат, файлы, терминал.

Но очень быстро начался хаос:

  • десятки вкладок
  • непонятно, где какая задача
  • какие у агента доступы
  • какие подключены «скиллы»

И самое главное — ощущение потери контроля.

Часть задач при этом всё равно уезжала в терминал.

В какой-то момент стало очевидно:
IDE перестала быть центром разработки.

И тогда я решил пойти в самое базовое и универсальное окружение — в терминал.


Ghostty: терминал как основа окружения

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

И даже организовать вкладки под разные задачи.

В качестве терминала я выбрал Ghostty — он быстрый и имеет отличные настройки по умолчанию.

Установка:

brew install --cask ghostty

Дальше — небольшая настройка, чтобы избежать конфликтов хоткеев с мультиплексором:

# config.ghostty
macos-option-as-alt = true
keybind = alt+left=unbind
keybind = alt+right=unbind
keybind = alt+up=unbind
keybind = alt+down=unbind

Без этого часть горячих клавиш в Zellij просто не будет работать.


Zellij: сессии и панели под каждую задачу

Следующий шаг — организация пространства внутри терминала.

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

Я выбрал Zellij. Да, отчасти потому что он «модный и стильный», но главное — он быстрый и удобный.

Zellij поддерживает панели, плагины, сессии — в общем, всё, что нужно.

Установка:

brew install --cask zellij

Добавляем layout:

# ~/.config/zellij/layouts/dev.kdl
layout {
    default_tab_template {
        pane size=1 borderless=true {
            plugin location="zellij:tab-bar"
        }
        pane split_direction="vertical" {
            pane stacked=true {
                pane command="yazi"
                pane command="lazygit"
                pane
            }
            pane command="claude" size="30%"
        }
        pane size=2 borderless=true {
            plugin location="zellij:status-bar"
        }
    }
}

Таких layout’ов можно сделать несколько — под разные типы задач или конкретные сценарии работы.

Добавляем удобную команду запуска:

# .zshrc

dev() {
  local title

  if [ $# -gt 0 ]; then
    title="$*"
  else
    title="$(basename "$PWD")"
  fi

  title="${title//\//-}"
  zellij options \
    --session-name "$title" \
    --attach-to-session true \
    --default-layout dev
}

Команда создаёт сессию с именем текущей папки или заданным вручную. Так проще не теряться между задачами: можно назвать сессию по проекту, тикету или проблеме, которую сейчас решаешь.


Claude Code и Codex: агенты внутри рабочего окружения

В качестве агентов в терминале я использую Claude Code и Codex.

Тут, пожалуй, нечего особо добавить: в CLI они ощущаются даже удобнее, чем в UI.

Главное отличие в том, что агент перестаёт быть отдельным окном «где-то рядом». Он становится частью рабочего окружения: рядом с файлами, Git, терминалом, логами и всеми артефактами задачи.


Vim: редактор, который не выбивается из потока

Редактором стал Vim.

Конечно, потому что истинные гении инженерной мысли используют Vim.

Но если серьёзно — он хорошо ложится в терминальный workflow. Не нужно переключаться в отдельное приложение, не нужно вываливаться из сессии, не нужно ломать контекст.

Открыл файл, поправил, вернулся к агенту, посмотрел diff, запустил команду — всё в одном пространстве.


Yazi: быстрая навигация по файлам

Для быстрой навигации и просмотра файлов можно было взять MC, но зачем, если есть более современное решение в лице Yazi.

Он быстрый, удобный и поддерживает vim-подобные хоткеи.

Я почти его не настраивал, только добавил функцию, чтобы после выхода оставаться в последней директории:

function y() {
    local tmp="$(mktemp -t "yazi-cwd.XXXXXX")"

    yazi "$@" --cwd-file="$tmp"

    if cwd="$(cat "$tmp")" && [ -n "$cwd" ] && [ "$cwd" != "$PWD" ]; then
        cd "$cwd"
    fi

    rm -f "$tmp"
}

Мелочь, но очень полезная: можно походить по проекту через Yazi, выйти — и сразу оказаться там, где закончил навигацию.


Lazygit: Git без выхода из сессии

Для работы с Git я выбрал lazygit.

Он закрывает почти все повседневные сценарии:

  • посмотреть diff
  • собрать commit
  • переключиться между ветками
  • сделать rebase
  • быстро понять состояние репозитория

Да, возможно, когда-нибудь я найду ещё более blazing fast альтернативу. Но пока lazygit просто делает свою работу и хорошо вписывается в терминальное окружение.


Как это складывается в единый workflow

Со временем вся эта система начала складываться в единый workflow:

  • каждая задача — отдельная сессия
  • у каждой сессии — свой контекст
  • агент работает не в «чате», а в окружении
  • терминал становится точкой сборки всего этого

В итоге терминал оказался не просто альтернативой VSCode.

Он стал чем-то большим —
операционной системой для работы с агентами.

IDE строились вокруг кода.

Терминал — вокруг процессов.

А в эпоху агентов именно процессы становятся главным.


Как выглядит один мой рабочий цикл

У меня есть три типовых сценария работы:

  • изменения в коде (основные проекты, утилиты, инфраструктура)
  • ресёрч, проектирование и документация
  • быстрые вопросы и навигация по знаниям

1. Работа с кодом

Цель — внести конкретные изменения в проект.

Обычно здесь не требуется много артефактов: максимум — файл с планом.

Я открываю терминал, перехожу в папку проекта и запускаю zellij с dev-layout, называя сессию по задаче.

Дальше:

  • при необходимости смотрю структуру проекта через Yazi
  • проверяю состояние репозитория через Lazygit
  • основное взаимодействие — с агентом

Я передаю агенту задачу и контекст.
Если плана нет — прошу его сформировать и сохранить в plan.md.

План я быстро просматриваю через Yazi или Vim, после чего отдаю задачу на выполнение.

Агент занимает фиксированное место на экране, а вторую панель я переключаю между Lazygit и файловым менеджером — для проверки изменений и навигации.


2. Ресёрч и документация

Здесь я работаю не с кодом, а с идеями, структурами и текстами.

У меня есть отдельная директория с проектами: от небольших заметок до больших ресёрчей.

Я выбираю нужный проект и так же поднимаю сессию в zellij.

Внутри — в основном .md файлы.
Связка Yazi + Vim позволяет:

  • быстро перемещаться по материалам
  • редактировать вручную
  • или делегировать задачи агенту

При этом агент работает не только с локальными файлами.

Он даёт доступ к корпоративным системам — wiki, таск-трекеру и другим источникам.
Причём в обе стороны:

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

Агент здесь особенно полезен: он помогает структурировать мысли, дополнять материалы и связывает локальный контекст с внешними системами.


3. Быстрые вопросы

Это самый лёгкий сценарий.

Отдельная вкладка терминала, где открыт только агент.

Без сессий, без сложной структуры — просто задать вопрос:

  • как что работает
  • где что лежит
  • кто за что отвечает
  • какие задачи актуальны

Как это ощущается в целом

Одновременно у меня может быть открыто больше десятка таких сессий.

Но я не теряюсь: по названию сразу понятно, какая сессия за что отвечает.

Внутри каждой — полный набор инструментов:
агент, Git, редактор, файловая навигация и терминал.

Если нужно — я добавляю панели под конкретную задачу, не выходя из контекста.

Вся работа оказывается собрана в одном месте:
без переключений между приложениями, без потери состояния.

Терминал в итоге становится не просто интерфейсом,
а средой, в которой каждая задача живёт своей изолированной жизнью —
и при этом остаётся под полным контролем.


Опубликовано

в

от

Метки:

Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *