agent-reveille
v0.1.14
Published
AI agent task scheduler with launchd integration
Maintainers
Readme
reveille
AI agent task scheduler for macOS. Schedule Claude Code, Codex, Gemini, and other AI agents to run automatically via launchd — from development automation to daily routines.
$ reveille list
reveille - Tasks
ID NAME AGENT SCHEDULE STATUS LAST RUN
─────────────────────────────────────────────────────────────────────────────────
a1b2c3d4 Run tests claude At 09:03 AM ● active 3 hours ago
e5f6g7h8 Daily note claude At 08:00 AM ● active 12 hours ago
i9j0k1l2 Update deps codex At 12:00 AM, Mon ● paused 3 days ago
3 task(s)Why reveille?
AI agents like Claude Code are not just coding tools — they can be your daily partner. Automate development tasks like running tests and fixing lint errors, but also personal routines like writing daily notes, journaling, or end-of-day reflections. But scheduling them requires manual launchd plist configuration, environment variable management, and log handling.
reveille bridges this gap:
- One command to schedule — no plist XML, no
launchctljuggling - Built for AI agents — presets for Claude Code, Codex, Gemini, Aider
- Not just for code — schedule daily notes, reflections, or any recurring agent task
- Execution tracking — every run is logged with status, duration, and output
- TUI dashboard — monitor all your scheduled agents in one view
Install
npm install -g agent-reveilleOr run directly:
npx agent-reveilleRequires Node.js 20+.
Quick Start
1. Create a task
Interactive wizard:
reveille addOr non-interactive:
reveille add \
--name "Daily tests" \
--agent claude \
--cmd 'claude -p "run the test suite and fix any failures" --dangerously-skip-permissions' \
--cron "3 9 * * *" \
--dir ~/projects/my-app2. Check your tasks
reveille list3. Run a task immediately
reveille run <task-id>4. View execution history
reveille logs <task-id>5. Open the dashboard
reveilleCommands
| Command | Description |
| ----------------------- | ------------------------------------------------ |
| reveille add | Create a new scheduled task (interactive wizard) |
| reveille list | List all tasks with status and last run |
| reveille run <id> | Execute a task immediately |
| reveille logs [id] | View execution history |
| reveille enable <id> | Enable scheduling (load launchd plist) |
| reveille disable <id> | Disable scheduling (unload launchd plist) |
| reveille remove <id> | Delete a task and its plist |
| reveille dashboard | Open TUI dashboard (also the default) |
Dashboard
The interactive dashboard provides a full overview of your scheduled tasks.
reveille - AI Agent Task Scheduler v0.1.0
──────────────────────────────────────────────────────────────────────
Tasks
❯ a1b2c3d4 Run tests claude At 09:03 AM ● active 3h ago
e5f6g7h8 Lint & fix claude Every 2 hours ● active 45m ago
──────────────────────────────────────────────────────────────────────
Run tests (a1b2c3d4)
Command: claude -p "run the test suite" --dangerously-skip-permissions
Dir: /Users/you/projects/my-app
Last Execution:
✓ success | Duration: 2m 34s | Exit: 0
All 47 tests passed.
j/k navigate a add r remove space toggle R run now l logs q quitKey bindings:
| Key | Action |
| --------- | --------------------- |
| j / k | Navigate up/down |
| a | Add new task |
| r | Remove selected task |
| Space | Toggle enable/disable |
| R | Run selected task |
| l | View logs |
| q | Quit |
Supported Agents
| Agent | Binary | Non-interactive flag |
| ----------- | -------- | -------------------------------------------- |
| Claude Code | claude | -p "prompt" --dangerously-skip-permissions |
| Codex CLI | codex | -q "prompt" |
| Gemini CLI | gemini | -p "prompt" |
| Aider | aider | --message "prompt" |
| Custom | any | user-defined command |
reveille auto-detects which agents are installed on your system.
How It Works
Architecture
┌──────────┐ ┌──────────────────┐ ┌──────────────────┐
│ launchd │────▶│ reveille run <id> │────▶│ AI Agent CLI │
│ (macOS) │ │ (executor) │ │ (claude, etc.) │
└──────────┘ └──────────────────┘ └──────────────────┘
│
▼
┌──────────────────┐
│ Logs & Status │
│ (~/.config/ │
│ reveille/) │
└──────────────────┘reveille does not call your AI agent directly from launchd. Instead, the generated plist runs reveille run <task-id>, which:
- Records execution start
- Spawns the agent command with proper environment variables
- Captures stdout/stderr to log files
- Records the result (exit code, duration, status)
This gives you full execution tracking without any extra setup.
launchd Integration
When you create a scheduled task, reveille:
- Generates a plist file at
~/Library/LaunchAgents/com.reveille.task.<id>.plist - Converts your cron expression to launchd's
StartCalendarIntervalorStartInterval - Injects your shell's
PATHso agent binaries are found - Loads the plist via
launchctl load
Unlike raw crontab, launchd survives sleep/wake cycles and is the native macOS scheduler.
Data Storage
| Path | Contents |
| -------------------------------------------------- | ---------------------------- |
| ~/.config/reveille/tasks.json | Task definitions |
| ~/.config/reveille/executions.json | Execution history |
| ~/.local/share/reveille/logs/<task-id>/ | Full stdout/stderr log files |
| ~/Library/LaunchAgents/com.reveille.task.*.plist | Generated launchd plists |
Examples
Run tests every morning
reveille add \
--name "Morning tests" \
--cmd 'claude -p "run all tests, fix failures, and commit fixes" --dangerously-skip-permissions' \
--cron "3 9 * * *" \
--dir ~/projects/my-appLint check every 2 hours
reveille add \
--name "Lint patrol" \
--cmd 'claude -p "run the linter and fix all warnings" --dangerously-skip-permissions' \
--cron "7 */2 * * *" \
--dir ~/projects/my-appWeekly dependency update
reveille add \
--name "Dep update" \
--cmd 'claude -p "update all dependencies to latest compatible versions, run tests, commit if passing" --dangerously-skip-permissions' \
--cron "0 10 * * 1" \
--dir ~/projects/my-appDaily note every morning
reveille add \
--name "Daily note" \
--agent claude \
--cmd 'claude -p "Create today'\''s daily note in ~/notes/. Include the date, a summary of recent git activity across my projects, and a section for TODOs." --dangerously-skip-permissions' \
--cron "0 8 * * *" \
--dir ~/notesEnd-of-day reflection
reveille add \
--name "Evening reflection" \
--agent claude \
--cmd 'claude -p "Review what I worked on today based on git logs and open TODOs. Write a brief reflection in ~/notes/reflections/ with wins, blockers, and what to focus on tomorrow." --dangerously-skip-permissions' \
--cron "0 18 * * 1-5" \
--dir ~/notesManual task (run on demand only)
reveille add \
--name "Full review" \
--cmd 'claude -p "review the entire codebase for security issues" --dangerously-skip-permissions' \
--dir ~/projects/my-app
# Select "Manual only" for schedule typeCron Expression Reference
| Expression | Meaning |
| -------------- | ------------------------------------ |
| 0 9 * * * | Every day at 9:00 AM |
| */30 * * * * | Every 30 minutes |
| 0 */2 * * * | Every 2 hours |
| 0 10 * * 1 | Every Monday at 10:00 AM |
| 0 0 1 * * | First day of every month at midnight |
Claude Code Integration
reveille ships with a Claude Code skill so you can manage scheduled tasks directly from Claude Code conversations.
Setup
The skill is automatically available when you open this project in Claude Code.
Usage
Just type /reveille followed by what you want to do:
/reveille schedule daily tests at 9am
/reveille show my tasks
/reveille check the logs for task a1b2c3d4Claude Code will translate your request into the appropriate reveille command and run it for you.
Development
git clone https://github.com/mori-ri/agent-reveille.git
cd reveille
npm install
# Run in dev mode
npx tsx bin/reveille.ts --help
npx tsx bin/reveille.ts add
npx tsx bin/reveille.ts list
# Run tests
npm test
# Build
npm run buildLicense
MIT
