66 KiB
Аудит 14 — AI Agent Workflow Efficiency
1. Audit metadata
- Дата: 2026-10-11.
- Основание:
audit-prompts/14-ai-agent-workflow-efficiency.md. - Результат: этот файл; имя выбрано по прямому запросу пользователя, вместо имени с суффиксом
-report, указанного в шаблоне. - Режим: статический read-only аудит четырех репозиториев и анализ предоставленного локального
session.json. Единственная запись — итоговый отчет вне четырех репозиториев. - Workspace/cwd:
/Users/ksv741/Project/vibe/WealthLedger; ниже пути относительно него.~/…обозначает локальную глобальную конфигурацию, которая не входит в Git проекта.
| Repo | Проверенный путь | Точный HEAD | Начальный status |
|---|---|---|---|
| root | /Users/ksv741/Project/vibe/WealthLedger |
dc030f84c979cedb2628ef4bd97c62d6c63a9256 |
clean |
| frontend | /Users/ksv741/Project/vibe/WealthLedger/frontend |
c8821200ce699dab1ce65360d1968d5877a2e78b |
clean |
| backend | /Users/ksv741/Project/vibe/WealthLedger/backend |
0ad84ff4f0b4712abc7e69dc299856f14af6eadd |
clean |
| specs | /Users/ksv741/Project/vibe/WealthLedger/specs |
fcdc805f6c1b3be6a20a7e858e3e80cbd83a9121 |
clean |
| docs | /Users/ksv741/Project/vibe/WealthLedger/docs |
e6fd4f64b81dd73b33959b845a1babcfac1891c8 |
clean |
Skills. В начале через Skill загружен установленный ponytail-audit. Применены его критерии удаления процессной сложности, поиска существующих средств и минимального изменения. Его краткий формат расширен обязательной структурой этого аудита; потенциальные строки/зависимости к удалению не выдумываются. Остальные skill-файлы читались как предмет исследования, без запуска их workflow.
Что выполнялось: Read/Glob/Grep; git status --short; git rev-parse --show-toplevel HEAD; git config --show-origin --get core.hooksPath; command -v opencode; ls для проверки каталога результата и типа каталогов skills; read-only jq-агрегации существующего JSON. При отсутствии core.hooksPath запрос Git возвращает отсутствие значения, а не поломку репозитория. Не найденный specs/.githooks/pre-commit проверен перечислением каталога: там только commit-msg.
Не выполнялось: install, Node-команды, tests, lint, build, verify, codegen, OpenSpec CLI, hooks, graph generation, обращения к MCP/внешним сервисам, commit/PR, изменения конфигураций или исходников. Команды тестирования внутри исторического trace — наблюдаемые записи прежнего сеанса, не запуски этого аудита.
Ограничения: глобальные настройки, локальные .agents/skills и session.json не versioned этим root allowlist; указанный root SHA не фиксирует их содержание. Startup/debug logs текущего harness не исследованы. Не открывались auth-файлы, БД истории, чужие глобальные sessions или банковские данные. Значения credentials из конфигураций не приводятся. technical-audit-2026-10-11.md использован только как прежний реестр: отдельного доказательства workflow-проблем он не дает. Отчет локальный и исключен root allowlist (.gitignore:1–7); добавление в tracking не выполняется.
2. Executive verdict
- Факт: действующие repo routers уже обеспечивают selective context и самостоятельность checkout. Нет обязательного правила читать все четыре репозитория для каждого UI/backend изменения. Это следует сохранить, а не заменять новым общим руководством.
- Подтвержденный механизм затрат: для любого code/dependency change оба engineering-файла требуют
npm ciи полныйverify. В SDD task-dispatch это становится требованием каждого исполнителя. Два завершенных исполнителя в trace сообщают о full verify; фактические subprocess traces и длительность этих gates отсутствуют. Размер экономии not measured. - Подтвержденные конфликты инструкций: локальный risk-based testing конкурирует с универсальным TDD; scoped reviewer — с требованием «fresh verification в этом сообщении»; project approval flow — с generic autonomous rulings. Дополнительные отрицания в dispatch prompt сейчас компенсируют часть конфликтов.
- Наблюдаемый локальный сбой:
nvm use --silentбез bootstrap завершился127; следующий вызов с загрузкойnvm.shвыполнил целевой тест. Это дешевый устранимый retry, а не свидетельство медленных тестов. - Факт о выборке: родительский SDD export содержит 53 tool parts и записанные token counts. Повторных Read одного пути нет. Две отмены task и повторные dispatch видны; причины отмен и объем потерянной работы UNVERIFIED. Обвинять модель или считать все время сеанса overhead нельзя.
- Непроверенная гипотеза: глобальный каталог MCP/skills и широкий graphify trigger увеличивают нерелевантный контекст. Экспозиция инструментов подтверждена, их вклад в tokens/latency — нет. До измерения нужны селективные triggers, а не массовое удаление полезных инструментов.
- KEEP: approval, explicit store, публичные API artifacts, финансовые/DB/auth regression boundaries и независимый semantic review. В исторической второй задаче review действительно выявил нарушение exact-UID требования после зеленых тестов; это контрпример предложению удалить review целиком.
Итог: пять подтвержденных instruction/config findings и одна исследовательская гипотеза. P0/P1 не установлены. Основной путь улучшения — согласовать существующие правила и единицу verification, без новой инфраструктуры.
3. Inventory & coverage
3.1. Что реально изучено
| Область | Проверенные объекты | Граница выводов |
|---|---|---|
| Repo entry points | Root и четыре локальных AGENTS.md; frontend/backend engineering/testing; frontend architecture/UI/data; backend HTTP API; specs README/AI_INDEX; docs CONTRIBUTING |
Правила прочитаны; их соблюдение во всех прежних sessions не доказано |
| Verification consumers | frontend/backend/specs/docs package.json; frontend .husky/pre-commit, commit-msg, установленный Husky launcher; specs .githooks/commit-msg; Git hooksPath |
Прослежены точки запуска, без аудита семантики custom scripts или CI topology |
| SDD | specs/openspec/config.yaml, v2 schema.yaml, установленный стандартный openspec-apply-change |
Approval/dependencies/context loading; весь массив canonical specs и archives не читался |
| Generic workflows | subagent-driven-development и implementer/reviewer templates; TDD; verification-before-completion |
Проверены реальные противоречия и capability mismatch, без исполнения workflow |
| Global OpenCode | ~/.config/opencode/opencode.jsonc, plugins/rtk.ts, установленный Ponytail plugin |
Регистрация/триггеры; tool transport startup latency не измерена |
| Другие harness | ~/.claude/CLAUDE.md, RTK.md, settings; пустой ~/.codex/AGENTS.md, релевантные config declarations и hooks.json |
Наличие и регистрация не приравниваются к исполнению в OpenCode |
| UI conventions | AccountIncomePage container и BankCardForm consumer; FSD skill sections о selective references/extraction | Проверка обвинения в обязательных пустых VM/wrappers; не frontend architecture audit |
| Runtime sample | Workspace session.json, parent messages/tool states/token counters |
Один незавершенный SDD-сеанс; child tool traces отсутствуют |
Frontend — React/TypeScript/Vite с Mantine, Vitest и локальными packages; backend — NestJS/Prisma/SQLite с Jest. Стек проверен по manifests и локальным инструкциям, не принят из старого отчета.
На glob по root нельзя полагаться для nested repos: root исключает их из tracking. Поэтому entry points и поиск локальных AGENTS выполнялись с явными repo paths. В охваченном поиске frontend/backend/specs/docs найдено по одному AGENTS.md; repo listings не показывают локальных .opencode/.claude configs. Это не доказательство отсутствия всех возможных environment overrides.
3.2. Метрики и метод
Источник — JSON export; обход .messages[].parts[], только type == "tool". Считаются вызовы родителя, включая отмененные и незавершенный. Tokens суммированы один раз из assistant .info.tokens, без повторного учета step-finish.tokens; сумма сверена с .info.tokens сеанса. Размеры outputs — utf8bytelength(.state.output), без дубликатов из metadata. Байты не конвертируются в tokens.
| Метрика | Значение | Охват/интерпретация |
|---|---|---|
| Сообщения | 42: 38 assistant, 4 user | Только parent export |
| Tool parts | 53 | bash 19; read 12; task 9; skill 4; write 3; grep 2; edit 2; todowrite 2 |
| Повторное чтение пути | 0 повторов среди 12 Read | Не включает shell reads и инструменты children |
| До первого implementer dispatch | 34 tool parts | Включает approvals, необходимые contextFiles и два explore; не означает 34 лишних вызова |
| Записанные input tokens | 449369 | Provider/harness counters, не независимый tokenizer |
| Записанные cache read tokens | 2601600 | Сумма по turns, не число уникальных tokens контекста |
| Записанные output / reasoning tokens | 13682 / 17208 | Отдельные поля export; не суммируются в придуманную billing-модель |
| Tool output bytes | 242449 | .state.output родителя |
| Из них четыре Skill outputs | 58388 | apply, subagent workflow, TDD, verification; без injected system prompt |
| Два explore outputs | 25197 | Backend/frontend mapping; полезность каждой строки не измерена |
| Самый большой tool output | 33577 bytes | Загрузка subagent-driven-development |
| Dispatch prompt bytes | 26357 | Девять task inputs, включая отмены и resume |
| Отмены / незавершенный task | 2 / 1 | Отмены сопровождаются MessageAbortedError; последний fix имеет status running |
| Bash с nonzero exit | 1 | nvm отсутствует; exit 127 |
| Интервал export | 2026-10-10 18:59:47–20:17:09 UTC; 4642.105 s | updated-created; включает ожидание пользователя и children, не active processing time |
Evidence: session.json:1–34 — metadata; :2970–2994, :3280–3300, :3961–3979, :4070–4089, :4392–4410, :4511–4530 — task states; :3420–3434 — failed shell. Числа получены read-only jq с фильтрацией/group_by и суммированием, а не оценкой по размерам файлов.
Стоимость исполнения: cost: 0 в export не доказывает бесплатную работу. Полные costs/tokens children, стоимость tool catalog/system instructions, чистый verification runtime и контрфактическая экономия NOT MEASURED. Отдельно выделенный runtime agent overhead NOT MEASURED, хотя session usage counters доступны.
Репрезентативность ограничена: один явно запрошенный SDD feature с делегацией, TDD и review. Нет runtime samples small UI fix или обычного backend contract change; их последовательности ниже — рекомендации, не измерения. Точные HEAD четырех repo в export не установлены; его snapshot hashes не приравниваются к repo commits. Историческое исполнение не приписывается текущим HEAD автоматически. Reports/briefs из прежнего .superpowers workspace изучались только по встроенному содержимому export, без подтверждения наличия этих файлов сейчас.
4. Instruction Precedence Map
| Уровень/источник | Реальное включение | Правило разрешения |
|---|---|---|
| System/developer текущего harness | Уже передан в текущем сеансе: инструменты, cwd, инструкции OpenCode, правила выбора skills и запрет незапрошенной делегации | Имеет более высокий приоритет, чем project/skill text; каталог навыков не означает загрузку всех тел |
| Прямой user request / audit protocol | Пользователь назвал prompt и точный файл результата; protocol прочитан | Read-only ограничения определяют этот аудит; создание feature/SDD артефактов не активировано |
Global ~/.claude/CLAUDE.md |
Прямо объявлен harness как loaded instruction source в текущем сеансе; внутри ссылка @RTK.md |
Само включение подтверждено; детали loader fallback не установлены. RTK.md дополнительно прочитан вручную, его автоматическое раскрытие не предполагается |
Root AGENTS.md |
Объявлен loaded source; cwd находится в root | Root правила относятся к root; локальные application conventions не наследуют root conventions (AGENTS.md:9–13) |
| Repo-local AGENTS | В этом аудите явно прочитаны; при чтении файлов repo harness дополнительно показывает соответствующий reminder | Владелец реализации — affected repo. Повторный reminder не требует второго Read того же файла |
| Topic conventions | Через локальные task/path triggers, не все сразу | Объединить применимые темы, убрать дубликаты путей; engineering entry point обязателен в frontend/backend |
| SDD context/config/schema | Только при explicit OpenSpec; CLI возвращает contextFiles, selected schema и tasks | Approval/contract — проектный semantic authority; structural readiness не является approval |
| Loaded skills | Тело появляется после Skill invocation или целевого чтения | Уточняют способ выполнения, не отменяют user scope, repo safety или утвержденные contracts |
| Ponytail plugin | Config registration + experimental.chat.system.transform; активный ruleset виден в текущем harness |
Это injected text, не отдельный Skill call на каждом turn. Число последовательных копий в prompt не установлено |
| Codex/Claude settings/hooks | Конфигурации существуют; нет runtime traces их исполнения в выбранном OpenCode sample | Не переносить их subprocess costs на OpenCode по факту наличия файлов |
Evidence: root AGENTS.md:9–32; frontend/backend AGENTS.md:3–26; specs AGENTS.md:3–19; ~/.claude/CLAUDE.md:1–5; specs/openspec/config.yaml:55–62; v2 schema.yaml:592–609. Реальный механизм Ponytail: ~/.config/opencode/opencode.jsonc:6–9 → установленный package .opencode/plugins/ponytail.mjs:51–82.
Каталоги .agents/skills, ~/.config/opencode/skills, ~/.codex/skills, ~/.claude/skills/graphify проверены как directories, не top-level symlinks. Это не исключает ссылок глубже. Происхождение global Claude fallback и discovery internals — UNVERIFIED; loaded-source declaration и видимый skill catalog достаточны для утверждения об экспозиции, но не для вывода о конкретном loader algorithm.
5. Agent Hook/Tool Trigger Matrix
| Событие | Агент/prompt | Hook/subprocess | Что установлено |
|---|---|---|---|
| Read / Grep / Glob | Router может активировать conventions/skills | В просмотренном OpenCode RTK plugin эти tools отфильтрованы | Нет найденного автоматического lint/test/build при чтении |
| Edit / apply_patch | Изменение путей активирует rerouting; code change требует final gates по engineering | Просмотренные RTK/Ponytail hooks не запускают application checks на edit | Проверки выбирает агент; наличие других environment hooks не исключено |
| Bash/shell | Команду выбирает агент из task verification/conventions | RTK проверяет binary при инициализации, затем вызывает rtk rewrite <command> до каждого bash/shell |
Rewrite — дополнительный subprocess, не test runner; latency NOT MEASURED |
| Каждый OpenCode system transform | Активен Ponytail mode | Plugin читает mode и добавляет ruleset к system output | Нет запуска lint/test/build; накопление старых копий не доказано |
npm ci frontend |
Требуется engineering для code/dependency change | Manifest prepare: husky |
Может настраивать локальные hooks; это не read-only проверка |
npm run verify frontend |
Full final gate; может попасть в каждый worker brief | Package build, OpenAPI check, types, ESLint, lint-rule tests, Vitest coverage, Knip, два dependency graphs, app и Storybook builds | Триггер проверен; внутренние дубли/CI topology отнесены audit 11 |
npm run verify backend |
Аналогичное local требование | Lint, lint-rule tests, два typecheck, Jest coverage, Prisma generate/Nest build | В sample два исполнителя сообщают о запуске; child command traces отсутствуют |
| Git commit frontend | Агент обязан видеть результат hooks | Активный .husky/_; pre-commit → Gitleaks, lint-staged с ESLint --fix, npm run deps; commit-msg → commitlint |
Depcruise запускает hook, не Read/Edit; lint-staged может изменить staged content |
| Git commit specs | Commit metadata | Активный .githooks; только commit-msg → commitlint |
Pre-commit/full validation hook не найден |
| Git commit root/backend/docs | Правила подготовки commit | Явный core.hooksPath не задан в прочитанной конфигурации |
Отсутствие custom hooks в .git/hooks не утверждается: их содержимое не проверялось |
| Codex PreToolUse/PostToolUse и lifecycle | Не выбранный runtime sample | ~/.codex/hooks.json регистрирует Caveman adapters, PreToolUse также shrink-hook; config содержит trusted hashes |
Регистрация подтверждена; runtime вызовы и стоимость UNVERIFIED |
| Claude lifecycle | Global plugins enabled | В ~/.claude/settings.json собственный hooks block не найден |
Plugin hooks отдельно не изучены; фраза RTK.md про transparent Claude rewrite не является доказательством его исполнения |
| OpenSpec Apply | Store/status/apply context по явному запросу | CLI не является edit hook; после task checkbox стандартный skill требует refresh instructions | Не сокращать через угадывание путей/checkbox line; payload filtering не должно скрывать обязательный context |
Evidence: ~/.config/opencode/plugins/rtk.ts:10–36; Ponytail plugin :73–95; frontend/package.json:14–38; .husky/pre-commit:1–3, .husky/commit-msg:1, .husky/_/h:6–17; backend/package.json:12–38; specs/package.json:8–14; .githooks/commit-msg:1–2; ~/.codex/hooks.json:23–68; ~/.codex/config.toml:269–314; ~/.claude/settings.json:1–33; OpenSpec apply skill :104–112.
6. Findings
AGENT-001 — Verification привязан к каждому code change/worker, включая переустановку
- Decision = SIMPLIFY; Severity = P2; Confidence = High; Effort = S.
- Evidence:
frontend/.ai/conventions/engineering.md:58–66;backend/.ai/conventions/engineering.md:58–66;frontend/package.json:26–27;backend/package.json:34;session.json:2975–2993,4071–4089. - Claim: единый финальный gate оправдан, но правило
npm ci+ fullverifyне различает восстановление environment, целевую task и готовность repo delivery. - Current mechanism: локальный router ведет в engineering; dispatch требует полного backend verify до отчета каждого исполнителя. Worker 1.1 и worker 1.2 сообщают full verify на последовательных состояниях одного checkout.
npm ciпредписан текстом, но его исполнение в этой выборке не видно. - Impact / actual cost: лишние install/full checks при уже готовом environment и дроблении feature. Full verify включает coverage/build, у frontend также Storybook. Impact unmeasured; две декларации запуска — не измерение двух реальных длительностей.
- Why now: это прямой consumer локальных инструкций в доступном SDD-сеансе; одинаковое требование применяется и к небольшому UI diff.
- Minimum change: в существующем разделе gates отделить install при отсутствующих/измененных dependencies, targeted iteration и full verify один раз на итоговом состоянии affected repo. Worker проверяет свою boundary; repo owner закрывает финальный gate. Explicit approved task Verification остается обязательной и не отменяется этой оптимизацией.
- Guarantees at risk: общий type/build/import graph; fresh Prisma/package artifacts; money/auth/DB/contract regression checks. Полный финальный gate и risk checks сохранить, не заменять их одним changed-file lint.
- Counterarguments / trade-offs:
npm ciполезен для подозрительного или несовместимого environment; per-task full gate дает ранний сигнал интеграции. Поэтому исключение должно зависеть от готовности environment и типа diff, а не от желания ускориться. Markdown-only путь уже дешевый — исправлять его не требуется. - Verification or rollback: одна small UI задача и одна backend task с неизмененным lockfile; сравнить реальные install/check invocations, сохранив финальный full gate. При ошибке из stale environment восстановить clean install. До согласования локального правила действующее full verify требование сохраняется.
- Related finding IDs: AGENT-002, AGENT-004.
AGENT-002 — Несогласованные testing/fresh-evidence rules требуют лишней работы
- Decision = SIMPLIFY; Severity = P2; Confidence = High; Effort = S.
- Evidence:
frontend/.ai/conventions/testing.md:13–24;backend/.ai/conventions/testing.md:13–20,34–42;.agents/skills/workflow/test-driven-development/SKILL.md:18–45,185–193,293–306;.agents/skills/workflow/verification-before-completion/SKILL.md:17–35,64–71,100–114;.agents/skills/workflow/subagent-driven-development/task-reviewer-prompt.md:73–92;session.json:3380–3428,3517–3533. - Claim: project risk-based testing допускает declaration/thin wiring без нового unit test, а generic TDD требует test-first для любого production code и тест каждой новой функции. Отдельно правило fresh evidence «в этом сообщении» конфликтует с переиспользованием проверенного отчета reviewer.
- Current mechanism: оба skills опубликованы в текущем catalog; в sample оба загружены. Reviewer template запрещает rerun без конкретного сомнения; после review coordinator объявляет independent check и повторно запускает целевой Jest. Начальный user prompt также прямо просил coordinator verification — повтор нельзя целиком приписать skill.
- Impact / actual cost: один дополнительный успешный parent target-test вызов после worker/reviewer; перед ним одна failed shell попытка. Наличие бессмысленных новых tests из-за TDD в текущих исходниках не доказано. Impact unmeasured для общего потока.
- Why now: правила не дают единого ответа, что считается task proof; агент повторно принимает решение вместо использования одного evidence contract.
- Minimum change: применимость generic TDD ограничить observable behavior/regression; declaration/generated/low-risk cosmetic changes следуют local testing. Fresh evidence связывать с проверенной версией diff, command, exit и outcome, а не номером текущего сообщения. Reviewer проверяет diff и соответствие evidence; повторяет test при named doubt или изменении проверенного кода.
- Guarantees at risk: обнаружение реальной регрессии, честный RED/GREEN для bug/новой логики, достоверность worker evidence. Не принимать один
DONE; если отчет неполный или outcome/версия не совпадают, проверить целевую boundary заново. - Counterarguments / trade-offs: independent execution нужен при явном user требовании, подозрительном evidence или чувствительной boundary. В этой sample coordinator rerun имеет такое пользовательское основание. Текущий harness также уже исключает tests для low-risk reversible changes; его более высокий приоритет ограничивает generic TDD. Проблема — конфликт default rules, а не доказанная бесполезность каждого повторного теста.
- Verification or rollback: сравнить три случая — cosmetic diff, behavior fix, misleading worker report. Первому не добавлять фиктивный test, второму оставить meaningful regression, третий должен вызвать повторную проверку/блокировку. При сомнении в evidence вернуть targeted rerun.
- Related finding IDs: AGENT-001, AGENT-003, AGENT-004.
AGENT-003 — Generic autonomous rulings конфликтуют с approval flow SDD
- Decision = FIX; Severity = P2; Confidence = High; Effort = S.
- Evidence:
.agents/skills/workflow/subagent-driven-development/SKILL.md:17–31,296–301,366–371,411–428;.agents/skills/sdd/openspec-apply-change/SKILL.md:115–120;specs/openspec/config.yaml:55–58;specs/openspec/schemas/wealth-ledger-sdd-v2/schema.yaml:625–642;session.json:57,2977,4073. - Claim: generic controller предлагает самостоятельно решать plan defects/ambiguities и продолжать, тогда как WealthLedger требует остановить downstream при semantic conflict и переутвердить affected artifacts.
- Current mechanism: user загрузил OpenSpec и subagent workflow вместе. Generic skill объявляет только четыре stop classes и разрешает rulings; OpenSpec отдельно требует surface/ask при scope/design issues. User и worker briefs в sample явно запрещают изменение approved requirements, компенсируя конфликт.
- Impact / actual cost: дополнительный process text в dispatch и риск неверного continuation/rework при следующем неоднозначном контракте. Нарушение approval в этой sample не установлено. Impact unmeasured.
- Why now: противоречие находится в реально загруженной паре workflows, а не в неиспользуемом архиве.
- Minimum change: сузить generic rulings до implementation choices внутри approved semantics; при SDD ссылаться на существующий project change-control. Убрать универсальную формулу «only four stops» для workflow с внешним approval. Стандартный OpenSpec skill не менять и не форкать.
- Guarantees at risk: approval provenance, contract compatibility, financial/access invariants и пользовательское управление scope. Никакой token optimization не оправдывает их обход.
- Counterarguments / trade-offs: автономные локальные решения ускоряют execution и не требуют approval на каждый naming/refactor. Сохранять их для механических решений; semantic changes различать по уже существующей schema, без нового документа принятия решений.
- Verification or rollback: статический dry-run на двух ситуациях: локальный helper choice продолжает execution; новая wire field/error semantics возвращает к earliest affected artifact. При неоднозначности сохранять downstream stop.
- Related finding IDs: AGENT-002, AGENT-006.
AGENT-004 — Инструкция Node bootstrap недостаточна для non-interactive shell
- Decision = FIX; Severity = P2; Confidence = High; Effort = S.
- Evidence:
AGENTS.md:26;frontend/.ai/conventions/engineering.md:14;backend/.ai/conventions/engineering.md:14;specs/AGENTS.md:18–19;session.json:3420–3434,3517–3533. - Claim: команда
nvm use --silentпредполагает уже загруженную shell function, но tool shell в sample этого не обеспечил. - Current mechanism: coordinator вызывает буквально рекомендованную команду в backend cwd; получает
zsh:1: command not found: nvm, exit 127. Следующий вызов загружает$HOME/.nvm/nvm.sh, выбирает local Node и получает 28 passed. - Impact / actual cost: подтвержден один failed tool call и следующий исправленный вызов. Записанные tool durations — 13 ms и 1406 ms; это не стоимость reasoning/turn и не прогноз экономии.
- Why now: это воспроизводимый по trace разрыв между documented command и выбранным tool environment; worker briefs уже содержат bootstrap, но общий entry point — нет.
- Minimum change: добавить к существующей инструкции короткое условие для non-interactive shell: загрузить установленный
nvm.sh, затемnvm use --silentиз repo owner cwd. Не создавать bootstrap script, не менять.nvmrc, не ставить Node в этом аудите. - Guarantees at risk: pinned local Node и правильный cwd. Их сохранить; использование произвольного системного Node не является исправлением.
- Counterarguments / trade-offs: в interactive shell исходная команда работает. Не делать безусловный второй bootstrap на каждый вызов, если shell уже предоставляет
nvm. - Verification or rollback: в следующей обычной implementation session проверить bootstrap в том же non-interactive tool shell и local cwd одной безопасной version-командой; этот аудит не запускал Node.
- Related finding IDs: AGENT-001, AGENT-002.
AGENT-005 — Глобальный skill/tool routing шире типичных задач; вклад требует измерения
- Decision = INVESTIGATE; Severity = P3; Confidence = Medium; Effort = S.
- Evidence:
~/.claude/CLAUDE.md:1–5;~/.claude/skills/graphify/SKILL.md:1–4,49–59,65–100;~/.config/opencode/opencode.jsonc:84–102;~/.cache/opencode/packages/@dietrichgebert/ponytail@latest/node_modules/@dietrichgebert/ponytail/.opencode/plugins/ponytail.mjs:54–82; текущий harness catalog/tool declarations. - Claim: есть risk of inefficiency: global graphify description предлагает обработать любую codebase/project-content question через graph, а глобальная короткая инструкция явно называет
/graphify. В обычном backend/text task также доступны браузерные и remote-repo tools. - Current mechanism: graphify description действительно опубликован в текущем skill catalog; в отсутствие графа полный workflow предполагает install/detect/write. Playwright, Chrome DevTools, Gitea и Context7 доступны в текущем tool surface и зарегистрированы global config. Sample не содержит graphify/browser/MCP вызовов.
- Impact / actual cost: irrelevance/selection risk и потенциальный prompt/startup cost. Tokens tool schemas, install/startup latency и число ошибочных skill invocations NOT MEASURED. Существование двух browser tools не доказывает, что один лишний.
- Why now: уже видна широкая экспозиция; измерение можно сделать без нового tracing stack и без изменения стандартных OpenSpec skills.
- Minimum change: проверить resolved startup sources; на обычных задачах выбирать skill по требуемому workflow, не по слову «codebase». Для graphify сравнить narrow explicit-query trigger с текущим broad description; для MCP — доступный task-specific набор при запуске, если harness его поддерживает. Менять default registration только после сравнения.
- Guarantees at risk: browser/a11y proof для UI, актуальные library docs, remote issue/review operations, полезные существующие graph queries. Для задач с такими boundaries инструменты должны оставаться доступны.
- Counterarguments / trade-offs: MCP может запускаться лениво, tool schemas могут кэшироваться; graph lookup по готовому графу может экономить чтение. Read-only протокол этого аудита исключает graph generation независимо от broad skill trigger.
- Verification or rollback: один и тот же bounded task в полном и релевантном tool surface; записать resolved sources, first-response tokens, tool calls и outcomes. Без такого A/B автоматическое удаление MCP/graphify не рекомендовано.
- Related finding IDs: AGENT-002, AGENT-006.
AGENT-006 — Обязательный выбор модели не поддержан текущим Task interface
- Decision = SIMPLIFY; Severity = P3; Confidence = High; Effort = S.
- Evidence:
.agents/skills/workflow/subagent-driven-development/SKILL.md:184–214;.agents/skills/workflow/subagent-driven-development/implementer-prompt.md:6–10;.agents/skills/workflow/subagent-driven-development/task-reviewer-prompt.md:11–14,190–204; текущая declarationfunctions.task;session.json:2975–2987,3282–3293,4071–4082,4511–4523. - Claim: правило «always specify model explicitly» без capability condition невозможно выполнить через текущий Task tool: он принимает description/prompt/subagent_type/task_id/command, но не model.
- Current mechanism: все девять task inputs в export без
model; metadata children совпадает с моделью родительского turn, в том числе после смены parent provider/model. Это подтверждает фактическую выборку, но не раскрывает внутренний routing провайдера. - Impact / actual cost: невозможно гарантировать заявленную дешевую роль; агент может тратить время на выбор недоступного параметра или ошибочно обещать экономию. Ни невалидного вызова с model, ни финансового ущерба в sample не наблюдается. Impact unmeasured.
- Why now: несоответствие находится в обязательном template и реальном доступном interface, поэтому повторяется при каждой подготовке dispatch.
- Minimum change: сделать выбор model условным по tool capability; при неподдерживаемом override использовать доступный default и не заявлять оптимизацию тарифа. Не добавлять custom dispatcher/новый subagent type ради обхода.
- Guarantees at risk: достаточная модель для сложного review и честное описание фактических capabilities. Не обещать escalation, которую tool не может исполнить.
- Counterarguments / trade-offs: другой harness может поддерживать model override; правило там полезно. Историческая Task schema не сохранена, поэтому невозможность override доказана для текущего interface, а для sample виден только фактический default routing.
- Verification or rollback: сверить template с tool schema; следующий нужный dispatch должен быть валидным без выдуманного параметра. При доступном override правило можно применять как раньше.
- Related finding IDs: AGENT-003, AGENT-005.
7. Observed Session Anti-patterns и контрпримеры
Goal → reads → tools → result: explicit stock-screener SDD/delegation request (session.json:57) → store/list/status, approval lookup и tasks → user approval → apply contextFiles → семь дополнительных planning/contract reads, repo entry points → два explore и generic workflow setup → task 1.1 implementer/reviewer → coordinator target check → checkbox/ledger → task 1.2 dispatch, interruption/re-dispatch, review interruption/re-dispatch → выявленный contract defect → fix running при окончании export.
| Наблюдение | Evidence | Вывод с границами |
|---|---|---|
| Generic workflow дает большой payload | Skill output session.json:2251–2256; размер 33577 bytes |
Содержимое реально попало в parent context; его token attribution не измерена |
| Explore возвращают подробную карту в parent | :2276–2330; суммарно 25197 bytes |
Можно сузить будущий запрос до owner/entry points/named risks; нельзя объявить всю карту ненужной для сложной feature |
| Worker full verify заявлен дважды | :2980, :4076; task-2 report сохранен в :4176–4184 |
Per-worker требование видно; реальные commands/timings children недоступны |
| Fresh coordinator test после review | :3380–3428,3517–3533 |
Наблюдаемое повторное исполнение; user explicit verification — существенный контраргумент |
| Non-interactive bootstrap retry | :3421–3428,3519–3526 |
Подтвержденная ошибка, AGENT-004 |
| Два canceled task заменены свежими dispatch | :3929–3979,4072–4089,4371–4410,4513–4530 |
Отмена/повтор подтверждены. Потеря partial edits, корень отмен, crash модели и возможность safe resume UNVERIFIED |
| Последующий fix использует resume | :4620–4632 |
Уже есть экономящий context механизм; результат fix в export отсутствует |
| Read loops | Group by .state.input.filePath |
Не найдены в parent. Нельзя переносить вывод на children |
| Review выявляет реальный mismatch | :4517 |
Зеленые worker tests не заменяют semantic review. Здесь удалить review нельзя |
Начальные store/status/apply commands и чтение всех возвращенных contextFiles соответствуют explicit user request и стандартному skill. Одинаковые слова verify, AGENTS, contract в разных источниках сами по себе не доказательство DRY-нарушения.
Смена модели после interruption сопровождается parent token counters без cache reuse (session.json:4026–4034), позже — частичным cache read (:4467–4475). Это наблюдение, не доказательство, что смена модели вызвала потерю кэша или что непрерывный сеанс стоил бы меньше.
8. Minimal Agent Execution Policy
Это рекомендуемое сокращение существующей процедуры после согласования AGENT-001/002, а не новый обязательный документ. Сегодня действующие repo gates и explicit task Verification имеют силу.
Общий путь: read once → narrow search → edit batch → targeted check → final affected-repo gate. Повторный routing — проверка новых границ, а не перечитывание уже актуального файла. Новый Read нужен при смене revision, неполном excerpt или появлении новой ответственности.
| Размер / тип | Минимальная последовательность | Verification и stop boundaries |
|---|---|---|
| S — small UI fix | Явный frontend cwd/status → local AGENTS + engineering entry point → affected component/CSS/i18n и 1 ближайший пример → UI или только strings section; TS/testing темы по реальному diff → одна batch правка | Targeted type/lint, semantic visual/keyboard/narrow viewport по изменению; behavior test только при risk. Full final gate по действующей/согласованной policy. Не читать backend/docs/specs ради чисто визуального diff, не открывать SDD lifecycle |
| M — backend contract change | Backend cwd/status → AGENTS/engineering → HTTP API, affected DTO/controller/service, configured HTTP tests → согласованная wire expectation и опубликованный baseline/artifact → errors/security/data только по trigger → batch implementation | Type/lint + relevant HTTP outcome + test:openapi-contract; генерация публичного artifact. Money/CAS/transaction changes требуют своей real-boundary proof. Передать artifact потребителю; affected frontend отдельно проверяет snapshot/generated types и relevant behavior. Не читать весь consumer checkout для проектирования DTO |
| L — SDD feature | Explicit store selection/status/apply и approvals → все native contextFiles прочитать один раз → dependency/owner map → local AGENTS только affected repo → task-specific upstream sections/contracts → implementation по dependencies; делегация только если явно запрошена/разрешена | Targeted proof в worker; один read-only scoped reviewer на оговоренную границу; fix только findings и covering tests; full verify на итоговом состоянии affected repo с дополнительными contract/DB/auth checks. До task checkbox — approved task Verification; после — refresh native apply instructions. Final semantic comparison target ↔ generated API, docs/QA по approved tasks |
Что действительно нельзя пропустить: измененный response/status/error shape требует producer/consumer contract lookup, даже если UI diff маленький. Изменение auth/connection cache требует проверки владельца session/generation. Для утвержденного SDD нельзя заменить contextFiles догадкой или пропустить upstream requirement ради smaller context. Structural validation не доказывает runtime contract compatibility.
Контекст соседей: фактическое число нерелевантных прочитанных файлов определить нельзя. В sample оба application repo и docs входят в explicit delivery scope, поэтому их AGENTS не являются ошибочным чтением. В S UI flow идеальная выборка не требует чтения трех соседних checkout; в M она требует предоставленного API artifact и конкретных consumer expectations, а не исходников всех соседей.
9. Keep/Delete/Move Instruction Register
| Instruction / mechanism | Решение | Owner / куда относится | Основание |
|---|---|---|---|
| Local AGENTS task/path routing | KEEP | Каждый repo | Самостоятельность и selective context уже реализованы; root AGENTS.md:9–13 |
| Одинаковые engineering базовые нормы frontend/backend | KEEP | Оба автономных repo | Общий root файл создал бы обязательную cross-checkout зависимость; одинаковый текст здесь не доказательство лишнего механизма |
| Безусловное install для любого code change | SIMPLIFY | Существующий local engineering section | Environment need отделить от source diff, AGENT-001 |
| Полный gate на каждую мелкую worker task | SIMPLIFY | Repo delivery owner и approved task Verification | Сохранять final proof; не дублировать по факту слова DONE |
| «Каждая функция обязана иметь новый test», «fresh в этом message» | SIMPLIFY | Generic skill applicability | Local risk boundary + evidence version, AGENT-002 |
| Autonomous ruling над SDD semantics | FIX | Generic coordinator, project change-control остается owner | AGENT-003; стандартные OpenSpec skills сохраняются |
| Обязательное поле model при отсутствии capability | SIMPLIFY | Generic templates | AGENT-006 |
| Manual style/sorting/import-rule перепроверка | MOVE responsibility | Существующие ESLint/TypeScript/dependency configs | AGENT prompt оставляет короткий trigger и ссылку; не дублирует deterministic analyzer вручную |
| Смысл owner, public error safety, product i18n | KEEP | Semantic review и local conventions | Lint не доказывает смысл; UI :157–170, architecture :86–93 |
| Finance page container/VM/view | KEEP | Frontend UI owner | UI :44–70; AccountIncomePage :8–14 — state selection, не пустой wrapper для каждого control |
| Запрет passthrough hooks и ненужных VM/wrapper файлов | KEEP | Frontend UI owner | frontend/.ai/conventions/ui.md:26–28,84–105 уже запрещает механическое дробление; конкретного требования/объекта для удаления не найдено |
| FSD skill и local placement profile | KEEP с selective references | Local architecture решает placement | Skill :24–29,33–50,76–77 допускает selective reading и existing widgets; автоматическая миграция не нужна |
| Explicit SDD, approvals, store, contextFiles | KEEP | Specs config/schema + native skill | Project semantic authority и защита cwd/store; не переписывать standard skill ради меньшего payload |
| Progress/checkpoint и scoped review | KEEP | Уже выбранный workflow | Защита от повторной работы/пропуска contract; bounded brief/report может быть полезен |
| Глобальные graphify/MCP declarations | INVESTIGATE | Harness/global config | Startup/capability cost не измерен, AGENT-005 |
| Boy Scout | KEEP | Affected area review | Root code-health :30–37, engineering :25–27 ограничивают low-risk scope; не повод для whole-repo cleanup |
DELETE / SIMPLIFY / KEEP / INVESTIGATE — сводка
| Decision | Объекты | Безопасная граница |
|---|---|---|
| DELETE | Подтвержденных standalone механизмов для удаления нет | Не удалять проверку только из-за ее размера/повтора названия |
| SIMPLIFY | AGENT-001, AGENT-002, AGENT-006 | Reuse environment и evidence, final gate и meaningful regression остаются |
| FIX | AGENT-003, AGENT-004 | Approval precedence и pinned Node сохраняются |
| KEEP | Local routers; native OpenSpec; target/runtime API comparison; auth/money/real DB/CAS/rollback checks; scheduler lifecycle/idempotency/replay proof по trigger; scoped semantic review | Protected invariants не торгуются на tokens; их runtime реализации в этом аудите не переоценивались |
| INVESTIGATE | AGENT-005; cancellation recovery; child overhead | Только bounded measurement, без нового tracing framework |
Ponytail-ranked cuts: shrink: объединить final verification на repo delivery boundary [AGENT-001]; shrink: убрать конкурирующие blanket testing/freshness mandates [AGENT-002]; yagni: убрать обязательный неподдерживаемый model override [AGENT-006]. Net lines/deps possible: not measured; удаление dependencies не предложено.
10. Cost & benefit
| Изменение | Класс ожидаемой экономии | Фактическая опора | Необходимые гарантии |
|---|---|---|---|
| AGENT-001 | Local runtime, agent turns, install traffic | Два worker full-verify reports; экономия not measured | Fresh final verify, dependency reproducibility, targeted risk suites |
| AGENT-002 | Agent tokens/tool calls, test maintenance | Coordinator rerun виден; непродуктивные новые tests не доказаны | Версия evidence, meaningful RED/GREEN, independent semantic review |
| AGENT-003 | Cognitive load, dispatch prompt, rework | Конфликт реально загруженных instructions | Approved semantics, safe escalation |
| AGENT-004 | Retry/tool call и associated reasoning | Один failed call + corrected run | Local pinned Node/cwd |
| AGENT-005 | Возможные prompt tokens/startup latency | Global registration/catalog exposure | Нужные browser/docs/remote tools по actual task |
| AGENT-006 | Planning overhead, честность cost policy | Template требует отсутствующую capability | Валидный task interface и достаточная model capability |
CI minutes: этот аудит не обосновывает сокращение CI. Рассматриваются причины, по которым агент вызывает checks локально; изменение состава pipeline — audit 11. Проценты, ускорение, денежная экономия и сокращение строк не рассчитывались.
11. Top actions
Quick wins
- AGENT-004: дополнить существующий Node entry point non-interactive bootstrap условием; проверить один реальный tool shell без нового скрипта.
- AGENT-006: заменить безусловный model override на capability-aware правило; убрать невыполнимое обязательство из templates.
- AGENT-003: явно подчинить generic rulings существующему SDD change-control; semantic conflicts должны останавливать affected downstream.
- AGENT-002: согласовать generic TDD applicability с local testing; повторную проверку обосновывать изменением diff/named doubt или explicit user requirement.
Решения с подтверждением проверки
- AGENT-001: согласовать install/targeted/final verification tiers в двух существующих engineering sections. Сначала сохранить full final gate и сравнить реальные вызовы на одной bounded delivery; explicit approved task checks не сокращать автоматически.
- AGENT-005: снять resolved instruction/tool surface для одного запуска, затем A/B релевантного MCP/skill набора. Изменение default global config — только при наблюдаемом выигрыше и сохраненных outcomes.
Новый ADR для текста bootstrap или capability caveat не нужен. Если меняется принятая модель SDD approvals/verification authority, сначала нужен owner decision в существующем process source; не создавать отдельную approval инфраструктуру.
12. Cross-audit signals
- Audit 11: возможные повторы build/dependency graph внутри local verify/commit пути —
frontend/package.json:14–34,.husky/pre-commit:1–3; здесь установлены только agent/hook triggers. - Audit 10: пригодность generic workflow scripts для no-commit/multi-repo execution —
.agents/skills/workflow/subagent-driven-development/scripts/; script semantics не исследовались. - Audit 15: project SDD artifact/approval granularity и
skip_specslifecycle —specs/README.md:9–14, v2schema.yaml; текущий аудит не предлагает удалить согласованные артефакты. - Audit 13: хранение credentials в global agent config —
~/.config/opencode/opencode.jsonc; значения не воспроизводятся, отдельное security расследование не проводилось.
13. Open questions / verification plan
| Вопрос, меняющий решение | Самый дешевый способ проверки | До проверки |
|---|---|---|
| Сколько full verify/install реально запускают children? | Для следующей одной affected-repo delivery предоставить child export/command log с command, cwd, exit, duration и revision; не собирать все личные sessions | AGENT-001 static finding остается; численную экономию не заявлять |
| Есть ли безопасный resume после двух cancellations? | Проверить конкретные child status/report/diff до re-dispatch; сопоставить canceled и replacement task IDs | Не объявлять отмененную task DONE и не удалять checkpoint |
| Почему global CLAUDE и skill directory попадают в OpenCode? | Startup resolved-source/config diagnostic для этого cwd без provider secrets; сравнить с loaded declarations | Loader fallback UNVERIFIED; не утверждать наличие symlink или mandatory global reads |
| MCP startup/tool schema или skill bodies доминируют в первом prompt? | Один bounded A/B: одинаковая task, model, repo revision; export первых turn counters и tool catalog | Не удалять серверы по количеству зарегистрированных tools |
| Дает ли новый verification tier ту же защиту? | Итоговый full verify + applicable HTTP/DB/auth tests на том же конечном diff; убедиться, что dependency/artifact state fresh | Текущие mandatory checks сохраняются |
| Возможен ли model override в выбранном runtime? | Текущая tool schema и documented runtime capability; никаких проб с выдуманным parameter | AGENT-006 применим для текущего interface; историческая schema UNVERIFIED |
Для минимального последующего измерения достаточно одного существующего session export на каждый из S/M/L типов: tool counts; unique/repeated reads; failed/retried commands; checks по revision; .info.tokens отдельно input/cache/output/reasoning; parent/child boundaries; completion outcome. Тела secrets/PII и сырые приватные conversations не нужны. Новые hooks, scripts или multi-agent observability infrastructure не требуются.
Проверка результата аудита
Выполнена ручная смысловая сверка отчета с evidence. git diff --check и отдельный git diff --no-index --check /dev/null audit-results/14-ai-agent-workflow-efficiency.md завершились без замечаний; отдельная проверка нужна, поскольку файл ignored и обычный diff его не видит. git check-ignore -v подтвердил root правило .gitignore:2. Финальные git status --short четырех checkout пусты, HEAD совпадают с начальной таблицей. Standard OpenSpec skills и исходники не редактировались; tests/build/verify не запускались. Application gates не применяются к единственному Markdown-отчету в root.
Consolidation table
| ID | Decision | Severity | Confidence | Repo | Files | One-line impact | Effort | Related IDs |
|---|---|---|---|---|---|---|---|---|
| AGENT-001 | SIMPLIFY | P2 | High | frontend,backend | frontend/.ai/conventions/engineering.md; backend/.ai/conventions/engineering.md; frontend/package.json; backend/package.json; session.json | Безусловный install/full verify переносится в каждый worker; экономия не измерена | S | AGENT-002,AGENT-004 |
| AGENT-002 | SIMPLIFY | P2 | High | root,frontend,backend | .agents/skills/workflow/test-driven-development/SKILL.md; .agents/skills/workflow/verification-before-completion/SKILL.md; .agents/skills/workflow/subagent-driven-development/task-reviewer-prompt.md; frontend/.ai/conventions/testing.md; backend/.ai/conventions/testing.md; session.json | Конкурирующие blanket testing/fresh-evidence rules затрудняют reuse proof | S | AGENT-001,AGENT-003,AGENT-004 |
| AGENT-003 | FIX | P2 | High | root,specs | .agents/skills/workflow/subagent-driven-development/SKILL.md; .agents/skills/sdd/openspec-apply-change/SKILL.md; specs/openspec/config.yaml; specs/openspec/schemas/wealth-ledger-sdd-v2/schema.yaml; session.json | Generic autonomous rulings конфликтуют с approved semantic change-control | S | AGENT-002,AGENT-006 |
| AGENT-004 | FIX | P2 | High | root,frontend,backend,specs | AGENTS.md; frontend/.ai/conventions/engineering.md; backend/.ai/conventions/engineering.md; specs/AGENTS.md; session.json | Недостаточный nvm bootstrap вызвал подтвержденный shell retry | S | AGENT-001,AGENT-002 |
| AGENT-005 | INVESTIGATE | P3 | Medium | global | ~/.claude/CLAUDE.md; ~/.claude/skills/graphify/SKILL.md; ~/.config/opencode/opencode.jsonc | Широкая skill/tool экспозиция создает risk of inefficiency; стоимость не измерена | S | AGENT-002,AGENT-006 |
| AGENT-006 | SIMPLIFY | P3 | High | root | .agents/skills/workflow/subagent-driven-development/SKILL.md; .agents/skills/workflow/subagent-driven-development/implementer-prompt.md; .agents/skills/workflow/subagent-driven-development/task-reviewer-prompt.md; session.json | Обязательный model override отсутствует в текущем Task interface | S | AGENT-003,AGENT-005 |