com um clique
schedule
Create, schedule, and manage autonomous AI-agent tasks with systemd timers
Instalar com Codex ou Claude Copie este prompt, cole no Codex, Claude ou outro assistente e deixe que ele revise a página da skill e instale para você.
Menu
Create, schedule, and manage autonomous AI-agent tasks with systemd timers
Instalar com Codex ou Claude Copie este prompt, cole no Codex, Claude ou outro assistente e deixe que ele revise a página da skill e instale para você.
Baseado na classificação ocupacional SOC
Run the self-improvement pipeline to analyze usage, plan, and apply Claude Code configuration improvements
Create and manipulate Obsidian Canvas (.canvas) files using the JSON Canvas spec
Create a git commit with proper conventional commit message
Code generation, exploration, and image analysis via Codex CLI
Query Gemini CLI for quick lookups, deep research, and approach comparison
Populate styled ODT/OTT templates with content while preserving formatting
| name | schedule |
| description | Create, schedule, and manage autonomous AI-agent tasks with systemd timers |
| user_invocable | true |
| argument_hint | [list|run <file>|cancel <name>|cleanup|attention] |
Schedule autonomous Claude Code tasks that execute on systemd timers with explicit, user-approved permissions.
/schedule — Interactive: create a new task, interview for permissions, schedule it/schedule list — Show all pending/scheduled tasks with their approved permissions/schedule run <file> — Execute a task immediately (uses its approved permissions)/schedule cancel <name> — Disable and remove a scheduled timer/schedule cleanup — Purge old completed tasks, surface needs-attention items/schedule attention — List tasks that failed max retries and need human review~/proj/AUTOMATE/scheduled/
pending/ # Task definitions waiting to be scheduled
completed/ # Finished tasks with execution logs appended
needs-attention/ # Tasks that exceeded max retries
templates/ # Reusable task file templates
scripts/ # Helper scripts associated with scheduled tasks
task-runner # Execution wrapper script
Scripts in scripts/ MUST be named with the same base name as their associated task file. For example:
pending/workday-checkin.mdscripts/workday-checkin_wrapper.shIf a task needs multiple scripts, use the task name as a prefix with a descriptive suffix:
scripts/workday-checkin_wrapper.shscripts/workday-checkin_summarizer.shWhen creating a new task that requires helper scripts, place them in scripts/ following this convention. Reference them by full path in the task's allowedTools frontmatter.
Markdown files with YAML frontmatter. Filenames: short-description.md (descriptive slug, no date prefix — creation date goes in frontmatter).
---
summary: One-line description
created: "YYYY-MM-DD"
schedule: "YYYY-MM-DDTHH:MM"
expires: "YYYY-MM-DD"
model: sonnet
recurring: true
max_iterations: 10
until: "YYYY-MM-DD"
tags: [category]
allowedTools:
- "Bash(specific-command:*)"
- "Read(path/to/files/*)"
- "Edit(path/to/specific/file.nix)"
---
# Task Title
## Context
Why this task exists.
## Steps
1. Concrete action
2. Another action
## Success Criteria
- What "done" looks like
/schedule with no args)When the user runs /schedule, follow this exact workflow:
Ask the user to describe the task, or point to an existing task file in pending/. If they describe it, create the task file in pending/ with the correct frontmatter format.
Analyze the task steps and determine what tools and permissions are needed for autonomous execution. Be specific — never request blanket permissions. For each step, determine:
Bash(command:args_glob) syntax — note the colon separates the command from the args glob (e.g., Bash(systemctl --user show-environment:*), NOT Bash(systemctl --user show-environment *) and NOT Bash(*))Read(modules/home/desktop/addons/hypridle/*))Edit(modules/home/desktop/addons/hypridle/default.nix))Present the permission list to the user in a clear format:
This task requires the following permissions for autonomous execution:
Bash:
- systemctl --user show-environment:*
- git add:<relevant paths>
- git commit:*
File Read:
- path/to/relevant/files/*
File Edit:
- path/to/specific/file.nix
Schedule: YYYY-MM-DDTHH:MM
Expires: YYYY-MM-DD
Model: sonnet
Also ask which model should execute the task:
Default to sonnet if the user has no preference.
For recurring tasks, also ask about lifecycle limits:
Use AskUserQuestion to get approval. The user can approve, modify the list, or reject.
Write the approved allowedTools list into the task file's YAML frontmatter.
Generate and install the systemd timer + service units.
Resolve the claude binary path before writing the service:
CLAUDE_BIN=$(which claude)
Service unit (~/.config/systemd/user/agent-action-<name>.service):
[Unit]
Description=Scheduled AI Task: <summary>
[Service]
Type=oneshot
ExecStart=/home/dtgagnon/proj/AUTOMATE/scheduled/task-runner /home/dtgagnon/proj/AUTOMATE/scheduled/pending/<filename> agent-action-<name>
Environment=PATH=/run/current-system/sw/bin:/home/dtgagnon/.nix-profile/bin:%h/.local/bin
Timer unit (~/.config/systemd/user/agent-action-<name>.timer):
[Unit]
Description=Timer for AI Task: <summary>
[Timer]
OnCalendar=<schedule converted to systemd calendar format>
# IMPORTANT: systemd uses "YYYY-MM-DD HH:MM:SS" (space separator), NOT ISO 8601 "T".
# Convert task frontmatter "2026-02-09T10:00" → "2026-02-09 10:00:00"
Persistent=true
[Install]
WantedBy=timers.target
Then enable and start the timer:
systemctl --user daemon-reload
systemctl --user enable --now agent-action-<name>.timer
Report to the user:
/schedule cancel <name>/schedule run <filename>/schedule listList all tasks across directories with status:
# Check pending tasks
ls ~/proj/AUTOMATE/scheduled/pending/
# Check active timers
systemctl --user list-timers 'agent-action-*'
# Check needs-attention
ls ~/proj/AUTOMATE/scheduled/needs-attention/
Format output as a table showing: filename, summary, schedule, status (pending/scheduled/needs-attention/completed).
For scheduled tasks, also show the approved allowedTools from the frontmatter.
/schedule run <file>Execute a task immediately without waiting for the timer:
pending/ (or accept a full path)allowedTools are present in frontmatter — refuse to run without them~/proj/AUTOMATE/scheduled/task-runner ~/proj/AUTOMATE/scheduled/pending/<file> manual-run
/schedule cancel <name>systemctl --user disable --now agent-action-<name>.timer
rm ~/.config/systemd/user/agent-action-<name>.{timer,service}
systemctl --user daemon-reload
pending/ — it's not deleted, just unscheduled/schedule cleanupneeds-attention/ with a summary of their failure logs/schedule attentionneeds-attention/recurring: true in frontmatter. The timer stays active across runs. On success, the log is appended but the task stays in pending/. On failure, a symlink is created in needs-attention/ for visibility (cleaned up on the next successful run). Use OnCalendar patterns like Sun *-*-* 04:00:00 for weekly schedules. Optional lifecycle limits:
max_iterations: N — stop after N successful executions (0 = unlimited, default)until: "YYYY-MM-DD" — stop after this date (empty = no limit, default)completed/ and its timer is cleaned up.~/proj/AUTOMATE/scheduled/task-runner — it handles execution, verification, retry logic, and cleanup.