Files
nanobot-runtime/plans/self-reflection-skill.md
2026-09-02 15:23:13 +02:00

117 lines
5.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Self-reflection skill — plán
Stav: navrženo, čeká na schválení implementace
Datum: 2026-08-31
## Cíl
Skill pravidelně prochází vlastní historii tahů (`sessions/*.jsonl`) a vytěžuje z ní
opakující se chybové vzory (retry smyčky, runaway loops, wrong tool choice, plán bez
provedení). Nálezy reportuje; **nic nikdy nemodifikuje** mimo vlastní sandbox.
## Motivace (z diskuze)
- 532 session souborů / 16 MB / ~22,5k záznamů — mrtvá váha, nikdo je nečte.
- Lessons-learned dnes vznikají jen ručně (v tuře, kdy si chybu uvědomím) —
session log zachytí chyby i ty, které jsem nevědomky opakoval.
- `develop/` je doména Claude Code — self-reflection si drží vlastní store a
`develop/` vůbec neokousává.
- Ověřený recept z develop/history: opakované selhání = měkká instrukce v SKILL.md,
kterou reference popírá; fix = tvrdá STOP brána. Sebe-reflexe by měla takové
slabosti odhalovat *navrhovat* opravu, nikdy ji neaplikovat.
## Architektura — read-only, tvrdá hranice
Skill **nikdy nic nezapisuje** mimo vlastní sandbox. Žádné edity SKILL.md,
AGENTS.md, SOUL.md, develop/ — ani gates. LLM závěry mohou být chybné a autonomní
zápis by mohl pokazit celé chování agenta (rozhodnutí uživatele z diskuze).
**Píše pouze:**
- `results/<date>_self-reflection-*.md` — plný report včetně návrhů patchů
- `skills/self-reflection/state.json` — cursor (timestamp posledního zpracování)
- souhrn na Telegram (pattern compact-memory-auto)
**Čte:**
- `sessions/*.jsonl` (inkrementálně od cursoru)
- `develop/` (jen pro deduplikaci proti známým lekcím)
- vlastní `state.json`
## Průběh jednoho runu
1. **Skript (bez LLM):** diff cursor → nové soubory; odfiltrovat šum podle prefixů
názvů (`compact-memory-auto_*`, `dream:*`, `cli_*` testy) a krátké session
(< 5 zpráv). První run navíc prefiltruje backlog: mechanické signály
(stejný tool+argumenty ≥2× za sebou, error → identický retry, dlouhý reasoning
bez tool callu, opakované čtení stejného souboru) → kandidáti pro LLM.
Skript dělá jen mechanickou triáž/rank, žádné quality judgements.
2. **Agent tah:** přečte kandidáty, klasifikuje vzory:
- tool retry smyčka (re-run bez diagnózy)
- runaway loop (opakované čtení, edit↔lint smyčka)
- wrong tool choice (`exec cat` místo `read_file` apod.)
- plán bez provedení (multistep požadavek → odpověď bez tool callu)
Deduplikuje proti `develop/` a vlastním minulým reportům.
3. **Report:** dated soubor do `results/`; návrhy oprav jako hotové patche
(old_text → new_text) čekající na schválení. Souhrn na Telegram.
4. **Cursor:** posune `state.json`.
## Schvalování
- Návrhy patchů leží v reportu. Aplikace až na explicitní „proveď" /
„aplíkuj návrh N z posledního reportu" — pak patch aplikuju já v normálním
tuře (kontext, ověření, diff).
- Interface = přirozený jazyk, žádná nová mechanika.
## Spouštění
- **První run:** jednorázově přes backlog 532 starých souborů (s plnou
prefiltrací). Archeologie, ale může odhalit dlouhodobé vzory.
- **Dál:** inkrementálně. `cron` tool job, týdně, náhodná hodina, message
„spusť self-reflection skill na nové sessions". Analýza potřebuje LLM tah
→ agent turn, ne standalone shell skript.
- Increment za den je malý; týdenní dávka (~3070 session) je akorát.
## Otevřené otázky
- Schválení implementace jako celku.
- Detailní podoba skriptu (signály, prahy) — vyřeší se při implementaci.
---
## Záznam diskuze (2026-08-31)
**Východisko:** otázka „dokážeš se učit ze své vlastní historie?" → průzkum dat
skillů (SQLite db: 55 připomínek/589 doručení, 29 bookmarků, 12 flight searchů;
develop/history.md 117 záznamů; sessions/ 532 souborů nikdy nezpracovávaných).
**Nálezy z průzkumu:**
1. Opakující se selhání má naučený recept (hard STOP gate v SKILL.md), ale
není systematicky aplikovaný — 19 zmínek smyček/zaseknutí v develop/history.
2. Dream slabě deduplikuje — fakt o `nanobot-version-check` jobu ~7× znovu
v history.jsonl během jednoho týdne.
3. Připomínková data: špičky doručení 811 h a 1920 h; témata zdraví /
chata+chlívek / administrativa.
4. Největší nevyužitá surovina: `sessions/` — 530+ session souborů, korpus
reálných tahů včetně chyb.
**Uživatel:** „knowledge je teď importováno a dělá ho Claude Code a ne ty;
ale to, že bys sám dělal vlastní korekci, zní dobře."
**Uživatel k prefiltraci:** „jak skript pozná, co má zahodit?" → dohoda:
skript dělá jen mechanickou triáž podle metadat (prefixy, počty zpráv,
opakování tool calls), quality judgements jsou výlučně LLM tahu. U inkrementálního
režimu je prefiltrace skoro zbytečná — smysl má jen pro první backlog run.
**Uživatel:** „měl by to být skill? pravidelně procházel historii a zhodnocoval
co zlepšit, jak, kam?" → dohoda: skill `self-reflection`, cursor pattern
(jako Dream `.dream_cursor`), weekly cron agent turn, report do results/,
návrhy patchů jako hotové diff bloky.
**Klíčové rozhodnutí uživatele:** „skill rozhodně NIKDY sám nic nemodifikuje,
ani skilly ani nic jiného — LLM závěry mohou být chybné a pak by to podělalo
celé chování agenta. Jak to schvalovat, je věc jiná."
→ Varianty A (autonomní gates) se ruší. Skill je striktně read-only mimo
vlastní sandbox. Schvalování: návrhy čekají v reportu, aplikace na explicitní
povel v normálním tuře.
**Poslední otevřená otázka:** první run přes backlog vs. čistý inkrementální
start. Návrh agenta: backlog jako první run (s prefiltrací), dál inkrementálně.