Ubuntu系统的Openclaw和Hermes终于能够支持创建苹果日程、待办


前言

折腾了飞书日历,发现飞书待办任务不能同步到苹果提醒事项,后来想了想,飞书是通过CalDav服务的,那我是不是直接部署一个就可以了,然后就找到了Radicale轻量化服务,再编写一个auth插件,不就能接入agent了吗。

Radicale CalDAV Server

基于 Radicale 的 CalDAV/CardDAV 服务,配合自定义 API Key 认证插件,支持 iPhone/Mac 原生同步。

功能

  • CalDAV/CardDAV:标准日历和联系人数据存储
  • API Key 认证:自定义插件,通过 HTTP Basic Auth 的 password 字段传 key
  • iOS/macOS 同步:原生支持,日历事件同步到"日历",待办同步到"提醒事项"。安卓、鸿蒙也支持。
  • Agent 集成:包含 OpenClaw/Hermes skill,支持通过自然语言管理日程和待办

部署方式

Clone项目:Radicale-CalDavAgentSkill

方式一:Docker 一键部署(推荐)

有 Docker 环境的直接用这个,最省事。

前提

  • Docker 和 Docker Compose 已安装

步骤

  1. 配置 API Keys

    # apikeys
    sk-your-api-key = your-username
  2. 启动

    docker-compose up -d
  3. 访问

    • CalDAV 地址:http://127.0.0.1:5232

停止

docker-compose down

方式二:宝塔面板部署(无 Docker 环境)

服务器无法使用 Docker 时,用 宝塔面板 + Supervisor + Nginx 反向代理 + HTTPS

前提

  • CentOS/Ubuntu 服务器
  • Python 3.7+(推荐 3.7~3.11,Radicale 3.1.x 兼容性好)
  • 域名和 SSL 证书

步骤

  1. 创建站点和目录

    mkdir -p /www/wwwroot/your-domain.com
    cd /www/wwwroot/your-domain.com
  2. 创建虚拟环境并安装

    python3 -m venv venv
    source venv/bin/activate
    pip install radicale==3.1.9
  3. 复制文件到服务器

    • config/www/wwwroot/your-domain.com/config
    • radicale_auth_apikey.pyvenv/lib/python3.x/site-packages/radicale_auth_apikey.py
    • apikeys/www/wwwroot/your-domain.com/apikeys
  4. 编辑 config

    [server]
    hosts = 127.0.0.1:5232
    
    [auth]
    type = radicale_auth_apikey
    apikey_filename = /www/wwwroot/your-domain.com/apikeys
    
    [rights]
    type = owner_only
    
    [storage]
    type = multifilesystem
    filesystem_folder = /www/wwwroot/your-domain.com/data/collections
    
    [web]
    type = none
    
    [logging]
    level = info
  5. 编辑 apikeys

    # format: apikey = username
    sk-your-api-key = your-username
  6. 宝塔 Supervisor 管理器添加守护进程

    • 启动命令:/www/wwwroot/your-domain.com/venv/bin/python -m radicale --config /www/wwwroot/your-domain.com/config
    • 运行目录:/www/wwwroot/your-domain.com
  7. Nginx 反向代理

    server {
        listen 443 ssl;
        server_name your-domain.com;
    
        ssl_certificate /path/to/cert.pem;
        ssl_certificate_key /path/to/key.pem;
    
        location / {
            proxy_pass http://127.0.0.1:5232;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
    
            # CalDAV 方法透传(关键!)
            proxy_method $request_method;
        }
    }
    ⚠️ Nginx 默认会拦截 PROPFIND/REPORT/MKCALENDAR 等方法,确保没有 limit_except GET POST 之类的限制。

API Key 认证

HTTP Basic Auth:

  • Usernameapikeys 文件里配置的 username
  • Password:API Key

示例(curl):

curl -u "your-username:sk-your-api-key" \
  -X PROPFIND \
  https://your-domain.com/

iPhone/macOS 同步

  1. 设置 → 日历/提醒事项 → 账户 → 添加账户 → 其他 → 添加 CalDAV 账户
  2. 服务器:your-domain.com
  3. 用户名:your-username
  4. 密码:你的 API Key
  5. 描述:Radicale
日历事件进"日历",待办(TODO)进"提醒事项"。
安卓、鸿蒙同理配置。

Agent 集成(Skill)

skill/ 目录包含 OpenClaw/Hermes skill:

  • scripts/caldav_client.py:完整的 CalDAV 客户端(增删改查)
  • SKILL.md:使用文档

直接说:

  • "添加日程:周五下午3点开周会"
  • "添加待办:买牛奶,明天截止"

文件说明

文件说明
configRadicale 配置文件
radicale_auth_apikey.py自定义 API Key 认证插件
apikeysAPI Key 映射文件
DockerfileDocker 镜像构建
docker-compose.ymlDocker Compose 配置
skill/Agent 集成 skill

数据备份

Radicale 使用纯文件存储,备份直接复制 data/ 目录即可:

cp -r ./data /backup/radicale-data

致谢


For you, a thousand times over!