# Lark Daily Log

> 对话式日报填写。当员工在飞书里说"填日报/今天干了/写日报/今日工作"，或者直接发一段自然语言描述今天工作时触发。把自然语言解析成结构化工时条目，写入飞书多维表 worklogs，并回一张日报卡片。支持多项目、多任务、工时、进度、加班标记，也能从日历/邮件/妙记自动起草。

- Skill: `tjxj/lark-daily-log` (Agent Skill)
- Install (CLI): `npx skillmds@latest add tjxj/lark-daily-log`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tjxj/lark-daily-log/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: tjxj (https://skillmd.com/u/tjxj)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/tjxj/lark-daily-log

---


# lark-daily-log — 对话式日报

把"今天干了啥"一句话变成结构化日报，写进飞书多维表。

## 何时触发

- 员工说："填日报 / 写日报 / 今天干了 / 今日工作 / log"
- 员工直接发一段工作描述："今天改了 3 小时 bug，开了 2 小时会"
- 员工说："帮我起草今天日报"（自动模式，从日历/邮件拉数据）
- 定时提醒（18:30 cron）问："今天的日报还没填，要不要现在写？"

## 依赖

- `lark-cli base`：写多维表
- `lark-cli contact`：匹配员工 open_id → member_id
- `lark-cli calendar`（自动模式）：拉今天日程
- `lark-cli mail`（自动模式）：拉今天已发邮件
- `lark-cli minutes`（自动模式）：拉今天参与的妙记

## 数据表

- `worklogs`：核心明细表，每条 = 一项工作
- `projects`：项目字典，按 name/code 匹配
- `tasks`：任务字典，按 title/task_id 匹配
- `members`：成员字典
- `daily_summary`：自动聚合的当日汇总

## 对话流程

### 模式 A：自然语言直填（最常用）

员工发：
```
今天：CRM登录重构 4小时 进度80%；客户列表页改bug 2小时；
下午和产品评审 1小时；面试了一个前端 1小时
```

Skill 执行：
1. 用 AI 把这段话拆成结构化条目：
```json
[
  {"project":"CRM-V2","task":"T001 登录模块重构","category":"开发",
   "content":"登录模块重构，进度推进到 80%","hours":4,"progress":80},
  {"project":"CRM-V2","task":"T002 客户列表页","category":"开发",
   "content":"修复客户列表分页 bug","hours":2},
  {"project":"MEETING","category":"会议",
   "content":"和产品评审客户详情页设计稿","hours":1},
  {"project":"DAILY","category":"面试",
   "content":"前端候选人一面","hours":1}
]
```
2. 校验：
   - 项目名/code 能否在 projects 表匹配上（匹配不上就追问）
   - 工时合计是否合理（>10 小时提示加班，<4 小时确认是否填漏）
   - 进度变化是否合理（不能从 80 退到 60）
3. 批量写入 `worklogs` 表（一条条目一行）
4. 更新对应 `tasks` 表的 progress 和 logged_hours
5. 自动生成/更新 `daily_summary`
6. 回一张日报卡片到 IM：

```
📝 张三 2026-08-10 日报（共 8h）

✅ CRM-V2 / 登录重构      4h  ████████░░ 80%
✅ CRM-V2 / 客户列表 bug  2h
🤝 会议 / 设计评审         1h
🎯 面试 / 前端一面         1h

💡 今日亮点：登录模块推进 80%
⚠️ 卡点：无
📌 明日计划：完成登录模块联调（T001 明天到期）

[确认提交] [修改] [补一条]
```

### 模式 B：自动起草

员工说："帮我起草今天日报"

1. 拉取：
   - `calendar` 今天的日程
   - `mail` 今天发出的邮件
   - `minutes` 今天我参与的妙记
   - `tasks` 今天到期/更新的任务
2. AI 草稿（标注每个条目的证据来源）：
```
📋 今日日报草稿（基于日历/邮件/妙记）

1. [calendar 10:00-11:30] CRM-V2 需求评审会     1.5h
2. [minutes] 登录重构技术方案讨论             1h
3. [mail] 给客户发了 V2 上线时间确认邮件       0.5h
4. [task T001] 登录模块开发                  5h（推测）

合计 8h，对吗？回复"确认"提交，或告诉我改哪里
```
3. 员工确认/修改后写入

### 模式 C：补填

员工说："补填昨天的日报"
1. 询问日期或用昨天
2. 走模式 A/B 流程
3. `source` 字段标记为"补填"

### 模式 D：查今日状态

员工说："我今天日报填了吗"
- 查 daily_summary，没填就提醒，填了就展示

## 解析规则

| 员工说的 | 解析为 |
|---|---|
| "CRM 4h" | project=CRM-V2, hours=4 |
| "登录重构 4小时 80%" | task=T001, hours=4, progress=80 |
| "开了个会" | category=会议, project=MEETING |
| "修了个 bug 加班到 9 点" | category=开发, is_overtime=true |
| "面试" | category=面试, project=DAILY |
| "休假" | category=休假, project=LEAVE, hours=8 |
| "学习" | category=学习, project=DAILY |

## 边界处理

- **项目识别不唯一**：列出匹配项让员工选（"你说的 CRM 是 CRM-V2 还是旧版 CRM？"）
- **工时合计 > 12**：提示"你今天工作超过 12 小时，确认吗？"
- **漏填**：cron 18:30 检查没填的人，IM 私聊提醒
- **跨天**："今天凌晨 1 点还在修 bug"——让员工选择归属哪一天
- **重复提交**：同一天再填时，问"追加 / 覆盖 / 取消"

## 常用 lark-cli 命令参考

```bash
# 写入一条 worklog
lark-cli base record-create --app-token <APP_TOKEN> --table-id worklogs \
  --data '{"fields":{"date":1723248000000,"member":["mem_xxx"],...}}'

# 批量写入
lark-cli base record-batch-create --app-token <APP_TOKEN> --table-id worklogs \
  --records '[{"fields":{...}},{"fields":{...}}]'

# 查项目
lark-cli base record-list --app-token <APP_TOKEN> --table-id projects \
  --filter '{"conjunction":"or","conditions":[{"field_name":"code","operator":"is","value":["CRM-V2"]}]}'

# 更新任务进度
lark-cli base record-update --app-token <APP_TOKEN> --table-id tasks \
  --record-id recxxx --data '{"fields":{"progress":80}}'

# 发卡片消息
lark-cli im +messages-send --chat-id <CHAT_ID> --msg-type interactive --content '<card json>'
```

## 不做什么

- 不做自动提交：所有 AI 草稿都要员工确认才写表
- 不做考勤判定：工时只是员工自报，不替代打卡系统
- 不做绩效打分：日报就是日报，不掺和评价
- 不替员工编造工作内容：自动模式只从真实日历/邮件/妙记里抽取，不会瞎编

