Manage Google Calendar from the Command Line — No API Setup
Source: Dev.to
Introduction
Managing Google Calendar via the API normally requires a GCP project, OAuth consent screens, token handling, and parsing nested JSON.
The Nylas CLI streamlines this: a single authentication step lets you create, list, update, and delete events directly from the terminal, check availability, and handle time‑zone complexities.
Installation & Authentication
brew install nylas/nylas-cli/nylasnylas auth login
# => Browser opens for Google OAuth consent
nylas auth whoami
# => Authenticated as you@gmail.com (Google)Listing Events
# Next 10 events
nylas calendar list --limit 10
# Today's events only
nylas calendar list --from "today" --to "tomorrow"
# This week (Monday‑Friday)
nylas calendar list --from "monday" --to "friday"
# JSON output for scripting
nylas calendar list --limit 5 --json | jq '.[].title'Creating Events
# Quick event
nylas calendar create --title "Team standup" --when "tomorrow 10am" --duration 30m# With location and description
nylas calendar create \
--title "Product review" \
--when "2026-04-10 14:00" \
--duration 1h \
--location "Conference Room B" \
--description "Q2 roadmap review with stakeholders"# Add participants
nylas calendar create \
--title "1:1 with Alice" \
--when "friday 3pm" \
--duration 30m \
--participants "alice@company.com,bob@company.com"# Auto‑add Google Meet link
nylas calendar create \
--title "Remote standup" \
--when "tomorrow 9am" \
--duration 15m \
--conferencing google-meetChecking Availability
# Your free/busy status
nylas calendar availability --from "tomorrow 9am" --to "tomorrow 5pm"# Mutual availability with colleagues
nylas calendar availability \
--emails "alice@company.com,bob@company.com" \
--from "next monday" --to "next friday" \
--duration 30mUpdating & Deleting Events
# Reschedule
nylas calendar update evt_abc123 --when "thursday 2pm"
# Change title
nylas calendar update evt_abc123 --title "Updated: Product review (moved)"
# Cancel
nylas calendar delete evt_abc123 --yesTime‑zone & DST Handling
# Recurring meeting that crosses a DST boundary
nylas calendar create \
--title "Weekly sync" \
--when "next monday 10am" \
--duration 1h \
--timezone "America/New_York"The CLI automatically adjusts for Daylight Saving Time transitions.
Scripting with jq
# Titles of today's meetings
nylas calendar list --from "today" --to "tomorrow" --json |
jq -r '.[].title'# Count meetings this week
nylas calendar list --from "monday" --to "friday" --json |
jq length# Find meetings with a specific participant
nylas calendar list --json |
jq -r '.[] | select(.participants[]?.email == "alice@company.com") | .title'# Export to CSV
nylas calendar list --from "today" --to "next friday" --json |
jq -r '.[] | [.title, .when.start_time, .when.end_time] | @csv' > meetings.csv# Auto‑record meetings that have a video link
nylas calendar list --from "today" --to "tomorrow" --json |
jq -r '.[] | select(.conferencing != null) | .conferencing.details.url' |
while read url; do
nylas notetaker send --meeting-link "$url"
doneNotifications & Email Integration
# Create event with participant notification
nylas calendar create \
--title "Sprint planning" \
--when "next tuesday 10am" \
--duration 1h \
--participants "team@company.com" \
--notify# Send a custom email with the invite details
nylas email send \
--to "team@company.com" \
--subject "Sprint Planning - Tuesday 10am" \
--body "Calendar invite sent. See you there." \
--yesMulti‑Provider Support
The same commands work with Outlook, Exchange, Yahoo, and iCloud calendars—simply authenticate the desired account.
AI & Voice Agent Integration
nylas mcp install --assistant claude-codeAfter installing, Claude Code (or another AI assistant) can query availability, schedule meetings, and manage events on your behalf.
References
- Full Nylas CLI guide:
- Managing calendars from the terminal:
- Automating email and calendar with PowerShell:
- Building an AI email triage agent:
- List Gmail emails from the command line:
- Why the Gmail API breaks AI agents:
- Email APIs for AI agents compared: