Raw version

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

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

/var/task/README.md