npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

calendly-axi

v1.2.0

Published

Agent-ergonomic CLI for the Calendly API — the booking loop from the terminal, following AXI standards.

Readme

calendly-axi wraps Calendly API v2 in an agent-ergonomic CLI: token-efficient TOON output, a UUID/URI/name accepted for every identifier, and errors translated into structured, actionable suggestions instead of raw API noise.

Its headline workflow is the booking loop — see what's scheduled, share a way to book, and manage the fallout (who booked, cancel, mark no-shows). Event type management, availability, and webhooks exist to support that loop.

$ calendly-axi
bin: ~/.local/share/npm/bin/calendly-axi
description: "Agent-ergonomic CLI for the Calendly API — see what's scheduled, share a way to book, and manage the fallout"
account: Ada Lovelace <[email protected]>
upcoming[3]{uuid,start,name,invitees}:
  a1b2c3d4-1111-4a2b-9c3d-000000000001,"2026-08-12 14:00 (America/New_York)",Intro Call w/ Grace Hopper,1/1
  a1b2c3d4-1111-4a2b-9c3d-000000000002,"2026-08-13 09:30 (America/New_York)",30 Minute Meeting w/ Alan Turing,1/1
  a1b2c3d4-1111-4a2b-9c3d-000000000003,"2026-08-14 16:00 (America/New_York)",Project Sync,2/3
help[3]:
  Run `calendly-axi events` to see what's scheduled
  Run `calendly-axi link <event-type>` to get a booking link out
  Run `calendly-axi types` to see what's bookable

Install

npm install -g calendly-axi

Or run it without installing:

npx -y calendly-axi

Setup

calendly-axi auth setup --token <personal-access-token>

Create a Personal Access Token at https://calendly.com/integrations/api_webhooks (Integrations → API & Webhooks → Generate new token) with these scopes: users:read, organizations:read, event_types:read/write, scheduled_events:read/write, availability:read/write, scheduling_links:write, webhooks:read/write. Legacy tokens without scopes have full access already.

Credentials and a bootstrap identity cache are stored in ~/.config/calendly-axi/config.json (dir 0700, file 0600). Set CALENDLY_ACCESS_TOKEN instead to supply the token from the environment — it takes precedence over the config file, which is useful in CI and cron. Verify either path with calendly-axi doctor.

Commands

| Command | What | | --- | --- | | calendly-axi | Home view: identity + up to 5 upcoming events + suggestions | | calendly-axi events [list\|view\|invitees\|cancel\|no-show] | List upcoming events, inspect invitees, cancel, and mark no-shows | | calendly-axi link <event-type> | Mint a single-use scheduling link for an event type | | calendly-axi book --type --at --name --email | Book a meeting directly via the Scheduling API (paid plans only) | | calendly-axi busy | Show busy intervals for the next 7 days | | calendly-axi types [list\|view\|slots\|create\|update\|availability] | List, inspect, and manage event types — bookable slots and availability rules | | calendly-axi webhooks [list\|view\|create\|delete\|sample] | Manage webhook subscriptions (reads work on Free; creation needs a paid plan) | | calendly-axi auth [setup\|whoami\|logout] | Connect, inspect, or remove the stored Personal Access Token | | calendly-axi doctor | Five ordered health checks — credentials, token, organization, rate-limit headroom, hooks | | calendly-axi setup hooks [status\|uninstall] | Manage the SessionStart hook that injects the home view at session start |

calendly-axi events invitees <uuid> --email "[email protected]"
calendly-axi link "30 Minute Meeting"
calendly-axi book --type <uuid> --at 2026-08-18T15:00:00Z --name "Ada Lovelace" --email [email protected]
calendly-axi webhooks create --url https://example.com/hook --events invitee.created,invitee.canceled

Run calendly-axi <command> --help for any command's full flag reference.

Two ways to make it ambient (pick one)

calendly-axi integrates into your agent's session so state is visible before you act. You only need one of these:

  1. SessionStart hook (recommended) — run calendly-axi setup hooks (or just calendly-axi auth setup, which installs it too) to register a hook that injects the live home view (identity, upcoming events, booking-loop suggestions) at the start of every session, for Claude Code, Codex, and OpenCode. calendly-axi setup hooks status shows it; calendly-axi setup hooks uninstall removes it. Idempotent and self-repairing; disable everywhere with CALENDLY_AXI_DISABLE_HOOKS=1.
  2. Installable skill — a static SKILL.md the agent loads on demand (no per-session cost, broader agent support). It carries the same command guidance the hook's home view links out to, but not live state.

The hook gives you live data on every session; the skill is lower overhead and works anywhere. They're complementary — install whichever fits, or both.

Platform boundaries

Calendly's API has real walls. calendly-axi documents them at the point of need rather than papering over them:

  • No delete for event types. types update <type> --inactive deactivates — the strongest removal the API offers.
  • Event type slugs are UI-only. slug/scheduling_url derive from the name at create time and are frozen thereafter; renaming with types update --name never moves the booking URL, so update warns when a rename lands.
  • Event type custom questions are UI-only. custom_questions is readable via the API but not writable — POST/PATCH bodies carrying it are silently ignored.
  • The API silently ignores unsupported write fields. Both of the boundaries above return a plain 200 with the field left untouched rather than an error — calendly-axi never infers a field is writable just because a write succeeded.
  • No reschedule endpoint. Cancel with events cancel and rebook with book or link; invitees also carry their own reschedule_url for the invitee-driven path.
  • No webhook update endpoint. Changing a subscription's URL or events is webhooks delete + webhooks create.
  • Event type writes are solo-only. types create/types update work for one-on-one (kind: solo) types; group, collective, and round-robin types are read-only via the API.
  • book needs a paid plan (Standard+) and has its own tighter rate limits, separate from the general per-minute cap: Trial 5/day; paid non-Enterprise 10/min, 50/hr, 100/day; Enterprise 500/min.
  • Webhook creation needs a paid plan (Standard+) on the subscribing organization; reads work on Free.

Development

bun install
bun run dev          # run the CLI from source
bun run build         # compile to dist/
bun run check          # type-check
bun run test             # run the suite
bun run docs               # regenerate skills/calendly-axi/SKILL.md from src/reference.ts
bun run docs:check           # fail if the committed skill is stale

Built on axi-sdk-js. Spec-driven — see specs/ for desired state and plans/ for the work-in-flight DAG.

License

MIT