Skip to content

About

Agent skill to share documents through LinShare (Claude Code and other SKILL.md agents), with confirmation before anything is sent

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

16 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

linshare-skill

An agent skill that lets an AI assistant (Claude Code and other tools that read SKILL.md skills) share documents through LinShare: send files by email, list or revoke shares, download received files, and ask people to send files. The assistant shows a dry-run summary and waits for an explicit "yes" before anything is sent, revoked, deleted or closed.

The skill drives the linshare command from the linshare-cli repository, which must be installed first (Python 3.10+, LinShare 6.5 or later).

Install

The quick way: ask your assistant

Paste this prompt into Claude Code (or another assistant that can run commands). It installs the linshare command and the skill, then tells you how to log in:

Install the LinShare skill for me, from https://github.com/wboudiche/linshare-skill:
1. Install the `linshare` command (Python 3.10+): `pipx install "git+https://github.com/wboudiche/linshare-cli#subdirectory=agent-harness"`. Without pipx: create a virtual environment in ~/.local/share/linshare-cli, install it there, link its `linshare` into ~/.local/bin, and tell me if ~/.local/bin is not on my PATH. Check that `linshare --help` works.
2. Install the skill. If the `claude` command exists (Claude Code): run `claude plugin marketplace add wboudiche/linshare-skill` then `claude plugin install linshare@linshare-skill`, and check with `claude plugin list`. Otherwise: copy the `skills/linshare` folder of that repository into your personal skills folder (see "Other assistants" in its README).
3. Do not log me in. Tell me to type `! linshare login --server <my LinShare address>` myself (my password goes to my terminal, not to the chat), and ask me for the address if I have not given it.

The assistant shows each command before running it, depending on your permission settings. It never logs in for you: you type the login line yourself, so your password stays in your terminal. If Claude Code does not see the skill right away, restart it.

Step by step

1. The skill, in Claude Code — type in Claude:

/plugin install linshare --marketplace wboudiche/linshare-skill

(older Claude Code: /plugin marketplace add wboudiche/linshare-skill, then /plugin install linshare@linshare-skill)

2. The linshare command (Python 3.10+):

pip install "git+https://github.com/wboudiche/linshare-cli#subdirectory=agent-harness"

3. Log in once, by typing in Claude (your password goes to your terminal, never to the chat):

! linshare login --server https://linshare.example.com

You don't need to remember steps 2 and 3: on the first request, the assistant checks and tells you what is missing.

Other assistants

The skill is a plain SKILL.md folder (Agent Skills format), so any assistant that reads skills and can run commands can use it. Install the linshare command (step 2 above), then copy the skill folder where your assistant looks for it:

git clone --depth 1 https://github.com/wboudiche/linshare-skill /tmp/linshare-skill
mkdir -p <skills folder> && cp -r /tmp/linshare-skill/skills/linshare <skills folder>/
Assistant Personal skills folder Per project
OpenAI Codex CLI ~/.agents/skills/ (older versions: ~/.codex/skills/) .agents/skills/
Gemini CLI ~/.gemini/skills/ or ~/.agents/skills/ .gemini/skills/
GitHub Copilot (CLI, VS Code agent mode) ~/.copilot/skills/ .github/skills/
Cursor ~/.cursor/skills/ .cursor/skills/
OpenCode ~/.config/opencode/skills/ .opencode/skills/

Many of them also read ~/.agents/skills/ or ~/.claude/skills/, so one copy there often serves several assistants. Restart the assistant after copying. The prompt in "The quick way" should also work with them (it falls back to copying the folder).

Then log in once in a terminal: linshare login --server https://linshare.example.com.

The dry run and the "yes" before anything is sent come from the skill's instructions, so they depend on the assistant following them. This was checked with Claude Code only (on LinShare 6.5 and 7.0); the other assistants read the same format but have not been tested with this skill yet. Folders as documented in November 2026.

What you can ask

Ask in plain words, in any language. ✋ marks the actions the assistant always confirms with you first.

Send files

You say What happens
"Share contract.pdf with marc@acme.com via LinShare" ✋ uploads the file and shares it by email; the server's default expiry applies
"Send report.pdf and annex.xlsx to marc@acme.com and julie@acme.com, for 2 weeks" ✋ several files, several recipients, expiry in 14 days
"Share the contract with Marc until December 15, subject Contract, message Please sign before Friday" ✋ exact expiry date, your subject and message (it never writes one for you)
"Share budget.xlsx with partner@other.org with a password-protected link" ✋ recipients outside your organisation are flagged; they get a password-protected link
"Share it with Marc and warn me if he hasn't downloaded it by Friday" ✋ LinShare emails you on that day if the share is still not downloaded
"Share it with Marc, no reminder" ✋ turns that alert off (if your administrator allows it)
"Share it with Marc and send me a copy of the email" ✋ you also receive the share notification
"Share this 3 GB video with the team" ✋ large files are fine: they are uploaded in chunks; the assistant warns you it takes a while

Follow up

You say What happens
"What have I shared on LinShare?" lists your shares: file, recipient, expiry, number of downloads
"Has Marc downloaded the contract?" reads the download count on the server (LinShare also emails you at the first download)
"Cancel what I shared with Marc" ✋ lists the matching shares, then revokes them
"Delete the old version of the report from LinShare" ✋ lists your documents, then deletes the ones you confirm

Receive files

You say What happens
"What did people send me on LinShare?" lists the files shared with you
"Download the file Julie sent me into ~/Downloads" saves it (never overwrites an existing file)
"Ask ann@acme.com to send me the scans, message Please upload the signed scans" ✋ creates a private upload request; LinShare emails Ann a link
"Ask Ann and Bob for their invoices before the end of the month" ✋ one private request per person, with that deadline; it asks you for the message if you gave none
"Did Ann send the scans?" lists your requests and how many files came in
"Download what Ann sent" saves the received files as a zip
"Close the request to Ann" ✋ closes it; nobody can upload any more

Team workgroups and workspaces

You say What happens
"Which LinShare workgroups am I in?" lists your workgroups and workspaces, with your role in each
"What's in the Marketing workgroup?" / "…in its Contracts folder?" lists folders and files (who changed them last, when)
"Put these slides in the Marketing workgroup, in Contracts" ✋ shows the files, the folder and everyone who will see them, then uploads (any size)
"Get the latest budget from the Finance workgroup" downloads it (never overwrites an existing file)
"Create a workgroup Project Atlas with a folder Specs" creates them; you are the only member until you add people
"Add julie@acme.com to Project Atlas as a reader" ✋ shows who, where and what the role allows, then adds her
"Let Julie edit files in Project Atlas" ✋ changes her role to writer
"Who has access to Project Atlas?" lists the members and their roles
"Remove Paul from Project Atlas" ✋ removes his access
"Delete the old drafts from Project Atlas" ✋ lists them, says they disappear for every member, then deletes
"Delete the Project Atlas workgroup" ✋ warns that all its files go, for everyone, then deletes

Roles: reader (read only), contributor (can add files), writer (can add and change), admin (also manages members). Workspaces group several workgroups; they have reader, writer and admin roles.

On LinShare 7.0, a few of these fail because of server bugs (listing members, adding someone to a workspace); the assistant tells you when that happens.

Account

You say What happens
"Connect me to LinShare" tells you to type ! linshare login yourself: you enter your password (and 2FA code) in your terminal, never in the chat
"Which LinShare account am I using?" shows the server, its version and your email

What a confirmation looks like

You:    Share contract.pdf with marc@acme.com and paul@partner.org for a week,
        message "Please sign".
Agent:  Here is what will be sent:
        - contract.pdf (240 KB)
        - to marc@acme.com, and paul@partner.org — outside your organisation
        - expires on 2026-11-16
        - message: "Please sign"; no password-protected link
        - download alert: on 2026-11-11 (server default: after 3 working days)
        Shall I send it?
You:    yes
Agent:  Shared contract.pdf with marc@acme.com and paul@partner.org until 2026-11-16.

The assistant checks the dry run against the server first, so the summary shows what will really happen, including settings your administrator imposes. If you change anything (a recipient, the date, a file), it shows a new summary and asks again. Before telling you whether something was shared, revoked or closed, it checks the server rather than its memory.

Test

tests/test_skill.py checks that every command and option the skill mentions exists in the installed linshare (so the skill and the command don't drift apart), and that the safety rules are still there:

pip install pytest
pytest -q tests

The checks against the command are skipped if linshare is not installed.

Compatibility

Written for linshare-cli as of 2026-11-09 (spaces commands, share --alert-if-not-downloaded, --send-me-a-copy, request-files --message). Run the tests after updating either side.

About

Agent skill to share documents through LinShare (Claude Code and other SKILL.md agents), with confirmation before anything is sent

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages