Un agente su Claude Code che fa retrieval sul mercato del lavoro. Attori Apify orchestrati via MCP per la raccolta, verifica alla board primaria prima del ranking, memoria persistente su file, e una predizione di callback calibrata sul mio base rate osservato. L'invio resta manuale.
Non invia. Il confine è progettato, non è un limite tecnico.
Attori LinkedIn e Indeed, Google Search Scraper per il deanonimizzo. Rendering headless per i CV.
È il sistema con cui ho trovato le posizioni a cui mi sto candidando.
Tutta la letteratura sul job hunting lavora sull'artefatto finale: CV, lettera, personal branding. Assume che il set di candidati in input sia corretto. Nella pratica è rumoroso, stantio e in parte avversariale.
Ripubblicata da board diverse con titoli diversi. Gonfia il conteggio e falsa qualunque stima di affollamento.
Le board non ritirano gli annunci evasi. Una parte del set è composta da posizioni che non esistono più.
Alcuni intermediari nascondono l'azienda e interpongono un proprio matching automatico prima che un umano legga la candidatura.
LinkedIn e Indeed in parallelo, più fetch mirati sulle board aziendali. Ridondanti di proposito.
Ogni record confermato sulla board del committente. Qui muoiono duplicati e ruoli chiusi, prima che ricevano un punteggio.
Requisiti, seniority, RAL, contratto e applicant count forzati in un record confrontabile.
Base rate osservato, corretto per match sui requisiti e per affollamento della posizione.
Rendering headless con page-fitting su una pagina, per le posizioni che superano soglia.
Legge prima dello stadio 04, scrive dopo ogni esito. Le regole derivate dai rifiuti rientrano nello scoring al ciclo successivo. È il motivo per cui il sistema si restringe nel tempo invece di allargarsi.
Ogni riga è un record normalizzato: ruolo, settore, applicant count. Alla soglia tratteggiata avviene la validazione. Gli scarti riportano il motivo, i sopravvissuti si accumulano in shortlist.
Molte career page montano le posizioni via client-side rendering: il markup iniziale è vuoto e le offerte arrivano dopo, da un widget di terze parti. Crawler, motori e aggregatori indicizzano la pagina vuota, quindi per loro quelle posizioni non esistono.
Le altre due tecniche: deanonimizzare l'intermediario cercando una frase letterale dell'annuncio su Google Search Scraper, e non scartare ruoli vivi quando una migrazione di ATS manda in 404 tutti i link storici.
La difficoltà di un agente che opera su orizzonti lunghi non è il reasoning, è la continuità: la finestra di contesto termina. Quindi lo stato vive in un file versionato, con provenienza e data: ogni candidatura col proprio esito, ogni regola con l'incidente che l'ha generata.
Una regola senza l'incidente che l'ha prodotta non si può falsificare, quindi non viene mai ritirata.
Quando un presupposto è risultato falso ho riscritto anche ogni decisione che ci si appoggiava, non solo quella sbagliata.
Un rifiuto in 24 ore ha cambiato quali ruoli il sistema propone. I successi informano quasi zero.
Per ogni posizione il sistema produce una predizione: la probabilità che quella candidatura porti a un contatto. Non un'etichetta qualitativa, un numero. Il prior viene dal mio storico reale di candidature e risposte, poi corretto per aderenza ai requisiti e per affollamento. Un sistema che restituisce 35% quando il base rate onesto è 8% non sta assistendo, sta compiacendo.
Osservato su circa venti candidature. Tutto parte da lì.
Su otto record, tre escono con verdetto negativo. Un ranking che non ordina non è un ranking.
Nessun training set. È un'euristica ancorata a un base rate osservato, e dichiararlo fa parte del design.
| Ruolo | Settore e sede | Applicant | P(callback) | Verdetto |
|---|
È la stessa domanda di un assistente conversazionale che decide quando fare escalation a un operatore, e di un modello documentale che decide cosa non imputare. Tre prodotti, un principio.
Quali attori invocare e la verifica alla board primaria. La normalizzazione. Il ranking, e la dichiarazione di incertezza quando i dati non bastano. La prima stesura del CV. Cosa scrivere in memoria.
Ogni invio è manuale. Se una posizione vale il compromesso che chiede. E il controllo sostanziale: il sistema non produce affermazioni che non posso difendere in colloquio. Quando una regola ha smesso di valere.
I fatti non cambiano. Cambiano gerarchia e lessico: quali cinque anni vengono raccontati per primi, e con il vocabolario di quel settore. Rendering headless, con misurazione dell'altezza per far stare tutto in una pagina.
Progetta prodotti AI andati in produzione: assistenti conversazionali ancorati alle fonti, progettazione dell'incertezza e del passaggio alla persona.
Disegna e spedisce codice: front-end in React come pull request, design system che vivono nel repository invece che in Figma.
Cinque anni su prodotti finanziari e marketplace: percorso investitore, qualificazione, conversione su ticket alti.
Titolo, profilo e competenze in evidenza. Vengono riordinati sui requisiti letti nell'annuncio, non riscritti.
Aziende, ruoli, date e risultati. Il vincolo è nel prompt e nei dati: l'agente può scegliere cosa mettere davanti, non può aggiungere niente.
Rendering headless con adattamento a una pagina sola. Se il contenuto sfora, si taglia dalla coda: mai due pagine.
Il confine non è tecnico, è progettato. L'agente potrebbe inviare, e non lo fa. La persona sta dove l'errore diventa costoso e difficile da rilevare: candidarsi a una posizione sbagliata non produce un messaggio di errore, produce un colloquio che non porta da nessuna parte.
Human-in-the-loop per scelta, non per limite tecnico.
È un sistema conversazionale che guido io, non un job schedulato. Non si sveglia di notte a inviare candidature. Il giudizio su cosa vale il mio tempo, e il controllo su cosa è vero, sono la parte che voglio tenere. Un agente che asseconda sempre è un agente che prima o poi ti fa entrare impreparato in una stanza.