Агент, который ничего не знал
При первом запуске агент не знает структуру проекта. Из-за этого возникают проблемы:
Читает слишком много файлов и быстро расходует контекст.
Или, наоборот, не находит нужные файлы и места в коде.
Справочный файл
Один из способов снизить эти проблемы — создать справочный файл ./docs/reference.md, где описаны ключевые файлы проекта и их назначение.
Минусы:
Вручную поддерживать сложно.
Если генерировать описание агентом, то для конкретной задачи в нём часто не хватает деталей.
Кодовая база как собственная справка
Можно ввести правила оформления файлов и автоматически генерировать структуру проекта.
Какие правила можно добавить в AGENTS.md
Одна ответственность на файл: в каждом файле — одна задача. Имя файла должно прямо описывать назначение.
Комментарий в начале файла: в первых строках описываем назначение файла и что в него не входит. При изменениях нужно поддерживать комментарий в актуальном состоянии.
С содержанием комментария можно экспериментировать — добавлять зависимости, побочные эффекты, теги и т. п.
Два уровня: структура папки и структура файла
После этого можно написать скрипты, которые генерируют структуру проекта на двух уровнях.
Структура папки
Это индекс по файлам: где находится код и за что отвечает каждый файл. Скрипт проходит по src/**/* и собирает список: путь к файлу → комментарий в начале файла.
Пример для ./src:
src/cli/input-arguments.ts: CLI argument parsing and input path normalization helpers. src/cli/modes.ts: CLI execution modes for file, glob, and debug workflows. src/cli/types.ts: Shared CLI runtime types for dependency injection and content processing. src/core/declaration-lines.ts: Shared helpers for converting parsed declarations into outline lines. src/core/formatter.ts: Declaration formatting utilities for generating outline output. src/core/header-comment-lines.ts: Shared helpers for rendering extracted header comments into outline lines. src/core/language-engine.ts: Shared interface for language-specific outline generators. src/core/language-registry.ts: Registry and resolver for language-specific outline engines. src/core/outline-renderer.ts: Shared helpers for rendering structured outline lines. src/core/types.ts: Core type definitions for outline generation. src/debug/debug-mode.ts: Debug mode output generator for source highlighting. Provides ANSI-highlighted source output for debug view. ...
Структура файла
Это список элементов верхнего уровня в файле. Скрипт извлекает только объявления верхнего уровня (функции, классы, константы, экспорты). Это помогает понять, что есть в файле, не читая его целиком.
Пример для comments.ts:
function stripBom(content: string): string function findFirstContentLineIndex(lines: readonly string[]): number function getLineStartPosition(lines: readonly string[], lineIndex: number): number function extractSingleLineComments(lines: readonly string[], startIndex: number): string export function extractTopComment(content: string): string | null export function extractTopCommentLineNumber(content: string): number | null export function cleanCommentText(comment: string): string
По этим данным уже можно видеть, какой примерно функционал содержится в comments.ts.
Как использовать
Агент вызывает скрипт перед тем, как читать файлы. Это можно закрепить как правило в промпте или в инструкциях агента: сначала получить структуру папки и структуру нужных файлов, потом читать исходники.
Структуру для
src/можно генерировать на каждый коммит и хранить вdocs/. Бонусом — по изменениям можно следить за развитием проекта и видеть архитектурные изменения прямо в диффах.
Экономия
В моих тестах этот подход снижал расход токенов до 20% (в зависимости от задачи).
Как попробовать
Вариант 1: попросите агента сделать скрипт, который (1) собирает комментарии в начале файлов и (2) выводит элементы верхнего уровня. Для разбора кода подойдёт tree-sitter.
Вариант 2: используйте мой вариант скрипта https://github.com/ptol/outln (поддерживает ts, js, go, rs, md)
Следующая статья Исполняемые спецификации — эффективная работа с кодинг-агентами
Какие подходы вы используете для решения проблемы холодного старта агента в кодовой базе?
