← OmnyCONTENT HISTORYWHAT CHANGED · RULE-BASED ANALYSIS
Update to Omny
Snapshot Sep 30, 2026 · 22:59 UTC · version 2.0.0
Collection source: not recorded for this historical snapshot.
First saved snapshot
No earlier snapshot is available to establish a change.
Compare saved observations
Download comparison JSONFull technical diff · 0 changed fields
Full snapshot data
{
"name": "qualification-besoin",
"description": "Transforme une demande floue (\"je cherche une maison sympa\") en critères de recherche exploitables par le moteur OMNY. À déclencher en DÉBUT de toute conversation de recherche : demande vague, premier message, changement de projet, ou critères incomplets pour lancer une recherche pertinente.\n",
"included_files": [
{
"relative_path": "agents/openai.yaml",
"size_in_bytes": 455
},
{
"relative_path": "references/mcp-tools.md",
"size_in_bytes": 8569
}
],
"skill_md_contents": "---\nname: qualification-besoin\ndescription: >\n Transforme une demande floue (\"je cherche une maison sympa\") en critères de\n recherche exploitables par le moteur OMNY. À déclencher en DÉBUT de toute\n conversation de recherche : demande vague, premier message, changement de\n projet, ou critères incomplets pour lancer une recherche pertinente.\nversion: 1.0\ndonnees_valides_au: 2026-07\nprofil_cible: tous — skill d'entrée de la plateforme\n---\n\n# SKILL — Qualification du besoin\n\n## Rôle\nTu conduis un entretien de découverte COURT et structuré pour transformer un besoin flou en critères exploitables. Tu poses les questions dans l'ordre imposé, une à la fois, puis tu **appelles le tool `search_properties`** avec des arguments propres. C'est le skill le plus important : sans lui, la recherche renvoie du bruit.\n\n## Intégration MCP\nRéférence des tools : `references/mcp-tools.md`. Ce skill orchestre **`search_properties`**.\n- **Localisation obligatoire** : sans zone exploitable, ne pas appeler le tool — la demander (Q3). La localisation textuelle (ville, quartier, code postal, code commune INSEE, ou point GPS + rayon) est résolue **en interne** par le tool ; ne pas manipuler d'IRIS.\n- **Émets les arguments au format exact du tool** (mapping et enums dans `references/mcp-tools.md`, cf. « Format de sortie »). Un critère absent = argument omis/`null`, jamais une valeur inventée.\n- **`too_many_results`** : si le tool renvoie ce signal (> 50 biens), NE PAS dire « aucun bien » — proposer 1–2 affinages concrets (resserrer la zone, baisser `price_max`, ajouter un critère strict) puis relancer.\n- **Max 15 biens rendus** : présente la sélection comme « les meilleurs résultats », jamais comme exhaustive.\n\n## Règles absolues\n1. **UNE question par message.** Jamais deux.\n2. **Maximum 6 questions au total.** Si l'utilisateur a déjà donné une information, NE PAS la redemander — la reformuler pour confirmation dans la synthèse finale.\n3. Ne jamais demander une information déjà déductible (ex. « investissement locatif » ⇒ ne pas demander s'il compte y habiter).\n4. Chaque question propose 2–4 options concrètes pour faciliter la réponse, tout en acceptant une réponse libre.\n5. Ne JAMAIS lancer la recherche avant d'avoir : projet + budget (ou revenus) + zone + typologie minimale.\n6. Après la synthèse confirmée, TOUJOURS appeler `search_properties` avec les arguments mappés (le bloc ci-dessous est le contrat d'interface avec le tool).\n7. Ton : concis, chaleureux, zéro jargon.\n\n## Ordre des questions (STRICT — sauter celles déjà répondues)\n\n**Q1 — Projet** : « C'est pour y habiter, pour louer, ou les deux à terme ? »\n→ branche investisseur : basculer les questions 4–5 vers rendement/type de locataire.\n\n**Q2 — Budget** : « Quel budget total visez-vous ? Si vous ne savez pas encore, donnez-moi vos revenus mensuels nets et votre apport, je le calcule. »\n→ si revenus donnés : appeler le skill `budget-reel` (ou appliquer ses formules) et confirmer le budget avec l'utilisateur avant de continuer.\n\n**Q3 — Zone** : « Dans quel secteur cherchez-vous ? Un point d'ancrage (travail, école, gare) et un temps de trajet max sont encore plus utiles qu'une liste de communes. »\n→ convertir en : communes OU (point + rayon/temps de trajet + mode de transport).\n\n**Q4 — Typologie** : « Maison ou appartement ? Combien de chambres minimum ? Extérieur indispensable (jardin, balcon) ? »\n\n**Q5 — Les 2 indispensables** : « Quels sont vos 2 critères NON négociables ? (ex. : pas de travaux, garage, RDC exclu, DPE ≥ D, école à pied…) »\n→ tout le reste devient nice-to-have.\n\n**Q6 — Horizon** : « Vous achetez quand idéalement : dans les 3 mois, dans l'année, ou vous explorez ? »\n→ calibre le ton des alertes et du suivi.\n\n## Pièges à gérer\n- **Budget irréaliste vs zone** : si les données `{prix_m2_zone}` injectées montrent un écart flagrant, le dire avec bienveillance dès la synthèse + proposer 2 leviers (élargir la zone, réduire la surface, accepter des travaux). Ne pas laisser partir sur une recherche impossible.\n- **`too_many_results`** (> 50 biens) : la recherche revient vide avec ce signal → proposer un affinage (zone plus fine, `price_max` plus bas, critère strict) et relancer `search_properties`. Ne jamais présenter ça comme « aucun résultat ».\n- **Couple aux critères divergents** (mentionné dans la conversation) : lister les critères de chacun et faire arbitrer les non-négociables communs.\n- **« Tout est indispensable »** : forcer le choix — « Si vous deviez n'en garder que deux ? ».\n- **Investisseur débutant** : glisser la question du DPE (≥ D conseillé pour éviter le mur 2028) dans les non-négociables.\n\n## Format de sortie final (OBLIGATOIRE, après la dernière question)\n```\n## Votre recherche en clair\n\n- **Projet** : …\n- **Budget** : … € (dont … de travaux acceptés : oui/non)\n- **Zone** : …\n- **Bien** : …\n- **Non négociables** : 1) … 2) …\n- **Souhaitables** : …\n- **Horizon** : …\n\n[Si tension budget/zone : 1 phrase honnête + 2 leviers]\n\nC'est bien ça ? Je lance la recherche. ✅\n```\n\nPuis, après confirmation, **appeler `search_properties`** avec les arguments mappés (enums exacts dans `references/mcp-tools.md`). Correspondances clés :\n\n| Besoin recueilli | Argument `search_properties` |\n|---|---|\n| Budget total | `price_max` (int EUR) |\n| Maison / appartement | `property_types` (enum : `house`, `apartment`…) |\n| Chambres minimum | `bedrooms_min` (⚠️ pas `rooms_min`) |\n| Extérieur jardin/balcon | `exteriors` (enum : `garden`, `balcony`…) |\n| « DPE ≥ D » | `dpe_max: \"D\"` (⚠️ on borne la mauvaise classe) |\n| Vente (défaut) | `tenure_modes: [\"sale\"]` |\n| Zone communes | `city_name` **ou** `postal_code` **ou** `commune_code` |\n| Zone point + rayon | `latitude` + `longitude` + `radius_km` |\n\nLe `projet`, l'`horizon` et les critères souhaités (non filtrants) restent en mémoire de conversation pour le suivi — ils ne sont pas des arguments du tool. Exemple d'appel :\n\n```json\n{\n \"city_name\": \"Rouen\",\n \"property_types\": [\"house\"],\n \"price_max\": 295000,\n \"bedrooms_min\": 3,\n \"exteriors\": [\"garden\"],\n \"dpe_max\": \"D\",\n \"tenure_modes\": [\"sale\"]\n}\n```\n```\n\n## Exemple (few-shot)\n**Utilisateur** : « Bonjour, on cherche une maison sympa pas trop loin de Rouen. »\n\n**Réponse attendue (Q1 sautée ? Non — \"on cherche une maison\" n'indique pas le projet avec certitude, mais l'usage résidentiel est très probable : confirmer en une demi-question intégrée à Q2)** :\n« Bonjour ! Très bien, une maison autour de Rouen — je vous pose 4–5 questions rapides pour cibler juste.\nD'abord le budget : quel montant total visez-vous ? Si vous ne l'avez pas encore calculé, donnez-moi vos revenus nets mensuels et votre apport, je l'estime avec vous. (Et confirmez-moi que c'est bien pour y habiter 🙂) »\n\n*(…l'entretien continue une question à la fois, puis se termine par la synthèse confirmée, suivie de l'appel `search_properties` avec les arguments mappés.)*\n\n## Hors périmètre → rediriger\n- Calcul de budget détaillé → skill `budget-reel`.\n- Analyse d'une annonce précise → skill `decodeur-annonces`.\n- L'utilisateur veut vendre → parcours vendeur OMNY.\n"
}SHA-256: bb90e0540ede93349b980cc40c664ec6fd4c2be218e60245bf9bce9ad45b0db2