wboudiche/linshare

Partagez des documents via LinShare : envoyez des fichiers par e-mail (en interne ou en externe), listez ou révoquez les partages, téléchargez les fichiers reçus, demandez des fichiers à des personnes, et travaillez avec des groupes de travail et espaces partagés.

Qu'est-ce que linshare ?

Cette compétence permet à un agent IA d'interagir avec un serveur LinShare (version 6.5 ou ultérieure) via l'outil en ligne de commande `linshare`. L'agent peut partager des fichiers en toute sécurité par e-mail avec des destinataires internes ou externes, lister et révoquer des partages, télécharger des fichiers reçus, envoyer des demandes de fichiers, et gérer des espaces de travail collaboratifs (groupes de travail et espaces de travail). Elle met l'accent sur la sécurité : le login est toujours effectué par l'utilisateur, jamais par l'agent, et toute action destructive ou d'envoi nécessite une confirmation explicite après un `--dry-run`. La compétence prend en charge toutes les commandes principales de `linshare`, avec des vérifications d'état (via `whoami`) avant la première utilisation de la conversation, et une gestion robuste des erreurs (propagation des messages d'erreur, gestion des timeouts). Un guide détaillé est fourni pour les flux typiques, y compris le traitement des gros fichiers et les particularités des espaces partagés.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/wboudiche/linshare-skill/tree/HEAD/skills/linshare

Installed? Explore more Productivité et collaboration skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

Demander à votre IA préférée

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

Documentation

Que fait linshare ?

linshare est un outil en ligne de commande pour un serveur LinShare (version 6.5 ou ultérieure). Utilisez-le pour partager les documents de l'utilisateur en toute sécurité.

D'abord, vérifiez la configuration

Avant la première commande LinShare d'une conversation, exécutez linshare --json whoami :

  • commande introuvable (exit 127) : la commande linshare n'est pas installée. Dites à l'utilisateur, en termes simples, que cette compétence en a besoin et qu'il peut l'installer lui-même avec pip install "git+https://github.com/wboudiche/linshare-cli#subdirectory=agent-harness" (Python 3.10+). Ne l'installez pas vous-même.
  • exit 2 ("code": "auth") : pas connecté. Demandez à l'utilisateur de taper, dans ce chat, ! linshare login --server <adresse de son LinShare> (demandez l'adresse si vous ne la connaissez pas) — il tape son mot de passe ici, jamais dans la conversation. Avec SSO : ! linshare login --token --server <adresse>, en collant un jeton depuis l'interface web.
  • exit 0 : cela affiche le serveur et le compte ; poursuivez la demande.

Règles — suivez-les à chaque fois

  1. Passez toujours --json juste après linshare (linshare --json shares list) et lisez le JSON.
  2. La connexion est effectuée par l'utilisateur, jamais par vous. Si une commande échoue avec le code de sortie 2 ("code": "auth"), demandez à l'utilisateur de taper ! linshare login lui-même (! linshare login --token s'il se connecte avec SSO et dispose d'un jeton depuis l'interface web). Ne demandez jamais et ne tapez jamais son mot de passe.
  3. Obtenez un « oui » explicite avant que quoi que ce soit ne quitte le compte ou ne soit détruit. Cela concerne share, request-files, shares revoke, documents delete, requests close, et pour les espaces partagés spaces upload, spaces add-member, spaces set-role, spaces remove-member, spaces delete-files, spaces delete.
    • Pour share et request-files : exécutez la même commande avec --dry-run d'abord, puis montrez à l'utilisateur, en termes simples : les fichiers (nom et taille), chaque destinataire — en marquant ceux avec "external": true comme en dehors de votre organisation — la date d'expiration, le sujet, le message, si un lien protégé par mot de passe est utilisé, et downloadAlert / copyToMe (ce que le serveur fera réellement : les paramètres de l'administrateur peuvent remplacer le choix de l'utilisateur ; dites-le lorsque detail le dit).
    • Pour revoke, delete, close : listez d'abord, puis montrez exactement quels éléments seront affectés.
    • Pour spaces upload et spaces add-member : exécutez avec --dry-run d'abord. Pour un téléchargement, montrez les fichiers, le groupe de travail (et le dossier) et visibleTo — tous les membres le verront (si visibleTo est nul, dites que les membres n'ont pas pu être listés). Pour un nouveau membre, montrez la personne (nom et e-mail), l'espace et le rôle, en termes simples (READER : lecture seule, CONTRIBUTOR : peut ajouter, WRITER : peut ajouter et modifier, ADMIN : gère également les membres).
    • spaces delete supprime l'espace et tous ses fichiers pour chaque membre ; spaces delete-files les supprime également pour tout le monde. Dites-le, en nommant l'espace et les éléments.
    • Utilisez uniquement les mots donnés par l'utilisateur pour --subject et --message. N'en écrivez pas vous-même ; omettez-les, ou suggérez-en un et ne l'ajoutez que si l'utilisateur le dit. Un --label pour request-files peut être un nom court tiré des propres mots de l'utilisateur ("Facture d'octobre") ; sans cela, l'outil choisit "Fichiers pour ".
    • request-files nécessite un --message (LinShare refuse une demande sans cela). Si l' utilisateur n'en a donné aucun, demandez-lui le texte avant l'exécution à blanc ; vous pouvez proposer une formulation, mais ne l'utilisez qu'une fois qu'il l'accepte.
    • Aucune expiration donnée ("expirationDate": null) signifie l'expiration par défaut du serveur, pas "jamais".
    • Attendez un « oui » explicite. Si l'utilisateur change quoi que ce soit (un destinataire, l'expiration, un fichier), exécutez un nouveau --dry-run et demandez à nouveau. Ne réutilisez jamais un « oui » antérieur.
    • Dans l'exécution réelle, passez le expirationDate de l'exécution à blanc comme --expires AAAA-MM-JJ (la date exacte que l'utilisateur a approuvée), jamais une valeur relative comme 7d à nouveau ; idem pour --alert-if-not-downloaded (le alertIfNotDownloaded de l'exécution à blanc).
  4. Vérifiez le serveur, pas votre mémoire. Avant de dire à l'utilisateur si quelque chose a été partagé, envoyé, révoqué ou fermé, exécutez la commande de liste correspondante (shares list, requests list, documents list, spaces files, spaces members). Les notes de conversations antérieures peuvent être obsolètes.
  5. Aucune confirmation n'est nécessaire pour les commandes en lecture seule : whoami, shares list, received list, received download, documents list, requests list, requests download, spaces list, spaces files, spaces members, spaces download. Créer un groupe de travail ou un dossier vide (spaces create, spaces mkdir) ne nécessite pas non plus de confirmation : personne d'autre ne le voit tant que des fichiers ou des membres ne sont pas ajoutés.
  6. Après un partage, dites à l'utilisateur quels fichiers sont allés à qui et jusqu'à quand. Téléchargements : LinShare envoie un e-mail à l'expéditeur la première fois que chaque destinataire télécharge un partage, et shares list montre un compteur downloaded — utilisez-le pour répondre à « X l'a-t-il téléchargé ? ». Pour être averti lorsqu'un fichier n'est pas téléchargé, utilisez --alert-if-not-downloaded (une date, un délai comme 3d, ou off ; sans cela, la valeur par défaut du serveur s'applique).
  7. Espaces partagés. Un groupe de travail contient des fichiers qu'une équipe partage ; un espace de travail regroupe des groupes de travail. Les commandes prennent des identifiants : exécutez spaces list pour trouver l'espace, spaces files ESPACE [--folder ID] pour trouver un dossier ou un fichier. Plusieurs espaces peuvent avoir le même nom : si les mots de l'utilisateur correspondent à plus d'un, demandez lequel. Partager un fichier par e-mail (share) et le placer dans un groupe de travail (spaces upload) sont différents : demandez si ce n'est pas clair. Sur LinShare 7.0, certaines choses échouent en raison de bugs du serveur : spaces members ne peut pas lister les membres (utilisez l'identifiant de membre affiché par add-member pour set-role / remove-member), et les personnes ne peuvent pas être ajoutées à un espace de travail (uniquement à ses groupes de travail). Retransmettez le message ; ne réessayez pas avec d'autres moyens.
  8. En cas d'erreurs, retransmettez error.message en termes simples. Ne réessayez pas un partage refusé avec des paramètres différents sans demander. Exit 1 signifie que la commande elle-même était erronée (corrigez-la, ne demandez pas à l'utilisateur de se connecter). Lorsqu'un partage échoue, l'outil supprime les fichiers téléchargés et le dit ; si error.code est "timeout", le résultat est inconnu — suivez le message (vérifiez shares list / documents list) avant toute nouvelle tentative.
  9. Les gros fichiers ne posent pas de problème : au-dessus de 2 Mio, l'outil les envoie par morceaux, comme l'interface web. Le téléchargement prend environ 15 s par Go sur un réseau rapide, beaucoup plus sur un réseau lent. Pour un fichier de plus de quelques centaines de Mo, donnez à la commande share un long délai d'attente (ou exécutez-la en arrière-plan) pour qu'elle ne soit pas interrompue, et dites à l'utilisateur que cela peut prendre un certain temps.

Flux typique

linshare --json share ./contrat.pdf --to [email protected] --expires 7d --message "Merci de signer" --dry-run
# → affichez le résumé à l'utilisateur, attendez le « oui »
# dry-run a dit "expirationDate": "2026-11-13"
linshare --json share ./contrat.pdf --to [email protected] --expires 2026-11-13 --message "Merci de signer"

Commandes

CommandeCe qu'elle faitConfirmer d'abord ?
linshare login [--server URL] [--email E]l'utilisateur se connecte une fois (mot de passe, code 2FA si nécessaire)l'utilisateur l'exécute
linshare login --token [--server URL]l'utilisateur colle un jeton créé dans l'interface web LinSharel'utilisateur l'exécute
linshare logoutoublie (et révoque) le jetonnon
linshare whoamiserveur et compte utilisésnon
linshare share FICHIER... --to EMAIL... [--expires 7d|2w|1m|AAAA-MM-JJ] [--subject S] [--message M] [--password-link] [--alert-if-not-downloaded QUAND] [--send-me-a-copy] [--dry-run]télécharger et partager par e-mailoui
linshare shares listce que l'utilisateur a partagénon
linshare shares revoke ID...annuler des partagesoui
linshare received listce que d'autres ont partagé avec l'utilisateurnon
linshare received download ID [--out DOSSIER]sauvegarder un fichier reçu (ne jamais écraser)non
linshare documents listles documents de l'utilisateurnon
linshare documents delete ID...supprimer des documentsoui
linshare request-files --from EMAIL... --message M [--label L] [--expires ...] [--dry-run]demander à des personnes d'envoyer des fichiers (une demande privée chacune)oui
linshare requests listdemandes de téléchargement et fichiers reçusnon
linshare requests download ID [--out DOSSIER]télécharger les fichiers reçus en zipnon
linshare requests close ID...fermer des demandesoui
linshare spaces list [--in ESPACE_TRAVAIL]groupes de travail et espaces de travail, avec votre rôlenon
linshare spaces create NOM [--workspace] [--in ESPACE_TRAVAIL]créer un groupe de travail (ou espace de travail)non
linshare spaces delete ID...supprimer des espaces et tous leurs fichiers, pour tout le mondeoui
linshare spaces files ESPACE [--folder ID]dossiers et fichiers d'un groupe de travailnon
linshare spaces mkdir ESPACE NOM [--folder ID]créer un dossiernon
linshare spaces upload ESPACE FICHIER... [--folder ID] [--dry-run]placer des fichiers dans un groupe de travail (les membres les voient)oui
linshare spaces download ESPACE ID [--out DOSSIER]sauvegarder un fichier de groupe de travail (ne jamais écraser)non
linshare spaces delete-files ESPACE ID...supprimer des fichiers ou dossiers, pour tout le mondeoui
linshare spaces members ESPACEmembres et rôlesnon
linshare spaces add-member ESPACE EMAIL --role R [--dry-run]donner l'accès à quelqu'unoui
linshare spaces set-role ESPACE MEMBRE ROLEchanger un rôle (MEMBRE : e-mail ou identifiant de membre)oui
linshare spaces remove-member ESPACE MEMBREsupprimer l'accèsoui

--to et --from sont répétés pour plusieurs personnes : --to [email protected] --to [email protected]. « Externe » est une heuristique : un domaine d'e-mail différent de celui de l'utilisateur.

Codes de sortie

0 ok · 1 mauvaise entrée ou commande erronée · 2 non connecté / problème de connexion · 3 serveur a refusé · 4 serveur injoignable, défaillant ou trop lent ("code": "timeout").

Skills associés