Community생산성 & 협업github.com

wboudiche/linshare

LinShare를 통해 문서를 안전하게 공유합니다. 조직 내부/외부 사람들에게 이메일로 파일을 전송하고, 공유 현황을 확인하거나 취소하며, 받은 파일을 다운로드하고, 팀 워크그룹 및 워크스페이스에서 협업합니다.

linshare란 무엇인가요?

이 스킬은 LinShare 서버(버전 6.5 이상)와 상호작용하여 문서 공유, 수신, 워크그룹 관리를 자동화하는 명령줄 도구 `linshare`를 기반으로 합니다. 사용자가 'LinShare를 통해 공유'하거나, 공유 상태를 확인/취소하거나, 워크그룹이나 워크스페이스를 다루는 요청을 할 때 활성화됩니다. 주요 기능으로는 이메일을 통한 파일 공유(외부 수신자 표시, 만료일 설정, 비밀번호 링크, 미다운로드 알림), 공유 목록 조회 및 철회, 파일 업로드 요청, 워크그룹 내 파일 업로드/다운로드/삭제, 멤버 관리(역할 변경) 등이 있습니다. 이 스킬은 사용자에게 항상 안전하고 투명한 작업을 보장합니다. 중요한 동작(공유, 철회, 삭제 등)을 수행하기 전에 `--dry-run` 모드로 미리보기를 보여주고 명시적인 승인을 요구합니다. 또한 로그인 정보를 절대 직접 입력하지 않고 사용자가 안전하게 처리하도록 합니다. JSON 출력을 기반으로 서버의 실제 상태를 확인하며, 대용량 파일 청크 전송, 타임아웃 처리, 서버 버그(예: LinShare 7.0의 워크스페이스 멤버 추가 제한)에 대한 적절한 대응을 포함합니다.

지원 대상~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 <주소>, 웹 UI에서 토큰을 복사하여 붙여넣습니다.
  • 종료 코드 0: 서버와 계정 정보가 표시됩니다. 요청을 진행하세요.

규칙 — 매번 지키세요

  1. 항상 --json을 linshare 바로 뒤에 전달하세요 (linshare --json shares list) 그리고 JSON을 읽으세요.
  2. 로그인은 사용자가 직접 해야 하며, 당신이 해서는 안 됩니다. 명령이 종료 코드 2 ("code": "auth")로 실패하면 사용자에게 ! linshare login을 직접 입력하도록 요청하세요 (웹 UI에서 토큰을 받아 SSO로 로그인하는 경우 ! 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월 청구서"). 제공하지 않으면 도구가 "Files for <사용자 이메일>"을 선택합니다.
    • request-files에는 --message가 필요합니다 (LinShare는 메시지 없이 요청을 거부합니다). 사용자가 제공하지 않았다면 dry run 전에 텍스트를 물어보세요. 문구를 제안할 수 있지만, 사용자가 수락한 후에만 사용하세요.
    • 만료일이 제공되지 않음 ("expirationDate": null)은 서버 기본 만료일을 의미하며, "영원히"가 아닙니다.
    • 명시적인 "예"를 기다리세요. 사용자가 무언가(수신자, 만료일, 파일)를 변경하면, 새 --dry-run을 실행하고 다시 물어보세요. 이전의 "예"를 재사용하지 마세요.
    • 실제 실행 시에는 dry-run의 expirationDate를 --expires YYYY-MM-DD로 전달하세요 (사용자가 승인한 정확한 날짜), 다시 7d와 같은 상대값은 사용하지 마세요. --alert-if-not-downloaded도 마찬가지입니다 (dry-run의 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가 멤버를 나열할 수 없으며 (add-member가 출력한 멤버 ID를 set-role / remove-member에 사용), 사람을 워크스페이스에 추가할 수 없습니다 (해당 워크그룹에만 추가 가능). 메시지를 그대로 전달하고 다른 방법으로 재시도하지 마세요.
  8. 오류 시 error.message를 평이한 말로 전달하세요. 거부된 공유를 다른 설정으로 묻지 않고 재시도하지 마세요. 종료 코드 1은 명령 자체가 잘못되었음을 의미합니다 (수정하고, 사용자에게 로그인을 요청하지 마세요). 공유가 실패하면 도구가 업로드된 파일을 제거하고 그렇게 말합니다. error.code가 "timeout"이면 결과를 알 수 없습니다 — 재시도 전에 메시지에 따라 (shares list / documents list 확인) 진행하세요.
  9. 대용량 파일은 괜찮습니다: 2MiB 이상이면 도구가 웹 UI처럼 청크로 보냅니다. 업로드는 빠른 네트워크에서 GB당 약 15초가 걸리며, 느린 네트워크에서는 훨씬 더 오래 걸립니다. 수백 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 웹 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").

관련 스킬