Сокращение лишнего контекста агента

Данный навык помогает оптимизировать использование токенов при выполнении задач, связанных с кодированием, снижая затраты и избегая переполнения контекста. Он особенно полезен при работе с большими объемами данных и частыми вызовами инструментов.

Экосистема: Универсальный

Инструкция

---
name: tokenleak
description: "Token-lean rules for coding agents: cut the context re-sent on every later call (big reads, noisy logs, re-reads, serial calls) without losing correctness."
category: development
risk: safe
source: community
source_repo: Pazificateur69/tokenleak
source_type: official
date_added: "2026-10-12"
author: Pazificateur69
tags: [tokens, context, cost, efficiency, claude-code, codex]
tools: [claude, codex, cursor, gemini]
license: "MIT"
license_source: "https://github.com/Pazificateur69/tokenleak/blob/main/LICENSE"
---

# tokenleak

## Обзор

Каждый результат инструмента, который агент включает в контекст, повторно отправляется при каждом последующем вызове до компакции, поэтому чтение лога на 6k токенов в начале сессии из 60 вызовов оплачивается примерно 55 раз. Эти правила заставляют агента включать только то, что необходимо для следующего решения: находить перед чтением, вычислять вместо чтения данных, ограничивать вывод команд, никогда не перечитывать, группировать независимые вызовы. Более 80 A/B тестов в Claude Code (Sonnet 5) сократили затраты на 32% при том же уровне прохождения 40/40; в Haiku 4.5 они помогают только вместе с защитой чтения плагина (-20%). Метод и сырые результаты находятся в исходном репозитории.

## Когда использовать этот навык

- Используйте для задач программирования, которые читают файлы, запускают тесты, сборки или установки, используют git или ищут в кодовой базе.
- Используйте, когда пользователь хочет сэкономить токены, снизить затраты или оставаться в пределах лимитов использования.
- Используйте, когда сессия постоянно сталкивается с компакцией, потому что вывод инструмента заполняет контекст.

## Правила

1. **Сначала найдите, затем читайте.** Не знаете размер файла? Проверьте его (`wc -l`) вместе с вашим первым поиском. Ищите (`grep -n`, `rg -n`, Grep), затем читайте только ту область, которая вам нужна (offset/limit, `sed -n 'A,Bp'`). Читайте весь файл только если он короткий (менее ~300 строк) или вам действительно нужно все его содержимое.
2. **Вычисляйте, не читайте.** Для вопросов о данных (количества, итоги, фильтры, поиск в больших файлах данных, CSV, JSON, логи) запускайте короткий скрипт или однострочник, который выводит только ответ. Никогда не включайте сами данные в контекст.
3. **Ограничивайте каждую команду.** Никогда не позволяйте тестам, сборкам, установкам или логам бесконтрольно поступать в контекст.
   - Режимы тишины или только с ошибками: `pytest -q -x`, `vitest run --reporter=dot`, `go test ./... 2>&1 | grep -v '^ok'`, `cargo test -q`, `npm ci --silent`, `make -s`.
   - Долгие задания: `L="${TMPDIR:-/tmp}/out.log"; cmd > "$L" 2>&1; echo "exit=$?"; tail -n 40 "$L"`. Нужно больше? `grep -n -m 20 -E 'error|FAIL|panic' "$L"` в сохраненном логе. Никогда не запускайте задание повторно только для того, чтобы увидеть больше его вывода.
   - Итерируйте по одному неудачному тесту, а не по всему набору. Запустите полный набор один раз в конце, тихо.
4. **Никогда не перечитывайте то, что у вас есть.** Файл, который вы прочитали или записали, все еще в контексте. Перечитывайте только после компакции или после того, как что-то другое изменило его.
5. **Группируйте независимые вызовы.** Чтения и поиски, которые не зависят друг от друга, выполняйте за один раз (параллельные вызовы инструментов), а шаги оболочки, которые не требуют суждения между ними, выполняйте в одной команде (`wc -l a b; grep -n x a | head`). Каждая дополнительная поездка отправляет все заново.
6. **Различия по файлам.** `git status -s`, `git diff --stat`, затем `git diff -- <path>`, `git log --oneline -n 15`, `git show --stat <sha>`.
7. **Редактируйте, не переписывайте.** Только целенаправленные правки. Никогда не переписывайте весь файл, чтобы изменить несколько строк, и никогда не вставляйте обратно в чат код, который уже на диске.
8. **Сужайте поиски и выборки.** Ограничивайте по пути и типу файла, ограничивайте результаты (`-m`, `head_limit`, `| head -n 30`, `-l` для имен только). Выбирайте поля из API и JSON (`--json a,b`, `jq '.items[] | {id,name}'`, `per_page`). Задавайте веб-запросу точный вопрос вместо того, чтобы выгружать всю страницу.
9. **Делегируйте широкое исследование.** Если ответ требует открытия более 10 файлов, и вам нужно только заключение, передайте это подагенту, если у вашего агента есть такие. Только его резюме попадает в ваш контекст.
10. **Ответьте лаконично.** Начинайте с результата. Никаких пошаговых резюме, никаких повторений различий, никаких заключительных резюме того, что пользователь уже может видеть, никаких лишних слов.

## Никогда не экономьте токены путем

- чрезмерного усечения, из-за чего вы пропускаете реальную ошибку (расширьте с помощью `grep`/`sed -n` на сохраненном логе вместо этого);
- пропуска чтения, которое вам нужно для правильного редактирования, или угадывания содержимого файла;
- пропуска проверки. Запускайте тесты, тихо.

## Ограничения

- Экономия зависит от рабочей нагрузки и модели: в бенчмарке короткая задача по исправлению тестов принесла 5%, шумные сборки и многофайловые функции 24-51%; маленькие модели, такие как Haiku 4.5, едва следуют правилам без защиты чтения плагина.
- Бенчмарк охватывает две модели и четыре небольшие задачи на синтетическом репозитории, и запуски варьируются от 2 до 4 раз.
- Правила сами по себе стоят около 850 токенов контекста; на очень коротких сессиях они могут не оправдать себя.
- Сопроводительный аудит транскрипции (`tokenleak.py`) находится в исходном репозитории и не включен сюда.

## Примеры

Находите перед чтением и передавайте агенту только то, что нужно для следующего решения:

```bash
wc -l app/service.py          # size, alongside the search
rg -n "def handle_" app/      # find the region first
sed -n '120,180p' app/service.py
```

Ограничьте шумную сборку и оставьте видимой ошибку:

```bash
L="${TMPDIR:-/tmp}/out.log"; npm test > "$L" 2>&1; echo "exit=$?"; tail -n 40 "$L"
grep -n -m 20 -E 'error|FAIL' "$L"
```

Считайте вместо вставки данных в контекст:

```bash
python3 -c "import json;print(len(json.load(open('events.json'))))"
```
Источник на GitHub