Setup cron
Use when the user asks to schedule daily-cycle, set up cron, or run daily-cycle every day. Installs an OS-level schedule (macOS LaunchAgent / Windows Task / Linux cron) for `/daily-cycle PROJECT`. Also covers the in-Claude-Code /loop alternative.From its SKILL.md
npx -y skills add aitit-inc/leadace --skill setup-cronAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
7.3 KB, ~1.9k tokens by cl100k_base, as published. Nobody here has run it
Setup-cron - Schedule Daily Automation
Installs an OS-scheduler entry that runs /daily-cycle <project> headless on a daily schedule. One entry per project: re-running for the same project replaces its entry; entries for different projects coexist.
Before starting: Read ${CLAUDE_PLUGIN_ROOT}/references/workspace-conventions.md and follow the cross-cutting conventions there.
Prerequisites — verify, and abort with the fix if missing
- At least one project exists. None -> "Run
/leadace <your-homepage-URL>first." claudeCLI on PATH (which claude; capture the absolute path). Missing -> offer the/loopalternative.- Headless runs cannot answer permission prompts: any tool without a stored allow rule is denied, and repeated denials abort the run. The user should have run
/daily-cycleinteractively at least once from this directory, answering "always allow" for its tools; if they haven't, warn that scheduled runs may abort until they do. Never compensate with permission-bypass flags — denying un-allowed tools is the intended fail-safe. - The MCP OAuth token is reused from interactive sessions and expires after ~30 days of inactivity; scheduled runs then fail until the user signs in interactively again.
Confirm with the user
Use AskUserQuestion for enumerable choices, plain text for free-form input.
- Project:
$0if given; elselist_projects— exactly one -> use it, several -> ask. - Method: the OS scheduler matching
uname -s, or in-Claude-Code/loop. If/loop: print/loop 24h /daily-cycle <PROJECT_NAME>(runs only while that session stays open) and stop./schedulecloud routines cannot run LeadAce yet — plugin skills and the MCP server are not available in cloud runs. - Schedule: time (24h
HH:MM, local timezone, default09:00) and frequency (every day / weekdays only). - Model: default = omit
--modelso the run uses the user's configured model; add--model <name>only if the user names one. - Show the exact file/command about to be installed and ask "Install now / just print". On print: output the commands and stop.
Invariants of the scheduled command
Every template below must:
- run
<CLAUDE_PATH> -p "/daily-cycle <PROJECT_NAME>" --permission-mode dontAsk(plus--modelif chosen), with<CLAUDE_PATH>absolute — schedulers don't inherit shell PATH - set
CLAUDE_CODE_PRINT_BG_WAIT_CEILING_MS=10800000(3 h) — daily-cycle runs its phases as sub-agents, and headless mode otherwise cuts sub-agent waits off at 10 minutes - start in the current session's working directory (
<WORKDIR>=pwd) — plugins, MCP servers, and permission rules are discovered from the cwd, so a different start directory can silently lose the LeadAce plugin - carry
LEADACE_MCP_URLinto the entry's environment if it is set in the current session (self-host) — schedulers don't read shell rc files. Place it alongsideCLAUDE_CODE_PRINT_BG_WAIT_CEILING_MS(plistEnvironmentVariables/ cron line prefix /.cmdset); omit entirely when unset - embed
<PROJECT_SLUG>in every named artifact — scheduler label/task name, plist/wrapper file, crontab tag, log files — so schedules for several projects coexist and replace/remove operations touch only their own project - append stdout/stderr to a log file in the user's home
Templates
Substitute <HH>, <MM>, <PROJECT_NAME>, <PROJECT_SLUG>, <CLAUDE_PATH>, <WORKDIR>, <HOME>.
<PROJECT_SLUG> = the project name lowercased, with every character outside [a-z0-9] replaced by - (collapse runs, trim leading/trailing -).
macOS — <HOME>/Library/LaunchAgents/ai.leadace.daily-cycle.<PROJECT_SLUG>.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>ai.leadace.daily-cycle.<PROJECT_SLUG></string>
<key>ProgramArguments</key>
<array>
<string><CLAUDE_PATH></string>
<string>-p</string>
<string>/daily-cycle <PROJECT_NAME></string>
<string>--permission-mode</string>
<string>dontAsk</string>
</array>
<key>WorkingDirectory</key>
<string><WORKDIR></string>
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key><integer><HH></integer>
<key>Minute</key><integer><MM></integer>
</dict>
<key>StandardOutPath</key>
<string><HOME>/Library/Logs/leadace-daily-cycle.<PROJECT_SLUG>.log</string>
<key>StandardErrorPath</key>
<string><HOME>/Library/Logs/leadace-daily-cycle.<PROJECT_SLUG>.err.log</string>
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/usr/local/bin:/opt/homebrew/bin:/usr/bin:/bin</string>
<key>CLAUDE_CODE_PRINT_BG_WAIT_CEILING_MS</key>
<string>10800000</string>
</dict>
</dict>
</plist>
Weekdays only: make StartCalendarInterval an array of five dicts, each also containing <key>Weekday</key><integer>N</integer> for N in 1-5.
Write the plist with the Write tool (heredoc escaping is error-prone), then install:
mkdir -p ~/Library/LaunchAgents
launchctl unload ~/Library/LaunchAgents/ai.leadace.daily-cycle.<PROJECT_SLUG>.plist 2>/dev/null
launchctl load ~/Library/LaunchAgents/ai.leadace.daily-cycle.<PROJECT_SLUG>.plist
Linux — user crontab
<MM> <HH> * * * cd <WORKDIR> && CLAUDE_CODE_PRINT_BG_WAIT_CEILING_MS=10800000 <CLAUDE_PATH> -p "/daily-cycle <PROJECT_NAME>" --permission-mode dontAsk >> <HOME>/.leadace-daily-cycle.<PROJECT_SLUG>.log 2>&1 # leadace-daily-cycle-<PROJECT_SLUG>
Weekdays only: <MM> <HH> * * 1-5. Install by replacing any existing line with the same tag:
( crontab -l 2>/dev/null | grep -v "# leadace-daily-cycle-<PROJECT_SLUG>" ; echo '<the line above>' ) | crontab -
Windows — Task Scheduler
Write <HOME>\leadace-daily-cycle-<PROJECT_SLUG>.cmd (a wrapper file sidesteps /TR quoting limits):
@echo off
cd /d <WORKDIR>
set CLAUDE_CODE_PRINT_BG_WAIT_CEILING_MS=10800000
"<CLAUDE_PATH>" -p "/daily-cycle <PROJECT_NAME>" --permission-mode dontAsk >> "%USERPROFILE%\leadace-daily-cycle-<PROJECT_SLUG>.log" 2>&1
schtasks /Create /TN LeadAceDailyCycle-<PROJECT_SLUG> /SC DAILY /ST <HH>:<MM> /TR "\"<HOME>\leadace-daily-cycle-<PROJECT_SLUG>.cmd\"" /F
Weekdays only: /SC WEEKLY /D MON,TUE,WED,THU,FRI.
Verify, then report
Verification (on failure: show the raw output and stop without claiming success):
- macOS:
launchctl list | grep ai.leadace.daily-cycle.<PROJECT_SLUG> - Linux:
crontab -l | grep leadace-daily-cycle-<PROJECT_SLUG> - Windows:
schtasks /Query /TN LeadAceDailyCycle-<PROJECT_SLUG>
Report: the schedule (time, frequency, project), the installed file/task, the log path, how to remove it (macOS: launchctl unload <plist> && rm <plist> / Linux: crontab -l | grep -v "# leadace-daily-cycle-<PROJECT_SLUG>" | crontab - / Windows: schtasks /Delete /TN LeadAceDailyCycle-<PROJECT_SLUG> /F), and the ~30-day OAuth reminder from Prerequisites.
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.