Дата: 2026-06-13 Базується на: аудиті 7 скілів, 9 cron-задач, 7 допоміжних скриптів, конфігурації безпеки
scripts/evolution_access_gate.sh, рядок 30. Замінити:
- curl -fsS -H "Authorization: Bearer *** \
+ curl -fsS -H "Authorization: Bearer $_tok" \Це блокує всю самоеволюцію на установках без persistent gh auth. Fallback на сирий токен з env-файлу ЗАВЖДИ падає, бо змінна ніколи не підставляється.
Зараз: base_priority = (impact * 2) / effort
effort у знаменнику означає: trivial задача (effort=0.1, impact=0.2) = priority 4.0, тоді як критична (impact=1.0, effort=0.8) = лише 2.5. Агент постійно обирає дрібниці.
Запропоновані варіанти:
Варіант A — пом'якшити:
base_priority = impact * 2 * (1.0 - effort * 0.4)
Варіант B — effort як штраф, не дільник:
final_priority = impact * 1.5 + age_bonus + community_bonus - effort_penalty
де effort_penalty ∈ [0, 0.5]. Це робить impact головним драйвером.
Додати scripts/evolution_review_gate.py (no_agent), який ПЕРЕД merge перевіряє кожен PR:
- Dead-code check (AST-аналіз): чи викликається новий символ хоча б з одного non-test модуля в runtime-доступному шлязі.
- Diff-size anomaly: PR > 500 рядків коду (без тестів) → ручне підтвердження. PR > 1000 → автоматичний reject з лейблом
needs-split. - Coverage delta: PR додає код, але не додає тестів → reject.
- Dependency audit: PR додає нову залежність → flag (supply-chain ризик).
- Breaking-change detection: PR модифікує public API → ручне рев'ю.
Скрипт запускається в integration ДО виклику LLM. PR не пройшов → автоматично закривається з конкретним reason.
Проблема: hermes update --yes (щоденний cron) підтягує main на КОЖНУ установку. Поганий merge розповсюджується за 24 години.
Рішення:
- Мінімум: понизити auto-update до щотижневого (раз на неділю). PR-и мержуються щодня, але поширення — раз на тиждень = 7 днів "карантину".
- Повне: integration створює tag
canary-YYYY-MM-DD. Лише через 48 годин чистого watchdog tag підвищується доstable-YYYY-MM-DD. Щойно тодіhermes updateна інших установках підтягує.
Проблема: скіли не можуть адаптуватись в межах циклу. Уроки вшиті в текст SKILL.md, оновлення вимагає PR + CI.
Рішення: ~/.hermes/profiles/user1/evolution/lessons.json — структурований журнал:
{
"lessons": [
{
"date": "2026-06-13",
"source": "integration-review",
"pattern": "dead-code: PR added module with no call sites",
"rule": "ALWAYS run evolution_review_gate.py dead-code check before merge",
"severity": "high",
"occurrences": 3
}
]
}Integration СКІЛ читає цей файл на початку кожного циклу і застосовує правила. Файл еволюціонує швидше за SKILL.md і є per-installation. Якщо правило стабільно працює 10 циклів — "підвищується" до пропозиції оновити SKILL.md через нормальний PR-процес.
Проблема: funnel metrics write-only. Ніщо в конвеєрі їх не читає.
Рішення:
- evolution-research читає останні 7 записів
metrics.jsonl. - Якщо reject_rate > 70% — директива: "Бути вдвічі вибірковішим, лише високодоказові ідеї".
- Якщо merged=0 три цикли поспіль — flag у watchdog-звіті.
Реалізація: python scripts/evolution_funnel.py --summary --last=7 виводить one-liner з якістю сигналу.
Проблема: introspection не знає, чи користувач був задоволений.
Рішення: після сесії з 5+ інструментами або 10+ ходів, агент запитує через MEMORY: "Чи розв'язав я твою задачу? (так/частково/ні)". Відповідь зберігається в session metadata.
introspection_extract.py агрегує ці сигнали і додає task_completion_rate в digest. Non-blocking: немає відповіді і немає retry → вважати успішною.
Проблема: dedup-cache.json локальний. Сотні установок досліджують ті ж тренди.
Варіанти:
- A:
.evolution/dedup-cache.jsonу репозиторії (committed). Кожна установка перевіряє черезgit pull, записує через push (з retry при конфлікті). - B: GitHub labels як колективний дедуп:
evolution-filed-<hash>. - C: При gh issue list >50 results — семантичний dedup через делегований subagent (не в головному контексті).
Додати scripts/evolution_rate_limit.py — pre-check перед кожною стадією:
gh api rate_limit --jq '.resources.core.remaining'Якщо <500 залишилось — стадія відкладається на годину. Запобігає ситуаціям, де integration не може змержити бо research+issues+analysis вичерпали ліміт.
Cron YAML: script: evolution_rate_limit.py (exit 0 = proceed, exit 1 = defer).
Проблема: implementation і integration працюють на одній моделі. Self-audit (крок 2b) просить модель оцінити себе 1-10 — гарантовано сходиться до 10.
Рішення — 4 послідовні шари, жоден не використовує ту ж модель, що писала код:
- Шар 1 — Детермінований (
evolution_review_gate.py): dead-code, coverage, diff-size, dependencies, breaking-changes. БЕЗ LLM. - Шар 2 — Крос-модельний рев'ю: PR диф відправляється в ОКРЕМУ subagent з ДРУГОЮ моделлю (delegate_task з іншим provider). Інша модель = інші сліпі плями.
- Шар 3 — Semantic test: для кожного PR генерується тест-сценарій "що цей код робить?" і перевіряється, чи результат відповідає опису issue.
- Шар 4 — (опційно) Human review для PR > 200 рядків або critical paths (вже частково є через CODEOWNERS).
Fail на будь-якому → PR не мержиться.
Проблема: одна PRIVATE installation = єдина точка відмови.
Рішення:
- "Owner pool": 2+ серверів з GITHUB_PRIVATE_TOKEN. Distributed lock через GitHub: перший, хто пише comment "claiming cycle YYYY-MM-DD" на спеціальному issue, виконує.
- Якщо заявлений сервер не завершив за 2 години — watchdog знімає lock.
- PUBLIC стадії вже розподілені — лише PRIVATE потребує координації.
Проблема: 25 найстаріших комітів/запуск. Upstream має ~100 комітів/день. Форк НІКОЛИ не наздожене.
Рішення: scripts/evolution_classify_upstream.py (no_agent) класифікує коміти:
- CRITICAL: security, auth, data-loss fixes → processed first (без обмеження)
- HIGH: bug fixes affecting core
- MEDIUM: features, perf
- LOW: docs, tests, cosmetic
Ліміт 25/запуск: спершу всі CRITICAL, потім HIGH, потім решта. Security fixes не застрягають за 200 комітами з doc-оновленнями.
Проблема: research читає фіксовані джерела (autogen, AutoGPT). introspection аналізує сесії заднім числом.
Рішення:
- introspection ranked feed: топ-5 problems за частотою → research отримує як "priorities to find solutions for".
- Configurable sources:
config.yamlдозволяє додати власні джерела дослідження. - Trend detection: динамічні web_search запити на основі introspection findings замість читання фіксованого списку.
CI перевіряє "чи не зламалося", а не "чи покращилося". Замість тестів — formal verification constraints:
- Інваріанти, що МАЮТЬ виконуватись завжди: "prompt cache розмір не зростає", "кількість core tools не перевищує N".
- PR, що порушує інваріант — відхиляється автоматично.
Замість випадкового порядку — навчальна траєкторія:
- Фаза 1 (місяць 1): лише bug fixes (висока ймовірність успіху). Success rate target: 80%.
- Фаза 2 (місяць 2): дрібні features (medium ризик).
- Фаза 3 (місяць 3+): архітектурні зміни (високий ризик).
Якщо success rate падає — повернутись на попередню фазу.
Відповісти на питання: "чи еволюціонує агент КРАЩЕ з часом?"
Метрики (почати збирати негайно — безкоштовно):
- Cycle success rate: % циклів, що produced merged code (має зростати).
- Rework rate: % PR, що потребують rework (має знижуватись).
- User task completion rate: зростає з часом?
- Reject reason diversity: різноманітність причин відхилення (має зростати).
- Time-to-merge: час від issue до merge (має знижуватись для trivial задач).
Якщо метрики НЕ покращуються за 30 днів — самоеволюція стагнує.
Замість тестування "чи працює" — тестування "чи можна зламати":
Для кожного змержженого PR, no_agent скрипт шукає edge case: fuzzing inputs, boundary conditions, error paths. Знайдено → issue з категорією regression-risk. Доповнює coverage-delta: код може мати 100% coverage, але покривати лише happy path.
- Фікс access gate баг (1.1)
- Пріоритетна формула (1.2)
- External review gate — детермінований (1.3)
- Canary rollout — мінімум понизити auto-update до щотижневого (1.4)
- Meta-evolution lessons.json (2.1)
- Funnel feedback loop (2.2)
- User feedback signal (2.3)
- Спільний дедуп-каш (2.4)
- Rate-limit-aware scheduling (2.5)
- Multi-layer review (3.1)
- Distributed private mode (3.2)
- Priority upstream queue (3.3)
- Користувацький вплив на дослідження (3.4)
- Formal verification constraints (4.1)
- Curriculum learning (4.2)
- Meta-evolution metrics (4.3) — почати збирати негайно
- Adversarial self-testing (4.4)
Зараз система оптимізована для THROUGHPUT (більше PR, швидше merge). Для автономної самоеволюції треба оптимізувати для CALIBRATION — здатності агента знати, що він не знає, і НЕ робити те, у чому він не впевнений:
- Відхиляти більше, ніж впроваджувати (reject rate 60-70% — здоровий).
- Зупинятись при невпевненості, а не гадати.
- Враховувати границі власної компетенції (якщо LLM пише код, то LLM не повинен бути єдиним рев'юером цього коду).
Найкраща самоеволюція — та, що еволюціонує повільно, але кожна зміна реально корисна. Швидка самоеволюція з 30% сміттєвих PR — це ентропія, а не еволюція.