OpenDocs — Publique Markdown em URLs Compartilháveis e PDF/DOCX
O OpenDocs transforma qualquer arquivo Markdown em uma URL limpa e legível — e, no mesmo fluxo, em um arquivo PDF ou Word com a marca do usuário, se ele quiser um arquivo para compartilhar offline. Você interage com ele via a CLI opendocs.
Referência Rápida
opendocs login --email [email protected] # Faça login ou cadastre-se: envia um código de 6 dígitos por e-mail
opendocs login --email [email protected] --code 123456 # Finalize: salva uma chave de API para você
opendocs login --browser # Login via navegador, mais amigável para humanos
opendocs login --key od_live_xxxxx # Chave de API existente
opendocs publish doc.md # Publique um arquivo Markdown → obtenha uma URL
opendocs publish doc.md # ...novamente: atualiza o mesmo documento (sem duplicata)
opendocs publish doc.md --anonymous # Sem conta: um link que qualquer pessoa pode abrir por 24h + reivindicar URL
opendocs clone # Baixe o workspace para ./<workspace> para editar
opendocs status # O que mudou localmente / online desde a última sincronização
opendocs history <doc> # Cada versão publicada
opendocs rollback <doc> <version> # Restaure uma versão (como uma nova versão)
opendocs move <doc> --project "Arquivo" # Mova entre projetos
opendocs share <doc> [email protected] @acme.com # Dê acesso a pessoas fora do workspace
opendocs team invite [email protected] # Convide um membro da equipe (eles aceitam por e-mail)
opendocs team join # Aceite um convite enviado para você
opendocs theme # Cor da marca, fonte, logotipo e rodapé usados em exportações PDF/DOCX
opendocs theme set --preset editorial --yes # Altere o tema de exportação (pergunte ao seu humano primeiro)
opendocs integrations # Google Drive / DocuSeal: o que está conectado, pastas nomeadas do Drive
opendocs save <doc> --folder "Atas da Diretoria" # Salve um PDF (ou --format docx|md) em uma pasta nomeada do Drive
opendocs sign request <doc> --signer "Funcionário=João Silva <[email protected]>" # Crie um rascunho de solicitação de assinatura (não envia nada)
opendocs sign send <id> --yes # Envie o rascunho, somente após o usuário confirmar cada signatário
opendocs sign status <id> # Quem assinou; também é possível listar assinaturas / baixar / salvar / cancelar
opendocs workspace create "Pesquisa Acme" # Novo workspace
opendocs project link "Lançamento Acme" # Documentos publicados desta pasta vão para esse projeto
opendocs config set organize auto # Deixe os agentes organizarem documentos em projetos sem perguntar
opendocs claim # Mantenha documentos anônimos publicados a partir desta pasta
opendocs publish *.md # Publique vários arquivos (em lote automático, até 500)
opendocs publish ./vault --tags obsidian # Publique uma pasta/vault recursivamente
opendocs publish *.md --export pdf # Publique E exporte — PDFs são gerados ao lado de cada fonte
opendocs update doc.md --post-id <id|slug> # Atualize um post existente (nova versão)
opendocs list # Liste documentos no workspace ativo (atalho: `opendocs ls`)
opendocs list --all # Liste em todos os workspaces aos quais você pertence
opendocs project create <nome> --use # Crie/alterne para um projeto para um lote de documentos relacionados
opendocs project use <slug> # Alterne o projeto ativo
opendocs list --tag <tag> # Filtre por tag (ótimo para encontrar um lote)
opendocs search <palavras> # Encontre documentos por título ou resumo em todos os projetos
opendocs get <id|slug> # Veja detalhes do post
opendocs pull <id|slug> # Baixe o Markdown original
opendocs pull --project # Baixe todos os documentos no projeto ativo
opendocs pull --workspace # Baixe todos os documentos no workspace ativo
opendocs export <id|slug> --format pdf # Exporte um post publicado como PDF (ou docx)
opendocs export a b c --format pdf # Exporte em lote até 10 posts de uma vez (UUIDs ou slugs)
opendocs unpublish <id|slug> # Tire um post do ar (conteúdo e histórico mantidos; não pode republicar)
opendocs visibility <id|slug> <nivel> # Altere a visibilidade sem reenviar o Markdown
opendocs delete <id|slug> --yes # Exclua permanentemente um post (libera seu slug + cota)
opendocs whoami # Mostre o usuário/workspace/projeto atuais
opendocs workspace list # Liste todos os workspaces aos quais você pertence (atalho: `workspace ls`)
opendocs workspace use <slug> # Alterne o workspace ativo (atalho: `workspace switch`)
opendocs agent # Imprima instruções concisas para agente de IA
opendocs agent --full # Imprima o SKILL.md completo incluído
opendocs agent --install # Instale esta skill para cada agente nesta máquina
opendocs mcp add # Registre o servidor MCP do OpenDocs em suas ferramentas de codificação
opendocs mcp connect claude # Adicione o OpenDocs ao aplicativo Claude (ou: chatgpt)
opendocs logout # Limpe as credenciais armazenadas
Todo comando aceita --json para saída legível por máquina e --api-url <url> para substituir o endpoint da API. Ao executar programaticamente, sempre passe --json — a saída padrão se torna um único objeto JSON analisável, erros vão para o stderr e spinners legíveis por humanos são suprimidos.
Todo comando que aceita um <postId> também aceita um slug. O slug é o segmento de caminho legível por humanos do post na URL e é único dentro do projeto ativo. Prefira slugs de post quando o usuário nomear um documento em linguagem natural: opendocs get meu-relatorio é mais amigável do que copiar o UUID de opendocs list --json. Internamente, a API resolve slug → postId por meio de uma pesquisa indexada com escopo no workspace/projeto ativo e, em seguida, faz a mesma verificação de propriedade que o caminho UUID.
Slug do workspace vs nome de usuário — são coisas diferentes. A URL é construída a partir do slug do workspace, não do nome de usuário. Documentos do projeto padrão usam opendocs.cc/<workspace>/<post>. Documentos de projetos não padrão usam opendocs.cc/<workspace>/projects/<project>/<post>. O nome de usuário ainda existe para atribuição na interface do usuário, mas não aparece nas URLs publicadas.
OpenDocs via MCP
O OpenDocs também executa um servidor MCP remoto em https://mcp.opendocs.cc/mcp (guia: https://opendocs.cc/mcp). Cada aplicativo conecta o usuário ao OpenDocs com OAuth na primeira vez que o usa; nenhuma chave de API está envolvida.
- Aplicativos de chat (Claude, ChatGPT): adicione-o como um conector personalizado com essa URL.
opendocs mcp connect claudeabre a caixa de diálogo "Adicionar conector personalizado" do Claude com OpenDocs.cc preenchido;opendocs mcp connect chatgptabre a página de plugins do ChatGPT (depois "+" → "Adicionar servidor MCP personalizado"). Ambos copiam a URL para a área de transferência. - Ferramentas de codificação:
opendocs mcp addo registra em todas as ferramentas que encontrar (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini, opencode, Kiro) e imprime uma instrução de uma linha para as outras.--agent <id...>seleciona ferramentas,--dry-runmostra o que mudaria,opendocs mcp removeo remove novamente eopendocs agent --install --mcpinstala esta skill e o servidor juntos. - Ferramentas MCP ou a CLI? Se as ferramentas MCP do OpenDocs estiverem disponíveis e você não puder executar comandos shell, use-as em vez da CLI; elas aceitam texto Markdown diretamente. Se você tiver um shell, prefira a CLI para arquivos locais, pastas e imagens: ela envia imagens locais, publica pastas inteiras em lotes e lembra o que cada pasta publicou.
Configuração
Instalação
Formas de obter o OpenDocs em um agente:
# Node.js 20+: a CLI completa (recomendado), depois esta skill para cada agente que encontrar
npm install -g @opendocs.cc/cli
opendocs agent --install # SKILL.md + scripts/opendocs.sh, sem necessidade de rede
# Node.js 22+: a mesma skill através da CLI de skills
npx skills add opendocs-cc/skills --skill opendocs -g -y
# Sem Node.js: instala esta skill + scripts/opendocs.sh (curl + jq)
curl -fsSL https://opendocs.cc/install.sh | bash
opendocs agent --install instala na pasta global de skills de cada agente cuja pasta de configuração exista: ~/.claude/skills (Claude Code), a pasta compartilhada ~/.agents/skills (Codex, Cursor, GitHub Copilot, Gemini CLI, opencode, OpenClaw, Windsurf, Amp, Goose, Grok Build), ~/.cline/skills, ~/.hermes/skills e ~/.kiro/skills. opendocs agent --list mostra a pasta de cada agente e se foi encontrada; --agent <id...> instala para agentes específicos mesmo que não tenham sido encontrados (--agent claude-code codex). Execute novamente após atualizar a CLI para atualizar a skill. Ele imprime quais pastas foram gravadas; com --json, installed[] tem agent, path e status.
No Claude Code você também pode instalá-lo como o plugin OpenDocs.cc, que adiciona /opendocs-cc:publish e /opendocs-cc:export, conecta o servidor MCP e mantém a skill atualizada: /plugin marketplace add opendocs-cc/skills, depois /plugin install opendocs-cc@opendocs-cc. No Codex: codex plugin marketplace add opendocs-cc/skills, depois codex plugin add opendocs-cc@opendocs-cc.
npx skills add pode terminar com ✗ opendocs → PromptScript: PromptScript does not support global skill installation. Isso é um bug conhecido do instalador que afeta apenas o PromptScript; a skill está instalada, então prossiga.
Se o comando opendocs não estiver disponível e o Node.js não estiver instalado, use bash scripts/opendocs.sh (na pasta desta skill) — veja "Sem Node.js" abaixo. Todo o resto deste guia se aplica a ambos.
Verifique se a CLI está instalada e autenticada
opendocs --version # imprime a versão da CLI instalada
opendocs whoami # mostra nome de usuário + nome do workspace (o slug da URL está na saída JSON)
opendocs whoami --json é o comando de diagnóstico mais útil para um agente — ele retorna o slug do workspace ativo da CLI (para construir URLs de post) mais o contexto da conta/workspace e a cota de documentos em uma chamada:
{
"userId": "...",
"onboarding": { "username": "...", "workspace": { "id": "...", "name": "Acme Docs", "slug": "acme-docs" } },
"quota": { "documents": { "plan": "free", "limit": 50, "used": 3, "remaining": 47 } }
}
Para workspaces Pro/Team, quota.documents.limit e remaining são null (significando ilimitado). Os endpoints de publicação ainda verificam a cota novamente em relação ao workspaceId explícito no corpo da solicitação, portanto, uma configuração local desatualizada não pode contornar a aplicação do servidor.
Se a CLI estiver faltando:
npm install -g @opendocs.cc/cli
Se o usuário não estiver logado, cadastre-o (ou faça login) antes da primeira publicação, pelo terminal com um código enviado por e-mail: sem navegador, sem copiar chaves de API. Uma conta é gratuita para até 50 documentos e é o que o usuário deseja por padrão: os links permanecem ativos, permanecem privados para o workspace, podem ser atualizados no local e exportados como PDF.
- Peça ao usuário seu endereço de e-mail.
- Execute
opendocs login --email <email> --json. Ele envia um código de 6 dígitos por e-mail e sai imediatamente com{"status": "code_sent", ...}. - Diga ao usuário: "Verifique sua caixa de entrada para um código de login do OpenDocs e cole-o aqui."
- Execute
opendocs login --email <email> --code <code> --json.
Se o e-mail for novo, isso cria a conta, um nome de usuário, um workspace (opendocs.cc/<nome_de_usuário>) e um projeto padrão, e então salva uma nova chave de API com o nome do seu agente (ex.: claude-code) na configuração da CLI. Contas existentes apenas recebem uma nova chave. opendocs signup é um alias. Os códigos expiram após 10 minutos e permitem 5 tentativas; em invalid_code peça o e-mail mais recente, em code_expired execute o passo 2 novamente.
Somente se o usuário não quiser uma conta ainda, ofereça uma publicação anônima:
opendocs publish notas.md --anonymous --json
Qualquer pessoa com a url retornada pode lê-la por 24 horas, depois é excluída. Compartilhe o claimUrl exatamente como retornado com o usuário e ofereça-se para cadastrá-lo para que seja mantido: executar opendocs login --email ... posteriormente na mesma pasta a reivindica automaticamente para o novo workspace (ou execute opendocs claim). Nunca publique anonimamente a menos que o usuário concorde que um link que qualquer pessoa pode abrir está OK.
Outras formas de fazer login: humanos em um terminal podem usar opendocs login --browser; scripts e CI podem usar uma chave existente:
opendocs login --key od_live_xxxxx
# Ou passe via variável de ambiente para scripts / CI:
export OPENDOCS_API_KEY=od_live_xxxxx && opendocs login
Nunca execute opendocs login puro de um agente. Sem --email, --key ou a variável de ambiente, ele solicita uma chave de API no stdin e sua chamada de ferramenta travará. OPENDOCS_API_URL substitui o endpoint embutido https://api.opendocs.cc.
Trabalhando com vários workspaces
Um usuário pode pertencer a mais de um workspace — um workspace pessoal gratuito mais um workspace do plano Team, vários workspaces Team ou qualquer combinação. A CLI armazena um workspace ativo por vez em ~/.config/opendocs/config.json. publish e update atuam nesse workspace ativo (prefixo de URL, cota e tudo). list também usa o workspace ativo por padrão, com --all como uma alternativa quando o usuário deseja ver os posts de todos os workspaces de uma vez. Não há sinalizador --workspace por invocação em comandos de mutação; a alternância é configurada uma vez e persiste até que você a altere.
Trabalhando com projetos
Cada workspace tem um projeto Padrão mais projetos nomeados opcionais. Use um projeto sempre que um agente estiver publicando um lote coerente de documentos para um produto, lançamento, cliente, experimento ou repositório. O padrão é melhor para documentos avulsos.
opendocs project list --json
opendocs project create "Documentação do OpenClaw" --slug openclaw-docs --use --json
opendocs publish ./docs --json
opendocs project use default --json
opendocs workspace use <slug> redefine o projeto ativo para o projeto Padrão desse workspace. opendocs list mostra o projeto ativo por padrão e termina dizendo quantos documentos t
...
[truncated for translation]