CH 15 · Tarefas Agendadas e Execuções em Segundo Plano
Objetivo do capítulo
Este capítulo resolve um problema: como fazer o Agent "fazer coisas sozinho quando chegar a hora".
"Agendamento" no dsh tem dois níveis, fáceis de confundir:
| Nível | O que é | Cenário típico |
|---|---|---|
| Lembrete dentro da sessão (Schedule oficial) | Fazer o modelo "me lembrar em X minutos" na mesma sessão | "Me lembre em 20 minutos para voltar e checar os resultados" |
| Automação em nível de sistema (headless + scheduler) | O Agent inteiro roda uma tarefa e sai, puxado pelo agendador do sistema na hora marcada | "Me envie um relatório de AI hot-topics toda manhã às 9" |
A primeira metade do capítulo esclarece o Schedule oficial (é um overlay opcional; este artigo te dá um guia de usuário diretamente utilizável); a segunda metade é o mão na obra principal do capítulo — usar a skill aihot instalada no CH 14, montar uma tarefa agendada de "scraping de AI hot-topics no horário".
Schedule oficial: lembretes temporizados dentro da sessão
O que é
O pacote oficial @deepseek-ai/dsh-schedule fornece lembretes dentro da sessão: fazer o modelo "me lembrar mais tarde" na mesma sessão. Quando chega a hora, retorna a esta sessão como uma mensagem normal de acompanhamento.
É uma capacidade opcional (overlay), off por padrão. Para ativar, adicione um patch ao iniciar o dsh web. O exemplo oficial está no repositório oficial em apps/cli/config/examples/schedule/cordis.yml — esse comando de caminho relativo só funciona quando executado no diretório raiz do repositório oficial clonado, e não dá para usar depois de apenas npm install-ar o dsh. Sem clonar o repositório, você também pode montar um arquivo de patch equivalente você mesmo; o conteúdo são três seções (eu copiei um diretamente do exemplo oficial):
# schedule.overlay.yml
- insert:
- id: time-context
name: '@deepseek-ai/dsh-time-context'
- id: schedule
name: '@deepseek-ai/dsh-schedule'
- id: ui-schedule
disabled: falseDepois aponte para esse arquivo na inicialização:
dsh web --patch C:\seu-caminho\schedule.overlay.ymlEle faz três coisas: adicionar dsh-time-context (para que o modelo entenda o tempo no fuso horário do seu navegador), adicionar dsh-schedule (fornece a ferramenta de lembrete), e ativar ui-schedule (exibe os lembretes pendentes na UI).
Como usar
Depois de ativar, inicie uma nova sessão, e o modelo passa a ter três ferramentas:
| Ferramenta | O que faz |
|---|---|
schedule_create | Cria um lembrete |
schedule_list | Lista todos os lembretes pendentes |
schedule_delete | Cancela por id |
Três tipos de regras para criar um lembrete:
| Regra | Descrição |
|---|---|
after | Lembrar uma vez depois de quantos segundos (one-shot) |
at | Lembrar uma vez em um momento específico (one-shot) |
every | Repetição em intervalo fixo, mínimo 5 minutos |
O uso é uma frase em linguagem natural, por exemplo "me lembre em 20 minutos para checar os resultados do deploy", e o modelo chamará schedule_create e retornará o id, o horário alvo e o status do lembrete.
Limites
| Pode | Não pode |
|---|---|
| Mensagem de acompanhamento dentro da sessão | Sem e-mail / SMS / push / notificações de navegador |
| Lembrete sobrevive ao reinício (armazenado no log da sessão) | Sem regras de calendário / Cron tipo "toda semana às 9" |
| Repetição em intervalo fixo (≥5 min) | Se a sessão for fechada, fica atrasado; só o mais recente é recuperado após a retomada |
Resumo de uma linha: o Schedule oficial lida com "lembrar você na hora dentro da sessão", não com "rodar tarefas automaticamente em segundo plano". Para isso — os hot-topics agendados que faremos na segunda metade — você precisa de headless mais um agendador de sistema.
Mão na obra principal: deixe o aihot enviar AI Hot-Topics toda manhã
Abordagem
No CH 14 instalamos aihot (uma skill de pesquisa que faz scraping de AI hot-topics), e no CH 05 aprendemos headless (um comando roda uma tarefa, sai quando termina). Combine os dois, e adicione um agendador que "puxa na hora certa", e você tem uma tarefa completa de hot-topics agendados:
headless usa aihot para fazer scraping de hot-topics → escreve em um arquivo → o agendador do sistema re-roda esse comando toda manhã às 9
Passo 1: rode manualmente uma vez primeiro, confirme que funciona
Não vá direto para o agendador; primeiro faça rodar manualmente. Abra um terminal no workspace onde você quer o arquivo de saída; o meu é E:\software-workspace\DeepSeek harness demo:
cd "E:\software-workspace\DeepSeek harness demo" # substitua pelo seu workspace
dsh --profile headless "Use a skill aihot para fazer scraping das notícias de AI hot-topics em chinês das últimas 24 horas, organize em um breve resumo dos hot-topics de IA de hoje (cerca de 5 itens, cada um com uma frase mais a fonte), e escreva no arquivo dsh-daily-hot.txt"
aihot está instalada na prateleira de nível-usuário (~/.agents/skills/aihot), e o headless consegue descobri-la, sem configuração extra. Após a execução, um resumo de hot-topics de hoje com 5 itens é escrito em dsh-daily-hot.txt:

Ao rodar, houve um pequeno contratempo do meu lado: o schannel do PowerShell local reportou SEC_E_NO_CREDENTIALS durante o handshake HTTPS (credenciais TLS faltando no sandbox). O dsh não travou; o modelo mudou automaticamente para o canal OpenSSL para completar a requisição (especificamente Node ou Python, dependendo do julgamento dele na hora), e os dados foram recuperados normalmente. É improvável que você encontre isso na sua máquina; se encontrar, saiba que é um problema de canal TLS, não falha da fonte de dados.
Passo 2: envolva o comando num script de inicialização
Deixar o agendador chamar um comando headless longo com aspas é propenso a erros (aninhamento de aspas, diretório de trabalho errado). O jeito seguro é escrever um pequeno script, e o script cuida de "mudar para o diretório alvo → rodar headless".
Crie um run-daily-hot.ps1 no workspace onde você quer rodar a tarefa agendada. Meu diretório aqui é E:\software-workspace\DeepSeek harness demo; substitua o Set-Location no script pelo seu:
Set-Location "E:\software-workspace\DeepSeek harness demo" # substitua pelo seu workspace
dsh --profile headless "Use a skill aihot para fazer scraping das notícias de AI hot-topics em chinês das últimas 24 horas, organize em um resumo de hot-topics de IA de hoje (cerca de 5 itens), e escreva no arquivo dsh-daily-hot.txt"Primeiro rode esse script manualmente (substitua o caminho pelo seu) e confirme que tem o mesmo efeito que rodar o comando diretamente:
powershell -ExecutionPolicy Bypass -File "E:\software-workspace\DeepSeek harness demo\run-daily-hot.ps1"Passo 3: passe para o agendador do sistema
O Windows já vem com o "Agendador de Tarefas", e a linha de comando pode usar schtasks para criar tarefas. Deixe-o rodar esse script toda manhã às 9:
schtasks /Create /SC DAILY /ST 09:00 /TN "DSH Daily AI Hot" /TR "powershell -ExecutionPolicy Bypass -File \"E:\software-workspace\DeepSeek harness demo\run-daily-hot.ps1\""| Parâmetro | Significado |
|---|---|
/SC DAILY | Rodar todo dia |
/ST 09:00 | 9 da manhã |
/TN | Nome da tarefa |
/TR | O comando real a executar (este chama o script do passo 2) |
Depois de criar, dá para verificar uma vez sem esperar até amanhã:
schtasks /Run /TN "DSH Daily AI Hot"Então confira se o timestamp de dsh-daily-hot.txt foi atualizado para agora.
Passo 4: como "enviar para mim"
A saída do headless é escrever em arquivo — toda manhã quando chega a hora, dsh-daily-hot.txt é o hot-topic mais recente do dia, basta abrir o workspace para ver. Este é o loop central de custo zero.
Se você quiser empurrar para o seu celular, há dois caminhos adicionais:
- Instale o plugin de agendamento da comunidade dsh-scheduler: ele suporta gatilhos cron e entrega resultados para webhooks do ServerChan / DingTalk / Feishu. Se você quer ser "notificado" em vez de "ficar olhando o arquivo você mesmo", este é o caminho mais fácil.
- Chame webhooks você mesmo no script: adicione algumas linhas no fim de
run-daily-hot.ps1, façaPOSTdo conteúdo do arquivo para ServerChan (Fangtang) e serviços similares, então empurre para o WeChat. Por exemplo:
$content = Get-Content "E:\software-workspace\DeepSeek harness demo\dsh-daily-hot.txt" -Raw
Invoke-RestMethod -Uri "https://sctapi.ftqq.com/<your-SCKEY>.send" -Method Post -Body @{ title = "AI Hot-Topics de hoje"; desp = $content }<your-SCKEY> é a chave que o ServerChan atribui a você; registre-se no site do ServerChan para obter uma (este é um serviço de terceiros, não coloque a chave num repositório público).
Deixe o dsh fazer: um prompt resolve
Os passos anteriores foram manuais: escrever scripts, criar tarefas. Na verdade o dsh consegue fazer tudo isso sozinho — ele pode escrever arquivos, rodar comandos e registrar tarefas agendadas. Basta deixar os requisitos claros, e ele faz tudo de uma vez; você só verifica.
Mande esse prompt direto na caixa de entrada da Web UI:
Me ajude a completar duas coisas no diretório E:\software-workspace\DeepSeek harness demo:
1. Crie um script run-daily-hot.ps1: primeiro use Set-Location para mudar para esse diretório, depois rode
dsh --profile headless "Use a skill aihot para fazer scraping das notícias de AI hot-topics em chinês das últimas 24 horas, organize em um resumo de hot-topics de IA de hoje (cerca de 5 itens), e escreva no arquivo dsh-daily-hot.txt";
2. Use schtasks para registrar uma tarefa agendada chamada DSH Daily AI Hot, todo dia às 09:00 usar powershell para rodar esse script.
Após completar, dispare manualmente uma vez, confirme que dsh-daily-hot.txt foi atualizado, e me diga o resultado.Ele mesmo escreverá o script, rodará schtasks /Create sozinho, e disparará a verificação sozinho — você só fica na conversa assistindo ele passar pelas etapas.
Observação: criar tarefas agendadas e outras operações de nível de sistema requer acesso total; recomenda-se apenas selecionar essa permissão e continuar, assim nenhuma confirmação aparecerá.

Depois da execução, ele reportará seus próprios resultados — o script está no lugar, a tarefa agendada foi criada e verificada:

Armadilhas comuns
| Armadilha | Como evitar |
|---|---|
| Tarefa agendada roda no diretório errado | O diretório de trabalho do headless no ambiente do agendador não é controlado por você, use o script para fazer Set-Location primeiro e depois rodar |
| Comando muito longo / erro de aninhamento de aspas | Envolva o comando num script .ps1, o agendador só chama o script |
| Achou que o Schedule oficial consegue "rodar todo dia na hora" | Ele só faz lembretes dentro da sessão, sem regras de calendário; para rodar tarefas na hora use headless + scheduler |
| headless reporta erro de handshake TLS | Problema de canal schannel, o modelo mudará para OpenSSL como fallback, geralmente não afeta o resultado |
| Tarefa agendada consome cota de API | Não agende de forma muito apertada, uma frequência de uma vez por dia não pressiona nada |
O que você aprendeu neste capítulo
Você passa se conseguir completar os itens abaixo:
- [ ] Dizer claramente a diferença entre o Schedule oficial (lembrete dentro da sessão) e a automação em nível de sistema (headless + scheduler)
- [ ] Saber como usar
dsh web --patch apps/cli/config/examples/schedule/cordis.ymlpara ativar o Schedule, e dizer seus limites (sem notificações externas, sem regras de calendário) - [ ] Saber como usar um comando headless para fazer a aihot raspar hot-topics e escrever em um arquivo
- [ ] Saber como envolver o comando em um script
.ps1, e então usarschtaskspara criar uma tarefa agendada e dispará-la manualmente para verificar - [ ] Conhecer os dois caminhos avançados de "enviar para mim": plugin de webhook da comunidade / chamar ServerChan você mesmo no script
