automating-calendar — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited automating-calendar (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.
automating-mac-apps for general app permissions, shell commands, UI scripting, and cross-app automation patterns.automating-mac-apps skill (PyXA Installation section).Implementation Notes: See automating-calendar/references/calendar-basics.md
1) [ ] Discover Calendar dictionary terms in Script Editor. 2) [ ] Prototype minimal AppleScript commands. 3) [ ] Port to JXA with defensive error handling. 4) [ ] Implemented batch reads (avoided heavy .whose()). 5) [ ] Added EventKit bridge for advanced queries. 6) [ ] Tested with sample events and verified results.
Calendar.calendars.length > 0if (!event.id()) throw new Error('Event creation failed')Calendar.calendars.length > 0Basic Event Creation (JXA - Legacy):
const Calendar = Application("Calendar");
const event = Calendar.calendars[0].events.push(Calendar.Event({
summary: "Meeting",
startDate: new Date(),
endDate: new Date(Date.now() + 3600000)
}));Basic Event Creation (PyXA - Recommended):
import PyXA
from datetime import datetime, timedelta
calendar = PyXA.Calendar()
# Get first calendar
work_calendar = calendar.calendars()[0]
# Create event
event = work_calendar.events().push({
"summary": "Meeting",
"start_date": datetime.now(),
"end_date": datetime.now() + timedelta(hours=1),
"location": "Conference Room A"
})
print(f"Created event: {event.summary()}")PyObjC with EventKit (Advanced):
from EventKit import EKEventStore, EKEvent, EKCalendar
from Foundation import NSDate, NSTimeInterval
import objc
# Initialize event store
store = EKEventStore.alloc().init()
# Request access (async in real implementation)
# store.requestAccessToEntityType_completion_(EKEntityTypeEvent, None)
# Get default calendar
calendars = store.calendarsForEntityType_(EKEntityTypeEvent)
if calendars:
default_calendar = calendars[0]
# Create event
event = EKEvent.eventWithEventStore_(store)
event.setTitle_("Meeting")
event.setStartDate_(NSDate.date())
event.setEndDate_(NSDate.dateWithTimeIntervalSinceNow_(3600)) # 1 hour
event.setCalendar_(default_calendar)
# Save event
error = objc.nil
success = store.saveEvent_span_error_(event, EKSpanThisEvent, error)
if success:
print(f"Event created: {event.title()}")
else:
print(f"Error creating event: {error}")EventKit Bridge Query (JXA - Legacy):
ObjC.import('EventKit');
const store = $.EKEventStore.alloc.init;
// See 'eventkit-query.md' for full predicate implementationEventKit Bridge Query (PyObjC - Modern):
from EventKit import EKEventStore, EKEntityTypeEvent, NSPredicate
from Foundation import NSDate
store = EKEventStore.alloc().init()
# Get events for today
start_date = NSDate.date() # Today
end_date = NSDate.dateWithTimeIntervalSinceNow_(86400) # Tomorrow
calendars = store.calendarsForEntityType_(EKEntityTypeEvent)
predicate = store.predicateForEventsWithStartDate_endDate_calendars_(
start_date, end_date, calendars)
events = store.eventsMatchingPredicate_(predicate)
for event in events:
print(f"Event: {event.title()}, Start: {event.startDate()}")automating-calendar/references/calendar-basics.mdautomating-calendar/references/calendar-recipes.mdautomating-calendar/references/calendar-advanced.mdautomating-calendar/references/calendar-dictionary.mdautomating-calendar/references/calendar-pyxa-api-reference.mdautomating-calendar/references/eventkit-query.mdautomating-calendar/references/eventkit-create.mdautomating-calendar/references/eventkit-timezones.mdautomating-calendar/references/eventkit-exceptions.mdautomating-calendar/references/eventkit-occurrence-cancel.md~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.