--- name: memoria-heartbeat description: Minden körben átnézi az ELŐZŐ KÖR ÓTA történteket, menti a fontosat, és skill-eket generál ha volt komplex munka --- ## 0. ELŐSZÖR: Van-e várakozó Telegram üzenet? **Mielőtt bármit csinálnál**, nézd meg a session inputját: ha van ` **AZ ABLAK "AZ ELŐZŐ KÖR ÓTA", NEM FIX PERCSZÁM -- MÉRVE 2026-08-22, ÚJRAMÉRVE 2026-08-27.** > A szöveg korábban fix percszámot mondott, és a rögzített szám KÉTSZER is elavult. Ezért nincs > benne szám többé: **a fix percszám a konfigurált kadenciával együtt avul, "az előző kör óta" nem.** > > **AMIT 2026-08-27-EN MEGMERTEM, ha valaki mégis a számra kíváncsi (és ne erre építs):** > a `task-config.json` `*/15 * * * *`-ot mond, de a `skipIfBusy: true` miatt a hozzám ELJUTÓ > kadencia **30 perc**. A `task_runs` tökéletesen váltakozik: :00 skipped, :15 fired, :30 skipped, > :45 fired -- 24 órában 43 fired / 53 skipped, és 17 egymást követő fired-köz pontosan 1800-1803 mp. > A :00 és :30 slot rendszeresen ütközik az órás heartbeat-digesttel és a drain-körökkel. > Vagyis a KONFIGURÁLT (15) és a KÉZBESÍTETT (30) kadencia két külön szám, és a 2026-08-22-i > "a kadencia 15 perc" javítás a konfiguráltat mérte, nem azt, ami ideér. > **Következmény, amit érdemes tudni:** ez a kör soha nem fut :00-kor és :30-kor, tehát az óra > tetején történtek a következő (:15 vagy :45) körben jönnek fel. Ez nem hiba, csak fáziseltolás. > **HA MÉGIS ÁTFEDÉST LÁTSZ:** a mérce nem az idő, hanem hogy *lezártad-e már*. Ha egy munkára már > írtál memóriát vagy patcheltél skillt az előző körben, az KÉSZ -- ne írd meg újra más szavakkal. ## 1. Memória mentés Ha volt fontos döntés, preferencia, tanulság vagy bármi ami később hasznos, mentsd el: ```bash curl -s -X POST http://localhost:3420/api/memories \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(cat {{INSTALL_DIR}}/store/.dashboard-token)" \ -d '{"agent_id":"SAJAT_NEVED","content":"...","category":"warm","keywords":"..."}' ``` `category` lehet: `hot` (aktív), `warm` (preferencia/config), `cold` (tanulság), `shared` (más agent-nek is). Az `agent_id`-t a CLAUDE.md-ből vagy a munkamappa nevéből derítsd ki. ## 2. Skill reflexió (KÖTELEZŐ ha volt komplex munka) Először döntsd el az alábbi 3 kérdéssel: - **A**: Volt-e AZ ELŐZŐ KÖR ÓTA legalább 5 tool-hívásos komplex feladat? (Ami már az előző körben le lett zárva, az NEM számít -- lásd fent az ablak-megjegyzést.) - **B**: Volt-e hiba → recovery (próbálkozás → fail → másképp) amit egy meglévő skill Buktatók szekciójába kellene tenni? - **C**: Volt-e user korrekció ("nem így", "ne ezt", "másképp"), ami skill-javítást igényel? **Ha A vagy B vagy C IGEN: KÖTELEZŐ skill akció, nem kihagyható.** Lépések: 1. Keress meglévő skillt a globális és az ágensspecifikus indexben egyaránt: - Globális: `~/.claude/skills/.skill-index.md` (szöveges keresés) - Ágensspecifikus (ha van): `./.claude/skills/.skill-index.md` a munkamappádban (szöveges keresés) - Az ágensspecifikus index mindkét szintet tartalmazza, tehát ha az létezik, elég azt nézegetni. 2. Ha van releváns skill: PATCH (csak a megváltozott rész cseréje, ne az egész fájl). - A `## Buktatók` szekciót preferáld ha hiba/recovery volt. - A `## Eljárás` szekciót ha a folyamat változott. 3. Ha NINCS releváns skill: hozz létre újat: ```bash mkdir -p ~/.claude/skills/ cat > ~/.claude/skills//SKILL.md < description: Mikor használd, mit csinál (1-2 mondat). Konkrét trigger. --- # ## Mikor használd ... ## Eljárás 1. ... ## Buktatók - ... ## Ellenőrzés - ... EOF ``` 4. Linter az érintett skillen (KÖTELEZŐ, a skill-akció után): ```bash node {{INSTALL_DIR}}/scripts/skill-lint.mjs ~/.claude/skills/ ``` Ha hibát jelez (nem 0 a kilépési kód): javítsd a jelzett pontot, és futtasd újra, amíg tiszta nem lesz. A szabályok (Anthropic, Skill authoring best practices): a SKILL.md törzse legfeljebb 500 sor; a 100 sornál hosszabb `references/` fájl tetején tartalomjegyzék; minden segédfájlra közvetlenül a SKILL.md mutasson; a SKILL.md linkjei létező fájlra mutassanak. A linter csak jelez; külső forrásból telepített skillt ne írj át. 5. Index regen (mindkét szint): ```bash bash {{INSTALL_DIR}}/scripts/skill-index.sh # globális index frissítése bash {{INSTALL_DIR}}/scripts/skill-index.sh "$(pwd)" # ágensspecifikus merged index frissítése ``` **Ha kihagytad a skill akciót, pedig A/B/C valamelyike IGEN volt:** kötelezően hagyj nyomot `hot` tier memóriában, hogy később lássuk miért. Ne csendben hagyd ki. **A bejegyzés kulcsa a LELET, nem a kör.** Előbb keress meglévő `skip-skill:` sort UGYANARRA a leletre: - ha van: azt **frissítsd** (számláló + utolsó dátum), NE írj újat; - csak akkor írj új sort, ha ez a lelet még egyáltalán nem szerepel. Egy nyitott lelet egy sor marad, akárhány kör látja. (Mérve 2026-09-13: a kulcs a kör volt, nem a lelet, így minden kör újra beírta ugyanazt -- 35 skip-skill sor, a hot memória 64%-a, egyetlen zárt csatornára.) ## 3. Csendben maradás **KIVÉTEL: Ha a felhasználó üzenetet küldött egy csatornán (` a csatorna NÉMUL felügyelet nélkül. ## 4. ZÁRÓ STAMP (KÖTELEZŐ, a kör UTOLSÓ lépése -- csendes körnél is) **MÉRT HIÁNY (2026-08-23): ennek a körnek korábban NEM volt záró nyoma.** Kívülről megkülönböztethetetlen volt, hogy a kör LEFUTOTT és csendes volt, vagy el sem jutott a végéig -- "csendes kör"-t állítani úgy, hogy bizonyítani nem lehet, pont a hamis-nulla hibaosztály. Ezért a kör VÉGÉN, minden ágon (csendes körnél is), egyetlen sor: ```bash python3 -c "import json,time; json.dump({'last_run_at': int(time.time()), 'outcome': 'OUTCOME'}, open('{{INSTALL_DIR}}/store/memoria-heartbeat-state.json','w'))" ``` Az `OUTCOME` értéke: `silent` (csendes kör), `memory` (memória mentve), `skill` (skill akció volt), `both`. A stamp attól ér valamit, hogy KIVÉTEL NÉLKÜL íródik -- egy kihagyott csendes kör a következő mérésben futás-hiánynak látszik.