ApplyPilot - Ludo
Projet indépendant pour Ludo, basé sur le moteur ApplyPilot. Il trouvera des postes cibles, évaluera les annonces, puis produira des brouillons de candidature personnalisés.
La plateforme est créée mais la recherche reste volontairement désactivée tant que le CV et les critères métier de Ludo ne sont pas configurés.
Ce que l'agent fait
- Genere des recherches ciblees pour LinkedIn, Jobup, Indeed, Google, Reddit et Facebook public.
- Score les annonces selon le role, la localisation, le taux d'activite, la langue et le niveau.
- Lit un profil candidat depuis le chemin configure dans `config/applypilot_search.json`.
- Cree un dossier de candidature avec CV personnalise, lettre de motivation, email et resume d'adequation.
L'agent ne soumet aucune candidature automatiquement. Les drafts doivent etre relus avant envoi.
Utilisation rapide
Le plus simple est de double-cliquer sur `Ludo.command`, ou de lancer :
python3 -m applypilot app
Puis ouvrir `http://127.0.0.1:8766`.
python3 -m applypilot search --limit 40
La commande tente une recherche automatique. Si aucun resultat exploitable n'est retourne, elle produit des URLs de recherche manuelle dans `data/leads/`.
Pour activer la recherche web automatique :
python3 -m pip install -e ".[search]" python3 -m applypilot search --limit 40
Pour creer une candidature depuis une annonce copiee dans un fichier :
python3 -m applypilot draft \ --job-file /path/to/annonce.txt \ --role "Internal Communications Manager" \ --company "Example SA"
Pour une annonce accessible par URL :
python3 -m applypilot draft \ --job-url "https://example.com/job" \ --role "Corporate Communications Manager" \ --company "Example SA"
Les sorties sont creees dans `applications/`.
Generation avec LLM
Par defaut, l'app reste utilisable sans LLM et indique `IA non configuree` dans la barre laterale.
Pour activer la generation IA du CV, de la lettre, de l'email et du resume d'adequation, ajouter une cle OpenAI dans un fichier local non versionne :
cat > .env <<'EOF' OPENAI_API_KEY=sk-... APPLYPILOT_LLM_MODEL=gpt-4o-mini EOF
Puis relancer l'application :
python3 -m applypilot app --no-open --port 8766
Le modele par defaut est `gpt-4o-mini`. Il peut etre remplace avec `APPLYPILOT_LLM_MODEL`. Chaque dossier de candidature contient `generation.md`, qui indique si le LLM a ete utilise ou si l'app a utilise le generateur local. La cle API n'est jamais ecrite dans les dossiers generes.
Base cloud pour synchroniser deux Macs
L'application peut continuer a tourner localement tout en partageant ses donnees via une base Postgres cloud. Utiliser une base Neon, Supabase, Vercel Marketplace Postgres compatible, ou toute base Postgres qui fournit une URL de connexion.
Ajouter l'URL dans `.env` sur chaque Mac :
DATABASE_URL=postgres://USER:PASSWORD@HOST:5432/DATABASE?sslmode=require
Initialiser les tables depuis le premier Mac :
python3 -m applypilot db init python3 -m applypilot db sync-local
Puis relancer l'app :
python3 -m applypilot app --no-open --port 8766
Quand `DATABASE_URL` est configure, les annonces, les jobs marques comme postules, les reglages, le CV de base et les candidatures preparees sont stockes dans la base cloud. Sans `DATABASE_URL`, l'app utilise les fichiers locaux existants.
Deploiement Vercel
Ce projet n'est pas encore déployé. Il devra utiliser son propre projet Vercel et sa propre base PostgreSQL afin de ne jamais mélanger les données de deux candidats.
La recherche LinkedIn connectee reste un flux local, car elle depend d'une session navigateur personnelle. L'interface cloud sert surtout a partager les resultats, les reglages, le CV de base, les statuts de candidature et les dossiers prepares via Postgres.
Critères actuels
Les critères sont dans `config/applypilot_search.json`. Les métiers, lieux, taux d'activité et mots-clés sont encore vides: ils seront renseignés à partir du CV de Ludo et de ses préférences.
Automatisation locale
Le fichier `automation/ch.sovattha.ludo.applypilot.plist` est un modèle LaunchAgent macOS pour lancer une recherche quotidienne. Ne l'activer qu'après avoir validé les critères de Ludo.
Verification
python3 -m unittest discover -s tests