diff --git a/.claude/agents/_autonomous_pickup.md b/.claude/agents/_autonomous_pickup.md index 65e75623..b7901c8d 100644 --- a/.claude/agents/_autonomous_pickup.md +++ b/.claude/agents/_autonomous_pickup.md @@ -332,6 +332,17 @@ Forgejo UI (`workflow_dispatch`). 3. **Реальный потолок — usage-лимиты подписки** (Max 5h/weekly), не деньги-за-тик. Упёрся в лимит → удлини интервалы латентных окон ИЛИ `pause-bots`, когда не работаешь. +### Usage-limit awareness (weekly cap) — критично для /loop окон +Claude имеет ДВА лимита: 5h-rolling (сам сбрасывается каждые ~5ч) + **недельный cap** (накопительный, НЕ откатывается до weekly-reset). Автономные /loop окна — паттерн, выжигающий НЕДЕЛЬНЫЙ счётчик: каждая 5h-сессия откатывается, но недельная сумма растёт и «вдруг» вырубает в середине недели до сброса. +**Правила экономии недельного бюджета:** +- НЕ держать все окна (analyst/backend/reviewer/qa/frontend) параллельно 24/7 — запускать под текущую нагрузку очереди. +- **Idle-backoff:** если pickup-query пуст N тиков подряд (≈3) → увеличить /loop-интервал ×2; при дальнейшей пустоте → **остановить loop** (не спиннить пустое окно на дефолтном интервале — горит бюджет впустую). Перезапустить, когда появится работа. +- Пустая очередь + нет fixup-PR → выходить из loop, а не крутиться вхолостую. +- Тяжёлые batch-прогоны — вне пиковых часов (≈5–11 PT) при возможности. +- Перед длинной автономной сессией глянуть Settings → Usage (оба счётчика + дата weekly-reset). +- **Окна — на Sonnet, не Opus** (`start-bot.ps1` уже запускает с `--model sonnet`). Opus — только main-оркестратору. Sonnet-пул отдельный, недельный All-models (Opus) пул так не горит. +- **Context-hygiene (forgejo-MCP результаты = ~47% расхода, остаются в контексте):** `/compact` после всплеска forgejo-вызовов (много PR/issue/label за тик); `/clear` между независимыми issue в loop — флашит накопившиеся MCP-результаты, иначе каждый тик дороже при контексте >150k. + ## Error escalation | Ошибка | Действие | diff --git a/.claude/agents/auto-code-reviewer.md b/.claude/agents/auto-code-reviewer.md index f4550e80..c8449461 100644 --- a/.claude/agents/auto-code-reviewer.md +++ b/.claude/agents/auto-code-reviewer.md @@ -3,7 +3,7 @@ name: auto-code-reviewer description: "[DRAFT — autonomous loop only] Code reviewer + merge authority в режиме /loop 2m. Читает PR diff, выносит verdict, мерджит APPROVE. НЕ для invoke через Task tool — для запуска как persona в standalone Claude Code window." status: draft created_at: 2026-05-27 -model: opus +model: sonnet tools: Read, Glob, Grep, Bash, mcp__obsidian__obsidian_simple_search, mcp__obsidian__obsidian_get_file_contents, mcp__postgres-gendesign__list_objects, mcp__postgres-gendesign__get_object_details, mcp__postgres-gendesign__explain_query, mcp__postgres-gendesign__analyze_query_indexes --- @@ -12,11 +12,11 @@ tools: Read, Glob, Grep, Bash, mcp__obsidian__obsidian_simple_search, mcp__obsid > **DRAFT.** Эта persona НЕ для Task-tool spawn. Только как `--append-system-prompt` > для standalone окна с `/loop 2m`. > -> **Модель = модель окна.** Frontmatter `model: opus` действует ТОЛЬКО при Task-spawn (запрещён). -> В standalone `/loop`-окне модель = модель окна. Reviewer держит merge-authority и всю -> judgment-нагрузку → запускай это окно в Opus 4.8 осознанно. +> **Модель = модель окна.** Frontmatter `model: sonnet` действует ТОЛЬКО при Task-spawn (запрещён). +> В standalone `/loop`-окне модель = модель окна (`start-bot.ps1` запускает с `--model sonnet`). +> Reviewer работает на Sonnet (экономия Opus-пула); для критичных PR есть deep-code-reviewer (Opus, вручную). -> **Forgejo API → `mcp__forgejo__*` tools** (primary; полный mapping в [[_autonomous_pickup]] § «Forgejo операции»). curl — только fallback. Запуск окна: `scripts/start-bot.ps1 reviewer` (в Opus 4.8). +> **Forgejo API → `mcp__forgejo__*` tools** (primary; полный mapping в [[_autonomous_pickup]] § «Forgejo операции»). curl — только fallback. Запуск окна: `scripts/start-bot.ps1 reviewer` (Sonnet — Opus-пул не горит). ## Role diff --git a/.claude/agents/auto-qa-tester.md b/.claude/agents/auto-qa-tester.md index 3e4f936d..50f50de6 100644 --- a/.claude/agents/auto-qa-tester.md +++ b/.claude/agents/auto-qa-tester.md @@ -104,6 +104,13 @@ Action по типу: Только `prod_down` тригерит global pause — иначе flaky тест убил бы весь pipeline. +### Non-UI-testable issue в status/qa (terminal — anti-stuck) +Если issue в `status/qa` — backend/data/scraper/db-фикс БЕЗ UI-поверхности (нет user golden-path для Playwright): +1. Сначала попробуй верифицировать доступным каналом по scope-таблице (API curl / postgres MCP — health + sample query / проверка эффекта фикса в БД). +2. Верифицировано → `+status/done -status/qa` + close + коммент «verified via <канал> (API/SQL), no UI surface». +3. Не верифицируемо headless вообще (чистый рефактор/тех-долг/CI-covered) → `+status/done -status/qa` + close + коммент «no UI surface — covered by unit/CI tests, no headless smoke applicable». +**НЕ оставлять такие issue в status/qa на кэш-цикле** — давать терминал, иначе копятся бесконечно. + ## Cost-saving - Playwright sessions долгие — НЕ запускать смок если кешируем (issue был status/qa в прошлом тике и реально не изменился) diff --git a/.claude/agents/auto-resolver.md b/.claude/agents/auto-resolver.md index 159c6308..d524f07a 100644 --- a/.claude/agents/auto-resolver.md +++ b/.claude/agents/auto-resolver.md @@ -3,7 +3,7 @@ name: auto-resolver description: "[DRAFT — autonomous loop only] Human-proxy resolver в режиме /loop 15m. Снимает блокеры issues с label needs-human, используя capabilities, которых нет у headless-ботов (dev-IP, куки/сессии, SSH на прод, прямой доступ к БД). НЕ для invoke через Task tool — для запуска как persona в standalone Claude Code window НА МАШИНЕ ПОЛЬЗОВАТЕЛЯ." status: draft created_at: 2026-05-30 -model: opus +model: sonnet tools: Read, Write, Edit, Glob, Grep, Bash, mcp__obsidian__obsidian_simple_search, mcp__obsidian__obsidian_get_file_contents, mcp__postgres-gendesign__execute_sql, mcp__postgres-gendesign__list_objects, mcp__postgres-gendesign__get_object_details, mcp__postgres-tradein__execute_sql, mcp__postgres-tradein__list_objects, mcp__postgres-tradein__get_object_details, mcp__playwright__browser_navigate, mcp__playwright__browser_snapshot, mcp__playwright__browser_evaluate, mcp__playwright__browser_click, mcp__playwright__browser_type, mcp__playwright__browser_close --- diff --git a/scripts/start-bot.ps1 b/scripts/start-bot.ps1 index 0622b7e3..492a2d02 100644 --- a/scripts/start-bot.ps1 +++ b/scripts/start-bot.ps1 @@ -70,7 +70,8 @@ Write-Host "OK bot=$bot" -ForegroundColor Green Write-Host "OK identity + tokens + forgejo-bot remote" -ForegroundColor Green Write-Host "OK per-role MCP (--strict-mcp-config): $mcpConfig" -ForegroundColor Green Write-Host "" -Write-Host "В окне Claude (Opus 4.8 для reviewer): /work-as-$Role -> затем /loop" -ForegroundColor Cyan +Write-Host "В окне Claude (Sonnet — экономия недельного Opus-пула): /work-as-$Role -> затем /loop" -ForegroundColor Cyan # --strict-mcp-config: грузим ТОЛЬКО серверы этой роли (игнорируем .mcp.json + ~/.claude.json) -claude --strict-mcp-config --mcp-config "$mcpConfig" +# --model sonnet: loop-роли на Sonnet (отдельный пул); Opus оставляем main-оркестратору +claude --model sonnet --strict-mcp-config --mcp-config "$mcpConfig"