Scheduled Tasks
abTARS runs scheduled tasks via a built-in task system. No crontab needed — the agent manages everything.
Creating tasks via chat
Just ask the agent in natural language:
| You say | What happens |
|---|---|
| "Remind me every morning at 9 to check emails" | Creates a recurring reminder at 09:00 daily |
| "Every Friday at 5pm, summarize my week" | Creates a recurring agent task — runs autonomously and sends you the result |
| "Remind me tomorrow at 3pm about the dentist" | Creates a one-shot reminder |
| "Run a backup every night at 3am" | Creates a recurring script task |
The agent reads the task skill, picks the right command, and confirms what it created. You don't need to know any CLI syntax.
How it works
The bridge heartbeat checks every 5 minutes for due tasks. When one fires:
| Type | Behavior |
|---|---|
| reminder | Sends the message to you through the agent's personality |
| task (executor: agent) | Spawns a subagent that works on the prompt, sends result when done |
| task (executor: script) | Runs a shell command, reports exit code + output |
Managing tasks in chat
| Command | Description |
|---|---|
/tasks | List all tasks with today's status |
/tasks trigger <id> | Run a task immediately |
/tasks log <id> | Show last 5 runs |
/task validate | Dry-run check of the task registry (read-only) |
Or just ask: "show my scheduled tasks", "cancel the morning reminder", "pause the backup task".
/task validate runs the same read-only validation as abtars-task validate in chat: it checks the live task registry for invalid entries, duplicate IDs, missing task files, missing required report files, and orphaned task package directories, and reports OK or FAILED with the findings. It is a dry run — it never schedules, runs, pauses, or changes any task, and it is not an execution simulation. The chat form always checks the live registry and takes no path argument; use abtars-task validate [path] to check a staged file.
Example: "Every Friday at 5pm, summarize my week"
- Agent reads the task skill, picks the right command
- Runs:
abtars-task add --schedule "0 17 * * 5" --message "Summarize what happened this week" --chat-id <your-ID> --type task --executor agent - Confirms: "Done — every Friday at 17:00 I'll summarize your week."
Every Friday at 5pm, the bridge fires the task, the agent works on it autonomously, and sends you the result on Telegram.
CLI reference
For direct management (or scripting):
# One-shot reminder
abtars-task add --at "2026-06-01T15:00" --message "Dentist appointment" --chat-id <ID> --type reminder
# Recurring task (agent executes)
abtars-task add --schedule "0 17 * * 5" --message "Summarize my week" --chat-id <ID> --type task --executor agent
# Recurring task with task file
abtars-task add --id weekly-report --schedule "0 17 * * 5" --message "Run weekly report" \
--task-file "~/.abtars/tasks/weekly-report/TASK.md" --chat-id <ID> --type task --executor agent
# Recurring task (script executes)
abtars-task add --schedule "0 3 * * *" --message "abmind backup" --chat-id <ID> --type task --executor script
# Management
abtars-task list
abtars-task remove <id>
abtars-task pause <id>
abtars-task resume <id>
abtars-task history <id>
abtars-task validate [path] # dry-run check of tasks.json (default: the live file)abtars-task validate reads the given tasks.json (or ~/.abtars/tasks/tasks.json when no path is given) and reports every problem as a single JSON value: invalid entries, duplicate IDs, missing task files, missing required report files, and orphaned task package directories. It exits 0 when the file is clean and 1 otherwise, and never modifies files or task state — it is a safe pre-deploy check after hand-editing tasks.json.
To validate a staged tree, point HOME and ABTARS_HOME at that tree's root before running the command, so ~-relative paths and the task package root match the staged layout.
Task file structure
Complex tasks live in their own directory under ~/.abtars/tasks/:
~/.abtars/tasks/
├── tasks.json # Registry (schedule, executor, taskFile)
├── weekly-report/
│ ├── TASK.md # Main prompt (what the agent does)
│ ├── sources.json # Data file (auto-injected as context)
│ └── template.md # Supporting file (auto-injected)
├── daily-backup/
│ └── TASK.md
└── finance-report/
├── TASK.md
├── feeds.json
└── stock-watchlist.mdWhen a task with a taskFile fires, the agent receives:
- The TASK.md content as the prompt
- All sibling files automatically injected as context (up to 10KB total)
Use {today} in TASK.md — it's replaced with today's date at runtime.
Schedule format
Standard cron: minute hour day month weekday
0 9 * * * → every day at 09:00
0 */4 * * * → every 4 hours
30 22 * * 1-5 → weekdays at 22:30
0 17 * * 5 → Fridays at 17:00Status indicators
✓ ran successfully today
✗ failed today
~ currently running
+ scheduled, not yet run
— not scheduled for today