pp-cal-com
Original:🇺🇸 English
Translated
Every Cal.com feature, plus offline agendas, composed booking flows, and analytics no other Cal.com tool ships. Trigger phrases: `book a meeting on cal.com`, `what's on my calendar today`, `find an open slot`, `reschedule my next booking`, `audit my cal.com webhooks`, `use cal-com`, `run cal-com-pp-cli`.
4installs
Added on
NPX Install
npx skill4agent add mvanhorn/printing-press-library pp-cal-comTags
Translated version includes tags in frontmatterSKILL.md Content
View Translation Comparison →Cal.com — Printing Press CLI
Prerequisites: Install the CLI
This skill drives the binary. You must verify the CLI is installed before invoking any command from this skill. If it is missing, install it first:
cal-com-pp-cli- Install via the Printing Press installer:
bash
npx -y @mvanhorn/printing-press install cal-com --cli-only - Verify:
cal-com-pp-cli --version - Ensure (or
$GOPATH/bin) is on$HOME/go/bin.$PATH
If the install fails (no Node, offline, etc.), fall back to a direct Go install (requires Go 1.23+):
npxbash
go install github.com/mvanhorn/printing-press-library/library/productivity/cal-com/cmd/cal-com-pp-cli@latestIf reports "command not found" after install, the install step did not put the binary on . Do not proceed with skill commands until verification succeeds.
--version$PATHWhen to Use This CLI
Reach for cal-com-pp-cli whenever an agent needs to read or mutate a Cal.com calendar without burning context on the multi-call dance the API requires for booking and rescheduling. The local store makes 'what's on my calendar', 'when am I free', 'who is overloaded', and 'where are my conflicts' near-instant offline answers. The composed and commands are the right tools for transactional bookings; the endpoint-mirror coverage is there for everything else.
bookreschedule nextUnique Capabilities
These capabilities aren't available in any other tool for this API.
Composed booking flows
-
— Schedule an attendee onto one of your event types in a single composed call — slot check, optional reservation, create, optional confirm.
bookFor the host scripting an attendee onto their calendar (admin onboarding, recruiter pre-fill, test fixtures). For the normal flow where the attendee picks their own time, share a URL frominstead.link listbashcal-com-pp-cli book --event-type-id 96531 --start 2026-05-06T17:00:00Z --attendee-name Guest --attendee-email guest@example.com --dry-run -
— Find first available slots across multiple event-type IDs in one call, ranked by start time.
slots findUse this when you don't know which event type fits — let the caller pick from a ranked merged list.bashcal-com-pp-cli slots find --event-type-ids 96531 --start tomorrow --end "tomorrow 23:59" --json -
— Move an existing booking to the next available slot for the same event type, after a cutoff.
reschedule nextUse this for last-minute bumps — one command instead of three, with dry-run safety.bashcal-com-pp-cli reschedule next --uid <booking-uid> --after tomorrow --dry-run
Local state that compounds
-
— Upcoming bookings in a window — today, this week, or any duration — read from the local store.
agendaUse this whenever an agent needs 'what's on my calendar'; single command across any time window.bashcal-com-pp-cli agenda --window today --json --select id,start,title,attendees -
— No-show, cancellation, volume, and density metrics over a window. Sister subcommands under analytics: bookings (volume), cancellations, no-show, density. --by accepts event-type, attendee, or weekday on the rate commands; analytics density --unit hour adds hourly heatmaps.
analytics no-showUse this for capacity planning, no-show trend analysis, or attendee follow-up — answers no single API call provides.bashcal-com-pp-cli analytics no-show --window 90d --by attendee --json -
— Detects overlapping bookings within a time window — pairs whose time ranges intersect get reported. Reads the local store, no API call.
conflictsRun before sending confirmations or after a bulk reschedule — surfaces double-bookings the API silently allows.bashcal-com-pp-cli conflicts --window 7d --json -
— Finds open windows in your schedule that are available but unbooked, filtered by minimum block size.
gapsUse this for capacity planning — answers 'when can I take a meeting' rather than 'what's on my plate'.bashcal-com-pp-cli gaps --window 7d --min-minutes 60 --json -
— Booking distribution across team members over a window — surfaces overloaded vs underutilized hosts.
workloadUse this for round-robin tuning or to spot host burnout before it shows up as no-shows.bashcal-com-pp-cli workload --team-id 42 --window 30d --json -
— Event types with zero bookings in the last N days — candidates for removal.
event-types staleUse this for quarterly cleanup — keeps your bookable surface from drifting.bashcal-com-pp-cli event-types stale --days 90 --json
Host control surface
-
— Create a new bookable link (event type) on your Cal.com account; prints the cal.com/<your-username>/<slug> URL ready to share.
link createThe host's primary creative act. Bookable links are how attendees book time; this is the command to make one.bashcal-com-pp-cli link create --slug 30min --length 30 --title "30 Min Meeting" -
— List every bookable link you own with the full URL pre-rendered for copy-share.
link listUse this to see what links you have and grab their URLs without hand-composing cal.com/<user>/<slug>.bashcal-com-pp-cli link list --json -
— Mark yourself out-of-office for a date range so Cal.com excludes the period from slot search.
ooo setGoing on vacation? Sick? Run this once and stop getting booked. Optional --redirect-to-user forwards bookings to a teammate (round-robin only).bashcal-com-pp-cli ooo set --start 2026-05-12 --end 2026-05-18 --reason vacation --notes "Hawaii trip" -
— List your active and upcoming OOO entries.
ooo listbashcal-com-pp-cli ooo list --json
Agent-native plumbing
-
— Audits registered webhook triggers against the canonical set and reports lifecycle events with no subscriber.
webhooks coverageRun this whenever you add a new automation — surfaces missed triggers like BOOKING_NO_SHOW_UPDATED before they bite.bashcal-com-pp-cli webhooks coverage --json
Command Reference
api-keys — Manage api keys
- — Generate a new API key and delete the current one. Provide API key to refresh as a Bearer token in the Authorization...
cal-com-pp-cli api-keys
bookings — Manage bookings
- — POST /v2/bookings is used to create regular bookings, recurring bookings and instant bookings. The request bodies...
cal-com-pp-cli bookings create - — <Note>Please make sure to pass in the cal-api-version header value as mentioned in the Headers section. Not passing...
cal-com-pp-cli bookings get - —
cal-com-pp-cli bookings get-bookinguidcan be 1. uid of a normal booking 2. uid of one of the recurring booking recurrences 3. uid of...:bookingUid - — Get a seated booking by its seat reference UID. This is useful when you have a seatUid from a seated booking and...
cal-com-pp-cli bookings get-by-seat-uid
cal-com-auth — Manage cal com auth
- — RFC 6749-compliant token endpoint. Pass client_id in the request body (Section 2.3.1). Use grant_type...
cal-com-pp-cli cal-com-auth
cal-com-auth-2 — Manage cal com auth 2
- — Returns the OAuth2 client information for the given client ID
cal-com-pp-cli cal-com-auth-2 <clientId>
calendars — Manage calendars
- — If accessed using an OAuth access token, the
cal-com-pp-cli calendars check-ics-feedscope is required.APPS_READ - — If accessed using an OAuth access token, the
cal-com-pp-cli calendars create-ics-feedscope is required.APPS_WRITE - — If accessed using an OAuth access token, the
cal-com-pp-cli calendars getscope is required.APPS_READ - — Get busy times from a calendar. Example request URL is `https://api.cal.com/v2/calendars/busy-times?timeZone=Europe%2...
cal-com-pp-cli calendars get-busy-times
conferencing — Manage conferencing
- — If accessed using an OAuth access token, the
cal-com-pp-cli conferencing get-defaultscope is required.APPS_READ - — If accessed using an OAuth access token, the
cal-com-pp-cli conferencing list-installed-appsscope is required.APPS_READ
credits — Manage credits
- — Charge credits for a completed AI agent interaction. Uses externalRef for idempotency to prevent double-charging.
cal-com-pp-cli credits charge - — Check if the authenticated user (or their org/team) has available credits and return the current balance.
cal-com-pp-cli credits get-available
destination-calendars — Manage destination calendars
- — If accessed using an OAuth access token, the
cal-com-pp-cli destination-calendarsscope is required.APPS_WRITE
event-types — Manage event types
- — <Note>Please make sure to pass in the cal-api-version header value as mentioned in the Headers section. Not passing...
cal-com-pp-cli event-types create - — <Note>Please make sure to pass in the cal-api-version header value as mentioned in the Headers section. Not passing...
cal-com-pp-cli event-types delete - — Hidden event types are returned only if authentication is provided and it belongs to the event type owner. Use the...
cal-com-pp-cli event-types get - — <Note>Please make sure to pass in the cal-api-version header value as mentioned in the Headers section. Not passing...
cal-com-pp-cli event-types get-by-id - — <Note>Please make sure to pass in the cal-api-version header value as mentioned in the Headers section. Not passing...
cal-com-pp-cli event-types update
me — Manage me
- — Removes all of the authenticated user's global booking limits. Only available to organization members — non-org...
cal-com-pp-cli me clear-my-booking-limits - — If accessed using an OAuth access token, the
cal-com-pp-cli me getscope is required.PROFILE_READ - — Returns the authenticated user's global booking limits. Unset bounds are returned as null. Only available to...
cal-com-pp-cli me get-my-booking-limits - — Updates the authenticated user's profile. Email changes require verification and the primary email stays unchanged...
cal-com-pp-cli me update - — Partially updates the authenticated user's global booking limits. Only fields present in the request body are...
cal-com-pp-cli me update-my-booking-limits - — If accessed using an OAuth access token, the
cal-com-pp-cli me user-ooocontroller-create-my-oooscope is required.SCHEDULE_WRITE - — If accessed using an OAuth access token, the
cal-com-pp-cli me user-ooocontroller-delete-my-oooscope is required.SCHEDULE_WRITE - — If accessed using an OAuth access token, the
cal-com-pp-cli me user-ooocontroller-get-my-oooscope is required.SCHEDULE_READ - — If accessed using an OAuth access token, the
cal-com-pp-cli me user-ooocontroller-update-my-oooscope is required.SCHEDULE_WRITE
notifications — Manage notifications
- — Register an app push subscription
cal-com-pp-cli notifications subscriptions-register - — Remove an app push subscription
cal-com-pp-cli notifications subscriptions-remove
oauth — Manage oauth
oauth-clients — Manage oauth clients
- — <Warning>These endpoints are deprecated and will be removed in the future.</Warning>
cal-com-pp-cli oauth-clients create - — <Warning>These endpoints are deprecated and will be removed in the future.</Warning>
cal-com-pp-cli oauth-clients delete - — <Warning>These endpoints are deprecated and will be removed in the future.</Warning>
cal-com-pp-cli oauth-clients get - — <Warning>These endpoints are deprecated and will be removed in the future.</Warning>
cal-com-pp-cli oauth-clients get-by-id - — <Warning>These endpoints are deprecated and will be removed in the future.</Warning>
cal-com-pp-cli oauth-clients update
organizations — Manage organizations
routing-forms — Manage routing forms
schedules — Manage schedules
- — Create a schedule for the authenticated user. The point of creating schedules is for event types to be available at...
cal-com-pp-cli schedules create - — <Note>Please make sure to pass in the cal-api-version header value as mentioned in the Headers section. Not passing...
cal-com-pp-cli schedules delete - — Get all schedules of the authenticated user. <Note>Please make sure to pass in the cal-api-version header value as...
cal-com-pp-cli schedules get - — Get the default schedule of the authenticated user. <Note>Please make sure to pass in the cal-api-version header...
cal-com-pp-cli schedules get-default - — <Note>Please make sure to pass in the cal-api-version header value as mentioned in the Headers section. Not passing...
cal-com-pp-cli schedules get-scheduleid - — <Note>Please make sure to pass in the cal-api-version header value as mentioned in the Headers section. Not passing...
cal-com-pp-cli schedules update
selected-calendars — Manage selected calendars
- — If accessed using an OAuth access token, the
cal-com-pp-cli selected-calendars addscope is required.APPS_WRITE - — If accessed using an OAuth access token, the
cal-com-pp-cli selected-calendars deletescope is required.APPS_WRITE
slots — Manage slots
- — <Note>Please make sure to pass in the cal-api-version header value as mentioned in the Headers section. Not passing...
cal-com-pp-cli slots delete-reserved - — There are 4 ways to get available slots for event type of an individual user: 1. By event type id. Example...
cal-com-pp-cli slots get-available - — <Note>Please make sure to pass in the cal-api-version header value as mentioned in the Headers section. Not passing...
cal-com-pp-cli slots get-reserved - — Make a slot not available for others to book for a certain period of time. If you authenticate using oAuth...
cal-com-pp-cli slots reserve - — <Note>Please make sure to pass in the cal-api-version header value as mentioned in the Headers section. Not passing...
cal-com-pp-cli slots update-reserved
stripe — Manage stripe
- — Check Stripe connection
cal-com-pp-cli stripe check - — Get Stripe connect URL
cal-com-pp-cli stripe redirect - — Save Stripe credentials
cal-com-pp-cli stripe save
teams — Manage teams
- — If accessed using an OAuth access token, the
cal-com-pp-cli teams createscope is required.TEAM_PROFILE_WRITE - — If accessed using an OAuth access token, the
cal-com-pp-cli teams deletescope is required.TEAM_PROFILE_WRITE - — If accessed using an OAuth access token, the
cal-com-pp-cli teams getscope is required.TEAM_PROFILE_READ - — If accessed using an OAuth access token, the
cal-com-pp-cli teams get-teamidscope is required.TEAM_PROFILE_READ - — If accessed using an OAuth access token, the
cal-com-pp-cli teams updatescope is required.TEAM_PROFILE_WRITE
verified-resources — Manage verified resources
- — If accessed using an OAuth access token, the
cal-com-pp-cli verified-resources user-get-verified-email-by-idscope is required.VERIFIED_RESOURCES_READ - — If accessed using an OAuth access token, the
cal-com-pp-cli verified-resources user-get-verified-emailsscope is required.VERIFIED_RESOURCES_READ - — If accessed using an OAuth access token, the
cal-com-pp-cli verified-resources user-get-verified-phone-by-idscope is required.VERIFIED_RESOURCES_READ - — If accessed using an OAuth access token, the
cal-com-pp-cli verified-resources user-get-verified-phone-numbersscope is required.VERIFIED_RESOURCES_READ - — Sends a verification code to the email. If accessed using an OAuth access token, the
cal-com-pp-cli verified-resources user-request-email-verification-code...VERIFIED_RESOURCES_WRITE - — Sends a verification code to the phone number. If accessed using an OAuth access token, the...
cal-com-pp-cli verified-resources user-request-phone-verification-code - — Use code to verify an email. If accessed using an OAuth access token, the
cal-com-pp-cli verified-resources user-verify-emailscope is required.VERIFIED_RESOURCES_WRITE - — Use code to verify a phone number. If accessed using an OAuth access token, the
cal-com-pp-cli verified-resources user-verify-phone-numberscope is...VERIFIED_RESOURCES_WRITE
webhooks — Manage webhooks
- — If accessed using an OAuth access token, the
cal-com-pp-cli webhooks createscope is required.WEBHOOK_WRITE - — If accessed using an OAuth access token, the
cal-com-pp-cli webhooks deletescope is required.WEBHOOK_WRITE - — Gets a paginated list of webhooks for the authenticated user. If accessed using an OAuth access token, the...
cal-com-pp-cli webhooks get - — If accessed using an OAuth access token, the
cal-com-pp-cli webhooks get-webhookidscope is required.WEBHOOK_READ - — If accessed using an OAuth access token, the
cal-com-pp-cli webhooks updatescope is required.WEBHOOK_WRITE
Finding the right command
When you know what you want to do but not which command does it, ask the CLI directly:
bash
cal-com-pp-cli which "<capability in your own words>"which02--helpRecipes
Create a bookable link and share its URL
bash
cal-com-pp-cli link create --slug 30min --length 30 --title "30 Min Meeting"
cal-com-pp-cli link list --json --select links.slug,links.bookable_urllink createlink listMark yourself out-of-office
bash
cal-com-pp-cli ooo set --start 2026-05-12 --end 2026-05-18 --reason vacation --notes "Hawaii trip"
cal-com-pp-cli ooo list --jsonWhile the OOO entry is active, Cal.com excludes the range from slot search so you don't get booked.
Today's agenda from the local store
bash
cal-com-pp-cli agenda --window today --json --select bookings.uid,bookings.title,bookings.start,bookings.attendeesReturns just the four fields an agent needs from the agenda envelope — keeps context tight against deeply-nested booking payloads.
Cross-event-type slot search ranked by start
bash
cal-com-pp-cli slots find --event-type-ids 96531 --start tomorrow --end "tomorrow 23:59" --json --first-onlyFans out /v2/slots per event-type ID; returns only the earliest slot.
No-show rate by attendee for capacity planning
bash
cal-com-pp-cli analytics no-show --window 90d --by attendee --jsonLocal SQL aggregation over synced bookings; no API call.
Audit webhook coverage before adding automation
bash
cal-com-pp-cli webhooks coverage --jsonCompares your registered triggers against the canonical Cal.com lifecycle set and surfaces missing subscribers.
Reschedule a booking to the next free slot
bash
cal-com-pp-cli reschedule next --uid <booking-uid> --after tomorrow --dry-runOne composed command replaces three; --dry-run prints the planned move without committing.
Auth Setup
Cal.com uses bearer tokens prefixed with (live) or (test). Set in your environment, or run once. The CLI also accepts managed-user access tokens and OAuth access tokens through the same Authorization header. Per-resource API-version pinning via is handled automatically by the client.
cal_live_cal_test_CAL_COM_TOKENauth set-tokencal-api-versionRun to verify setup.
cal-com-pp-cli doctorAgent Mode
Add to any command. Expands to: .
--agent--json --compact --no-input --no-color --yes-
Pipeable — JSON on stdout, errors on stderr
-
Filterable —keeps a subset of fields. Dotted paths descend into nested structures; arrays traverse element-wise. Critical for keeping context small on verbose APIs:
--selectbashcal-com-pp-cli bookings get --agent --select id,name,status -
Previewable —shows the request without sending
--dry-run -
Offline-friendly — sync/search commands can use the local SQLite store when available
-
Non-interactive — never prompts, every input is a flag
Response envelope
Commands that read from the local store or the API wrap output in a provenance envelope:
json
{
"meta": {"source": "live" | "local", "synced_at": "...", "reason": "..."},
"results": <data>
}Parse for data and to know whether it's live or local. A human-readable summary is printed to stderr only when stdout is a terminal — piped/agent consumers get pure JSON on stdout.
.results.meta.sourceN results (live)Agent Feedback
When you (or the agent) notice something off about this CLI, record it:
cal-com-pp-cli feedback "the --since flag is inclusive but docs say exclusive"
cal-com-pp-cli feedback --stdin < notes.txt
cal-com-pp-cli feedback list --json --limit 10Entries are stored locally at . They are never POSTed unless is set AND either is passed or . Default behavior is local-only.
~/.cal-com-pp-cli/feedback.jsonlCAL_COM_FEEDBACK_ENDPOINT--sendCAL_COM_FEEDBACK_AUTO_SEND=trueWrite what surprised you, not a bug report. Short, specific, one line: that is the part that compounds.
Output Delivery
Every command accepts . The output goes to the named sink in addition to (or instead of) stdout, so agents can route command results without hand-piping. Three sinks are supported:
--deliver <sink>| Sink | Effect |
|---|---|
| Default; write to stdout only |
| Atomically write output to |
| POST the output body to the URL ( |
Unknown schemes are refused with a structured error naming the supported set. Webhook failures return non-zero and log the URL + HTTP status on stderr.
Named Profiles
A profile is a saved set of flag values, reused across invocations. Use it when a scheduled agent calls the same command every run with the same configuration - HeyGen's "Beacon" pattern.
cal-com-pp-cli profile save briefing --json
cal-com-pp-cli --profile briefing bookings get
cal-com-pp-cli profile list --json
cal-com-pp-cli profile show briefing
cal-com-pp-cli profile delete briefing --yesExplicit flags always win over profile values; profile values win over defaults. lists all available profiles under so introspecting agents discover them at runtime.
agent-contextavailable_profilesExit Codes
| Code | Meaning |
|---|---|
| 0 | Success |
| 2 | Usage error (wrong arguments) |
| 3 | Resource not found |
| 4 | Authentication required |
| 5 | API error (upstream issue) |
| 7 | Rate limited (wait and retry) |
| 10 | Config error |
Argument Parsing
Parse :
$ARGUMENTS- Empty, , or
help→ show--helpoutputcal-com-pp-cli --help - Starts with → ends with
install→ MCP installation; otherwise → see Prerequisites abovemcp - Anything else → Direct Use (execute as CLI command with )
--agent
MCP Server Installation
- Install the MCP server:
bash
go install github.com/mvanhorn/printing-press-library/library/productivity/cal-com/cmd/cal-com-pp-mcp@latest - Register with Claude Code:
bash
claude mcp add cal-com-pp-mcp -- cal-com-pp-mcp - Verify:
claude mcp list
Direct Use
- Check if installed: If not found, offer to install (see Prerequisites at the top of this skill).
which cal-com-pp-cli - Match the user query to the best command from the Unique Capabilities and Command Reference above.
- Execute with the flag:
--agentbashcal-com-pp-cli <command> [subcommand] [args] --agent - If ambiguous, drill into subcommand help: .
cal-com-pp-cli <command> --help