1. Опись арсенала по функции, а не по новизне
Перед последней задачей части Лёха притормаживает Тёму у самого входа.
— Стоп, не бросайся, — пишет он. — Задача сегодня последняя, важная — давай перед работой разложим всё, что ты за этот месяц нажил. Ты ж месяц хватал инструмент за инструментом: скилы, агентов, git, тесты, дифф, планы, руль доверия. Свалено всё в одну кучу. Прежде чем идти в бой, полезно разок вытряхнуть ящик и посмотреть, чем ты вообще воюешь.
Тёма уже открывает рот похвастаться количеством — смотри, сколько я всего умею, — но Лёха обрывает:
— Только не считай трофеи. Раскладываем не по новизне — по тому, зачем оно. Три корзины: что чинит, что проверяет, что страхует.
Он роняет имя бланку между делом — TOOLBOX_MAP, опись арсенала по функции — и больше не разжёвывает. Тёма садится раскладывать сам, по одной штуке за раз.
— Браузер куда? — уточняет он спорный край. — А, в «проверяет», когда он доказывает, что игра проходима. Откат — это чинит или страхует?
— Страхует, — кивает Лёха.
Тёма раскладывает — и чем дальше, тем больше его самого забирает. Он-то думал, всего пара штук наберётся. А оно всё сыплется и сыплется: скилы, плагины, агенты, мост к данным, хуки, голос, git с его командами, тесты, логи, дифф, браузер, планы, руль, гигиена окна… Рука не поспевает. К концу на экране — три забитых столбца:
⚙️ TOOLBOX_MAP — арсенал за Часть I
| 🔧 Чинит · двигает задачу | 🔍 Проверяет · даёт улику | 🛡️ Страхует · стелет соломку |
|---|---|---|
| агент в CLI (не чат) | тест: красный / зелёный | git init · add · commit |
| скил: поставить готовый | честный тест (кр → зел) | git checkout · log · diff |
| скилы: комбинировать | /diff — смотреть правки | ветка под задачу |
| плагин: набор фич сразу | триаж: лишнее / опасное / ± | /rewind — отмотать сессию |
| субагент-помощник | логи и стектрейс как улика | режим плана (defaultMode) |
| MCP-мост к данным | браузер: проход по сценарию | руль доверия (manual/accept) |
| хук: событие → действие | скриншот + vision-модель | TASK_SPEC — постановка |
| голос в агента (s2t) | success marker (флаг «прошёл») | scope — запретный блок |
| @точечная подача файла | EVIDENCE_LOG — пакет улик | /context — глянуть окно |
| goal-lite — цель по рецепту | DELIVERY_REPORT — сводка | /compact · /clear |
| среда: IDE + плагины | «готово = доказано» | CLAUDE.md + память проекта |
Тёма откидывается на спинку и молча смотрит на эти три столбца. Он не считал по ходу — а теперь видит разом, и это как-то… много. Он же помнит себя месяц назад: один голый терминал и «да чё там, ИИ сам всё сделает».
— Ё-моё, — вырывается у него. — Это я всё умею? Месяц назад я вообще ничего не умел.
— Умеешь, — коротко подтверждает Лёха. — И заметь, тут ещё нет всякой теории, которую ты попутно нахватал. Как устроен веб, что такое API, тесты, чтение чужого кода. Одни только инструменты.
А под инструментами — второй слой, который Тёма тоже прошёл, но который в корзины не ложится: не «чем я делаю», а «что я теперь понимаю про саму разработку».
📚 Что я теперь понимаю про разработку (DEV)
| Тема | Что понял |
|---|---|
| как устроен веб | HTML / CSS / JS — каркас, вид, поведение |
| как живёт сайт | сервер · IP · домен · деплой («работает у меня» ≠ «у всех») |
| откуда данные | API — окошко сервиса; JSON-ответ; MCP — мост к нему |
| событийная модель | событие → действие (хук как датчик движения) |
| что такое проверка | проход по сценарию · тест кр→зел · скриншот-как-улика |
| что такое git-мир | main · ветка · коммит · дифф — история, а не склад копий |
| симптом ≠ корень | лог/стектрейс ведёт к причине, а не только к месту взрыва |
| чтение чужого кода | объект чтения = изменение (diff); scope как контракт |
| жанры задач | фича / багфикс / рефакторинг / разведка — у каждого свой руль |
| окно внимания | агент видит не весь repo, а окно; контекст выносим наружу |
И когда всё легло, Тёма смотрит на обе карты и осекается — но уже по-другому. В ту ночь у него из первой карты была заполнена только левая колонка. «Чинит». А «проверяет» и «страхует» — пустые. Ничего толком не проверял, соломки нигде не стелил.
— Слушай, — пишет он Лёхе. — Так вот почему оно так легко рухнуло. У меня же был один сплошной «чинит». Гнал и гнал, а противовеса — ноль. Любой сбой валил всё насмерть, ловить было нечем.
— Вот теперь видишь свой арсенал как систему, — отвечает Лёха. — Не как кучу разноцветной магии, а как набор под три разные работы. Это пока грубая карта, стартовая. Полную науку «что когда вытаскивать» оставим на дальше. Но главное ты ухватил.
2. Забитое окно — агент тупеет
Тёма садится за фикс — и залипает надолго. Баг с начислением наград оказался размазан по нескольким местам: сперва он с агентом лезет в reward-flow.js, потом выясняется, что правила лежат в rules.md, потом всплывает, что на начисление влияет ещё и таблица лидеров — открывают leaderboard.js. Файл за файлом, каждый агент прочитал целиком. Попутно Тёма гоняет варианты: «а если так?» — не то, откатили; «а может, вот эдак?» — тоже мимо, вернулись. Десяток подходов, три открытых файла, гора отвергнутого — и всё это болтается в разговоре.
И к концу часа он замечает странное. Агент, который с утра был бодрый и точный, начинает тупить. Предлагает вариант, который они полчаса назад вместе выкинули. Путает rules.md с leaderboard.js. На простой вопрос отвечает так, будто впервые видит задачу.
— Слышь, — пишет Тёма Лёхе, — а чего это он поглупел? Модель, что ли, сломалась? Или у меня лимит какой кончился?
— Ни то, ни другое, — отвечает Лёха. — У него забилось окно внимания.
— Это которое с уровня про большой портал?
— Оно самое. Помнишь, мы говорили: агент видит не весь проект магически, а только то, что влезло в окно — вашу историю разговора, поданные файлы, правила. Окно не резиновое.
— И что?
— А то, что вы за этот час натаскали в окно три файла целиком плюс десяток отвергнутых попыток. Всё это там так и висит — и нужное, и мусор вперемешку. Агент теперь на каждый твой вопрос перечитывает всю эту свалку. Не «он поглупел» — он захлебнулся. Симптомы ровно такие: тащит старое, путает файлы, спорит сам с собой.
— И что, ничего не сделать?
— Сделать. Есть на это отдельный навык — гигиена внимания, как раз им сегодня и займёмся. Штука контринтуитивная: иногда, чтоб агент «поумнел», надо не добавить ему контекста, а выкинуть лишнее. Давай сперва глянем, что у него там в окне.
3. Заглянуть в окно: /context
— Первое правило, когда что-то поехало: не чини вслепую, сперва осмотрись, — пишет Лёха. — Как в чужом коде не лезут править, пока не поняли, что там. С окном так же: прежде чем чистить, глянь, чем оно вообще забито. Команду ты знаешь ещё с портала:
/context # показать, что сейчас лежит в окне внимания
Тёма набирает — и в терминал вываливается длинная опись. Не «модель устала», а буквальный список, чем набито окно:
Context window: 78% used (156k / 200k tokens)
System prompt ............... 3k
Правила проекта (CLAUDE.md) . 4k
src/reward-flow.js .......... 12k ← нужный
src/rules.md ................ 6k ← нужный
src/leaderboard.js .......... 18k
История диалога ............. 108k ← 47 сообщений
...отвергнутые варианты, старые правки, зачитанные файлы
Тёма смотрит на это и половину не понимает — циферки, проценты. Что тут много, а что мало, ему пока не считать.
— Ну загружено и загружено, — пишет он. — Мне это о чём говорить должно?
— А ты пройдись со мной по строчкам, — отвечает Лёха. — Вот reward-flow.js и rules.md — это по делу, тебе их и надо было подать. А теперь смотри ниже. leaderboard.js — восемнадцать тысяч, целый файл, который ты открыл на минуту и давно закрыл. Он тут всё ещё висит. Дальше — сто восемь тысяч на историю: сорок семь сообщений, и добрая половина — это твои «а если так?» и наши откаты, которые уже неактуальны. Видишь? Из ста пятидесяти шести тысяч по делу — хорошо если четверть. Остальное — хлам, который агент таскает за собой на каждый твой вопрос.
Тёма ведёт глазом по списку — и до него доходит.
— Погоди. То есть он не тупой. Он просто заваленный. — Он усмехается. — Как я сам к концу дня, когда в браузере сто вкладок открыто и я в них тону.
— Один в один, — отвечает Лёха. — И теперь ты не «веришь мне на слово», а сам видишь свалку. Дальше — как её разгрести.
4. Два рычага: /compact и /clear
— Засорилось — чистим, — продолжает Лёха. — И тут два разных инструмента под две разные ситуации, не путай.
Первый — сжать:
/compact # уплотнить историю, оставив суть, выкинув шум
/compact focus on reward-flow # сжать, но удержать важное про начисление наград
— /compact берёт ваш раздутый разговор и резюмирует, — Лёха разбирает по словам. — Оставляет суть, выкидывает шум, а сессию продолжает — вы дальше работаете с тем же делом, просто без хлама. И заметь второй вариант: можно подсказать, что именно сберечь. focus on reward-flow — «ужми, но про начисление наград ничего важного не потеряй». Это когда суть разговора ещё нужна, но он распух.
Тёма гоняет /compact и снова открывает /context — глянуть, что стало:
Context window: 22% used (44k / 200k tokens)
System prompt ............... 3k
Правила проекта (CLAUDE.md) . 4k
src/reward-flow.js .......... 12k
src/rules.md ................ 6k
История диалога (сжата) ..... 15k ← было 108k
— О, — пишет Тёма. — Семьдесят восемь было, стало двадцать два. И leaderboard.js этот дурацкий пропал, и переписка усохла. А дело-то всё на месте — начисление, правила.
— Вот. Разговор тот же, только без свалки. Агент снова видит нужное и перестаёт путаться.
Второй рычаг — сбросить, и он тебе тоже знаком:
/clear # чистое окно, новая сессия (старая сохранится, к ней вернёшься)
— /clear не сжимает — он обнуляет окно набело, как новая сессия с чистого листа. Дашь /clear — и /context покажет почти пустое окно: только системная часть да правила проекта, ни файлов, ни истории. Всё, что было, ушло (старая сессия сохранится, вернёшься при желании).
— А в чём тогда разница-то, когда какую? — уточняет Тёма.
— Простое правило, — отвечает Лёха. — /compact продолжает тот же разговор, только ужатый. /clear начинает новый с нуля. История ещё нужна, но раздулась — жми /compact. Задача закрыта, впереди совсем другая — /clear, чтоб мусор прошлой не тащился в следующую. Одно — уплотнить, другое — обнулить.
5. Точечная подача файлов через @файл
— И есть еще профилактика, чтоб окно вообще так не засорялось, — добавляет Лёха. — Смотри, с чего ты сегодня утоп. Ты ж как зашёл в фикс? По привычке новичка: «на, агент, прочитай весь портал и разберись». Звучит солидно — пусть, мол, вникнет во всё. А на деле ты этой одной фразой затащил в окно десятки файлов, из которых к начислению относятся два. Остальные — вёрстка, лидерборд, бонус-игра, чужая partner-зона — агенту сейчас без надобности, но они уже в окне и уже мешают. Ты сам, своими руками, забил ему окно хламом ещё до первого вопроса.
— А как надо-то?
— Подавать точечно. Не «прочитай всё», а «вот ровно эти файлы». И для этого есть удобная штука. Начинаешь печатать @ — и терминал сам показывает список файлов проекта, выбираешь нужный, не набирая путь целиком:
Поправь @src/reward-flow.js, опираясь на @src/rules.md.
— Собачка @ — это не просто «упомянул имя», — разбирает Лёха. — Печатаешь @, всплывает список, тыкаешь в нужный файл — он подставился и точно ушёл в окно, без опечаток в пути. Даёшь два-три нужных, и всё. Не «осмотри весь проект», а «вот зона работы, вот правила». Дешевле, быстрее, меньше шума — агент держит в голове только относящееся к делу, а не весь репозиторий.
Тёма пробует иначе: сбрасывает окно и подаёт через @ только reward-flow.js и rules.md. И сразу чувствует разницу — агент отвечает собранно, точно, без блужданий по чужим файлам.
— О, он сразу по делу пошёл, — пишет Тёма. — Слышь, а ведь чем меньше я ему даю, тем умнее он отвечает. Жадничать — и то выгодно.
6. Двойная цена набитого окна и контринтуитив дня
— А зачем вообще так заморачиваться? — Тёма хочет до конца понять. — Ну висит лишнее в окне, и висит.
— Затем, что набитое окно бьёт по тебе сразу с двух сторон, — Лёха объясняет на пальцах. — Первое — дорого. Каждый запрос оплачивает всё окно целиком. Чем оно толще, тем дороже каждый твой ход. Второе — шумно. Чем больше в окне всего, тем хуже агент фокусируется, тем чаще путается. То есть грязное окно делает работу и дороже, и тупее одновременно.
— А чистое — наоборот, — Тёма ловит мысль сам. — Получается, гигиена окна это не жадность, не «экономлю на запросах». Это способ сделать его и дешевле, и умнее за один заход.
— Ты ухватил. И отсюда главный фокус дня, — Лёха формулирует. — Иногда, чтоб агент поумнел, надо не докинуть ему контекста, а выкинуть лишнее. Звучит наоборот, а работает.
— И это не разовая кнопка, — добавляет Тёма, уже сам. — Это чутьё. Я теперь по ходу чую: тут подать точечно, тут сжать, тут начать с чистого листа. Встроенная привычка, как руки мыть.
— Новый навык освоил, — кивает Лёха. — Осталось закрепить главную привычку всей учебы — с неё всё и начиналось.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ