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
linsharenão está instalado. Informe ao usuário, em palavras simples, que este skill precisa dele e que pode ser instalado compip 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
- Sempre use
--jsonlogo apóslinshare(linshare --json shares list) e leia o JSON. - 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 loginele mesmo (! linshare login --tokense ele fizer login com SSO e tiver um token da interface web). Nunca peça ou digite a senha dele. - 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 compartilhadosspaces upload,spaces add-member,spaces set-role,spaces remove-member,spaces delete-files,spaces delete.- Para
shareerequest-files: execute o mesmo comando com--dry-runprimeiro, depois mostre ao usuário, em palavras simples: os arquivos (nome e tamanho), cada destinatário — marcando"external": truecomo fora da sua organização — a data de validade, assunto, mensagem, se um link protegido por senha é usado, edownloadAlert/copyToMe(o que o servidor realmente fará: as configurações do administrador podem substituir a escolha do usuário; informe isso quandodetaildisser isso). - Para
revoke,delete,close: liste primeiro, depois mostre exatamente quais itens serão afetados. - Para
spaces uploadespaces add-member: execute com--dry-runprimeiro. Para um upload, mostre os arquivos, o grupo de trabalho (e pasta) evisibleTo— todos nele verão os arquivos (sevisibleTofor 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 deleteremove o espaço e todos os seus arquivos para todos os membros;spaces delete-filesos remove para todos também. Informe isso, nomeando o espaço e os itens.- Use apenas as palavras que o usuário forneceu para
--subjecte--message. Não escreva um você mesmo; deixe-os de fora, ou sugira um e adicione-o apenas se o usuário disser. Um--labelpararequest-filespode ser um nome curto tirado das próprias palavras do usuário ("Fatura de outubro"); sem um, a ferramenta escolhe "Arquivos para ". request-filesprecisa 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
expirationDateda simulação como--expires YYYY-MM-DD(a data exata que o usuário aprovou), nunca um valor relativo como7dnovamente; o mesmo para--alert-if-not-downloaded(oalertIfNotDownloadedda simulação).
- Para
- 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. - 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. - 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 listmostra uma contagemdownloaded— 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 como3d, ouoff; sem ele, o padrão do servidor é aplicado). - 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 listpara 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 membersnão consegue listar membros (use o ID do membro impresso poradd-memberparaset-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. - Em erros transmita
error.messageem 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; seerror.codefor"timeout", o resultado é desconhecido — siga a mensagem (verifiqueshares list/documents list) antes de qualquer nova tentativa. - 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
shareum 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
| Comando | O que faz | Confirmar 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 LinShare | usuário executa |
linshare logout | esquece (e revoga) o token | não |
linshare whoami | servidor e conta em uso | nã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-mail | sim |
linshare shares list | o que o usuário compartilhou | não |
linshare shares revoke ID... | cancelar compartilhamentos | sim |
linshare received list | o que outros compartilharam com o usuário | não |
linshare received download ID [--out DIR] | salvar um arquivo recebido (nunca sobrescreve) | não |
linshare documents list | documentos do usuário | não |
linshare documents delete ID... | excluir documentos | sim |
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 list | solicitações de upload e arquivos recebidos | não |
linshare requests download ID [--out DIR] | baixar arquivos recebidos como um zip | não |
linshare requests close ID... | fechar solicitações | sim |
linshare spaces list [--in WORKSPACE] | grupos de trabalho e espaços de trabalho, com sua função | nã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 todos | sim |
linshare spaces files ESPACO [--folder ID] | pastas e arquivos de um grupo de trabalho | não |
linshare spaces mkdir ESPACO NOME [--folder ID] | criar uma pasta | nã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 todos | sim |
linshare spaces members ESPACO | membros e funções | não |
linshare spaces add-member ESPACO EMAIL --role R [--dry-run] | dar acesso a alguém | sim |
linshare spaces set-role ESPACO MEMBRO FUNCAO | alterar uma função (MEMBRO: e-mail ou ID do membro) | sim |
linshare spaces remove-member ESPACO MEMBRO | remover acesso | sim |
--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").