dreamlonglll/mini-todo/minitodo
Claude Code and agent skill by dreamlonglll/mini-todo
- community
Checking that the SKILL.md file is still in the repository.
通过云端 HTTP API 读写用户的 mini-todo 待办;适合 today / add / done / list / search / show / update / delete 场景,可被 openclaw cron 调度(agent 自行拉数据 + 判断是否推送)做临期提醒。
Install
npx vskill@latest install dreamlonglll/mini-todo/minitodoSKILL.md
mini-todo Skill
让 Claude Code 通过云端 HTTP API 操作用户的 mini-todo 待办数据。底层数据通过 WebDAV 与 PC 端共享同一份 sync-data.json.gz:AI 的写入约 1.5 秒后(连续写入最多 攒 10 秒)推送到 WebDAV,PC 端下次同步即可见。
何时调用
用户说出下面意图时,先 Bash 调用本 skill 的 CLI:
- "今天有什么待办?" →
python ~/.claude/skills/minitodo/minitodo.py today --json - "未来 24h 有什么临期?" / 被 cron 唤起做提醒 →
list --pending --json后你自己按时间判断该推哪些 - "帮我加一个'买菜'到待办" →
add - "把 C3 / ID xxx 标记完成" →
done C3(短码)或done <i64-id> - "看看所有未完成的高优先级" →
list --pending --priority high - "搜一下含'报告'的待办" →
search - "C3 / ID xxx 是什么?" →
show C3 - "把 C3 / ID xxx 的截止时间改到 2026-05-20" →
update C3 endTime=2026-05-20 - "删除 C3 / ID xxx" →
delete C3
`C{seq}` 短码是 cloud 给每个 todo 分配的递增编号(响应 JSON 里seq字段),比 16 位完整 i64 id 更适合用户口语反馈;删除后短码不会被复用。所有done/show/update/delete的 id 位置都同时接受C{seq}/c{seq}(大小写不敏感)和完整 i64 id。
非待办相关问题不要调用本 skill;它只覆盖 mini-todo 这一个领域。
安装
默认安装到 Claude Code 的 skill 目录;通过 --target 切到 openclaw 或两者都装。
Windows 用户用 PowerShell 执行 .\install.ps1(参数相同:-Target claude/openclaw/both), 或在 Git Bash / WSL / MSYS2 里执行上面的 bash 命令。脚本做三件事:
- 把
SKILL.md/minitodo.py/config.example.toml复制到目标 skill 目录 - 如果
config.toml不存在,把config.example.toml复制为config.toml,并把权限收紧到
只有当前用户可读写(Linux/macOS chmod 600,Windows 去掉继承的访问权限、只留当前用户)
- 提示编辑
config.toml填入endpoint+api_key(可选timezone,见下)
完成后必须确认本机有 Python 3 + requests:
config.toml 字段:endpoint、api_key(必填);timeout(秒,默认 10;sync 至少 90); timezone(IANA 时区名,例如 Asia/Shanghai,today 用它计算"今天";不填用本机时区, 建议与云端 / PC 一致)。
CLI 参考
全局 flag
--config <path>自定义 config.toml 路径--json输出原始 JSON(AI 解析时务必使用)
退出码:0 成功(包括 health 报告同步降级);2 配置 / 参数错误;3 网络错误(GET 已自动 重试 2 次);4 服务端返回错误(stderr 是 HTTP <状态码>: <detail>),或 sync 的 pull / push 有一个失败(服务端回 207,JSON 照常输出)。
子命令
| 子命令 | 说明 | 示例 | |
|---|---|---|---|
today | 今日相关(今天到期 ∪ 今天开始 ∪ 已逾期未完成);"今天"按 config 的 timezone | python minitodo.py today --json | |
add <title> | 新增待办;--due 写入 endTime | python minitodo.py add "买菜" --priority high --due 2026-05-20 | |
done <ref> | 标记完成 | python minitodo.py done C3 或 done 1734567890123456 | |
list | 列表,可叠加 --pending / --completed / --priority / --quadrant / --limit / --sort | python minitodo.py list --pending --priority high --json | |
search <kw> | 关键词搜索(标题 + 描述) | python minitodo.py search "报告" --json | |
show <ref> | 详情(默认含 subtasks) | python minitodo.py show C3 --json | |
update <ref> <key=val>... | 修改字段,支持多个 | python minitodo.py update C3 endTime="2026-06-01 18:00" priority=medium | |
delete <ref> | 删除(连带 subtasks) | python minitodo.py delete C3 | |
health | 健康检查(同步降级时照常输出 JSON,stderr 附一行提示) | python minitodo.py health --json | |
sync | 手动触发 WebDAV 同步(pull + push) | python minitodo.py sync --json | |
sync pull | 仅从 WebDAV 拉取最新数据 | python minitodo.py sync pull --json | |
sync push | 仅推送本地变更到 WebDAV | python minitodo.py sync push --json |
<ref> = C{seq} 短码(cloud 端 1, 2, 3... 自增)或完整 i64 id。C 大小写不敏感。
--due:规范格式YYYY-MM-DD HH:MM:SS;也可写YYYY-MM-DD(= 当天23:59:00)或
YYYY-MM-DD HH:MM;带 Z / ±HH:MM 时区后缀的值由服务端换算成它配置的时区。
--priority high|medium|low:服务端映射成 PC 的颜色(见下方字段表);同时给--color时以颜色为准。update的 value 按字段类型解析:字符串字段(title/description/notes/color/
priority / 时间字段 / repeatType / repeatWeekdays)原样当字符串(title=2026 就是标题 "2026"),写 null 清空;其它字段自动解析 true / false / null / 数字 / JSON; quadrant= 接受别名(urgent_important 等);字段名必须是下方字段表里的(或别名), 否则服务端返回 400 并列出允许的字段。
常见任务 → 命令映射
| 用户问 | 一行命令 | |
|---|---|---|
| 今天有什么 | python ~/.claude/skills/minitodo/minitodo.py today --json | |
| 还有几个高优先级没完成 | python ~/.claude/skills/minitodo/minitodo.py list --pending --priority high --json | |
| 新增"周五开会准备 PPT" | python ~/.claude/skills/minitodo/minitodo.py add "周五开会准备 PPT" --priority medium --json | |
| 完成 C3 | python ~/.claude/skills/minitodo/minitodo.py done C3 --json | |
| 把 C3 的截止时间改到下周一 18 点 | python ~/.claude/skills/minitodo/minitodo.py update C3 endTime="2026-05-25 18:00" --json | |
| 清空 C3 的提醒时间 | python ~/.claude/skills/minitodo/minitodo.py update C3 notifyAt=null --json | |
| 删掉一周前完成的所有 | 先 list --completed --sort -updatedAt --json,再分别 delete C{seq} | |
| 确保数据是最新的 | python ~/.claude/skills/minitodo/minitodo.py sync --json |
直接调用 HTTP API(fallback)
CLI 不可用时,AI 可直接用 curl。所有请求都要 Authorization: Bearer <api_key>;写请求 body 是 JSON(Content-Type: application/json)。
| Method | Path | 用途 | |
|---|---|---|---|
GET /health | 服务健康与同步状态(降级时 503,见下文) | ||
GET /todos?... | 列表;query: completed=true/false, priority=high/medium/low(按颜色派生), quadrant=1-4 或 urgent_important 等别名, dueDateBefore / dueDateAfter(按 endTime;见下), startDate=YYYY-MM-DD, q=<keyword>(标题 + 描述), sort=[+-]<field>, limit, offset, withSubtasks=true | ||
GET /todos/:id?withSubtasks=true | 详情(默认嵌套 subtasks) | ||
POST /todos | 创建;body 必填 title,其它字段见字段表 | ||
PATCH /todos/:id | 部分更新;未提及字段保留;内容没变化时不刷新 updatedAt | ||
DELETE /todos/:id | 删除(连带 subtasks) | ||
POST /todos/:id/subtasks | 创建子任务;body 必填 title | ||
PATCH /subtasks/:id | 部分更新子任务 | ||
DELETE /subtasks/:id | 删除子任务 | ||
GET /images/:name | 取图片 bytes | ||
POST /images | multipart 上传,file 字段;返回 {name} | ||
POST /sync | 手动触发 pull + push(pull 总是重新下载完整文档,不走缓存校验);全部成功 200,部分失败 207;返回 {pull, push, pullError?, pushError?} | ||
POST /sync/pull | 仅 pull(同样总是重新下载完整文档);返回 {status, changed, repushScheduled, todosUpserted, ...} | ||
POST /sync/push | 仅 push;返回 {status, pushed, attempts, dirtyCleared, ...} |
排序字段白名单:dueDate(= endTime)/ startTime / priority(high > medium > low > 自定义颜色)/ quadrant / sortOrder / updatedAt / createdAt / title。前缀 - 倒序、 + 或省略正序;不在白名单的字段按 sortOrder 排序。
dueDateBefore / dueDateAfter / startDate 接受与写入相同的时间格式;仅日期时 dueDateBefore=D 表示"D 当天 23:59:59 及以前"(含当天),dueDateAfter=D 表示"D 当天 00:00:00 及以后"。格式不对 → 400。
时间格式
所有时间字段(notifyAt / startTime / endTime / createdAt / updatedAt)都是 `YYYY-MM-DD HH:MM:SS`:服务端(与 PC)配置时区的墙钟时间,无时区后缀,例如 "2026-05-20 18:30:00"。写入时也接受下面这些形式,服务端统一换成规范格式再保存:
| 输入 | 保存为 | |
|---|---|---|
2026-05-20 18:30 / 2026-05-20T18:30 / 2026-05-20T18:30:00.123 | 2026-05-20 18:30:00 | |
2026-05-20T10:30:00Z / 2026-05-20T18:30:00+08:00 | 换算成服务端时区的墙钟 | |
2026-05-20(仅日期) | startTime → 00:00:00;endTime / dueDate → 23:59:00;notifyAt → 09:00:00 | |
null 或 "" | 清空该字段 |
todo 字段(写入契约,与 PC 端模型一致)
| 字段 | 类型 | 说明 | |
|---|---|---|---|
title | 非空字符串 | 任务名称(创建时必填) | |
description | 字符串 / null | 备注(Markdown)。别名 notes(只在没给 description 时生效) | |
color | "#RRGGBB" | 颜色,PC 用它表示优先级:#EF4444 高、#F59E0B 中、#10B981 低(新建默认 #10B981);其它颜色是用户自定义色 | |
priority | "high" / "medium" / "low" | 写入时是 `color` 的别名(high→#EF4444、medium→#F59E0B、low→#10B981;同时给了 color 以 color 为准;写 null 被忽略)。读取时是派生字段:由 color 映射,自定义颜色为 null;不入库 | |
quadrant | 1-4 | 四象限:1 重要紧急、2 重要不紧急、3 紧急不重要、4 不紧急不重要(默认)。也接受别名 urgent_important / important_not_urgent / urgent_not_important / not_urgent_not_important,保存为整数 | |
completed | bool | 完成态 | |
startTime | 时间 / null | 开始时间 | |
endTime | 时间 / null | 截止时间。别名 dueDate(旧版字段名,只在没给 endTime 时生效) | |
notifyAt | 时间 / null | 下一次提醒时间。重复任务每次触发后只更新这个字段,endTime 不变。改了它而没显式给 notified 时,notified 自动重置为 false(与 PC 一致) | |
notifyBefore | 整数 ≥ 0 | 提前多少分钟提醒 | |
notified | bool | 本次提醒是否已触发 | |
sortOrder | 整数 | 列表排序 | |
repeatEnabled | bool | 是否开启重复(开启且没给 notifyBefore 时,notifyBefore 置 0,与 PC 一致) | |
repeatType | "daily" / "weekly" / "monthly" / null | 重复类型 | |
repeatInterval | 整数 ≥ 1 | 间隔;weekly + interval=2 = 每两周 | |
repeatWeekdays | "1,3,5" / null | 仅 weekly:星期几(1=周一 … 7=周日);也接受数组 [1,3,5] | |
repeatMonthDay | 1-31 / null | 仅 monthly:每月几号 |
只读 / 服务端维护的字段:id、createdAt、updatedAt、seq(cloud 短码)、subtasks、 subtaskCount(列表不嵌套时附带)。写入时这些字段会被忽略,所以把读到的对象改几个字段 后整包写回是安全的;对象里原样带回的 color / endTime / description 不会盖掉你对 priority / dueDate / notes 的修改(规范字段只有真的改了才优先于别名)。
其它任何字段一律 400(PC 端是强类型模型,不认识的字段会被静默丢掉);类型不对同样 400。 错误体是 JSON:
其它错误码:unauthorized(401)、not_found(404)、unsupported_media_type(415, 缺 Content-Type: application/json)、internal(500,详情只在服务端日志)、sync_failed (500,/sync/pull / /sync/push 失败;detail 给出 WebDAV 层面的原因)。
subtask 字段
| 字段 | 类型 | 说明 | |
|---|---|---|---|
title | 非空字符串 | 创建时必填 | |
content | 字符串 / null | Markdown 内容 | |
completed | bool | 完成态 | |
sortOrder | 整数 | 排序 | |
parentId | 只读 | 所属 todo 的 id。不能修改(要移动就删掉再在另一个 todo 下新建);写入时给了不同的值 → 400,相同的值忽略 |
id / createdAt / updatedAt 写入时忽略,其它字段 400。
图片
描述 / 子任务内容里的图片引用有两种形式,都用 GET /images/<name> 取图(需要 Bearer):
- 规范形式:
→ 文件名就是<name> - 旧数据:
http://asset.localhost/<URL 编码的本机绝对路径>或asset://localhost/<...>
(PC 端本机路径)→ 先 URL 解码,再按 / 或 \ 切分取最后一段作为文件名,例如 http://asset.localhost/C%3A%5CUsers%5Cme%5CAppData%5CLocal%5Cmini-todo%5Cimages%5C1715000000000_ab12cd.png → 1715000000000_ab12cd.png
文件名只含字母、数字、.、_、-(以字母或数字开头、不含 ..、最长 128 字符),其它名字返回 400。 上传:POST /images(multipart file 字段)返回 {name},在 Markdown 里写  引用。
alt 末尾可能带显示尺寸(PC 端拖动图片手柄写入,Obsidian 写法): 显示宽 300、高按原图比例,  宽高都指定。改写描述时原样保留;要指定大小也可以照这个写法写。
健康状态 /health
sync=pull与push中较差者:healthy|stale|offline。pull看最近一次成功拉取距今;
push 看本地待推送的写入(dirty / 图片队列)积压了多久
- 不是 healthy 时
status = "degraded",HTTP 状态码 503,lastPullError/lastPushError/
dirtySince / imageQueueLength 说明原因。降级只是信息:API 仍可读写,写入会在 WebDAV 恢复后自动推送;读到的数据可能不是 PC 端的最新状态。CLI 的 health 照常输出 JSON、 退出码 0,并在 stderr 打一行提示
- 每个鉴权通过的响应都带
X-Sync-Status: healthy | stale | offline与
X-Last-Sync-At: <最近一次成功拉取>;offline 时还带 Warning: 110 - "sync offline"
curl 示例:
重复任务的人话描述(用于 channel 推送):
| 字段组合 | 描述 | |
|---|---|---|
repeatType=daily, interval=1 | 每天 | |
repeatType=daily, interval=N | 每 N 天 | |
repeatType=weekly, interval=1, weekdays="1,3,5" | 每周的周一、周三、周五 | |
repeatType=weekly, interval=2 | 每 2 周 | |
repeatType=monthly, interval=1, monthDay=14 | 每月 14 号 | |
repeatType=monthly, interval=3, monthDay=1 | 每 3 月 1 号 |
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 90 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingcloud/skill/minitodo/SKILL.md
Popularity
- Repository stars
- 67
- Repository forks
- 4
- 7-day trend score
- 21
Stars and forks are for the whole GitHub repository, not this skill alone. Refreshed 14 Oct 2026, 25 days ago.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/dreamlonglll/mini-todo/minitodo)