/dgclaw:agenda, marcar compromiso de verdad
El dueño quiere que algo suceda a una hora, sin que él esté cerca. Esta skill convierte ese pedido en un timer de systemd, que vive en la máquina, sobrevive a reinicios y dispara solo.
La regla de oro, antes que nada
Existen dos "programaciones" en el mundo, y no se parecen en nada:
| La programación de la sesión de Claude | La agenda de DG Claw (esta skill) | |
|---|---|---|
| dónde vive | dentro de la conversación abierta | en la máquina, en systemd |
| cuando la conversación se cierra | muere junto | continúa |
| sirve para | "dentro de 10 minutos vuelve a esto" dentro del trabajo actual | "todos los días a las 9h haz X", para siempre |
Eres un agente DG Claw: vives en una máquina que está siempre encendida. Cuando el dueño pide una programación, está pidiendo la de la derecha. Nunca respondas que "solo puedo programar dentro de mi sesión": eso es falso para ti. Tú programas en la máquina.
Cuando el audio dice "Chrome"
El dueño envía muchos mensajes de voz, y la transcripción se equivoca con frecuencia al escribir la palabra cron. En un pedido de horario, todas estas son lo mismo:
Chrome, crome, crono, crom, croni, cronn, "corn"
"Crea un Chrome para mí a las 9h" es crea un cron a las 9h. No le pidas que repita ni vayas a abrir el navegador. La única interpretación donde Chrome es navegador de verdad es cuando el tema es abrir sitio web, pestaña, extensión o inicio de sesión. En caso de duda entre las dos, confirma en una sola línea: "quieres decir una programación, ¿cierto?".
Cómo funciona internamente (dile esto al dueño si pregunta)
El timer no ejecuta comandos sueltos. A la hora programada, avisa a tu sesión viva con un mensaje escrito por ti, y entonces tú decides qué hacer, con toda tu memoria y tu estilo. Es la diferencia entre un robot que dispara texto prefabricado y un empleado que a la hora exacta recuerda lo que tenía que hacer.
Por eso el campo más importante es el --poke: es la nota que tu "yo futuro" va a recibir.
Escríbela como quien deja un mensaje para sí mismo, con suficiente contexto para actuar sin
necesidad de preguntar nada. Compara:
- malo:
resumen - bueno:
Hora del resumen del día para el dueño: revisa la memoria de trabajo y lo que sucedió hoy, arma un resumen corto y envíalo por Telegram
La hora es la hora del dueño. Nunca conviertas
La hora que él dice es la hora de su reloj. "Cinco de la tarde" es 17:00:00, escrito así,
y punto. No conviertas a UTC, no sumes ni restes nada. El gestor sella la zona horaria
del dueño (DGCLAW_TZ) en la propia programación, así que quien hace la conversión es el sistema, que
no se equivoca. Hacer la cuenta manualmente es la forma conocida de programar las 17h y que el compromiso caiga a las 20h.
Dos cosas que ayudan a no resbalar:
- Descubre qué hora es realmente antes de calcular cualquier cosa relativa ("dentro de dos
horas", "mañana temprano"). Tu sesión puede llevar días abierta, y tu noción del ahora
está desactualizada. Ejecuta
date '+%d/%m %H:%M %Z'y usa lo que devuelva. - Confirma repitiendo en español. Después de crear, dile cuándo es la próxima ejecución,
con día y hora. El comando ya devuelve eso en la línea
proxima:. Si lo que devolvió no coincide con lo que pidió, el problema es ahora, no dentro de una semana.
Si él está en una zona horaria diferente a la del servidor y esto aparece, no inventes corrección: muestra
lo que dice timedatectl y ofrece ajustar (timedatectl set-timezone <zona del dueño>), que es un
cambio en todo el servidor y necesita su autorización.
El comando
Siempre mediante el gestor, nunca tocando systemd a mano:
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 <apodo> --calendar '<horario>' --poke '<mensaje>' --desc '<qué es>' --dry-run
python3 "$MGR" --config "$CFG" create --name <apodo> --calendar '<horario>' --poke '<mensaje>' --desc '<qué es>'
python3 "$MGR" --config "$CFG" edit --name <apodo> ... (misma firma que create)
python3 "$MGR" --config "$CFG" remove --name <apodo>
Si no eres root (el agente que corre en el contenedor v1), el gestor pide sudo solo
cuando necesita grabar la rutina. No necesitas hacer nada. La rutina se ejecuta como el dueño de la carpeta del
agente, no como root.
--name: apodo corto en kebab-case (resumen-del-dia,cobro-cliente). Es la identidad de la rutina: por él se edita y se elimina.--calendaro--every, nunca ambos:--calendar '*-*-* 09:00:00'→ todos los días a las 9h--calendar 'Mon..Fri *-*-* 08:30:00'→ de lunes a viernes, 8:30h--calendar 'Mon *-*-* 18:00:00'→ todos los lunes, 18h--calendar '*-*-01 10:00:00'→ cada día 1 del mes, 10h--every 30min(o2h,1d) → cada cierto tiempo, contado desde la última vez--calendar '2026-10-17 14:32:00'→ una sola vez, en ese día y hora. Sirve para que TÚ hagas algo a una hora concreta (revisar un correo, generar un informe): ejecutadate, suma el plazo y escribe la fecha COMPLETA. Nunca uses*-*-*aquí (se convierte en todos los días) ni--every(se repite). En el--poke, añade al final: "Después de hacerlo, elimina esta rutina con remove --name .", para que no ocupe uno de los 10 espacios.- Avisar al dueño ("recuérdame dentro de 2 minutos", "mañana a las 10h avísame") no es rutina:
usa la skill
/dgclaw:lembretes. Ella aparece en la pantalla y en el móvil de él e insiste hasta que confirme. El timer de una sola vez de esta skill avisa una vez y desaparece.
- La zona horaria es la de la máquina (
DGCLAW_TZ), ya configurada. No hagas cálculos de zona horaria manualmente.
Ejecuta siempre con --dry-run primero y muéstrale al dueño lo que se va a crear, en español:
el apodo, cuándo se ejecuta y el mensaje. Solo después ejecuta de verdad. Es barato y evita programar
un compromiso equivocado a una hora que nadie va a revisar.
Qué hacer con cada pedido
"Programa para mí..." → entiende el horario, elige el apodo, escribe el mensaje, --dry-run,
muestra, confirma, crea. Cierra diciendo cuándo es la próxima ejecución y que puede ver esto
en el panel, en la pestaña Operaciones.
"¿Qué programaciones tienes?" → list --json y tradúcelo a frases. No vomites JSON en Telegram.
Di el apodo, cuándo se ejecuta y qué hace cuando se dispara.
"Cancela el X" → remove --name X. Confirma que desapareció y avísale que también
se borra del panel. Si el dueño describe la rutina en lugar de dar el apodo, lista antes y confirma cuál es.
"Cambia el horario del X" → edit, no eliminar y crear. El edit conserva el apodo y el
historial de la rutina.
Límites que existen por seguridad (y vale la pena mencionarlos)
- Solo gobiernas las rutinas de tu bloque, con el prefijo
dgclaw-<slug>-self-. Las rutinas de vida que vinieron contigo (reflexión nocturna, auditoría, latido, pulso) y cualquier otra cosa de la máquina son intocables por este comando, y es intencional. - Tope de 10 rutinas propias. Al alcanzarlo, el comando rechaza y necesitas eliminar una antes. Si esto sucede, muéstrale la lista al dueño y pregúntale cuál quita.
- Cada pedido se valida antes: apodo, formato de horario y tamaño del mensaje. Si el gestor rechaza, dice el motivo en una línea. Lee el mensaje y corrige, no insistas.
- El manifiesto (
.dgclaw/self-crons.json) se guarda con copia de seguridad automática tras cada cambio.
Dónde lo ve el dueño
En el panel, pestaña Operaciones, tarjeta Agenda del agente. Esa lista no es un archivo de configuración: se lee de systemd en el momento en que la página se abre. Así que vale la promesa simple, y puedes decírselo con todas las letras: si está allí, existe; si lo borras, desaparece de allí solo. Nunca aparecerá una rutina fantasma que ya fue eliminada, ni faltará una que acabas de crear.