Community编程与开发github.com

DGatoM/DG-Claw

在代理所在的机器上标记、列出和取消真实的系统承诺(通过 persona-cron-mgr.py 管理 systemd 定时器),让代理即使无人对话也能准时自动执行。当主人要求安排、定时或重复任务时(如“每天早上9点发摘要”、“创建一个定时任务”、“每小时执行一次”、“查看有哪些定时任务”、“取消那个安排”),务必使用此技能。

DG-Claw 是什么?

该技能允许 Claude Code 代理在其运行的主机上创建、列出、编辑和删除持久的 systemd 定时器(定时任务),从而实现代理在无用户交互情况下按照计划自主执行任务。与 Claude Code 会话内弱调度不同(会话结束即消失),该技能生成的定时器写入主机 systemd,即使会话关闭、机器重启也能继续运行。技能通过 `persona-cron-mgr.py` 脚本驱动,支持按日历(如每天、每周、特定日期)或按间隔(每30分钟、每2小时)触发。触发时,脚本向代理的活跃会话发送一条预先定义的“便条”,代理收到后结合完整上下文执行动作。技能包含音频模糊匹配逻辑,可将“Chrome”“CROM”等听写错误自动识别为“cron”。同时,技能严格遵循安全限制:每个项目最多10个自定义定时器,只管理自己的定时器,不干扰系统级或平台级定时任务,并提供 `--dry-run` 预览功能避免误操作。该技能深度集成 DG Claw 架构,支持 Telegram、Web UI 等平台。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/DGatoM/DG-Claw/tree/HEAD/skills/agenda

Installed? Explore more 编程与开发 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

/dgclaw:agenda, marcar compromisso de verdade

O dono quer que alguma coisa aconteça num horário, sem ele estar por perto. Esta skill transforma esse pedido num timer do systemd, que vive na máquina, sobrevive a reinício e dispara sozinho.

A regra de ouro, antes de qualquer coisa

Existem dois "agendamentos" no mundo, e eles não se parecem em nada:

O agendamento da sessão do ClaudeA agenda do DG Claw (esta skill)
onde vivedentro da conversa abertana máquina, no systemd
quando a conversa fechamorre juntocontinua
serve pra"daqui a 10 minutos volte nisso" dentro do trabalho de agora"todo dia às 9h faça X", pra sempre

Você é um agente DG Claw: você mora numa máquina que fica ligada. Quando o dono pede um agendamento, ele está pedindo o da direita. Nunca responda que "só consigo agendar dentro da minha sessão": isso é falso pra você. Você marca na máquina.

Quando o áudio disser "Chrome"

O dono manda muita mensagem de voz, e a transcrição erra a palavra cron com frequência. Num pedido de horário, todas estas são a mesma coisa:

Chrome, crome, crono, crom, croni, cronn, "corn"

"Cria um Chrome pra mim das 9h" é cria um cron das 9h. Não peça pra ele repetir e não vá abrir navegador. A única leitura em que Chrome é navegador mesmo é quando o assunto é abrir site, aba, extensão ou login. Na dúvida entre as duas, confirme numa linha só: "você quer dizer um agendamento, certo?".

Como funciona por dentro (diga isso ao dono se ele perguntar)

O timer não executa comando solto. Na hora marcada, ele cutuca a sua sessão viva com um recado escrito por você, e aí você decide o que fazer, com toda a sua memória e o seu jeito. É a diferença entre um robô que dispara texto pronto e um funcionário que na hora certa se lembra do que tinha pra fazer.

Por isso o campo mais importante é o --poke: é o bilhete que o seu "eu do futuro" vai receber. Escreva como quem deixa recado pra si mesmo, com contexto suficiente pra agir sem precisar perguntar nada. Compare:

  • ruim: resumo
  • bom: Hora do resumo do dia para o dono: olhe a working-memory e o que aconteceu hoje, monte um resumo curto e mande pelo Telegram.

Hora é a hora do dono. Nunca converta

A hora que ele fala é a hora do relógio dele. "Cinco da tarde" é 17:00:00, escrito assim, e ponto. Não converta pra UTC, não some nem subtraia nada. O gerenciador carimba o fuso do dono (DGCLAW_TZ) no próprio agendamento, então quem faz a conversão é o sistema, que não erra. Fazer a conta na mão é o jeito conhecido de marcar 17h e o compromisso cair às 20h.

Duas coisas que ajudam a não escorregar:

  • Descubra que horas são de verdade antes de calcular qualquer coisa relativa ("daqui a duas horas", "amanhã cedo"). A sua sessão pode estar aberta há dias, e a sua noção de agora está velha. Rode date '+%d/%m %H:%M %Z' e use o que voltou.
  • Confirme repetindo em português. Depois de criar, diga a ele quando roda a próxima vez, com dia e hora. O comando já devolve isso na linha proxima:. Se o que voltou não bater com o que ele pediu, o problema é agora, não daqui a uma semana.

Se ele estiver num fuso diferente do servidor e isso aparecer, não invente correção: mostre o que timedatectl diz e ofereça acertar (timedatectl set-timezone <fuso do dono>), que é mexida no servidor inteiro e precisa da autorização dele.

O comando

Sempre pelo gerenciador, nunca mexendo em systemd na mão:

MGR="${CLAUDE_PLUGIN_ROOT}/scripts/persona-cron-mgr.py"
CFG="<workspace>/.dgclaw/config.sh"

python3 "$MGR" --config "$CFG" list --json
python3 "$MGR" --config "$CFG" create --name <apelido> --calendar '<horário>' --poke '<recado>' --desc '<o que é>' --dry-run
python3 "$MGR" --config "$CFG" create --name <apelido> --calendar '<horário>' --poke '<recado>' --desc '<o que é>'
python3 "$MGR" --config "$CFG" edit   --name <apelido> ... (mesma assinatura do create)
python3 "$MGR" --config "$CFG" remove --name <apelido>

Se você não é root (o agente que roda no container da v1), o gerenciador pede sudo sozinho quando precisa gravar a rotina. Não precisa fazer nada. A rotina roda como o dono da pasta do agente, não como root.

  • --name: apelido curto em kebab-case (resumo-do-dia, cobranca-cliente). É a identidade da rotina: é por ele que se edita e se remove.
  • --calendar ou --every, nunca os dois:
    • --calendar '*-*-* 09:00:00' → todo dia às 9h
    • --calendar 'Mon..Fri *-*-* 08:30:00' → de segunda a sexta, 8h30
    • --calendar 'Mon *-*-* 18:00:00' → toda segunda, 18h
    • --calendar '*-*-01 10:00:00' → todo dia 1º do mês, 10h
    • --every 30min (ou 2h, 1d) → de tempos em tempos, contado a partir da última vez
    • --calendar '2026-10-17 14:32:00' → uma vez só, nesse dia e hora. Serve para VOCÊ fazer algo num horário marcado (conferir um e-mail, gerar um relatório): rode date, some o prazo e escreva a data COMPLETA. Nunca use *-*-* aqui (vira todo dia) nem --every (repete). No --poke, acrescente ao final: "Depois de fazer, remova esta rotina com remove --name .", para ela não ficar ocupando uma das 10 vagas.
    • Avisar o dono ("me lembra daqui a 2 minutos", "amanhã às 10h me avisa") não é rotina: use a skill /dgclaw:lembretes. Ela aparece na tela e no celular dele e insiste até ele confirmar. O timer de uma vez só desta skill avisa uma vez e some.
  • O fuso é o da máquina (DGCLAW_TZ), já configurado. Não faça conta de fuso na mão.

Rode sempre com --dry-run primeiro e mostre ao dono o que vai ser criado, em português: o apelido, quando roda e o recado. Só depois rode de verdade. É barato, e evita marcar compromisso errado num horário que ninguém vai conferir.

O que fazer em cada pedido

"Marca pra mim..." → entenda o horário, escolha o apelido, escreva o recado, --dry-run, mostre, confirme, crie. Feche dizendo quando roda a próxima vez e que ele pode ver isso no painel, na aba Operações.

"Quais agendamentos você tem?" → list --json e traduza pra frases. Não despeje JSON no Telegram. Diga o apelido, quando roda e o que ele faz quando dispara.

"Cancela o X" → remove --name X. Confirme que sumiu e avise que ele some do painel também. Se o dono descrever a rotina em vez de dar o apelido, liste antes e confirme qual é.

"Muda o horário do X" → edit, não remove-e-cria. O edit preserva o apelido e o histórico da rotina.

Limites que existem por segurança (e valem ser ditos)

  • Você só governa as rotinas do seu bloco, com o prefixo dgclaw-<slug>-self-. As rotinas de vida que vieram com você (reflexão noturna, auditoria, batimento, pulso) e qualquer outra coisa da máquina são intocáveis por este comando, e isso é proposital.
  • Teto de 10 rotinas próprias. Atingiu, o comando recusa e você precisa remover uma antes. Se isso acontecer, mostre a lista ao dono e pergunte qual sai.
  • Todo pedido é validado antes: apelido, formato de horário e tamanho do recado. Se o gerenciador recusar, ele diz o motivo em uma linha. Leia a mensagem e conserte, não insista.
  • O manifesto (.dgclaw/self-crons.json) é gravado com backup automático a cada mudança.

Onde o dono vê isso

No painel, aba Operações, cartão Agenda do agente. Aquela lista não é um arquivo de configuração: ela é lida do systemd na hora em que a página abre. Então vale a promessa simples, e você pode dizer isso a ele com todas as letras: se está lá, existe; se você apagar, some de lá sozinho. Nunca vai aparecer rotina fantasma que já foi removida, nem faltar uma que você acabou de criar.

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

DGatoM/DG-Claw

Transforma um processo que o agente acabou de fazer com o dono numa skill dele (pasta .claude/skills/<nome>/SKILL.md no workspace), pra fazer igual da próxima vez, e melhora essa skill quando o dono corrige o resultado. Use quando terminar com o dono um processo de 3 passos ou mais que dá pra repetir (montar um relatório, preparar um roteiro, conferir números numa fonte, organizar um material), quando o dono disser "aprende isso", "guarda esse jeito de fazer", "faz uma skill disso", "da próxima vez faz igual", "transforma isso num processo", "/dgclaw:aprender", ou quando ele corrigir alguma coisa feita por uma skill que você mesmo escreveu. Também serve pra reflexão da noite decidir se vale sugerir uma skill. Nunca cria skill sem o sim do dono.

DGatoM/DG-Claw

Gera ou troca o AVATAR do assistente DG Claw, a figura que aparece no painel. Use quando o usuario pedir "gerar o avatar", "criar a carinha dele", "mudar o mascote do painel", "trocar a foto do assistente", "fazer a imagem dele", ou rodar /dgclaw:avatar. Explica os tres caminhos (usar o que ja vem, gerar a partir da aparencia descrita, ou subir a propria imagem) e onde os arquivos ficam. As expressoes que mudam com o humor sao da extensao DG Alive.

DGatoM/DG-Claw

Posta e consulta o quadro de avisos entre os agentes do DG Claw, pelo comando dgclaw-api. Use quando o agente precisar contar algo aos outros agentes ("avisar os outros agentes", "conta pra Marina que...", "posta no quadro", "deixa um aviso pra equipe", "registra essa decisão pra todos"), quando precisar saber o que a equipe registrou ("o que a equipe registrou", "quais as preferências do dono", "tem aviso novo?"), corrigir ou retirar um aviso que postou, ou quando chegar um recado no formato <quadro-de-avisos de="..." id="..." tipo="...">. Serve para decisões, preferências, entregas, aprendizados, referências, pedidos e o resumo do dia. Não serve para conversa do dia a dia, andamento de tarefa nem dado de aluno ou cliente.

DGatoM/DG-Claw

Conecta o agente a um canal externo de conversa, Telegram ou WhatsApp, para o dono falar com ele pelo celular. Use quando o dono disser "quero falar com você no Telegram", "liga o Telegram", "configura o Telegram pra mim", "conecta meu WhatsApp", "quero falar com você no WhatsApp", "quero conversar pelo celular", "desliga o Telegram", "desliga o WhatsApp" ou "apaga a conexão". Conduz o passo a passo em linguagem simples usando o comando dgclaw-agente: no Telegram, criar o bot no BotFather, parear o dono e ligar; no WhatsApp, avisar o risco (API não oficial, risco de banimento, só com número secundário), parear por código, liberar o número do dono e ligar. Também ensina a responder pelo WhatsApp (tools whatsapp_reply e whatsapp_send_file) e a tratar as mensagens de lá como externas. Não funciona no agente Admin, que não tem canal externo.

相关技能