company-report — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited company-report (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Orchestrer la génération d'un rapport société complet à partir d'un input brut (SIRET, SIREN, URL, ou nom), façonné par un cas d'usage (dd, sales, veille, polyvalent) que l'utilisateur sélectionne avant la recherche.
La slash command /report <input> [--usage=X] transmet :
raw_input: "<ce que l'utilisateur a tapé>"
usage_profile: "<dd | sales | veille | polyvalent ou vide>"Règle : la skill DOIT connaître le usage_profile avant tout autre travail.
usage_profile est déjà fourni par la slash command (--usage=X) et appartient à {dd, sales, veille, polyvalent} → l'utiliser directement.AskUserQuestion :Question : « Quel est le cas d'usage de ce rapport ? Cela façonne la profondeur et la priorité des sections. »
Options :
dd — Due diligence / M&A (finances, juridique, écosystème, risques)sales — Prospection commerciale (interlocuteurs, signaux, timing)veille — Veille concurrentielle (positionnement, concurrents, mouvements)polyvalent — Polyvalent (équilibré, 4 angles)Read .claude/skills/company-report/references/usage-profiles.md et extraire pour le profil retenu :sections_prioritaires (ordre de lecture)sections_critiques (confiance bloquante)datapoints_obligatoires_par_agentangles_synthèseSi l'input raw_input est vide, demander d'abord : « Quel SIRET, URL, ou nom de société dois-je analyser ? » puis poursuivre l'étape 0.
Appliquer ces règles dans l'ordre :
| Pattern | Type détecté |
|---|---|
^\d{9}$ | SIREN |
^\d{14}$ | SIRET |
commence par http:// ou https:// | URL |
contient un . et au moins un caractère non numérique avant ou après | URL (sans schéma) |
| sinon | NAME (avertir : « Qualité moindre sans SIREN/URL ») |
Invoquer le sub-agent company-resolver avec :
raw_input: "<input utilisateur>"
detected_type: "<type détecté>"
usage_profile: "<profil retenu>"Attendre sa réponse (bloquant).
Branchement selon `status` :
status: not_found → écrire un mini-rapport « Société non identifiée » listant les sources essayées, puis arrêter. Ne pas dispatcher les autres agents.status: ambiguous → afficher la liste des candidats du champ notes à l'utilisateur, lui demander de préciser via AskUserQuestion, puis arrêter (relancer un /report avec un identifiant précis).status: resolved → continuer à l'étape 3. Si `confidence: low`, prévenir : « ⚠️ Identité résolue avec une confiance faible — le rapport sera produit mais ses sections risquent d'être lacunaires. Continuer ? » Attendre confirmation explicite.RÈGLE CRITIQUE : invoquer les 9 sub-agents en un seul message contenant 9 appels Agent simultanés. C'est ce qui rend la génération rapide.
Les 9 agents à dispatcher :
company-financialscompany-peoplecompany-implantationscompany-marketcompany-historycompany-legal (nouveau)company-press (nouveau)company-clients (nouveau)company-ecosystem (nouveau)Chaque appel passe en prompt le payload du resolver enrichi du profil et de la priorité :
Tu reçois ci-dessous l'identité canonique d'une société résolue, le profil de cas d'usage du rapport, et tes datapoints obligatoires. Produis la section markdown qui te correspond, en respectant strictement le format de sortie défini dans ton agent et en exécutant TOUTES les passes obligatoires pour ce profil.
# Identité canonique (resolver)
<payload YAML du resolver>
# Profil de cas d'usage
usage_profile: <dd|sales|veille|polyvalent>
priority_for_this_agent: <critical|normal|optional>
# Datapoints obligatoires pour ce profil (tu dois les rechercher activement)
extra_datapoints_required:
- "<datapoint 1>"
- "<datapoint 2>"
- ...
# Convention de recoupement
Chaque datapoint chiffré que tu retournes doit être annoté :
- `valeur (recoupé <source1> + <source2>)` si confirmé par ≥2 sources
- `valeur (<source>, source unique)` si une seule source
- `valeur (estimation <source secondaire>)` si déduit d'une source non officielleMappage profil → priorité par agent (à appliquer par la skill) :
| Agent | dd | sales | veille | polyvalent |
|---|---|---|---|---|
company-financials | critical | normal | normal | critical |
company-people | critical | critical | normal | normal |
company-implantations | normal | critical | normal | critical |
company-market | normal | critical | critical | normal |
company-history | critical | optional | normal | normal |
company-legal | critical | normal | normal | normal |
company-press | normal | critical | critical | normal |
company-clients | normal | critical | critical | normal |
company-ecosystem | critical | normal | critical | normal |
Datapoints obligatoires : la skill puise dans references/usage-profiles.md la liste correspondante et envoie à chaque agent ceux qui le concernent.
Gestion d'erreur : si un agent retourne une erreur ou un résultat manifestement vide :
> ⚠️ Section indisponible — <raison> dans le rapportcriticalAvant rédaction, la skill compare les datapoints inter-sections et liste les divergences. Tableau de comparaison à construire :
| Datapoint | Agent A (valeur) | Agent B (valeur) | Divergence |
|---|---|---|---|
| Effectif | people : X | financials : Y | écart > 30 % → flagger |
| Effectif | people : X | implantations : Y (somme par site) | écart > 30 % → flagger |
| CA récent | financials : X | market : Y (mention positionnement) | écart > 10 % → flagger |
| Date de création | resolver : X | history : Y | différence > 6 mois → flagger |
| Dirigeant principal | people : Nom A | history (dernier dirigeant cité) : Nom B | mismatch → flagger |
| Statut juridique | resolver : X | legal : Y | mismatch → flagger (ex. resolver dit "in bonis", legal dit "redressement") |
| Société mère | resolver : X | ecosystem : Y | mismatch → flagger |
| Nombre de magasins | implantations : X | clients (logos clients-magasins) : Y | écart > 30 % → flagger |
Si divergence(s) détectée(s) → remplir la section 10 (Recoupement & divergences) du rapport. Si aucune → écrire « Aucune divergence majeure détectée entre les sections. »
Conditions d'activation du bandeau d'alerte (haut du rapport) :
company-legal ou company-financialscompany-people ou company-history)Lire le template : Read .claude/skills/company-report/references/report-template.md.
5 puces concises, calculées à partir du retour des agents :
people)market, une ligne)press ou history, daté)lowRemplir depuis le payload du resolver enrichi par les sections 3 (financials), 4 (implantations), 5 (legal), et les annotations de recoupement.
Insérer directement les markdowns retournés par les 9 agents (pas de modification, pas de paraphrase). Ordre canonique :
company-peoplecompany-financialscompany-ecosystem (inséré comme sous-section de §3 pour grouper la lecture finance + groupe)company-implantationscompany-legalcompany-marketcompany-clientscompany-historycompany-pressIssue de l'étape 4. Toujours présente, vide si aucune divergence.
Lire le profil dans usage-profiles.md et rédiger les angles correspondants :
Profil `dd` (6 angles) :
Profil `sales` (4 angles) :
Profil `veille` (4 angles) :
Profil `polyvalent` (4 angles originaux) :
Règle de fond : chaque angle DOIT être étayé par ≥3 datapoints chiffrés tirés des sections amont (citer le numéro de section, e.g. « voir §3 : EBITDA 867 K€ »). Pas de prose creuse.
Concaténer toutes les URLs citées par les 9 agents + celles du resolver. Dédupliquer par URL exacte. Regrouper par section d'origine. Format : - [titre court](url) — consulté le YYYY-MM-DD.
Trois sous-sections :
#### 13.1 Lacunes bloquantes (pour le profil) Lacunes qui touchent un datapoint obligatoire du profil retenu. Liste impérative.
#### 13.2 Lacunes par section Concaténer les « Lacunes identifiées » remontées par chaque agent. Regrouper par section.
#### 13.3 Limites méthodologiques Bloc fixe rappelant les limites systémiques (pas d'API tierce, RBE restreint, LinkedIn anti-scraping, etc.). Texte standard depuis le template.
Calculer le slug :
slug = lowercase(canonical_name)
slug = retirer les accents (é→e, à→a, ç→c, etc.)
slug = remplacer tout caractère non [a-z0-9] par "-"
slug = compacter les "-" multiples en un seul
slug = retirer les "-" en début/finChemin final : reports/<YYYY-MM-DD>-<slug>--<usage_profile>.md (date du jour).
Le suffixe --<usage_profile> permet de produire plusieurs rapports différents sur la même société à la même date.
Écrire via Write.
Afficher à l'utilisateur un résumé court (5-8 lignes), adapté au profil :
Profil `dd` :
✓ Rapport généré : reports/<chemin>
• Société : <canonical_name> (SIREN <siren>) — <forme juridique>
• Statut juridique : <in bonis / redressement / etc>
• CA <année> : <chiffre recoupé>
• Procédures en cours : <nombre> (voir §5)
• Filiales identifiées : <nombre>
• Confiance globale : <high|medium|low>
• Alertes : <bandeaux activés s'il y en a>Profil `sales` :
✓ Rapport généré : reports/<chemin>
• Société : <canonical_name>
• Interlocuteur cible : <nom> (<rôle>) — <linkedin si trouvé>
• Signal d'achat le plus récent : <événement daté>
• Taille de deal indicative : <fourchette>
• Email pattern : <pattern détecté>
• Confiance globale : <high|medium|low>Profil `veille` :
✓ Rapport généré : reports/<chemin>
• Société : <canonical_name>
• Positionnement : <une ligne>
• Top 3 concurrents : <noms + CA>
• Mouvement stratégique récent : <événement daté>
• Awards identifiés : <nombre>
• Confiance globale : <high|medium|low>Profil `polyvalent` :
✓ Rapport généré : reports/<chemin>
• Société : <canonical_name> (SIREN <siren>)
• Dirigeant principal : <nom> (<rôle>)
• CA <année> : <chiffre>
• Implantations : <nombre magasins>, <nombre entrepôts>
• Confiance globale : <high|medium|low>
• Sources : <N> URLs citéesmin(confiance_des_sections_critiques_pour_le_profil). La liste des sections critiques est définie par profil dans usage-profiles.md.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.