AgentStack
SKILL verified MIT Self-run

Calendar Recurring

skill-aashari-ai-agent-skills-calendar-recurring · by aashari

List all recurring meetings and meeting series. Use when user asks about standing meetings, recurring events, weekly syncs, or wants to see their regular meeting cadence.

No reviews yet
0 installs
15 views
0.0% view→install

Install

$ agentstack add skill-aashari-ai-agent-skills-calendar-recurring

✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

Are you the author of Calendar Recurring? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Calendar Recurring — Standing Meetings and Series

List all active recurring events, grouped by frequency.

Arguments

$ARGUMENTS — optional filter:

  • Empty → all recurring events
  • "weekly" → only weekly recurring
  • "standup" → search by name

Steps

DB="$HOME/Library/Group Containers/group.com.apple.calendar/Calendar.sqlitedb"
FILTER="$ARGUMENTS"

NOW_CD=$(( $(date +%s) - 978307200 ))

KEYWORD_FILTER=""
if [ -n "$FILTER" ] && ! echo "$FILTER" | grep -qiE '^(weekly|daily|monthly|yearly)$'; then
  KEYWORD_FILTER="AND ci.summary LIKE '%${FILTER}%'"
fi

FREQ_FILTER=""
case "$(echo $FILTER | tr '[:upper:]' '[:lower:]')" in
  daily)   FREQ_FILTER="AND r.frequency = 1" ;;
  weekly)  FREQ_FILTER="AND r.frequency = 2" ;;
  monthly) FREQ_FILTER="AND r.frequency = 3" ;;
  yearly)  FREQ_FILTER="AND r.frequency = 4" ;;
esac

sqlite3 -separator '|' "$DB" "
SELECT
  ci.summary as title,
  CASE r.frequency
    WHEN 1 THEN 'Daily'
    WHEN 2 THEN 'Weekly'
    WHEN 3 THEN 'Monthly'
    WHEN 4 THEN 'Yearly'
    ELSE 'Unknown'
  END as freq,
  r.interval as every_n,
  COALESCE(
    strftime('%H:%M', oc_next.occurrence_start_date + 978307200, 'unixepoch', 'localtime'),
    strftime('%H:%M', oc_next.occurrence_date + 978307200, 'unixepoch', 'localtime')
  ) as time_of_day,
  date(oc_next.occurrence_date + 978307200, 'unixepoch', 'localtime') as next_occurrence,
  COALESCE(l.title, '') as location,
  COALESCE(ci.conference_url, '') as conf_url,
  c.title as calendar,
  ci.has_attendees,
  ci.ROWID as id
FROM CalendarItem ci
JOIN Recurrence r ON r.owner_id = ci.ROWID
LEFT JOIN (
  SELECT event_id, MIN(occurrence_date) as occurrence_date, occurrence_start_date
  FROM OccurrenceCache
  WHERE occurrence_date >= $NOW_CD
  GROUP BY event_id
) oc_next ON oc_next.event_id = ci.ROWID
LEFT JOIN Calendar c ON ci.calendar_id = c.ROWID
LEFT JOIN Store s ON c.store_id = s.ROWID
LEFT JOIN Location l ON ci.location_id = l.ROWID
WHERE ci.hidden = 0
  AND ci.status != 2
  AND s.type != 5
  AND s.disabled = 0
  AND oc_next.occurrence_date IS NOT NULL
  $FREQ_FILTER
  $KEYWORD_FILTER
ORDER BY r.frequency, r.interval, COALESCE(oc_next.occurrence_start_date, oc_next.occurrence_date);
"

Output Format

Group by frequency:

Daily (N)

  • [time] Title — Every N days — [location/video]

Weekly (N)

  • [time] Title — Every week — [calendar]
  • [time] Title — Every 2 weeks (biweekly)

Monthly (N)

  • [time] Title — Monthly

Show has_attendees flag so user knows which are solo vs. group meetings. Note next occurrence date for each.

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet — be the first.

Versions

  • v0.1.0 Imported from the upstream source.