Files
claude-plugins/plugins/learn/commands/analyze.md
Claude Agent 7aafcd5562 feat: v2.1.0 - Selective saving, cleanup command, and SessionEnd hook
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>
2026-01-06 23:12:31 +00:00

10 KiB

description: Analizează conversația și propune lecții de salvat (cu filtrare selectivă) argument-hint: [auto|patterns|gotchas] - Detectare automată sau categorie specifică

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:

  1. Încarcă toate entries din domeniile relevante (bazat pe fișierele din conversație)

  2. 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
  3. Dacă găsește match-uri, actualizează:

    • Incrementează Reinforced count
    • Actualizează Last Reinforced la data curentă
  4. 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 → backend
  • tests/**/*.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:

  1. Extrage primele 2 nivele de directoare: scripts/, ansible/
  2. Extrage extensia: .sh, .yml
  3. 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}.md cu 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:

  • auto sau gol → detectează toate categoriile
  • patterns → focus doar pe patterns
  • gotchas → 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.