Skip to content
Automation
Command

/schedule-list

List all scheduled tasks with their status and next run times (project)

From plugin
scheduler
5087 skills7 commands
Install
> /plugin marketplace add jshchnz/claude-code-scheduler
> /plugin install scheduler@claude-scheduler

How it fires

How this command gets triggered: by you, by Claude, or both.

  • Fires itselfClaude auto-loads it when your prompt matches the work.
  • You can call itInvoke it directly when you want it.
  • Slash command/schedule-list

Context preview

What this command does when you run it.

List all scheduled tasks with their status and next run times (project)

Command definition

schedule-list.md
description: List all scheduled tasks with their status and next run times (project)
allowed-tools: Read, Bash(ls:*), Bash(cat:*), Bash(plutil:*), Bash(launchctl:*), Bash(crontab:*), Bash(schtasks:*)

List Scheduled Tasks

Display ALL scheduled tasks across all projects by scanning the native scheduler.

Process

1. **Discover ALL Registered Tasks from Native Scheduler**

**macOS (launchd):**

   ls ~/Library/LaunchAgents/com.claude.schedule.*.plist 2>/dev/null

For each plist found, extract task info:

   plutil -p ~/Library/LaunchAgents/com.claude.schedule.<id>.plist

**Linux (crontab):**

   crontab -l | grep "# claude-scheduler:"

**Windows:**

   schtasks /Query /FO CSV | findstr "ClaudeScheduler"

2. **Parse Task Information** From each native scheduler entry, extract:

  • **ID**: From filename/label (e.g., `com.claude.schedule.loc-review-joshing` → `loc-review-joshing`)
  • **Type**: Detect from filename:
  • `com.claude.schedule.once.<id>.plist` → **one-time**
  • `com.claude.schedule.<id>.plist` → **recurring**
  • **Project**: From `WorkingDirectory` in plist
  • **Schedule**:
  • **Recurring**: From `StartCalendarInterval` → pattern like "Daily at X"
  • **One-time**: Extract `TARGET=<timestamp>` from ProgramArguments, convert with `date -r <timestamp>`
  • **Command**: From `ProgramArguments`

**For one-time tasks**, extract target timestamp from bash command:

   # ProgramArguments contains: "TARGET=1736376240; NOW=..."
   # Extract and convert: date -r 1736376240 "+%b %d, %Y %I:%M %p"

3. **Enrich with Config Metadata (optional)**

  • If the task's `WorkingDirectory` has a `.claude/schedules.json`, read it for name/description
  • Fall back to ID as name if config not found

4. **Check Status**

   launchctl list | grep com.claude.schedule
  • Status `0` = enabled and healthy
  • Status `-` = loaded but never run

5. **Display Table** Format output as a table with columns:

  • ID (unique task identifier for use with other commands)
  • Type (one-time / recurring)
  • Project (working directory path, shortened with ~)
  • Schedule (human-readable: exact date for one-time, pattern for recurring)
  • Status (enabled/pending for one-time, enabled/disabled for recurring)

Output Format

# Scheduled Tasks

| ID                      | Type      | Project                    | Schedule              | Status  |
|-------------------------|-----------|----------------------------|-----------------------|---------|
| once.loc-review-sched   | one-time  | ~/Documents/GitHub/sched   | Jan 8, 2026 3:25 PM   | pending |
| loc-review-joshing      | recurring | ~/Documents/GitHub/joshing | Daily at 10:00 AM     | enabled |
| daily-code-review       | recurring | ~/Documents/GitHub/myapp   | Weekdays at 9:00 AM   | enabled |

**Total:** 3 tasks (1 one-time pending, 2 recurring)
**Platform:** macOS (launchd)

**Commands:** `/schedule-run <id>` | `/schedule-remove <id>` | `/schedule-logs <id>`

Converting Schedule to Human-Readable

Recurring Tasks (StartCalendarInterval):

<key>StartCalendarInterval</key>
<dict>
    <key>Hour</key><integer>10</integer>
    <key>Minute</key><integer>0</integer>
</dict>

→ "Daily at 10:00 AM"

With Weekday:

<key>Weekday</key><integer>1</integer>

→ "Mondays at 10:00 AM"

One-Time Tasks (StartInterval + timestamp):

One-time tasks use polling with embedded timestamp:

# ProgramArguments contains: "TARGET=1736376240; NOW=$(date +%s); if..."

Extract timestamp and convert:

date -r 1736376240 "+%b %d, %Y %I:%M %p"

→ "Jan 8, 2026 3:25 PM"

Additional Details

If the user asks for details about a specific task, read the plist and show:

  • Task ID
  • Full schedule configuration
  • Command to execute
  • Working directory
  • Log file paths
  • launchctl status

Empty State

If no plist files found:

No scheduled tasks found.

To create your first scheduled task, run:
  /schedule-add

Commands Reference

After listing, remind the user of available commands:

  • `/schedule-add` - Create a new task
  • `/schedule-remove <id>` - Remove a task
  • `/schedule-run <id>` - Run a task manually
  • `/schedule-logs <id>` - View task logs
  • `/schedule-status` - Check scheduler health
Read more
Ships withscheduler

Put Claude on autopilot. Schedule code reviews, security audits, and anything else - Claude Code runs them automatically, even while you sleep.

Get the whole plugin
Stats
508
Stars
37
Forks
Quiet
Maintenance
TypeScript
Language
MIT
License
6mo ago
Last commit
7mo ago
Created

Repo: jshchnz/claude-code-scheduler