feat: 初始化 skills 仓库,添加 wiki 和 todo 两个 skill

- 添加 wiki skill:文档站管理,支持向 MkDocs 文档站添加/更新技术文档
  - SSH 连通性检查脚本
  - 文章模板参考(标准格式:摘要→核心概念→详解→代码→陷阱→练习题)
  - mkdocs.yml 导航结构参考
- 添加 todo skill:任务待办管理,通过自然语言操作 MySQL 待办事项
  - LRU 淘汰策略(基于 last_accessed_at)
  - MySQL MCP 配置指南及建表 SQL
  - 自然语言到 SQL 的映射规则
- 添加 README.md 说明文档
This commit is contained in:
2026-08-31 10:30:53 +08:00
commit be7720e732
7 changed files with 739 additions and 0 deletions
+176
View File
@@ -0,0 +1,176 @@
---
name: todo
description: |
任务待办管理 skill。通过自然语言操作 MySQL 数据库中的待办事项。
当用户提到待办、任务管理、todo list、添加任务、查看任务、标记完成、
清理任务、归档旧任务时,使用此 skill。
支持增删改查和基于 LRU 策略的自动归档。
---
# 任务待办管理
通过自然语言管理 MySQL 数据库中的待办事项,支持 LRU 自动淘汰。
## 前置条件
此 skill 依赖 MySQL MCP 工具。使用前需确认:
1. MySQL MCP 已配置(参考 `references/setup.md`)
2. todos 表已创建(参考 `references/setup.md` 中的建表 SQL)
如果 MCP 工具不可用,引导用户参考 `references/setup.md` 完成配置。
## 自然语言操作映射
### 添加任务
用户说:"添加任务:XXX" / "新建一个待办:XXX" / "提醒我做 XXX"
```sql
INSERT INTO todos (title, description, priority) VALUES ('<标题>', '<描述>', '<优先级>');
```
- 优先级默认 `medium`,如果用户提到"紧急/urgent"则为 `urgent`,"重要"为 `high`
- 添加后自动执行 LRU 检查(见淘汰策略)
### 查看待办
用户说:"我的待办" / "有什么任务" / "看看今天的任务"
```sql
SELECT id, title, status, priority, last_accessed_at
FROM todos
WHERE status IN ('pending', 'in_progress')
ORDER BY
CASE priority
WHEN 'urgent' THEN 0
WHEN 'high' THEN 1
WHEN 'medium' THEN 2
WHEN 'low' THEN 3
END,
last_accessed_at DESC;
```
查看后刷新访问时间:
```sql
UPDATE todos SET last_accessed_at = NOW(), access_count = access_count + 1
WHERE id IN (<查看到的 id 列表>);
```
### 查看已完成
用户说:"已完成的任务" / "看看做完了哪些"
```sql
SELECT id, title, priority, updated_at
FROM todos WHERE status = 'done'
ORDER BY updated_at DESC;
```
### 标记完成
用户说:"完成 XXX" / "把这个标记为完成" / "做完了"
```sql
UPDATE todos SET status = 'done', last_accessed_at = NOW(), access_count = access_count + 1
WHERE id = <id> OR title LIKE '%<关键词>%';
```
如果匹配多条,列出匹配项让用户确认。
### 标记进行中
用户说:"开始做 XXX" / "进行中"
```sql
UPDATE todos SET status = 'in_progress', last_accessed_at = NOW(), access_count = access_count + 1
WHERE id = <id>;
```
### 更新任务
用户说:"修改 XXX 的描述为 YYY" / "把 XXX 的优先级改为 high"
```sql
UPDATE todos SET <字段> = '<新值>', last_accessed_at = NOW(), access_count = access_count + 1
WHERE id = <id>;
```
### 删除任务
用户说:"删除任务 XXX" / "去掉这个待办"
**软删除(推荐)**:
```sql
UPDATE todos SET status = 'archived' WHERE id = <id>;
```
**硬删除**(用户明确要求彻底删除时):
```sql
DELETE FROM todos WHERE id = <id>;
```
- 硬删除前必须确认,列出将被删除的事项
- 默认使用软删除(归档),保护数据
### 搜索任务
用户说:"找一下关于 XXX 的任务"
```sql
SELECT id, title, description, status, priority
FROM todos
WHERE title LIKE '%<关键词>%' OR description LIKE '%<关键词>%'
ORDER BY status, priority;
```
## LRU 淘汰策略
### 自动触发
每次 INSERT 后检查:
```sql
SELECT COUNT(*) FROM todos WHERE status != 'archived';
```
如果总数超过 100,执行归档。
### 归档逻辑
1. **优先归档已完成**:归档最久未访问的 `done` 事项(取最旧的 10 条)
2. **其次归档待办**:如果仍超标,归档最久未访问的 `pending` 事项
3. **保护进行中**:不归档 `in_progress` 状态的事项
4. **告知用户**:归档时列出被归档的事项标题
### 手动触发
用户说:"清理旧任务" / "归档一些任务" / "整理一下待办"
执行同样的归档逻辑,但需要先告知用户当前待办数量,并询问是否确认清理。
## 交互原则
- **模糊匹配时确认**:如果用户说的关键词匹配多条任务,列出选项让用户确认
- **操作前预览**:删除/归档操作前,显示受影响的事项列表
- **优先级合理推断**:用户说"紧急""马上""ASAP" → urgent;"重要" → high;默认 → medium
- **自然语言理解**:用户可能说"帮我记一下明天要买菜",理解为添加任务"买菜"
- **状态转换合理**:不要让用户手动做不合理的状态跳转(如 archived → in_progress)
## 输出格式
查询结果以表格形式展示:
```
| ID | 标题 | 状态 | 优先级 | 更新时间 |
|----|------|------|--------|----------|
| 1 | xxx | 待办 | 高 | 08-31 |
```
操作结果用简洁的确认语句:
- ✓ 已添加任务:XXX
- ✓ 已完成任务:XXX
- ✓ 已归档 5 条旧任务
+112
View File
@@ -0,0 +1,112 @@
# Todo Skill 环境配置指南
## 1. 安装 MySQL MCP Server
推荐使用 `@benborla29/mcp-server-mysql`(支持读写操作)。
### 配置方式
在项目的 `.mcp.json` 文件中添加(或在 `~/.claude.json` 中配置):
```json
{
"mcpServers": {
"mysql": {
"command": "npx",
"args": ["-y", "@benborla29/mcp-server-mysql"],
"env": {
"MYSQL_HOST": "<替换为你的主机地址>",
"MYSQL_PORT": "<替换为你的端口,默认 3306>",
"MYSQL_USER": "<替换为你的用户名>",
"MYSQL_PASSWORD": "<替换为你的密码>",
"MYSQL_DATABASE": "<替换为你的数据库名>"
}
}
}
}
```
### 验证 MCP 可用
配置完成后重启 Claude Code,然后尝试:
- 列出数据库中的表
- 执行一条简单查询
如果 MCP 工具可用,会看到 `mysql` 相关的工具。
---
## 2. 创建 todos 表
在目标数据库中执行以下 SQL:
```sql
CREATE TABLE IF NOT EXISTS todos (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(500) NOT NULL COMMENT '任务标题',
description TEXT COMMENT '任务描述',
status ENUM('pending', 'in_progress', 'done', 'archived') NOT NULL DEFAULT 'pending' COMMENT '状态: pending-待办, in_progress-进行中, done-已完成, archived-已归档',
priority ENUM('low', 'medium', 'high', 'urgent') NOT NULL DEFAULT 'medium' COMMENT '优先级: low-低, medium-中, high-高, urgent-紧急',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
last_accessed_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后访问时间(LRU 淘汰依据)',
access_count INT UNSIGNED NOT NULL DEFAULT 1 COMMENT '访问次数',
INDEX idx_status (status),
INDEX idx_lru (last_accessed_at),
INDEX idx_priority_status (priority, status),
INDEX idx_created (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='待办事项表,支持 LRU 淘汰策略';
```
### 字段说明
| 字段 | 类型 | 说明 |
|------|------|------|
| id | BIGINT UNSIGNED | 自增主键 |
| title | VARCHAR(500) | 任务标题,必填 |
| description | TEXT | 任务描述,可选 |
| status | ENUM | 状态:pending / in_progress / done / archived |
| priority | ENUM | 优先级:low / medium / high / urgent |
| created_at | DATETIME | 创建时间,自动填充 |
| updated_at | DATETIME | 更新时间,自动刷新 |
| last_accessed_at | DATETIME | 最后访问时间,每次查看/更新时刷新 |
| access_count | INT UNSIGNED | 访问计数,每次访问 +1 |
---
## 3. LRU 淘汰策略
### 原理
基于 `last_accessed_at` 字段实现 LRU(Least Recently Used)淘汰:
- 每次查看、更新 todo 时,刷新 `last_accessed_at` 为当前时间,`access_count` +1
- 当待办事项总数超过阈值(默认 100 条非 archived 记录)时,自动触发归档
- 归档优先级:先归档最久未访问的 `done` 事项,再归档最久未访问的 `pending` 事项
### 归档 SQL
```sql
-- 查询非 archived 的事项总数
SELECT COUNT(*) FROM todos WHERE status != 'archived';
-- 归档最久未访问的已完成事项(取最旧的 10 条)
UPDATE todos
SET status = 'archived'
WHERE status = 'done'
ORDER BY last_accessed_at ASC
LIMIT 10;
-- 如果仍然超标,归档最久未访问的待办事项
UPDATE todos
SET status = 'archived'
WHERE status = 'pending'
ORDER BY last_accessed_at ASC
LIMIT 10;
```
### 触发时机
- 每次 INSERT 新事项后,检查总数是否超标
- 用户主动要求"清理"或"归档旧任务"时
- 不会自动归档 `in_progress` 状态的事项(保护正在做的任务)