核心用法
caldav-cli 是一款基于 Node.js 的命令行 CalDAV 客户端,专为需要从终端管理多平台日历的用户设计。安装后通过 caldav-cli account add 启动交互式向导,支持 iCloud(App专用密码)、Google(OAuth2)、Yandex、Fastmail、Nextcloud、Baikal 及自定义 CalDAV 服务器的账户配置。
核心功能分为两大模块:
- 事件查询:
caldav-cli events list支持按日期范围(--from/--to)、账户(-a)、日历(-c)筛选,默认输出表格,加--json可管道化到脚本 - 事件创建:
caldav-cli events create支持全交互式向导或纯命令行参数(标题、起止时间、描述、地点等),满足自动化场景
数据存储采用分层安全策略:敏感凭证(密码、OAuth2 refresh token)存入系统钥匙串(macOS Keychain/Linux libsecret/Windows Credential Vault),账户元数据(用户名、服务器URL)以明文 JSON 存于 ~/.config/caldav-cli/config.json。
显著优点
- 多账户原生支持:无缝切换工作/个人日历,无需频繁登录登出
- OAuth2 安全流:Google 集成采用标准授权码流程,refresh token 隔离在系统钥匙串
- 跨平台兼容:Node.js ≥18 即可运行,覆盖 macOS/Linux/Windows
- 自动化友好:JSON 输出模式便于与 cron、GitHub Actions、个人脚本集成
- 零配置体验:交互式向导降低 CalDAV 协议门槛,非技术用户亦可快速上手
潜在局限
- Node.js 依赖:需维护 Node 运行时环境,相比 Go/Rust 编译型工具资源占用较高
- OAuth2 客户端凭证明文存储:Google Client ID/Secret 存于 config.json,虽非 bearer token 但仍需文件权限管控
- 功能边界:专注 CRUD 操作,不支持日历共享管理、附件上传、循环事件编辑等高级功能
- 协议支持范围:纯 CalDAV 实现,不支持 Microsoft Graph API(Exchange/Outlook365 需第三方桥接)
适合人群
- 开发者/DevOps 工程师:将日历查询集成到 CI/CD 流水线或终端工作流
- 多平台日历用户:iCloud + Google 双持用户希望统一命令行入口
- 隐私敏感者:拒绝 SaaS 日历客户端,偏好本地凭证管理
- 效率工具极客:配合 fzf、tmux、polybar 构建自定义日程 HUD
常规风险
- 钥匙串权限:首次运行需授权终端访问系统钥匙串,误拒会导致认证失败
- config.json 泄露:若备份点包含该文件且未加密,攻击者可获取服务器端点信息(虽无法直接取 token)
- OAuth2 令牌过期:Google refresh token 可能因用户撤销权限或长期未使用失效,需重新授权
- CalDAV 服务器差异:各厂商实现细节不同(如 iCloud 的 App 专用密码机制),异常时需查阅提供商文档