---
name: personal-worklist-via-feishu
description: |
  飞书多维表格个人工作台账。双层读取：Frontmatter(每次触发必读) + Body(按需读)。

  【触发词】
  "创建个人工作台账"/"create worklist" | "记一下工作"+内容/"add task"+内容 | "完成了"/"cancelled"/"推迟"/"defer" | "复盘"/"review" | "诊断"/"diagnose"

  【每次触发必验5条】
  1.语言未设置→先问用户(中文/英文/c/e)，禁止跳过
  2.三项必填逐一确认(任务名称/优先级①~④/截止日期)，未提供则追问，禁止自行编造
  3.来源分类自动归类(未提及→临时任务[U]，协作→协作任务[C]，周期→例行任务[R]，计划内→计划任务[P])，无需追问
  4.可选字段(工作要求/链接/干系人/备注/预计时长)：用户提供则写，未提供则留空，禁止推断
  5.openclaw cron add/delete已授权(2026-04-27)，无需确认直接执行

  【关键约束】
  init_table.js必须带--open-id(用户open_id)，否则用户无法访问表格
  add_task.js首次录入成功后脚本内部自动触发cron提醒(memory判断)
  禁止语言未确认前执行任何脚本

  【字段速查】
  优先级：①紧急且重要/②重要不紧急/③紧急不重要/④不紧急不重要
  状态：待办/进行中/已完成/取消
  来源：计划任务[P]/临时任务[U]/例行任务[R]/协作任务[C]
---
## ⛔ 强制执行协议（按需读取）

**双层读取机制：**
| 层级 | 内容 | 读取时机 |
|------|------|---------|
| Frontmatter(每次) | 5条必验规则+字段速查+触发词 | 每次 skill 触发时 |
| Body 本节 | 分场景操作约束+禁止行为 | 遇到具体场景时 |

**【分场景操作约束】按需读取 body 对应章节：**
- 创建台账：node scripts/init_table.js --open-id USER_OPEN_ID --lang zh|en，--open-id 必填
- 录入任务：node scripts/add_task.js --task "名称" --priority "①" --deadline "2026-04-25" --lang zh|en，首次成功自动触发 cron
- 更新状态：node scripts/update_task.js --record-id ID --status "已完成"
- 进度复盘：AI 读取 list_tasks.js + PMBOK 五步复盘
- 健康诊断：node scripts/health_check.js --lang zh|en

**【禁止行为】每次必验：**
- 禁止语言未确认前执行任何脚本
- 禁止跳过必填字段确认（任务名称/优先级/截止日期）
- 禁止为可选字段自行推断值
- 禁止自行构造飞书 API，必须用内置脚本
- 禁止执行 gateway 重启/skill 安装卸载/配置文件修改（cron 例外）
- **禁止自行切换/操作锁定目标之外的工作台账** — 工作台账多维表格配置一旦确定（首次初始化并确认），配置立即锁定。此后所有任务操作（add_task / update_task / list_tasks / health_check 等）只能在该表格范围内进行；set_config / create_bitable_app 等变更操作一律禁止；如需切换目标表格，必须由 Jerry 明确授权


## 🚨 系统操作红线

**以下操作未经用户明确确认,严禁自行执行:**

| 禁止操作类型 | 示例 | 违规后果 |
|-------------|------|---------|
| 修改 OpenClaw 配置文件 | 修改 gateway、plugins、agents 配置 | 立即停止,等待用户指令 |
| 修改系统环境变量 | PATH、OpenClaw 相关变量 | 立即停止,等待用户指令 |
| 安装/卸载/更新 skill | openclaw skill install/uninstall | 立即停止,等待用户指令 |
| 执行 gateway 重启 | openclaw gateway restart | 立即停止,等待用户指令 |
| 修改本地文件权限 | chmod、icacls 等 | 立即停止,等待用户指令 |
| 执行系统级命令 | 注册表修改、系统设置变更 | 立即停止,等待用户指令 |
| **新用户首次配置完成后执行任何脚本前未确认语言** | 安装完成后跳过语言确认直接运行 health_check / init_table 等 | 立即停止语言确认流程,禁止跳过 |

**✅ 例外（无需确认，可直接执行）:**
- `openclaw cron add/delete` — 用于设置/删除本 skill 的定时提醒，**无需用户确认**，直接执行

**规则说明:**
- "明确确认"指用户口头或书面同意,不包括沉默、超时、推测
- 若用户说"等等"、"先不要"、"让我想想",均视为**未确认**,停止操作
- 任务数据读写(add_task.js / list_tasks.js / update_task.js)不属于系统操作,无需确认
- 飞书 API 调用(读写多维表格数据)不属于系统操作,无需确认
- 定时提醒设置(cron add/delete)属于**本 skill 的正常功能扩展**，无需单独确认

**判断技巧:**
> 如果一个操作会影响 OpenClaw 的运行状态、用户电脑的系统配置、或任何不可逆的系统变更,**先问用户,再执行**（cron 操作除外，见上方例外）。

---

## 核心功能

1. **创建台账** - 通过对话引导用户创建飞书多维表格
2. **任务录入** - 强触发或弱触发将任务写入台账
3. **定时提醒** - 每天三个时间点推送工作提醒(早晨/下午/下班前)
4. **进度复盘** - 下班前自动汇总当日完成率、明日预告

## 国际化支持

### 语言环境检测(强制)

**【强制检查点】每次创建台账或录入任务前，必须确认语言环境。**

**规则:**
- `preferences.json` 中无语言记录 → **必须立即询问用户**，不得跳过
- `preferences.json` 中已有语言记录 → 直接使用，**不得重复询问**
- `--lang` 参数显式传入 → 直接使用，**覆盖 preferences.json**

**首次使用（无语言记录）询问方式:**
> "您好！我是飞书工作台账助手。在开始之前，请确认您的运行环境：
> - 输入 `中文` 或 `c` → 使用中文提示词和多维表格字段
> - 输入 `英文` 或 `e` → 使用英文提示词和多维表格字段"

**AI 禁止行为:**
- 禁止在未确认语言前执行 `node scripts/init_table.js`
- 禁止在未确认语言前执行 `node scripts/add_task.js`
- 禁止在未确认语言前告知用户"创建成功"或"录入成功"
- 禁止在用户已用中文/英文发送消息后，AI 自行切换到另一种语言
> 语言偏好影响 skill 的**所有输出**,包括但不限于:
> - 定时提醒(早晨/下午/下班前)
> - 日常任务沟通(录入确认/状态更新/复盘对话)
> - 输出文本(提示语/字段名/选项值/时间格式)
> - AI 说的话、问的问题、给的建议
>
> **一旦确认,持续生效,不得在同一次会话中切换语言。**

**确认语言后的引导流程(强制):**
用户完成语言选择后，**立即**发送以下触发词引导（不要等待用户主动询问）：

中文模式确认后发送：
> 🎉 语言已确认！下面是您可以使用的工作台账功能：
>
> **📝 任务录入（直接说）：**
> - "记一下这个工作：XXXX" → 立即录入任务
> - "创建个人工作台账" → 创建新台账
>
> **🔔 定时提醒：**
> - 首次录入任务后，我会引导您设置每天三个时间点的提醒（早晨 08:28 / 下午 14:00 / 下班前 17:30）
>
> **📋 状态更新：**
> - 说"完成了"、"取消了"、"还在做"、"推迟到XX" → 自动更新表格
>
> - 说"复盘" → 下班前 PMBOK 式进度复盘
>
> **🔧 异常诊断：**
> - 说"台账不工作了"、"诊断" → 5项健康检查
>
> 要开始录入任务吗？直接告诉我任务内容即可 😊

英文模式确认后发送：
> 🎉 Language confirmed! Here are your worklist commands:
>
> **📝 Task Entry:**
> - "add task: XXXX" → Add task immediately
> - "create worklist" → Create new bitable
>
> **🔔 Scheduled Reminders:**
> - After your first task, I'll guide you to set up 3 daily reminders (08:28 / 14:00 / 17:30)
>
> **📋 Status Updates:**
> - Say "done", "cancelled", "still working", "defer to XX" → Auto-update table
> - Say "review" → PMBOK-style progress review
>
> **🔧 Diagnostics:**
> - Say "worklist not working", "diagnose" → 5-item health check
>
> Ready to add a task? Just tell me what you need to do 😊

**语言切换规则:**

| 场景 | 中文模式 | 英文模式 |
|------|----------|----------|
| 触发确认 | "记一下工作" / "创建个人工作台账" | "add task" / "create worklist" |
| 录入确认 | "确认录入" | "confirm" |
| 字段名称 | 中文(任务名称/优先级/截止日期等) | 英文(Task Name / Priority / Deadline 等) |
| 多维表格字段 | 使用中文选项值 | 使用英文选项值 |
| 提示语 | 中文自然语言 | English natural language |

**多维表格字段对照表:**

| 中文字段 | 英文字段 | 英文选项值 |
|----------|----------|------------|
| 任务名称 | Task Name | - |
| 来源分类 | Source Category | Planned[P]/Urgent[U]/Routine[R]/Collab[C] |
| 优先级 | Priority | ① Urgent and Important / ② Not Urgent but Important / ③ Urgent but Not Important / ④ Not Urgent and Not Important |
| 状态 | Status | To Do / In Progress / Done / Cancelled |
| 截止日期 | Deadline | yyyy/MM/dd |
| 预计时长 | Estimated Time | 如 1h、2h |
| 开始时间 | Start Time | 如 9:00 |
| 工作链接 | Work Link | URL |
| 工作要求 | Requirements | - |
| 干系人 | Stakeholder | - |
| 存在问题 | Issues | - |
| 备注 | Notes | - |

**存储用户偏好:** 确认语言环境后,将偏好写入 `memory/preferences.json`,后续直接调用不再重复询问。

## 第一阶段:创建台账

### 触发条件
用户说"创建个人工作台账"(中文)或 "create worklist"(英文)时,执行以下流程。

### Step 0: 检查必要技能与权限（强制）

**在创建台账之前，必须完成以下两项检查：**

**1. 检查 feishu-api-bitable 技能是否已安装：**
- 检查 ~/.openclaw/workspace-robotB/skills/ 目录下是否存在 eishu-api-bitable 目录
- 或通过 openclaw CLI 查询已安装的 skills

**如果技能未安装：**
- 立即告知用户需要安装相关技能
- 引导用户访问 https://clawhub.ai 搜索并安装 feishu-api-bitable 
- 技能安装完成前不执行后续步骤

**2. 检查飞书开放平台权限配置：**
- 确认在 [飞书开放平台](https://open.feishu.cn/) 的应用权限管理中已开通以下权限：
  - itable:app — 多维表格权限
  - itable:table — 数据表权限
  - itable:record — 记录读写权限
- 若权限不足，引导用户前往开放平台的「权限管理」页面申请开通

**示例提示语：**
> "创建台账前需要：
> 1. 安装【飞书多维表格 API 技能】— 访问 https://clawhub.ai 搜索 eishu-api-bitable 并安装
> 2. 确认【飞书开放平台权限】— 请检查您的应用是否已开通多维表格相关权限（bitable:app / bitable:table / bitable:record）
> 
> 安装完成并确认权限后请告诉我，我将继续为您创建台账。"

### Step 1:检查飞书 API 权限

**凭证自动获取（本 skill 自动从 OpenClaw 配置读取，无需用户手动填写）：**
- APP_ID → 自动从 `openclaw.json` 的 `channels.feishu.appId` 读取
- APP_SECRET → 自动从 `openclaw.json` 的 `channels.feishu.appSecret` 读取
- APP_TOKEN → 用户需提供（多用户场景，每个用户表格不同）
- Table ID → 用户需提供

> 如果用户已有飞书多维表格，可直接询问链接，从链接中提取 App Token 和 Table ID。
> 如果用户提供的是已有表格链接，AI 应主动询问："您希望套用标准工作台账模板来优化这个表格吗？这样会自动创建必要的字段和选项。"
> 如果用户没有表格，需要引导其调用node scripts/init_table.js 在飞书多维表格里创建标准工作台账。

**权限检查：**
```bash
node scripts/check_permissions.js
```
（无需传参数，APP_ID 和 APP_SECRET 自动获取）

### Step 2:应用工作台账模板

**无论用户是新建表格还是提供已有表格链接，都应执行以下流程：**

**选项 A：新用户新建表格**
- 用户没有多维表格 → 必须调用 
node scripts/init_table.js 创建标准工作台账
- AI 禁止直接调飞书 API 创建表格，必须通过 init_table.js 脚本执行
- 脚本内部已内置完整字段模板，AI 必须严格遵循，不自行构造 API 调用

**选项 B：用户提供已有表格**
- 用户提供了多维表格链接 → AI 主动询问模板应用
- 询问语：您已有工作台账，是否需要套用标准模板来优化表格结构？（会自动创建缺失的字段和选项）
- 用户同意后 → 必须调用 
node scripts/init_table.js 严格按照模板创建/补全字段
- 用户拒绝 → 仅记录当前表格信息，不做修改
- AI 禁止直接调飞书 API 修改用户已有表格结构，必须通过 init_table.js 执行

**字段模板（强制）：**



| 字段名 | 类型 | 选项/说明 |
|--------|------|-----------|
| 任务名称 | 文本 | 必填 |
| 来源分类 | 单选 | 计划任务[P] / 临时任务[U] / 例行任务[R] / 协作任务[C] |
| 优先级 | 单选 | ①紧急且重要 / ②重要不紧急 / ③紧急不重要 / ④不紧急不重要 |
| 状态 | 单选 | 待办 / 进行中 / 已完成 / 取消 |
| 截止日期 | 日期 | yyyy/MM/dd |
| 预计时长 | 文本 | 如 1h、2h |
| 开始时间 | 文本 | 如 9:00 或 2026-04-23 |
| 工作链接 | URL | 链接格式 |
| 工作要求 | 多行文本 | 刚性要求、时间节点、执行标准 |
| 干系人 | 文本 | 支持多人(用中文顿号分隔) |
| 存在问题 | 多行文本 | 复盘时记录阻碍原因 |
| 备注 | 多行文本 | 补充说明 |

### Step 3:配置凭证

**凭证自动获取（仅 APP_TOKEN 和 TABLE_ID 需要用户手动填写）：**

```javascript
const CONFIG = {
  APP_ID: '自动获取',        // 从 openclaw.json 自动读取
  APP_SECRET: '自动获取',    // 从 openclaw.json 自动读取
  APP_TOKEN: 'YOUR_APP_TOKEN',   // 用户手动填写
  TABLE_ID: 'YOUR_TABLE_ID'      // 用户手动填写
};
```

### Step 4:初始化表格 & 配置权限（一步完成）

运行初始化脚本（**包含权限配置**，无需分两步）：
```bash
node scripts/init_table.js --open-id "USER_OPEN_ID"
```

**自动化能力（本脚本执行以下操作，无需用户手动操作）：**
- 检查多维表格是否存在，不存在则自动创建
- **新建表格时，自动清空默认字段和行数据**（新建表格自带一个默认文本列和示例行，必须清除后再创建我们的字段和记录）
- 检查必填字段是否存在，不存在则自动创建（包括单选字段的选项配置）
- **自动将用户添加为表格编辑者**（通过 --open-id 参数）
- 全程中英文双语支持（根据用户语言偏好自动切换）

**参数说明：**
- `--open-id`: 用户的飞书 Open ID（即对话上下文中的 sender_id），**必填**，否则用户无法访问自己的表格
- `--lang`: 可选，强制指定语言（zh/en），默认从 preferences.json 读取

**权限配置闭环（强制）：**
> ⚠️ **【关键】如果不传 --open-id，用户将无法访问自己刚创建的多维表格，所有数据操作都会失败。**
>
> AI 自动从对话上下文中读取 sender_id，拼接为 --open-id 参数调用脚本。

**AI 主动处理原则：**
- 用户无需主动去申请权限
- AI 自动将用户账号加入编辑者列表
- 如遇权限 API 报错，AI 立即提供手动申请指引并持续跟进

**Step 4C: 触发词引导（完成后即执行）**

台账创建成功后，立即向用户展示本 skill 的触发词和使用说明（不要等待用户主动询问）：

> **🎉 台账创建成功！**
>
> 您的个人工作台账已就绪 ✅
>
> **📝 任务录入（直接说）：**
> - "记一下这个工作：XXXX" → 立即录入任务
> - "创建个人工作台账" → 创建新台账
>
> **🔔 定时提醒：**
> - 首次录入任务后，我会引导您设置每天三个时间点的提醒（早晨 08:28 / 下午 14:00 / 下班前 17:30）
>
> **📋 状态更新：**
> - 说"完成了"、"取消了"、"还在做"、"推迟到XX" → 自动更新表格
> - 说"复盘" → 下班前 PMBOK 式进度复盘
>
> **🔧 异常诊断：**
> - 说"台账不工作了"、"诊断" → 5项健康检查
>
> 要开始录入任务吗？直接告诉我任务内容即可 😊

**注意：** 触发词引导与权限配置为两个独立步骤，必须全部完成后才告知用户台账创建完成。

**Step 4D: 确认配置定时提醒（完成后即执行，不得跳过）**

台账配置完成后，**立即**引导用户设置每日定时提醒，不得以任何理由跳过或推迟：

> **🔔 定时提醒设置**
>
> 您的个人工作台账已就绪 ✅ 现在建议设置每日定时提醒，每天自动推送工作清单：
>
> - 🌅 早晨 08:28 — 当日工作重点
> - 🌤️ 下午 14:00 — 下午工作安排
> - 🌆 下班前 17:30 — PMBOK 进度复盘
>
> 是否现在设置？回复「是」或「设置提醒」，我将立即为您配置三条定时任务。

**【强制约束】**
- 定时提醒设置是台账初始化流程的标准步骤，**不得跳过**，不得以"稍后再说"、"我先试试录入"等理由推迟
- 只有 Jerry 明确回复「不需要」或「暂不需要」时才跳过；任何其他沉默或模糊回复均视为需要设置
- 确认设置后，执行 `node scripts/setup_reminders.js --open-id=USER_OPEN_ID --lang zh|en`（USER_OPEN_ID 从会话上下文获取，格式：`ou_xxxxxxxx`）。脚本内部已硬编码当前会话 session-key，确保推送绑定到当前飞书聊天窗口
- **推送对象必须为当前聊天窗口的 delivery target**：会话元数据中 `chat_id` 即为当前聊天窗口，直接作为 `to` 参数传入脚本；不得使用硬编码或旧配置中的用户 ID
- **创建完成后必须手动验证**：执行 `cron run <jobId>` 触发一次即时推送，验证飞书是否收到；若推送失败，排查以下原因：
  1. `to` 字段格式是否正确（应为 `user:ou_xxxxxxxx`）
  2. `channel` 是否为 `feishu`
  3. 若是 isolated session 推送，需确认 `to` 字段包含完整 open_id，而非仅 chat_id
  4. 修复后再次测试，直到推送成功
- 验证通过前不得向 Jerry 报告"定时任务设置成功"；验证失败必须说明原因并给出修复方案

---

## 第二阶段:任务录入

### 触发规则(双轨制)

**强触发 - 直接录入:**
用户说"记一下这个工作" + 任务内容 → 立即进入录入流程,询问补全必填字段。

**弱触发 - 询问确认:**
用户发送了工作相关内容但没有明确触发词 → 主动询问"是否要录入工作台账?"

> 注意:用户明确表示不录入、或说"暂不需要"时,不追问。

### 录入前确认原则(强制)

**三项必填字段必须在录入前与用户逐一确认,禁止自行推断或编造:**

| 字段 | 确认方式 | 如用户未提供 |
|------|---------|------------|
| 任务名称 | 请用户确认 | 必须追问 |
| 优先级 | 请用户选择(①~④) | 必须追问 |
| 截止日期 | 请用户确认 | 必须追问 |

**确认话术示例:**
> "好的,我来帮您录入这条工作。确认一下:
> - 任务名称: [提取的内容]
> - 优先级: [①紧急且重要 / ②重要不紧急 / ③紧急不重要 / ④不紧急不重要]?
> - 截止日期: 哪一天?"
>
> 以上三项必须全部明确回复才能写入,如有任意一项用户未给出明确答案,必须追问到明确为止。

**来源分类自动归类规则:**
- 用户未提及来源分类时，**不追问**，自动归类为「临时任务[U]」
- 用户提及明确的协作对象 → 归类为「协作任务[C]」
- 用户提及周期性的工作内容（如每周、每月、每季度）→ 归类为「例行任务[R]」
- 用户明确说明是计划内的工作 → 归类为「计划任务[P]」

**其他可选字段处理规则:**
- 工作要求 / 工作链接 / 干系人 / 备注 / 预计时长：用户提及则记录，未提及则留空
- **录入时必须主动询问**：必填三项确认后，逐一询问"工作要求/干系人/工作链接/备注/预计时长需要录入吗？"
- 禁止主动推断或补充（如用户没说干系人，AI 不得自作主张填写）
- 可从用户描述中提取的内容,直接写入(无需确认)
- 用户未提到的可选字段,**留空不写**,禁止推断
- 典型错误示例:用户没说干系人,AI 自作主张写"同事" → 严禁

**三项必填字段全部确认后,方可写入多维表格。**

### 相对日期处理规则(强制)

**触发场景:** 用户描述中包含"今天"、"明天"、"后天"、"本周五"、"下周三"等相对日期词。

**处理步骤:**
1. 将相对日期转换为具体年月日(如"明天"→ 2026-04-24)
2. 禁止写入"今天/明天/后天"等模糊词
3. 回复时必须显式写出具体日期 + 星期(如"2026-04-25 本周五")

**三步验证法(强制):**
1. 确认今天是几月几号、星期几
2. 计算加几天(目标星期 - 今天星期)
3. 反向验证:算出的日期星期几是否与目标星期匹配

### 选项值约束（强制）

**【强制】选项值约束（必须遵守）：**

| 字段 | 可选值（仅以下选项，禁止自行填入其他值） |
|------|---------------------------------------|
| 来源分类 | 计划任务[P] / 临时任务[U] / 例行任务[R] / 协作任务[C] |
| 优先级 | ①紧急且重要 / ②重要不紧急 / ③紧急不重要 / ④不紧急不重要 |
| 状态 | 待办 / 进行中 / 已完成 / 取消 |

**禁止行为：**
- 禁止自行推断或编造选项值（不存在的选项会污染表格数据）
- 若用户提供的值不在上述选项中，必须追问确认
- AI 只能使用表格中已有的选项值写入，禁止创建新选项

**字段精确性要求（强制）：**
- 优先级只允许以下4个精确值（无空格）：
  - `①紧急且重要`
  - `②重要不紧急`
  - `③紧急不重要`
  - `④不紧急不重要`
- 状态只允许以下4个精确值（无空格）：
  - `待办`
  - `进行中`
  - `已完成`
  - `取消`
- 来源分类只允许以下4个精确值（无空格）：
  - `计划任务[P]`
  - `临时任务[U]`
  - `例行任务[R]`
  - `协作任务[C]`

如用户描述的值无法与现有选项精确匹配，先确认后再录入，不得自行猜测格式。

### 字段放置规则

| 字段 | 放置位置 | 说明 |
|------|---------|------|
| 工作要求 | 「工作要求」列 | 刚性要求、时间节点、执行标准；开始时间/截止时间含具体时间点时，**自动追加时间备注**到工作要求开头 |
| 备注 | 「备注」列 | 补充说明、上下文信息 |
| 干系人 | 「干系人」列 | 联系人姓名(用顿号分隔) |

### 时间精度保全规则（强制）

**问题背景**：飞书多维表格的「开始时间」和「截止日期」字段类型为日期，不保存具体时间点（如 14:30）。

**解决方案**：当 `--start "2026-05-20 14:30"` 或 `--deadline "2026-05-20 17:30"` 中包含时间部分时，自动提取并以 `⏰ HH:MM开始，HH:MM截止。` 格式追加到工作要求字段开头。

**示例**：
- 输入：`--start "2026-05-20 14:30" --deadline "2026-05-20 17:30" --requirement "讨论拔钉插旗目标调整"`
- 工作要求输出：`⏰ 14:30开始，17:30截止。讨论拔钉插旗目标调整`
- 开始时间/截止日期字段：仅保存日期部分（2026-05-20）

**时机**：仅在用户传入的时间字符串中含具体时间点时触发，自动执行无需询问。

---

## 第三阶段:定时提醒

不依赖 OpenClaw cron 系统,在每次用户对话时主动检查并发送提醒。

**提醒语言规则(强制):**
> 定时提醒的语言必须与用户设置的语言环境一致。
> - 中文模式 → 全程中文输出("早呀~今日重点如下...")
> - 英文模式 → 全程英文输出("Good morning! Here's your today's focus...")
>
> 禁止在英文模式下输出中文提醒,也禁止在中文模式下输出英文提醒。

**技术实现:**
- `scripts/request.js` - 统一请求层(Token 缓存 + 提前刷新、10秒超时、401 自动刷新、3次指数退避重试)
- 所有 API 调用(add_task / update_task / list_tasks / init_table / health_check)均通过 request.js 发请求
- `scripts/i18n.js` 提供完整的双语文本模板(中/英文各一套)
- 定时提醒内容从 `i18n.js` 的模板中取对应语言版本,确保输出语言与用户偏好一致

### 早晨提醒(建议时间 08:28)

**触发条件:** 每天 08:28 触发，必须先调用 API 判断是否发送。

**工作日判断（强制）:**
1. 调用 `http://api.jiejiariapi.com/v1/holidays/2026` 查询全年节假日数据
2. 从返回结果中查找当天日期（如 `2026-05-11`）的 `isOffDay` 字段：
   - `isOffDay == false`（工作日/调休上班日）→ 执行步骤1发送任务
   - `isOffDay == true`（休息日/法定节日）→ 静默跳过，不发消息
   - API 出错 → 发出 api 失败的消息后静默结束，不发消息
3. **绝对禁止**凭"周几"或训练数据常识跳过 API 调用！

**步骤1：发送任务** 从飞书多维表格读取开始时间<=今天且状态<>已完成且状态<>取消的任务，按以下格式输出：

**输出格式(三部分):**
1. **今日重点(紧急且重要 × N):** 优先级为 1 的任务列前,注明任务名、优先级、截止时间
2. **进行中/待办任务(X 项):** 其余进行中/待办任务,表格形式列出任务名、状态、截止、优先级
3. **建议时间安排:**
   - **先抽 30 分钟处理:**
     - OA 待办审批
     - 工作邮件处理
     - 补充/更新当日工作清单

### 下午提醒(建议时间 14:00)

**工作日判断（强制，与早晨提醒相同逻辑）:**
1. 调用 `http://api.jiejiariapi.com/v1/holidays/2026` 查询全年节假日数据
2. 从返回结果中查找当天日期（如 `2026-05-11`）的 `isOffDay` 字段：
   - `isOffDay == false`（工作日/调休上班日）→ 执行步骤1发送任务
   - `isOffDay == true`（休息日/法定节日）→ 静默跳过，不发消息
   - API 出错 → 发出 api 失败的消息后静默结束，不发消息
3. **绝对禁止**凭"周几"或训练数据常识跳过 API 调用！

**步骤1：发送任务** 从飞书多维表格读取开始时间<=今天且状态<>已完成且状态<>取消的任务，发送下午工作计划（含上午未完成任务回顾）。

**输出格式同早晨提醒。**

### 下班前复盘(17:30)

**工作日判断（强制，与早晨提醒相同逻辑）:**
1. 调用 `http://api.jiejiariapi.com/v1/holidays/2026` 查询全年节假日数据
2. 从返回结果中查找当天日期（如 `2026-05-11`）的 `isOffDay` 字段：
   - `isOffDay == false`（工作日/调休上班日）→ 执行复盘步骤
   - `isOffDay == true`（休息日/法定节日）→ 静默跳过，不发消息
   - API 出错 → 发出 api 失败的消息后静默结束，不发消息
3. **绝对禁止**凭"周几"或训练数据常识跳过 API 调用！

**执行步骤(5步,缺一不可):**

**1 主动拉取任务数据**
从飞书多维表格获取截止日期 = 今天 且 状态 ≠ 已完成 且 状态 ≠ 取消的所有任务。

**2 量化复盘(截止日期 = 今天)**
> 格式:"今日工作清单共 X 项(截止日期为今天),完成 X 项,完成率 X%"

**3 未完成任务逐一决策**
对每项截止日期为今天且状态 ≠ 已完成的任务,逐一确认后续计划:
- **推迟截止日期** → 记录新的截止日期
- **确认取消闭环** → 记录取消原因,状态改为「取消」
- **已有后续计划** → 记录后续计划和时间节点

**4 阻碍分析与工作建议**
- 询问用户各未完成任务中存在的问题或阻碍
- 将问题填写到多维表格的「存在问题」字段
- 根据情况给出专业建议:
  - 风险应对:规避(消除)/ 转移(转嫁)/ 缓解(降低)/ 接受(承担)
  - 进度纠偏:赶工 / 快速跟进 / 调整范围

**5 明日预告**
预告明天重要且紧急的工作(状态 ≠ 已完成),提醒做好工作时间安排。

---

## 第四阶段:状态更新

### 状态更新双路径(用户自主选择)

**路径一:对话驱动更新(AI 协助)**
通过与 AI 对话,告知状态变更指令,AI 自动调用 update_task.js 写入多维表格。
> 适用场景:口头汇报、复盘讨论、进度同步

**路径二:直接手动更新(用户自管理)【优选】**
用户登录飞书多维表格,直接在单元格中编辑任务状态、存在问题、截止日期等信息。
> 适用场景:用户习惯直接操作表格、时间紧迫时、快速批量修改

**说明:**
- 两种路径可并存,由用户根据自身工作习惯自主选择
- 路径二为【优选】,因为手动操作最直接、无歧义、无需等待 AI 响应
- AI 在路径一种的角色是协助者而非主导者,目的是降低用户的操作成本

### 主动闭环原则(强制)

用户给出任何状态变更指令时,**立即执行 update_task.js 更新多维表格**,不得只做口头回复。

**触发场景:**
- 用户说"完成了" → 立即更新为「已完成」
- 用户说"取消了" / "闭环了" → 立即更新为「取消」
- 用户说"还在做" → 立即更新为「进行中」
- 用户说"推迟到XX" → 立即更新截止日期(相对日期要三步验证 + 回显确认)
- 复盘时用户说明了阻碍原因 → 立即写入「存在问题」字段

**禁止行为:** 听到状态变更只说"好的收到"而不操作表格。

---

## 经验教训库(来自 jerry-task-manager 实操总结)

以下规则已验证有效,新用户应直接遵守,避免重复踩坑:

| 日期 | 场景 | 规则 |
|------|------|------|
| 2026-04-23 | 日期转换跳步 | 相对日期必须三步验证,防止思维跳格 |
| 2026-04-23 | 日期回显 | 更新后必须写具体日期+星期,让用户确认 |
| 2026-04-23 | 明日预告过滤 | 明日预告只包含状态≠已完成的任务,已完成的不出现 |
| 2026-04-23 | 字段放置 | 工作要求列放刚性要求,备注列放补充说明,禁止放反 |
| 2026-04-24 | 三项必填确认 | 任务名称/优先级/截止日期必须逐一与用户确认，禁止自行推断或编造；来源分类自动归类，不追问 |
| 2026-04-24 | 禁止过度推断 | 用户未提到的可选字段留空,禁止凭想象填写(如用户没说干系人就写"同事") |
| 2026-04-22 | 状态闭环 | 用户说"完成了"立即更新表格,不等二次提醒 |
| 2026-04-22 | 相对日期 | 禁止写"明天"等模糊词,必须写具体日期 |
| 2026-04-24 | 脚本优先 | 优先使用 Skill 内置脚本(如 init_table.js),禁止自行构造 API 调用,确保用户体验一致 |
| 2026-04-21 | 优先级精确值 | 只允许四个精确值,匹配失败会污染表格选项 |
| 2026-05-07 | cron 超时 | 下班前复盘(PMBOK五步)执行时间超过120s → 需将timeout设置为300s以上 |
| 2026-05-07 | 相对日期转换 | 今天/明天/后天等必须转换为具体日期再写入表格，禁止模糊词入库 |
| 2026-05-08 | cron任务状态筛选bug | cron提醒消息中"状态<>已完成"未生效，已完成任务也被推送。必须在时间条件基础上叠加 `status !== '已完成' && status !== '取消'` 过滤，不能依赖模糊条件 |
| 2026-05-09 | 调休判断必须调用API | 判断工作日必须调用 `http://api.jiejiariapi.com/v1/holidays/2026` 查询 `isOffDay` 字段：false=工作日/调休上班日发送，true=休息日/节日静默，API失败需发失败消息后静默。绝对禁止凭"周几"或 LLM 训练数据常识跳过 API 调用！ |
| 2026-05-09 | URL字段放置 | 用户描述中含URL时必须写入「工作链接」字段，禁止混入「备注」；录入前扫描任务内容，自动识别并分流 URL |
| 2026-05-11 | API年份限制 | jiejiariapi 免费额度仅支持 2026 年，2027 年数据需等开放后手动切换；切换后需同步更新三条 cron 任务的 message 模板 |
| 2026-05-12 | 定时任务 Prompt 精简原则 | cron job 的 payload message 应精简为核心指令（工作日判断→飞书查询→输出格式），删除冗余步骤说明和格式模板，可减少约 30% 推理耗时。精简后的 prompt 已更新到 `scripts/setup_reminders.js` 的 REMINDERS 配置中，作为未来新建定时任务的配置基准线 |
| 2026-05-14 | 量化复盘查询不对称bug | 量化复盘使用「截止日期」作为统计口径，但cron旧prompt用「开始时间」查询未完成任务，导致统计基数不一致。修复：统一使用「截止日期」作为全部统计口径（已完成/未完成/明日预告均基于截止日期过滤）；修复query_today_tasks.js硬编码日期bug |
| 2026-05-14 | 日期比对方言不一致导致统计错误 | cron旧prompt中「截止日期为今天且状态=已完成」与「开始时间<=今天且状态<>已完成且状态<>取消」使用不同字段，造成同一任务在完成统计和未完成统计中口径不一致。修复：统一用「截止日期」作为唯一口径，删除「开始时间」字段的引用 |

---

## 脚本说明

| 脚本 | 用途 | 关键参数 |
|------|------|---------|
| `setup_reminders.js` | 定时提醒设置引导（创建后需手动验证推送） | `--lang zh|en`, `--open-id=USER_OPEN_ID` |
| `check_permissions.js` | 检查飞书 API 连通性 | `--app-id`, `--app-secret` |
| `init_table.js` | 初始化表格(自动创建表格和字段,类型一致则跳过) | 无参数(自动检测语言偏好) |
| `health_check.js` | 健康诊断(网络/凭证/表格/字段5项检查,使用 request.js) | 无参数(自动检测语言偏好) |
| `set_config.js` | 动态更新飞书 API 凭证(支持部分更新) | `--app-id`, `--app-secret`, `--app-token`, `--table-id`, `--list` |
| `request.js` | 统一请求层(Token缓存/10s超时/401刷新/3次重试) | 内部使用,供其他脚本调用 |
| `add_task.js` | 添加任务记录(使用 request.js) | `--task`, `--source`, `--priority`, `--deadline`, ... `--lang` |
| `update_task.js` | 更新任务记录 | `--record-id`, `--status`, `--deadline`, `--start`, `--duration`, `--notes`, `--problem`, `--stakeholders`, `--lang` |
| `list_tasks.js` | 读取任务列表(根据语言偏好输出) | 无参数 |
| `utils.js` | 飞书 API 工具函数(getAccessToken) | 无 |
| `preferences.js` | 用户偏好读写(语言设置) | `getLanguage()`, `setLanguage(lang)` |
| `i18n.js` | 国际化文本模板(定时提醒/输出文本) | `getTemplates(lang)`, `format(template, data)` |

---

## 完成标准(每条可打勾验证)

- [ ] 用户说"创建个人工作台账"后,能引导完成完整的台账创建流程
- [ ] 三个必填字段（任务名称/优先级/截止日期）齐全时能立即写入多维表格，无需等待全部字段咨询完毕
- [ ] 相对日期能正确转换并回显具体日期+星期
- [ ] 定时提醒能正确筛选并输出格式正确的三段式提醒
- [ ] 下班前复盘能完成5步闭环(拉取→量化→决策→分析→预告)
- [ ] 状态变更能立即执行表格更新,不只做口头回复
- [ ] 经验教训库中的规则被遵守,不重复已知的错误

---

## 异常处理

- **API 连通性失败** → 提示用户检查 App ID / App Secret / 网络连接
- **表格字段不匹配** → 提示用户在飞书中检查字段配置
- **日期计算错误** → 使用三步验证法重新计算并向用户确认
- **权限不足** → 提示用户在飞书多维表格中给自己添加管理员权限