wboudiche/linshare

LinShare を介して安全にドキュメントを共有:組織内外の相手にメールでファイルを送信、共有状況の確認や取り消し、受信ファイルの一覧表示とダウンロード、ファイル送信依頼、チームワークグループやワークスペースの操作(参照、アップロード、ダウンロード、メンバー管理)を行います。ユーザーが「LinShare 経由で」ファイルを共有、送信、転送、受信したい場合や、LinShare の共有、ワークグループ、ワークスペース、共有スペースについて尋ねたときに使用します。

linshare とは?

このスキルは、LinShare サーバー(バージョン6.5以上)向けのコマンドラインツール `linshare` を操作し、ドキュメントの安全な共有を実現します。主な機能は、メールによるファイル共有(`share`)、共有の取り消し(`shares revoke`)、受信ファイルの一覧とダウンロード(`received`)、ファイル送信依頼(`request-files`)、チーム向けのワークグループ・ワークスペースの管理(`spaces`)です。 対応プラットフォームは Claude Code、Cursor、Codex などの AI エージェント環境で、`!` プレフィックスを用いたユーザー主導のログインを前提としています。スキルを利用するには Python 3.10 以上が必要で、`pip install` でインストールします。 このスキルの重要なルールとして、ログインは常にユーザー自身が行い、AI はパスワードを扱いません。また、ファイルの送信や削除などアカウントに影響を与える操作には、`--dry-run` で事前確認を表示し、ユーザーの明示的な承諾を得てから実行します。エラー時はサーバーのメッセージをそのまま伝え、勝手に再試行しません。 技術的には、2 MiB を超えるファイルはチャンク分割でアップロードされ、1 GB あたり約15秒の転送時間がかかります。JSON 出力を常に解析し、サーバーの状態に基づいて動作するため、キャッシュに頼らず常に最新情報を提供します。

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

Installed? Explore more 生産性&コラボレーション skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

linshare は何をしますか?

linshare は LinShare サーバー(バージョン6.5以降)向けのコマンドラインツールです。 ユーザーのドキュメントを安全に共有するために使用します。

最初にセットアップを確認

会話の中で最初の LinShare コマンドを実行する前に、linshare --json whoami を実行してください:

  • コマンドが見つからない(終了コード127):linshare コマンドがインストールされていません。ユーザーに、このスキルにはこのコマンドが必要であり、自分でインストールできることを平易な言葉で伝えてください。インストール方法:pip install "git+https://github.com/wboudiche/linshare-cli#subdirectory=agent-harness"(Python 3.10以上)。自分でインストールしないでください。
  • 終了コード2("code": "auth"):ログインしていません。ユーザーに、このチャット内で ! linshare login --server <LinShareのアドレス> と入力するよう頼んでください(アドレスがわからなければ尋ねてください)-- パスワードはここに入力し、会話の中では決して入力しません。SSO の場合:! linshare login --token --server <アドレス> と入力し、Web UI から取得したトークンを貼り付けます。
  • 終了コード0:サーバーとアカウント情報が表示されます。リクエストを続行してください。

ルール — 毎回必ず従うこと

  1. 常に --json を linshare の直後に指定し(linshare --json shares list)、JSON を読み取ってください。
  2. ログインはユーザーが行い、あなたは絶対に行いません。 コマンドが終了コード2("code": "auth")で失敗した場合、ユーザーに自分で ! linshare login と入力するよう依頼してください(SSO でサインインし、Web UI からトークンを持っている場合は ! linshare login --token)。パスワードを尋ねたり入力したりしないでください。
  3. アカウントからデータが出ていく前、または破壊される前に、明示的な「はい」を得てください。 これには share、request-files、shares revoke、documents delete、requests close、および共有スペースの spaces upload、spaces add-member、spaces set-role、spaces remove-member、spaces delete-files、spaces delete が含まれます。
    • share と request-files の場合:まず同じコマンドに --dry-run を付けて実行し、その結果をユーザーに平易な言葉で表示します: ファイル(名前とサイズ)、すべての受信者 — "external": true のものは 組織の外部 と明記 — 有効期限、件名、メッセージ、パスワード保護リンクが使用されるかどうか、そして downloadAlert / copyToMe(サーバーが実際に行う動作:管理者設定がユーザーの選択を上書きする可能性があるため、detail にその旨が記載されている場合はそのように伝えてください)。
    • revoke、delete、close の場合:最初に一覧を表示し、影響を受ける項目を正確に示します。
    • spaces upload と spaces add-member の場合:最初に --dry-run を実行します。アップロードの場合は、ファイル、ワークグループ(およびフォルダ)、visibleTo を表示します — その中の全員がファイルを表示できます(visibleTo が null の場合は、メンバーを一覧表示できなかったと伝えます)。新しいメンバーの場合は、その人(名前とメール)、スペース、および権限を平易な言葉で表示します(READER:読み取り専用、CONTRIBUTOR:追加可能、WRITER:追加と変更可能、ADMIN:メンバー管理も可能)。
    • spaces delete はスペースとそのすべてのファイルを すべてのメンバーに対して 削除します。spaces delete-files も同様に全員から削除します。その旨を伝え、スペース名と項目名を明記してください。
    • --subject と --message にはユーザーが指定した単語のみを使用します。自分で作成せず、省略するか、提案してユーザーが承諾した場合のみ追加します。request-files の --label はユーザーの言葉から取った短い名前(「10月の請求書」)にします。指定がない場合、ツールは「<あなたのメール> 宛のファイル」を選択します。
    • request-files には --message が必要です(LinShare はメッセージなしのリクエストを拒否します)。ユーザーがメッセージを指定しなかった場合、ドライラン前にテキストを尋ねてください。文言を提案しても構いませんが、ユーザーが承諾した場合のみ使用します。
    • 有効期限が指定されていない場合("expirationDate": null)、サーバーのデフォルトの有効期限が適用され、「無期限」ではありません。
    • 明示的な「はい」を待ちます。ユーザーが何か(受信者、有効期限、ファイル)を変更した場合は、新しい --dry-run を実行して再度確認します。過去の承諾を再利用しないでください。
    • 実際の実行では、ドライランの expirationDate を --expires YYYY-MM-DD(ユーザーが承認した正確な日付)として渡し、7d のような相対値は使用しません。--alert-if-not-downloaded も同様にドライランの alertIfNotDownloaded の値を使用します。
  4. サーバーを確認し、自分の記憶に頼らないでください。 何かが共有されたか、送信されたか、取り消されたか、閉じられたかをユーザーに伝える前に、対応する一覧表示コマンド(shares list、requests list、documents list、spaces files、spaces members)を実行します。以前の会話の情報は古くなっている可能性があります。
  5. 読み取り専用コマンドには確認は不要です: whoami、shares list、received list、received download、documents list、requests list、requests download、spaces list、spaces files、spaces members、spaces download。空のワークグループやフォルダの作成(spaces create、spaces mkdir)も確認は不要です。ファイルやメンバーが追加されるまでは、他の誰もそれらを表示できないためです。
  6. 共有後は、どのファイルが誰に、いつまで送られたかをユーザーに伝えます。ダウンロード: LinShare は各受信者が初めて共有をダウンロードしたときに送信者にメールを送信し、shares list には downloaded カウントが表示されます — これを使用して「X さんはダウンロードしましたか?」という質問に答えてください。ファイルが ダウンロードされなかった 場合に警告を受けるには、--alert-if-not-downloaded(日付、3d のような期間、または off。指定しない場合はサーバーのデフォルトが適用されます)を使用します。
  7. 共有スペース。 ワークグループ はチームで共有するファイルを保持します。ワークスペース はワークグループをグループ化します。コマンドは ID を受け取ります:spaces list を実行してスペースを検索し、spaces files SPACE [--folder ID] でフォルダやファイルを検索します。複数のスペースが同じ名前を持つ場合があります。ユーザーの言葉が複数に一致する場合は、どれかを尋ねてください。ファイルをメールで共有する(share)ことと、ワークグループに入れる(spaces upload)ことは異なります。不明な場合は尋ねてください。 LinShare 7.0 ではサーバーのバグにより一部の機能が動作しません:spaces members はメンバーを一覧表示できません(set-role / remove-member には add-member で出力されたメンバー ID を使用してください)。また、ワークスペース に人を追加することはできません(そのワークグループにのみ追加可能です)。メッセージをそのまま伝え、別の方法で再試行しないでください。
  8. エラー時は error.message を平易な言葉で伝えます。拒否された共有を、確認なしに異なる設定で再試行しないでください。終了コード1はコマンド自体が間違っていることを意味します(修正し、ユーザーにログインを依頼しないでください)。共有が失敗した場合、ツールはアップロードされたファイルを削除し、その旨を報告します。error.code が "timeout" の場合、結果は不明です — 再試行する前にメッセージに従い(shares list / documents list を確認して)ください。
  9. 大きなファイル は問題ありません。2 MiB を超える場合、ツールは Web UI と同様にチャンク分割で送信します。高速ネットワークでは約 15 秒/GB かかりますが、低速ネットワークでははるかに長くなります。数百 MB を超えるファイルの場合は、share コマンドに長いタイムアウトを設定する(またはバックグラウンドで実行する)ようにして、中断されないようにし、しばらく時間がかかる可能性があることをユーザーに伝えてください。

典型的な流れ

linshare --json share ./contract.pdf --to [email protected] --expires 7d --message "Please sign" --dry-run
# → 要約をユーザーに表示し、「はい」を待つ
# dry-run で "expirationDate": "2026-11-13" と出力された場合
linshare --json share ./contract.pdf --to [email protected] --expires 2026-11-13 --message "Please sign"

コマンド

コマンド機能事前確認が必要?
linshare login [--server URL] [--email E]ユーザーが一度だけログイン(パスワード、必要に応じて2FAコード)ユーザーが実行
linshare login --token [--server URL]ユーザーが LinShare Web UI で作成したトークンを貼り付けユーザーが実行
linshare logoutトークンを忘却(および取り消し)いいえ
linshare whoami使用中のサーバーとアカウントいいえ
linshare share FILE... --to EMAIL... [--expires 7d|2w|1m|YYYY-MM-DD] [--subject S] [--message M] [--password-link] [--alert-if-not-downloaded WHEN] [--send-me-a-copy] [--dry-run]アップロードしてメールで共有はい
linshare shares listユーザーが共有したものいいえ
linshare shares revoke ID...共有の取り消しはい
linshare received list他の人からユーザーに共有されたものいいえ
linshare received download ID [--out DIR]受信ファイルを保存(上書きしない)いいえ
linshare documents listユーザーのドキュメントいいえ
linshare documents delete ID...ドキュメントの削除はい
linshare request-files --from EMAIL... --message M [--label L] [--expires ...] [--dry-run]ファイル送信を依頼(各宛先に個別のプライベートリクエスト)はい
linshare requests listアップロードリクエストと受信ファイルいいえ
linshare requests download ID [--out DIR]受信ファイルを Zip でダウンロードいいえ
linshare requests close ID...リクエストを閉じるはい
linshare spaces list [--in WORKSPACE]ワークグループとワークスペース(自分のロール付き)いいえ
linshare spaces create NAME [--workspace] [--in WORKSPACE]ワークグループ(またはワークスペース)を作成いいえ
linshare spaces delete ID...スペースとそのすべてのファイルを全員から削除はい
linshare spaces files SPACE [--folder ID]ワークグループのフォルダとファイルいいえ
linshare spaces mkdir SPACE NAME [--folder ID]フォルダを作成いいえ
linshare spaces upload SPACE FILE... [--folder ID] [--dry-run]ワークグループにファイルを追加(メンバーが表示可能)はい
linshare spaces download SPACE ID [--out DIR]ワークグループファイルを保存(上書きしない)いいえ
linshare spaces delete-files SPACE ID...ファイルまたはフォルダを全員から削除はい
linshare spaces members SPACEメンバーとロールいいえ
linshare spaces add-member SPACE EMAIL --role R [--dry-run]アクセス権を付与はい
linshare spaces set-role SPACE MEMBER ROLEロールを変更(MEMBER:メールまたはメンバー ID)はい
linshare spaces remove-member SPACE MEMBERアクセス権を削除はい

--to と --from は複数人に対して繰り返し使用します:--to [email protected] --to [email protected]。 「外部」はヒューリスティックです:ユーザーとは異なるメールドメインかどうかで判断されます。

終了コード

0 正常 · 1 入力が間違っているかコマンドが誤り · 2 未ログイン / ログイン問題 · 3 サーバーが拒否 · 4 サーバーに到達できない、応答不能、または遅すぎる("code": "timeout")。

関連スキル