New features: - /learn:analyze now uses signal detection to save only valuable lessons - Explicit commands: "ține minte", "remember", "memorează" - Stated preferences: "întotdeauna", "always", "never" - Repeated corrections (2+ times) - Historical references: "cum am discutat", "as we discussed" - New /learn:cleanup command for memory hygiene - Scoring system for entry quality - Conservative mode with confirmation - Upgrade option to rewrite entries - SessionEnd hook shows reminder on /exit, /clear, Ctrl+D - Metadata tracking: source, confidence, reinforced, trigger Changes: - analyze.md: Added Pas 3.5 for signal detection - cleanup.md: New command for reviewing/deleting entries - hooks.json: Changed from Stop to SessionEnd - scripts/session-end-reminder.sh: New reminder script - Templates updated with metadata fields - Documentation updated for v2.1.0 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
10 KiB
Analiză Conversație pentru Lecții
Examinează conversația curentă și identifică insights pentru documentație. Salvează doar lecții cu semnal clar - nu one-off fixes.
Workflow
Pas 0: Încarcă Configurația Domeniilor
Citește .claude/rules/claude-learn-domains.md pentru lista domeniilor disponibile.
Dacă fișierul nu există, creează-l din template cu domeniile implicite:
- backend, frontend, database, testing, deployment, global
Pas 0.5: Verifică Reinforcement pentru Entries Existente
Înainte de a căuta lecții noi, verifică dacă conversația validează entries existente:
-
Încarcă toate entries din domeniile relevante (bazat pe fișierele din conversație)
-
Pentru fiecare entry, verifică dacă:
- Problema descrisă a fost întâlnită ȘI soluția a funcționat
- Pattern-ul a fost aplicat cu succes
- Utilizatorul a menționat/confirmat un gotcha salvat
-
Dacă găsește match-uri, actualizează:
- Incrementează
Reinforcedcount - Actualizează
Last Reinforcedla data curentă
- Incrementează
-
Raportează la final (dacă există):
📈 Entries validate în această sesiune:
- [backend] "API Error Handling" - reinforced (3→4)
- [frontend] "Vue Watch Pattern" - reinforced (1→2)
Pas 1: Scanează Conversația
Identifică:
- Fișiere accesate: toate path-urile din Read, Edit, Write, Glob, Grep
- Tool calls cu erori → potențiale gotchas
- Soluții aplicate → potențiale patterns
- Decizii tehnice → posibile reguli noi
- Mesaje utilizator → comenzi explicite, corecții, preferințe
Pas 2: Detectează Domeniul
2.1 Extrage Path-uri
Colectează toate path-urile fișierelor din conversație:
src/api/users.ts
src/api/middleware/auth.ts
tests/api/users.test.ts
2.2 Match-uiește cu Domeniile
Pentru fiecare path, verifică contra patterns din config:
src/api/**/*.ts→ backendtests/**/*.test.ts→ testing
2.3 Determină Domeniul Predominant
Alege domeniul cu cele mai multe match-uri. Dacă egalitate → preferă în ordine: backend > frontend > database > testing > deployment > global
2.4 Prezintă Utilizatorului
📁 Domeniu detectat: backend (bazat pe src/api/users.ts, src/api/middleware/auth.ts)
Este corect? [y/n/altul]
Răspunsuri posibile:
- y → continuă cu domeniul detectat
- n → listează toate domeniile disponibile pentru selecție
- altul sau nume-nou → creează domeniu nou (vezi Pas 3)
Pas 3: Creare Domeniu Nou (dacă e cazul)
Când utilizatorul introduce un nume de domeniu care nu există:
3.1 Propune Patterns Automat
Bazat pe path-urile din conversație, generalizează:
scripts/deploy.sh → scripts/**/*.sh
ansible/roles/web/tasks/main.yml → ansible/**/*.yml
Algoritm:
- Extrage primele 2 nivele de directoare:
scripts/,ansible/ - Extrage extensia:
.sh,.yml - Generează glob:
{dir}**/*{ext}
3.2 Prezintă pentru Confirmare
📁 Domeniu nou: "devops"
Bazat pe fișierele din conversație, propun aceste patterns:
scripts/**/*.sh
ansible/**/*.yml
Accept? [y/edit/+more]
3.3 Salvează Domeniul
- Adaugă în
.claude/rules/claude-learn-domains.md - Creează
.claude/rules/claude-learn-{domain}.mdcu frontmatter
Pas 3.5: Detectare Semnal de Salvare
CRITIC: Înainte de a propune lecții, verifică dacă există SEMNAL CLAR că lecția merită salvată.
Categorii de Semnal (în ordine de prioritate)
A. Comandă Explicită (Source: explicit, Confidence: high) - SCOR: +100
Caută în mesajele utilizatorului fraze de tip "ține minte":
Română:
- "ține minte", "memorează", "reține", "să nu uiți", "notează-ți"
- "salvează asta", "adaugă în memorie"
Engleză:
- "remember", "remember this", "don't forget", "keep in mind"
- "note this", "save this"
Acțiune: Salvează IMEDIAT cu source=explicit, confidence=high
B. Preferință Explicită (Source: explicit, Confidence: high) - SCOR: +80
Caută pattern-uri de tip regulă permanentă:
Română:
- "întotdeauna fă X", "niciodată nu Y", "mereu să fie Z"
- "de acum înainte", "regula e că", "standard e să"
Engleză:
- "always do X", "never do Y", "from now on"
- "the rule is", "standard is to", "we always"
C. Corecție Repetată (Source: repeated, Confidence: high) - SCOR: +70
Detectează când utilizatorul corectează ACEEAȘI problemă de mai multe ori:
Română:
- "nu, fă-o așa", "greșit, e X nu Y", "am mai spus"
- "din nou", "încă o dată", "iar ai făcut", "te-am corectat"
Engleză:
- "no, do it like this", "wrong, it's X not Y", "I said before"
- "again", "once more", "I already told you"
Condiție: Găsește 2+ corecții pe același subiect → salvează cu source=repeated
D. Referință Istorică (Source: inferred, Confidence: medium) - SCOR: +50
Când utilizatorul referă discuții anterioare:
Română:
- "cum am discutat", "așa cum am făcut data trecută", "nu uita că"
- "știi deja", "am stabilit că", "după cum știi"
Engleză:
- "as we discussed", "like we did before", "don't forget that"
- "you know", "we agreed", "as you know"
Acțiune: Salvează CU VERIFICARE - întreabă utilizatorul dacă vrea să salveze
E. Pattern Dedus din Erori (Source: inferred, Confidence: medium/low) - SCOR: +30
Detectare din erori și soluții (comportamentul actual).
Criteriu de Incluziune (CE să salveze):
- Eroare care a apărut de mai multe ori în conversație
- Soluție care rezolvă o clasă de probleme (nu un singur fișier)
- Configurație care a necesitat research/documentație
- Workaround pentru bug cunoscut
Criteriu de Excludere (CE să NU salveze) - SCOR: 0:
- Fix pentru o greșeală de tipar/typo
- Eroare de path sau import greșit (one-time fix)
- Bug specific unui singur fișier fără pattern general
- Ajustări de valori hardcodate
- Syntax errors simple
Calculare Scor de Semnal
| Semnal | Puncte |
|---|---|
| Comandă explicită ("ține minte") | +100 (auto-salvare) |
| Preferință explicită ("întotdeauna") | +80 |
| Corecție repetată (2+ ori) | +70 |
| Referință istorică | +50 |
| Eroare rezolvată cu pattern general | +30 |
| Configurație descoperită | +30 |
| Eroare one-time | +5 |
| Typo/fix banal | 0 |
Praguri:
- < 30 puncte: NU se propune (filtrat automat)
- 30-50 puncte: Se propune cu ⚠️ "Low confidence"
- 50-80 puncte: Se propune normal
- 80+ puncte: Marcat ca ⭐ "Recommended"
Pas 4: Generează Propuneri de Lecții (cu Metadata)
Pentru fiecare insight identificat cu scor >= 30, generează:
Patterns (Soluții Repetabile)
- Abordări care au funcționat bine
- Configurații utile descoperite
- Tehnici noi aplicate cu succes
- Workflow-uri eficiente
Gotchas (Capcane de Evitat)
- Erori întâlnite și cum s-au rezolvat
- Confuzii cauzate de documentație
- Comportamente neașteptate
- Anti-patterns descoperite
Format extins pentru fiecare insight:
**[PATTERN/GOTCHA] Titlu Scurt** ⭐ Recommended | ⚠️ Low confidence
- **Categorie**: patterns | gotchas
- **Source**: explicit | inferred | repeated
- **Confidence**: high | medium | low
- **Scor**: {punctaj}
- **Semnal detectat**: "{fraza/contextul care a declanșat}"
- **Descriere**: Ce s-a învățat
- **Context**: În ce situație e relevant
- **Exemplu**: Cod sau pași concreți
- **Tags**: [tag1, tag2, tag3]
Pas 5: Prezintă Utilizatorului (Extins)
📚 Am identificat {N} lecții din această conversație:
⭐ RECOMANDATE (semnal puternic):
1. [PATTERN] {Titlu} (explicit: "întotdeauna fă X")
{Descriere scurtă}
2. [GOTCHA] {Titlu} (repeated: corectat de 3 ori)
{Descriere scurtă}
⚠️ POSIBILE (semnal slab):
3. [PATTERN] {Titlu} (inferred: eroare rezolvată)
{Descriere scurtă}
❌ EXCLUSE (one-time fixes, nu se salvează):
- Fix typo în auth.ts
- Import path corectat în utils.ts
📁 Domeniu: {domain}
Care dintre acestea vrei să le salvez?
- [1, 2] - Selectează specific (implicit: doar recomandate)
- [1, 2, 3] - Include și cele cu semnal slab
- [all] - Toate (inclusiv cele slabe)
- [none] - Niciuna
- [edit N] - Modifică propunerea N
Pas 6: Salvează în Fișierul Domeniului (cu Metadata)
Salvează în .claude/rules/claude-learn-{domain}.md
Dacă fișierul nu există, creează-l din template cu frontmatter corect.
Format Pattern (extins):
### {Titlu}
**Discovered**: {YYYY-MM-DD} (feature: {context})
**Source**: {source} | **Confidence**: {confidence} | **Reinforced**: 0
**Trigger**: "{fraza care a declanșat salvarea}"
**Description**: {descriere}
**Example** (`{file}:{lines}`):
\```{language}
{code}
\```
**Tags**: {tags}
---
Format Gotcha (extins):
### {Titlu}
**Discovered**: {YYYY-MM-DD} (feature: {context})
**Source**: {source} | **Confidence**: {confidence} | **Reinforced**: 0
**Trigger**: "{fraza care a declanșat salvarea}"
**Problem**: {problema}
**Solution**: {soluția}
**Tags**: {tags}
---
Pas 7: Actualizează Statistici
La sfârșitul fișierului domeniului, actualizează:
- Incrementează Total Patterns/Gotchas
- Actualizează Last Session la data curentă
- Incrementează Sessions Recorded
- Actualizează Total Reinforcements (dacă s-au făcut în Pas 0.5)
Pas 8: Confirmă
✅ Salvat în claude-learn-{domain}.md:
- {N} patterns adăugate
- {M} gotchas adăugate
📈 Entries reinforced: {X}
Statistici {domain}: {P} patterns, {G} gotchas, {R} reinforcements total
Argument: $ARGUMENTS
Dacă argumentul este:
autosau gol → detectează toate categoriilepatterns→ focus doar pe patternsgotchas→ focus doar pe gotchas
Compatibilitate Înapoi
Format Vechi de Memorie
Dacă există fișierul vechi claude-learn-memory.md fără frontmatter:
⚠️ Detectat format vechi de memorie (claude-learn-memory.md)
Vrei să migrez memoria existentă către noul sistem cu domenii? [y/n]
- y → rulează /learn:import pe fișierul vechi
- n → continuă fără migrare
Entries Fără Metadata
Entries vechi fără câmpurile noi (Source, Confidence, Reinforced, Trigger) sunt tratate ca:
- Source: inferred
- Confidence: medium
- Reinforced: 0
- Trigger: ""
La prima editare sau reinforcement, metadata va fi adăugată automat.