Install macli
Homebrew (recommended)
brew install ljh-sh/cli/macli
Or tap once, then use the short name:
brew tap ljh-sh/cli
brew install macli
Homebrew 6 added a trust step for third-party taps. If you see a trust prompt, run:
brew trust ljh-sh/cli
brew install ljh-sh/cli/macli
The Homebrew formula automatically strips the com.apple.quarantine attribute for you.
Direct binary
curl -L https://github.com/ljh-sh/macli/releases/latest/download/macli-darwin-universal.tar.xz | tar xJ -
sudo mv bin/macli /usr/local/bin/
The universal tarball is a fat Mach-O (arm64 + x86_64) — works on Apple Silicon and Intel Macs.
Because macli ships with an ad-hoc signature, macOS Gatekeeper may block the direct download. Strip the quarantine attribute:
xattr -dr com.apple.quarantine /usr/local/bin/macli
eget
Via x-cmd eget:
x eget use ljh-sh/macli # install latest to ~/.local/bin
x eget use --tag v0.4.2 ljh-sh/macli # install a specific release
npm
npm install -g @ljh-sh/macli
The npm package is published from GitHub Actions. Run `npm audit signatures` after install to verify package integrity.
The npm package downloads the universal macOS binary from the GitHub release during install.
Build from source
Requires Swift 5.10+ / macOS 12+.
git clone https://github.com/ljh-sh/macli
cd macli
swift build -c release
First-run permissions
The first time you run a calendar or reminders command, macOS TCC will prompt for access. Subsequent calls are instant.
macli cal ls
If you miss the prompt, go to System Settings → Privacy & Security → Calendars (or Reminders) and enable the terminal you’re running macli from.
Verify the binary
After downloading a release tarball, verify its cosign signature:
cosign verify-blob \
--bundle macli-darwin-universal.tar.xz.sigstore.json \
--certificate-identity-regexp '^https://github.com/ljh-sh/macli/' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com \
macli-darwin-universal.tar.xz