# Self Learning

> Петля самообучения: сбор уроков из секции LESSONS отчётов субагентов, триаж по четырём корзинам, каталог классов ошибок C-NNN, межконтурный разнос. Триггеры: «оттриажить уроки», «класс ошибки», «почему агенты забывают», рецидив закрытого класса. НЕ запись инцидента (incident-log), не хендофф (session-handoff).

- Skill: `vibeengineering-llc/self-learning` (Agent Skill)
- Install (CLI): `npx skillmds@latest add vibeengineering-llc/self-learning`
- Raw SKILL.md: https://api.skillmd.com/api/skills/vibeengineering-llc/self-learning/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: VibeEngineering-LLC (https://skillmd.com/u/vibeengineering-llc)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/vibeengineering-llc/self-learning

---


# self-learning — чтобы опыт не умирал вместе с контекстом

Веса заморожены. Всё, что система «помнит», — это текст, который снова попадёт в контекст,
либо код, который исполнится помимо контекста. Отсюда закон, из которого следует остальное:

> **Урок выучен не тогда, когда он записан, а тогда, когда у него есть машинный триггер,
> предъявляющий его в момент риска.**

Проверено фактом на своей же истории: правило §33 лежало в глобальном CLAUDE.md — рецидив
через три дня (`GEANT4:W-022`); мера высшей ступени по `Цензор:W-026` была мутационно
проверена — рецидив через сутки в соседнем скрипте (`Цензор:W-030`). Запись не защищает.
Защищает привод.

## Слои памяти — куда класть урок

| Слой | Носитель | Когда всплывает | Цена |
|---|---|---|---|
| **L0** | хук / гейт / скрипт-проверка | принудительно, всегда | ~0 токенов |
| **L1** | CLAUDE.md, frontmatter скилла | каждая сессия | самый дорогой актив (×все сессии ×все контуры) |
| **L2** | тело SKILL.md, references | если сработал триггер | платится при чтении |
| **L3** | SESSION-STATE, TODO | старт сессии | дёшево |
| **L4** | журналы W/P, DECISIONS | только явным поиском | ~0, но и защиты ~0 |

Обучение = движение уроков ВВЕРХ; §28-бюджет давит ВНИЗ. Равновесие — заменой: правило,
поглощённое хуком, ужимается до указателя. **Порог L1:** урок нужен более чем в ~30% сессий,
иначе L2 или L0.

## Двухосевая лестница мер (главное отличие от `incident-log`)

Лестница §32 знает только СИЛУ меры. Этого мало — доказано `Цензор:W-026→W-030`:

| | **Узкая область** (один скрипт/файл) | **Область класса** (все проявления) |
|---|---|---|
| Слабая сила (запись/правило) | заметка в журнале | правило класса в доктрине |
| Сильная сила (хук/устранение) | патч одного скрипта ← *здесь провалилось* | **гейт класса по сигнатуре** |

**При рецидиве первый вопрос — не «поднять ступень?», а «провалилась СИЛА или ОХВАТ?»**
Если мера была высшей, но узкой — поднимать некуда, нужно расширять охват.

## Петля — шесть шагов, у каждого свой привод

| Шаг | Что | Привод (не дисциплина) |
|---|---|---|
| **CAPTURE** | секция `LESSONS:` (0–3 пункта, «ожидал X → оказалось Y → обход Z») в отчёте субагента | хук `lessons_gate.py` блокирует Agent-вызов без неё (порог 600 симв.) |
| **BUFFER** | дамп LESSONS в `<контур>\audit\lessons-inbox.md` первым действием при приёме отчёта | файл переживает сжатие контекста |
| **TRIAGE** | 4 корзины (ниже) | хук `lessons_inbox_counter.py` считает `- [ ]` и напоминает на каждом промпте |
| **DISTILL** | классовый урок → класс `C-NNN` в `~/.claude/references/error-classes.md` | новый инцидент обязан сослаться на `C-NNN` либо завести класс |
| **DEPLOY** | урок → в слой всплытия (обычно L0: сигнатура в реестр диспетчера) | хук-диспетчер инъецирует **вопросом**, не императивом |
| **SPREAD** | доктринальный урок → глобальный `references/` + промпты владельцам зон (§12) | harvest-скрипт с курсором + крон |

### Четыре корзины триажа

**мусор** (норма, большинство — выбрасывать без сожаления) / **локальный** (в проект) /
**классовый** (в каталог `C-NNN` + журнал) / **доктринальный** (в глобальную доктрину +
разнос по контурам).

**Жёсткое правило маршрутизации:** факт о платформе, ОС или общем инструменте (Windows-кодировки,
Bash-транспорт, Ollama, git, хуки) **не имеет права на корзину «локальный»**. Именно так умер
урок про Job Object — лежал в приватном `DECISIONS.md` одного контура, пока не был найден случайно.

## Каталог классов `C-NNN`

`~/.claude/references/error-classes.md`. Класс определяется по **причине**, не по симптому:
«потерял данные» — последствие; «предположил семантику флага по имени» — класс.

Обязательные поля: формулировка · проявления (**составной ключ `контур:W-NNN`** — номера
уникальны только внутри контура!) · trigger-signature · вопрос-инъекция (≤120 симв.) ·
текущая мера с пометкой узкая/классовая · статус.

**Сигнатуру не выдумывать.** Нет машинно-проверяемого условия — писать «класс слабо защищён,
ожидаем рецидив». Это честная ранняя диагностика, а не поражение.

## Форма инъекции — вопрос, не императив

«Ты читал код этого флага — или вывел его смысл из имени?» работает лучше, чем «читай код
флагов». Вопрос требует ответа в текущем рассуждении; императив требует лишь согласия три
часа назад. Потолки: ≤2 строк и ≤2 уроков на вызов; триггер, срабатывающий чаще чем на 20%
вызовов, — сужать.

## Правило второго случая (против инфляции правил)

Первый инцидент класса → журнал + сигнатура, и всё. Текстовое правило или отдельный хук —
**со второго случая**, ЛИБО сразу, если цена необратима (метрология, финансы, push, delete).
Инфляция правил — режим отказа: чем больше always-on, тем хуже всплывает каждое.

## Проверка меры

- Хук/гейт — **мутационно**: воспроизвести условие инцидента и показать, что мера сработала;
  повторять при каждой правке хука. Зелёный прогон не значит ничего, пока не показано, что
  он умеет краснеть (#SA-3).
- Текстовое правило — вопрос «где именно оно всплывёт?» задаёт **не автор** (§31.A: свой
  контекст заражён сделанным), а стерильный проход. Нет ответа — правило мертворождённое,
  переразмещать.
- **Ре-верификация L0** периодически: хук может быть мёртв с установки, и молчание
  неотличимо от работы (`Цензор:W-015`).

## Метрика — одна, вычислимая скриптом

Доля классов с рецидивом ПОСЛЕ принятой меры (цель → 0 для мер уровня хук+); MTBR по классам;
latency «инцидент → общий слой». Считает скрипт по каталогу и составным ключам — **не
самопометка агента** (метрика, наказывающая за рецидив, дестимулирует его признание).

**НЕ метрика:** число записей и правил. Это графомания, а не обучение.

## Границы

- **`incident-log`** — нормативный дом лестницы мер и полей записи инцидента. Здесь на неё
  только ссылка; дублировать формулировки нельзя (два дома одного правила = дрейф).
- **`session-handoff`** — состояние для продолжения работы, не уроки.
- **§31 IRON MODE** — как не допустить (стерильные проверки, лестница делегирования).
  `incident-log` — что делать, когда допустил. Здесь — как сделать, чтобы урок не пропал
  и не потребовался второй раз.

## Anti-patterns

- ❌ Институциализировать петлю текстовым правилом без привода — умрёт молча (эмпирика:
  «сводный анализ раз в 10 записей» из `incident-log` — 0 исполнений за 30 записей).
- ❌ Отвечать на рецидив повторной записью в журнал — рецидив означает, что ступень уже
  провалена.
- ❌ Считать «мусор» плохим результатом триажа — 90% мусора это норма, ценность в хвосте.
- ❌ Развёрнутые LESSONS — длинная форма порождает отписки.
- ❌ Грузить журналы в контекст «на всякий случай» — оплата ретривала до потребности.
- ❌ Полносвязная рассылка инцидентов всем контурам — канал умирает от спама за месяц.
- ❌ Хук на каждый урок — инфляция переезжает из CLAUDE.md в settings.json; нужен ОДИН
  диспетчер с реестром.

## История

Создан 2026-08-21 по запросу оператора («продумай очень хорошо стратегию самообучения,
сделай самоаудит»). Стратегия прошла двойной стерильный аудит §31.A: независимый дизайнер
и адверсариальный скептик, не видевшие работы друг друга. Скептик вынес по первой версии
3 КРИТИЧНО + 8 СЕРЬЁЗНО («нежизнеспособна»): петля целиком держалась на текстовых правилах,
провал которых сама же и доказывала; метрика была невычислима; два опорных факта диагностики
не прошли проверку источником (ошибочная ссылка D-031 вместо D-037; мера W-026 названа
журнальной, тогда как она была высшей ступени, но узкой). Все находки учтены в v2.
Полные документы: `<your-shared-drive-root>\Цензор\prompts\self-learning\`
(STRATEGY-v2.md, AUDIT-1-sterile-designer.md, AUDIT-2-adversarial-skeptic.md).

