# Feedback

> Опыт сессии становится тем, что можно починить, — слово агента о скиллах и тулах, которыми он работал. Срабатывает сам на нетривиальном опыте: правило пропустило случай, описание солгало о поверхности, починка сработала не по причине, у шага не было знака. Триггеры: «фидбэк», «дай обратную связь», feedback, «запиши, что не сработало», «скилл подвёл». Кладёт случай в граф работы на узел инструмента, адресно его стюарду, проверив, не сказано ли то же. Композирует writing. Нужны тулы iskron_*.

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

---


# Feedback — опыт сессии, записанный там, где по нему можно действовать

Агент весь день проходит сквозь собственные инструменты: скиллы, которые подошли или увели не туда, описание тула, обещавшее то, чего поверхность не делает, правило, которое было верным и всё равно пропустило случай. Ничто из этого не достигает того, кто эти инструменты держит, — сессия кончается и уносит всё с собой.

**Единица — случай, не мнение.** «Скилл запутанный» — не повод действовать. «Правило говорит X, я сделал Y, и ничто меня не отклонило» — повод. Фидбэк пригоден тем же, чем пригоден контрпример: случилось конкретное, и оно воспроизводимо настолько, что с ним можно спорить.

## Когда срабатывает

**Сам, на нетривиальном опыте** — не жди, пока попросят. Нетривиально значит: одно из этого действительно случилось с тобой:

- правило существует, ты его читал, и случай всё равно ускользнул;
- описание обещало поведение, которого у поверхности нет, — ты узнал это попыткой хода;
- починка сработала, и ты не можешь сказать, что она достала причину;
- у шага не было собственного знака, и ничто не сказало бы, что он пропущен;
- ты потянулся за инструментом, и он вернул пустоту там, где вещь существовала под другим именем.

**И пользователь зовёт его напрямую** — `/feedback`, своими словами. Предложи это, когда он говорит об инструментах что-то, что стоит сохранить и чему больше некуда лечь. Жалоба человека — уже случай; твоя работа — форма, проверка и размещение, никогда не суд о том, считается ли она.

**Что его не запускает:** сработавшее как задокументировано; трудность, которая была твоей, а не инструмента; предпочтение. Поле, полное «мне бы хотелось», — поле, которого никто не читает.

## Прежде чем писать: которую редакцию ты держишь

Скилл не несёт на себе метки своей версии, а установленная копия может отставать от сопровождаемой на несколько выпусков; протухший текст читается так же авторитетно, как текущий, и его дефекты предстают **дефектами метода**. Сверку редакции установленной поставки несёт **iskronify** — прогони её прежде, чем докладывать инструкцию скилла неверной, и назови версию поставки первой строкой случая. **Избегать надо не заявки «этот скилл неверен» — а заявки «этот скилл неверен» из уст того, кто не проверил, который скилл у него.**

## Прежде чем писать: не сказано ли это уже

Граф работы долгоживущий и общий для всех делателей контура, поэтому первый ход — не запись, а взгляд. Второй узел, говорящий то, что один уже говорит, раскалывает ответ — и игнорируют именно второй.

`iskron_semantic_search(realm=<граф работы>, q=<случай одной фразой>)` — **одно понятие на запрос, естественной фразой.** Мешок терминов — мешок направлений: вся строка становится одним вектором, и центроид между несколькими смыслами не лежит рядом ни с чем. Два понятия — два запроса, никогда не один длиннее. Лексический `iskron_search` здесь неверный инструмент: его токены матчатся по И и без стемминга, так что многословный запрос возвращает пустоту ровно тогда, когда тебе есть что сказать.

**На попадании — допиши новизну в стоящий узел, не открывай второй.** Скажи, что ново: ещё один контур, где воспроизвелось, механизм, которого первый рассказ не называл, случай, сужающий или расширяющий. Второе свидетельство стоит больше первого — оно превращает случайность одной сессии в паттерн; записанное дубликатом, оно не стоит ничего.

**Почти-попадание — не промах.** Узел, покрывающий тот же дефект с другого угла, — попадание. Новый узел открывай только тогда, когда твоё сделало бы существующий узлом о двух вещах.

## Форма

Сначала жанр — он решает, как случай будет прочитан:

| Что несёшь | Жанр |
|---|---|
| Правило существует, и случай ускользнул | `vyabhichara` |
| Описание или обоснование само неверно | `hetu-dosha` |
| Наблюдение, которое стоит нести, без заявки о дефекте | `hint` |
| Настоящий вопрос о том, как должно быть | `samshaya` |

Затем тело, на языке графа, в этом порядке:

1. **Случай.** Где, когда, что на самом деле произошло — конкретно настолько, чтобы с этим можно было спорить.
2. **Правило, которое должно было поймать, — процитированное дословно, если оно есть.** Это несущая часть и самая пропускаемая. «Правила нет» и «правило верно, но его всё равно проскочили» зовут противоположные починки, и различает их только цитата. Случай, подтверждающий правило в четвёртый раз, всё равно стоит записи: он говорит, что проблема не в правиле.
3. **Где промах на самом деле** — что часто не там, где показалось сначала.
4. **Механизм.** Почему это случается, а не что случилось. Шаг без собственного подтверждения пропускается по построению, не по невнимательности; починка, снявшая симптом, учит сама себя. Назови форму — и случай перестанет быть одним инцидентом.
5. **Что бы это закрыло** — критерий, не решение. Чинить будешь не ты.

`attrs.posed_by` несёт кто и откуда: контур, харнес, дату. Случай, чьё происхождение не проследить, не воспроизвести.

**Пиши модус честно.** `pratyakshita` — для того, что видел происходящим; `anumita` — для выведенного из чтения кода или прозы. Разница — то, что говорит держателю: воспроизводить это или спорить с этим.

## Клади в граф работы — адресно

Поле фидбэка — **граф, в котором ты работаешь**: тот, что назвал `AGENTS.md` репозитория или вход. Общего поля обратной связи нет: случай, положенный в отдельный граф, где нет ни контура инструмента, ни его стюарда, никто из способных починить не увидит. Контур инструмента, о котором случай, живёт в графе работы — скилл в контуре своей поставки, тул в контуре своей поверхности, дисциплина канала в своей под-границе, — и случай кладётся туда, к тому, кто держит.

Эту работу делают два ребра, и отвечают они на разные вопросы:

- **Якорь** (`vimarsha_of` → узел инструмента или его контур) решает, где случай **находят**. Ориентирующийся на этом контуре собирает всё заякоренное под ним; случай, не заякоренный нигде, находим лишь тем, кто читает весь граф. Есть узел самого скилла или тула — якорь на него, не на контур: фокус на контуре и так собирает вопрошания своего охвата.
- **Адрес** (`posed_to` → роль) решает, **в чью очередь** он входит. Сентинел `posed_to="steward"` делает прогулку от якоря к стюарду контура за тебя; несколько кандидатов — отказ с перечислением, выбери по нему. Случай о методе вообще, не об одной поставке, адресуется роли владельца продукта.

Одно не заменяет другого: адресованный, но не заякоренный — никогда не всплывает там, где предмет пересматривают; заякоренный, но не адресованный — его никто не держит.

**Прочти контур прежде, чем класть.** `iskron_orient(realm=<граф работы>, focus=<контур инструмента>)` показывает узлы и роли, существующие *сегодня*; узел скилла или тула ищи `iskron_search(realm=<граф работы>, q=<имя скилла или тула>)`. Контура для инструмента нет вовсе — якорь на ближайшую границу, в которой он применяется, и это верно, а не лениво. Якорь на узле, которого нет, хуже отсутствия якоря.

**Ты должен случаю рассказ, не починку.** Напиши так, чтобы читатель, которого там не было, мог воспроизвести и решить. В сессии, где по нему действуют, тебя не будет.

