Agent Skills › melgarafael/DeskcommCRM › deskcomm-extensao

deskcomm-extensao

GitHub

提供DeskcommCRM扩展开发指南,指导用户区分核心功能与扩展需求。涵盖分类标准、当前扩展能力边界及发布流程,确保产品通用性并规范插件化开发。

.claude/skills/deskcomm-extensao/SKILL.md melgarafael/DeskcommCRM

Trigger Scenarios

创建CRM扩展或插件 判断功能属于核心还是扩展 开发特定行业模块如佣金或预约

Install

npx skills add melgarafael/DeskcommCRM --skill deskcomm-extensao -g -y
More Options

Non-standard path

npx skills add https://github.com/melgarafael/DeskcommCRM/tree/main/.claude/skills/deskcomm-extensao -g -y

Use without installing

npx skills use melgarafael/DeskcommCRM@deskcomm-extensao

指定 Agent (Claude Code)

npx skills add melgarafael/DeskcommCRM --skill deskcomm-extensao -a claude-code -g -y

安装 repo 全部 skill

npx skills add melgarafael/DeskcommCRM --all -g -y

预览 repo 内 skill

npx skills add melgarafael/DeskcommCRM --list

SKILL.md

Frontmatter
{
    "name": "deskcomm-extensao",
    "metadata": {
        "lei": "docs\/doctrine\/extensoes.md",
        "publico": "contribuidor de nicho, agência, criador de pacote"
    },
    "description": "Guia para criar uma extensão do DeskcommCRM — o pacote declarativo — em vez de abrir um PR no núcleo. Use SEMPRE que alguém quiser criar extensão, plugin, módulo, tema ou integração de nicho (comanda, comissão, fidelidade, roteiro de clínica, campo só para o meu caso), perguntar \"isto é núcleo ou extensão?\", \"como publico no catálogo?\", \"dá para adicionar uma tela para o meu segmento?\", ou quando a triagem mandar transformar um PR de nicho em extensão. Traz a régua de destino, o contrato do pacote campo a campo com exemplo válido, o que uma extensão NÃO consegue fazer hoje (sem código, tabela, tela, menu ou ferramenta de IA) e o envio por pull request com revisão humana."
}

Criar uma extensão do DeskcommCRM

Alguém chega com uma ideia de nicho — comanda de barbearia, comissão de vendedor, um roteiro de pós-atendimento de clínica — e o instinto é abrir um PR no núcleo, acrescentando um campo, uma aba, uma regra. O núcleo precisa continuar útil com zero extensões: é isso que mantém o produto genérico enquanto os nichos ganham espaço. Este guia é para onde a triagem manda quem chegou por ali, e para quem já sabe que quer criar um pacote.

A lei é docs/doctrine/extensoes.md. O contrato em vigor é lib/extensions/manifest.ts e lib/extensions/capacidades.ts. Quando este guia e o código discordarem, o código está certo — e todo número aqui vem com o comando que o revela.

Como você age

  • Primeiro classifica, depois ensina. Metade do que chega como "extensão" é núcleo, e a outra metade é uma jornada que o formato atual ainda não constrói. Mandar alguém escrever um pacote que não pode existir custa mais que uma resposta desconfortável.
  • Não anuncia o que não existe. Não há SDK, execução de código de terceiro, marketplace público, avaliação nem contador de downloads. A lei proíbe prometer os quatro antes da prova (não-negociável 11), e prometer a alguém que vai investir uma semana é a pior forma de prometer.
  • Mede na fonte. Limite, vocabulário e versão do host saem de lib/extensions/, nunca de memória.
  • Preserva o trabalho de quem chegou. "Isto não cabe hoje" vem sempre com o que fazer com o que já foi feito.

Passo 1 — isto é núcleo ou extensão?

A pergunta que decide, e ela não é "isto serve a muita gente?":

Se nenhuma organização desta instalação ativar isto, a operação comum continua inteira?

Sim → pode ser extensão. Não, porque identidade, autorização, isolamento, auditoria, contratos ou a cadeia de envio dependem disto → é núcleo.

Núcleo Extensão
contatos, conversas, funis, agenda comanda, comissão, fidelidade
papéis, permissão, isolamento entre organizações tema visual, roteiro de um método de vendas
auditoria, recibos, cadeia de envio, opt-out integração com um ERP de um segmento só
caixa: contas, formas de pagamento, plano de contas, lançamento avulso (decisão do dono, não dedução) o que fica em cima do caixa
corrigir comportamento que já foi distribuído jornada adicional que ninguém precisa ligar

Os dois lados com mais exemplos, o destino "ambos" e o que fazer quando a régua diz extensão mas a ferramenta ainda não existe: references/decidir-nucleo-ou-extensao.md.

Passo 2 — o que uma extensão consegue fazer hoje

O que ela faz: publica até 4 cards de orientação no hub do CRM. Cada card tem título, descrição, blocos de texto e um botão, e esse botão abre uma tela que o CRM já tem. Quem administra a instalação admite o catálogo e instala; quem administra a organização ativa e configura (densidade e mostrar descrição); quem usa lê e clica, dentro do acesso que já tinha. As telas alcançáveis são seis: Tarefas, Conversas, Funil, Contatos, Agenda e Radar.

O que ela não faz — e nenhuma dessas é "ainda não implementei":

Não existe Por quê
Código. O pacote é JSON. Sem JavaScript, SQL, shell, expressão não há executor isolado; a escolha dele é por evidência, e ainda não foi feita
Tabela ou qualquer dado próprio (data só aceita {"mode":"none"}) módulo nativo com tabelas é a ADR-0002, aceita em 17/09/2026 e não construída
Tela, rota ou item de menu mesma ADR-0002
Ferramenta, instrução ou prompt do agente de IA recusado por escrito na ADR-0003: o motor de instruções caminha pelo conteúdo da sessão, e deixar o pacote escolher o caminho é leitura do que não é dele
Endereço livre (href, prefixo, destino próprio) alcançaria as telas onde a instalação guarda segredo com todos os testes verdes. Recusado para sempre
Imagem, captura de tela, URL de qualquer tipo endereço clicável dentro de pacote de terceiro é porta de engano; o ícone sai de uma lista de três
Ler dado do CRM — tarefa, conversa, contato a capacidade abre uma porta que o núcleo já tem, com a autorização de sempre; ela não concede leitura
Depender de outra extensão dependencies é []
Marketplace, avaliação, download contado, telemetria não existem, e a lei proíbe anunciá-los antes da prova

Se a sua ideia precisa de uma linha desta tabela, pare aqui e vá para o Passo 6.

Passo 3 — escreva o pacote

Comece pelo exemplo válido: references/pacote-de-exemplo.json — um roteiro de clínica com dois cards, que usa duas portas (Conversas e Agenda). Copie, troque os textos e os slugs, valide.

O esqueleto, com o que cada campo cobra:

{
  "format_version": 1, "profile": "declarative",
  "publisher": "slug-minusculo", "name": "slug-minusculo", "version": "1.0.0", "license": "MIT",
  "host_api": { "min": 2, "max": 2 },
  "permissions": ["navigation.inbox", "navigation.agenda"],
  "dependencies": [], "data": { "mode": "none" },
  "display": { "title": {…}, "summary": {…}, "category": "service", "icon": "ListChecks" },
  "configuration": { "density": "comfortable", "show_description": true },
  "contributions": { "crm_cards": [ { "id": "…", "action": { "capability": "inbox.open" } } ] }
}

As três regras que mais recusam pacote:

  1. Chave desconhecida recusa o pacote inteiro. Autoria, site, etiqueta e imagem não moram no manifesto — são metadado de catálogo, o artefato que passa por revisão (ADR-0003, D3).
  2. Toda capacidade usada tem de estar coberta por uma permissão declarada. Usar inbox.open sem declarar navigation.inbox é recusado na instalação, na ativação e na leitura: a lista de permissões é o que a tela mostra antes de alguém aceitar a extensão.
  3. host_api é a janela que você garante. Um pacote que usa as portas novas declara min 2. Confira o host: grep -n "HOST_API_VERSION =" lib/extensions/manifest.ts.

Campo a campo, com os limites e o formato do texto localizado: references/contrato-do-pacote.md. O exemplo explicado, com o que é decisão sua e o que é obrigação: references/exemplo-comentado.md. Quando o parser recusar e não disser por quê: references/erros-do-pacote.md.

Passo 4 — valide antes de enviar

bash .agents/skills/deskcomm-extensao/scripts/validar-pacote.sh caminho/do/pacote.json

Roda parseManifest() e checkCompatibility() do host — não uma cópia das regras — e, quando passa, imprime a entrada de catálogo com sha256 e byte_length calculados dos seus bytes. Sai 1 quando recusa.

Passar aqui é o piso: o schema não julga se o card vale uma instalação. Os degraus seguintes — o catálogo de ensaio local e a prova pela tela — estão em references/testar-local.md, com a ressalva medida sobre o laboratório, que carrega a própria cópia das regras e pode estar atrás do contrato.

Passo 5 — envie

Por pull request, com revisão humana. Merge não publica: validação automática e revisão proporcional ao perfil antecedem a publicação, e teste verde não é selo.

No corpo do PR: o que a extensão faz em duas frases, para qual nicho, quais portas abre e por quê, a saída do validador (o comando e o resultado, não a conclusão), o destino declarado — "extensão", com a razão medida pela pergunta-raiz, que é o item 18 do Definition of Done — e o que você não mediu. A mecânica de PR deste repositório (branch, identidade, fragmento em .changes/) está na skill deskcomm-contribuir; carregue-a antes de abrir.

O que a revisão olha, em ordem, e o que acontece depois de publicado (nenhuma origem desliga uma extensão numa VPS em silêncio): references/enviar-e-revisao.md.

Usar na sua própria instalação não pede permissão de ninguém — pacote seu, catálogo seu, admitido pela tela. O PR é só para entrar no catálogo oficial.

Passo 6 — o meu caso não cabe no formato

Acontece com a maioria das boas ideias, e a resposta honesta vale mais que um encaminhamento simpático. Na ordem:

  1. Precisa guardar dado, ter tela própria ou entrar no menu? O caminho é o módulo nativo da ADR-0002 — tabelas criadas por uma função provisionadora quando o módulo é instalado na instância. Ela foi aceita em 17/09/2026 e ainda não foi construída. Não há data, e este guia não inventa uma.
  2. Parte do seu trabalho é genérica e o núcleo já usa hoje? Essa parte entra pelo caminho normal de PR, separada do resto.
  3. O que sobra é conteúdo — orientação, roteiro, sequência de passos? Isso é empacotável hoje. Volte ao Passo 3.
  4. Nada disso? Abra uma issue descrevendo a jornada inteira e o que ela precisa guardar. A doutrina é explícita: enquanto a plataforma está em construção, "extensão" é destino, não exigência de usar uma ferramenta que ainda não existe — o trabalho se preserva e a dependência se registra.

O que você nunca faz

  • Prometer SDK, execução de código, marketplace público, avaliações ou downloads — nem "em breve".
  • Inventar um caminho de pasta para o pacote no repositório: onde a loja mora ainda não está decidido (ADR-0003, "o que esta ADR não decide").
  • Sugerir que o contribuidor amplie o perfil declarativo por dentro para caber o caso dele. Quem propõe um item da coluna "ainda não existe" segue a coluna "o que pede antes", que é prova.
  • Recomendar que alguém extraia do núcleo um recurso já distribuído porque "seria extensão": isso exige equivalência demonstrada e migração explícita.
  • Aceitar publisher que se parece com marca alheia, ou texto que descreve uma extensão que o pacote não é.

Version History

  • 788dbf9 Current 2026-09-27 10:20

Same Skill Collection

.agents/skills/deskcomm-doutrina/SKILL.md
.claude/skills/deskcomm-doutrina/SKILL.md
.agents/skills/deskcomm-cliente-novo/SKILL.md
.agents/skills/deskcomm-contribuir/SKILL.md
.agents/skills/deskcomm-extensao/SKILL.md
.agents/skills/deskcomm-instalar/SKILL.md
.agents/skills/deskcomm-metricas/SKILL.md
.agents/skills/deskcomm-prompt/SKILL.md
.agents/skills/sistema-vivo/SKILL.md
.claude/skills/deskcomm-cliente-novo/SKILL.md
.claude/skills/deskcomm-contribuir/SKILL.md
.claude/skills/deskcomm-instalar/SKILL.md
.claude/skills/deskcomm-metricas/SKILL.md
.claude/skills/deskcomm-prompt/SKILL.md
.claude/skills/sistema-vivo/SKILL.md

Metadata

Files
0
Version
788dbf9
Hash
f7cbc213
Indexed
2026-09-27 10:20

Home - Wiki
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-09-27 22:21
浙ICP备14020137号-1