Calendar Planner
Calendar planner for work, family, health, travel, deep work, and recovery across multiple command-line calendar adapters.
Setup
On first use, read setup.md for integration guidelines. Answer the immediate planning question first, ask before creating ~/calendar-planner/, and ask before writing to any calendar or sending invites.
When to Use
User needs calendar planning, schedule repair, weekly planning, time blocking, meeting triage, family logistics, appointment placement, or multi-calendar cleanup. Use when the real job is reconciling commitments and constraints across Google Calendar, Outlook, Apple Calendar, and CalDAV from CLI-capable tools.
This skill should return one defended plan, explicit trade-offs, and a safe action sequence. It is stronger than generic scheduling help when calendars disagree, priorities collide, or the user needs a whole-week repair instead of one more event.
Architecture
Local continuity is optional and only created with user consent.
CODEBLOCK0
Quick Reference
Load only what improves the current planning decision. Start with protocol and commands; add memory only if the user wants continuity.
| Topic | File |
|---|
| Setup and activation | INLINECODE2 |
| Optional continuity memory |
memory-template.md |
| Life Grid planning method |
planning-protocol.md |
| Domain-specific planning heuristics |
life-domains.md |
| CLI adapter recipes |
commands.md |
| Merge normalized event exports |
calendar_merge.py |
| Audit overlaps and buffer failures |
calendar_guard.py |
| Generate weekly planning summary |
week_plan.py |
Requirements
Use the lightest adapter that matches the user's stack. Only install the provider tools needed for the current workflow.
| Need | CLI / Tool | Notes |
|---|
| Google Calendar | INLINECODE10 | Uses Google Calendar API via the user's own OAuth client |
| Outlook / Microsoft 365 |
Microsoft Graph PowerShell | Use delegated calendar scopes only |
| Apple Calendar |
osascript | Automates Calendar.app on macOS |
| CalDAV and iCloud sync |
khal plus
vdirsyncer | Sync locally, then plan from local state |
| Local analysis |
python3 and
jq | Required for merge, guard, and week review scripts |
Core Rules
1. Start from the decision, not the CRUD action
- - First answer what should stay, move, cancel, protect, or defer.
- Ask only for facts that change placement: hard deadline, travel time, attendee constraints, or protected hours.
- Use
planning-protocol.md to convert messy requests into a placement decision.
2. Separate hard commitments from flexible blocks
- - Classify every item as hard, flexible, hold, prep, travel, or recovery before reshuffling the calendar.
- Flexible blocks can move; hard commitments do not move without explicit approval.
- Use
life-domains.md to prevent work tasks from silently overrunning family, health, or sleep constraints.
3. Merge all visible calendars before moving anything
- - Read every in-scope calendar first, including shared or family calendars only if the user put them in scope.
- Treat hidden calendars as risk, not as empty time.
- Use
calendar_merge.py when you have multiple normalized exports and need one timeline.
4. Protect buffers, prep, and follow-through
- - Add setup, commute, context switch, follow-up, and decompression time around meetings and appointments.
- A schedule with no buffers is fake capacity.
- Use
calendar_guard.py to catch overlaps, short gaps, and overloaded days before proposing changes.
5. Writes require explicit approval and narrow scope
- - Ask before creating, updating, deleting, or sending invites through any adapter.
- Default to a draft plan or dry-run command sequence first.
- Keep read-only and write-enabled calendars separate in the local continuity notes if the user opts into continuity.
6. Keep memory explicit and minimal
- - Save only user-stated rules, recurring commitments, protected hours, and activation preferences.
- Do not store attendee lists, detailed event notes, or private descriptions unless the user asks for that continuity.
- Use
memory-template.md only after the user agrees to local persistence.
7. End with an execution-ready plan
- - Every answer should finish with chosen slot(s), remaining conflicts, follow-ups, or a weekly repair plan.
- If multiple options remain, rank them and explain the winner in one sentence.
- Use
week_plan.py or the adapter recipes in commands.md when a terminal workflow makes the answer more reliable.
Life Grid Protocol
See planning-protocol.md for the full method.
- - Intake: capture the real outcome, not just the requested event.
- Map: place each item into hard, flexible, prep, travel, or recovery.
- Defend: protect non-negotiables before offering new slots.
- Repair: if the week is already broken, show what to move, cancel, or downgrade.
- Close: leave the user with one recommended plan and the exact next command or calendar action.
Common Traps
- - Solving only the meeting request -> school pickup, travel, medication, or focus constraints break later.
- Moving events before reading every in-scope calendar -> hidden conflicts and trust damage.
- Treating recurring blocks as either sacred or disposable by default -> brittle plans or calendar chaos.
- Packing meetings with no setup or recovery space -> fake capacity and late-day collapse.
- Writing to shared calendars without approval -> surprises other people and creates social debt.
- Saving too much private detail locally -> unnecessary privacy risk with no planning upside.
External Endpoints
Only the adapter the user explicitly chooses should talk to a remote service. Use one provider path at a time so data movement stays understandable.
| Endpoint | Data Sent | Purpose |
|---|
| https://www.googleapis.com/calendar/v3/ | event metadata for requested Google calendar reads or writes | Google Calendar operations through INLINECODE24 |
| https://graph.microsoft.com/v1.0/ |
event metadata for requested Outlook or Microsoft 365 reads or writes | Calendar operations through Microsoft Graph PowerShell |
| user-configured CalDAV server | event metadata for configured calendars | Calendar sync through
vdirsyncer and local use through
khal |
No other data is sent externally.
Security & Privacy
Data that stays local:
- - Optional planning memory in INLINECODE27
- Normalized event exports and review outputs produced by
calendar_merge.py, calendar_guard.py, and INLINECODE30 - Apple Calendar automation through Calendar.app on macOS
Data that may leave your machine:
- - Calendar metadata sent through the Google, Microsoft, or CalDAV adapter the user explicitly chooses
This skill does NOT:
- - Create, move, or delete calendar items without approval
- Send invites or update shared calendars silently
- Infer hidden rules from unrelated files or conversations
- Access email, contacts, or tasks unless the user explicitly expands scope
Trust
By using this skill with Google Calendar, Microsoft Graph, or CalDAV adapters, calendar metadata is sent to those services through the configured CLI tools. Only install if you trust those providers and the local machine running the commands.
Scope
This skill ONLY:
- - Plans and audits schedules across user-approved calendars
- Produces dry-run commands, normalized planning files, and local review reports
- Persists minimal planning context after explicit user consent
This skill NEVER:
- - Modifies its own skill file
- Auto-accepts invites or auto-reschedules people without approval
- Widens access from one calendar to another without confirmation
- Stores credentials in local memory files
Related Skills
Install with
clawhub install <slug> if user confirms:
- -
daily-planner - Daily plan shaping, sequencing, and realistic task placement. - INLINECODE33 - General scheduling workflows when the user does not need full calendar repair.
- INLINECODE34 - Chief-of-staff style execution across tasks, messages, and planning.
- INLINECODE35 - Focus systems, prioritization, and anti-overload operating rules.
- INLINECODE36 - Long-term continuity for user-stated constraints and recurring patterns.
Feedback
- - If useful: INLINECODE37
- Stay updated: INLINECODE38
日历规划器
用于工作、家庭、健康、旅行、深度工作与恢复的日历规划工具,支持多个命令行日历适配器。
设置
首次使用时,请阅读 setup.md 了解集成指南。先回答当前的规划问题,在创建 ~/calendar-planner/ 前询问,在写入任何日历或发送邀请前询问。
何时使用
用户需要日历规划、日程修复、周计划、时间分块、会议分类、家庭后勤、预约安排或多日历清理。当实际任务是通过支持CLI的工具在Google日历、Outlook、苹果日历和CalDAV之间协调承诺与约束时使用。
此技能应返回一个经过论证的计划、明确的权衡方案以及安全的操作序列。当日历不一致、优先级冲突或用户需要整周修复而非单个事件时,它比通用日程安排助手更强大。
架构
本地持久化是可选的,仅在用户同意后创建。
text
~/calendar-planner/
├── memory.md # 用户声明的规划规则和激活偏好
├── calendars.md # 提供商映射、日历名称和写入边界
├── rules.md # 缓冲时间、专注规则、重复约束
├── plans.md # 当前周计划及重新安排决策
└── inbox.md # 尚未安排的松散承诺
快速参考
仅加载有助于当前规划决策的内容。从协议和命令开始;仅在用户需要连续性时添加记忆。
| 主题 | 文件 |
|---|
| 设置与激活 | setup.md |
| 可选的连续性记忆 |
memory-template.md |
| 生活网格规划方法 | planning-protocol.md |
| 领域特定规划启发式 | life-domains.md |
| CLI适配器配方 | commands.md |
| 合并标准化事件导出 | calendar_merge.py |
| 审计重叠与缓冲失败 | calendar_guard.py |
| 生成周规划摘要 | week_plan.py |
要求
使用与用户技术栈匹配的最轻量适配器。仅安装当前工作流程所需的提供商工具。
| 需求 | CLI / 工具 | 备注 |
|---|
| Google日历 | gcalcli | 通过用户自己的OAuth客户端使用Google日历API |
| Outlook / Microsoft 365 |
Microsoft Graph PowerShell | 仅使用委托日历范围 |
| 苹果日历 | osascript | 在macOS上自动化Calendar.app |
| CalDAV和iCloud同步 | khal 加 vdirsyncer | 本地同步,然后从本地状态进行规划 |
| 本地分析 | python3 和 jq | 合并、守卫和周审查脚本所需 |
核心规则
1. 从决策出发,而非CRUD操作
- - 首先回答哪些应该保留、移动、取消、保护或推迟。
- 仅询问影响安排的事实:硬性截止日期、通勤时间、参与者约束或受保护时段。
- 使用 planning-protocol.md 将混乱的请求转化为安排决策。
2. 区分硬性承诺与灵活区块
- - 在重新调整日历前,将每个项目分类为硬性、灵活、暂留、准备、通勤或恢复。
- 灵活区块可以移动;未经明确批准,硬性承诺不得移动。
- 使用 life-domains.md 防止工作任务悄然侵占家庭、健康或睡眠约束。
3. 在移动任何内容前合并所有可见日历
- - 首先读取每个范围内的日历,包括共享或家庭日历(仅当用户将其纳入范围时)。
- 将隐藏日历视为风险,而非空闲时间。
- 当有多个标准化导出且需要一个时间线时,使用 calendar_merge.py。
4. 保护缓冲时间、准备和后续跟进
- - 在会议和预约周围添加准备、通勤、上下文切换、后续跟进和减压时间。
- 没有缓冲的日程是虚假的容量。
- 在提出更改前,使用 calendar_guard.py 捕捉重叠、间隔过短和超负荷的日子。
5. 写入操作需要明确批准和狭窄范围
- - 在通过任何适配器创建、更新、删除或发送邀请前询问。
- 默认先提供草稿计划或试运行命令序列。
- 如果用户选择连续性,在本地连续性笔记中将只读日历和可写日历分开。
6. 保持记忆明确且最小化
- - 仅保存用户声明的规则、重复承诺、受保护时段和激活偏好。
- 除非用户要求连续性,否则不存储参与者列表、详细事件备注或私人描述。
- 仅在用户同意本地持久化后使用 memory-template.md。
7. 以可执行的计划结束
- - 每个回答应以选定的时段、剩余冲突、后续跟进或周修复计划结束。
- 如果仍有多个选项,对其进行排序并用一句话解释最佳选择。
- 当终端工作流程使答案更可靠时,使用 week_plan.py 或 commands.md 中的适配器配方。
生活网格协议
完整方法请参见 planning-protocol.md。
- - 接收:捕捉实际成果,而不仅仅是请求的事件。
- 映射:将每个项目放入硬性、灵活、准备、通勤或恢复类别。
- 防御:在提供新时段前保护不可协商的事项。
- 修复:如果周计划已崩溃,展示哪些需要移动、取消或降级。
- 收尾:为用户留下一个推荐计划以及确切的下一个命令或日历操作。
常见陷阱
- - 仅解决会议请求 -> 学校接送、通勤、服药或专注约束稍后崩溃。
- 在读取每个范围内日历前移动事件 -> 隐藏冲突和信任损害。
- 默认将重复区块视为神圣或可丢弃 -> 脆弱的计划或日历混乱。
- 安排会议时没有准备或恢复空间 -> 虚假容量和日末崩溃。
- 未经批准写入共享日历 -> 给他人带来意外并造成社交债务。
- 本地保存过多私人细节 -> 不必要的隐私风险,无规划收益。
外部端点
只有用户明确选择的适配器才能与远程服务通信。一次使用一个提供商路径,使数据移动保持可理解。
| 端点 | 发送的数据 | 目的 |
|---|
| https://www.googleapis.com/calendar/v3/ | 请求的Google日历读取或写入的事件元数据 | 通过 gcalcli 进行的Google日历操作 |
| https://graph.microsoft.com/v1.0/ |
请求的Outlook或Microsoft 365读取或写入的事件元数据 | 通过Microsoft Graph PowerShell进行的日历操作 |
| 用户配置的CalDAV服务器 | 已配置日历的事件元数据 | 通过 vdirsyncer 进行的日历同步及通过 khal 进行的本地使用 |
没有其他数据被外部发送。
安全与隐私
保持本地的数据:
- - ~/calendar-planner/ 中的可选规划记忆
- calendarmerge.py、calendarguard.py 和 week_plan.py 生成的标准化事件导出和审查输出
- 通过macOS上的Calendar.app进行的苹果日历自动化
可能离开您机器的数据:
- - 通过用户明确选择的Google、Microsoft或CalDAV适配器发送的日历元数据
此技能不会:
- - 未经批准创建、移动或删除日历项目
- 静默发送邀请或更新共享日历
- 从不相关文件或对话中推断隐藏规则
- 访问电子邮件、联系人或任务,除非用户明确扩展范围
信任
通过将本技能与Google日历、Microsoft Graph或CalDAV适配器一起使用,日历元数据将通过配置的CLI工具发送到这些服务。仅当您信任这些提供商和运行命令的本地机器时才安装。
范围
此技能仅:
- - 在用户批准的日历间规划和审计日程
- 生成试运行命令、标准化规划文件和本地审查报告
- 在用户明确同意后持久化最小规划上下文
此技能从不:
- - 修改自身的技能文件
- 未经批准自动接受邀请或自动重新安排他人
- 未经确认将一个日历的访问权限扩展到另一个日历
- 在本地记忆文件中存储凭据
相关技能
如果用户确认,使用 clawhub install
安装:
- - daily-planner - 日计划制定、排序和现实任务安排。
- schedule - 当用户不需要完整日历修复时的通用日程安排工作流程。
- assistant - 跨任务、消息和规划的参谋长式执行。
- productivity - 专注系统、优先级排序和防过载操作规则。
- remember - 用户声明的约束和重复模式的长期连续性。
反馈
- - 如果有用:clawhub star calendar-planner
- 保持更新:clawhub sync