Skill: msgnoki/legalfrance (version 1.0.1)

--- name: legalfrance description: "Assistant juridique français RAG sur codes et lois consolidés (LEGI/DILA). Utiliser pour questions de droit français, recherche d'articles, explication de textes législatifs, synthèse juridique avec citations vérifiables." --- # LegalFrance Assistant juridique FR basé sur un retrieval hybride (FTS + vector) avec citations d'articles. ## Première utilisation — initialisation du référentiel Si les index sont absents (`data/chroma_db` ou `data/fts_index.db` manquants), **demander confirmation à l'utilisateur avant d'exécuter** : ```bash python scripts/ingest.py ``` ⚠️ Cette étape télécharge le corpus LEGI (HuggingFace) et le modèle d'embeddings BGE-M3 (~2 Go au total) puis écrit les index sur disque. Durée estimée : 20–40 min selon la connexion. Demander : *"L'initialisation va télécharger ~2 Go de données (corpus juridique + modèle). Confirmer ?"* ## Utilisation Question juridique : ```bash python scripts/one_shot.py "<question>" ``` Mode structuré JSON : ```bash python scripts/one_shot.py "<question>" --json ``` Recherche brute dans les codes : ```bash python scripts/search.py "<requête>" 5 ``` ## Règles de réponse - Citer uniquement les sources retrouvées dans les index - Ne jamais inventer d'article ou de décision - Si sources insuffisantes : le dire explicitement - Format recommandé : Principe → Application → Limites → Sources - Disclaimer obligatoire en fin de réponse (information générale, pas conseil juridique personnalisé) ## Module jurisprudence (optionnel) Le module `search_jurisprudence` (Cour de cassation / Conseil d'État) est optionnel. S'il est absent, le skill fonctionne normalement sur les codes législatifs uniquement.

path: references/answer_template.md
content: # JurisFR — Gabarit de réponse (LLM)

## Format court (grand public)
- **Résumé (1–2 phrases)**
- **Règle(s) applicable(s)** (avec citations)
- **Application / implications pratiques**
- **Limites / exceptions** (si les sources le permettent)
- **Sources utilisées** (liste)
- **Disclaimer**

## Format pro (si demandé)
- Qualification
- Textes applicables
- Conditions / exceptions
- Points de vigilance
- Sources (articles)

## Disclaimer (obligatoire)
> ⚖️ Information juridique à caractère général. Ne constitue pas un conseil juridique personnalisé. Pour une situation spécifique, consultez un professionnel du droit.


path: scripts/one_shot.py
content: #!/usr/bin/env python3
"""JurisFR — one-shot helper.

Goal: produce a ready-to-use SYSTEM + USER prompt (and optionally JSON) for any question.
This script does NOT call an LLM by itself; it prepares the prompt + sources.

Usage:
  python scripts/one_shot.py "<question>"
  python scripts/one_shot.py "<question>" --json
"""

import sys
import json
from pathlib import Path

sys.path.insert(0, str(Path(__file__).resolve().parent))
from ask import build_rag_prompt


def main():
    if len(sys.argv) < 2:
        print("Usage: one_shot.py <question> [--json]")
        raise SystemExit(1)

    args = sys.argv[1:]
    as_json = False
    if "--json" in args:
        as_json = True
        args.remove("--json")

    question = " ".join(args).strip()
    payload = build_rag_prompt(question)

    if as_json:
        print(json.dumps(payload, ensure_ascii=False, indent=2, default=str))
        return

    print("=" * 80)
    print("SYSTEM PROMPT")
    print("=" * 80)
    print(payload["system"].strip())
    print("\n" + "=" * 80)
    print(f"USER PROMPT (sources={payload['sources_count']})")
    print("=" * 80)
    print(payload["user"].strip())


if __name__ == "__main__":
    main()


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)