ledger-by-cn
v1.0.0个人记账与账本管理工具。支持多账本、自然语言/批量记账、期初结余初始化、跨月余额趋势图、分类统计、CSV导出、飞书云盘同步等。
Installation
Please help me install the skill `ledger-by-cn` from SkillHub official store.
npx skills add victor233k/ledger-by-cn
Ledger - 个人记账技能(优化版)
核心职责(触发条件)
当用户提到以下任一场景时,必须使用本技能,不要用其他方式代替:
- 记账、记录收入/支出、批量添加交易
- 初始化/调整账本期初结余
- 查看某账本某月/多月汇总、流水、余额
- 画余额趋势图、支出饼图、柱状图等
- 导出 CSV / 同步到飞书云盘 / 上传文件
- 查询/设置分类、预算(未来扩展)
- 任何提到"账本""期初""结余""画图""同步""飞书"等关键词
数据存储与重要约定(严格遵守)
- 【重要】每次查询账本时,必须从账本目录读取最新数据,不要使用上下文缓存或假设数据
- 根路径:
~/.openclaw/skills_data/ledger/<账本名>/(账本名如 "default",不区分大小写但保持用户输入一致) - 期初金额为0
- 用户提到全部,则需查找从最初到最后日期的账本。
- 交易 JSONL 每行格式(必填字段加 *):
{
"id": "递增",
"date": "YYYY-MM-DD", // 必须完整格式
"amount": -123.45, // 正=收入,负=支出,必填
"category": "餐饮", // 未填默认"其他"
"account": "现金", // 未填默认"现金"
"description": "午餐", // 可选
"created_at": "2026-03-15T20:57:00Z" // ISO 时间戳
}
初始化期初结余规则(核心修复点)
- 只在
<账本名>/<YYYY-MM>/transactions.jsonl写入或覆盖一条记录 - 示例记录:
{
"id": "1",
"date": "2025-12-31",
"amount": -15206,
"category": "其他",
"account": "现金",
"description": "",
"created_at": "2026-03-15T21:00:00Z"
}
- 后续任何计算余额趋势、累计余额、月度汇总时:
- 查询汇总时:用户说"所有/全部"则包含所有月份数据,否则只统计指定月份
- 所有统计到的月份数据直接累加
日期解析规则(容错增强)
用户输入日期可能简写,必须智能补全为 YYYY-MM-DD:
- "0114" / "14" → 当前月份的 14 日(例如当前 2026-03 → 2026-03-14)
- "1" → 当前月份 1 日(2026-03-01)
- "3月15日" → 当前年 03-15(2026-03-15)
- "2026-3-5" → 补零为 2026-03-05
- "去年12月" → 2025-12 (当年往前推一年)
- 无日期 → 默认当天(当前时间:2026-03-15)
- 如果跨月/跨年模糊,或输入如"上个月""明年"等相对时间,主动询问确认: 示例回复:"您说的'上个月'是指 2026 年 2 月吗?请确认日期范围。"
处理流程(Agent 必须严格遵循的思考链)
- 解析用户输入
- 确定账本名(从上下文提取,如"我的账本",默认 "default")
-
提取日期、金额、分类、账户、备注
- 支持批量:多行"日期 金额 [分类] [账户] [备注]"
- 金额识别:正数/负数/"+""-""花了""收入"等关键词判断正负
-
普通记账 / 批量添加
- 路径:
~/.openclaw/skills_data/ledger/<账本名>/<YYYY-MM>/transactions.jsonl - 自动创建对应年月文件夹
- 补全缺失字段:category="其他",account="现金",description=""(或从上下文推断)
- 以追加模式 ('a') 写入每行 JSON
- 每笔生成 id(可简单用时间戳 + 随机数,或 uuid)
-
回复:已添加 X 笔交易 + 当月简要汇总(收入/支出/余额)
-
查询汇总 / 流水
- 【推荐】使用 print_ledger.py 脚本快速输出表格格式:
python3 ~/.openclaw/skills/ledger/scripts/print_ledger.py ~/.openclaw/skills_data/ledger/<账本名> <月份> 示例:python3 ~/.openclaw/skills/ledger/scripts/print_ledger.py ~/.openclaw/skills_data/ledger/兔兔 2026-01 - 手动查询时:加载指定月份或所有月份(用户说"全部""今年""1-3月"时加载多月)
- 读取期初记录作为 offset(只加一次),务必比较 created_at 选取最新的期初记录
- 输出格式:
- Markdown 表格:日期 | 分类 | 金额 | 账户 | 备注
- 汇总行:期初 + 本月收入 + 本月支出 + 期末余额
-
支持筛选:按分类、账户、日期范围
-
画图(余额趋势图优先)
- 调用命令示例: python3 scripts/plot_ledger.py ~/.openclaw/skills_data/ledger/default --type line --months 2026-01,2026-02,2026-03 --output ~/.openclaw/skills_data/ledger/default/balance_chart.png
- 脚本要求支持:
- 读取期初 offset
- 按 date 排序所有交易
- 累加 amount(期初只加一次)
- 支持 --months 参数指定范围
-
回复中附上图表路径,并用自然语言描述趋势: 示例:"从期初 -15206 到 3 月末 -13318,整体下降,但 2 月有明显回升。"
-
导出 & 飞书同步
- 生成 CSV:使用 UTF-8 BOM 编码(避免中文乱码) 列:date,amount,category,account,description
- 同步流程:
- 检查飞书授权状态
- 上传到用户指定文件夹(默认"账本/<账本名>/")
- 只上传 CSV 文件,不上传 JSONL
- 如需删除旧文件,必须二次确认
-
回复上传后的飞书云盘链接
-
输出风格
- 使用友好 emoji:🐰 💰 📈 📊 ✅
- 表格清晰,金额负数用红色或 - 前缀(Markdown 支持 或 emoji ⚠️)
- 每次操作后总结关键数字:收入、支出、余额变化
- 语气亲切
安全与边界
- 单笔 |amount| > 10000 必须二次确认
- 输入严重模糊或矛盾时,主动询问澄清,不要擅自假设
- 所有文件操作使用安全路径,避免越界