wboudiche/linshare

Compartilhe documentos através do LinShare – envie arquivos por e-mail (interna ou externamente), liste ou revogue compartilhamentos, baixe arquivos recebidos, solicite envios de arquivos e trabalhe em grupos de trabalho e espaços de trabalho (navegar, enviar, baixar, gerenciar membros).

O que é linshare?

Este skill permite que um agente de IA (como Claude Code, Cursor ou Codex) interaja com um servidor LinShare (versão 6.5 ou superior) para compartilhar documentos de forma segura. O agente pode compartilhar arquivos por e-mail, listar e revogar compartilhamentos, baixar arquivos recebidos, solicitar que outras pessoas enviem arquivos e gerenciar grupos de trabalho (workgroups) e espaços de trabalho (workspaces). A interação é feita através do comando `linshare` com saída JSON, e o agente segue regras rigorosas de segurança: nunca lida com senhas (o login é feito exclusivamente pelo usuário no chat) e sempre pede confirmação explícita antes de qualquer ação que modifique dados ou envie informações para fora da conta. O agente também utiliza simulações (`--dry-run`) para mostrar exatamente o que será feito antes de executar ações destrutivas ou de compartilhamento, garantindo que o usuário tenha controle total sobre cada operação.

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

Installed? Explore more Produtividade e Colaboração skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

O que linshare faz?

linshare é uma ferramenta de linha de comando para um servidor LinShare (versão 6.5 ou superior). Use-a para compartilhar documentos do usuário com segurança.

Primeiro, verifique a configuração

Antes do primeiro comando LinShare de uma conversa, execute linshare --json whoami:

  • comando não encontrado (código de saída 127): o comando linshare não está instalado. Informe ao usuário, em palavras simples, que este skill precisa dele e que pode ser instalado com pip install "git+https://github.com/wboudiche/linshare-cli#subdirectory=agent-harness" (Python 3.10+). Não instale você mesmo.
  • código de saída 2 ("code": "auth"): não está logado. Peça ao usuário para digitar, neste chat, ! linshare login --server <endereço do LinShare> (pergunte o endereço se você não souber) — ele digita a senha lá, nunca na conversa. Com SSO: ! linshare login --token --server <endereço>, colando um token da interface web.
  • código de saída 0: mostra o servidor e a conta; prossiga com a solicitação.

Regras — siga-as todas as vezes

  1. Sempre use --json logo após linshare (linshare --json shares list) e leia o JSON.
  2. O login é feito pelo usuário, nunca por você. Se um comando falhar com o código de saída 2 ("code": "auth"), peça ao usuário para digitar ! linshare login ele mesmo (! linshare login --token se ele fizer login com SSO e tiver um token da interface web). Nunca peça ou digite a senha dele.
  3. Obtenha um "sim" explícito antes que algo saia da conta ou seja destruído. Isso abrange share, request-files, shares revoke, documents delete, requests close, e para espaços compartilhados spaces upload, spaces add-member, spaces set-role, spaces remove-member, spaces delete-files, spaces delete.
    • Para share e request-files: execute o mesmo comando com --dry-run primeiro, depois mostre ao usuário, em palavras simples: os arquivos (nome e tamanho), cada destinatário — marcando "external": true como fora da sua organização — a data de validade, assunto, mensagem, se um link protegido por senha é usado, e downloadAlert / copyToMe (o que o servidor realmente fará: as configurações do administrador podem substituir a escolha do usuário; informe isso quando detail disser isso).
    • Para revoke, delete, close: liste primeiro, depois mostre exatamente quais itens serão afetados.
    • Para spaces upload e spaces add-member: execute com --dry-run primeiro. Para um upload, mostre os arquivos, o grupo de trabalho (e pasta) e visibleTo — todos nele verão os arquivos (se visibleTo for nulo, informe que os membros não puderam ser listados). Para um novo membro, mostre a pessoa (nome e e-mail), o espaço e a função, em palavras simples (READER: somente leitura, CONTRIBUTOR: pode adicionar, WRITER: pode adicionar e alterar, ADMIN: também gerencia membros).
    • spaces delete remove o espaço e todos os seus arquivos para todos os membros; spaces delete-files os remove para todos também. Informe isso, nomeando o espaço e os itens.
    • Use apenas as palavras que o usuário forneceu para --subject e --message. Não escreva um você mesmo; deixe-os de fora, ou sugira um e adicione-o apenas se o usuário disser. Um --label para request-files pode ser um nome curto tirado das próprias palavras do usuário ("Fatura de outubro"); sem um, a ferramenta escolhe "Arquivos para ".
    • request-files precisa de um --message (o LinShare recusa uma solicitação sem um). Se o usuário não forneceu nenhum, peça a ele o texto antes da simulação; você pode propor uma redação, mas use-a apenas quando ele aceitar.
    • Nenhuma validade fornecida ("expirationDate": null) significa a validade padrão do servidor, não "nunca".
    • Aguarde um "sim" explícito. Se o usuário mudar qualquer coisa (um destinatário, a validade, um arquivo), execute uma nova simulação (--dry-run) e pergunte novamente. Nunca reutilize um "sim" anterior.
    • Na execução real, passe o expirationDate da simulação como --expires YYYY-MM-DD (a data exata que o usuário aprovou), nunca um valor relativo como 7d novamente; o mesmo para --alert-if-not-downloaded (o alertIfNotDownloaded da simulação).
  4. Consulte o servidor, não sua memória. Antes de informar ao usuário se algo foi compartilhado, enviado, revogado ou fechado, execute o comando de listagem correspondente (shares list, requests list, documents list, spaces files, spaces members). Anotações de conversas anteriores podem estar desatualizadas.
  5. Nenhuma confirmação é necessária para comandos somente leitura: whoami, shares list, received list, received download, documents list, requests list, requests download, spaces list, spaces files, spaces members, spaces download. Criar um grupo de trabalho ou pasta vazios (spaces create, spaces mkdir) também não precisa de confirmação: ninguém mais vê até que arquivos ou membros sejam adicionados.
  6. Após compartilhar, informe ao usuário quais arquivos foram para quem e até quando. Downloads: o LinShare envia um e-mail ao remetente na primeira vez que cada destinatário baixa um compartilhamento, e shares list mostra uma contagem downloaded — use-a para responder "X já baixou?". Para ser avisado quando um arquivo não for baixado, use --alert-if-not-downloaded (uma data, um intervalo como 3d, ou off; sem ele, o padrão do servidor é aplicado).
  7. Espaços compartilhados. Um grupo de trabalho (workgroup) contém arquivos que uma equipe compartilha; um espaço de trabalho (workspace) agrupa grupos de trabalho. Os comandos usam IDs: execute spaces list para encontrar o espaço, spaces files SPACE [--folder ID] para encontrar uma pasta ou arquivo. Vários espaços podem ter o mesmo nome: se as palavras do usuário corresponderem a mais de um, pergunte qual. Compartilhar um arquivo por e-mail (share) e colocá-lo em um grupo de trabalho (spaces upload) são diferentes: pergunte se não estiver claro. No LinShare 7.0 algumas coisas falham devido a bugs do servidor: spaces members não consegue listar membros (use o ID do membro impresso por add-member para set-role / remove-member), e pessoas não podem ser adicionadas a um espaço de trabalho (apenas aos seus grupos de trabalho). Transmita a mensagem; não tente novamente de outras formas.
  8. Em erros transmita error.message em palavras simples. Não tente novamente um compartilhamento recusado com configurações diferentes sem perguntar. Código de saída 1 significa que o próprio comando estava errado (corrija-o, não peça ao usuário para fazer login). Quando um compartilhamento falhar, a ferramenta remove os arquivos enviados e informa isso; se error.code for "timeout", o resultado é desconhecido — siga a mensagem (verifique shares list / documents list) antes de qualquer nova tentativa.
  9. Arquivos grandes são tranquilos: acima de 2 MiB a ferramenta os envia em partes, como a interface web. O upload leva cerca de 15 s por GB em uma rede rápida, muito mais em uma lenta. Para um arquivo com mais de algumas centenas de MB, dê ao comando share um tempo limite longo (ou execute-o em segundo plano) para não ser interrompido, e informe ao usuário que pode demorar um pouco.

Fluxo típico

linshare --json share ./contrato.pdf --to [email protected] --expires 7d --message "Por favor, assine" --dry-run
# → mostre o resumo ao usuário, aguarde o "sim"
# a simulação disse "expirationDate": "2026-11-13"
linshare --json share ./contrato.pdf --to [email protected] --expires 2026-11-13 --message "Por favor, assine"

Comandos

ComandoO que fazConfirmar primeiro?
linshare login [--server URL] [--email E]usuário faz login uma vez (senha, código 2FA se necessário)usuário executa
linshare login --token [--server URL]usuário cola um token gerado na interface web do LinShareusuário executa
linshare logoutesquece (e revoga) o tokennão
linshare whoamiservidor e conta em usonão
linshare share ARQUIVO... --to EMAIL... [--expires 7d|2w|1m|YYYY-MM-DD] [--subject S] [--message M] [--password-link] [--alert-if-not-downloaded QUANDO] [--send-me-a-copy] [--dry-run]enviar e compartilhar por e-mailsim
linshare shares listo que o usuário compartilhounão
linshare shares revoke ID...cancelar compartilhamentossim
linshare received listo que outros compartilharam com o usuárionão
linshare received download ID [--out DIR]salvar um arquivo recebido (nunca sobrescreve)não
linshare documents listdocumentos do usuárionão
linshare documents delete ID...excluir documentossim
linshare request-files --from EMAIL... --message M [--label L] [--expires ...] [--dry-run]pedir que pessoas enviem arquivos (uma solicitação privada cada)sim
linshare requests listsolicitações de upload e arquivos recebidosnão
linshare requests download ID [--out DIR]baixar arquivos recebidos como um zipnão
linshare requests close ID...fechar solicitaçõessim
linshare spaces list [--in WORKSPACE]grupos de trabalho e espaços de trabalho, com sua funçãonão
linshare spaces create NOME [--workspace] [--in WORKSPACE]criar um grupo de trabalho (ou espaço de trabalho)não
linshare spaces delete ID...excluir espaços e todos os seus arquivos, para todossim
linshare spaces files ESPACO [--folder ID]pastas e arquivos de um grupo de trabalhonão
linshare spaces mkdir ESPACO NOME [--folder ID]criar uma pastanão
linshare spaces upload ESPACO ARQUIVO... [--folder ID] [--dry-run]colocar arquivos em um grupo de trabalho (membros os veem)sim
linshare spaces download ESPACO ID [--out DIR]salvar um arquivo do grupo de trabalho (nunca sobrescreve)não
linshare spaces delete-files ESPACO ID...excluir arquivos ou pastas, para todossim
linshare spaces members ESPACOmembros e funçõesnão
linshare spaces add-member ESPACO EMAIL --role R [--dry-run]dar acesso a alguémsim
linshare spaces set-role ESPACO MEMBRO FUNCAOalterar uma função (MEMBRO: e-mail ou ID do membro)sim
linshare spaces remove-member ESPACO MEMBROremover acessosim

--to e --from são repetidos para várias pessoas: --to [email protected] --to [email protected]. "Externo" é uma heurística: um domínio de e-mail diferente do do usuário.

Códigos de saída

0 ok · 1 entrada incorreta ou comando errado · 2 não logado / problema de login · 3 servidor recusou · 4 servidor inacessível, falhando ou muito lento ("code": "timeout").

Habilidades Relacionadas