Communitygithub.com

broomva/skills

Inventaire étatique, local d'abord des toxiques ménagers + moteur d'échange. Identifiez les objets de votre maison porteurs de perturbateurs endocriniens et de produits chimiques persistants (BPA/BPS, phtalates, PFAS/PTFE, parabènes, ignifugeants, COV, microplastiques), notez chaque objet selon l'exposition *réelle* (gravité x présence x utilisation x état), et suivez le remplacement vers une alternative plus sûre, de « signalé » à « sourcé » puis « échangé ». Livre un graphe de connaissances fondé et cité d'environ 20 dangers, ~40 classes d'objets et ~40 alternatives. Délégue la recherche d'approvisionnement à la compétence `procurer`. L'état de la compétence est la source de vérité — l'agent est l'application.

Qu'est-ce que skills ?

Ce référentiel définit une compétence d'agent IA (conçue pour Claude Code, Cursor, Codex, etc.) appelée `swapit`, qui transforme une inquiétude vague concernant les toxiques ménagers en un plan concret, priorisé et traçable. Le système est « local d'abord » : l'inventaire des objets d'un foyer réside sur le disque, persiste entre les sessions et ne quitte jamais l'appareil, sauf en cas d'option explicite pour le « commun » (M3). L'utilisateur peut ajouter des objets avec leur état et usage, obtenir un score de risque basé sur l'exposition réelle, recevoir une liste prioritaire de remplacements, suivre chaque remplacement (alternative choisie, statut d'approvisionnement, liste de vérification), et générer un rapport HTML partageable ou un tableau de bord local. La compétence s'appuie sur un graphe de connaissances intégré de dangers, classes d'objets et alternatives, toutes citées auprès d'autorités sanitaires. En mode avancé (M3/M4), elle permet une collaboration anonymisée et un approvisionnement géolocalisé via le « commun », tout en maintenant une stricte barrière de confidentialité : les données d'inventaire privées ne sont jamais partagées.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/broomva/skills/tree/HEAD/skills/commerce/swapit

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

swapit — inventaire des toxiques ménagers + moteur d'échange

Ce qu'est cette compétence

swapit transforme une inquiétude vague ("il y a probablement beaucoup de plastique et de BPA chez moi") en un plan concret, priorisé et traçable. Elle est étatique : votre inventaire ménager vit sur le disque et persiste entre les sessions. Elle est local d'abord : zéro service payant, rien ne quitte votre appareil sauf si vous optez explicitement pour le commun (M3).

Un passage produit :

  1. Un inventaire des objets que vous possédez, chacun étiqueté avec sa classe d'objet générique.
  2. Un score de risque par objet qui reflète l'exposition réelle — une poêle antiadhésive rayée utilisée quotidiennement à haute température est bien plus prioritaire qu'un bac en plastique inutilisé dans le garage.
  3. Une liste "à échanger en priorité" classée — les 5% de changements qui réduisent le plus l'exposition.
  4. Un suivi des échanges — alternative choisie, statut d'approvisionnement, liste de vérification, signets.
  5. Un rapport HTML partageable (et, en M2, un tableau de bord en direct avec swapit serve).

Les trois domaines (et l'invariant de confidentialité)

DomaineCe qu'il contientPartage
1 · Connaissancesdangers → classes d'objets → alternatives (faits génériques, cités)partageable ; mis en cache et (M3) synchronisé avec le commun
2 · Inventairevos objets, pièces, quantités, marques, photos, échanges, signetsPRIVÉ — ne quitte jamais l'appareil
3 · Commun (M3)contributions anonymisées enrichissant le graphe de connaissances partagéoptionnel, révisé, faits génériques uniquement

Invariant de confidentialité (contraignant) : L'inventaire du domaine 2 (objets, pièces, quantités, marques, photos, informations d'achat, emplacement) ne franchit jamais la frontière de synchronisation. Seuls les faits génériques du domaine 1 sont partageables, via une option explicite + un swapit sync --dry-run révisable. Appliqué par un sérialiseur basé sur une liste d'autorisation (scripts/anonymize.py) côté client et un filet de sécurité côté serveur du commun, plus des tests de fuzz affirmant que tout objet d'inventaire réel est rejeté par la barrière. Liste des champs interdits : anonymize.CONTRIBUTION_FORBIDDEN (le sous-ensemble structurel de l'inventaire de state.PRIVATE_FIELDS).

Modèle de données

L'état vit dans ~/.config/swapit/ (remplacez avec $SWAPIT_HOME ; respecte $XDG_CONFIG_HOME).

~/.config/swapit/
├── knowledge/   hazards.jsonl · item-classes.jsonl · alternatives.jsonl · products.jsonl · procurement.jsonl
├── inventory/   events.jsonl (journal d'audit en ajout seul) · items.json · swaps.json · rooms.json · bookmarks.json
├── contributions/ queue.jsonl   (M3)
├── sync/        config.json · sync-log.jsonl   (M3)
└── photos/

Schémas des nœuds (voir seed/*.jsonl pour l'ensemble de données complet et cité) :

  • hazard — id · name · aliases · class · mechanism · exposure_routes · regulatory · severity(0-3) · evidence_strength · sources
  • item_class — id · name · category · description · hazards[]{hazard_id, presence_likelihood, rationale} · detection_hints · sources
  • alternative — id · name · replaces[] · material · rationale · tradeoffs · caveats · avoids_hazards · residual_concerns · sources
  • procurement_option (où acheter, public) — id · alternative · item_class · retailer · region(ISO-3166-1 a2) · area · url · price_min · price_max · currency · as_of · availability · confidence · corroboration_count
  • item (privé) — id · name · item_class · room · quantity · brand · condition · usage{frequency, food_contact, heat, child_contact} · status · notes · photos
  • swap (privé) — id · item_id · chosen_alternative · procurement{status, cost, vendor} · checklist[] · bookmarks[]

Modèle de risque

risk = severity × presence_likelihood × evidence × exposure_relevance × frequency × condition
  • exposure_relevance active la voie d'exposition d'un danger en fonction de la manière dont l'objet est utilisé (contact alimentaire + chaleur maximise un danger par ingestion/contact alimentaire-chaleur ; le contact cutané compte pour les soins personnels ; l'inhalation pour le nettoyage/le mobilier ; le contact avec les enfants amplifie).
  • Score de l'objet = somme pondérée du risque par danger → seuil élevé / moyen / faible.
  • C'est l'intelligence de priorisation — l'analogue du "mode de défaillance dominant" du procureur : corrigez d'abord les quelques objets qui génèrent le plus d'exposition, pas une liste de culpabilité de tout ce qui est en plastique.

Modes

ModeCe qu'il fait
initcréer l'état + charger le graphe de connaissances initial
addajouter un objet ménager (nom, classe, pièce, état, usage) → affiche son évaluation
assessévaluer un objet ou une classe d'objet ad hoc → dangers + risque + alternatives classées
listlister l'inventaire, filtrer par --room/--band/--status/--class/--hazard, trier par risque
swapcréer/mettre à jour un plan d'échange : choisir une alternative, définir le statut, liste de vérification, signet, coût
scorerésumé de l'exposition du foyer + classement des priorités d'échange
reportgénérer le rapport HTML autonome (Catégorie-C)
procurebriefing de passation au procureur + offres d'achat connues pour la cible de l'échange (filtrer par --region) ; enregistrer une offre trouvée (--retailer/--url/--price-*) dans le commun public
knowledgeparcourir/rechercher le graphe de connaissances (list/search/show)
roomslister/ajouter des pièces
selfhealvalider les arêtes du graphe de connaissances + les références d'inventaire + les fondations ; quitter avec un code non nul en cas d'erreur
servetableau de bord local en direct sur http://127.0.0.1:8731 — tableau kanban, liste de vérification, signets, statut ; chaque clic écrit dans l'état
contributemettre en file d'attente un fait anonymisé — product / hazard (item-class→hazard) / alternative / procurement (offre d'achat publique) / item-class (nouveau nœud de taxonomie) ; appliqué localement + filtré pour le commun
syncpousser la file d'attente des contributions + tirer les connaissances de la communauté (optionnel) ; --dry-run prévisualise exactement ce qui serait envoyé ; --configure définit le point de terminaison

Flux typique

swapit init
swapit add --name "Vieille poêle Teflon" --class nonstick-cookware --room kitchen \
           --condition scratched --frequency daily --food-contact --heat
swapit score                      # quoi échanger en premier
swapit swap itm_xxxx --to cast-iron-skillet --status sourcing --add-task "acheter une poêle de 25 cm"
swapit procure itm_xxxx           # -> passer le briefing à la compétence `procurer`
swapit report --open              # HTML partageable

Composition avec d'autres compétences

  • procurer — swapit procure <item> construit le besoin ("remplacer 3 bouteilles en polycarbonate par du verre/de l'acier") et l'invite prête pour le procureur ; le procureur retourne des sources citées + une enveloppe budgétaire.
  • bookkeeping (P6) — une découverte nouvelle et durable concernant un danger/produit (par exemple une classe d'objet nouvellement caractérisée) est classée de manière proactive dans research/entities/ et peut ensuite alimenter le commun.
  • health — contexte d'exposition personnel. content-creation — publications éducatives à partir du graphe.

Discipline de fondation

Les connaissances initiales citent uniquement des organismes faisant autorité (NIEHS, ATSDR/CDC, US EPA, US FDA, ECHA/EU REACH, CA OEHHA Prop 65, WHO, EWG). Chaque enregistrement comporte ≥1 source ; verified: false les marque comme étant de qualité de référence (non fraîchement récupérées) — exécutez un passage sourcé (ou le commun) pour les rafraîchir. selfheal échoue si un nœud perd sa citation. Il s'agit de conseils aux consommateurs fondés sur la science de la santé publique, et non d'un avis médical ou juridique.

Ressources

  • scripts/swapit.py — point d'entrée CLI + gestionnaires de commandes
  • scripts/state.py — couche d'état à deux domaines (PRIVATE_FIELDS définit la frontière de synchronisation)
  • scripts/ops.py — le chemin d'écriture unique de mutation d'état (partagé par CLI et tableau de bord)
  • scripts/knowledge.py — chargement du graphe de connaissances + résolution des arêtes
  • scripts/risk.py — moteur de notation du risque d'exposition
  • scripts/report.py — générateur de rapport HTML autonome (Catégorie-C)
  • scripts/server.py — tableau de bord en direct swapit serve (serveur http.stdlib, localhost uniquement)
  • scripts/anonymize.py — la barrière de confidentialité : constructeurs de faits sur liste d'autorisation + analyse des champs interdits
  • scripts/sync.py — client de synchronisation du commun (file d'attente, prévisualisation --dry-run, push/pull, fusion)
  • scripts/selfheal.py — validateur d'intégrité
  • templates/dashboard.html — le tableau de bord en direct (CSS/JS en ligne, Catégorie-C)
  • commons/ — le serveur de référence du commun en réseau (FastAPI + SQLite ; déploiement filtré)
  • seed/{hazards,item-classes,alternatives}.jsonl — connaissances de démarrage fondées
  • tests/ — tests du risque, des connaissances, de l'auto-réparation, du CLI, de la confidentialité/anonymisation, de la synchronisation, du rapport et du serveur

Collaboration (le commun)

Les contributions sont uniquement des faits génériques — swapit contribute product|hazard|alternative|procurement|item-class construit un fait anonymisé (un mappage public produit→classe d'objet, une correction d'arête de danger, une alternative, une offre d'achat, ou un nouveau nœud de taxonomie), l'applique localement et le met en file d'attente. swapit sync --dry-run montre exactement ce qui serait envoyé ; swapit sync pousse la file d'attente et tire les connaissances de la communauté (optionnel, après --configure). Des faits identiques provenant de différents utilisateurs se corroborent (adressés par contenu) plutôt que de se dupliquer ; le commun sert un fait une fois que deux contributeurs distincts le corroborent (corroboration >= 2) — la modération est filtrée par corroboration, pas par confiance, car confidence est fourni par l'appelant et un seul soumissionnaire pourrait autrement s'auto-approuver. L'invariant de confidentialité est appliqué des deux côtés (barrière anonymize côté client + filet de sécurité côté serveur) — l'inventaire ne franchit jamais la frontière.

Commun d'approvisionnement (achat)

Un fait procurement_option est une offre publique : une alternative plus sûre vendue par un retailer dans une region (ISO-3166-1 alpha-2), avec url optionnel, price_min/price_max + currency + as_of, area et availability. Il est adressé par contenu sur (alternative, retailer, region) — la même offre se corrobore entre utilisateurs ; une région différente est un fait différent (l'axe d'échelle géographique). Prix/url/zone sont des données de marché affinables : une corroboration avec un as_of strictement plus récent rafraîchit le prix vers l'avant, ne régressant jamais les données plus fraîches. La frontière de confidentialité est nette — l'offre publique utilise retailer + price_* et jamais le vendor/cost privé (où vous avez acheté et ce que vous avez payé restent dans le Domaine 2). swapit procure <item> --region <CC> remonte les offres connues et enregistre les nouvelles que vous trouvez — faisant croître un ensemble de données ouvert, détaillé et géo-ciblé que tout le monde peut utiliser.

Feuille de route

  • M1 (livré, 0.1.0) — modèle de données, connaissances initiales, CLI, moteur de risque, rapport HTML statique, auto-réparation.
  • M2 (livré, 0.2.0) — swapit serve : tableau de bord local en direct avec lecture/écriture dans l'état.
  • M3 (0.3.0) — collaboration anonymisée + commun en réseau (commons/, FastAPI + SQLite). Invariant de confidentialité appliqué par sérialisation sur liste d'autorisation + tests de fuzz côté client et serveur.
  • M4 (cette version, 0.4.0) — approvisionnement géo-ciblé + croissance de la taxonomie via le commun : les types de faits procurement_option (où acheter public, indexé par (alternative, retailer, region), rafraîchissement de prix uniquement vers l'avant) et item_class (croissance de la taxonomie filtrée par corroboration) ; procure remonte et enregistre les offres ; offres initiales couvrant US/CO/DE/GB ; parité de hachage inter-langues verrouillée par des vecteurs épinglés. Le déploiement en direct sur l'infrastructure broomva.tech est conditionné à un accord explicite (identifiants/DNS) ; la compétence est entièrement fonctionnelle hors ligne sans cela.

Individual skills in this repo

This repo contains 7 individual skills — each has its own dedicated page.

broomva/skills

Local TTS, voice cloning, voice design, and video dubbing via the OmniVoice Studio MCP server (open-source ElevenLabs alternative; nothing leaves the machine, runs on MPS/CUDA/CPU). Use when: (1) generating speech from text in any of 646 languages, (2) cloning a voice from a 3-second reference clip, (3) designing a voice by gender/age/accent/pitch/style, (4) dubbing a video into another language, (5) listing voice profiles or personality presets, (6) producing narration where privacy, cost, or absent API keys matter, (7) non-English narration where Edge TTS/kokoro fall short, (8) batch audio for blog posts or content pipelines. Triggers: 'omnivoice', 'voice clone', 'clone this voice', 'tts', 'narrate', 'generate speech', 'voice synthesis', 'dub video', 'voice design', 'local tts', 'multilingual voice', 'narrate this post', 'elevenlabs alternative'.

broomva/skills

>- Speak an explanation out loud while working in any project — tiered text-to-speech with a pluggable backend (ElevenLabs by default and quota-guarded, macOS `say` via `--fast` for free instant local speech, local OmniVoice as an unlimited private tier). Markdown-aware, so code fences, URLs and deep paths collapse to short spoken placeholders instead of being dictated character by character, while snake_case identifiers survive intact so the listener can still search for them. Every utterance is saved to disk for later replay. Also carries a **talk mode** toggle: turn it on and the agent speaks a full readback of every turn, for as long as that session lasts — the whole response, not a summary of it, with `brief` and `marker` levels for when you want less. Talk mode is off by default and scoped to the single session that enabled it, so parallel agents in other worktrees stay silent. Use when the user asks to hear something rather than read it — an explanation of a change, a walkthrough of what just happen...

broomva/skills

Shop Tiendas D1 (Colombia, d1.com.co) from the command line — search the catalogue, resolve your nearest physical store, price a basket against that store's real stock, and quote delivery. D1 runs VTEX IO (account `d1tiendas`), so this drives its public storefront API with no admin key at all — catalogue and cart work fully anonymously, and a one-time emailed code unlocks order history. Handles the two traps that make naive D1 automation wrong — availability is regionalized (an unregioned query reports a national catalogue nobody can actually buy from) and prices arrive in two different units (search reports whole pesos, checkout reports hundredths, a silent 100x). Builds and prices baskets; it deliberately cannot pay, handing a checkout URL to a human instead. USE WHEN the user wants to find D1 products or prices, check whether D1 delivers somewhere, build or cost a D1 grocery basket, compare D1 items, or review their D1 orders. NOT FOR other Colombian retailers (Éxito, Jumbo, Ara, Alkosto), and not for c...

broomva/skills

Tekton — the shared architecture-intent substrate for co-designing systems with the agent. One typed graph across six tiers (system / journey / data / infra / decisions / qualities); views are queries, not separate diagrams. The canonical artifact is a diff-friendly YAML model both human and agent read and write; it renders to Mermaid (agent-legible, GitHub-native) and a self-contained tabbed HTML viewer (human-visual). Cross-tier traceability (`tekton query <from> <to>`) answers "which infra does this user-journey step touch?" as a path query. USE WHEN: designing or thinking deeply about architecture, a system, a data model, user journeys/flows, or a technical plan WITH the agent; when a Category-C HTML doc isn't enough because you need to see AND edit AND traverse the design across tiers; "let's design X", "architect this", "model the system", "draw the flow", "how does this fit together", "diagram this", "/tekton". NOT FOR: a one-off throwaway diagram (use Mermaid inline); prose-only ADRs (write the ADR...

broomva/skills

Generate a polished Remotion video and X thread showcasing the full agent skills inventory. Use when creating social media content about skills, rendering category-based skill visualizations, or producing animated showcases of agent capabilities. Triggers on "skills video", "showcase skills", "skills thread", "render skills", "social content for skills", or requests to visualize the skills inventory.

broomva/skills

OpenCaptions extension for Content Engine — adds intent-driven CWI (Caption With Intent) captions to the post-production pipeline. Hooks into the grade → caption → final stage. Generates captions that understand video intent (pitch, volume, emotion, emphasis) and style themselves accordingly with variable font weight, size, and color. Uses the OpenCaptions CLI or MCP server. Triggers on: 'add captions', 'opencaptions', 'CWI captions', 'intent captions'.

broomva/skills

Produce polished product launch videos using the Liquid Glass aesthetic — dark void backgrounds, 3D perspective floating UI panels, particle effects, spring animations, and cinematic pacing. Built on Remotion with Imagen 4.0 for frames and Veo 3.1 for B-roll. Use when: (1) creating a product demo or launch video, (2) showcasing a UI/app/tool with cinematic polish, (3) building a social-ready video from screenshots and renders, (4) applying the liquid glass floating panel style, (5) composing Remotion videos with 3D transforms and spring animations. Triggers on: 'launch video', 'product video', 'liquid glass video', 'demo video', 'showcase video', 'remotion video', 'floating panel', 'glass aesthetic'.

Skills associés