Claude Skill

linkedin-cringe-analytics

Analizza i commenti di un post LinkedIn (tipicamente un post cringe generato con la skill linkedin-cringe) e produce un report markdown con le statistiche - quanti ci hanno creduto e quanti hanno colto lo scherzo, top ten per gradimento, toni, categorie di commentatori, cringe-me

LLM Mart · 0 points · 10 views 0 listing impressions 0 install-command copies
Virus-scanned Reviewed automatically before listing.

Full trust report

Download matteobaccan-linkedincringe-.claude_skills_linkedin-cringe-analytics-88bb824.zip · 10 KB
Part of matteobaccan/linkedincringe — 3 skills

Install

skills CLI npx skills add https://github.com/matteobaccan/LinkedInCringe/tree/main/.claude/skills/linkedin-cringe-analytics
Claude Code claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install matteobaccan-linkedincringe@llmmart
Git git clone https://github.com/matteobaccan/LinkedInCringe.git

The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole matteobaccan/linkedincringe collection as a plugin from our marketplace. Git is the plain clone.

Skill manifest

LinkedIn Cringe Analytics: analisi dei commenti

Data l'URL di un post LinkedIn, scarica tutti i commenti e produce un report markdown con le statistiche. È la skill gemella di linkedin-cringe: quella genera il post, questa misura cosa è successo dopo.

Flusso

1. Acquisizione dei commenti

Due strade, in ordine di preferenza:

A. Browser automation (Claude in Chrome). Se i tool mcp__claude-in-chrome__* sono disponibili e un browser è collegato, estrai tutto da solo. La procedura completa e collaudata è in references/estrazione.md: leggila prima di iniziare, la UI di LinkedIn ha classi CSS offuscate, liste virtualizzate e lazy-load che si innesca solo con eventi rotella, e il playbook risolve tutti e tre i problemi. Se il browser non risulta collegato, chiedi all'utente di collegarlo e offri subito la strada B come alternativa.

B. Fallback manuale. L'utente apre il post, espande tutti i commenti ("Carica altri commenti" / "Vedi risposte precedenti" / "…altro"), seleziona tutto, copia e incolla in chat, oppure salva la pagina e passa il percorso del file. Il parsing a valle è identico.

I dati grezzi (con i nomi veri) vanno solo nella scratchpad di sessione, mai nel repository.

2. Parsing

Trasforma il raccolto in una lista di commenti strutturati. Il formato dei blocchi e le regole (risposte dell'autore, duplicazioni da annidamento, righe di conteggio) sono in references/estrazione.md, sezione Parsing.

Escludi dalla classificazione le risposte dell'autore del post (blocco "Autore"): si contano a parte come "botta e risposta" e non inquinano le percentuali.

3. Analisi

Per ogni commento assegna, con i criteri di references/classificazione.md:

  • Esito: 😇 ci ha creduto · 🎭 ha colto lo scherzo · 🤨 dubbioso · ⬜ non classificabile
  • Tono: ironico di rimando, serio-motivazionale, correttivo-normativo, logico-forense, indignato, aneddotico, altro
  • Categoria autore: dedotta dalla headline (tech, sales/BD, HR/recruiting, motivazionale, altro)
  • Cringe-metro 1-10: solo per i commenti scritti in buona fede, usando ../linkedin-cringe/references/tassonomia.md e moduli.md (riferimento incrociato: se la skill gemella non è installata accanto, salta questa parte segnalandolo)

Poi gli aggregati: percentuali per esito (sui classificabili), top ten per reazioni, incrocio categoria x esito, distribuzione dei toni, podio del cringe involontario, fenomeni ricorrenti (citazioni, tormentoni, refusi del post notati dai lettori).

Il bucket "non classificabile" è obbligatorio e va difeso: applausi, tag secchi e "Grazie per la condivisione" senza altro non sono decidibili, e forzarli dentro creduto/colto falserebbe le percentuali. Le percentuali si calcolano sui soli classificabili, dichiarandolo.

4. Report

Scrivi il report in analisi/YYYY-MM-DD-<slug>/report.md (lo slug viene dal tema del post, es. sedia). Struttura e regole in references/report.md.

Due regole non negoziabili, valide anche in chat:

  • Anonimizzazione totale: mai nomi o aziende dei commentatori, solo categoria di profilo ("un recruiter", "una pagina satirica"). Gli estratti di commento si citano brevi e senza attribuzione.
  • Copertura dichiarata: sempre "letti X commenti su un contatore di Y". Il contatore di LinkedIn include commenti cancellati e filtrati, quindi X < Y è normale e va spiegato, non nascosto.

Consegna: mostra in chat i 3-4 numeri chiave (percentuale creduloni in testa), poi invia il file. Se l'utente vuole anche la dashboard HTML autocontenuta (grafici CSS/JS inline, niente CDN), generala nella stessa cartella come dashboard.html; è opzionale, il markdown è l'output primario.

Paletti

  • Nessun giudizio sulle persone, solo sui commenti. "Il commento è livello 8 di cringe", mai "il commentatore è un cretino".
  • I dati grezzi con i nomi restano in scratchpad e non si committano. Nel repository entra solo il report anonimizzato.
  • Se l'utente chiede di pubblicare il report, ricordagli una volta che i testi citati restano di chi li ha scritti, poi fai quello che chiede.
  • Le risposte private, i profili e i contatti dei commentatori non si toccano: questa skill legge un thread pubblico e si ferma lì.
Files (linkedincringe)
  • references
    • classificazione.md 4.7 KB
      # Criteri di classificazione dei commenti
      
      ## L'esito: ci ha creduto o ha colto?
      
      La domanda a cui rispondere per ogni commento: **il commentatore ha capito che
      il post è satira?** Quattro esiti, in ordine di verifica:
      
      ### ⬜ Non classificabile (verifica per primo)
      
      Il commento non contiene abbastanza segnale per decidere. Tipici:
      
      - solo emoji o applausi ("👏👏", "🔥")
      - solo un tag a un'altra persona
      - "Grazie per la condivisione" secco, "Bello", "Interessante"
      - battute-fotocopia che funzionerebbero identiche su un post vero e su una parodia
      - botta e risposta fuori tema (chiacchiere tra conoscenti)
      
      Non forzare mai un non classificabile dentro un altro bucket: le percentuali
      si calcolano sui soli classificabili, e questo va detto nel report.
      
      ### 🎭 Ha colto lo scherzo
      
      Segnali, ne basta uno chiaro:
      
      - lo dice ("ci stavo per cascare", "pensavo fosse serio poi no dai", "/S")
      - **rilancia la parodia**: riscrive il post esagerandolo, aggiunge statistiche
        finto-precise, escalation surreali
      - cita il repertorio comico di riferimento (per l'Italia: la "cadrega", i meme
        "leader del settore", Fantozzi) in funzione di sberleffo al formato
      - meta-commento sul genere: "i commenti di chi prende sul serio il post",
        "non è reddit", "che configurazione di cringe aveva questo?"
      - conosce il dietro le quinte (cita la skill, l'AI, l'autore come satiro)
      
      Attenzione: umorismo ≠ aver colto. Chi fa una battuta *dentro* la cornice del
      post ("ecco perché mia moglie mi ha sposato 🪑") può benissimo crederci.
      Se la battuta funziona anche prendendo il post per vero → non classificabile
      o creduto, non colto.
      
      ### 😇 Ci ha creduto
      
      Segnali:
      
      - argomenta nel merito come se i fatti fossero reali: corregge la procedura
        ("la RAL va detta prima, è la legge"), discute il metodo di selezione,
        aggiunge il proprio aneddoto in tono serio
      - ringrazia, si complimenta, rilancia la morale ("i piccoli gesti raccontano
        molto", "saper fare vs saper essere")
      - si indigna contro l'autore *in quanto recruiter reale* ("che tristezza
        questo post", "ma dove ce l'ha l'azienda sto qua?")
      - difende il post dai dubbiosi citandone il testo
      
      L'indignazione conta come "creduto" quando attacca i fatti del post come veri;
      conta come "colto" quando attacca il *formato* ("altre favole ne abbiamo?" è
      un colto: riconosce la favola).
      
      ### 🤨 Dubbioso
      
      Ha fiutato qualcosa ma non ha (dimostrato di aver) capito che è satira:
      
      - "Non capisco se è un post scherzoso"
      - nota l'incongruenza piantata nel post ("come fa a mettere a posto la sedia
        PRIMA di alzarsi?") ma per il resto lo tratta da post vero ("per il resto
        un bel post")
      - dismissivi secchi: "Mah", "ma per favore...."
      
      ## Regole trasversali
      
      - **Classifica il commento, non la persona.** Una stessa persona può avere
        un commento colto e una risposta non classificabile.
      - Le risposte si classificano nel contesto del thread: una risposta che
        difende il post dai dubbiosi è un creduto anche se presa da sola è neutra.
      - In caso di dubbio vero tra due bucket, scegli quello meno lusinghiero per
        l'analisi (creduto < colto): meglio sottostimare i colti che gonfiarli.
      
      ## Tono (una etichetta per commento)
      
      | Tono | Riconoscibile da |
      |---|---|
      | Ironico di rimando | fa la battuta sopra la battuta, rilancia la parodia |
      | Serio-motivazionale | condivide la morale, aggiunge saggezza aziendale |
      | Correttivo-normativo | corregge il post su procedure, leggi, buone pratiche |
      | Logico-forense | attacca la coerenza interna dei fatti raccontati |
      | Indignato/dismissivo | attacca il post o chi lo commenta, anche solo "Mah" |
      | Aneddotico | racconta un fatto proprio, serio, in risonanza col post |
      | Altro | ciò che resta (applausi, tag, fuori tema) |
      
      ## Categoria autore (dalla headline)
      
      tech (dev, ops, security, data, architect) · sales/BD (vendite, business
      development, export) · HR/recruiting · motivazionale (coach, founder-guru,
      headline con emoji e metodo proprietario) · pagina (satirica o aziendale)
      · altro (legale, docenza, amministrazione, operations...).
      
      L'incrocio interessante è **categoria x esito**: nel test pilota i tech
      hanno colto in massa, sales/BD e motivazionali hanno creduto quasi al 100%,
      gli HR si sono spaccati a metà.
      
      ## Cringe-metro dei commenti
      
      Solo per i commenti **in buona fede** (creduti): si valutano con la scala
      1-10 di `../../linkedin-cringe/references/tassonomia.md` e si annotano i
      moduli riconosciuti dal catalogo `moduli.md` (broetry spontanea, morale
      cosmica su evento minuscolo, gratitudine ostentata, numeri finto-precisi...).
      Il podio dei 2-3 più cringe va nel report, anonimizzato.
      
      Le parodie consapevoli non concorrono al cringe-metro (il loro cringe è
      voluto): si celebrano a parte come "menzione d'onore".
      
    • estrazione.md 8 KB
      # Estrazione dei commenti da LinkedIn
      
      Playbook collaudato (agosto 2026) sulla nuova UI di LinkedIn: classi CSS
      offuscate (`dcc5d0b1 _2aa7769b ...`), lista commenti **virtualizzata** (i
      commenti fuori schermo vengono rimossi dal DOM) e lazy-load che si innesca
      solo con eventi rotella. Non fidarti dei selettori per classe: usa gli
      attributi `componentkey`, che sono stabili e parlanti.
      
      ## A. Browser automation
      
      ### Setup
      
      1. Carica i tool in un solo `ToolSearch`: `tabs_context_mcp`, `navigate`,
         `computer`, `read_page`, `find`, `tabs_create_mcp`, `tabs_close_mcp`,
         `javascript_tool`, `browser_batch`, `list_connected_browsers`,
         `select_browser`.
      2. `list_connected_browsers`: se vuoto, il browser non è collegato; guida
         l'utente (estensione installata, login su claude.ai con lo stesso account,
         riavvio completo di Chrome) e nel frattempo offri il fallback manuale.
         Se ci sono browser, chiedi con AskUserQuestion quale usare (elenca tutti
         + l'opzione di conferma broadcast), poi `select_browser`.
      3. `tabs_context_mcp {createIfEmpty: true}` e naviga all'URL del post.
      
      ### Preparazione pagina
      
      - Chiudi il pannello Messaggistica se aperto (icona freccia in alto a destra
        del pannello): copre la colonna e disturba gli screenshot.
      - **Ordinamento**: `find` "selettore ordinamento commenti", clicca il dropdown
        ("Più pertinenti") e scegli **"Più recenti"**: è l'unico ordinamento che
        mostra tutti i commenti ("Più pertinenti" ne nasconde).
      - Annota il contatore ufficiale ("N commenti"): serve per dichiarare la
        copertura nel report.
      
      ### Raccolta (il cuore del problema)
      
      Concetti chiave, tutti verificati:
      
      - Ogni commento (anche le risposte) vive in un elemento
        `[componentkey^="replaceableComment_urn:li:comment:"]`. L'URN nel
        componentkey è l'**identificatore univoco**: è la chiave di deduplica.
      - La lista è virtualizzata: bisogna **raccogliere durante lo scroll** in un
        accumulatore sulla window, non alla fine.
      - **Solo la rotella vera innesca il lazy-load**: né `scrollTop` via JS né i
        PageDown/End (il focus non è sullo scroller) caricano i batch successivi,
        e il WheelEvent sintetico funziona solo a tratti (probabilmente finché
        dura la user activation di un input reale recente): non farci affidamento.
        Il ciclo affidabile è: **scroll reale col tool `computer`** (azione
        scroll, `scroll_amount: 10`, coordinate sulla colonna dei commenti) +
        harvest via JS dopo ogni giro.
      - **Dopo il cambio di ordinamento la lista si ricarica vuota**: prima di
        iniziare il ciclo aspetta che i primi commenti compaiano nel DOM
        (polla `querySelectorAll(...).length > 0`), altrimenti il ciclo "finisce"
        su una lista vuota.
      - I bottoni "… altro" (testo troncato) e "Vedi risposte precedenti" /
        "Mostra altre risposte" vanno cliccati man mano che compaiono: `click()`
        via JS su di loro funziona normalmente. **Attenzione: non sono sempre
        `<button>`**: in alcune varianti della pagina "Vedi risposte precedenti"
        è un `div[role="button"]`. Seleziona sempre `button, [role="button"]`,
        altrimenti le risposte annidate restano chiuse e ne perdi decine.
        A fine raccolta fai una risalita di verifica su tutta la lista: se il
        conteggio letto è sotto il contatore, quasi sempre mancano risposte
        dietro espansori non cliccati.
      - `javascript_tool` tronca l'output a ~2.500 caratteri e ha un timeout di
        45 secondi: restituisci **solo contatori**, mai il malloppo. Se un batch
        del browser va in timeout ("did not respond in time"), lo stato sulla
        window sopravvive: riprendi da dove eri con lotti più piccoli.
      - Se compare il popup delle reazioni (hover su un pulsante like), cattura la
        rotella: sposta le coordinate di scroll o clicca un punto neutro.
      
      Setup una tantum via `javascript_tool`:
      
      ```js
      window.__scroller = [...document.querySelectorAll('div, main, section')]
        .filter(el => { const s = getComputedStyle(el);
          return (s.overflowY === 'auto' || s.overflowY === 'scroll')
            && el.scrollHeight > el.clientHeight + 200; })
        .sort((a, b) => b.scrollHeight - a.scrollHeight)[0];
      window.__got = window.__got || {};
      ```
      
      Poi il ciclo, in `browser_batch` da 2-3 giri per chiamata (giri più lunghi
      rischiano il timeout): ogni giro è `computer.scroll` (down, 10 tick, sulla
      colonna commenti) + `wait` 2-3s + questo harvest via JS:
      
      ```js
      const got = window.__got;
      const expand = () => [...document.querySelectorAll('button, [role="button"]')].forEach(b => {
        const t = (b.innerText || '').trim();
        if ((/^…\s*altro$/i.test(t) ||
             /vedi risposte precedenti|vedi altre risposte|mostra altre risposte/i.test(t))
            && b.offsetParent !== null) b.click(); });
      expand();
      document.querySelectorAll('[componentkey^="replaceableComment_urn:li:comment:"]')
        .forEach(el => {
          const u = el.getAttribute('componentkey').replace('replaceableComment_','');
          const t = el.innerText;
          if (!got[u] || t.length > got[u].length) got[u] = t; });
      ({c: Object.keys(got).length,
        atBottom: window.__scroller.scrollTop + window.__scroller.clientHeight
                  >= window.__scroller.scrollHeight - 100});
      ```
      
      Ripeti finché il conteggio resta fermo per 2-3 chiamate consecutive con
      `atBottom` vero, poi fai la **verifica finale**: nessun bottone di
      espansione residuo (`expand` non trova nulla) e conteggio stabile.
      Ogni scroll reale restituisce uno screenshot: è il costo del trigger
      affidabile, non aggiungere screenshot espliciti.
      
      Se la raccolta si ferma molto sotto il contatore ufficiale, non insistere
      all'infinito: 10-25% di scarto è normale (commenti cancellati o filtrati);
      dichiara la copertura nel report.
      
      ### Export dei dati
      
      L'output del tool JS è troncato, quindi il malloppo passa dagli appunti:
      
      1. Clicca un punto neutro della pagina (serve il focus del documento, senza
         focus `clipboard.writeText` fallisce con NotAllowedError).
      2. `await navigator.clipboard.writeText(JSON.stringify(window.__got))`
      3. Leggi gli appunti dal sistema e salva **in scratchpad**:
         - Windows: `Get-Clipboard -Raw | Set-Content -Encoding UTF8 <scratchpad>\commenti-raw.json`
         - macOS: `pbpaste > commenti-raw.json` · Linux: `xclip -o -selection clipboard`
      4. Chiudi il tab che hai aperto (`tabs_close_mcp`).
      
      Converti poi il JSON in un file di testo leggibile (un blocco per commento,
      separatore con progressivo e URN) e leggilo con Read: 150 commenti sono
      ~60KB, gestibili in una-due letture.
      
      ## B. Fallback manuale
      
      Chiedi all'utente di:
      
      1. aprire il post e mettere i commenti su "Più recenti";
      2. cliccare tutti i "Carica altri commenti" / "Vedi risposte precedenti" /
         "…altro" finché non ne restano;
      3. selezionare tutto (Ctrl+A), copiare e incollare in chat, **oppure**
         salvare la pagina (Ctrl+S, "solo HTML") e passare il percorso.
      
      Dal testo incollato i blocchi si riconoscono con le stesse regole di parsing
      qui sotto; manca solo l'URN, quindi dedup su (autore, tempo, inizio testo).
      
      ## Parsing dei blocchi
      
      Ogni blocco raccolto ha questa forma (righe vuote variabili):
      
      ```
      Nome Cognome [, Disponibile a lavorare] [Profilo Verificato|Profilo Premium] 2°
      Nome Cognome • 2°            <- riga doppia: il nome compare due volte
      Headline del profilo         <- fonte della categoria
      3h | 1 giorno | (modificato) 1g
      [Segui]
      TESTO DEL COMMENTO           <- può contenere "… altro" residuo a fine riga
      N reazioni | N reazione | 0
      N                            <- eco del numero
      [M                           <- numero risposte, se presenti]
      ```
      
      Attenzioni:
      
      - **Risposte dell'autore del post**: il blocco ha la riga "Autore" al posto
        della headline con pallino, e in coda "N impressioni". Vanno tenute fuori
        dalla classificazione.
      - Le **pagine** (non persone) hanno "N follower" al posto di headline e grado.
      - Un blocco di primo livello può contenere in coda il numero di risposte;
        le risposte sono blocchi a sé con il proprio URN, quindi non sommare due
        volte.
      - Il grado ("1°", "2°", "3°+", "Già segui") e i badge non servono all'analisi
        ma aiutano a distinguere le righe di intestazione dal testo.
      - Reazioni: prendi il numero dalla riga "N reazioni"; se c'è solo "0 " il
        commento non ha reazioni.
      
    • report.md 2.9 KB
      # Struttura del report
      
      File: `analisi/YYYY-MM-DD-<slug>/report.md` nella cartella del progetto.
      Lo slug viene dal tema del post ("sedia", "pasticceria"), non dall'URL.
      
      ## Regole di scrittura
      
      - **Anonimizzazione totale.** Mai nomi, cognomi o aziende dei commentatori.
        Al loro posto la categoria di profilo: "un recruiter", "un dev", "una
        pagina satirica", "un guru del marketing". L'autore del post è l'unico
        nominabile (è l'utente).
      - **Estratti brevi.** Le citazioni dai commenti restano sotto le 15-20 parole,
        tra virgolette, senza attribuzione. Se un commento è riconoscibilissimo
        anche senza nome (pagine famose, testi molto caratteristici), parafrasa
        invece di citare.
      - **Copertura dichiarata** in testa: commenti letti vs contatore LinkedIn,
        con la spiegazione della differenza (cancellati/filtrati).
      - **Percentuali sui classificabili**, con i non classificabili mostrati a
        parte. Niente percentuali con denominatore nascosto.
      - Numeri assoluti accanto a ogni percentuale: "45 su 125 (36%)".
      - Il tono del report può essere divertito (il materiale lo è) ma i dati
        devono essere rigorosi: chi legge deve poter rifare i conti.
      
      ## Sezioni, nell'ordine
      
      1. **Testata**: URL post, data analisi, impressioni (se visibili), contatore
         commenti vs letti, quante risposte dell'autore escluse, totale analizzato.
      2. **Ci hanno creduto?** Tabella dei 4 esiti con conteggi e percentuali, due
         righe di lettura del dato. Includi l'avvertenza sul bias di
         auto-selezione: commenta chi ha voglia di commentare, i creduloni silenti
         non si vedono, quindi la percentuale di creduti è una stima per difetto.
      3. **Top 10 per gradimento**: tabella con reazioni, categoria anonima
         dell'autore, esito, estratto. Pari merito dichiarati, tie-break sul numero
         di risposte generate. Due righe su cosa premia il pubblico.
      4. **Fenomeni ricorrenti**: citazioni e tormentoni (con conteggio), refusi o
         trappole del post notati dai lettori, thread degni di nota.
      5. **Toni**: tabella tono -> quota con un esempio-tipo ciascuno.
      6. **Categoria x esito**: chi ci casca e chi no, per tipo di profilo.
      7. **Cringe-metro**: podio dei 2-3 commenti in buona fede più cringe con
         livello e moduli riconosciuti; menzione d'onore alle parodie consapevoli.
      8. **Note di copertura**: quando è stata fatta la raccolta, post ancora
         attivo o no, limiti noti.
      9. Riga finale: generato dalla skill, commentatori anonimizzati per policy.
      
      ## Consegna in chat
      
      Apri con i 3-4 numeri che l'utente vuole sapere subito (percentuale creduti
      in testa, primo posto della top ten, il fenomeno ricorrente più curioso),
      poi invia il file con SendUserFile. Non incollare tutto il report in chat.
      
      ## Dashboard HTML (opzionale, solo su richiesta)
      
      `dashboard.html` nella stessa cartella: autocontenuta (CSS/JS inline, niente
      CDN, niente richieste esterne), tema chiaro/scuro, grafici semplici (barre
      CSS bastano). Stessi dati e stessa anonimizzazione del markdown: la dashboard
      è una vista, non una fonte.
      
  • SKILL.md 4.6 KB
    ---
    name: linkedin-cringe-analytics
    description: Analizza i commenti di un post LinkedIn (tipicamente un post cringe generato con la skill linkedin-cringe) e produce un report markdown con le statistiche - quanti ci hanno creduto e quanti hanno colto lo scherzo, top ten per gradimento, toni, categorie di commentatori, cringe-metro dei commenti. Usala quando l'utente chiede di analizzare le reazioni o i commenti a un post LinkedIn.
    ---
    
    # LinkedIn Cringe Analytics: analisi dei commenti
    
    Data l'URL di un post LinkedIn, scarica tutti i commenti e produce un **report
    markdown** con le statistiche. È la skill gemella di `linkedin-cringe`: quella
    genera il post, questa misura cosa è successo dopo.
    
    ## Flusso
    
    ### 1. Acquisizione dei commenti
    
    Due strade, in ordine di preferenza:
    
    **A. Browser automation (Claude in Chrome).** Se i tool `mcp__claude-in-chrome__*`
    sono disponibili e un browser è collegato, estrai tutto da solo. La procedura
    completa e collaudata è in `references/estrazione.md`: **leggila prima di iniziare**,
    la UI di LinkedIn ha classi CSS offuscate, liste virtualizzate e lazy-load che si
    innesca solo con eventi rotella, e il playbook risolve tutti e tre i problemi.
    Se il browser non risulta collegato, chiedi all'utente di collegarlo e offri
    subito la strada B come alternativa.
    
    **B. Fallback manuale.** L'utente apre il post, espande tutti i commenti
    ("Carica altri commenti" / "Vedi risposte precedenti" / "…altro"), seleziona
    tutto, copia e incolla in chat, oppure salva la pagina e passa il percorso del
    file. Il parsing a valle è identico.
    
    I dati grezzi (con i nomi veri) vanno **solo nella scratchpad di sessione**,
    mai nel repository.
    
    ### 2. Parsing
    
    Trasforma il raccolto in una lista di commenti strutturati. Il formato dei
    blocchi e le regole (risposte dell'autore, duplicazioni da annidamento, righe
    di conteggio) sono in `references/estrazione.md`, sezione *Parsing*.
    
    Escludi dalla classificazione le risposte dell'autore del post (blocco
    "Autore"): si contano a parte come "botta e risposta" e non inquinano le
    percentuali.
    
    ### 3. Analisi
    
    Per ogni commento assegna, con i criteri di `references/classificazione.md`:
    
    - **Esito**: 😇 ci ha creduto · 🎭 ha colto lo scherzo · 🤨 dubbioso · ⬜ non classificabile
    - **Tono**: ironico di rimando, serio-motivazionale, correttivo-normativo,
      logico-forense, indignato, aneddotico, altro
    - **Categoria autore**: dedotta dalla headline (tech, sales/BD, HR/recruiting,
      motivazionale, altro)
    - **Cringe-metro 1-10**: solo per i commenti scritti in buona fede, usando
      `../linkedin-cringe/references/tassonomia.md` e `moduli.md` (riferimento
      incrociato: se la skill gemella non è installata accanto, salta questa parte
      segnalandolo)
    
    Poi gli aggregati: percentuali per esito (sui classificabili), top ten per
    reazioni, incrocio categoria x esito, distribuzione dei toni, podio del
    cringe involontario, fenomeni ricorrenti (citazioni, tormentoni, refusi del
    post notati dai lettori).
    
    **Il bucket "non classificabile" è obbligatorio e va difeso**: applausi, tag
    secchi e "Grazie per la condivisione" senza altro non sono decidibili, e
    forzarli dentro creduto/colto falserebbe le percentuali. Le percentuali si
    calcolano sui soli classificabili, dichiarandolo.
    
    ### 4. Report
    
    Scrivi il report in `analisi/YYYY-MM-DD-<slug>/report.md` (lo slug viene dal
    tema del post, es. `sedia`). Struttura e regole in `references/report.md`.
    
    Due regole non negoziabili, valide anche in chat:
    
    - **Anonimizzazione totale**: mai nomi o aziende dei commentatori, solo
      categoria di profilo ("un recruiter", "una pagina satirica"). Gli estratti
      di commento si citano brevi e senza attribuzione.
    - **Copertura dichiarata**: sempre "letti X commenti su un contatore di Y".
      Il contatore di LinkedIn include commenti cancellati e filtrati, quindi
      X < Y è normale e va spiegato, non nascosto.
    
    Consegna: mostra in chat i 3-4 numeri chiave (percentuale creduloni in testa),
    poi invia il file. Se l'utente vuole anche la dashboard HTML autocontenuta
    (grafici CSS/JS inline, niente CDN), generala nella stessa cartella come
    `dashboard.html`; è opzionale, il markdown è l'output primario.
    
    ## Paletti
    
    - **Nessun giudizio sulle persone, solo sui commenti.** "Il commento è livello 8
      di cringe", mai "il commentatore è un cretino".
    - I dati grezzi con i nomi restano in scratchpad e non si committano. Nel
      repository entra solo il report anonimizzato.
    - Se l'utente chiede di pubblicare il report, ricordagli una volta che i testi
      citati restano di chi li ha scritti, poi fai quello che chiede.
    - Le risposte private, i profili e i contatti dei commentatori non si toccano:
      questa skill legge un thread pubblico e si ferma lì.
    

Comments (0)

Sign in to join the conversation.

No comments yet.

Reviews (0)

No reviews yet.

Related