Skills billclaw
Drives the BillClaw local bookkeeping CLI against SQLite (db/expenses.db) via scripts/main.py JSON subcommands—add/query transactions, delete and category-merge with preview+confirm, user-defined categories, reports with chart PNGs, CSV export, and a local Flask dashboard. Use when the user tracks 记账/收支/账本, manages 分类, asks for 报表 or charts, wants to open the Web 看板, exports CSV, or mentions BillClaw or running main.py (root shim) / scripts/main.py.
install
source · Clone the upstream repo
git clone https://github.com/openclaw/skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/520mianxiangduixiang520/bill-claw" ~/.claude/skills/openclaw-skills-billclaw && rm -rf "$T"
OpenClaw · Install into ~/.openclaw/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/skills/520mianxiangduixiang520/bill-claw" ~/.openclaw/skills/openclaw-skills-billclaw && rm -rf "$T"
manifest:
skills/520mianxiangduixiang520/bill-claw/SKILL.mdsource content
BillClaw 记账 Skill(OpenClaw / Agent 使用说明)
本 Skill 通过本地 Python CLI 操作 SQLite 账本(
db/expenses.db),实现记账、分类管理、报表图表与 Web 看板。Agent 负责自然语言理解与二次确认;脚本负责结构化读写与一致性。
1. 功能概览
- 记账(结构化字段;可选
辅助从片段补全字段)parse_text - 条件查询(日期范围、类型、分类、备注关键词等)
- 删除(先 preview 列候选,用户确认后再 confirm)
- 分类归并(先 preview,用户确认后再批量改 category)
- 用户自定义分类(
表;记账时user_categories
可直接用自定义名)category - 报表:深色主题多图 PNG(合图
:KPI + 支出/收入环形图 + 每日趋势 + 按月柱图;另有单图report_dashboard.png
、expense_by_category.png
、income_by_category.png
、daily_trend.png
)+ 结构化monthly_bar.png
(供你生成有温度的中文总结);highlights
中含data.agent_json
指向合图路径primary_chart - Web 看板:本地 Flask +
+scripts/dashboard.html
内 Chart.js,支持时间筛选、按月柱状图、分页明细与图表交互(缩放/平移等),离线可开页scripts/static/vendor - 导出 CSV(可选)
环境变量:
BILLCLAW_DB_PATH 可覆盖默认数据库路径。
调用方式:在项目根目录执行
python scripts/main.py <子命令> --json-string '<JSON>' 或 --json 文件.json;亦可使用根目录 python main.py ...(转发到同一入口)。标准输出为一行 JSON:{"ok": bool, "error": str|null, "data": {...}}。
2. 用户意图(Intent)与处理流程
Intent A:记一笔账
- 从用户话中提取:
(YYYY-MM-DD)、date
(type
|收入
)、支出
、category
(元)、amount
。note - 若字段不全,可调用
子命令辅助:parse
python scripts/main.py parse --json-string '{"text":"<用户原句或片段>"}'
使用返回的
、time.date
、amount.value
、type_hint
补全(仍需你判断是否ambiguous)。category_hint - 时间模糊:若
或你的理解中parse
,先问用户确认日期/时刻,再ambiguous: true
。add - 金额异常:若
的add
中含data
,先向用户确认是否输错,再决定是否重新suspicious: true
或取消。add - 写入:
python scripts/main.py add --json-string '{"date":"...","type":"支出","category":"正餐","amount":35,"note":"..."}'
可选:
与上述字段合并(缺省字段由解析补全)。"parse_text":"昨天午饭38"
默认支出分类:正餐、零食饮料、出行、购物、日常开销、娱乐、居住、医疗健康、家人、社交、其他。
默认收入分类:工资、奖金、投资、家人、其他收入。
用户自定义分类可先走 Intent D,之后记账
category 填该名称即可。
Intent B:查账 / 列表
python scripts/main.py query --json-string '{...}'
常用字段:
,date_from
(含边界,格式建议date_to
)YYYY-MM-DD
:type
/收入支出
:精确匹配category
:SQL LIKE 子串category_like
:备注 LIKEnote_like
:备注或分类中包含关键词keyword_in_note
:默认 500limit
将
data.rows 用简洁表格或列表回复用户。
Intent C:删除记录
禁止直接删除。 必须两步:
:与delete-preview
相同过滤字段,返回query
与data.preview_rows
。data.ids- 向用户展示将删除的记录,得到明确确认后:
:delete-confirm{"ids":[...]}
Intent D:新增自定义分类
python scripts/main.py category-add --json-string '{"name":"恋爱","kind":"支出"}'kind 只能是 收入 或 支出。可用
category-list 查看已有用户分类。
Intent E:分类归并(把一批记录改到新类)
:用merge-preview
、keyword_in_note
、old_category
、old_category_like
/date_from
、date_to
(默认可筛支出)等缩小范围。type- 展示
,用户确认后:preview_rows
:merge-confirm{"ids":[...],"new_category":"恋爱"}
Intent F:报表(图表 + 口语化总结)
python scripts/main.py report --json-string '{"date_from":"2026-03-01","date_to":"2026-03-31","output_dir":"./billclaw_output"}'
:各 PNG 绝对路径;优先向用户展示data.charts
(或report_dashboard
里的data.agent_json
)。兼容旧键名:primary_chart
≈支出分类图,expense_pie
≈每日趋势。trend
:总收支、TOP 支出类、占比等。data.highlights
:简短提示句;你应在此基础上用朋友/恋人语气写 1~3 句中文总结(可轻微幽默),避免机械罗列数字。data.narrative_hints- 图表文件落在
(见下方「output 目录与定时清理」);多次output_dir
会累积 PNG,需按需或定期清理。report
Intent G:打开 Web 看板
python scripts/main.py serve --json-string '{"host":"127.0.0.1","port":8000}'(进程会占用终端,需告知用户浏览器访问
http://127.0.0.1:8000。)
页面含:日期范围筛选与快捷预设(全部/本年至今/近三月/近一月)、总收支 KPI、支出与收入分类环形图、每日折线(滚轮缩放/拖拽平移,可重置)、按月收支柱状图、可排序分页交易表(可选仅收入/仅支出)。前端为
scripts/dashboard.html,JS 库在 scripts/static/vendor/(离线可用,见该目录 README.md);中文字体使用系统字体栈。
Intent H:导出 CSV(可选)
python scripts/main.py export-csv --json-string '{"path":"./bills.csv","date_from":"2026-01-01"}'
3. 子命令一览
| 子命令 | 作用 |
|---|---|
| 插入一条交易 |
| 条件查询 |
/ | 删除预览 / 执行删除 |
/ | 改类预览 / 执行批量更新 category |
/ | 自定义分类 |
| 统计 + 出图 |
| 导出 |
| 从文本抽取时间/金额/类型/分类提示 |
| 启动 Flask 看板 |
4. 输入 / 输出约定
- 成功:
,ok: true
为有效负载。data - 失败:
,ok: false
为可读说明。error
在写入成功后仍可能在add
中带data
(金额超参考阈值),不代表未写入;若你希望「先确认再记」,应在调用suspicious
前用规则判断或先问用户(推荐流程:先展示将记入的字段与异常提示,确认后再add
)。add
5. 示例对话(覆盖常见场景)
5.1 正常记账
- 用户:「今天中午吃饭花了 42」
- 你:解析为日期今天、支出、正餐 42 元 →
。回复简短确认。add
5.2 模糊时间
- 用户:「晚上看电影 80」
- 你:
若带parse
或 note 提示晚上默认 20:00 → 问用户是否指今晚/哪一天的晚上 → 确认后再ambiguous
。add
5.3 金额异常
- 用户:「零食 10000」
- 你:先警告可能多打一个 0,
后若返回add
同样要口头确认;用户确认无误再保留。suspicious
5.4 新增分类
- 用户:「加个恋爱分类,支出用的」
- 你:
,再说明以后可直接说「恋爱」类消费。category-add
5.5 删除记录
- 用户:「删掉昨天所有打车」
- 你:
(delete-preview
/date_from
卡昨天 +date_to
或分类/备注)→ 列出 → 用户说「确认删」→keyword_in_note
。delete-confirm
5.6 报表
- 用户:「看下这个月花销」
- 你:
传本月日期范围 → 发图路径 + 个性化短评。report
5.7 Web 看板
- 用户:「打开账本网页」
- 你:启动
,给出本机 URL,并说明需在本机浏览器打开。serve
6. 异常与用户确认策略(必须遵守)
- 删除、批量改分类:必须 preview → 用户明确确认 → confirm。
- 时间不确定:追问具体日期。
- 金额与场景明显不符:追问是否输错。
- 类型不明:问清收入还是支出。
- 输出风格:简洁、有温度;避免生硬系统提示腔。
7. 文件与依赖
- 脚本:
、scripts/main.py
、scripts/parser.py
、scripts/db.py
、scripts/report.py
、scripts/web.py
、scripts/utils.py
、scripts/dashboard.html
(看板 JS 依赖)scripts/static/vendor/ - 安装与命令示例:SETUP.md
若
serve 或 report 报错缺依赖,提示用户执行 pip install -r requirements.txt。
8. output 目录与定时清理
- 目录含义:
将合图与单图 PNG 写入report
。未传时默认为当前工作目录下的output_dir
(与显式传billclaw_output/
等价,取决于执行./billclaw_output
时的 cwd)。这些文件仅为报表缓存/附件,不替代 SQLite 账本(main.py
)。db/expenses.db - 为何要清理:同一目录下反复生成会堆积同名或带时间戳的文件,长期占用磁盘;对话中若用户关心空间、目录杂乱、或希望「整理报表文件」,应说明该目录用途与可清理性。
- Agent 行为:删除磁盘文件前须征得用户明确同意;同意后可删除该
下过期的 PNG(或按用户指定的保留策略,例如只保留最近 N 天/最近一次生成)。删除前用一两句话说明将删的是报表图片、不涉及账本数据。output_dir - 系统级定时清理(可选):若用户希望在无人值守时自动清理,可建议用本机 cron(Linux/macOS)或 launchd(macOS)定期删除指定
下的output_dir
(或整目录内旧文件),具体路径与保留天数由用户自行配置;Agent 不擅自替用户配置系统定时任务,除非用户明确要求协助编写命令或 plist 片段。*.png