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

5.7 KiB
Raw Permalink Blame History

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ě.