feat(config): per-agent models and task delegation #98

Merged
slaid098 merged 4 commits from feat/config/per-agent-models-task-delegation into main 2026-08-17 05:00:53 +03:00
Owner

Что сделано

  • .opencode/opencode.json секция agent: добавлен model шести агентам — ollama-cloud/deepseek-v4-flash у plan/explore/scout/memory-syncer, ollama-cloud/deepseek-v4-pro у general/reviewer.
  • general и reviewer получили permission.task = {"*": "deny", "explore": "allow", "scout": "allow"} (glob, последний матч побеждает); memory-syncer остался без permission.task.
  • tests/test_permissions.py: 4 новых теста — форматы моделей, точные значения, task-permissions, отсутствие permission.task у memory-syncer (27 passed).
  • configure-opencode/SKILL.md секция 6: задокументирован permission.task (glob-семантика, findLast, "*": "deny" первым).
  • feature-spec/SKILL.md и issue/SKILL.md: плановые issues создаёт main-chat оркестратор сам через create-issue (согласовано с исключением в AGENTS.md); subagent-делегирование оставлено только для bug-discovery.

Почему

Субагенты наследовали модель вызывающей сессии — нельзя было оптимизировать стоимость/качество (flash для лёгких задач, pro для кода и ревью). Плюс устранён конфликт правил: AGENTS.md предписывает оркестратору создавать плановые issues сам, а скиллы feature-spec/issue делегировали это subagent'у.

Watch out

  • Агенты plan/explore/scout — встроенные в opencode, их записей в конфиге не было: созданы новые ключи секции agent с одним model (без tools/steps — их нет и не было).
  • Модели НЕ дублируются в provider (обе встроены в opencode 1.18.18); bare deepseek-v4-flash (без :0731) — по контракту.

Pending

—

Closes #97

## Что сделано - `.opencode/opencode.json` секция `agent`: добавлен `model` шести агентам — `ollama-cloud/deepseek-v4-flash` у plan/explore/scout/memory-syncer, `ollama-cloud/deepseek-v4-pro` у general/reviewer. - `general` и `reviewer` получили `permission.task = {"*": "deny", "explore": "allow", "scout": "allow"}` (glob, последний матч побеждает); `memory-syncer` остался без `permission.task`. - `tests/test_permissions.py`: 4 новых теста — форматы моделей, точные значения, task-permissions, отсутствие `permission.task` у memory-syncer (27 passed). - `configure-opencode/SKILL.md` секция 6: задокументирован `permission.task` (glob-семантика, findLast, `"*": "deny"` первым). - `feature-spec/SKILL.md` и `issue/SKILL.md`: плановые issues создаёт main-chat оркестратор сам через `create-issue` (согласовано с исключением в AGENTS.md); subagent-делегирование оставлено только для bug-discovery. ## Почему Субагенты наследовали модель вызывающей сессии — нельзя было оптимизировать стоимость/качество (flash для лёгких задач, pro для кода и ревью). Плюс устранён конфликт правил: AGENTS.md предписывает оркестратору создавать плановые issues сам, а скиллы feature-spec/issue делегировали это subagent'у. ## Watch out - Агенты plan/explore/scout — встроенные в opencode, их записей в конфиге не было: созданы новые ключи секции `agent` с одним `model` (без tools/steps — их нет и не было). - Модели НЕ дублируются в `provider` (обе встроены в opencode 1.18.18); bare `deepseek-v4-flash` (без `:0731`) — по контракту. ## Pending — Closes #97
docs(issue): orchestrator creates planned issues via create-issue
All checks were successful
CI (always) / bootstrap (pull_request) Successful in 4s
CI / bootstrap (pull_request) Successful in 8s
Permission Security Check / check (pull_request) Successful in 9s
CI / lint (pull_request) Successful in 28s
CI / complexity (pull_request) Successful in 27s
CI / typecheck (pull_request) Successful in 28s
CI / test (3.13) (pull_request) Successful in 1m43s
3a11e6aaa0
Author
Owner

Code Review Summary

PR добавляет per-agent модели (6 агентов) и permission.task для делегирования task-сабагентов (general/reviewer → только explore/scout), обновляет issue/feature-spec skills под модель «оркестратор создаёт issues сам» и добавляет 4 теста. Конфиг корректен, семантика подтверждена, CI зелёный (27 passed).

Positives

  • opencode.json permission.task сконфигурирован правильно: {"*": "deny", "explore": "allow", "scout": "allow"} — при glob + findLast-семантике (последнее совпавшее правило побеждает) explore/scout разрешены, всё остальное deny. check-permissions.py не парсит permission.task — поломки нет.
  • tests/test_permissions.py:365-396 — 4 новых теста покрывают новую функциональность, CI green.
  • configure-opencode/SKILL.md:125 — permission.task задокументирован.
  • PR body полный (Что сделано/Почему/Watch out/Pending), title conventional, ветка по конвенции, 5 логичных коммитов.

Suggestions (info, not blocking)

  • issue/SKILL.md:3 [warning] Frontmatter description всё ещё: «Use a subagent for creation to avoid cluttering context» — противоречит новой модели (оркестратор создаёт issues сам). Fix: обновить description.
  • issue/SKILL.md:77 [warning] «батч-созданием issues одним subagent'ом» — устарело. Fix: переписать под оркестратор-модель.
  • issue/SKILL.md:220 [warning] «все три документа описывают одну и ту же full-subagent модель делегирования» — устарело. Fix: обновить.
  • spec/SKILL.md:29, 333 [warning] «issue create (через subagent)» / «Не делает edit/memory-search/issue-create сам» — PR меняет модель делегирования, но spec/SKILL.md не обновлён: Template I выполняется subagent'ом, который загрузит issue skill с противоречивыми инструкциями. Fix: обновить spec/SKILL.md (в этом PR или follow-up).
  • opencode.json [info] Модели ollama-cloud/deepseek-v4-flash и -pro: в конфиге provider ollama-cloud определяет только deepseek-v4-flash:0731, deepseek-v4-pro в конфиге не определён. PR body утверждает, что модели «встроены в opencode 1.18.18» — из репо не проверяемо, принимаем по контракту. Если ID не разрешится, opencode молча упадёт на provider default (не краш, но цель PR не будет достигнута). Рекомендация: после мержа проверить фактическую модель сабагентов в логах сессий.
  • opencode.json [info] scout — встроенный агент opencode 1.18.18 (docs упоминают); если отсутствует, task-спавн scout просто заденятся, explore остаётся доступным — не блокирует.

Verdict: APPROVE

## Code Review Summary PR добавляет per-agent модели (6 агентов) и `permission.task` для делегирования task-сабагентов (general/reviewer → только explore/scout), обновляет issue/feature-spec skills под модель «оркестратор создаёт issues сам» и добавляет 4 теста. Конфиг корректен, семантика подтверждена, CI зелёный (27 passed). ### Positives - **opencode.json** `permission.task` сконфигурирован правильно: `{"*": "deny", "explore": "allow", "scout": "allow"}` — при glob + findLast-семантике (последнее совпавшее правило побеждает) explore/scout разрешены, всё остальное deny. `check-permissions.py` не парсит `permission.task` — поломки нет. - **tests/test_permissions.py:365-396** — 4 новых теста покрывают новую функциональность, CI green. - **configure-opencode/SKILL.md:125** — `permission.task` задокументирован. - PR body полный (Что сделано/Почему/Watch out/Pending), title conventional, ветка по конвенции, 5 логичных коммитов. ### Suggestions (info, not blocking) - **issue/SKILL.md:3** [warning] Frontmatter description всё ещё: «Use a subagent for creation to avoid cluttering context» — противоречит новой модели (оркестратор создаёт issues сам). Fix: обновить description. - **issue/SKILL.md:77** [warning] «батч-созданием issues одним subagent'ом» — устарело. Fix: переписать под оркестратор-модель. - **issue/SKILL.md:220** [warning] «все три документа описывают одну и ту же full-subagent модель делегирования» — устарело. Fix: обновить. - **spec/SKILL.md:29, 333** [warning] «issue create (через subagent)» / «Не делает edit/memory-search/issue-create сам» — PR меняет модель делегирования, но spec/SKILL.md не обновлён: Template I выполняется subagent'ом, который загрузит issue skill с противоречивыми инструкциями. Fix: обновить spec/SKILL.md (в этом PR или follow-up). - **opencode.json** [info] Модели `ollama-cloud/deepseek-v4-flash` и `-pro`: в конфиге provider `ollama-cloud` определяет только `deepseek-v4-flash:0731`, `deepseek-v4-pro` в конфиге не определён. PR body утверждает, что модели «встроены в opencode 1.18.18» — из репо не проверяемо, принимаем по контракту. Если ID не разрешится, opencode молча упадёт на provider default (не краш, но цель PR не будет достигнута). Рекомендация: после мержа проверить фактическую модель сабагентов в логах сессий. - **opencode.json** [info] `scout` — встроенный агент opencode 1.18.18 (docs упоминают); если отсутствует, task-спавн scout просто заденятся, explore остаётся доступным — не блокирует. ### Verdict: APPROVE
slaid098 force-pushed feat/config/per-agent-models-task-delegation from 3a11e6aaa0
All checks were successful
CI (always) / bootstrap (pull_request) Successful in 4s
CI / bootstrap (pull_request) Successful in 8s
Permission Security Check / check (pull_request) Successful in 9s
CI / lint (pull_request) Successful in 28s
CI / complexity (pull_request) Successful in 27s
CI / typecheck (pull_request) Successful in 28s
CI / test (3.13) (pull_request) Successful in 1m43s
to 460dbfc52f
All checks were successful
CI (always) / bootstrap (pull_request) Successful in 2s
CI / bootstrap (pull_request) Successful in 6s
Permission Security Check / check (pull_request) Successful in 6s
CI / complexity (pull_request) Successful in 29s
CI / lint (pull_request) Successful in 29s
CI / typecheck (pull_request) Successful in 29s
CI / test (3.13) (pull_request) Successful in 1m41s
2026-08-17 04:58:45 +03:00
Compare
slaid098 deleted branch feat/config/per-agent-models-task-delegation 2026-08-17 05:00:54 +03:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
slaid098/opencode-config!98
No description provided.