Read and manage Google Calendar events through authenticated REST API calls.
Coding
outlook-calendar-management
Try itLet your AI assistant manage your Outlook calendar for you. Just say what you need — add, change, or delete events, set up repeating meetings, or ask when you're free — and it happens on your own calendar.
What it does
Use this skill whenever the user mentions any calendar operation on Outlook calendar / Microsoft calendar: view schedules, find events (title/location/category), add meetings/birthdays/reminders, change time or title, move to another date, delete (single occurrence or whole recurring series), check free time slots, query the next occurrence of a recurring event, list recently added events. Manages the Outlook calendar (Microsoft account / outlook.com). Does NOT handle Outlook mail (the himalaya skill does) or other calendars (Google Calendar etc.).
The skill document
Outlook 日历助手
通过对话管理 Outlook 日历(微软账户 / outlook.com),无需打开 Outlook 应用,手机、电脑、网页实时同步。
能做什么
| 你想做什么 | 做法 |
|---|---|
| 看安排:今天/明天/本周/某段时间 | today / tomorrow / week / list |
| 找日程:按标题/地点/备注/类别 | list --search / list --category |
| 查"我昨天加了什么" | list --created-after 日期 |
| 加日程:会议/生日/提醒/定期 | add |
| 改日程:时间/标题/类别/提醒等 | update |
| 挪日程:整体平移或移到某天,保留时段 | move |
| 删日程,定期日程可选单次/整系列 | delete |
| 问哪天有空 / 空闲时段 | free |
| 定期日程下次什么时候 | next |
| 看某个日程的详情 | read |
| 日历连不上 / 查看状态 | status |
| 机器可读输出,供程序/脚本用 | 任意命令加 --json |
小输出优先:只看"有什么/什么时候"用
list --summary或--json,不要动辄拉全量;不确定时间范围先用默认 7 天。
操作铁律
以下规则适用于每次操作,不可跳过:
- 每次操作前先取"当前时间 + 当前时区":任何操作开始前,先用命令行获取系统当前时间和时区——Windows(PowerShell)用
Get-Date+Get-TimeZone,Linux/macOS 用date(如date +"%F %T %Z"),绝不用旧会话里见过的日期或时区。需要核对"今天是几号"时可配合运行status(输出里有当前日期,含年份与星期)。相对时间词可以直接传给命令(今天 14:00、本周五 15:00、今天下午2点),命令会在运行时刻按系统时钟解析,输出里会显示解析后的日期——确认不是昨天 - 删除前先确认:向用户复述待删除的日程(标题+时间),获得明确同意后再执行
- 修改前先查看现状:先执行
read获取当前内容,再决定修改内容 - 事件 ID 仅从输出获取:命令输出中的 🆔 行即事件 ID,严禁猜测或编造
- 操作后回读验证再汇报:add/update/move/delete 执行后,用
read/list回读一次核对实际结果(标题+时间),确认与意图一致后再向用户汇报;不能只凭命令返回值就断言"已完成" - 失败不盲目重试:命令非零退出时,先读 ❌ 行(
--json时读 error 字段),按提示处理——权限/登录问题 → 重跑python outlook_setup.py;查不到 → 扩大时间范围或换搜索词;严禁原样重试同一命令。仍无法解决时对照references/troubleshooting.md处理,或如实上报用户
输出契约
命令输出是 agent 与脚本的接口,只依赖结构,不依赖文案:
- 锚点 + 结构提取:🆔/✅/⚠️/🆕 锚点、缩进、
HH:MM-HH:MM时段、JSON 结构是语言无关的协议;行内文案随语言,不作为提取依据 - 事件 ID 仅从 🆔 行获取(严禁猜测/编造);定期系列主事件 ID 从 🆕 行取("🆕 + 冒号"结构,冒号前文案随语言)
- 失败信号:退出码 1 + stderr
❌行;--json时 stdout 为{"error": ..., "exit": 1} - 程序化/批量场景一律加
--json:stdout 纯净 JSON,无人类提示混入
常见任务
"看看我这周/下周的安排"
→ week 看本周,list --days 7 看未来 7 天。想看更久用 list --days 30;看过去的用 list --past 30。
"我昨天加的那件事,改到今天"
→ ① list --created-after <昨天的日期> 找到它,记下 🆔 → ② read 确认是这件 → ③ move --days 1(或 --to 今天,保留原时段)→ ④ 回读核对后告诉用户"已从昨天 X 点改到今天 X 点"。关键词足够独特时也可一步完成:move --search "关键词" --days 1(唯一匹配直接操作,多匹配会列出候选)。
"加一个周五下午的会,提前10分钟提醒"
→ add "会议名" "本周五 15:00" "本周五 16:00" --remind 10。
"今天下午两点的会" → add "会议名" "今天 14:00" "今天 15:00"。相对时间词由命令按系统当前日期解析,输出会显示具体日期,确认无误即可。只给日期没给具体时间会按全天处理;默认会提示时间冲突,不阻断。
"把每周例会改成周三"
→ 定期日程的"每次"和"整个系列"是两回事:先 read 拿系列主事件 ID(🆕 行)→ update <主ID> --repeat "每周三"。注意:改系列规则会重置之前单独改过的某几次,先提醒用户。
"周五下午几点有空"
→ free "2026-08-14" --from 09:00 --to 18:00,会列出空闲时间段。
"周五那个会找不到了"
→ ① list --search "会议" 无结果时,先确认搜索词与时间范围(默认只查未来 7 天)→ ② 用 list --days 14 或 --past 扩大范围 → ③ 仍无则如实告诉用户"没找到"并给出建议,不编造日程。
"日历连不上了 / 权限报错"
→ ① 跑 status 确认连接与登录状态 → ② 提示 invalid_grant/401/403 时按 references/troubleshooting.md 处理(通常重跑 python outlook_setup.py 重新授权)→ ③ 网络问题可稍后重试一次,仍失败如实上报。
关键概念
- 定期日程(每周例会、每月 15 日……):对"某一次"执行的修改/删除仅影响该次;修改规则、删除整个系列须操作主事件。详见
references/recurring-events.md - 运行环境:Windows / Linux / macOS 均可;命令示例中的
python在部分系统(如 macOS)为python3,按实际解释器名运行即可 - 时间输入:时段用
YYYY-MM-DD HH:MM("下午3点" =15:00),全天只给日期;支持相对时间(今天/明天/本周X/下周X及英文today/this friday等,可带时刻),由命令按运行时刻系统时钟解析——不要自己推算日期(完整约定见references/commands.md)。时区自动按电脑本地时区处理,跨时区自动换算;探测异常时用TZ环境变量指定(如TZ=Asia/Shanghai)。全天日程按 Outlook 邮箱首选时区写入,机器时区与邮箱时区不同也不会跨天显示;此功能需要MailboxSettings.Read权限。完整授权共 3 个权限:Calendars.ReadWrite(日程读写)、MailboxSettings.Read(邮箱时区)、User.Read(登录身份),升级后请重跑一次python outlook_setup.py重新授权 - 确认与脚本交互:脚本默认会再次询问确认;agent 场景应直接使用
-y跳过(非交互环境中输入不可用时,脚本会自动取消) - 输出语言:默认按系统语言自动选择(中文系统 → 中文,其他 → 英文);可用
--lang zh|en或环境变量OCAL_LANG覆盖。提取信息只依赖「输出契约」中的锚点与结构,与语言无关 - 首次运行自动安装依赖:脚本首次运行缺少
requests/msal/tzdata时会自动 pip 安装。tzdata缺失会导致 Windows 时区解析失败、日程时间偏移,必须保留。安装失败时会给出手动命令;若提示"依赖仍缺失",需重启终端
详细参考
| 文件 | 什么时候读 |
|---|---|
references/commands.md | 需要完整参数列表和更多示例时 |
references/recurring-events.md | 涉及定期日程(创建/改单次/删系列)时 |
references/configuration.md | 首次连接日历、换账户、自带 Azure 应用时 |
references/troubleshooting.md | 出错、报错、结果不对时 |
Related skills
Connect an OpenClaw agent to personal Microsoft accounts via Graph API to read and manage Outlook mail, calendar, and To Do tasks.
Read and write the signed-in user's Microsoft 365 / Outlook.com personal calendar via Microsoft Graph. Calendar API surface only — but note: this skill shares one device-code login with the outlook-contacts and outlook-todo skills, so the shared consent also grants their Calendars/Tasks/Contacts read-write scopes (fully disclosed in the Scope table below). Use when the user wants to list today's events, look at next week, create / update / delete a single event by id, or check token status. Trigger keywords: "outlook calendar", "ms calendar", "graph calendar", "我的 outlook 日历", "微软日历".
Read, send, and manage Outlook mail, folders, calendar events, and contacts through Microsoft Graph with managed OAuth.
Teamup Calendar (teamup.com). Use this skill for ANY Teamup Calendar request — reading, creating, updating, and deleting data. Whenever a task involves Teamup Calendar, use this skill instead of calling the API directly.
Google Calendar (workspace.google.com). Use this skill for ANY Google Calendar request — reading, creating, updating, and deleting data. Whenever a task involves Google Calendar, use this skill instead of calling the API directly.