2026-08-31 10:30:53 +08:00
|
|
|
|
---
|
|
|
|
|
|
name: todo
|
|
|
|
|
|
description: |
|
|
|
|
|
|
任务待办管理 skill。通过自然语言操作 MySQL 数据库中的待办事项。
|
|
|
|
|
|
当用户提到待办、任务管理、todo list、添加任务、查看任务、标记完成、
|
|
|
|
|
|
清理任务、归档旧任务时,使用此 skill。
|
|
|
|
|
|
支持增删改查和基于 LRU 策略的自动归档。
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
# 任务待办管理
|
|
|
|
|
|
|
|
|
|
|
|
通过自然语言管理 MySQL 数据库中的待办事项,支持 LRU 自动淘汰。
|
|
|
|
|
|
|
2026-09-01 20:58:53 +08:00
|
|
|
|
## 工具说明
|
2026-08-31 10:30:53 +08:00
|
|
|
|
|
2026-09-01 20:58:53 +08:00
|
|
|
|
本 skill 依赖 **MySQL MCP 工具** `mysql_query`。所有数据库操作都通过该工具执行。
|
2026-08-31 10:30:53 +08:00
|
|
|
|
|
2026-09-01 20:58:53 +08:00
|
|
|
|
调用方式:使用 `execute_shell_command` 执行 MySQL MCP 查询,或直接使用 MCP 工具(如可用)。
|
2026-08-31 10:30:53 +08:00
|
|
|
|
|
|
|
|
|
|
如果 MCP 工具不可用,引导用户参考 `references/setup.md` 完成配置。
|
|
|
|
|
|
|
2026-09-01 20:58:53 +08:00
|
|
|
|
## 表结构
|
|
|
|
|
|
|
|
|
|
|
|
```sql
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS todos (
|
|
|
|
|
|
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
|
|
|
|
|
|
title VARCHAR(500) NOT NULL,
|
|
|
|
|
|
description TEXT,
|
|
|
|
|
|
status ENUM('pending', 'in_progress', 'done', 'archived') NOT NULL DEFAULT 'pending',
|
|
|
|
|
|
priority ENUM('low', 'medium', 'high', 'urgent') NOT NULL DEFAULT 'medium',
|
|
|
|
|
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
|
|
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
|
|
|
|
last_accessed_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
|
|
access_count INT UNSIGNED NOT NULL DEFAULT 1
|
|
|
|
|
|
);
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 操作指南
|
2026-08-31 10:30:53 +08:00
|
|
|
|
|
|
|
|
|
|
### 添加任务
|
|
|
|
|
|
|
2026-09-01 20:58:53 +08:00
|
|
|
|
触发词:添加任务 / 新建待办 / 提醒我做 / 记一下
|
2026-08-31 10:30:53 +08:00
|
|
|
|
|
|
|
|
|
|
```sql
|
|
|
|
|
|
INSERT INTO todos (title, description, priority) VALUES ('<标题>', '<描述>', '<优先级>');
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2026-09-01 20:58:53 +08:00
|
|
|
|
- 优先级默认 `medium`
|
|
|
|
|
|
- 用户说"紧急/urgent/马上/ASAP" → `urgent`
|
|
|
|
|
|
- 用户说"重要" → `high`
|
|
|
|
|
|
- 用户说"不急/有空/low" → `low`
|
|
|
|
|
|
- 添加后执行 LRU 检查(见下方淘汰策略)
|
2026-08-31 10:30:53 +08:00
|
|
|
|
|
|
|
|
|
|
### 查看待办
|
|
|
|
|
|
|
2026-09-01 20:58:53 +08:00
|
|
|
|
触发词:我的待办 / 有什么任务 / 今天要做什么 / 列出任务
|
2026-08-31 10:30:53 +08:00
|
|
|
|
|
|
|
|
|
|
```sql
|
2026-09-01 20:58:53 +08:00
|
|
|
|
SELECT id, title, status, priority, DATE_FORMAT(updated_at, '%m-%d') AS updated
|
2026-08-31 10:30:53 +08:00
|
|
|
|
FROM todos
|
|
|
|
|
|
WHERE status IN ('pending', 'in_progress')
|
|
|
|
|
|
ORDER BY
|
2026-09-01 20:58:53 +08:00
|
|
|
|
FIELD(priority, 'urgent', 'high', 'medium', 'low'),
|
2026-08-31 10:30:53 +08:00
|
|
|
|
last_accessed_at DESC;
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
查看后刷新访问时间:
|
|
|
|
|
|
|
|
|
|
|
|
```sql
|
|
|
|
|
|
UPDATE todos SET last_accessed_at = NOW(), access_count = access_count + 1
|
2026-09-01 20:58:53 +08:00
|
|
|
|
WHERE id IN (<id 列表>);
|
2026-08-31 10:30:53 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 查看已完成
|
|
|
|
|
|
|
2026-09-01 20:58:53 +08:00
|
|
|
|
触发词:已完成的任务 / 做完了哪些
|
2026-08-31 10:30:53 +08:00
|
|
|
|
|
|
|
|
|
|
```sql
|
2026-09-01 20:58:53 +08:00
|
|
|
|
SELECT id, title, priority, DATE_FORMAT(updated_at, '%m-%d %H:%i') AS completed
|
2026-08-31 10:30:53 +08:00
|
|
|
|
FROM todos WHERE status = 'done'
|
|
|
|
|
|
ORDER BY updated_at DESC;
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 标记完成
|
|
|
|
|
|
|
2026-09-01 20:58:53 +08:00
|
|
|
|
触发词:完成 XXX / 标记为完成 / 做完了
|
2026-08-31 10:30:53 +08:00
|
|
|
|
|
|
|
|
|
|
```sql
|
|
|
|
|
|
UPDATE todos SET status = 'done', last_accessed_at = NOW(), access_count = access_count + 1
|
2026-09-01 20:58:53 +08:00
|
|
|
|
WHERE id = <id>;
|
2026-08-31 10:30:53 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
2026-09-01 20:58:53 +08:00
|
|
|
|
按标题匹配:
|
|
|
|
|
|
|
|
|
|
|
|
```sql
|
|
|
|
|
|
UPDATE todos SET status = 'done', last_accessed_at = NOW(), access_count = access_count + 1
|
|
|
|
|
|
WHERE title LIKE '%<关键词>%' AND status != 'done';
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
- 匹配多条时列出匹配项让用户确认
|
|
|
|
|
|
- 用 `SELECT` 先查再改,避免误操作
|
2026-08-31 10:30:53 +08:00
|
|
|
|
|
|
|
|
|
|
### 标记进行中
|
|
|
|
|
|
|
2026-09-01 20:58:53 +08:00
|
|
|
|
触发词:开始做 XXX / 进行中
|
2026-08-31 10:30:53 +08:00
|
|
|
|
|
|
|
|
|
|
```sql
|
|
|
|
|
|
UPDATE todos SET status = 'in_progress', last_accessed_at = NOW(), access_count = access_count + 1
|
|
|
|
|
|
WHERE id = <id>;
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 更新任务
|
|
|
|
|
|
|
2026-09-01 20:58:53 +08:00
|
|
|
|
触发词:修改 XXX 的描述/优先级/标题
|
2026-08-31 10:30:53 +08:00
|
|
|
|
|
|
|
|
|
|
```sql
|
|
|
|
|
|
UPDATE todos SET <字段> = '<新值>', last_accessed_at = NOW(), access_count = access_count + 1
|
|
|
|
|
|
WHERE id = <id>;
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2026-09-01 20:58:53 +08:00
|
|
|
|
可更新字段:`title`、`description`、`priority`、`status`
|
|
|
|
|
|
|
2026-08-31 10:30:53 +08:00
|
|
|
|
### 删除任务
|
|
|
|
|
|
|
2026-09-01 20:58:53 +08:00
|
|
|
|
触发词:删除任务 / 去掉这个待办
|
2026-08-31 10:30:53 +08:00
|
|
|
|
|
|
|
|
|
|
**软删除(推荐)**:
|
|
|
|
|
|
|
|
|
|
|
|
```sql
|
|
|
|
|
|
UPDATE todos SET status = 'archived' WHERE id = <id>;
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2026-09-01 20:58:53 +08:00
|
|
|
|
**硬删除**(用户明确要求时):
|
2026-08-31 10:30:53 +08:00
|
|
|
|
|
|
|
|
|
|
```sql
|
|
|
|
|
|
DELETE FROM todos WHERE id = <id>;
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2026-09-01 20:58:53 +08:00
|
|
|
|
- 硬删除前必须列出将被删除的事项并确认
|
|
|
|
|
|
- 默认用软删除
|
2026-08-31 10:30:53 +08:00
|
|
|
|
|
|
|
|
|
|
### 搜索任务
|
|
|
|
|
|
|
2026-09-01 20:58:53 +08:00
|
|
|
|
触发词:找一下关于 XXX 的任务 / 有没有 XXX
|
2026-08-31 10:30:53 +08:00
|
|
|
|
|
|
|
|
|
|
```sql
|
2026-09-01 20:58:53 +08:00
|
|
|
|
SELECT id, title, status, priority
|
2026-08-31 10:30:53 +08:00
|
|
|
|
FROM todos
|
|
|
|
|
|
WHERE title LIKE '%<关键词>%' OR description LIKE '%<关键词>%'
|
2026-09-01 20:58:53 +08:00
|
|
|
|
ORDER BY FIELD(status, 'in_progress', 'pending', 'done', 'archived'), priority;
|
2026-08-31 10:30:53 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## LRU 淘汰策略
|
|
|
|
|
|
|
2026-09-01 20:58:53 +08:00
|
|
|
|
每次 INSERT 后检查总数:
|
2026-08-31 10:30:53 +08:00
|
|
|
|
|
|
|
|
|
|
```sql
|
2026-09-01 20:58:53 +08:00
|
|
|
|
SELECT COUNT(*) AS total FROM todos WHERE status != 'archived';
|
2026-08-31 10:30:53 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
2026-09-01 20:58:53 +08:00
|
|
|
|
如果超过 100 条,执行归档:
|
2026-08-31 10:30:53 +08:00
|
|
|
|
|
2026-09-01 20:58:53 +08:00
|
|
|
|
```sql
|
|
|
|
|
|
-- 1. 归档最久未访问的已完成事项(最旧 10 条)
|
|
|
|
|
|
UPDATE todos SET status = 'archived'
|
|
|
|
|
|
WHERE status = 'done'
|
|
|
|
|
|
ORDER BY last_accessed_at ASC LIMIT 10;
|
|
|
|
|
|
|
|
|
|
|
|
-- 2. 仍超标则归档最久未访问的待办事项
|
|
|
|
|
|
UPDATE todos SET status = 'archived'
|
|
|
|
|
|
WHERE status = 'pending'
|
|
|
|
|
|
ORDER BY last_accessed_at ASC LIMIT 10;
|
|
|
|
|
|
```
|
2026-08-31 10:30:53 +08:00
|
|
|
|
|
2026-09-01 20:58:53 +08:00
|
|
|
|
**保护规则**:不归档 `in_progress` 状态的事项。
|
2026-08-31 10:30:53 +08:00
|
|
|
|
|
|
|
|
|
|
## 交互原则
|
|
|
|
|
|
|
2026-09-01 20:58:53 +08:00
|
|
|
|
- **模糊匹配时确认**:关键词匹配多条任务,列出选项让用户选
|
|
|
|
|
|
- **操作前预览**:删除/归档前,先 `SELECT` 显示受影响的事项
|
|
|
|
|
|
- **自然语言理解**:用户说"帮我记一下明天要买菜" → 添加任务"买菜"
|
|
|
|
|
|
- **状态转换合理**:不允许 archived → in_progress 等不合理跳转
|
2026-08-31 10:30:53 +08:00
|
|
|
|
|
|
|
|
|
|
## 输出格式
|
|
|
|
|
|
|
2026-09-01 20:58:53 +08:00
|
|
|
|
查询结果用表格展示:
|
2026-08-31 10:30:53 +08:00
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
| ID | 标题 | 状态 | 优先级 | 更新时间 |
|
|
|
|
|
|
|----|------|------|--------|----------|
|
|
|
|
|
|
| 1 | xxx | 待办 | 高 | 08-31 |
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2026-09-01 20:58:53 +08:00
|
|
|
|
操作结果用简洁确认:
|
2026-08-31 10:30:53 +08:00
|
|
|
|
- ✓ 已添加任务:XXX
|
|
|
|
|
|
- ✓ 已完成任务:XXX
|
|
|
|
|
|
- ✓ 已归档 5 条旧任务
|