Communitygithub.com

Orinkle/ideaform

Skill de configuration unique pour le workflow vidéo constructiviste. À utiliser lors de la première exécution après téléchargement du projet.

Qu'est-ce que ideaform ?

Cette skill configure automatiquement l'environnement de développement pour un workflow vidéo constructiviste. Elle commence par une phase de détection en lecture seule pour localiser les outils (Node, Python, ffmpeg, Remotion, LMMS, polices chinoises), puis installe les éléments manquants. Elle génère un fichier de contrat "toolchain.json" contenant les chemins absolus, et moissonne les skills existantes depuis la communauté (via harvest-skills.py). Enfin, elle réalise un test de fumée de bout en bout (synthèse vocale, rendu vidéo, audio, montage) et propose à l'utilisateur de désactiver, archiver ou supprimer la skill après usage. L'objectif est de ne l'exécuter qu'une seule fois, puis de laisser la place aux skills de workflow qui exploitent le contrat produit.

Compatible avec✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Orinkle/ideaform/tree/HEAD/skills/ideaform-setup

Demander à votre IA préférée

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

Documentation

Skill de configuration d'environnement (unique)

Objectif : déterminer exactement où se trouvent les outils sur cette machine, rédiger un contrat de chemins, puis disparaître.

Le cycle de vie de cette skill est "utiliser et jeter". Ne la laissez pas résidente – à la fin, suivez impérativement la procédure de confirmation §7.


0. Trois règles strictes (à lire d'abord)

  1. Phase de détection en lecture seule. scripts/detect.py ne crée/modifie/supprime jamais de fichiers système. Il utilise uniquement which / stat / requêtes de version / listage de répertoires. Toute écriture doit se produire dans install.sh en §4, et être enregistrée ligne par ligne dans un manifeste.
  2. N'écrivez jamais sur le disque utilisateur. Ne touchez pas à /mnt/c, /mnt/d, ni aux disques Windows. Tous les fichiers de sortie et temporaires se situent dans l'espace de travail actuel ou ~/.config/ideaform/.
  3. N'essayez pas sudo. Les processus dans le bac à sable n'auront jamais les droits root (NoNewPrivs=1 du noyau), c'est une perte de temps. Les tâches nécessitant root sont confiées à l'utilisateur qui les exécutera dans son propre terminal, avec des commandes précises fournies. Tous les outils de ce projet sont conçus pour une installation au niveau utilisateur (extraction AppImage, installation dans venv, polices locales), sans root.

1. Fichier de contrat (la seule sortie externe de cette skill)

Emplacement (fixe, tiers, en dehors des deux skills) :

$VW_CONFIG_ROOT/toolchain.json          # par défaut ~/.config/ideaform/
$VW_CONFIG_ROOT/env.sh                  # script exportable directement sourceable par le shell
$VW_CONFIG_ROOT/install-manifest.jsonl   # ce qui a été installé, pour rollback
$VW_CONFIG_ROOT/logs/
$VW_CONFIG_ROOT/backup/                 # sauvegardes des fichiers originaux avant toute conservation

$VW_CONFIG_ROOT par défaut ~/.config/ideaform, peut être écrasé par une variable d'environnement. Le fichier de contrat est placé en dehors du répertoire de la skill par conception – ainsi, même après suppression de cette skill, les skills de workflow peuvent toujours le lire.

Champs de schema_version 1 (les skills de workflow lisent ces clés) :

{
  "schema_version": 1,
  "generated_at": "ISO8601",
  "generated_by": "[email protected]",
  "verified_at": "ISO8601 | null",       // tamponné après succès du test de fumée
  "host": { "os": "linux", "distro": "...", "arch": "x86_64", "in_wsl": true },
  "config_root": "/abs/path",
  "tmpdir": "/abs/path/to/big/disk/tmp", // ★ doit pointer vers un grand disque, pas /tmp de 10 Mo
  "tools": {
    "node":     { "path": "/abs", "version": "22.x", "status": "ok|missing|degraded" },
    "python":   { "path": "/abs", "version": "3.13.x", "status": "..." },
    "venv":     { "path": "/abs", "python": "/abs/bin/python", "pip": "/abs/bin/pip" },
    "ffmpeg":   { "path": "/abs", "version": "...", "flavor": "full|remotion-minimal", "status": "..." },
    "ffprobe":  { "path": "/abs", "status": "..." },
    "remotion": { "project": "/abs", "version": "4.x", "status": "..." },
    "lmms":     { "apprun": "/abs", "root": "/abs", "version": "1.2.2",
                  "stkdir": "/abs", "status": "..." },
    "fonts":    { "cjk_families": ["Noto Sans CJK SC"], "status": "..." }
  },
  "env_file": "/abs/env.sh",
  "manifest": "/abs/install-manifest.jsonl"
}

Au démarrage, la skill de workflow vérifie schema_version et verified_at : version non conforme → demande de relancer cette skill ; verified_at null → avertissement "Non validé par le test de fumée".


2. Ordre d'exécution (à suivre, ne pas sauter)

Étape 1 · Détection en lecture seule

python3 skills/ideaform-setup/scripts/detect.py            # rapport lisible par un humain
python3 skills/ideaform-setup/scripts/detect.py --json     # lisible par une machine

Vérifiez chaque entrée par rapport à references/toolchain-matrix.md. Chaque élément a un état : ok / missing / degraded (présent mais incomplet, par ex. ffmpeg version Remotion minimal).

Étape 2 · Présenter le plan, demander à l'utilisateur

Organisez les résultats de la détection en un tableau à montrer à l'utilisateur : ce qui est ok, ce qui manque, ce qui est dégradé, et pour chaque élément manquant, comment on compte l'installer, où, et l'espace disque requis. Attendez la confirmation de l'utilisateur avant d'agir. N'installez rien de votre propre chef.

Étape 3 · Installation (seulement après confirmation utilisateur)

bash skills/ideaform-setup/scripts/install.sh --only <tool1,tool2>

Sans --only, installe tous les éléments manquants. Le script :

  • Sauvegarde les fichiers existants qui seront écrasés dans $VW_CONFIG_ROOT/backup/<timestamp>/
  • Ajoute une entrée dans install-manifest.jsonl après chaque étape
  • Installe tout dans des chemins utilisateur, sans besoin de root

Si un élément nécessite root (très rare), le script s'arrête et imprime la commande à transmettre à l'utilisateur pour exécution dans son terminal.

Étape 4 · Écrire le contrat

python3 skills/ideaform-setup/scripts/detect.py --write

Résultat dans toolchain.json + env.sh. À ce stade, verified_at est toujours null.

Étape 5 · Moissonnage des skills communautaires (récupération)

Une fois le contrat écrit, les outils présents dans la chaîne sont déterminés. Ne vous précipitez pas à utiliser vos propres connaissances limitées, récupérez d'abord les skills matures de la communauté qui ont déjà rencontré les problèmes :

python3 skills/ideaform-setup/scripts/harvest-skills.py --from-contract            # moissonne outil par outil
python3 skills/ideaform-setup/scripts/harvest-skills.py --from-contract --dry-run  # prévisualisation des candidats

Pour chaque outil, le script : recherche GitHub filename:SKILL.md → note selon stars/licence/actualité → scan de sécurité (les correspondances de motifs dangereux vont dans _quarantine/ et on passe au candidat suivant) → écrit dans ~/.workbuddy/skills/<name>/ (avec _PROVENANCE.md de provenance) → enregistre dans le manifeste.

  • Aucun candidat valable = ce tool nécessite vraiment d'écrire sa propre skill – c'est la raison d'être de ce dépôt skills/ideaform*.
  • Les skills déposées vous appartiennent pour évolution. Le script a une protection de fork (_harvest.json avec hash par fichier) : les modifications locales ne sont pas écrasées par défaut, --force ne met à jour que ce qui n'a pas été modifié, les nouvelles versions forkées vont dans _upstream/ pour fusion manuelle. Voir references/skill-harvest.md §4.1.
  • Protocole complet (critères de notation / motifs de sécurité / limites) voir references/skill-harvest.md.

Cette étape n'appartient pas seulement à la configuration initiale. Lors de l'introduction future de tout nouvel outil open source en production (par exemple pour dessiner des structures chimiques, penser à RDKit), la première chose à faire est harvest-skills.py rdkit – moissonner d'abord, agir ensuite.

Étape 6 · Test de fumée de bout en bout (obligatoire, ne pas sauter)

python3 skills/ideaform-setup/scripts/verify.py

Exécute vraiment le cycle minimal complet, les quatre éléments doivent réussir pour tamponner :

★ Critère d'acceptation : après cette étape, relancez une fois sans aucune variable d'environnement : env -u TMPDIR -u VW_TMPDIR -u VW_CHROME python3 scripts/verify.py Si tout passe encore, le contrat est vraiment autonome (chemins des outils, TMPDIR, chrome lus depuis le contrat). Un succès uniquement grâce à un export manuel = contrat incomplet, la skill de workflow échouera sur une autre machine.

VérificationFaitCritère de réussite
① TTSSynthétiser une phrase en chinoisAudio produit > 2 Ko et RMS > seuil
② ImageRemotion rend 1 frame stillPNG de taille correcte, fichier > 20 Ko
③ AudioLMMS rend un projet de 1 secondePic WAV > 1000 et non silencieux
④ Montageffmpeg fusionne vidéo silencieuse + piste audioDébit audio de sortie > 64000 bps

Tout réussi → verified_at est tamponné dans toolchain.json. Un échec → arrêtez-vous et rapportez quel élément et pourquoi, corrigez puis relancez. Ne tamponnez pas.

Étape 7 · Confirmation de fin + nettoyage

Voir §7.


3. Comment trouver chaque outil (résumé)

Tableau complet dans references/toolchain-matrix.md. Points clés :

  • Node / Python : privilégier les chemins des versions hébergées localement (~/.workbuddy/binaries/...), puis PATH.
  • ffmpeg / ffprobe : généralement absent du système. Remotion embarque une version réduite (node_modules/@remotion/compositor-linux-x64-gnu/ffmpeg) – suffisante, mais moins de filtres (pas de volumedetect / acompressor, loudnorm avec latence). Si trouvé, marquer degraded plutôt que missing, et préciser flavor dans le contrat.
  • Projet Remotion : privilégier $VW_REMOTION_PROJECT, puis chercher ~/tools/remotion-app, puis scanner l'espace de travail pour remotion.config.ts, sinon utiliser le modèle fourni par cette skill assets/templates/remotion-starter/.
  • LMMS : chercher squashfs-root/AppRun (point d'entrée après extraction AppImage). Note : stkdir dans ~/.lmmsrc.xml doit pointer vers rawwaves/ du répertoire extrait, sinon silence total sans message d'erreur – c'est le piège le plus coûteux de ce workflow, verify.py ③ est là pour ça.
  • Polices chinoises : fc-list chercher Noto Sans CJK SC etc. Si manquantes, installer au niveau utilisateur dans ~/.local/share/fonts/.

4. Emplacements d'installation

OutilEmplacementMoyen
Node / PythonUniquement si manquantUtiliser d'abord les versions hébergées de la machine ; sinon inviter l'utilisateur
edge-tts / soundfile / numpyvenv<venv>/bin/pip install, doit export TMPDIR=<grand disque>
ffmpeg complet~/.local/bin/Télécharger archive statique depuis un miroir, extraire, aucun root nécessaire (optionnel, version réduite suffisante pas besoin d'installer)
LMMS$VW_CONFIG_ROOT/lmms/Télécharger AppImage via proxy → --appimage-extract extraire
Dépendances RemotionRépertoire du projetnpm install, TMPDIR pointé vers grand disque
Polices chinoises~/.local/share/fonts/Extraire .ttc → fc-cache -f

⚠️ Chaque téléchargement doit être vérifié : taille / SHA256 / possibilité d'exécution après extraction. En cas d'échec, réessayer plutôt que de laisser un fichier incomplet.


5. Retour arrière

install-manifest.jsonl est la seule source de vérité, format :

{ "entries": [
  { "ts": "...", "kind": "pip-install", "target": "<venv>", "detail": "edge-tts==7.3.1",
    "undo": "<venv>/bin/pip uninstall -y edge-tts" },
  { "ts": "...", "kind": "mkdir", "target": "$VW_CONFIG_ROOT/lmms", "undo": "rm -rf ..." },
  { "ts": "...", "kind": "backup-file", "target": "~/.lmmsrc.xml",
    "backup": "$VW_CONFIG_ROOT/backup/<ts>/lmmsrc.xml", "undo": "cp backup à l'emplacement d'origine" }
] }
bash skills/ideaform-setup/scripts/rollback.sh --list      # voir ce qui sera annulé
bash skills/ideaform-setup/scripts/rollback.sh --dry-run   # simulation, ne touche pas
bash skills/ideaform-setup/scripts/rollback.sh --yes       # vrai rollback (ordre inverse)

Sauvegarder avant d'écraser un fichier existant de l'utilisateur – surtout ~/.lmmsrc.xml. Par défaut, le rollback ne supprime pas le fichier de contrat (utilisé par la skill de workflow), sauf demande explicite --purge-contract.


7. ★ Fin : désactiver / archiver / supprimer (l'utilisateur doit choisir)

Après succès du test de fumée, ne vous supprimez pas automatiquement. Suivez cette procédure :

① Rapportez d'abord

Dites à l'utilisateur :

  • L'environnement est configuré, toolchain.json est prêt (donner le chemin)
  • Résultats des quatre tests de fumée
  • La skill de workflow n'a pas besoin de cette skill pour fonctionner (car le contrat est en dehors de la skill)

② Présentez trois options, laissez l'utilisateur choisir

OptionFaitRéversibilitéApplicable
A. Désactiver (recommandé)Mettre disable: false à true dans le frontmatter de ce SKILL.mdRemettre à false pour restaurerPour garder la possibilité de relancer sur une autre machine/environnement
B. ArchiverDéplacer tout le répertoire skill dans $VW_CONFIG_ROOT/archive/ideaform-setup-<ts>/Remettre en place pour restaurerNe pas vouloir qu'il apparaisse dans la liste des skills, mais le garder en réserve
C. SupprimerSupprimer vraiment le répertoireRestaurer via la sauvegarde automatiqueCertain de ne plus en avoir besoin

Recommandation A : Désactiver est le plus sûr, le moins coûteux, et garde la capacité de "relancer si l'environnement change".

③ Règle absolue avant d'agir

Quelle que soit l'option, sauvegarder d'abord, agir ensuite, puis confirmer :

  1. Sauvegarde : cp -r <répertoire skill> $VW_CONFIG_ROOT/backup/skill-ideaform-setup-<ts>/
  2. Liste : listez chaque chemin qui sera supprimé/modifié pour l'utilisateur
  3. Double confirmation : attendez que l'utilisateur dise explicitement "supprime" ou équivalent, n'utilisez pas de valeur par défaut ou d'inférence
  4. Exécution : supprimez avec mv vers la sauvegarde, pas directement rm -rf
  5. Vérification : confirmez que la skill de workflow peut toujours lire toolchain.json et démarrer correctement

④ Auto-test après suppression

test -f "$VW_CONFIG_ROOT/toolchain.json" && echo "Contrat toujours présent ✓"

Contrat présent → le workflow n'est pas affecté. Contrat perdu → suppression erronée, restaurer avec la sauvegarde.

Quand l'utilisateur demande "je peux supprimer directement ?", répondez en présentant les trois options et expliquez les compromis, ne répondez pas juste "oui".


8. Erreurs courantes

PhénomèneCause réelleTraitement
Rendu LMMS silencieux, aucun message d'erreur dans les logsstkdir dans ~/.lmmsrc.xml ne pointe pas vers rawwaves/ du répertoire extraitModifier stkdir, puis relancer verify.py ③ pour revérifier
npm install / pip install renvoie ENOSPCTMPDIR pointé vers /tmp tmpfs de 10 Moexport TMPDIR=<grand disque>, le tmpdir du contrat sert à cela
Rendu Remotion timeout / blocage en cours de routeConcurrence trop élevée faisant exploser la mémoire (4 pages 1080p)Réduire --concurrency, segmenter les longues vidéos
AppImage ne se lance pasBac à sable sans /dev/fuseExtraire avec --appimage-extract puis utiliser AppRun
LMMS refuse de démarrerid dans le bac à sable affiche rootAjouter --allowroot
edge-tts renvoie WSServerHandshakeError 403Version trop ancienne (pas un problème réseau)pip install --upgrade edge-tts, puis recalibrer l'horloge système

Plus dans docs/05-故障排查.md (en chinois).


9. Transmission à qui

Une fois la configuration terminée, la prochaine étape est la skill de workflow :

skills/ideaform/SKILL.md

Elle lira d'abord le toolchain.json produit par cette skill. Message de transmission :

L'environnement est configuré et validé, le contrat se trouve à <chemin>. Passez maintenant à la skill de workflow pour la production.

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

Skills associés