Skip to content

CH 14 · Skill e Workflow

Número de palavras~4.740 palavrasTempo~25 minPré-requisitoCH 08, CH 13NívelReproduzível

Objetivo do capítulo

Antes, você tinha que explicar seus requisitos com clareza toda vez que mandava o Agent fazer alguma coisa. Mas algumas tarefas têm passos fixos — como o "resumir um repositório, gerar como documento" que rodamos no CH 05, ou relatórios semanais, organização de dados, tarefas do tipo diário. Ter que repetir o processo do zero toda vez é desperdício demais. Essas tarefas valem a pena virar "uma única folha de instrução": diga ao Agent "quando você encontrar esse tipo de tarefa, siga esse conjunto de passos". Isso é Skill. Este capítulo esclarece o que é a Skill do dsh, de onde ela vem, como o modelo a usa, depois instala uma Skill pronta para uso direto — basta dizer uma palavra ao Agent, e ele instala sozinho — transformando-a no seu "recurso reutilizável" pessoal.

Um fato-chave: Skill também é um plugin

Assim como MCP e subagentes, Skill no dsh não é uma entrada separada; é outra combinação de plugins. Olhando para a árvore de configuração, a família de capacidades de skill é composta por quatro peças:

PluginO que fazPapel
dsh-skillRegistro: mescla diretórios de skill de várias fontes, resolve por nome a "vencedora"Gerente do armazém
dsh-skill-filesystemDescobre skills locais em diretórios de projeto e do usuário, monitora mudanças de arquivoComprador
dsh-tool-skillMostra ao modelo a lista de skills disponíveis, fornece a ferramenta skill de carregamentoRecepção
dsh-skill-badgeSkill de badge oficial que vem junto, desativada por padrãoDecoração

Todos esses quatro vêm instalados por padrão na config web — então dá para usar agora mesmo, nada a instalar. Mais uma vez o "tudo é um plugin" do CH 08: até as "capacidades reutilizáveis" em si são montadas por plugins.

O que é Skill: um "como fazer uma tarefa" escrito

Ferramentas são "ações" que o Agent pode "chamar" (ler/escrever arquivos, pesquisar na web); Skills são "folhas de instrução" escritas para o Agent — um conjunto de instruções específicas da tarefa dizendo "quando você encontrar esse tipo de tarefa, siga esse conjunto de passos".

A maior diferença é reusabilidade: ferramentas são fornecidas pelo sistema, Skills são acumuladas por você. Você descobre uma abordagem útil para uma tarefa, escreve como uma Skill, e daí em diante quando o Agent encontrar o mesmo tipo de tarefa, você não precisa repetir os requisitos. E skills seguem sua localização: colocada no .dsh/skills do projeto é nível-projeto, só vale para aquele projeto; colocada no diretório do usuário ~/.dsh/skills é nível-global, disponível em qualquer projeto — a próxima seção "cinco prateleiras" mostrará a hierarquia completa.

E o "Workflow": uma Skill é o Workflow mais simples

Uma frase para lembrar: uma Skill é o workflow mais simples. A essência de workflow é "solidificar a experiência humana num processo" — e uma Skill é exatamente isso: entrada clara, saída clara, passos fixos, reutilizável individualmente. É um pequeno processo comprimido em uma única tarefa.

A diferença é granularidade. Uma Skill lida com "como fazer uma única tarefa" (uma receita para um prato); Workflow lida com "como encadear múltiplas tarefas em ordem" (a esteira inteira, de comprar legumes, lavar verdura até servir, também gerenciando ramificações, handoffs, quem vai primeiro). No preset Standard do dsh, "Skills" e "Workflows" são duas ferramentas lado a lado — para rotinas fixas de passo único, Skill basta; só para cadeias de múltiplos passos você precisa de Workflow.

Colocando os dois lado a lado, a diferença fica mais clara:

DimensãoSkillWorkflow
Lida comComo fazer uma única tarefaEm que ordem encadear múltiplas tarefas
GranularidadeRotina fixa de um passoPipeline de múltiplos passos
Ramificação & handoffNão é responsávelResponsável (condições, handoffs, ordem)
ReusoReutilizável individualmenteRe-orquestrar conforme necessário
AnalogiaUma receita para um pratoA esteira inteira da compra dos legumes até servir

Então quando você escreve uma Skill para uma única tarefa fixa, você na verdade construiu "o workflow mais simples".

Como é uma Skill

Uma Skill é um arquivo Markdown com frontmatter; a forma padrão é um pacote de diretório: o nome da pasta é o nome da skill, e dentro dela precisa haver SKILL.md — adequado para skills que vêm com recursos acompanhantes (scripts, docs de referência, assets).

O nome deve estar em kebab-case minúsculo (^[a-z0-9]+(?:-[a-z0-9]+)*$), por exemplo code-review, weekly-report.

Um pacote de diretório padrão tem este formato:

text
code-review/
├── SKILL.md        # Obrigatório: frontmatter + corpo de instruções
├── scripts/        # Opcional: scripts acompanhantes (.py / .sh etc.)
├── references/     # Opcional: docs de referência, templates de checklist de revisão
└── assets/         # Opcional: assets, arquivos de exemplo

SKILL.md é o único arquivo obrigatório; o corpo pode referenciar scripts e docs de referência no pacote por caminhos relativos. A estrutura mínima tem este formato:

markdown
---
name: code-review
description: Revisar um trecho de código seguindo um checklist unificado e gerar comentários de revisão estruturados
whenToUse: Quando o usuário pedir "revisão de código"
---

# Code Review

Siga esta ordem:

1. Leia primeiro o README relevante para entender qual problema esse código resolve;
2. Liste as exportações públicas e funções principais, anotando o que cada uma faz;
3. Procure pontos óbvios de risco: tratamento de erro, casos de borda, informações sensíveis;
4. Saída em formato de tabela: Arquivo / Problema / Severidade / Sugestão.

Apenas name e description são obrigatórios no frontmatter; os outros campos são todos opcionais:

CampoFinalidade
nameNome único da Skill (kebab-case, obrigatório)
descriptionDescrição de uma linha; o modelo usa para julgar "essa tarefa é para mim" (obrigatório)
whenToUseDica extra de momento de uso (opcional)
disable-model-invocationDefinido como true: só o usuário pode chamar via /name, o modelo não pode auto-carregar (opcional)
user-invocableDefinido como false: só o modelo pode chamar, /name do usuário é inválido (opcional)

Dois switches: quem pode chamar

Dois campos no frontmatter controlam "quem pode chamar":

CombinaçãoEfeito
NenhumTanto modelo quanto usuário podem chamar (padrão)
disable-model-invocation: trueSó o usuário pode chamar via /name; invisível no diretório do modelo e na ferramenta skill — adequado para fluxos sensíveis ou de alto custo para impedir que o modelo dispare casualmente
user-invocable: falseSó o modelo pode chamar; /name do usuário é inválido
Ambos offSó código confiável pode chamar; modelo e usuário não conseguem tocar

De onde vêm as Skills: cinco "prateleiras"

Primeiro distinga duas coisas: esta seção é sobre de onde o dsh lê as skills — ou seja, em qual diretório local a skill deve ser colocada para ser descoberta. O dsh usa o plugin dsh-skill-filesystem para escanear vários diretórios raiz em uma ordem fixa e coletar as skills no registro. "Instalar uma nova skill" é outra coisa: vá a um marketplace de skills da comunidade (como o SkillHub da Tencent) ou ao Plugin Market do dsh, e instale o SKILL.md pronto de alguém nesses diretórios de prateleira — a seção "instale uma Skill pronta" abaixo faz exatamente isso.

O dsh-skill-filesystem escaneia vários diretórios raiz em uma ordem fixa, coletando as skills no registro. Quanto mais acima, maior a prioridade — quando aparece uma skill de mesmo nome em várias prateleiras, a que vem antes ganha:

PrioridadeDiretórioQuem coloca aqui
1<project-root>/.dsh/skillsAcompanha o projeto, distribuído com o repositório
2<project-root>/.agents/skillsCompatível com outras ferramentas (ex. Claude Code), localização compartilhada
3Diretórios customizados da config customSkillDirsOutras localizações especificadas manualmente
4<dshHome>/skills (~/.dsh/skills)Nível-usuário, disponível em qualquer workspace
5<agentsHome>/skills (~/.agents/skills)Diretório de nível-usuário compartilhado com outras ferramentas Agent

Como o modelo "vê" as Skills

Skills são escritas para o modelo ver; como ele sabe quais existem? Esse mecanismo é fornecido pelo plugin dsh-tool-skill, instalado por padrão na config web (você pode ver em dsh --profile web --dump-config). Ele opera por meio de três mecanismos:

  1. Diretório de sessão: antes do início da sessão e da primeira requisição, o modelo recebe uma mensagem persistente listando os nomes e descrições de uma linha de todas as skills disponíveis, e é avisado "antes de agir, carregue primeiro a skill correspondente, não chute a partir do resumo".
  2. Ferramenta skill: quando o modelo julga que uma skill é relevante, usa skill({ name }) para carregar o corpo completo de instruções — o corpo retorna como um bloco <skill_content> e permanece no histórico como resultado de ferramenta. A imagem abaixo é uma Trajectory real: o modelo primeiro chama a ferramenta skill para carregar as instruções completas de aihot, depois chama pwsh para executar a requisição de verificação; as duas chamadas de ferramenta ficam cristalinas na Trajectory.

Trajectory da sessão de instalação e chamada do aihot: carregamento via ferramenta skill + verificação com pwsh 3. Gesto do usuário /name: você digita /code-review direto na caixa de entrada, e as instruções da skill são injetadas na rodada como uma mensagem do usuário, e o modelo simplesmente segue. Observação: esse nome precisa existir de fato nas prateleiras do workspace, e permitir invocação pelo usuário — digitar um nome de skill que não existe é tratado como texto comum e não tem efeito.

Fluxo de Skill: prateleira → registro → diretório de sessão → modelo ou usuário

Um detalhe: depois da injeção /name do usuário, o modelo não usa a ferramenta skill para carregá-la de novo — evitando que as mesmas instruções sejam enfiadas duas vezes, queimando tokens.

Se você perguntar ao modelo "quais skills você tem agora" e ele não conseguir reportá-las, primeiro confirme se a config web tem o plugin @deepseek-ai/dsh-tool-skill (dá para ver com dsh --profile web --dump-config).

Mãos à obra: instale uma Skill pronta (use como está)

A essência de instalar uma skill pronta é colocar o SKILL.md pronto de alguém no diretório "prateleira" do dsh (geralmente o .dsh/skills do projeto) — a comunidade já tem um grande lote de skills prontas para pegar.

Aqui usamos aihot como exemplo: é uma skill do tipo pesquisa do conhecido bloguer de tech em IA "Digital Life Kazike" (Shuzhi Shengming Kazike), habilidoso em fazer scraping de notícias diárias de IA e tendências da indústria.

Passo 1: diga uma palavra ao Agent, deixe ele instalar para você

Não precisa procurar arquivos e criar diretórios por conta. Volte para a conversa e diga:

Por favor, instale a AIHOT Skill: https://aihot.virxact.com/aihot-skill/README.md Me diga se preciso iniciar uma nova sessão depois da instalação. Se o instalador suportar, por favor anexe: --actor seu-Actor-ID

O ID depois de --actor é atribuído a você após se registrar na plataforma AIHOT, e será escrito no .aihot-actor-id local depois da instalação; o Agent o carrega para identificação ao fazer requisições.

O Agent vai fazer sozinho: ir ao site oficial, baixar o SKILL.md do AIHOT e arquivos acompanhantes, colocá-los na localização padrão de descoberta do DSH (~/.agents/skills/aihot/), fazer verificação de integridade SHA-256 um a um, escrever a config do actor, gerar .gitignore, e reportar o resultado para você. Após a instalação, não precisa iniciar uma nova sessão — já está no diretório <available_skills> da sessão atual, pronto para usar.

Instalação da AIHOT Skill concluída: localização da instalação, verificação de integridade, Actor e confirmação de validade

Passo 2: peça ao modelo para reportar a nova Skill

Volte para a conversa, pergunte:

Que skills você tem agora? O que a skill aihot faz?

O modelo vai reportar — você escreveu zero linha de código e agora tem uma capacidade reutilizável. Ele também dirá o que essa skill especificamente faz (aihot consulta notícias reais atuais de IA em chinês por meio da API anônima somente-leitura do AIHOT, e não "inventa" notícias a partir da memória de treino).

Modelo reporta aihot na conversa: lista disponível + descrição de função

Passo 3 (opcional): peça ao modelo para usá-la

Basta dizer "use aihot para fazer scraping das notícias de IA de hoje", e o modelo carregará essa skill para fazer scraping. O fluxo de pesquisa refinado de outra pessoa agora virou sua capacidade — isso é "usar como está".

Use aihot para fazer scraping das notícias de IA de hoje: modelo entrega "destaques das últimas 24h do círculo de IA"

Armadilhas comuns

ArmadilhaComo evitar
Esqueceu descriptionCampo obrigatório faltando, a skill inteira é descartada após aviso
Nível de diretório colocado erradoApenas <root>/<name>/SKILL.md é reconhecido, um nível, não aninhe mais fundo
Modelo não usa ativamenteEscreva description de forma clara sobre "quando usar" (whenToUse também ajuda); se preocupado mesmo, use /name para injetar direto
Editou o corpo mas o modelo não reageEdições no corpo não afetam o resumo do diretório; o modelo precisa "recarregar" uma vez; só editar campos de resumo como description reflete imediatamente no diretório

O que você aprendeu neste capítulo

Você passa se conseguir completar os itens abaixo:

  • [ ] Dizer que uma Skill é "instruções reutilizáveis escritas para o Agent", e a diferença para uma ferramenta é a reusabilidade
  • [ ] Saber que Skill no dsh também é um plugin (registro de skill + descoberta via filesystem + ferramenta consumidora)
  • [ ] Saber dizer a estrutura de uma Skill (frontmatter tem name / description obrigatórios, whenToUse opcional)
  • [ ] Saber a prioridade das cinco prateleiras (projeto .dsh/skills mais alta, diretório do usuário em seguida, utilizável entre projetos)
  • [ ] Ter rodado "dizer uma frase ao Agent → ele instala a skill → modelo reporta → modelo carrega e usa"
  • [ ] Distinguir os dois switches disable-model-invocation e user-invocable

Open Source · MIT · Community Driven