---
name: list
description: 智能表单 - 通用记账本与信息汇总工具。支持支出账单、出货台账、运行日志等结构化数据记录，可附加图片/文档做存档，支持自动归类、周期报表、定时提醒。用户说「记一下 xxx」即可自动触发，支持记账、备忘、出货、日志等多种记录类型。Smart form, notes, bookkeeping, records, document archive.
---

# 📋 智能表单 · list

## 核心理念

**说"记一下"就完事了**。用户不需要选类型、填字段——说了就自动归类存好。
- 零门槛：`记一下 xxx` 即可
- 自动分类：根据内容判断是支出/出货/日志/其他
- 图片也可：发张收据说"记一下"，自动识别并保存

## 行为规则

**命令式触发（直接执行）**：用户说「记一下 + 内容」这种明确命令句式时，直接识别并保存，无需确认。
**模糊触发（先确认）**：用户只说了单个词（如 "记账"、"记录一下"、"日志"、"list"）时，先问「要记一笔吗？」得到肯定答复后再执行。

## 数据存储

`workspace/memory/list-data/` 目录，每种记录类型独立 JSON：

```
memory/list-data/
├── expenses.json      # 支出
├── shipments.json     # 出货  
├── logs.json          # 运行日志
├── photos.json        # 图片归档（自动识别类型时用）
└── ...                # 自动创建的新类型
```

**记录格式**：
```json
{
  "config": {"fields": {"category":"text","amount":"number","note":"text"}},
  "records": [
    {
      "id": "uuid",
      "timestamp": "2026-05-19T19:00:00+08:00",
      "data": {"category":"餐饮","amount":200,"note":"晚饭"},
      "tags": [],
      "attachments": []
    }
  ]
}
```

## 脚本工具

所有数据操作通过 `scripts/list.py`，模型不直接改 JSON：

| 操作 | 命令 |
|------|------|
| 新增记录 | `python3 scripts/list.py add <type> --data '{"k":"v"}' [--image <path>]` |
| 查询记录 | `python3 scripts/list.py query <type> [--from DATE] [--to DATE] [--filter JSON]` |
| 周期汇总 | `python3 scripts/list.py summary <type> [--from DATE] [--to DATE] [--by category]` |
| 列出类型 | `python3 scripts/list.py types` |
| 新增类型 | `python3 scripts/list.py new-type <type> --fields '{"字段":"类型"}'` |
| 删除记录 | `python3 scripts/list.py delete <type> <id>` |

## 核心工作流程

### 1. 自动分类录入（最常用）

用户说「记一下 XXX」，自动判断类型并保存：

**判断逻辑**（由上到下匹配）：
1. 含金额数字 → **expenses**（支出），如"记一下今天吃饭200"
2. 含出货/发货/件数 → **shipments**（出货），如"记一下发了50件到广州"  
3. 含日志/运行/状态 → **logs**（运行日志），如"记一下服务器正常"
4. 含图片附件 → **photos**（图片归档），无文本时用"图片归档"类型
5. 其他 → 问用户确认类型，或创建新类型

**操作步骤**：
1. 判断属于哪个类型
2. 提取关键字段（金额/分类/数量/目的地等）
3. 如该类型 JSON 不存在 → `new-type` 自动创建，按内容推断字段
4. `python3 scripts/list.py add <type> --data 'JSON' [--image <path>]`
5. 回复确认"已记录"

**判断示例**：

| 用户说 | 自动识别 | 存入 |
|--------|---------|------|
| "记一下今天吃饭200" | expenses | `{category:"餐饮",amount:200,note:"今天吃饭"}` |
| "记一下发了50件到广州" | shipments | `{product:"未指定",quantity:50,destination:"广州"}` |
| "记一下服务器宕机了" | logs | `{system:"服务器",status:"异常",detail:"宕机"}` |
| 拍收据说"记一下" | expenses | 存图片，自动尝试读取金额 |

### 2. 查询/筛选

用户问"查一下 x月花了多少" → `query` + 模型加工输出趋势。

### 3. 周期汇总

用户说"月底总结/本月花了多少" → `summary`，按分类聚合。

### 4. 图片/文档归档

用户发图片说"记一下"：

1. 保存图片到 `memory/list-data/attachments/`
2. 如果模型支持图片识别 → 分析图片内容，提取关键信息
3. 用提取的信息填充字段（收据金额/合同日期等）
4. 保存记录 + 关联图片

> ⚠️ **注意**：图片自动识别需要大模型支持图片识别能力（如 GPT-4o、Claude 3.5 Sonnet 等）。如当前模型不支持，仅做图片存档，需用户手动补充描述。

### 5. 定时提醒

Cron 定时问用户要不要记一笔：

```
openclaw cron add \
  --name list-remind-expense \
  --cron "0 21 * * *" \
  --tz "Asia/Shanghai" \
  --message "list-remind: 睡前记账时间到~ 今天花了多少？" \
  --channel feishu --to <目标> \
  --session isolated --no-deliver
```

## 内置类型模板

模型在自动创建类型时参考以下模板结构：

**expenses（支出）** — 字段：category(text), amount(number), note(text)
- 分类：餐饮/交通/购物/娱乐/医疗/学习/生活/其他

**shipments（出货）** — 字段：product(text), quantity(number), destination(text), note(text)

**logs（运行日志）** — 字段：system(text), status(text), detail(text)
- 状态：正常/异常/维护

**photos（图片归档）** — 字段：description(text), tags(text), date(text)

不在模板中的类型由模型推断字段并 `new-type` 创建。

## 用户引导

### 首次使用

用户第一次触发 skill（或说「怎么用」）时，在回复末尾附上简短功能指引：

> 📋 智能表单已激活！试试：
> • **记一下** — "记一下今天吃饭200"（自动分类支出）
> • **查一下** — "查一下五月花了多少"
> • **月底总结** — "本月花了多少"
> • **拍照** — 发收据说"记一下"，自动识别
> • 还能记录出货、运行日志等

### 每次回复后末尾提示

成功记录、查询、汇总后，末尾加一句简短引导：

| 场景 | 末尾提示 |
|------|---------|
| 记录成功 | ✅ 已记录 💬 回复「查一下」查看记录 |
| 查询完成 | 💬 回复「记一下」继续记录，或「月底总结」看汇总 |
| 汇总报表 | 📊 本月已汇总 💬 回复「流水」查看完整清单 |

### 不确定时主动问

用户说得太模糊时，先问清楚再操作：

> 你是想记一笔支出、出货，还是其他？或者直接说「记一下 xxx」我自己判断
