review-scheduler — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited review-scheduler (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Manage spaced repetition review reminders for the Obsidian vault.
Parse user input arguments (args) to determine which subcommand to run:
start → execute Start Flowstop → execute Stop Flowstatus → execute Status CheckThis skill requires macOS. Check the platform first:
uname -sIf the output is not Darwin, inform the user that this skill is macOS-only (requires launchd, Swift compiler, and osascript) and stop.
Before any action, run these checks:
which python3 && python3 --version
python3 -c "import yaml; print('PyYAML OK')"
which swiftcIf any dependency is missing, stop immediately and report to user:
brew install python3pip3 install pyyamlxcode-select --installProceed only after all checks pass.
Use AskUserQuestion to ask:
"What time would you like to receive daily review reminders? (default 9:00, format: 08:30, 21:00)"
Parse user input into Hour and Minute. If user presses enter or says "default", use 9:00.
launchctl list 2>/dev/null | grep com.obsidian-vault-kit.review$VAULT_ROOT$VAULT_ROOTmkdir -p $VAULT_ROOT/.reviewmkdir -p $VAULT_ROOT/reviews{{VAULT_PATH}} with the actual $VAULT_ROOT absolute path{{VAULT_NAME}} with the actual vault name$VAULT_ROOT/.review/review_reminder.py{{PYTHON_PATH}} with the result of which python3{{SCRIPT_PATH}} with $VAULT_ROOT/.review/review_reminder.py$VAULT_ROOT/.review/unlock_watcher.swiftswiftc $VAULT_ROOT/.review/unlock_watcher.swift -o $VAULT_ROOT/.review/unlock_watcher -framework Cocoa{{PYTHON_PATH}}, {{SCRIPT_PATH}}, {{HOUR}}, {{MINUTE}}~/Library/LaunchAgents/com.obsidian-vault-kit.review.plist{{WATCHER_PATH}} with $VAULT_ROOT/.review/unlock_watcher~/Library/LaunchAgents/com.obsidian-vault-kit.review-watcher.plistlaunchctl load ~/Library/LaunchAgents/com.obsidian-vault-kit.review.plist
launchctl load ~/Library/LaunchAgents/com.obsidian-vault-kit.review-watcher.plistpython3 $VAULT_ROOT/.review/review_reminder.pyCheck whether a review note was generated (if any articles are due for review today).
Report to user:
reviews/ directory/review-scheduler stoplaunchctl list 2>/dev/null | grep com.obsidian-vault-kit.reviewIf not running → inform user "Review scheduler is not active" → end
launchctl unload ~/Library/LaunchAgents/com.obsidian-vault-kit.review.plist 2>/dev/null
launchctl unload ~/Library/LaunchAgents/com.obsidian-vault-kit.review-watcher.plist 2>/dev/null
rm -f ~/Library/LaunchAgents/com.obsidian-vault-kit.review.plist
rm -f ~/Library/LaunchAgents/com.obsidian-vault-kit.review-watcher.plistNote: keep .review/ directory and existing review notes in reviews/ — do not delete user data.
Inform user that the scheduled tasks have been stopped. Existing review notes are preserved.
# Check scheduled tasks
launchctl list 2>/dev/null | grep com.obsidian-vault-kit.review# Recent review notes (use native Glob, no Bash needed)
Glob("*.md", path="$VAULT_ROOT/reviews")Report to user:
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.