docs: activate token-efficient agent workflow
This commit is contained in:
@@ -9,3 +9,4 @@
|
|||||||
- [Аудит 24.08.2026](audit-24-08-2026.md)
|
- [Аудит 24.08.2026](audit-24-08-2026.md)
|
||||||
- [Multi-source assessment WealthLedger SDD 26.08.2026](2026-08-26-wealth-ledger-sdd/README.md)
|
- [Multi-source assessment WealthLedger SDD 26.08.2026](2026-08-26-wealth-ledger-sdd/README.md)
|
||||||
- [Повторный multi-source review WealthLedger SDD v2 26.08.2026](2026-08-26-wealth-ledger-sdd-v2-review/README.md)
|
- [Повторный multi-source review WealthLedger SDD v2 26.08.2026](2026-08-26-wealth-ledger-sdd-v2-review/README.md)
|
||||||
|
- [Аудит расхода токенов Codex-сессий 26.08.2026](codex-sessions-token-audit-2026-08-26.md)
|
||||||
|
|||||||
@@ -0,0 +1,756 @@
|
|||||||
|
# Codex Sessions Token Audit
|
||||||
|
|
||||||
|
Дата анализа: 2026-08-26
|
||||||
|
|
||||||
|
## Контекст
|
||||||
|
|
||||||
|
Анализ выполнен по rollout-сессиям Codex за день для pet-проекта, где используется:
|
||||||
|
|
||||||
|
- SDD (Spec-Driven Development);
|
||||||
|
- OpenSpec;
|
||||||
|
- `AGENTS.md`;
|
||||||
|
- skills;
|
||||||
|
- subagents;
|
||||||
|
- многошаговый workflow от discovery/design до implementation/review.
|
||||||
|
|
||||||
|
Цель аудита — понять, почему Codex расходует лимиты слишком быстро, определить основные источники token usage и сформировать практические направления оптимизации процесса разработки.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Executive Summary
|
||||||
|
|
||||||
|
Разобраны все 9 rollout-файлов. Fork/subagent-сессии были учтены отдельно, чтобы не посчитать унаследованную историю дважды.
|
||||||
|
|
||||||
|
Главный вывод:
|
||||||
|
|
||||||
|
> **Проблема действительно есть, и она почти не связана с генерацией кода как таковой. Основной расход создаёт большое количество последовательных model ↔ tool циклов на уже разросшемся контексте.**
|
||||||
|
|
||||||
|
## Общая статистика
|
||||||
|
|
||||||
|
| Работа | Model calls | Input | Cached input | Uncached input | Output |
|
||||||
|
|---|---:|---:|---:|---:|---:|
|
||||||
|
| Аудит SDD/OpenSpec + subagents | **254** | **26.51M** | 25.70M | 812K | 112K |
|
||||||
|
| Выбор UI skill | 2 | 53K | 4K | 49K | 1K |
|
||||||
|
| Редизайн карточки акции + Curie | **120** | **13.37M** | 12.90M | 469K | 41K |
|
||||||
|
| Редизайн операций + Faraday | **182** | **20.95M** | 20.42M | 534K | 80K |
|
||||||
|
| **Итого** | **558** | **60.88M** | **59.02M** | **1.86M** | **234K** |
|
||||||
|
|
||||||
|
Ключевые цифры:
|
||||||
|
|
||||||
|
- **96.9% всего input — cached input**;
|
||||||
|
- всего около **3.1% input был новым**;
|
||||||
|
- output модели — около **0.38% относительно input**;
|
||||||
|
- reasoning — около **66K токенов**, то есть не является основным источником расхода;
|
||||||
|
- средний model call получал примерно **109 000 input-токенов**;
|
||||||
|
- из них в среднем:
|
||||||
|
- около **105 770 cached**;
|
||||||
|
- около **3 341 новых**.
|
||||||
|
|
||||||
|
Иными словами, очередной `rg`, `sed`, `git diff` или другой tool call приводит к новому model call с огромным уже накопленным контекстом.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 1. Главная проблема — слишком много model round-trips
|
||||||
|
|
||||||
|
В SDD-сессии:
|
||||||
|
|
||||||
|
```text
|
||||||
|
254 model calls
|
||||||
|
26.51M input tokens
|
||||||
|
≈104K input / call
|
||||||
|
```
|
||||||
|
|
||||||
|
Карточка акции:
|
||||||
|
|
||||||
|
```text
|
||||||
|
120 model calls
|
||||||
|
13.37M input
|
||||||
|
≈111K / call
|
||||||
|
```
|
||||||
|
|
||||||
|
Операции:
|
||||||
|
|
||||||
|
```text
|
||||||
|
182 model calls
|
||||||
|
20.95M input
|
||||||
|
≈115K / call
|
||||||
|
```
|
||||||
|
|
||||||
|
Получается почти линейная зависимость:
|
||||||
|
|
||||||
|
```text
|
||||||
|
большой context
|
||||||
|
×
|
||||||
|
много model calls
|
||||||
|
=
|
||||||
|
огромный cumulative input
|
||||||
|
```
|
||||||
|
|
||||||
|
Типичный дорогой паттерн:
|
||||||
|
|
||||||
|
```text
|
||||||
|
model
|
||||||
|
↓
|
||||||
|
sed ...
|
||||||
|
↓
|
||||||
|
model ← опять ~130K input
|
||||||
|
↓
|
||||||
|
rg ...
|
||||||
|
↓
|
||||||
|
model ← опять ~140K
|
||||||
|
↓
|
||||||
|
git diff
|
||||||
|
↓
|
||||||
|
model ← опять ~150K
|
||||||
|
↓
|
||||||
|
sed ...
|
||||||
|
↓
|
||||||
|
model ← опять ~160K
|
||||||
|
```
|
||||||
|
|
||||||
|
Более экономный вариант:
|
||||||
|
|
||||||
|
```text
|
||||||
|
model
|
||||||
|
↓
|
||||||
|
├─ rg ...
|
||||||
|
├─ git diff --stat
|
||||||
|
├─ sed relevant-range...
|
||||||
|
└─ ...
|
||||||
|
↓
|
||||||
|
model
|
||||||
|
```
|
||||||
|
|
||||||
|
То есть **batch/parallel tool calls — один из самых сильных рычагов оптимизации**.
|
||||||
|
|
||||||
|
Хороший контрольный пример есть прямо в логах: сессия «какой skill выбрать» выполнила **8 tool calls всего за 2 model calls**. Это значительно более экономный паттерн.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 2. Контекст реально разрастается до 200K+
|
||||||
|
|
||||||
|
Максимальный input одного model call:
|
||||||
|
|
||||||
|
| Сессия | Median | Max | Context window |
|
||||||
|
|---|---:|---:|---:|
|
||||||
|
| SDD/OpenSpec | ~128K | **216.5K** | 258.4K |
|
||||||
|
| Карточка акции | ~133K | **213.5K** | 258.4K |
|
||||||
|
| Операции | ~119K | **231.0K** | 258.4K |
|
||||||
|
|
||||||
|
Одна из сессий дошла примерно до:
|
||||||
|
|
||||||
|
```text
|
||||||
|
231K / 258K ≈ 89% context window
|
||||||
|
```
|
||||||
|
|
||||||
|
Codex уже был вынужден делать context compaction.
|
||||||
|
|
||||||
|
Особенно показательно распределение cumulative input:
|
||||||
|
|
||||||
|
- в основной SDD-сессии **83.6%** input пришлось на вызовы, где контекст уже был больше 100K;
|
||||||
|
- в карточке акции — **83.5%**;
|
||||||
|
- в операциях — **77.3%**.
|
||||||
|
|
||||||
|
Если чисто математически ограничить model calls уровнем около 100K input, потенциально можно было бы убрать порядка:
|
||||||
|
|
||||||
|
```text
|
||||||
|
~16.4M input tokens
|
||||||
|
```
|
||||||
|
|
||||||
|
Это не означает, что нужно вводить жёсткий hard-cap 100K, но цифра показывает масштаб проблемы.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 3. Длинная сессия «одна feature от начала до конца» слишком дорогая
|
||||||
|
|
||||||
|
Текущий flow приблизительно выглядит так:
|
||||||
|
|
||||||
|
```text
|
||||||
|
research
|
||||||
|
↓
|
||||||
|
design
|
||||||
|
↓
|
||||||
|
OpenSpec proposal
|
||||||
|
↓
|
||||||
|
delta specs
|
||||||
|
↓
|
||||||
|
design
|
||||||
|
↓
|
||||||
|
tasks
|
||||||
|
↓
|
||||||
|
implementation
|
||||||
|
↓
|
||||||
|
tests
|
||||||
|
↓
|
||||||
|
fix
|
||||||
|
↓
|
||||||
|
review
|
||||||
|
↓
|
||||||
|
docs
|
||||||
|
↓
|
||||||
|
archive
|
||||||
|
```
|
||||||
|
|
||||||
|
Если всё это живёт в одной conversation, implementation в конце тащит за собой:
|
||||||
|
|
||||||
|
```text
|
||||||
|
весь research
|
||||||
|
+ старые tool outputs
|
||||||
|
+ обсуждение дизайна
|
||||||
|
+ предыдущие ответы
|
||||||
|
+ OpenSpec
|
||||||
|
+ прочитанный source code
|
||||||
|
+ git diff
|
||||||
|
+ test output
|
||||||
|
+ skills
|
||||||
|
+ instructions
|
||||||
|
+ ...
|
||||||
|
```
|
||||||
|
|
||||||
|
Хотя для конкретной операции, например:
|
||||||
|
|
||||||
|
```text
|
||||||
|
исправить BrokerageOperationRow
|
||||||
|
```
|
||||||
|
|
||||||
|
большая часть этого контекста уже не нужна.
|
||||||
|
|
||||||
|
## Рекомендуемый workflow
|
||||||
|
|
||||||
|
Не отказываться от SDD. Наоборот, использовать OpenSpec как естественную границу контекста:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Session 1 — Discovery / Design
|
||||||
|
↓
|
||||||
|
proposal + specs + design
|
||||||
|
|
||||||
|
Session 2 — Planning
|
||||||
|
↓
|
||||||
|
approved artifacts
|
||||||
|
↓
|
||||||
|
tasks.md
|
||||||
|
|
||||||
|
Session 3 — Implementation
|
||||||
|
↓
|
||||||
|
читает только approved OpenSpec
|
||||||
|
+ affected source files
|
||||||
|
|
||||||
|
Session 4 — Verification / Review
|
||||||
|
↓
|
||||||
|
git diff
|
||||||
|
+ approved specs/design/tasks
|
||||||
|
|
||||||
|
Session 5 — Archive
|
||||||
|
```
|
||||||
|
|
||||||
|
Каждая следующая сессия получает **результат предыдущей в структурированной форме**, а не всю историю того, как к нему пришли.
|
||||||
|
|
||||||
|
Это хорошо сочетается с SDD: артефакт становится интерфейсом между агентными сессиями.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 4. Слишком много полного чтения файлов
|
||||||
|
|
||||||
|
В командах за день часто встречались:
|
||||||
|
|
||||||
|
```text
|
||||||
|
SKILL.md 35 раз
|
||||||
|
tasks.md 35
|
||||||
|
AGENTS.md 32
|
||||||
|
spec.md 30
|
||||||
|
git diff 24
|
||||||
|
design.md 23
|
||||||
|
proposal.md 21
|
||||||
|
schema.yaml 20
|
||||||
|
engineering-governance.md 15
|
||||||
|
audit-remediation.md 16
|
||||||
|
domain-glossary.md 11
|
||||||
|
system-overview.md 10
|
||||||
|
```
|
||||||
|
|
||||||
|
Это не означает, что каждый файл каждый раз читался полностью, но хорошо показывает характер поведения агента.
|
||||||
|
|
||||||
|
Особенно заметна root-инструкция:
|
||||||
|
|
||||||
|
> перед работой прочитать engineering-governance, system-overview и domain-glossary
|
||||||
|
|
||||||
|
В результате каждый новый агент снова читает эти документы.
|
||||||
|
|
||||||
|
Например, одни и те же governance-файлы читали:
|
||||||
|
|
||||||
|
```text
|
||||||
|
root
|
||||||
|
Kierkegaard
|
||||||
|
Nash
|
||||||
|
Curie
|
||||||
|
Faraday
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
Это цена текущего governance-подхода.
|
||||||
|
|
||||||
|
Сам `AGENTS.md` при этом небольшой — примерно 2230 символов. Его размер не является проблемой.
|
||||||
|
|
||||||
|
## Что лучше изменить
|
||||||
|
|
||||||
|
Вместо обязательного чтения нескольких больших документов перед любой работой:
|
||||||
|
|
||||||
|
```text
|
||||||
|
AGENTS.md
|
||||||
|
|
||||||
|
Before work:
|
||||||
|
1. Determine affected repositories.
|
||||||
|
2. Read their AGENTS.md.
|
||||||
|
3. Consult docs/development/engineering-governance.md
|
||||||
|
only for the relevant gate/policy.
|
||||||
|
4. Read system-overview only for cross-service/
|
||||||
|
architectural changes.
|
||||||
|
5. Read domain-glossary only when domain semantics
|
||||||
|
are involved.
|
||||||
|
```
|
||||||
|
|
||||||
|
То есть сделать документацию **lazy context**, а не mandatory context.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 5. Некоторые tool outputs слишком большие
|
||||||
|
|
||||||
|
В SDD-сессии встречались результаты команд размером:
|
||||||
|
|
||||||
|
```text
|
||||||
|
40 137 chars
|
||||||
|
36 937 chars
|
||||||
|
34 621 chars
|
||||||
|
32 936 chars
|
||||||
|
32 874 chars
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
В одном случае:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Warning: truncated output
|
||||||
|
original token count: 15,592
|
||||||
|
Total output lines: 1006
|
||||||
|
```
|
||||||
|
|
||||||
|
То есть агент запросил больше тысячи строк.
|
||||||
|
|
||||||
|
Другой пример:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bash -x scripts/verify-openspec-planning.test.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
дал:
|
||||||
|
|
||||||
|
```text
|
||||||
|
566 lines
|
||||||
|
original token count: 14,118
|
||||||
|
```
|
||||||
|
|
||||||
|
`bash -x` для обычной успешной verification — дорогой паттерн.
|
||||||
|
|
||||||
|
## Более эффективный подход
|
||||||
|
|
||||||
|
Вместо:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sed -n '1,320p' file1
|
||||||
|
sed -n '1,380p' file2
|
||||||
|
sed -n '1,300p' file3
|
||||||
|
```
|
||||||
|
|
||||||
|
лучше:
|
||||||
|
|
||||||
|
```text
|
||||||
|
rg / symbol search
|
||||||
|
↓
|
||||||
|
identify relevant section
|
||||||
|
↓
|
||||||
|
sed -n '120,180p'
|
||||||
|
```
|
||||||
|
|
||||||
|
То есть `rg` должен быть основным инструментом discovery, а `sed` — точечным чтением найденного диапазона.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 6. `git diff` — ещё один заметный источник расхода
|
||||||
|
|
||||||
|
`git diff` встречается минимум **24 раза**.
|
||||||
|
|
||||||
|
Некоторые outputs достигают:
|
||||||
|
|
||||||
|
```text
|
||||||
|
16K tokens
|
||||||
|
14K tokens
|
||||||
|
11K tokens
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
Иногда diff перечитывается почти целиком несколько раз.
|
||||||
|
|
||||||
|
## Рекомендуемый стандарт
|
||||||
|
|
||||||
|
```text
|
||||||
|
git status --short
|
||||||
|
↓
|
||||||
|
git diff --stat
|
||||||
|
↓
|
||||||
|
git diff --name-only
|
||||||
|
↓
|
||||||
|
только затем:
|
||||||
|
git diff -- path/to/relevant/file
|
||||||
|
```
|
||||||
|
|
||||||
|
Полный relevant diff имеет смысл один раз читать независимому reviewer.
|
||||||
|
|
||||||
|
Нежелательно выполнять:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git diff
|
||||||
|
```
|
||||||
|
|
||||||
|
на multi-repo workspace после большой реализации без предварительного narrowing.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 7. Subagents стоят токенов, но не являются главной проблемой
|
||||||
|
|
||||||
|
После удаления унаследованных cumulative counters:
|
||||||
|
|
||||||
|
## SDD audit
|
||||||
|
|
||||||
|
Основной agent:
|
||||||
|
|
||||||
|
```text
|
||||||
|
20.45M input
|
||||||
|
```
|
||||||
|
|
||||||
|
Kierkegaard:
|
||||||
|
|
||||||
|
```text
|
||||||
|
+1.07M
|
||||||
|
```
|
||||||
|
|
||||||
|
Peirce:
|
||||||
|
|
||||||
|
```text
|
||||||
|
+4.26M
|
||||||
|
```
|
||||||
|
|
||||||
|
Nash:
|
||||||
|
|
||||||
|
```text
|
||||||
|
+0.73M
|
||||||
|
```
|
||||||
|
|
||||||
|
Итого:
|
||||||
|
|
||||||
|
```text
|
||||||
|
26.51M
|
||||||
|
```
|
||||||
|
|
||||||
|
Subagents добавили примерно:
|
||||||
|
|
||||||
|
```text
|
||||||
|
~6.06M input
|
||||||
|
≈23% workload
|
||||||
|
```
|
||||||
|
|
||||||
|
Это существенно, но запрещать subagents не стоит.
|
||||||
|
|
||||||
|
У них есть важное преимущество: собственный context обычно меньше:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Kierkegaard max ~102K
|
||||||
|
Peirce max ~112K
|
||||||
|
Nash max ~79K
|
||||||
|
Curie max ~62K
|
||||||
|
Faraday max ~79K
|
||||||
|
```
|
||||||
|
|
||||||
|
Иногда выгоднее:
|
||||||
|
|
||||||
|
```text
|
||||||
|
200K root
|
||||||
|
↓
|
||||||
|
spawn focused reviewer with 30–70K
|
||||||
|
```
|
||||||
|
|
||||||
|
чем заставлять root делать ещё несколько десятков model calls с 200K-контекстом.
|
||||||
|
|
||||||
|
## Важное ограничение
|
||||||
|
|
||||||
|
Subagent должен получать **узкую задачу**.
|
||||||
|
|
||||||
|
Нежелательно без необходимости использовать:
|
||||||
|
|
||||||
|
```text
|
||||||
|
fork_turns="all"
|
||||||
|
```
|
||||||
|
|
||||||
|
В первом SDD workflow именно этот режим использовался и требует оптимизации.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 8. Skills влияют, но не являются проблемой №1
|
||||||
|
|
||||||
|
Простой запрос:
|
||||||
|
|
||||||
|
```text
|
||||||
|
какой skill мне использовать?
|
||||||
|
```
|
||||||
|
|
||||||
|
имел первый input примерно:
|
||||||
|
|
||||||
|
```text
|
||||||
|
20 479 tokens
|
||||||
|
```
|
||||||
|
|
||||||
|
То есть в Codex Desktop уже существует около **20K+ стартового context overhead** до серьёзной работы.
|
||||||
|
|
||||||
|
В него входят:
|
||||||
|
|
||||||
|
- Codex app instructions;
|
||||||
|
- tool schemas;
|
||||||
|
- environment;
|
||||||
|
- plugin information;
|
||||||
|
- workspace state;
|
||||||
|
- AGENTS;
|
||||||
|
- другие системные данные.
|
||||||
|
|
||||||
|
Например, только Codex app-context занимает около 35K символов, а список `recommended_plugins` — ещё примерно 6.7K символов.
|
||||||
|
|
||||||
|
Это почти невозможно оптимизировать на уровне проекта.
|
||||||
|
|
||||||
|
Но skills добавляют дополнительный overhead.
|
||||||
|
|
||||||
|
`ui-ux-pro-max` инжектировал примерно:
|
||||||
|
|
||||||
|
```text
|
||||||
|
~16 036 символов skill content
|
||||||
|
```
|
||||||
|
|
||||||
|
Первый model call после этого был около:
|
||||||
|
|
||||||
|
```text
|
||||||
|
26 796 tokens
|
||||||
|
```
|
||||||
|
|
||||||
|
## Рекомендуемая структура больших skills
|
||||||
|
|
||||||
|
```text
|
||||||
|
SKILL.md
|
||||||
|
↓
|
||||||
|
короткий orchestration/router
|
||||||
|
↓
|
||||||
|
references/
|
||||||
|
├── colors.md
|
||||||
|
├── typography.md
|
||||||
|
├── tables.md
|
||||||
|
├── finance.md
|
||||||
|
└── ...
|
||||||
|
```
|
||||||
|
|
||||||
|
Reference-файлы читаются только при необходимости.
|
||||||
|
|
||||||
|
Этот подход особенно полезен для собственных больших skills.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 9. Reasoning effort пока не стоит оптимизировать первым
|
||||||
|
|
||||||
|
За весь набор:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Input 60,883,487
|
||||||
|
Output 233,968
|
||||||
|
Reasoning 66,327
|
||||||
|
```
|
||||||
|
|
||||||
|
Reasoning составляет очень небольшую часть общего расхода.
|
||||||
|
|
||||||
|
Даже сильное уменьшение reasoning не решит проблему с десятками миллионов input tokens.
|
||||||
|
|
||||||
|
Для механических операций вроде:
|
||||||
|
|
||||||
|
```text
|
||||||
|
npm test
|
||||||
|
lint
|
||||||
|
git status
|
||||||
|
mechanical implementation
|
||||||
|
```
|
||||||
|
|
||||||
|
high reasoning действительно может быть избыточным.
|
||||||
|
|
||||||
|
Но по приоритету эта оптимизация значительно ниже context management.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 10. Реальный рост Codex quota
|
||||||
|
|
||||||
|
В rollout записывается primary rate limit:
|
||||||
|
|
||||||
|
```text
|
||||||
|
window_minutes: 10080
|
||||||
|
```
|
||||||
|
|
||||||
|
10080 минут = 7 дней.
|
||||||
|
|
||||||
|
За исследованный кусок дня показатель изменился примерно так:
|
||||||
|
|
||||||
|
```text
|
||||||
|
начало первой сессии: 33%
|
||||||
|
после неё: 47%
|
||||||
|
после карточки: 53%
|
||||||
|
конец последней: 62%
|
||||||
|
```
|
||||||
|
|
||||||
|
То есть:
|
||||||
|
|
||||||
|
```text
|
||||||
|
33% → 62%
|
||||||
|
```
|
||||||
|
|
||||||
|
или около:
|
||||||
|
|
||||||
|
```text
|
||||||
|
+29 процентных пунктов 7-дневного лимита
|
||||||
|
```
|
||||||
|
|
||||||
|
Ощущение, что Codex слишком быстро расходует quota, подтверждается логами.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Приоритеты оптимизации
|
||||||
|
|
||||||
|
| Priority | Изменение | Потенциальный эффект |
|
||||||
|
|---|---|---|
|
||||||
|
| 🔴 P0 | **Разделять длинную feature на SDD / implementation / review sessions** | Очень высокий |
|
||||||
|
| 🔴 P0 | **Сокращать количество model ↔ tool round-trips** | Очень высокий |
|
||||||
|
| 🔴 P0 | **Batch/parallel независимые tool calls** | Очень высокий |
|
||||||
|
| 🟠 P1 | Не читать governance/docs полностью перед каждой работой | Высокий |
|
||||||
|
| 🟠 P1 | `rg → targeted sed`, а не большие `sed/cat` | Высокий |
|
||||||
|
| 🟠 P1 | `git diff --stat/name-only → targeted diff` | Высокий |
|
||||||
|
| 🟠 P1 | Ограничивать test/build output | Средне-высокий |
|
||||||
|
| 🟡 P2 | Не использовать `fork_turns=all` без необходимости | Средний |
|
||||||
|
| 🟡 P2 | Большие skills разбить на lazy references | Средний |
|
||||||
|
| 🟢 P3 | Снижать reasoning для механической работы | Низкий относительно остального |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Предлагаемые token budgets
|
||||||
|
|
||||||
|
Для дальнейшей разработки можно использовать ориентиры:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Healthy session
|
||||||
|
|
||||||
|
initial context: 20–40K
|
||||||
|
normal working context: <100K
|
||||||
|
warning: >120K
|
||||||
|
restart/handoff: >150K
|
||||||
|
|
||||||
|
model calls / phase: желательно <50
|
||||||
|
tool output / call: желательно <3–5K tokens
|
||||||
|
```
|
||||||
|
|
||||||
|
Эти значения следует воспринимать как практические budgets для текущего workflow, а не как жёсткие ограничения Codex.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Основной принцип оптимизации
|
||||||
|
|
||||||
|
Не стоит использовать compaction только как последнее средство.
|
||||||
|
|
||||||
|
В SDD естественной точкой compaction/handoff должен стать **готовый артефакт**.
|
||||||
|
|
||||||
|
Например:
|
||||||
|
|
||||||
|
```text
|
||||||
|
долго обсуждали
|
||||||
|
↓
|
||||||
|
получили approved design.md
|
||||||
|
↓
|
||||||
|
старый разговор больше не нужен
|
||||||
|
↓
|
||||||
|
NEW SESSION
|
||||||
|
↓
|
||||||
|
Implement change X according to approved
|
||||||
|
proposal/specs/design/tasks
|
||||||
|
```
|
||||||
|
|
||||||
|
То есть:
|
||||||
|
|
||||||
|
> **SDD artifact должен быть interface между агентными сессиями, а не только документацией внутри одной огромной сессии.**
|
||||||
|
|
||||||
|
Это позволяет сохранить качество и одновременно удалить значительную часть исторического шума.
|
||||||
|
|
||||||
|
Implementation-agent получает не всю историю обсуждений, а только авторитетные артефакты и необходимый код.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Предлагаемое направление: Token-Efficient SDD v2
|
||||||
|
|
||||||
|
Следующий этап оптимизации имеет смысл строить вокруг следующих вопросов:
|
||||||
|
|
||||||
|
1. Где именно должны находиться границы Codex sessions.
|
||||||
|
2. Какие OpenSpec-артефакты должны передаваться между фазами.
|
||||||
|
3. Какие документы обязательны для чтения, а какие должны загружаться лениво.
|
||||||
|
4. Когда использовать root agent, а когда focused subagent.
|
||||||
|
5. Какой context передавать subagent.
|
||||||
|
6. Какие ограничения ввести для:
|
||||||
|
- `sed`;
|
||||||
|
- `cat`;
|
||||||
|
- `git diff`;
|
||||||
|
- test output;
|
||||||
|
- build output;
|
||||||
|
- debug tracing.
|
||||||
|
7. Как batch-ить независимые tool calls.
|
||||||
|
8. Когда автоматически рекомендовать завершить session и начать новую.
|
||||||
|
9. Какие token budgets использовать как guardrails.
|
||||||
|
10. Как измерять эффективность изменений по rollout-файлам.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Итог
|
||||||
|
|
||||||
|
Текущая проблема не выглядит как:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Codex слишком много думает
|
||||||
|
```
|
||||||
|
|
||||||
|
или:
|
||||||
|
|
||||||
|
```text
|
||||||
|
OpenSpec сам по себе слишком дорогой
|
||||||
|
```
|
||||||
|
|
||||||
|
Основная проблема выглядит так:
|
||||||
|
|
||||||
|
```text
|
||||||
|
большой накопленный context
|
||||||
|
×
|
||||||
|
очень много model calls
|
||||||
|
×
|
||||||
|
повторное чтение больших outputs/files
|
||||||
|
=
|
||||||
|
огромный cumulative input usage
|
||||||
|
```
|
||||||
|
|
||||||
|
Поэтому максимальный эффект даст не сокращение качества спецификаций и не отказ от SDD, а изменение **agent execution model**:
|
||||||
|
|
||||||
|
```text
|
||||||
|
короче sessions
|
||||||
|
+ artifact handoff
|
||||||
|
+ lazy context
|
||||||
|
+ targeted reads
|
||||||
|
+ narrow diffs
|
||||||
|
+ compact tool output
|
||||||
|
+ batched tool calls
|
||||||
|
+ focused subagents
|
||||||
|
```
|
||||||
|
|
||||||
|
Это должно стать основой следующей версии SDD workflow.
|
||||||
@@ -9,4 +9,5 @@
|
|||||||
- [Audit remediation registry](audit-remediation.md) — текущий статус findings, следующий OpenSpec change и evidence завершённых улучшений.
|
- [Audit remediation registry](audit-remediation.md) — текущий статус findings, следующий OpenSpec change и evidence завершённых улучшений.
|
||||||
- [Engineering governance](engineering-governance.md) — Change Owner, SDD approvals, Delivery Map, risk-based testing, build-versus-buy и hard guardrails.
|
- [Engineering governance](engineering-governance.md) — Change Owner, SDD approvals, Delivery Map, risk-based testing, build-versus-buy и hard guardrails.
|
||||||
- [OpenSpec authority и lifecycle](openspec-authority-and-lifecycle.md) — единственный SDD store, границы постоянной документации и условия archive.
|
- [OpenSpec authority и lifecycle](openspec-authority-and-lifecycle.md) — единственный SDD store, границы постоянной документации и условия archive.
|
||||||
|
- [Token-efficient agent workflow](agent-token-efficiency.md) — lazy context routing, session handoff, evidence batching и protocol активного pilot.
|
||||||
- [Проверка runtime OpenAPI](runtime-openapi-verification.md) — отдельный read-only contract gate и его границы.
|
- [Проверка runtime OpenAPI](runtime-openapi-verification.md) — отдельный read-only contract gate и его границы.
|
||||||
|
|||||||
@@ -0,0 +1,101 @@
|
|||||||
|
# Token-efficient agent workflow
|
||||||
|
|
||||||
|
## Статус и границы
|
||||||
|
|
||||||
|
Эта инструкция описывает действующий guidance для сокращения повторной передачи
|
||||||
|
agent context. Она не меняет SDD lifecycle, approvals, canonical gates, semantic
|
||||||
|
verification или independent review и не является hard guardrail.
|
||||||
|
|
||||||
|
Исходный baseline сохранён в
|
||||||
|
[аудите Codex-сессий 26.08.2026](../audits/codex-sessions-token-audit-2026-08-26.md).
|
||||||
|
Raw rollout logs не коммитятся. Числовой budget не блокирует delivery без
|
||||||
|
отдельного утверждённого change, детерминированной non-mutating проверки и
|
||||||
|
controlled positive/negative evidence.
|
||||||
|
|
||||||
|
## Routing context
|
||||||
|
|
||||||
|
До чтения supporting documentation агент определяет:
|
||||||
|
|
||||||
|
1. тип работы и текущую SDD-фазу, если change versioned;
|
||||||
|
2. affected repositories и их canonical gates;
|
||||||
|
3. capability или source identity, нужные для следующего решения.
|
||||||
|
|
||||||
|
После этого загружается только применимый context:
|
||||||
|
|
||||||
|
| Trigger | Обязательный context |
|
||||||
|
| --- | --- |
|
||||||
|
| Versioned SDD planning или Apply | Native OpenSpec instruction, возвращённые `contextFiles` и локальные `AGENTS.md` affected areas |
|
||||||
|
| Engineering policy, approval, testing, delivery или archive | Релевантный раздел `engineering-governance.md` |
|
||||||
|
| Cross-service flow или архитектурная граница | `architecture/system-overview.md` и применимые ADR/feature docs |
|
||||||
|
| Domain или API semantics | Релевантный термин `architecture/domain-glossary.md` и canonical contract/spec |
|
||||||
|
| Работа по известному Audit ID | Найденная через поиск запись и связанное evidence в `audit-remediation.md` |
|
||||||
|
| Диагностика agent token usage или этот pilot | Этот playbook и применимый dated audit snapshot |
|
||||||
|
|
||||||
|
Supporting material загружается on demand, если возникший вопрос меняет
|
||||||
|
семантику, архитектуру, audit disposition или обязательный gate. Guidance нельзя
|
||||||
|
использовать как основание пропустить необходимую authority.
|
||||||
|
|
||||||
|
## Handoff между agent-сессиями
|
||||||
|
|
||||||
|
Approved planning artifact, завершённый implementation slice или verification
|
||||||
|
outcome являются естественной границей новой Codex task. Минимальный handoff:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Change: <identity>
|
||||||
|
Approved through: <explicitly approved artifact>
|
||||||
|
Current phase: <phase>
|
||||||
|
Affected areas: <areas>
|
||||||
|
Unresolved blockers: <none or list>
|
||||||
|
Next allowed outcome: <one outcome>
|
||||||
|
```
|
||||||
|
|
||||||
|
Planning content не копируется: новая task читает его из canonical OpenSpec
|
||||||
|
store. Если явный approval недоступен в новой task, агент повторно запрашивает
|
||||||
|
его и не выводит решение владельца только из наличия artifact.
|
||||||
|
|
||||||
|
Для handoff Apply → Verify дополнительно передаются фактический scope изменённых
|
||||||
|
areas и unresolved failures. Полная история tool calls не передаётся.
|
||||||
|
|
||||||
|
## Evidence batching
|
||||||
|
|
||||||
|
Один evidence batch заканчивается перед следующим смысловым решением:
|
||||||
|
|
||||||
|
- заранее независимые read-only lookups выполняются вместе;
|
||||||
|
- adaptive discovery, side effects и approval boundaries остаются
|
||||||
|
последовательными;
|
||||||
|
- discovery начинается с `rg` или другого identity search, затем читает
|
||||||
|
релевантный диапазон;
|
||||||
|
- diff сначала сужается через status/stat/name-only, затем раскрывает affected
|
||||||
|
paths;
|
||||||
|
- successful command result сохраняет exact command identity, exit status и
|
||||||
|
существенную summary;
|
||||||
|
- failure или неоднозначная summary расширяет diagnostics до достаточной причины;
|
||||||
|
- semantic verification и reviewer всегда получают полный relevant evidence.
|
||||||
|
|
||||||
|
Статический лимит строк или tool tokens не применяется: он может скрыть
|
||||||
|
единственный диагностический сигнал. Compact output — способ убрать заведомо
|
||||||
|
нерелевантный шум, а не обрезать доказательства.
|
||||||
|
|
||||||
|
## Pilot protocol
|
||||||
|
|
||||||
|
Pilot change `optimize-agent-token-workflow` остаётся active до 10 завершённых
|
||||||
|
post-activation SDD-фаз минимум по двум changes. Для каждой попытки local
|
||||||
|
non-authority dataset содержит:
|
||||||
|
|
||||||
|
- change identity, phase type и краткий workload scope;
|
||||||
|
- cumulative input, model calls, context-depth indicators и tool-output volume;
|
||||||
|
- canonical-gate outcome, fix cycles и independent-review findings;
|
||||||
|
- completed или interrupted outcome и причину interruption.
|
||||||
|
|
||||||
|
Interrupted attempts учитываются отдельно и не исчезают из quality assessment.
|
||||||
|
Raw prompts, source contents и rollout logs в Git не добавляются.
|
||||||
|
Рабочий dataset хранится локально в workspace root как
|
||||||
|
`.agent-token-pilot.json`; workspace root не является Git-репозиторием, а файл
|
||||||
|
не является planning, handoff или documentation authority.
|
||||||
|
|
||||||
|
Сравнение выполняется внутри одинаковых phase types и близкого scope, когда это
|
||||||
|
возможно. Aggregate сопровождается ограничениями неоднородности. Снижение
|
||||||
|
resource usage считается улучшением только без ухудшения gate success, rework и
|
||||||
|
review findings. Итоговый versioned report публикует method, scope, aggregates,
|
||||||
|
confounders и verdict; он не экстраполирует quota или стоимость без provider
|
||||||
|
contract.
|
||||||
@@ -46,6 +46,30 @@ artifact.
|
|||||||
|
|
||||||
Изменение принятого upstream artifact инвалидирует approval зависимых артефактов: Proposal — Specs, Design и Tasks; Specs — Design и Tasks; Design — Tasks. Tasks не могут неявно расширять scope или менять поведение и архитектуру: работа возвращается к соответствующему upstream artifact.
|
Изменение принятого upstream artifact инвалидирует approval зависимых артефактов: Proposal — Specs, Design и Tasks; Specs — Design и Tasks; Design — Tasks. Tasks не могут неявно расширять scope или менять поведение и архитектуру: работа возвращается к соответствующему upstream artifact.
|
||||||
|
|
||||||
|
## Token-efficient agent execution
|
||||||
|
|
||||||
|
Agent workflow сначала определяет текущую SDD-фазу и affected delivery areas,
|
||||||
|
затем загружает canonical artifacts, локальные routing instructions и только
|
||||||
|
применимую supporting authority. Полная история предыдущей agent-сессии и
|
||||||
|
отдельный handoff artifact не являются prerequisite: после явного approval
|
||||||
|
следующая фаза восстанавливается из canonical OpenSpec change и компактного
|
||||||
|
handoff state. Если доступный context не подтверждает approval, решение Change
|
||||||
|
Owner запрашивается повторно.
|
||||||
|
|
||||||
|
Независимые read-only evidence следует получать одним batch до следующего
|
||||||
|
смыслового решения. Compact successful output сохраняет command identity, exit
|
||||||
|
status и существенный outcome; failure, semantic verification и independent
|
||||||
|
review получают достаточные diagnostics и полный relevant scope. Эти правила и
|
||||||
|
числовые budgets являются guidance, пока отдельный утверждённый change не
|
||||||
|
предоставит детерминированную non-mutating проверку и controlled evidence нового
|
||||||
|
hard guardrail.
|
||||||
|
|
||||||
|
Эффективность оценивается на завершённую SDD-фазу вместе с gate outcomes, fix
|
||||||
|
cycles, interrupted attempts и review findings. Меньший token usage при большем
|
||||||
|
rework или худшем verification result не считается улучшением. Операционный
|
||||||
|
routing, handoff envelope и pilot protocol находятся в lazy
|
||||||
|
[Token-efficient agent workflow](agent-token-efficiency.md).
|
||||||
|
|
||||||
## Delivery Map и multi-repository delivery
|
## Delivery Map и multi-repository delivery
|
||||||
|
|
||||||
Design каждого change оценивает все четыре области:
|
Design каждого change оценивает все четыре области:
|
||||||
|
|||||||
@@ -68,6 +68,26 @@ openspec schema which wealth-ledger-sdd --json
|
|||||||
|
|
||||||
`schema which` должен указывать project-local source. `specs/openspec/config.yaml` хранит default schema и компактный routing context, а не копию полной policy.
|
`schema which` должен указывать project-local source. `specs/openspec/config.yaml` хранит default schema и компактный routing context, а не копию полной policy.
|
||||||
|
|
||||||
|
## Stage context и handoff
|
||||||
|
|
||||||
|
До supporting reads agent определяет текущую OpenSpec-фазу и affected areas.
|
||||||
|
Native instruction и возвращённые `contextFiles` задают planning context;
|
||||||
|
repository-local `AGENTS.md` добавляет только routing и canonical gate своей
|
||||||
|
area. Architecture, glossary, audit registry и подробный operational playbook
|
||||||
|
загружаются по применимому trigger, а не blanket-набором перед любой задачей.
|
||||||
|
|
||||||
|
После явного approval planning artifact следующая фаза может начаться в новой
|
||||||
|
Codex task. Handoff сохраняет change identity, последний approved artifact,
|
||||||
|
current phase, affected areas, unresolved blockers и один следующий outcome.
|
||||||
|
Содержание artifacts повторно не пересказывается и остаётся в canonical store.
|
||||||
|
Если явный approval нельзя подтвердить из новой task, agent повторно запрашивает
|
||||||
|
его до создания downstream artifact.
|
||||||
|
|
||||||
|
Apply → Verify использует ту же boundary, добавляя фактический implementation
|
||||||
|
scope и unresolved failures без полной истории tool calls. Подробная форма
|
||||||
|
handoff и evidence-batching guidance описаны в
|
||||||
|
[Token-efficient agent workflow](agent-token-efficiency.md).
|
||||||
|
|
||||||
## Agent entrypoints и обновление OpenSpec
|
## Agent entrypoints и обновление OpenSpec
|
||||||
|
|
||||||
Root `.opencode/commands` и `.opencode/skills` — локальные non-authority
|
Root `.opencode/commands` и `.opencode/skills` — локальные non-authority
|
||||||
|
|||||||
+1
-1
@@ -7,7 +7,7 @@
|
|||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"runtime:check": "node scripts/verify-node-version.mjs",
|
"runtime:check": "node scripts/verify-node-version.mjs",
|
||||||
"lint": "markdownlint-cli2 \"**/*.md\" \"#node_modules\" \"#audits/2026-08-26-wealth-ledger-sdd/*-result.md\" \"#audits/2026-08-26-wealth-ledger-sdd-v2-review/*-audit.md\"",
|
"lint": "markdownlint-cli2 \"**/*.md\" \"#node_modules\" \"#audits/2026-08-26-wealth-ledger-sdd/*-result.md\" \"#audits/2026-08-26-wealth-ledger-sdd-v2-review/*-audit.md\" \"#audits/codex-sessions-token-audit-2026-08-26.md\"",
|
||||||
"verify": "npm run runtime:check && npm run lint && git diff --check"
|
"verify": "npm run runtime:check && npm run lint && git diff --check"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|||||||
Reference in New Issue
Block a user