Job alert config
Skill FynePool/job-hunter-template/.claude/skills/job-alert-config
Personal AI job-search assistant, built as a Claude Skills package on a single GitHub repo. Guided onboarding, persistent profile, multi-source sourcing, fit evaluation, tailored CVs, and application tracking — all version-controlled and inspectable. Ready-to-clone template.
npx -y skills add FynePool/job-hunter-template --skill job-alert-configAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
3 things to look at
- 17 days oldThe repository was created 17 days ago. New is not bad, but a brand new repository carrying a familiar-sounding name is the shape a typosquat arrives in, and there has been no time for anyone else to find a problem with it.
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 3 stars3 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Genera le istruzioni passo-passo per impostare gli alert di lavoro su LinkedIn e Indeed a partire dagli intenti di ricerca del sistema Job Hunter (cartella searches/ nel repo). Usa SEMPRE questa skill quando: l'utente chiede "imposta gli alert", "come configuro gli alert LinkedIn/Indeed", "genera le ricerche salvate", "istruzioni per gli alert"; quando l'onboarding agent-config arriva al passo alert (passo 5); quando l'utente ha appena modificato il search-profile con job-search-profile e gli alert vanno riallineati. Produce istruzioni testuali da eseguire a mano (LinkedIn/Indeed sono dietro login: nessuna configurazione programmatica possibile) E scrive il registro degli alert (searches/alerts-registry.yaml) che rende gli annunci attribuibili alla ricerca giusta a valle.
SKILL.md
9.8 KB, as published. Nobody here has run it
job-alert-config
Modulo 1.2.1 del progetto Job Hunter. Trasforma il search-profile in istruzioni operative per impostare gli alert su LinkedIn e Indeed. L'impostazione resta manuale per l'utente: è una delle tre eccezioni manuali strutturalmente non eliminabili del progetto (servizi terzi dietro login, nessuna API pubblica utilizzabile) — non tentare scorciatoie tipo fetch/automazione delle pagine LinkedIn, non funzionano e non sono previste.
Precondizioni di readiness
Prima di derivare alert, verifica il prerequisito minimo di questa skill: la cartella searches/ contiene almeno un intento con stato: attivo, e quell'intento ha ruoli_target e location_target non vuoti (senza almeno un ruolo e una location non c'è nulla da cui derivare un alert sensato). Se searches/ non contiene alcun intento attivo utilizzabile, l'utente non ha ancora definito le sue ricerche via onboarding: non inventare parametri e non procedere. Fermati e reindirizza ad agent-config con una frase specifica al gap reale, es.: "Per impostarti gli alert mi serve almeno una ricerca attiva con ruoli e location, che non risulta ancora configurata: vuoi che partiamo dall'onboarding per definirla adesso?". (Distinzione importante: se un intento attivo esiste ma è quel singolo intento a essere incompleto, vale la regola già descritta in "Input" — salti quell'intento e lo dici, non fermi l'intero flusso; la guardia qui scatta solo quando NON c'è alcun intento attivo usabile.)
Input
- Leggi la cartella
searches/dal repo:defaults.yaml+ i filesearches/<intent-id>.yaml. Sei in una sessione Claude Code (file locali, nessuntool_search:searches/non è un connettore). Sesearches/non contiene alcun intento: non inventare parametri — spiega che serve prima l'onboarding (agent-config) e fermati. - Deriva gli alert PER INTENTO, solo per gli intenti
attivo(D2). Gli intenti inpausa/archiviatosi saltano (dillo). Per ogni intento, i valori effettivi sono quelli del suo file più idefaultsereditati (l'eventuale bloccooverridedell'intento sostituisce i defaults corrispondenti). - Campi usati per intento:
ruoli_target(titoli + sinonimi),location_target(aree + priorità + remoto/ibrido),seniority,fonti(quali piattaforme sono attive),parametri_esecuzione.finestra_temporale_ore(per la frequenza alert, da defaults/override). - Se in un intento
attivoruoli_targetolocation_targetsono vuoti: salta quell'intento e dillo — un alert senza ruolo o senza location non è configurabile sensatamente.
Derivazione degli alert (algoritmo, applicato per ogni intento attivo)
- Base: una combinazione ruolo × location = un potenziale alert. I
sinonimiNON generano alert separati: entrano nella stessa query con OR dove la piattaforma lo consente (vedireferences/mappa-campi-piattaforme.md), altrimenti si sceglie il solotitolo_principale. - Priorità: ordina per
location_target.priorita(alta prima). Le locationaccetta_remoto: truegenerano anche la variante con filtro "Remoto" attivo dove la piattaforma la gestisce come filtro separato. - Cap dichiarato, applicato PER INTENTO: proponi al massimo ~8-10 alert per piattaforma per ciascun intento. Se le combinazioni di un intento superano il cap, mostra l'elenco completo ordinato per priorità e chiedi dove tagliare — non tagliare in silenzio. Troppi alert = digest rumoroso e email duplicate; il tuning a posteriori è mestiere di
job-alert-tuner(1.2.2). - Fonti disattive: se in
fontidi quell'intento una piattaforma èattiva: false, salta le sue istruzioni e dillo. - URL pre-filtrato + chiave canonica — inversione del flusso: invece di far impostare i filtri a mano (fonte di errori "l'utente ha messo un filtro diverso"), costruisci tu l'URL di ricerca LinkedIn pre-filtrato (
keywords+geoId+ eventualef_E/f_WT) e chiedi all'utente solo di aprirlo, verificarlo e cliccare "Crea avviso". Così la chiave canonica<keywords-slug>:<geoId>è nota PRIMA che l'alert esista → il registro si scrive senza chiedere nulla. La tabellaarea → geoIdè inreferences/mappa-campi-piattaforme.md. Ilricerca_iddell'alert è<intent_id>:linkedin_alert:<keywords-slug>:<geoId>(stessa chiave che la routine ricostruisce dal corpo email — vedijob-watch/SKILL.md, sezione «Attribuzione alert → ricerca», ereferences/alerts-registry.schema.yaml).
Cosa gli alert NON possono fare (dichiaralo sempre all'utente)
Gli alert di LinkedIn/Indeed non applicano: esclusioni di titoli (Head of/Director/...), esclusioni di tipo contratto (stage), filtri di lingua del corpo annuncio, filtri su requisiti linguistici obbligatori. Questi filtri vengono applicati A VALLE dalla routine job-watch, che legge gli alert via Gmail e scarta secondo il search-profile. Dillo esplicitamente nelle istruzioni: l'utente NON deve aspettarsi alert già puliti, deve aspettarsi un digest già pulito.
Vincoli critici di consegna (senza questi la routine è cieca)
Includi SEMPRE, in testa alle istruzioni, questi due punti:
- Consegna via email ATTIVA verso la casella Gmail collegata al sistema: la routine legge gli alert da Gmail (
[email protected],[email protected]). Un alert solo-notifica-app è invisibile al sistema. - Frequenza giornaliera (o la più frequente disponibile): la routine lavora su una finestra di
finestra_temporale_oreore (default 48) — alert settimanali arriverebbero già vecchi.
Output (checklist in chat + registro su file)
Produci una checklist numerata, raggruppata per intento e poi per piattaforma (se ci sono più intenti attivi, intitola ogni blocco con nome/id dell'intento), nello stile:
INTENTO: data-engineering-eu — "Data Engineering in Europa"
LINKEDIN — alert 1 di N
Apri questo link (già pre-filtrato) e clicca "Crea avviso":
https://www.linkedin.com/jobs/search/?keywords=<keywords>&geoId=<geoId>[&f_E=..&f_WT=..]
1. Verifica che i filtri corrispondano (keywords, area, livello, remoto)
2. Clicca "Crea avviso di offerte" per questa ricerca
3. Nelle impostazioni dell'avviso: frequenza Giornaliera, canale Email
(ricerca_id = data-engineering-eu:linkedin_alert:<keywords-slug>:<geoId>)
Scrittura del registro (searches/alerts-registry.yaml): per OGNI alert che
proponi, aggiungi/aggiorna la voce corrispondente nel registro (schema in
references/alerts-registry.schema.yaml) con ricerca_id, intent_id,
keywords, geoId, area, etichetta leggibile, stato: attivo, creato.
Poiché costruisci tu l'URL, keywords+geoId (la chiave) sono noti prima che
l'alert esista: il registro si scrive subito, non serve la conferma dell'utente
per popolarlo (la conferma serve solo a sapere che l'alert è stato creato sulla
piattaforma). Alla riscrittura del profilo (invocazione post job-search-profile):
metti stato: da_rimuovere sulle voci di alert non più coerenti (intento in
pausa/archiviato, ruolo/location rimossi), non cancellarle a mano — è la traccia
che il tuner e l'utente usano per sapere cosa disattivare sulla piattaforma.
Verifica opzionale (deterministica): dopo che l'utente conferma, puoi cercare
su Gmail le mail di conferma-creazione-alert di LinkedIn e controllare che le
chiavi canoniche coincidano con quelle scritte nel registro — intercetta subito
un filtro impostato diverso o un alert saltato.
Le mappature esatte campo-per-campo (nomi dei filtri, sintassi query, mappatura seniority→livelli piattaforma) sono in references/mappa-campi-piattaforme.md: leggilo prima di generare le istruzioni. I nomi dei menu delle piattaforme cambiano nel tempo: se l'utente segnala che un campo indicato non esiste più, adatta l'istruzione al concetto (es. "il filtro che limita per data di pubblicazione") invece di insistere sul nome esatto.
Chiudi SEMPRE con: l'elenco riassuntivo degli alert da creare (per spuntarli), e la richiesta di conferma esplicita "fatto, alert impostati" — è l'interfaccia che agent-config (passo 5) aspetta prima di procedere all'attivazione della routine. Se invece sei stato invocato dopo una modifica del profilo (via job-search-profile), ragiona per intento: riallinea solo gli alert dell'intento toccato (o di tutti, se la modifica era ai defaults), e ricorda di ELIMINARE o aggiornare gli alert vecchi non più coerenti — inclusi TUTTI gli alert di un intento appena messo in pausa/archiviato — non solo aggiungere i nuovi.
Cosa NON fare
- Non tentare di CREARE gli alert al posto dell'utente (LinkedIn/Indeed sono dietro login): l'impostazione resta manuale. Il file che questa skill scrive è il registro (
searches/alerts-registry.yaml), non una config che crea alert: registra alert che l'utente crea a mano. - Non inventare valori mancanti dal profilo (es. seniority assente → ometti il filtro e dillo, non scegliere tu un livello).
- Non promettere che gli alert filtreranno esclusioni/lingue (vedi sopra).
- Non dare per impostati gli alert senza conferma esplicita dell'utente.