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
Install
npx skills add https://github.com/matteobaccan/LinkedInCringe/tree/main/.claude/skills/linkedin-cringe-analytics
claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install matteobaccan-linkedincringe@llmmart
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.mdemoduli.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.
Reviews (0)
No reviews yet.
No comments yet.