{"id":"a9020d99-412e-4315-8ee0-24a040a3c1ec","entityType":"agent","slug":"clawhub-tsag1-simple-ledger","name":"simple-ledger","canonicalUrl":"https://www.xpersona.co/agent/clawhub-tsag1-simple-ledger","canonicalPath":"/agent/clawhub-tsag1-simple-ledger","generatedAt":"2026-10-10T06:43:47.003Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-09T22:08:45.548Z","emptyReason":null},"description":"Log expenses, check balances, track budgets, set savings goals, and monitor stock/fund/ETF investments from natural language. Plain-text CSV storage, multi-a... Skill: simple-ledger Owner: tsag1 Summary: Log expenses, check balances, track budgets, set savings goals, and monitor stock/fund/ETF investments from natural language. Plain-text CSV storage, multi-a... Tags: accounting:1.0.0, budget:1.0.0, csv:1.0.0, latest:104.0.1, ledger:1.0.0, personal-finance:1.0.0, zh:1.0.0 Version history: v104.0.1 | 2026-07-15T03:51:19.174Z | user fix: correct test expectations to match net-","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.9K downloads reported by the source. Last updated 10/9/2026.","installCommand":"clawhub skill install s1759n54sysfe5jhqj320wvtzh875km6:simple-ledger","sourceUrl":"https://clawhub.ai/tsag1/simple-ledger","homepage":"https://clawhub.ai/tsag1/skills/simple-ledger","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/tsag1/simple-ledger","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/tsag1/skills/simple-ledger","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":66,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Log expenses, check balances, track budgets, set savings goals, and monitor stock/fund/ETF investments from natural language. Plain-text CSV storage, multi-a..."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-09T22:08:45.548Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T22:08:45.548Z","emptyReason":null},"stars":null,"forks":null,"downloads":1944,"packageName":null,"latestVersion":"104.0.1","tractionLabel":"1.9K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T22:08:45.523Z","emptyReason":null},"lastUpdatedAt":"2026-10-09T22:08:45.548Z","lastCrawledAt":"2026-10-09T22:08:45.523Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-10T22:08:45.523Z","lastVerifiedAt":null,"highlights":[{"version":"104.0.1","createdAt":"2026-07-15T03:51:19.174Z","changelog":"fix: correct test expectations to match net-cost method, remove unused realized_pnl field, fix division-by-zero when total_cost is negative after profitable sells","fileCount":37,"zipByteSize":104374},{"version":"103.0.1","createdAt":"2026-07-06T03:27:11.079Z","changelog":"Code review fixes and documentation updates","fileCount":37,"zipByteSize":104290},{"version":"103.0.0","createdAt":"2026-07-01T13:45:38.668Z","changelog":"Optimize SKILL.md structure (capabilities first, restrictions second); expand English description; add English README.md for independent users; add references/invest_api.md command reference; trim triggerWords to reduce false triggers. Tests: 28/28 passing.","fileCount":37,"zipByteSize":103773},{"version":"102.0.0","createdAt":"2026-06-16T01:12:19.401Z","changelog":"feat: 9-column CSV format with inline price, net-cost method, sell guard","fileCount":31,"zipByteSize":100121},{"version":"101.0.1","createdAt":"2026-06-07T18:54:29.793Z","changelog":"净成本法重构：持仓成本=总买入-总卖出，同价买卖不再产生虚假盈亏；CSV新增现价列，移除prices.json依赖；description优化","fileCount":34,"zipByteSize":101620},{"version":"101.0.0","createdAt":"2026-06-07T18:50:59.060Z","changelog":"净成本法重构：持仓成本=总买入-总卖出，同价买卖不再产生虚假盈亏；CSV新增现价列，移除prices.json依赖；description优化","fileCount":34,"zipByteSize":101562},{"version":"1.8.1","createdAt":"2026-06-07T17:29:41.569Z","changelog":"搜索优化：name 改为 Ledger 记账 投资，增强中文搜索匹配度","fileCount":37,"zipByteSize":106219},{"version":"100.0.0","createdAt":"2026-06-07T17:25:52.671Z","changelog":"临时占位，将 latest 标签移至此版本","fileCount":37,"zipByteSize":106066}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s1759n54sysfe5jhqj320wvtzh875km6:simple-ledger","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-tsag1-simple-ledger/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-tsag1-simple-ledger/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-tsag1-simple-ledger/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-tsag1-simple-ledger/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-tsag1-simple-ledger/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-tsag1-simple-ledger/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T06:43:47.001Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-tsag1-simple-ledger/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-tsag1-simple-ledger/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-tsag1-simple-ledger/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-tsag1-simple-ledger/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-09T22:08:45.548Z","emptyReason":null},"readme":"Skill: simple-ledger\n\nOwner: tsag1\n\nSummary: Log expenses, check balances, track budgets, set savings goals, and monitor stock/fund/ETF investments from natural language. Plain-text CSV storage, multi-a...\n\nTags: accounting:1.0.0, budget:1.0.0, csv:1.0.0, latest:104.0.1, ledger:1.0.0, personal-finance:1.0.0, zh:1.0.0\n\nVersion history:\n\nv104.0.1 | 2026-07-15T03:51:19.174Z | user\n\nfix: correct test expectations to match net-cost method, remove unused realized_pnl field, fix division-by-zero when total_cost is negative after profitable sells\n\nv103.0.1 | 2026-07-06T03:27:11.079Z | user\n\nCode review fixes and documentation updates\n\nv103.0.0 | 2026-07-01T13:45:38.668Z | user\n\nOptimize SKILL.md structure (capabilities first, restrictions second); expand English description; add English README.md for independent users; add references/invest_api.md command reference; trim triggerWords to reduce false triggers. Tests: 28/28 passing.\n\nv102.0.0 | 2026-06-16T01:12:19.401Z | user\n\nfeat: 9-column CSV format with inline price, net-cost method, sell guard\n\nv101.0.1 | 2026-06-07T18:54:29.793Z | user\n\n净成本法重构：持仓成本=总买入-总卖出，同价买卖不再产生虚假盈亏；CSV新增现价列，移除prices.json依赖；description优化\n\nv101.0.0 | 2026-06-07T18:50:59.060Z | user\n\n净成本法重构：持仓成本=总买入-总卖出，同价买卖不再产生虚假盈亏；CSV新增现价列，移除prices.json依赖；description优化\n\nv1.8.1 | 2026-06-07T17:29:41.569Z | user\n\n搜索优化：name 改为 Ledger 记账 投资，增强中文搜索匹配度\n\nv100.0.0 | 2026-06-07T17:25:52.671Z | user\n\n临时占位，将 latest 标签移至此版本\n\nv1.8.0 | 2026-06-07T17:25:29.220Z | user\n\n紧急修复：恢复正确版本号，撤销误发版本\n\nv1.7.10 | 2026-06-07T17:25:09.697Z | user\n\n正式将--name设为simple-ledger (记账 投资)，覆盖之前测试版本\n\nv99.99.98 | 2026-06-07T17:24:55.126Z | user\n\ntemp\n\nv1.7.9 | 2026-06-07T17:23:36.539Z | user\n\n描述改回v1.7.0完整英文版，中文基于英文直译（覆盖测试版99.99.99）\n\nv99.99.99 | 2026-06-07T17:13:24.341Z | user\n\ntest\n\nv1.7.8 | 2026-06-07T17:08:58.070Z | user\n\n搜索优化：name 改为 Ledger 记账 投资，增强中文搜索匹配度\n\nv1.7.7 | 2026-06-07T16:52:05.205Z | user\n\ndescription: 英文改回v1.7.0完整版，中文基于英文直译\n\nv1.7.6 | 2026-06-07T16:41:37.901Z | user\n\nsearch: --name加入中文关键词(记账 投资)，中英文搜索兼顾\n\nv1.7.5 | 2026-06-07T16:28:09.948Z | user\n\nsearch: 显式传递--name参数，让ClawHub线上显示name_zh中文名\n\nv1.7.4 | 2026-06-07T16:24:55.501Z | user\n\nsearch: name从simple_ledger改回simple-ledger（含连字符），恢复ledger关键词含量\n\nv1.7.3 | 2026-06-07T14:45:17.704Z | user\n\ndescription英文摘要嵌入中文关键词，提升中文搜索\n\nv1.7.2 | 2026-06-07T14:38:00.514Z | user\n\nP0修复: generate_report重复print、invest卖出预检查、goal.py数据路径迁移workspace; P1合规: name蛇形、description_zh精简、triggerWords YAML字段; P2: budget.py改csv.reader、parse_entry账户精确匹配\n\nv1.7.1 | 2026-06-04T04:31:22.686Z | user\n\nfix: do_refresh() skip securities with zero holdings (e.g. cleared 亨通光电)\n\nv1.7.0 | 2026-06-03T07:10:30.946Z | user\n\n新增联网行为配置（默认离线，auto-refresh opt-in）；--auto-refresh / --enable-auto-refresh / --disable-auto-refresh；do_portfolio/do_summary 自动联网刷新；SKILL.md 新增联网配置章节；10个新增测试用例；全部89个用例通过\n\nv1.6.5 | 2026-06-02T03:21:51.397Z | user\n\n隐私清理：移除发布包中的真实投资记录和本地缓存/测试结果；改用空价格配置和投资账本示例模板；增加 .clawignore；保持 190 项测试通过\n\nv1.6.4 | 2026-06-02T03:13:39.852Z | user\n\n安全审查修复：投资买卖在非交互环境拒绝写入并强制交互式 Y/N 确认；代码搜索、行情刷新和 quote 查询全部改为显式 --allow-network；清理直接记录和隐式联网文档示例；新增安全回归测试\n\nv1.6.3 | 2026-06-02T02:20:14.507Z | user\n\n彻底移除 append_to_main_ledger 及 --ledger-csv 参数，投资记录与日常账本完全隔离；清理所有 -y 跳过确认文档残留；添加严格触发边界排除规则；添加网络查询隐私提示；添加持久化写入警告\n\nv1.6.2 | 2026-06-02T01:11:38.203Z | user\n\n安全审查修复：添加权限声明(permissions)、禁用投资交易自动同步主账本、加强删除和确认操作的警告提示、补充数据隔离说明\n\nv1.6.1 | 2026-06-01T16:01:26.067Z | user\n\n修复2个审计真bug：goal delete字段名错误（amount→target）+ 删除不存在snapshot误导提示；移除测试脚本无用依赖pyyaml；测试全过\n\nv1.6.0 | 2026-06-01T14:39:03.501Z | user\n\n安全修复：路径白名单/输入校验/ANSI过滤/确认机制/删除确认，已通过代码文档一致性验证\n\nv1.0.1 | 2026-06-01T14:38:11.894Z | user\n\n安全修复：路径白名单/输入校验/ANSI过滤/确认机制/删除确认，已通过代码文档一致性验证\n\nv1.5.1 | 2026-06-01T08:16:35.634Z | user\n\n修复invest.py崩溃bug(--dividend引用残留)、投资数据目录迁移到用户数据目录(~/.openclaw/workspace/data/ledger/)不再随skill安装携带他人数据、skill安装包中的investments.csv和prices.json改为空模板\n\nv1.5.0 | 2026-06-01T03:05:53.937Z | user\n\n优化搜索元数据：中文名改为简单记账·个人投资管家，description_zh嵌入高频搜索词（记账/投资记账/持仓管理/消费记录），tags新增中文标签（记账/投资/持仓/消费/股票/基金/ETF/账本/支出/收入）\n\nv1.4.0 | 2026-06-01T01:39:56.467Z | user\n\n修复11个功能问题（数据损坏、分类名不一致、Agent交互确认、CSV格式统一、金额解析万X千、ratio参数、编码统一、报告补充日均/最大单笔、主账本路径）、7个安全文档问题（权限声明、依赖描述、约束准确性、触发词消歧、删除警告、文件修改提醒）、移除未实现的分红CLI文档\n\nv1.3.0 | 2026-05-27T09:46:06.581Z | user\n\n修复预算月度筛选bug、分红记录加二次确认、加网络用途说明、加删除确认提示\n\nv1.2.0 | 2026-05-27T08:19:03.367Z | user\n\n修复依赖声明、买卖自动同步账本、扩充分类词表、BOM编码优化、README全面更新\n\nv1.1.0 | 2026-05-25T12:34:00.132Z | user\n\n新增：名称自动查股票/基金代码（lookup_code.py）；新增14条自动化测试覆盖代码查找流程；修复8条历史失败测试，现有79条测试全部通过；优化SKILL.md投资部分交互说明\n\nv1.0.0 | 2026-05-21T16:28:56.318Z | user\n\n简洁高效的个人记账工具，支持自然语言记账、CSV存储、查询统计、月度报告、投资持仓，83条测试全绿\n\nArchive index:\n\nArchive v104.0.1: 37 files, 104374 bytes\n\nFiles: _meta.json (134b), data/example.csv (713b), data/investments.csv (276b), data/README.md (646b), examples/README.md (389b), examples/sample.csv (890b), README.md (4476b), references/budget_guide.md (1853b), references/education.md (7349b), references/financial_benchmarks.md (5871b), references/goal_guide.md (1934b), references/invest_api.md (4473b), references/invest_guide.md (3738b), references/ledger_format.md (3813b), references/user_guide.md (2138b), scripts/_fund_loader.py (835b), scripts/budget.py (16484b), scripts/generate_report.py (11457b), scripts/goal.py (11013b), scripts/invest.py (46001b), scripts/lookup_code.py (4839b), scripts/parse_entry.py (16287b), scripts/query_ledger.py (13418b), scripts/validate_line.py (2486b), skill-card.md (2770b), SKILL.md (14759b), tests/eval_cases.yaml (10184b), tests/fixtures/empty.csv (135b), tests/fixtures/sample.budget.json (131b), tests/fixtures/sample.csv (1380b), tests/results/v2_report.md (3495b), tests/run_tests.py (25021b), tests/test_comprehensive.py (44453b), tests/test_ledger.py (39357b), tests/test_runner.sh (1593b), tests/test_security.py (5852b), tests/validate_skill.sh (5305b)\n\nFile v104.0.1:SKILL.md\n\n---\nname: simple-ledger\nname_zh: 简单记账 · 个人投资管家\ndescription: Log expenses, check balances, track budgets, set savings goals, and monitor stock/fund/ETF investments from natural language. Plain-text CSV storage, multi-account, offline-first with optional real-time quotes via opt-in network access.\ndescription_zh: 记账工具，一句话记录日常消费。自动分类、查账单、预算管理、月度报告、攒钱目标。支持股票/基金/ETF 投资记录、持仓查询、收益分析、实时行情刷新（需显式授权联网）。CSV 本地存储，支持多账户管理。\ntriggerWords:\n  - 记一笔\n  - 帮我记账\n  - 记到账本里\n  - 这个月花了多少\n  - 查账单\n  - 月度报告\n  - 消费报告\n  - 收支\n  - 设定预算\n  - 攒钱目标\n  - 查持仓\n  - 买入基金\n  - 买入股票\n  - 卖出股票\nmetadata:\n  openclaw:\n    requires:\n      bins: [python3]\n      pypi: [akshare]\n    tags: [ledger, budget, personal-finance, accounting, csv, natural-language, zh, 记账, 记一笔, 账本, 流水账, 消费记录, 支出管理, 个人理财, 个人财务, 资产管理, 投资, 投资记账, 持仓, 股票, 基金, ETF, 月度报告, 消费分析, 预算管理, 预算规划, 攒钱目标, 财务目标, 收支记录, 账户余额, 查账]\n    permissions:\n      file:\n        read: [\"~/.openclaw/workspace/data/ledger/**\"]\n        write: [\"~/.openclaw/workspace/data/ledger/**\"]\n      network:\n        domains: [\"*.sina.com.cn\", \"*.eastmoney.com\", \"*.akshare.xyz\"]\n      exec:\n        scripts: [\"scripts/*.py\"]\n---\n\n## Overview\n\nA natural-language expense tracker for everyday spending, plus investment tracking for stocks/funds/ETFs. Just say \"lunch cost 50 today\" — the agent parses and appends a CSV row to your ledger. No database, no cloud sync, just one CSV file.\n\n**What this skill is good at:**\n\n- 📝 **Natural-language logging** — record an expense with one sentence\n- 📊 **Spending queries** — by month, by category, by account\n- 💰 **Multi-account balances** — WeChat Pay, Alipay, bank card, cash\n- 📐 **Budget management** — set monthly caps per category, get overspend alerts\n- 📈 **Monthly reports** — income/expense breakdown with visual ASCII chart\n- 🎯 **Savings goals** — track progress toward a target (trip, emergency fund)\n- 💹 **Investment tracking** — buy/sell stocks & funds, portfolio P&L, optional live quotes\n\n**What this skill is NOT:**\n\n- ❌ Not an investment advisor (no stock picks, no market predictions)\n- ❌ Not a tax planner\n- ❌ Not a bank sync tool (no automatic transaction import)\n\n---\n\n## Quick Start\n\nJust tell the agent something like:\n\n```\n今天中午吃了碗面花了25\n昨天打车23.5\n工资到账8000\n买了件外套299，支付宝付的\n```\n\nThe agent will:\n1. Parse date / amount / category / description / account from your sentence\n2. Append a row to `~/.openclaw/workspace/data/ledger/default.csv`\n3. Show you the updated balance\n\nDefault account is **WeChat Pay** if you don't specify one.\n\n---\n\n## Core Features\n\n### 1. 📝 Natural-language logging\n\n**More examples:**\n- \"今天中午吃饭花了50块\"\n- \"昨天打车花了23.5\"\n- \"工资到账8000\"\n- \"充话费30\"\n- \"买了一件外套299，用支付宝付的\"\n- \"给小王转了200\"\n\n**Batch logging:**\n```\n今天花了：早餐15、打车30、午饭45\n```\n\n**Confirm-then-write:** the agent shows the parsed entry before appending.\n\n**Parsed fields:**\n\n| Field | Default | Notes |\n|-------|---------|-------|\n| `date` | today | supports \"today\", \"yesterday\", \"last Wednesday\" |\n| `amount` | required | decimal allowed |\n| `category` | auto-inferred | from keyword list (see references) |\n| `description` | auto-extracted | brief summary |\n| `account` | 微信钱包 | WeChat Pay default |\n\n### 2. 📊 Spending queries\n\n- \"这个月花了多少\" — total spending this month\n- \"上个月餐饮多少钱\" — by category, by month\n- \"最近的账单\" — recent transactions\n- \"我的余额\" / \"各账户余额\" — account balances\n\nOutput format:\n```\n📊 2026年5月 餐饮支出\n日期        金额      描述\n2026-05-01  ¥50.00   午餐\n2026-05-03  ¥128.00  火锅\n...\n合计        ¥238.00\n```\n\n### 3. 💰 Account balance management\n\n- View: \"微信钱包还有多少\"\n- Initialize: \"微信钱包初始余额1000\"\n- Adjust: \"银行卡余额修正为5000\"\n\nBalance = initial balance + sum(income) − sum(expense)\n\n### 4. 📐 Budget management\n\n```bash\npython3 scripts/budget.py <ledger.csv> --set 餐饮 2000\npython3 scripts/budget.py <ledger.csv> --progress 2026-05\npython3 scripts/budget.py <ledger.csv> --alert 2026-05\npython3 scripts/budget.py <ledger.csv> --template 15000   # 50/30/20 rule\npython3 scripts/budget.py <ledger.csv> --list\npython3 scripts/budget.py <ledger.csv> --remove 餐饮\n```\n\nSee `references/budget_guide.md` for details.\n\n### 5. 📈 Monthly report\n\n```bash\npython3 scripts/generate_report.py ./default.csv --month 2026-05\npython3 scripts/generate_report.py ./default.csv --month 2026-05 --output report.txt\n```\n\nOutput includes: income/expense summary, top 5 categories (ASCII bar chart), daily average, biggest single expense, vs last month delta, brief suggestions.\n\n### 6. 🎯 Savings goals\n\n```bash\ngoal.py create \"旅行基金\" 10000 2026-12-31\ngoal.py deposit \"旅行基金\" 2000\ngoal.py progress \"旅行基金\"\ngoal.py list\ngoal.py delete \"旅行基金\"    # ⚠️ requires typing \"删除\" to confirm\n```\n\nSee `references/goal_guide.md`.\n\n### 7. 💹 Investment tracking\n\n⚠️ **Network:** investment features (code lookup + live quotes) require `akshare` (pip install) and explicit `--allow-network` flag. All other features are offline.\n\n**Quick commands:**\n\n```bash\n# Buy (auto-lookup code by name, requires Y/N confirm)\ninvest.py --buy \"有色金属ETF南方\" auto 3100 2.07 2026-01-10 --allow-network\n\n# Buy (manual code)\ninvest.py --buy \"沪深300ETF\" 510050 100 3.50 2026-01-15\n\n# Sell\ninvest.py --sell \"沪深300ETF\" 510050 500 4.00 2026-03-01\n\n# Portfolio (offline, uses last-set prices)\ninvest.py --portfolio\n\n# Portfolio with auto-refresh quotes (needs network opt-in)\ninvest.py --portfolio --auto-refresh\n\n# Total P&L\ninvest.py --summary\n\n# Single quote\ninvest.py --quote 601138 --allow-network\n```\n\nFull command reference: `references/invest_api.md`.\n\n**Auto-refresh mode:** create `~/.openclaw/workspace/data/ledger/.env` with `AUTO_REFRESH=1` to make portfolio queries always fetch live prices. Delete the file to disable.\n\n---\n\n## Trigger Conditions\n\nActivate this skill **only when the user expresses an explicit financial intent**:\n\n- Log an expense (\"记一笔：花了XX\", \"帮我记账\", \"记到账本里\")\n- Query spending (\"这个月花了多少\", \"查账\", \"账单\")\n- Account management (\"我的余额\", \"银行卡还有多少\")\n- Monthly report (\"月度报告\", \"消费分析\")\n- Investment action (\"买入XX股\", \"卖了XX\", \"查持仓\", \"投资收益\") — ⚠️ needs network\n- Budget (\"设定预算\", \"超支了吗\", \"生成预算模板\")\n- Savings goal (\"建个攒钱目标\", \"旅行基金进度\")\n\n**Do NOT activate for:**\n\n- Casual mention of money in conversation (\"那顿饭花了50，味道一般\")\n- Asking about prices without logging intent (\"这个多少钱\", \"iPhone 17 多少钱\")\n- Generic financial discussion (\"最近花了不少钱\" as a sigh)\n- Other people's spending (only the user's own)\n\n**Disambiguation rule:** If the user is just chatting about a recent expense, treat it as ordinary conversation. The key signal is whether the user has an **explicit intent to record, manage, or query** their finances.\n\n---\n\n## File Format (Original CSV)\n\n```\n# 日期,类型,金额,分类,描述,账户\n余额,微信钱包,1000.00\n余额,支付宝,2000.00\n余额,银行卡,50000.00\n余额,现金,500.00\n2026-05-21,支出,50,餐饮,午餐,微信钱包\n2026-05-22,收入,8000,工资,5月工资,银行卡\n2026-05-23,支出,299,购物,外套,支付宝\n```\n\n**Rules:**\n- 6 fields: `日期,类型,金额,分类,描述,账户`\n- `类型` must be `收入` or `支出`\n- `金额` is always positive (direction comes from `类型`)\n- Flat account names (no hierarchy)\n- Initial balance uses `余额,账户,金额` format\n\n**Default location:** `~/.openclaw/workspace/data/ledger/default.csv`\n\n---\n\n## 🔒 Security & Permissions\n\nThis skill performs the following operations:\n\n| Operation | Behavior | Scope |\n|-----------|----------|-------|\n| 📖 Read files | Reads ledger CSV, budget JSON, investment CSV, goals JSON | Only `data/` directory |\n| ✏️ Write files | Appends/modifies ledger entries, budgets, investments, goals | Only `data/` directory |\n| 🗑️ Delete data | Deletes transactions, budgets, goals (all require user Y/N confirm) | Only `data/` directory |\n| 🌐 Network access | Queries stock/fund codes + real-time quotes via akshare (Sina/Eastmoney APIs) | Sends only security codes/names, no personal financial data |\n| 💻 Execute scripts | Runs Python scripts in `scripts/` | Only this skill's own scripts |\n\n**Data isolation:** `investments.csv` (investments) and `default.csv` (daily ledger) are completely independent files.\n\n**Will NOT do:**\n\n- ❌ Read MEMORY.md, USER.md, SOUL.md, or any non-financial file\n- ❌ Access ~/.ssh, ~/.aws, ~/.config or other system directories\n- ❌ Upload your financial data to any external server\n- ❌ Modify system files or execute external commands\n\n**Backup reminder:** All operations modify local CSV/JSON files directly. Back up `data/` regularly.\n\n---\n\n## 🌐 Network Behavior\n\n> ⚠️ **Network summary:** Investment features (security code lookup + live quotes) require network via the `akshare` library calling Sina Finance public APIs. All other features are fully local — **your financial data is never sent to any external server**.\n\n> 🔒 **Privacy notice:** Network queries only send security codes/names to public quote APIs (Sina, Eastmoney). **No personal financial data (balances, transactions, account info) is transmitted.** Be aware that queries themselves reveal which securities you're interested in.\n\n**Default behavior: offline queries.**\n\nNetwork access uses an **explicit opt-in** mechanism — never enabled by default. Add `--allow-network` to one-off network commands, or set `AUTO_REFRESH=1` in a local `.env` file to auto-refresh quotes on portfolio queries.\n\n| Operation | Default | Enable network |\n|-----------|---------|----------------|\n| Portfolio (`--portfolio`) | offline (uses last-set prices) | add `--auto-refresh` |\n| Summary (`--summary`) | offline | add `--auto-refresh` |\n| Refresh quotes (`--refresh`) | blocked | add `--allow-network` |\n| Single quote (`--quote`) | blocked | add `--allow-network` |\n| Auto-lookup code on buy | blocked | add `--allow-network` |\n\n**Disable auto-refresh:** delete `~/.openclaw/workspace/data/ledger/.env` or say \"关闭自动联网刷新\".\n\n**Manual price update (no network):**\n\n```\n工业富联现在81.58\n亨通光电价格91.43\n```\n\nBoth methods (auto-refresh vs manual update) work side-by-side without conflict.\n\n---\n\n## First-run Setup\n\nWhen the user first triggers this skill:\n\n1. Check if ledger file exists\n2. If not, create with template header\n3. Ask for common payment methods and initial balances\n\n**Template:**\n\n```\n# 日期,类型,金额,分类,描述,账户\n# 个人账本 - 创建于 YYYY-MM-DD\n# 格式说明见 references/ledger_format.md\n\n# 账户初始余额\n余额,微信钱包,0.00\n余额,支付宝,0.00\n余额,银行卡,0.00\n余额,现金,0.00\n\n# === 交易记录 ===\n```\n\n---\n\n## Interaction Modes\n\n### Single entry (most common)\n\n```\n用户: 今天中午吃了碗面花了25\nAgent: 已记录 ✅\n      📅 2026-05-21\n      💰 ¥25.00\n      📂 餐饮\n      💳 微信钱包\n      📝 午餐\n      微信钱包余额：¥975.00\n```\n\n### Dialogue entry (multi-field fill-in)\n\n```\n用户: 花了200块\nAgent: 买的什么？\n用户: 买了本书\nAgent: 已记录 ✅ ...\n```\n\n### Goal-linked entry\n\nWhen the user says they saved money toward a goal, do two things:\n1. Call `goal.py deposit` to update goal progress\n2. Record the expense normally\n\n### Modify / Delete\n\n> ⚠️ All delete operations require user Y/N confirm — never auto-delete.\n\n- \"删掉刚那笔\" (delete most recent, needs confirm)\n- \"删除5月15日那笔餐饮\" (delete specific, needs confirm)\n- \"把刚才那笔改成30块\" (modify amount, needs confirm)\n\n---\n\n## ⚖️ Professional Standards\n\nThis skill provides **financial recording and basic analysis tools**, not investment advisory services.\n\n| Can do | Cannot do |\n|--------|-----------|\n| Record and analyze your spending data | Recommend specific financial products |\n| Compare your spending vs general benchmarks | Guarantee any investment return |\n| Suggest savings based on your data | Predict market movements |\n| Explain financial concepts (compound interest, inflation) | Provide tax planning |\n| Help you build a savings plan | Do asset allocation |\n\n**Bottom line:** I help you understand where your money went, not where it should go.\n\n---\n\n## 📚 References\n\nLoad on demand:\n\n- **`references/ledger_format.md`** — CSV format details\n- **`references/budget_guide.md`** — budget management\n- **`references/goal_guide.md`** — savings goals\n- **`references/invest_guide.md`** — investment tracking workflow\n- **`references/invest_api.md`** — investment command reference\n- **`references/user_guide.md`** — user FAQ\n- **`references/financial_benchmarks.md`** — financial health benchmarks\n- **`references/education.md`** — financial concepts\n\n---\n\n## Tone & Style\n\n| Scenario | Style |\n|----------|-------|\n| Successful logging | Concise confirmation + key info: \"已记录 ✅ 餐饮 ¥35 余额 ¥965\" |\n| Monthly report | Clear data + 1-2 sentence suggestions |\n| User overspending | Gentle reminder, not criticism |\n| User reaching a goal | Genuine encouragement |\n| User asking investment advice | Educational content + disclaimer |\n\n**Avoid:** preachy tone, number-shaming, over-cautious language, fake intimacy.\n\n---\n\n## Constraints\n\n1. **Write vs delete separation.** Deletes require explicit user request + Y/N confirm — no auto-delete.\n2. **Amount required.** If amount can't be confirmed, ask.\n3. **Category guessable.** When confident, auto-categorize; when uncertain, offer options.\n4. **Date optional.** Defaults to today, supports relative dates.\n5. **Account optional.** Defaults to WeChat Pay.\n6. **Files are the database.** All data in CSV/JSON files. Users can edit any file with a text editor. Back up `data/` regularly.\n7. **External deps.** Basic features (logging, queries, budgets, reports, goals) use Python stdlib only. Investment code lookup requires `akshare` (pip install akshare) + network.\n\nFile v104.0.1:data/README.md\n\n# data/ 目录说明\n\n此目录用于存放用户的工作数据文件。\n\n## 文件说明\n\n- `example.csv` — 格式示例账本，包含账户初始余额和示例交易\n- `investments.csv` — 投资交易记录（买入/卖出/分红）\n- `goals.json` — 财务目标数据（自动生成）\n- `prices.json` — 投资品当前价格配置（手动更新）\n\n## 用户使用\n\n- 复制 `example.csv` 为你的工作账本\n- 建议存放在 `~/.openclaw/workspace/data/ledger/default.csv`\n- 也可以放在任何你喜欢的位置，脚本通过路径参数指定\n\n## 备份\n\n所有数据都是纯文本，建议定期备份 `data/` 目录。\n\nFile v104.0.1:examples/README.md\n\n# examples/ 目录说明\n\n包含简单的示例账本，适合初次使用时参考。\n\n## 文件\n\n- `sample.csv` — 最简示例，包含几个常见交易\n\n## 使用方式\n\n```bash\ncp examples/sample.csv ~/.openclaw/workspace/data/ledger/default.csv\n```\n\n然后告诉 Agent：\"我的账本在 `~/.openclaw/workspace/data/ledger/default.csv`\"，或者直接用路径参数调用脚本。\n\nFile v104.0.1:README.md\n\n# Simple Ledger · Personal Finance & Investment Tracker\n\nA natural-language expense tracker for everyday spending, plus investment tracking for stocks, funds, and ETFs. Just talk to your AI agent in plain English (or Chinese) — it parses your sentence and appends a row to a plain-text CSV ledger. No database, no cloud sync, no vendor lock-in.\n\n## Why Simple Ledger?\n\nMost personal finance apps force you into their schema, their cloud, their subscription plan. Simple Ledger does the opposite:\n\n- **One CSV file** — open it in Excel, Numbers, vim, or `cat`\n- **Natural language** — say \"spent 50 on lunch today\" and it's logged\n- **Offline-first** — all daily ledger features work without internet\n- **You own the data** — files live at `~/.openclaw/workspace/data/ledger/`\n- **Optional investments** — track stocks/funds/ETFs with opt-in live quotes\n\n## Features\n\n| Feature | Description | Network? |\n|---------|-------------|----------|\n| 📝 Natural-language logging | One sentence → CSV row | No |\n| 📊 Spending queries | By month, category, account | No |\n| 💰 Multi-account balances | WeChat Pay, Alipay, bank, cash | No |\n| 📐 Budgets | Per-category caps, overspend alerts | No |\n| 📈 Monthly reports | ASCII bar chart, top categories | No |\n| 🎯 Savings goals | Track progress, deposit reminders | No |\n| 💹 Investment tracking | Buy/sell, portfolio P&L | Opt-in |\n| 📡 Live quotes | Real-time prices via Sina/Eastmoney | Yes (opt-in) |\n\n## Quick Start\n\nTalk to your AI agent:\n\n```\nLunch cost 50 today\nSpent 23.5 on a taxi yesterday\nSalary arrived, 8000\nBought a jacket for 299, paid with Alipay\n```\n\nThe agent parses your sentence, shows the parsed entry for confirmation, then appends a row to `~/.openclaw/workspace/data/ledger/default.csv`.\n\n## Example Ledger\n\n```csv\n# 日期,类型,金额,分类,描述,账户\n余额,微信钱包,1000.00\n余额,支付宝,2000.00\n余额,银行卡,50000.00\n余额,现金,500.00\n2026-05-21,支出,50,餐饮,午餐,微信钱包\n2026-05-22,收入,8000,工资,5月工资,银行卡\n2026-05-23,支出,299,购物,外套,支付宝\n```\n\n## Installation\n\n```bash\nclawhub install simple-ledger\n```\n\nOr update to latest:\n\n```bash\nclawhub update simple-ledger --version 1.8.0\n```\n\n## Requirements\n\n- **Python 3** (built-in on macOS)\n- **akshare** (only for investment code lookup & live quotes): `pip install akshare`\n\n## Privacy & Data\n\nAll data lives in plain CSV/JSON files under `~/.openclaw/workspace/data/ledger/`. **Nothing is uploaded to any server.**\n\nThe only network operations are:\n\n1. Security code lookup (you say \"buy 有色金属ETF南方\", we ask Sina for its code)\n2. Live stock/fund quotes (when you opt-in)\n\nBoth only send the security name/code to public APIs — no balance, no transaction history, no account info.\n\n## File Structure\n\n```\nsimple-ledger/\n├── SKILL.md                    # Agent-facing documentation (Chinese + English)\n├── README.md                   # This file (user-facing English)\n├── _meta.json                  # Publishing metadata\n├── scripts/\n│   ├── parse_entry.py          # Parse natural language → CSV row\n│   ├── validate_line.py        # Validate CSV row format\n│   ├── query_ledger.py         # Read & filter ledger\n│   ├── generate_report.py      # Monthly report generator\n│   ├── budget.py               # Budget CRUD + alerts\n│   ├── goal.py                 # Savings goals CRUD\n│   ├── invest.py               # Investment tracking\n│   ├── lookup_code.py          # Security code lookup (network)\n│   └── _fund_loader.py         # Fund data loader\n├── references/\n│   ├── ledger_format.md\n│   ├── budget_guide.md\n│   ├── goal_guide.md\n│   ├── invest_guide.md\n│   ├── invest_api.md           # Investment command reference\n│   ├── user_guide.md\n│   ├── financial_benchmarks.md\n│   └── education.md\n├── examples/                   # Sample ledgers\n└── tests/\n    ├── test_ledger.py\n    ├── test_comprehensive.py\n    ├── test_security.py\n    ├── run_tests.py\n    ├── test_runner.sh\n    ├── validate_skill.sh\n    └── eval_cases.yaml\n```\n\n## License\n\nMIT-0 (free to use, modify, redistribute, no attribution required)\n\n## Links\n\n- ClawHub: https://clawhub.com/skills/simple-ledger\n- Issues: https://github.com/openclaw/clawhub/issues\n\nFile v104.0.1:_meta.json\n\n{\n  \"ownerId\": \"kn7dzk85gz4pz5c569zky2pssn875nwe\",\n  \"slug\": \"simple-ledger\",\n  \"version\": \"104.0.1\",\n  \"publishedAt\": 1784087479174\n}\n\nFile v104.0.1:references/budget_guide.md\n\n# 预算管理指南\n\n## 核心概念\n\n预算帮你在花钱之前先规划好各分类可以花多少，超出时提前预警，而不是事后后悔。\n\n## 基础操作\n\n### 设定单个分类预算\n\n```bash\npython scripts/budget.py 你的账本.csv --set 餐饮 2000\npython scripts/budget.py 你的账本.csv --set 交通 800\n```\n\n### 查看所有预算\n\n```bash\npython scripts/budget.py 你的账本.csv --list\n```\n\n### 查看执行进度\n\n```bash\npython scripts/budget.py 你的账本.csv --progress 2026-05\n```\n\n### 超支预警\n\n```bash\npython scripts/budget.py 你的账本.csv --alert 2026-05\n```\n\n### 移除预算\n\n```bash\npython scripts/budget.py 你的账本.csv --remove 餐饮\n```\n\n## 预算模板\n\n### 50/30/20 法则（推荐）\n\n基于月收入自动生成分类预算：\n- 50% 必要支出（居住、餐饮、交通、通讯、医疗）\n- 30% 弹性支出（购物、娱乐、教育、社交）\n- 20% 储蓄/投资\n\n```bash\npython scripts/budget.py 你的账本.csv --template 15000\n```\n\n### 自定义比例\n\n```bash\n# 需求40% / 想要30% / 弹性20% / 其他10%\npython scripts/budget.py 你的账本.csv --template 15000 --ratio 40 30 20 10\n```\n\n## 预算判断标准\n\n| 进度 | 状态 | 建议 |\n|------|------|------|\n| < 75% | ✅ 正常 | 放心花 |\n| 75-90% | 🔸 注意 | 控制消费节奏 |\n| 90-100% | ⚠️ 快超了 | 谨慎支出 |\n| > 100% | ❌ 已超支 | 本月不要再花了 |\n\n## 实用建议\n\n1. **先有收入再定预算** — 先确认月收入，再反推支出结构\n2. **先紧后松** — 预算设低一点，实际超了比计划超了心理负担小\n3. **重点盯一项** — 同时盯 10 个分类很累，先盯最重要的 2-3 个\n4. **按月清零** — 每月重新评估预算，不建议跨月滚动\n5. **把储蓄当支出** — 每月固定往存款账户\"花\"一笔，预算才算完整\n\nFile v104.0.1:references/education.md\n\n# 财务知识科普\n\n> 不讲高深理论，只讲跟日常记账相关的基础概念。\n> 看完能理解\"为什么这么记\"，而不是死记硬背。\n\n## 1. 单式记账：为什么选单式？\n\n### 单式记账（本 Skill 采用的方式）\n\n**一句话解释：花了一笔就记一笔，像流水账。**\n\n```\n2026-05-21  微信钱包  -50.00  餐饮:饮食  午餐\n```\n\n**特点：**\n- ✅ 简单直觉：花了 50 就写 -50\n- ✅ 学习成本几乎为零\n- ✅ 适合日常\"随手记\"\n- ❌ 无法自动校验是否漏记\n- ❌ 不适合企业财务或复杂资产跟踪\n\n### 传统双行记账\n\n**一句话解释：每笔交易至少影响两个账户，有借必有贷，借贷必相等。**\n\n比如\"午餐花了 50\"：\n```\n2026-05-21 * 午餐\n  Expenses:餐饮:饮食        50.00 CNY\n  Assets:微信钱包          -50.00 CNY\n```\n\n**特点：**\n- ✅ 严谨：每笔交易都平衡，不会出现\"钱从哪来\"的漏洞\n- ✅ 强大的报表能力：自动计算资产负债表、利润表\n- ✅ 适合复杂场景（多币种、投资组合、税务）\n- ❌ 学习门槛较高\n- ❌ 日常记账\"杀鸡用牛刀\"\n\n### 为什么 personal-ledger 选单式？\n\n| 对比 | 单式记账 | 传统双行记账 |\n|------|---------|---------|\n| 记一笔午餐 | 1 行 | 3 行 |\n| 需要知道的概念 | 金额、分类 | 借方、贷方、账户类型、货币 |\n| 记错了怎么办 | 删掉重来 | 可能导致全局不平衡 |\n| 适合谁 | 想随手记钱的普通人 | 需要专业财务报表的人 |\n\n**结论：** 对于\"知道钱花哪了\"这个目标，单式记账完全够用。\n\n## 2. 资产 vs 负债 vs 净资产\n\n### 资产（你拥有的、值钱的东西）\n\n- 银行卡里的存款 ✓\n- 微信/支付宝里的钱 ✓\n- 现金 ✓\n- 你名下的房产 ✓\n- 投资账户里的基金/股票 ✓\n\n### 负债（你欠别人的）\n\n- 信用卡欠款 ✓\n- 花呗/白条 ✓\n- 房贷 ✓\n- 车贷 ✓\n- 借别人的钱 ✓\n\n### 净资产（你\"真正\"有多少）\n\n```\n净资产 = 资产 − 负债\n```\n\n**举例：**\n- 银行卡有 5 万，微信有 3 千，现金 5 百 → 资产 = 53,500\n- 信用卡欠 2 千，花呗欠 5 百 → 负债 = 2,500\n- 净资产 = 53,500 − 2,500 = **51,000**\n\n**一个容易混淆的点：**\n信用卡里的钱不算资产！信用卡额度是\"你能借多少\"，不是\"你有多少\"。\n只有你还款之后，银行卡里减少的那部分才是支出。\n\n### 在记账中怎么体现？\n\n本 Skill 的处理方式：\n- **资产类账户**：微信钱包、支付宝、银行卡、现金 → 记余额变化\n- **负债类账户**：信用卡、花呗 → 支出时记到负债账户，还款时从资产转到负债\n- **净资产**：可通过\"所有资产账户余额之和 − 所有负债账户余额之和\"计算\n\n## 3. 现金流管理基础\n\n### 什么是现金流？\n\n**现金流 = 钱进来的速度 − 钱出去的速度。**\n\n通俗地说：你每个月进账多少，出账多少，中间的差额就是现金流。\n\n### 现金流的三种状态\n\n```\n收入 > 支出  →  正向现金流 → 钱越来越多 → 健康 ✅\n收入 = 支出  →  零现金流  → 没有积累   → 需要注意 ⚠️\n收入 < 支出  →  负向现金流 → 钱越来越少 → 危险 ❌\n```\n\n### 为什么现金流比\"赚多少钱\"重要？\n\n一个人月薪 2 万但每月花 2 万 1 千 → 每个月在\"变穷\"\n一个人月薪 8 千但每月只花 5 千 → 每个月在\"变富\"\n\n**赚多少决定了上限，花多少决定了实际积累。**\n\n### 如何改善现金流？\n\n**开源（增加收入）：**\n- 提升技能涨薪（最可持续）\n- 兼职 / 副业\n- 出租闲置资源\n- 理财收益（长期）\n\n**节流（减少支出）：**\n- 记账 → 发现不该花的钱\n- 区分\"需要\"和\"想要\"\n- 找更便宜的替代方案\n- 减少冲动消费（等 24 小时再买）\n\n**本 Skill 帮你做的是\"节流\"部分：** 通过记账让你看清支出，从而做出更好的消费决策。\n\n## 4. 预算为什么重要？\n\n### 没有预算的生活\n\n```\n月初：感觉有很多钱\n月中：也没怎么花啊？\n月底：钱呢？？？\n```\n\n### 有预算的生活\n\n```\n月初：这个月餐饮预算 2000，购物预算 1000\n月中：餐饮已经花了 1500，还剩 500，控制一下外卖\n月底：餐饮 1900，达标！购物 800，省了 200\n```\n\n### 预算的本质\n\n**预算不是限制你花钱，而是让你主动选择钱花在哪。**\n\n没有预算时，钱是被\"被动消费\"花掉的（广告、冲动、习惯）。\n有预算时，你把钱分配给\"真正重要的东西\"。\n\n### 怎么开始做预算？\n\n**第一步：先记账 1–2 个月，搞清楚现状**\n（别急着做预算，你都不知道现在花多少怎么做预算？）\n\n**第二步：按分类设定月度预算上限**\n\n参考\"财务基准参考\"中的占比，结合自己的实际情况设定。\n\n**第三步：月底对比实际 vs 预算**\n\n本 Skill 的月度报告会帮你做这个对比（未来版本会支持预算功能）。\n\n### 预算的常见误区\n\n| 误区 | 正确做法 |\n|------|---------|\n| \"预算越低越好\" | 预算要现实可行，否则坚持不下来 |\n| \"所有分类都要设预算\" | 先管好 TOP 3 大头（通常是居住、餐饮、购物） |\n| \"超预算就是失败\" | 超预算是正常的，关键是知道超了多少、为什么超 |\n| \"预算一定不能变\" | 每月根据实际情况调整，预算是活的 |\n\n## 5. 应急基金的重要性\n\n### 什么是应急基金？\n\n**一笔专门用来应对突发事件的存款。** 不投资、不消费、不动它，除非真有急事。\n\n### 什么算\"急事\"？\n\n- ✅ 突然失业，需要几个月的生活费\n- ✅ 生病住院，自费部分\n- ✅ 家里突然需要大额维修\n- ✅ 必须的紧急出行\n- ❌ 手机出了新款想换\n- ❌ 朋友借钱（除非是真正的紧急情况）\n- ❌ 双十一打折\n\n### 需要多少？\n\n| 安全等级 | 金额 | 适合谁 |\n|---------|------|--------|\n| 最低保障 | 1 个月支出 | 刚开始攒钱，有个底 |\n| 基本安全 | 3 个月支出 | 大多数人的目标 |\n| 比较安心 | 6 个月支出 | 有房贷/家庭责任的人 |\n| 非常安心 | 6–12 个月支出 | 自由职业/收入不稳定 |\n\n**怎么算 1 个月的支出？**\n看你最近一个月的月度报告里的\"总支出\"数字，或者把最近 3 个月的支出平均一下。\n\n### 放在哪里？\n\n- **活期存款 / 货币基金**：随时能取，收益虽然低但安全性最高\n- ❌ 不要放股票、基金（急用钱时可能正好在亏）\n- ❌ 不要放定期（提前取会损失利息）\n\n### 怎么攒？\n\n1. 每个月发工资后，**先把应急基金的钱转出来**，剩下的才是可以花的\n2. 从小目标开始：先攒 1 个月支出，再攒 3 个月\n3. 记账帮你控制支出，省下的钱就往应急基金里存\n\n### 为什么记账跟应急基金有关？\n\n**因为记账让你知道：**\n- 你每个月实际支出多少（决定了应急基金的目标金额）\n- 你每个月能存多少（决定了多久能攒够）\n- 你的支出里哪些可以砍（加速攒钱）\n- 你的消费趋势是否在恶化（提前预警）\n\n---\n\n> **总结：** 记账是所有财务管理的第一步。你不需要懂投资、不需要懂税务，先把\"钱去哪了\"这个问题回答清楚，其他的都是后面的事。\n\nFile v104.0.1:references/financial_benchmarks.md\n\n# 个人财务基准参考\n\n> 本文档提供常见的财务健康指标，用于在月度报告中给出有意义的参考对比。\n> 所有数据为通用参考值，个人情况千差万别，仅作方向性指引，不作硬性标准。\n\n## 1. 储蓄率目标\n\n| 阶段 | 推荐储蓄率 | 说明 |\n|------|-----------|------|\n| 刚工作 / 还债期 | ≥ 10% | 先养成习惯，金额不重要 |\n| 稳定期 | 20% – 30% | 大多数理财建议的\"甜蜜点\" |\n| 财务自由追求期 | 30% – 50% | 加速积累，需要较强的消费纪律 |\n\n**怎么算：**\n```\n储蓄率 = (收入 − 支出) / 收入 × 100%\n```\n\n**月度报告中的表述示例：**\n- 储蓄率 > 30%：\"本月储蓄率 35%，超过推荐的 30% 目标，继续保持！\"\n- 储蓄率 10%–30%：\"本月储蓄率 22%，在健康范围内。如果目标是加速储蓄，可以看看餐饮和购物有没有优化空间。\"\n- 储蓄率 < 10%：\"本月储蓄率偏低（8%）。建议先排查是否有大额意外支出，后续可以尝试把目标设到 15% 起步。\"\n\n## 2. 分类支出占比参考\n\n以下为税后月收入的百分比参考，适用于中国城市普通工薪家庭：\n\n| 分类 | 健康范围 | 警戒线 | 说明 |\n|------|---------|--------|------|\n| 🏠 居住（房租/房贷+水电物业） | 20% – 30% | > 40% | 含房租、房贷、水电燃气、物业 |\n| 🍜 餐饮 | 15% – 25% | > 35% | 含一日三餐、外卖、零食饮料 |\n| 🚌 交通 | 5% – 10% | > 15% | 含通勤、打车、公共交通 |\n| 🛍️ 购物 | 5% – 15% | > 25% | 含服饰、日用品、电子产品 |\n| 🎮 娱乐 | 3% – 8% | > 15% | 含视频会员、游戏、电影、社交 |\n| 📚 教育 | 2% – 5% | > 10% | 含课程、书籍、技能培训 |\n| 🏥 医疗 | 2% – 5% | > 10% | 含体检、药品、保险（不含社保） |\n| 📱 通讯 | 1% – 3% | > 5% | 含话费、网费 |\n| 💝 社交人情 | 3% – 8% | > 15% | 含红包、礼物、请客 |\n| 💰 储蓄/投资 | 20% – 30% | < 10% | 这是\"剩下来\"的部分 |\n\n## 3. 健康财务指标速查表\n\n### 核心三问\n\n| 指标 | 健康值 | 怎么算 |\n|------|--------|--------|\n| 应急基金 | ≥ 3 个月支出 | 把最近 3 个月的月均支出 × 3 |\n| 储蓄率 | ≥ 20% | (收入 − 支出) / 收入 |\n| 负债收入比 | ≤ 35% | 月还贷总额 / 月收入 |\n\n### 进阶指标\n\n| 指标 | 说明 | 健康范围 |\n|------|------|---------|\n| 流动性比率 | 能随时拿出的钱 / 月支出 | 3 – 6 |\n| 负债资产比 | 总负债 / 总资产 | < 50% |\n| 投资占资产比 | 投资类资产 / 总资产 | 随年龄递增，25岁>10%，35岁>30% |\n| 保险覆盖率 | 年保费 / 年收入 | 5% – 10% |\n\n### 简易评分卡\n\n用以下 5 项快速评估财务健康度，每项 20 分：\n\n1. **每月有结余**（储蓄率 > 10%）— 20 分\n2. **有应急基金**（≥ 1 个月支出）— 20 分\n3. **无高息负债**（无信用卡分期、网贷）— 20 分\n4. **知道钱花在哪了**（有记账习惯）— 20 分\n5. **有储蓄/投资目标**（哪怕是模糊的）— 20 分\n\n- 80–100：财务状况良好 👍\n- 60–79：基本健康，有优化空间\n- 40–59：需要关注，建议从记账开始\n- < 40：需要行动，优先处理高息负债\n\n## 4. 中国普通家庭消费结构参考\n\n数据来源：国家统计局居民消费支出分类（2023 年大致水平），城镇居民人均年消费支出约 3 万元。\n\n| 类别 | 占比 |\n|------|------|\n| 食品烟酒 | 29% |\n| 居住 | 24% |\n| 交通通信 | 14% |\n| 教育文化娱乐 | 10% |\n| 医疗保健 | 9% |\n| 衣着 | 6% |\n| 生活用品及服务 | 5% |\n| 其他用品及服务 | 3% |\n\n**注意：** 这是全国平均水平，一二线城市居住占比会显著更高（可达 35%–40%）。\n\n## 5. 不同收入水平的通用理财建议\n\n### 月收入 < 5000 元\n- **优先目标**：建立记账习惯 + 应急基金（哪怕每月存 200 元）\n- **消费建议**：居住控制在 1500 以内，餐饮自己做为主\n- **投资建议**：先别想投资，把钱存银行活期或货币基金就行\n- **关键动作**：开始记账，知道钱去哪了\n\n### 月收入 5000 – 10000 元\n- **优先目标**：应急基金攒到 1–2 万 + 偿还高息负债\n- **消费建议**：居住 30% 以内，餐饮 25% 以内\n- **投资建议**：可以从货币基金、定期存款开始，学习理财基础知识\n- **关键动作**：让储蓄率稳定在 15% 以上\n\n### 月收入 10000 – 20000 元\n- **优先目标**：应急基金 3–6 个月 + 开始配置保险 + 建立投资组合\n- **消费建议**：居住 30% 以内，娱乐消费设预算上限\n- **投资建议**：指数基金定投（沪深300 / 中证500），每月固定比例\n- **关键动作**：建立系统性理财规划，不只是存钱\n\n### 月收入 20000 元以上\n- **优先目标**：资产配置多元化（房产/基金/债券/保险）\n- **消费建议**：避免\"生活方式膨胀\"（赚得多花得更多）\n- **投资建议**：根据风险承受能力分配资产，考虑长期规划（养老、子女教育）\n- **关键动作**：关注资产增值效率，而不仅仅是存钱速度\n\n---\n\n## 在月度报告中的使用方式\n\nAgent 在生成月度报告时，应：\n\n1. **计算用户的实际储蓄率**，与 20% 基准对比\n2. **计算各分类占收入百分比**，标注超出警戒线的项目\n3. **如果数据充足（≥ 3 个月）**，给出趋势判断（改善 / 恶化 / 稳定）\n4. **每次只提 1–2 个最值得关注的点**，不要把所有指标都列一遍\n5. **用鼓励为主的语言**，避免让用户产生焦虑\n\n**报告建议的标准模板：**\n\n```\n💡 本月财务小结\n\n储蓄率 XX%（目标 ≥20%）：[达标/偏低/优秀]\n最值得关注的支出：[分类名] 占收入 XX%，[正常/偏高/需留意]\n[一句话具体建议]\n```\n\nFile v104.0.1:references/goal_guide.md\n\n# 财务目标指南\n\n## 什么是财务目标\n\n财务目标是有截止日期和目标金额的存款计划。比如：\n- 旅行基金：¥10,000，年底前\n- 应急基金：¥30,000，1年内\n- 买车：¥50,000，3年内\n\n## 基础操作\n\n### 创建目标\n\n```bash\npython scripts/goal.py create \"旅行基金\" 10000 2026-12-31\n```\n\n### 存入金额\n\n```bash\npython scripts/goal.py deposit \"旅行基金\" 2000\n```\n\n### 查看进度\n\n```bash\npython scripts/goal.py progress \"旅行基金\"\n```\n\n### 列出所有目标\n\n```bash\npython scripts/goal.py list\n```\n\n### 删除目标\n\n```bash\npython scripts/goal.py delete \"旅行基金\"\n```\n\n## 预测逻辑\n\n系统会根据你的存款历史计算月均存款速度，判断能否按时达成：\n\n- 月均存款速度基于存款记录自动计算\n- 预测结果会在进度中显示\n- 如果速度不够，会告诉你每月需要存多少才能达标\n\n## 常见目标类型\n\n### 应急基金（优先级最高）\n\n目标金额 = 3-6 个月生活支出\n截止日期：随时开始，越早越好\n建议策略：先把紧急目标存满\n\n### 旅行基金\n\n目标金额：按目的地估算\n截止日期：出发前 1 个月\n建议：把旅行费用单独设账本，避免和生活费混在一起\n\n### 购房首付\n\n目标金额：按目标城市房价估算\n截止日期：5-10 年\n建议：用定期存款 + 基金定投组合\n\n### 养老储备\n\n目标金额：按退休后生活水平估算\n截止日期：退休前\n建议：越早开始越好，利用复利效应\n\n## 实用建议\n\n1. **一个时间只追一个目标** — 同时追 3 个目标等于没有目标\n2. **截止日期设紧一点** — 宽松的截止日期让人拖延\n3. **记录每一笔存款** — 用 `deposit` 指令，积累存款历史用于预测\n4. **达成后立即设新目标** — 不要让攒钱这件事停下来\n5. **应急基金优先于投资** — 应急金没存满之前不要投资高风险产品\n\nFile v104.0.1:references/invest_api.md\n\n# Investment Tracking — Command Reference\n\n> ⚠️ **Network:** All `--allow-network` flags require user confirmation. Without `--allow-network`, commands use last-set prices from `investments.csv`.\n\n## File Location\n\nDefault: `~/.openclaw/workspace/data/ledger/investments.csv`\n\n## Buy / Sell\n\n### Buy (auto-lookup code by name)\n\n```bash\ninvest.py --buy \"<证券名称>\" auto <数量> <单价> <日期> --allow-network\n```\n\nExample:\n```bash\ninvest.py --buy \"有色金属ETF南方\" auto 3100 2.07 2026-01-10 --allow-network\n```\n\nBehavior:\n1. Queries Sina/Eastmoney for the security code\n2. If unique match → shows trade summary, requires Y/N to confirm\n3. If multiple candidates → lists options, asks user to pick\n4. If no match → prompts for manual code\n\n### Buy (manual code)\n\n```bash\ninvest.py --buy \"<名称>\" <代码> <数量> <单价> <日期>\n```\n\nExample:\n```bash\ninvest.py --buy \"沪深300ETF\" 510050 100 3.50 2026-01-15\n```\n\n### Sell\n\n```bash\ninvest.py --sell \"<名称>\" <代码> <数量> <单价> <日期>\n```\n\nExample:\n```bash\ninvest.py --sell \"沪深300ETF\" 510050 500 4.00 2026-03-01\n```\n\n## Price & Cost\n\n### Update current price (manual, no network)\n\n```bash\ninvest.py --price <代码> <价格>\n```\n\nExample:\n```bash\ninvest.py --price 601138 81.58\n```\n\n### Update cost basis\n\n```bash\ninvest.py --cost <代码> <新成本>\n```\n\nExample:\n```bash\ninvest.py --cost 601138 66.589\n```\n\n## Quotes & Refresh\n\n### Single-quote lookup\n\n```bash\ninvest.py --quote <代码> --allow-network\n```\n\nExample:\n```bash\ninvest.py --quote 601138 --allow-network\n```\n\n### Refresh all holdings\n\n```bash\ninvest.py --refresh --allow-network\n```\n\n## Portfolio & Reports\n\n### Portfolio (offline, last-set prices)\n\n```bash\ninvest.py --portfolio\n```\n\n### Portfolio with live quotes\n\n```bash\ninvest.py --portfolio --auto-refresh\n```\n\n### Single-holding P&L\n\n```bash\ninvest.py --return <代码>\n```\n\nExample:\n```bash\ninvest.py --return 510050\n```\n\n### Total P&L summary\n\n```bash\ninvest.py --summary\n```\n\nWith live quotes:\n\n```bash\ninvest.py --summary --auto-refresh\n```\n\n## History\n\n### List all transactions\n\n```bash\ninvest.py --list\n```\n\n## Global Options\n\n| Flag | Description |\n|------|-------------|\n| `--allow-network` | Permit one-off network call (code lookup or quote) |\n| `--auto-refresh` | Auto-fetch live quotes for portfolio/summary |\n| `--csv <file>` | Use a non-default `investments.csv` path |\n| `--no-input` | Skip Y/N confirmation (for batch scripts only) |\n\n## Auto-refresh Mode\n\nCreate `~/.openclaw/workspace/data/ledger/.env` with:\n\n```\nAUTO_REFRESH=1\n```\n\nAfter this, `--portfolio` and `--summary` always fetch live quotes (no need to add `--auto-refresh`).\n\nTo disable: delete the `.env` file or set `AUTO_REFRESH=0`.\n\n## Common Errors\n\n| Error | Cause | Fix |\n|-------|-------|-----|\n| `network blocked` | `--allow-network` missing | Add the flag (one-off) or enable auto-refresh |\n| `code not found` | Security name has no Sina/Eastmoney match | Provide code manually with `--buy <名称> <代码>` |\n| `insufficient holdings` | Sell quantity > current holding | Check portfolio with `--portfolio` |\n| `csv not found` | First run, no investments.csv | Use `--buy` to create the file |\n\n## Data Format\n\n`investments.csv` columns:\n\n```\ndate,action,code,name,quantity,price,account,note\n```\n\nWhere:\n- `date` — YYYY-MM-DD\n- `action` — `buy` or `sell`\n- `code` — 6-digit code (510050, 601138, etc.)\n- `name` — security name (used for display)\n- `quantity` — shares (decimal allowed for funds)\n- `price` — per-share price\n- `account` — payment account (same as ledger accounts)\n- `note` — optional memo\n\nThe script also maintains a sidecar state (in CSV comment lines) tracking last-set current prices per code.\n\n## Worked Example\n\n```bash\n# 1. First buy (uses network to find code)\ninvest.py --buy \"贵州茅台\" auto 10 1600.00 2026-06-01 --allow-network\n# → Shows trade summary, prompts Y/N → after Y, appends to investments.csv\n\n# 2. Set current price manually (no network)\ninvest.py --price 600519 1685.50\n\n# 3. Check portfolio\ninvest.py --portfolio\n# Shows: 贵州茅台 (600519) | 10 shares @ cost 1600.00 | current 1685.50 | +5.34%\n\n# 4. Or auto-refresh for live price\ninvest.py --portfolio --auto-refresh\n\n# 5. Partial sell\ninvest.py --sell \"贵州茅台\" 600519 5 1700.00 2026-06-15\n# → Shows gain, prompts Y/N\n\n# 6. Summary\ninvest.py --summary\n```\n\nSee `invest_guide.md` for workflow philosophy and net-cost method explanation.\n\nFile v104.0.1:references/invest_guide.md\n\n# 投资跟踪指南\n\n## 数据文件\n\n- 交易记录：`~/.openclaw/workspace/data/ledger/investments.csv`\n- 价格配置：`~/.openclaw/workspace/data/ledger/prices.json`（需 `--allow-network` 显式允许联网刷新，或手动更新）\n\n> ⚠️ 买入/卖出会持久化写入本地投资账本，必须在交互式终端输入 Y/N 确认；非交互环境不会写入。\n> 🌐 行情刷新、代码搜索、按名称查询会联网；命令必须显式添加 `--allow-network`。联网时仅发送证券代码/名称，不发送账本、余额或交易记录。\n\n## 格式说明\n\n投资账本 CSV 格式：\n```\n# 日期,类型,代码,名称,数量,@单价,金额,账户\n买入: 日期,买入,代码,名称,数量,@单价,金额,账户\n卖出: 日期,卖出,代码,名称,数量,@单价,金额,账户\n```\n\n## 基础操作\n\n### 记录买入\n\n```bash\npython scripts/invest.py --buy \"沪深300ETF\" 510050 1000 3.50 2026-01-15\n```\n\n### 记录卖出\n\n```bash\npython scripts/invest.py --sell \"沪深300ETF\" 510050 500 4.00 2026-03-01\n```\n\n### 更新当前价格\n\n```bash\npython scripts/invest.py --price 510050 3.62\n```\n\n### 显式联网刷新行情\n\n```bash\n# 联网刷新所有持仓的实时/收盘价（股票/ETF → 新浪，场外基金 → 东方财富）\npython scripts/invest.py --refresh --allow-network\n\n# 查询单只证券实时行情。按名称查询会先联网查代码。\npython scripts/invest.py --quote 600487 --allow-network\npython scripts/invest.py --quote 永赢先锋半导体 --allow-network\n```\n\n> ⚠️ 股票/ETF 使用新浪财经接口，场外基金使用东方财富净值接口。联网查询会向第三方发送证券代码/名称；不会发送个人账本数据。未加 `--allow-network` 时命令会拒绝联网。\n\n### 修改成本价\n\n```bash\npython scripts/invest.py --cost 600487 75.631\n```\n\n> 修改最近一笔买入的单价，系统自动重算总成本。\n\n### 查看持仓\n\n```bash\npython scripts/invest.py --portfolio\n```\n\n### 单只收益分析\n\n```bash\npython scripts/invest.py --return 510050\n```\n\n### 汇总收益\n\n```bash\npython scripts/invest.py --summary\n```\n\n### 查看交易记录\n\n```bash\npython scripts/invest.py --list\npython scripts/invest.py --list 510050  # 单只历史\n```\n\n### 确认机制说明\n\n```bash\npython scripts/invest.py --buy \"沪深300ETF\" 510050 100 3.50 2026-01-15\npython scripts/invest.py --sell \"沪深300ETF\" 510050 500 4.00 2026-03-01\n```\n\n> ⚠️ **所有买入/卖出操作必须经过交互式确认（Y/N），不存在跳过确认的快捷参数。**\n> 非交互环境会直接取消写入，这是为了防止 Agent 误操作或 prompt 注入导致错误的金融记录。金融操作必须有安全确认环节。\n\n> ⚠️ **数据隔离：** 投资记录仅写入 investments.csv，与日常账本（default.csv）完全独立。\n\n## 收益计算方式\n\n采用**平均成本法**（成本法）：\n- 买入时记录成本\n- 卖出时按平均成本计算已实现盈亏\n- 持仓盈亏 = 当前市值 - 持仓成本\n- 总收益 = 持仓盈亏 + 已实现盈亏\n\n## 实用建议\n\n1. **先有应急基金再投资** — 应急金没到位之前不碰高风险投资\n2. **用价格配置追踪市价** — 每次 `--buy`/`--sell` 会自动更新价格，也可以手动 `--price` 更新\n3. **定期更新价格** — 持仓盈亏需要当前价格；联网更新必须显式添加 `--allow-network`\n4. **收益跟踪** — 使用 `--summary` 查看投资总体情况\n5. **ETF 适合大多数人** — 沪深 300、中证 500、纳指 ETF 是最简单的选择\n\n## 风险提示\n\n- 投资有风险，入市需谨慎\n- 历史收益不代表未来表现\n- 本工具仅供记录，不构成投资建议\n- 大额投资决策建议咨询专业人士\n\nFile v104.0.1:references/ledger_format.md\n\n# 账本文件格式说明 (.csv)\n\n## 概述\n\n`.csv` 文件是纯文本格式，设计目标：**人类可读、易编辑、结构化**。\n\n简单直观的 CSV 格式，一看就懂。\n\n## 文件结构\n\n```\n# 注释行（以 # 开头）\n# 日期,类型,金额,分类,描述,账户\n\n[账户初始余额]\n[交易记录]\n```\n\n## 格式详解\n\n### 账户初始余额\n\n```\n余额,账户名,金额\n```\n\n示例：\n```\n余额,微信钱包,1000.00\n余额,支付宝,2000.00\n余额,银行卡,50000.00\n余额,现金,500.00\n```\n\n规则：\n- 每个账户最多一行余额记录\n- 余额行以 `余额,` 开头，后面是账户名和金额\n- 后续交易会增减这个余额\n\n### 交易记录\n\n格式：`日期,类型,金额,分类,描述,账户`\n\n示例：\n```\n2026-05-21,支出,50.00,餐饮,午餐,微信钱包\n2026-05-21,支出,299.00,购物,外套,支付宝\n2026-05-01,收入,15000.00,工资,5月工资,银行卡\n```\n\n字段说明：\n- **日期**：YYYY-MM-DD，必填，如 `2026-05-21`\n- **类型**：只能是 `收入` 或 `支出`，必填\n- **金额**：正数，必填，如 `50.00`（支出时填正数，系统自动识别为支出方向）\n- **分类**：一级分类名，必填，如 `餐饮`、`交通`、`购物`、`居住`、`娱乐`、`通讯`、`医疗`、`教育`、`社交`、`其他`\n- **描述**：简短说明，可选\n- **账户**：支付/收款账户，必填，默认 `微信钱包`\n\n### 注释行\n\n```\n# 这是注释行\n# 日期,类型,金额,分类,描述,账户\n```\n\n### 空行\n\n空行会被自动忽略，用于分隔不同逻辑块。\n\n## 完整示例\n\n```\n# 日期,类型,金额,分类,描述,账户\n# === 账户初始余额 ===\n余额,微信钱包,1000.00\n余额,支付宝,2000.00\n余额,银行卡,50000.00\n余额,现金,500.00\n\n# === 2026年5月 ===\n2026-05-01,收入,15000.00,工资,5月工资,银行卡\n2026-05-01,支出,35.00,餐饮,午餐外卖,微信钱包\n2026-05-02,支出,128.00,餐饮,火锅,支付宝\n2026-05-03,支出,23.50,交通,打车上班,微信钱包\n2026-05-05,支出,1200.00,居住,5月房租,银行卡\n2026-05-05,支出,15.00,餐饮,早餐,微信钱包\n2026-05-05,支出,45.00,餐饮,午餐,微信钱包\n2026-05-10,支出,299.00,购物,外套,支付宝\n2026-05-12,支出,30.00,通讯,充话费,微信钱包\n2026-05-15,支出,80.00,娱乐,电影+零食,银行卡\n2026-05-15,支出,50.00,社交,生日红包,现金\n```\n\n## 余额计算\n\n某账户当前余额 = 初始余额 + 收入合计 - 支出合计\n\n示例（微信钱包）：\n```\n余额  +1000.00\n  +35.00（午餐）\n  -23.50（打车）\n  -15.00（早餐）\n  -45.00（午餐）\n  -30.00（话费）\n─────────────\n= 921.50\n```\n\n## 分类系统\n\n| 分类 | 说明 |\n|------|------|\n| 餐饮 | 吃饭、外卖、奶茶、咖啡、零食等 |\n| 交通 | 打车、地铁、公交、加油、高铁等 |\n| 购物 | 衣服、数码、日用品、超市等 |\n| 居住 | 房租、水电、物业、网费、燃气等 |\n| 娱乐 | 电影、游戏、KTV、旅游等 |\n| 通讯 | 话费、流量、手机套餐等 |\n| 医疗 | 看病、买药、体检等 |\n| 教育 | 课程、书籍、考试等 |\n| 社交 | 红包、礼物、请客等 |\n| 其他 | 无法归类的支出 |\n\n收入分类：工资、奖金、理财收益、兼职、报销退款、其他\n\n## 与旧版 .ledger 格式的区别\n\n| 特性 | 新 CSV 格式 | 传统双行格式 |\n|------|------------|------------------|\n| 文件扩展名 | `.csv` | `.ledger` |\n| 账户格式 | 扁平中文名 | 层级路径（如 `Assets:银行`）|\n| 记账方式 | 单边记账（一行一笔）| 双行格式（借贷两条线）|\n| 金额方向 | 类型字段区分 | 正负号区分 |\n| 学习成本 | 极低 | 中等 |\n| 语法要求 | 宽松（CSV格式）| 严格（指令+posting）|\n| 适用场景 | 个人随手记 | 传统双行记账 |\n\nArchive v103.0.1: 37 files, 104290 bytes\n\nFiles: _meta.json (134b), data/example.csv (713b), data/investments.csv (276b), data/README.md (646b), examples/README.md (389b), examples/sample.csv (890b), README.md (4476b), references/budget_guide.md (1853b), references/education.md (7349b), references/financial_benchmarks.md (5871b), references/goal_guide.md (1934b), references/invest_api.md (4473b), references/invest_guide.md (3738b), references/ledger_format.md (3813b), references/user_guide.md (2138b), scripts/_fund_loader.py (835b), scripts/budget.py (16484b), scripts/generate_report.py (11457b), scripts/goal.py (11013b), scripts/invest.py (46030b), scripts/lookup_code.py (4839b), scripts/parse_entry.py (16287b), scripts/query_ledger.py (13418b), scripts/validate_line.py (2486b), skill-card.md (2916b), SKILL.md (14759b), tests/eval_cases.yaml (10184b), tests/fixtures/empty.csv (135b), tests/fixtures/sample.budget.json (131b), tests/fixtures/sample.csv (1380b), tests/results/v2_report.md (3495b), tests/run_tests.py (25021b), tests/test_comprehensive.py (44442b), tests/test_ledger.py (39206b), tests/test_runner.sh (1593b), tests/test_security.py (5852b), tests/validate_skill.sh (5305b)\n\nFile v103.0.1:SKILL.md\n\n---\nname: simple-ledger\nname_zh: 简单记账 · 个人投资管家\ndescription: Log expenses, check balances, track budgets, set savings goals, and monitor stock/fund/ETF investments from natural language. Plain-text CSV storage, multi-account, offline-first with optional real-time quotes via opt-in network access.\ndescription_zh: 记账工具，一句话记录日常消费。自动分类、查账单、预算管理、月度报告、攒钱目标。支持股票/基金/ETF 投资记录、持仓查询、收益分析、实时行情刷新（需显式授权联网）。CSV 本地存储，支持多账户管理。\ntriggerWords:\n  - 记一笔\n  - 帮我记账\n  - 记到账本里\n  - 这个月花了多少\n  - 查账单\n  - 月度报告\n  - 消费报告\n  - 收支\n  - 设定预算\n  - 攒钱目标\n  - 查持仓\n  - 买入基金\n  - 买入股票\n  - 卖出股票\nmetadata:\n  openclaw:\n    requires:\n      bins: [python3]\n      pypi: [akshare]\n    tags: [ledger, budget, personal-finance, accounting, csv, natural-language, zh, 记账, 记一笔, 账本, 流水账, 消费记录, 支出管理, 个人理财, 个人财务, 资产管理, 投资, 投资记账, 持仓, 股票, 基金, ETF, 月度报告, 消费分析, 预算管理, 预算规划, 攒钱目标, 财务目标, 收支记录, 账户余额, 查账]\n    permissions:\n      file:\n        read: [\"~/.openclaw/workspace/data/ledger/**\"]\n        write: [\"~/.openclaw/workspace/data/ledger/**\"]\n      network:\n        domains: [\"*.sina.com.cn\", \"*.eastmoney.com\", \"*.akshare.xyz\"]\n      exec:\n        scripts: [\"scripts/*.py\"]\n---\n\n## Overview\n\nA natural-language expense tracker for everyday spending, plus investment tracking for stocks/funds/ETFs. Just say \"lunch cost 50 today\" — the agent parses and appends a CSV row to your ledger. No database, no cloud sync, just one CSV file.\n\n**What this skill is good at:**\n\n- 📝 **Natural-language logging** — record an expense with one sentence\n- 📊 **Spending queries** — by month, by category, by account\n- 💰 **Multi-account balances** — WeChat Pay, Alipay, bank card, cash\n- 📐 **Budget management** — set monthly caps per category, get overspend alerts\n- 📈 **Monthly reports** — income/expense breakdown with visual ASCII chart\n- 🎯 **Savings goals** — track progress toward a target (trip, emergency fund)\n- 💹 **Investment tracking** — buy/sell stocks & funds, portfolio P&L, optional live quotes\n\n**What this skill is NOT:**\n\n- ❌ Not an investment advisor (no stock picks, no market predictions)\n- ❌ Not a tax planner\n- ❌ Not a bank sync tool (no automatic transaction import)\n\n---\n\n## Quick Start\n\nJust tell the agent something like:\n\n```\n今天中午吃了碗面花了25\n昨天打车23.5\n工资到账8000\n买了件外套299，支付宝付的\n```\n\nThe agent will:\n1. Parse date / amount / category / description / account from your sentence\n2. Append a row to `~/.openclaw/workspace/data/ledger/default.csv`\n3. Show you the updated balance\n\nDefault account is **WeChat Pay** if you don't specify one.\n\n---\n\n## Core Features\n\n### 1. 📝 Natural-language logging\n\n**More examples:**\n- \"今天中午吃饭花了50块\"\n- \"昨天打车花了23.5\"\n- \"工资到账8000\"\n- \"充话费30\"\n- \"买了一件外套299，用支付宝付的\"\n- \"给小王转了200\"\n\n**Batch logging:**\n```\n今天花了：早餐15、打车30、午饭45\n```\n\n**Confirm-then-write:** the agent shows the parsed entry before appending.\n\n**Parsed fields:**\n\n| Field | Default | Notes |\n|-------|---------|-------|\n| `date` | today | supports \"today\", \"yesterday\", \"last Wednesday\" |\n| `amount` | required | decimal allowed |\n| `category` | auto-inferred | from keyword list (see references) |\n| `description` | auto-extracted | brief summary |\n| `account` | 微信钱包 | WeChat Pay default |\n\n### 2. 📊 Spending queries\n\n- \"这个月花了多少\" — total spending this month\n- \"上个月餐饮多少钱\" — by category, by month\n- \"最近的账单\" — recent transactions\n- \"我的余额\" / \"各账户余额\" — account balances\n\nOutput format:\n```\n📊 2026年5月 餐饮支出\n日期        金额      描述\n2026-05-01  ¥50.00   午餐\n2026-05-03  ¥128.00  火锅\n...\n合计        ¥238.00\n```\n\n### 3. 💰 Account balance management\n\n- View: \"微信钱包还有多少\"\n- Initialize: \"微信钱包初始余额1000\"\n- Adjust: \"银行卡余额修正为5000\"\n\nBalance = initial balance + sum(income) − sum(expense)\n\n### 4. 📐 Budget management\n\n```bash\npython3 scripts/budget.py <ledger.csv> --set 餐饮 2000\npython3 scripts/budget.py <ledger.csv> --progress 2026-05\npython3 scripts/budget.py <ledger.csv> --alert 2026-05\npython3 scripts/budget.py <ledger.csv> --template 15000   # 50/30/20 rule\npython3 scripts/budget.py <ledger.csv> --list\npython3 scripts/budget.py <ledger.csv> --remove 餐饮\n```\n\nSee `references/budget_guide.md` for details.\n\n### 5. 📈 Monthly report\n\n```bash\npython3 scripts/generate_report.py ./default.csv --month 2026-05\npython3 scripts/generate_report.py ./default.csv --month 2026-05 --output report.txt\n```\n\nOutput includes: income/expense summary, top 5 categories (ASCII bar chart), daily average, biggest single expense, vs last month delta, brief suggestions.\n\n### 6. 🎯 Savings goals\n\n```bash\ngoal.py create \"旅行基金\" 10000 2026-12-31\ngoal.py deposit \"旅行基金\" 2000\ngoal.py progress \"旅行基金\"\ngoal.py list\ngoal.py delete \"旅行基金\"    # ⚠️ requires typing \"删除\" to confirm\n```\n\nSee `references/goal_guide.md`.\n\n### 7. 💹 Investment tracking\n\n⚠️ **Network:** investment features (code lookup + live quotes) require `akshare` (pip install) and explicit `--allow-network` flag. All other features are offline.\n\n**Quick commands:**\n\n```bash\n# Buy (auto-lookup code by name, requires Y/N confirm)\ninvest.py --buy \"有色金属ETF南方\" auto 3100 2.07 2026-01-10 --allow-network\n\n# Buy (manual code)\ninvest.py --buy \"沪深300ETF\" 510050 100 3.50 2026-01-15\n\n# Sell\ninvest.py --sell \"沪深300ETF\" 510050 500 4.00 2026-03-01\n\n# Portfolio (offline, uses last-set prices)\ninvest.py --portfolio\n\n# Portfolio with auto-refresh quotes (needs network opt-in)\ninvest.py --portfolio --auto-refresh\n\n# Total P&L\ninvest.py --summary\n\n# Single quote\ninvest.py --quote 601138 --allow-network\n```\n\nFull command reference: `references/invest_api.md`.\n\n**Auto-refresh mode:** create `~/.openclaw/workspace/data/ledger/.env` with `AUTO_REFRESH=1` to make portfolio queries always fetch live prices. Delete the file to disable.\n\n---\n\n## Trigger Conditions\n\nActivate this skill **only when the user expresses an explicit financial intent**:\n\n- Log an expense (\"记一笔：花了XX\", \"帮我记账\", \"记到账本里\")\n- Query spending (\"这个月花了多少\", \"查账\", \"账单\")\n- Account management (\"我的余额\", \"银行卡还有多少\")\n- Monthly report (\"月度报告\", \"消费分析\")\n- Investment action (\"买入XX股\", \"卖了XX\", \"查持仓\", \"投资收益\") — ⚠️ needs network\n- Budget (\"设定预算\", \"超支了吗\", \"生成预算模板\")\n- Savings goal (\"建个攒钱目标\", \"旅行基金进度\")\n\n**Do NOT activate for:**\n\n- Casual mention of money in conversation (\"那顿饭花了50，味道一般\")\n- Asking about prices without logging intent (\"这个多少钱\", \"iPhone 17 多少钱\")\n- Generic financial discussion (\"最近花了不少钱\" as a sigh)\n- Other people's spending (only the user's own)\n\n**Disambiguation rule:** If the user is just chatting about a recent expense, treat it as ordinary conversation. The key signal is whether the user has an **explicit intent to record, manage, or query** their finances.\n\n---\n\n## File Format (Original CSV)\n\n```\n# 日期,类型,金额,分类,描述,账户\n余额,微信钱包,1000.00\n余额,支付宝,2000.00\n余额,银行卡,50000.00\n余额,现金,500.00\n2026-05-21,支出,50,餐饮,午餐,微信钱包\n2026-05-22,收入,8000,工资,5月工资,银行卡\n2026-05-23,支出,299,购物,外套,支付宝\n```\n\n**Rules:**\n- 6 fields: `日期,类型,金额,分类,描述,账户`\n- `类型` must be `收入` or `支出`\n- `金额` is always positive (direction comes from `类型`)\n- Flat account names (no hierarchy)\n- Initial balance uses `余额,账户,金额` format\n\n**Default location:** `~/.openclaw/workspace/data/ledger/default.csv`\n\n---\n\n## 🔒 Security & Permissions\n\nThis skill performs the following operations:\n\n| Operation | Behavior | Scope |\n|-----------|----------|-------|\n| 📖 Read files | Reads ledger CSV, budget JSON, investment CSV, goals JSON | Only `data/` directory |\n| ✏️ Write files | Appends/modifies ledger entries, budgets, investments, goals | Only `data/` directory |\n| 🗑️ Delete data | Deletes transactions, budgets, goals (all require user Y/N confirm) | Only `data/` directory |\n| 🌐 Network access | Queries stock/fund codes + real-time quotes via akshare (Sina/Eastmoney APIs) | Sends only security codes/names, no personal financial data |\n| 💻 Execute scripts | Runs Python scripts in `scripts/` | Only this skill's own scripts |\n\n**Data isolation:** `investments.csv` (investments) and `default.csv` (daily ledger) are completely independent files.\n\n**Will NOT do:**\n\n- ❌ Read MEMORY.md, USER.md, SOUL.md, or any non-financial file\n- ❌ Access ~/.ssh, ~/.aws, ~/.config or other system directories\n- ❌ Upload your financial data to any external server\n- ❌ Modify system files or execute external commands\n\n**Backup reminder:** All operations modify local CSV/JSON files directly. Back up `data/` regularly.\n\n---\n\n## 🌐 Network Behavior\n\n> ⚠️ **Network summary:** Investment features (security code lookup + live quotes) require network via the `akshare` library calling Sina Finance public APIs. All other features are fully local — **your financial data is never sent to any external server**.\n\n> 🔒 **Privacy notice:** Network queries only send security codes/names to public quote APIs (Sina, Eastmoney). **No personal financial data (balances, transactions, account info) is transmitted.** Be aware that queries themselves reveal which securities you're interested in.\n\n**Default behavior: offline queries.**\n\nNetwork access uses an **explicit opt-in** mechanism — never enabled by default. Add `--allow-network` to one-off network commands, or set `AUTO_REFRESH=1` in a local `.env` file to auto-refresh quotes on portfolio queries.\n\n| Operation | Default | Enable network |\n|-----------|---------|----------------|\n| Portfolio (`--portfolio`) | offline (uses last-set prices) | add `--auto-refresh` |\n| Summary (`--summary`) | offline | add `--auto-refresh` |\n| Refresh quotes (`--refresh`) | blocked | add `--allow-network` |\n| Single quote (`--quote`) | blocked | add `--allow-network` |\n| Auto-lookup code on buy | blocked | add `--allow-network` |\n\n**Disable auto-refresh:** delete `~/.openclaw/workspace/data/ledger/.env` or say \"关闭自动联网刷新\".\n\n**Manual price update (no network):**\n\n```\n工业富联现在81.58\n亨通光电价格91.43\n```\n\nBoth methods (auto-refresh vs manual update) work side-by-side without conflict.\n\n---\n\n## First-run Setup\n\nWhen the user first triggers this skill:\n\n1. Check if ledger file exists\n2. If not, create with template header\n3. Ask for common payment methods and initial balances\n\n**Template:**\n\n```\n# 日期,类型,金额,分类,描述,账户\n# 个人账本 - 创建于 YYYY-MM-DD\n# 格式说明见 references/ledger_format.md\n\n# 账户初始余额\n余额,微信钱包,0.00\n余额,支付宝,0.00\n余额,银行卡,0.00\n余额,现金,0.00\n\n# === 交易记录 ===\n```\n\n---\n\n## Interaction Modes\n\n### Single entry (most common)\n\n```\n用户: 今天中午吃了碗面花了25\nAgent: 已记录 ✅\n      📅 2026-05-21\n      💰 ¥25.00\n      📂 餐饮\n      💳 微信钱包\n      📝 午餐\n      微信钱包余额：¥975.00\n```\n\n### Dialogue entry (multi-field fill-in)\n\n```\n用户: 花了200块\nAgent: 买的什么？\n用户: 买了本书\nAgent: 已记录 ✅ ...\n```\n\n### Goal-linked entry\n\nWhen the user says they saved money toward a goal, do two things:\n1. Call `goal.py deposit` to update goal progress\n2. Record the expense normally\n\n### Modify / Delete\n\n> ⚠️ All delete operations require user Y/N confirm — never auto-delete.\n\n- \"删掉刚那笔\" (delete most recent, needs confirm)\n- \"删除5月15日那笔餐饮\" (delete specific, needs confirm)\n- \"把刚才那笔改成30块\" (modify amount, needs confirm)\n\n---\n\n## ⚖️ Professional Standards\n\nThis skill provides **financial recording and basic analysis tools**, not investment advisory services.\n\n| Can do | Cannot do |\n|--------|-----------|\n| Record and analyze your spending data | Recommend specific financial products |\n| Compare your spending vs general benchmarks | Guarantee any investment return |\n| Suggest savings based on your data | Predict market movements |\n| Explain financial concepts (compound interest, inflation) | Provide tax planning |\n| Help you build a savings plan | Do asset allocation |\n\n**Bottom line:** I help you understand where your money went, not where it should go.\n\n---\n\n## 📚 References\n\nLoad on demand:\n\n- **`references/ledger_format.md`** — CSV format details\n- **`references/budget_guide.md`** — budget management\n- **`references/goal_guide.md`** — savings goals\n- **`references/invest_guide.md`** — investment tracking workflow\n- **`references/invest_api.md`** — investment command reference\n- **`references/user_guide.md`** — user FAQ\n- **`references/financial_benchmarks.md`** — financial health benchmarks\n- **`references/education.md`** — financial concepts\n\n---\n\n## Tone & Style\n\n| Scenario | Style |\n|----------|-------|\n| Successful logging | Concise confirmation + key info: \"已记录 ✅ 餐饮 ¥35 余额 ¥965\" |\n| Monthly report | Clear data + 1-2 sentence suggestions |\n| User overspending | Gentle reminder, not criticism |\n| User reaching a goal | Genuine encouragement |\n| User asking investment advice | Educational content + disclaimer |\n\n**Avoid:** preachy tone, number-shaming, over-cautious language, fake intimacy.\n\n---\n\n## Constraints\n\n1. **Write vs delete separation.** Deletes require explicit user request + Y/N confirm — no auto-delete.\n2. **Amount required.** If amount can't be confirmed, ask.\n3. **Category guessable.** When confident, auto-categorize; when uncertain, offer options.\n4. **Date optional.** Defaults to today, supports relative dates.\n5. **Account optional.** Defaults to WeChat Pay.\n6. **Files are the database.** All data in CSV/JSON files. Users can edit any file with a text editor. Back up `data/` regularly.\n7. **External deps.** Basic features (logging, queries, budgets, reports, goals) use Python stdlib only. Investment code lookup requires `akshare` (pip install akshare) + network.\n\nFile v103.0.1:data/README.md\n\n# data/ 目录说明\n\n此目录用于存放用户的工作数据文件。\n\n## 文件说明\n\n- `example.csv` — 格式示例账本，包含账户初始余额和示例交易\n- `investments.csv` — 投资交易记录（买入/卖出/分红）\n- `goals.json` — 财务目标数据（自动生成）\n- `prices.json` — 投资品当前价格配置（手动更新）\n\n## 用户使用\n\n- 复制 `example.csv` 为你的工作账本\n- 建议存放在 `~/.openclaw/workspace/data/ledger/default.csv`\n- 也可以放在任何你喜欢的位置，脚本通过路径参数指定\n\n## 备份\n\n所有数据都是纯文本，建议定期备份 `data/` 目录。\n\nFile v103.0.1:examples/README.md\n\n# examples/ 目录说明\n\n包含简单的示例账本，适合初次使用时参考。\n\n## 文件\n\n- `sample.csv` — 最简示例，包含几个常见交易\n\n## 使用方式\n\n```bash\ncp examples/sample.csv ~/.openclaw/workspace/data/ledger/default.csv\n```\n\n然后告诉 Agent：\"我的账本在 `~/.openclaw/workspace/data/ledger/default.csv`\"，或者直接用路径参数调用脚本。\n\nFile v103.0.1:README.md\n\n# Simple Ledger · Personal Finance & Investment Tracker\n\nA natural-language expense tracker for everyday spending, plus investment tracking for stocks, funds, and ETFs. Just talk to your AI agent in plain English (or Chinese) — it parses your sentence and appends a row to a plain-text CSV ledger. No database, no cloud sync, no vendor lock-in.\n\n## Why Simple Ledger?\n\nMost personal finance apps force you into their schema, their cloud, their subscription plan. Simple Ledger does the opposite:\n\n- **One CSV file** — open it in Excel, Numbers, vim, or `cat`\n- **Natural language** — say \"spent 50 on lunch today\" and it's logged\n- **Offline-first** — all daily ledger features work without internet\n- **You own the data** — files live at `~/.openclaw/workspace/data/ledger/`\n- **Optional investments** — track stocks/funds/ETFs with opt-in live quotes\n\n## Features\n\n| Feature | Description | Network? |\n|---------|-------------|----------|\n| 📝 Natural-language logging | One sentence → CSV row | No |\n| 📊 Spending queries | By month, category, account | No |\n| 💰 Multi-account balances | WeChat Pay, Alipay, bank, cash | No |\n| 📐 Budgets | Per-category caps, overspend alerts | No |\n| 📈 Monthly reports | ASCII bar chart, top categories | No |\n| 🎯 Savings goals | Track progress, deposit reminders | No |\n| 💹 Investment tracking | Buy/sell, portfolio P&L | Opt-in |\n| 📡 Live quotes | Real-time prices via Sina/Eastmoney | Yes (opt-in) |\n\n## Quick Start\n\nTalk to your AI agent:\n\n```\nLunch cost 50 today\nSpent 23.5 on a taxi yesterday\nSalary arrived, 8000\nBought a jacket for 299, paid with Alipay\n```\n\nThe agent parses your sentence, shows the parsed entry for confirmation, then appends a row to `~/.openclaw/workspace/data/ledger/default.csv`.\n\n## Example Ledger\n\n```csv\n# 日期,类型,金额,分类,描述,账户\n余额,微信钱包,1000.00\n余额,支付宝,2000.00\n余额,银行卡,50000.00\n余额,现金,500.00\n2026-05-21,支出,50,餐饮,午餐,微信钱包\n2026-05-22,收入,8000,工资,5月工资,银行卡\n2026-05-23,支出,299,购物,外套,支付宝\n```\n\n## Installation\n\n```bash\nclawhub install simple-ledger\n```\n\nOr update to latest:\n\n```bash\nclawhub update simple-ledger --version 1.8.0\n```\n\n## Requirements\n\n- **Python 3** (built-in on macOS)\n- **akshare** (only for investment code lookup & live quotes): `pip install akshare`\n\n## Privacy & Data\n\nAll data lives in plain CSV/JSON files under `~/.openclaw/workspace/data/ledger/`. **Nothing is uploaded to any server.**\n\nThe only network operations are:\n\n1. Security code lookup (you say \"buy 有色金属ETF南方\", we ask Sina for its code)\n2. Live stock/fund quotes (when you opt-in)\n\nBoth only send the security name/code to public APIs — no balance, no transaction history, no account info.\n\n## File Structure\n\n```\nsimple-ledger/\n├── SKILL.md                    # Agent-facing documentation (Chinese + English)\n├── README.md                   # This file (user-facing English)\n├── _meta.json                  # Publishing metadata\n├── scripts/\n│   ├── parse_entry.py          # Parse natural language → CSV row\n│   ├── validate_line.py        # Validate CSV row format\n│   ├── query_ledger.py         # Read & filter ledger\n│   ├── generate_report.py      # Monthly report generator\n│   ├── budget.py               # Budget CRUD + alerts\n│   ├── goal.py                 # Savings goals CRUD\n│   ├── invest.py               # Investment tracking\n│   ├── lookup_code.py          # Security code lookup (network)\n│   └── _fund_loader.py         # Fund data loader\n├── references/\n│   ├── ledger_format.md\n│   ├── budget_guide.md\n│   ├── goal_guide.md\n│   ├── invest_guide.md\n│   ├── invest_api.md           # Investment command reference\n│   ├── user_guide.md\n│   ├── financial_benchmarks.md\n│   └── education.md\n├── examples/                   # Sample ledgers\n└── tests/\n    ├── test_ledger.py\n    ├── test_comprehensive.py\n    ├── test_security.py\n    ├── run_tests.py\n    ├── test_runner.sh\n    ├── validate_skill.sh\n    └── eval_cases.yaml\n```\n\n## License\n\nMIT-0 (free to use, modify, redistribute, no attribution required)\n\n## Links\n\n- ClawHub: https://clawhub.com/skills/simple-ledger\n- Issues: https://github.com/openclaw/clawhub/issues\n\nFile v103.0.1:_meta.json\n\n{\n  \"ownerId\": \"kn7dzk85gz4pz5c569zky2pssn875nwe\",\n  \"slug\": \"simple-ledger\",\n  \"version\": \"103.0.1\",\n  \"publishedAt\": 1783308431079\n}\n\nFile v103.0.1:references/budget_guide.md\n\n# 预算管理指南\n\n## 核心概念\n\n预算帮你在花钱之前先规划好各分类可以花多少，超出时提前预警，而不是事后后悔。\n\n## 基础操作\n\n### 设定单个分类预算\n\n```bash\npython scripts/budget.py 你的账本.csv --set 餐饮 2000\npython scripts/budget.py 你的账本.csv --set 交通 800\n```\n\n### 查看所有预算\n\n```bash\npython scripts/budget.py 你的账本.csv --list\n```\n\n### 查看执行进度\n\n```bash\npython scripts/budget.py 你的账本.csv --progress 2026-05\n```\n\n### 超支预警\n\n```bash\npython scripts/budget.py 你的账本.csv --alert 2026-05\n```\n\n### 移除预算\n\n```bash\npython scripts/budget.py 你的账本.csv --remove 餐饮\n```\n\n## 预算模板\n\n### 50/30/20 法则（推荐）\n\n基于月收入自动生成分类预算：\n- 50% 必要支出（居住、餐饮、交通、通讯、医疗）\n- 30% 弹性支出（购物、娱乐、教育、社交）\n- 20% 储蓄/投资\n\n```bash\npython scripts/budget.py 你的账本.csv --template 15000\n```\n\n### 自定义比例\n\n```bash\n# 需求40% / 想要30% / 弹性20% / 其他10%\npython scripts/budget.py 你的账本.csv --template 15000 --ratio 40 30 20 10\n```\n\n## 预算判断标准\n\n| 进度 | 状态 | 建议 |\n|------|------|------|\n| < 75% | ✅ 正常 | 放心花 |\n| 75-90% | 🔸 注意 | 控制消费节奏 |\n| 90-100% | ⚠️ 快超了 | 谨慎支出 |\n| > 100% | ❌ 已超支 | 本月不要再花了 |\n\n## 实用建议\n\n1. **先有收入再定预算** — 先确认月收入，再反推支出结构\n2. **先紧后松** — 预算设低一点，实际超了比计划超了心理负担小\n3. **重点盯一项** — 同时盯 10 个分类很累，先盯最重要的 2-3 个\n4. **按月清零** — 每月重新评估预算，不建议跨月滚动\n5. **把储蓄当支出** — 每月固定往存款账户\"花\"一笔，预算才算完整\n\nFile v103.0.1:references/education.md\n\n# 财务知识科普\n\n> 不讲高深理论，只讲跟日常记账相关的基础概念。\n> 看完能理解\"为什么这么记\"，而不是死记硬背。\n\n## 1. 单式记账：为什么选单式？\n\n### 单式记账（本 Skill 采用的方式）\n\n**一句话解释：花了一笔就记一笔，像流水账。**\n\n```\n2026-05-21  微信钱包  -50.00  餐饮:饮食  午餐\n```\n\n**特点：**\n- ✅ 简单直觉：花了 50 就写 -50\n- ✅ 学习成本几乎为零\n- ✅ 适合日常\"随手记\"\n- ❌ 无法自动校验是否漏记\n- ❌ 不适合企业财务或复杂资产跟踪\n\n### 传统双行记账\n\n**一句话解释：每笔交易至少影响两个账户，有借必有贷，借贷必相等。**\n\n比如\"午餐花了 50\"：\n```\n2026-05-21 * 午餐\n  Expenses:餐饮:饮食        50.00 CNY\n  Assets:微信钱包          -50.00 CNY\n```\n\n**特点：**\n- ✅ 严谨：每笔交易都平衡，不会出现\"钱从哪来\"的漏洞\n- ✅ 强大的报表能力：自动计算资产负债表、利润表\n- ✅ 适合复杂场景（多币种、投资组合、税务）\n- ❌ 学习门槛较高\n- ❌ 日常记账\"杀鸡用牛刀\"\n\n### 为什么 personal-ledger 选单式？\n\n| 对比 | 单式记账 | 传统双行记账 |\n|------|---------|---------|\n| 记一笔午餐 | 1 行 | 3 行 |\n| 需要知道的概念 | 金额、分类 | 借方、贷方、账户类型、货币 |\n| 记错了怎么办 | 删掉重来 | 可能导致全局不平衡 |\n| 适合谁 | 想随手记钱的普通人 | 需要专业财务报表的人 |\n\n**结论：** 对于\"知道钱花哪了\"这个目标，单式记账完全够用。\n\n## 2. 资产 vs 负债 vs 净资产\n\n### 资产（你拥有的、值钱的东西）\n\n- 银行卡里的存款 ✓\n- 微信/支付宝里的钱 ✓\n- 现金 ✓\n- 你名下的房产 ✓\n- 投资账户里的基金/股票 ✓\n\n### 负债（你欠别人的）\n\n- 信用卡欠款 ✓\n- 花呗/白条 ✓\n- 房贷 ✓\n- 车贷 ✓\n- 借别人的钱 ✓\n\n### 净资产（你\"真正\"有多少）\n\n```\n净资产 = 资产 − 负债\n```\n\n**举例：**\n- 银行卡有 5 万，微信有 3 千，现金 5 百 → 资产 = 53,500\n- 信用卡欠 2 千，花呗欠 5 百 → 负债 = 2,500\n- 净资产 = 53,500 − 2,500 = **51,000**\n\n**一个容易混淆的点：**\n信用卡里的钱不算资产！信用卡额度是\"你能借多少\"，不是\"你有多少\"。\n只有你还款之后，银行卡里减少的那部分才是支出。\n\n### 在记账中怎么体现？\n\n本 Skill 的处理方式：\n- **资产类账户**：微信钱包、支付宝、银行卡、现金 → 记余额变化\n- **负债类账户**：信用卡、花呗 → 支出时记到负债账户，还款时从资产转到负债\n- **净资产**：可通过\"所有资产账户余额之和 − 所有负债账户余额之和\"计算\n\n## 3. 现金流管理基础\n\n### 什么是现金流？\n\n**现金流 = 钱进来的速度 − 钱出去的速度。**\n\n通俗地说：你每个月进账多少，出账多少，中间的差额就是现金流。\n\n### 现金流的三种状态\n\n```\n收入 > 支出  →  正向现金流 → 钱越来越多 → 健康 ✅\n收入 = 支出  →  零现金流  → 没有积累   → 需要注意 ⚠️\n收入 < 支出  →  负向现金流 → 钱越来越少 → 危险 ❌\n```\n\n### 为什么现金流比\"赚多少钱\"重要？\n\n一个人月薪 2 万但每月花 2 万 1 千 → 每个月在\"变穷\"\n一个人月薪 8 千但每月只花 5 千 → 每个月在\"变富\"\n\n**赚多少决定了上限，花多少决定了实际积累。**\n\n### 如何改善现金流？\n\n**开源（增加收入）：**\n- 提升技能涨薪（最可持续）\n- 兼职 / 副业\n- 出租闲置资源\n- 理财收益（长期）\n\n**节流（减少支出）：**\n- 记账 → 发现不该花的钱\n- 区分\"需要\"和\"想要\"\n- 找更便宜的替代方案\n- 减少冲动消费（等 24 小时再买）\n\n**本 Skill 帮你做的是\"节流\"部分：** 通过记账让你看清支出，从而做出更好的消费决策。\n\n## 4. 预算为什么重要？\n\n### 没有预算的生活\n\n```\n月初：感觉有很多钱\n月中：也没怎么花啊？\n月底：钱呢？？？\n```\n\n### 有预算的生活\n\n```\n月初：这个月餐饮预算 2000，购物预算 1000\n月中：餐饮已经花了 1500，还剩 500，控制一下外卖\n月底：餐饮 1900，达标！购物 800，省了 200\n```\n\n### 预算的本质\n\n**预算不是限制你花钱，而是让你主动选择钱花在哪。**\n\n没有预算时，钱是被\"被动消费\"花掉的（广告、冲动、习惯）。\n有预算时，你把钱分配给\"真正重要的东西\"。\n\n### 怎么开始做预算？\n\n**第一步：先记账 1–2 个月，搞清楚现状**\n（别急着做预算，你都不知道现在花多少怎么做预算？）\n\n**第二步：按分类设定月度预算上限**\n\n参考\"财务基准参考\"中的占比，结合自己的实际情况设定。\n\n**第三步：月底对比实际 vs 预算**\n\n本 Skill 的月度报告会帮你做这个对比（未来版本会支持预算功能）。\n\n### 预算的常见误区\n\n| 误区 | 正确做法 |\n|------|---------|\n| \"预算越低越好\" | 预算要现实可行，否则坚持不下来 |\n| \"所有分类都要设预算\" | 先管好 TOP 3 大头（通常是居住、餐饮、购物） |\n| \"超预算就是失败\" | 超预算是正常的，关键是知道超了多少、为什么超 |\n| \"预算一定不能变\" | 每月根据实际情况调整，预算是活的 |\n\n## 5. 应急基金的重要性\n\n### 什么是应急基金？\n\n**一笔专门用来应对突发事件的存款。** 不投资、不消费、不动它，除非真有急事。\n\n### 什么算\"急事\"？\n\n- ✅ 突然失业，需要几个月的生活费\n- ✅ 生病住院，自费部分\n- ✅ 家里突然需要大额维修\n- ✅ 必须的紧急出行\n- ❌ 手机出了新款想换\n- ❌ 朋友借钱（除非是真正的紧急情况）\n- ❌ 双十一打折\n\n### 需要多少？\n\n| 安全等级 | 金额 | 适合谁 |\n|---------|------|--------|\n| 最低保障 | 1 个月支出 | 刚开始攒钱，有个底 |\n| 基本安全 | 3 个月支出 | 大多数人的目标 |\n| 比较安心 | 6 个月支出 | 有房贷/家庭责任的人 |\n| 非常安心 | 6–12 个月支出 | 自由职业/收入不稳定 |\n\n**怎么算 1 个月的支出？**\n看你最近一个月的月度报告里的\"总支出\"数字，或者把最近 3 个月的支出平均一下。\n\n### 放在哪里？\n\n- **活期存款 / 货币基金**：随时能取，收益虽然低但安全性最高\n- ❌ 不要放股票、基金（急用钱时可能正好在亏）\n- ❌ 不要放定期（提前取会损失利息）\n\n### 怎么攒？\n\n1. 每个月发工资后，**先把应急基金的钱转出来**，剩下的才是可以花的\n2. 从小目标开始：先攒 1 个月支出，再攒 3 个月\n3. 记账帮你控制支出，省下的钱就往应急基金里存\n\n### 为什么记账跟应急基金有关？\n\n**因为记账让你知道：**\n- 你每个月实际支出多少（决定了应急基金的目标金额）\n- 你每个月能存多少（决定了多久能攒够）\n- 你的支出里哪些可以砍（加速攒钱）\n- 你的消费趋势是否在恶化（提前预警）\n\n---\n\n> **总结：** 记账是所有财务管理的第一步。你不需要懂投资、不需要懂税务，先把\"钱去哪了\"这个问题回答清楚，其他的都是后面的事。\n\nFile v103.0.1:references/financial_benchmarks.md\n\n# 个人财务基准参考\n\n> 本文档提供常见的财务健康指标，用于在月度报告中给出有意义的参考对比。\n> 所有数据为通用参考值，个人情况千差万别，仅作方向性指引，不作硬性标准。\n\n## 1. 储蓄率目标\n\n| 阶段 | 推荐储蓄率 | 说明 |\n|------|-----------|------|\n| 刚工作 / 还债期 | ≥ 10% | 先养成习惯，金额不重要 |\n| 稳定期 | 20% – 30% | 大多数理财建议的\"甜蜜点\" |\n| 财务自由追求期 | 30% – 50% | 加速积累，需要较强的消费纪律 |\n\n**怎么算：**\n```\n储蓄率 = (收入 − 支出) / 收入 × 100%\n```\n\n**月度报告中的表述示例：**\n- 储蓄率 > 30%：\"本月储蓄率 35%，超过推荐的 30% 目标，继续保持！\"\n- 储蓄率 10%–30%：\"本月储蓄率 22%，在健康范围内。如果目标是加速储蓄，可以看看餐饮和购物有没有优化空间。\"\n- 储蓄率 < 10%：\"本月储蓄率偏低（8%）。建议先排查是否有大额意外支出，后续可以尝试把目标设到 15% 起步。\"\n\n## 2. 分类支出占比参考\n\n以下为税后月收入的百分比参考，适用于中国城市普通工薪家庭：\n\n| 分类 | 健康范围 | 警戒线 | 说明 |\n|------|---------|--------|------|\n| 🏠 居住（房租/房贷+水电物业） | 20% – 30% | > 40% | 含房租、房贷、水电燃气、物业 |\n| 🍜 餐饮 | 15% – 25% | > 35% | 含一日三餐、外卖、零食饮料 |\n| 🚌 交通 | 5% – 10% | > 15% | 含通勤、打车、公共交通 |\n| 🛍️ 购物 | 5% – 15% | > 25% | 含服饰、日用品、电子产品 |\n| 🎮 娱乐 | 3% – 8% | > 15% | 含视频会员、游戏、电影、社交 |\n| 📚 教育 | 2% – 5% | > 10% | 含课程、书籍、技能培训 |\n| 🏥 医疗 | 2% – 5% | > 10% | 含体检、药品、保险（不含社保） |\n| 📱 通讯 | 1% – 3% | > 5% | 含话费、网费 |\n| 💝 社交人情 | 3% – 8% | > 15% | 含红包、礼物、请客 |\n| 💰 储蓄/投资 | 20% – 30% | < 10% | 这是\"剩下来\"的部分 |\n\n## 3. 健康财务指标速查表\n\n### 核心三问\n\n| 指标 | 健康值 | 怎么算 |\n|------|--------|--------|\n| 应急基金 | ≥ 3 个月支出 | 把最近 3 个月的月均支出 × 3 |\n| 储蓄率 | ≥ 20% | (收入 − 支出) / 收入 |\n| 负债收入比 | ≤ 35% | 月还贷总额 / 月收入 |\n\n### 进阶指标\n\n| 指标 | 说明 | 健康范围 |\n|------|------|---------|\n| 流动性比率 | 能随时拿出的钱 / 月支出 | 3 – 6 |\n| 负债资产比 | 总负债 / 总资产 | < 50% |\n| 投资占资产比 | 投资类资产 / 总资产 | 随年龄递增，25岁>10%，35岁>30% |\n| 保险覆盖率 | 年保费 / 年收入 | 5% – 10% |\n\n### 简易评分卡\n\n用以下 5 项快速评估财务健康度，每项 20 分：\n\n1. **每月有结余**（储蓄率 > 10%）— 20 分\n2. **有应急基金**（≥ 1 个月支出）— 20 分\n3. **无高息负债**（无信用卡分期、网贷）— 20 分\n4. **知道钱花在哪了**（有记账习惯）— 20 分\n5. **有储蓄/投资目标**（哪怕是模糊的）— 20 分\n\n- 80–100：财务状况良好 👍\n- 60–79：基本健康，有优化空间\n- 40–59：需要关注，建议从记账开始\n- < 40：需要行动，优先处理高息负债\n\n## 4. 中国普通家庭消费结构参考\n\n数据来源：国家统计局居民消费支出分类（2023 年大致水平），城镇居民人均年消费支出约 3 万元。\n\n| 类别 | 占比 |\n|------|------|\n| 食品烟酒 | 29% |\n| 居住 | 24% |\n| 交通通信 | 14% |\n| 教育文化娱乐 | 10% |\n| 医疗保健 | 9% |\n| 衣着 | 6% |\n| 生活用品及服务 | 5% |\n| 其他用品及服务 | 3% |\n\n**注意：** 这是全国平均水平，一二线城市居住占比会显著更高（可达 35%–40%）。\n\n## 5. 不同收入水平的通用理财建议\n\n### 月收入 < 5000 元\n- **优先目标**：建立记账习惯 + 应急基金（哪怕每月存 200 元）\n- **消费建议**：居住控制在 1500 以内，餐饮自己做为主\n- **投资建议**：先别想投资，把钱存银行活期或货币基金就行\n- **关键动作**：开始记账，知道钱去哪了\n\n### 月收入 5000 – 10000 元\n- **优先目标**：应急基金攒到 1–2 万 + 偿还高息负债\n- **消费建议**：居住 30% 以内，餐饮 25% 以内\n- **投资建议**：可以从货币基金、定期存款开始，学习理财基础知识\n- **关键动作**：让储蓄率稳定在 15% 以上\n\n### 月收入 10000 – 20000 元\n- **优先目标**：应急基金 3–6 个月 + 开始配置保险 + 建立投资组合\n- **消费建议**：居住 30% 以内，娱乐消费设预算上限\n- **投资建议**：指数基金定投（沪深300 / 中证500），每月固定比例\n- **关键动作**：建立系统性理财规划，不只是存钱\n\n### 月收入 20000 元以上\n- **优先目标**：资产配置多元化（房产/基金/债券/保险）\n- **消费建议**：避免\"生活方式膨胀\"（赚得多花得更多）\n- **投资建议**：根据风险承受能力分配资产，考虑长期规划（养老、子女教育）\n- **关键动作**：关注资产增值效率，而不仅仅是存钱速度\n\n---\n\n## 在月度报告中的使用方式\n\nAgent 在生成月度报告时，应：\n\n1. **计算用户的实际储蓄率**，与 20% 基准对比\n2. **计算各分类占收入百分比**，标注超出警戒线的项目\n3. **如果数据充足（≥ 3 个月）**，给出趋势判断（改善 / 恶化 / 稳定）\n4. **每次只提 1–2 个最值得关注的点**，不要把所有指标都列一遍\n5. **用鼓励为主的语言**，避免让用户产生焦虑\n\n**报告建议的标准模板：**\n\n```\n💡 本月财务小结\n\n储蓄率 XX%（目标 ≥20%）：[达标/偏低/优秀]\n最值得关注的支出：[分类名] 占收入 XX%，[正常/偏高/需留意]\n[一句话具体建议]\n```\n\nFile v103.0.1:references/goal_guide.md\n\n# 财务目标指南\n\n## 什么是财务目标\n\n财务目标是有截止日期和目标金额的存款计划。比如：\n- 旅行基金：¥10,000，年底前\n- 应急基金：¥30,000，1年内\n- 买车：¥50,000，3年内\n\n## 基础操作\n\n### 创建目标\n\n```bash\npython scripts/goal.py create \"旅行基金\" 10000 2026-12-31\n```\n\n### 存入金额\n\n```bash\npython scripts/goal.py deposit \"旅行基金\" 2000\n```\n\n### 查看进度\n\n```bash\npython scripts/goal.py progress \"旅行基金\"\n```\n\n### 列出所有目标\n\n```bash\npython scripts/goal.py list\n```\n\n### 删除目标\n\n```bash\npython scripts/goal.py delete \"旅行基金\"\n```\n\n## 预测逻辑\n\n系统会根据你的存款历史计算月均存款速度，判断能否按时达成：\n\n- 月均存款速度基于存款记录自动计算\n- 预测结果会在进度中显示\n- 如果速度不够，会告诉你每月需要存多少才能达标\n\n## 常见目标类型\n\n### 应急基金（优先级最高）\n\n目标金额 = 3-6 个月生活支出\n截止日期：随时开始，越早越好\n建议策略：先把紧急目标存满\n\n### 旅行基金\n\n目标金额：按目的地估算\n截止日期：出发前 1 个月\n建议：把旅行费用单独设账本，避免和生活费混在一起\n\n### 购房首付\n\n目标金额：按目标城市房价估算\n截止日期：5-10 年\n建议：用定期存款 + 基金定投组合\n\n### 养老储备\n\n目标金额：按退休后生活水平估算\n截止日期：退休前\n建议：越早开始越好，利用复利效应\n\n## 实用建议\n\n1. **一个时间只追一个目标** — 同时追 3 个目标等于没有目标\n2. **截止日期设紧一点** — 宽松的截止日期让人拖延\n3. **记录每一笔存款** — 用 `deposit` 指令，积累存款历史用于预测\n4. **达成后立即设新目标** — 不要让攒钱这件事停下来\n5. **应急基金优先于投资** — 应急金没存满之前不要投资高风险产品\n\nFile v103.0.1:references/invest_api.md\n\n# Investment Tracking — Command Reference\n\n> ⚠️ **Network:** All `--allow-network` flags require user confirmation. Without `--allow-network`, commands use last-set prices from `investments.csv`.\n\n## File Location\n\nDefault: `~/.openclaw/workspace/data/ledger/investments.csv`\n\n## Buy / Sell\n\n### Buy (auto-lookup code by name)\n\n```bash\ninvest.py --buy \"<证券名称>\" auto <数量> <单价> <日期> --allow-network\n```\n\nExample:\n```bash\ninvest.py --buy \"有色金属ETF南方\" auto 3100 2.07 2026-01-10 --allow-network\n```\n\nBehavior:\n1. Queries Sina/Eastmoney for the security code\n2. If unique match → shows trade summary, requires Y/N to confirm\n3. If multiple candidates → lists options, asks user to pick\n4. If no match → prompts for manual code\n\n### Buy (manual code)\n\n```bash\ninvest.py --buy \"<名称>\" <代码> <数量> <单价> <日期>\n```\n\nExample:\n```bash\ninvest.py --buy \"沪深300ETF\" 510050 100 3.50 2026-01-15\n```\n\n### Sell\n\n```bash\ninvest.py --sell \"<名称>\" <代码> <数量> <单价> <日期>\n```\n\nExample:\n```bash\ninvest.py --sell \"沪深300ETF\" 510050 500 4.00 2026-03-01\n```\n\n## Price & Cost\n\n### Update current price (manual, no network)\n\n```bash\ninvest.py --price <代码> <价格>\n```\n\nExample:\n```bash\ninvest.py --price 601138 81.58\n```\n\n### Update cost basis\n\n```bash\ninvest.py --cost <代码> <新成本>\n```\n\nExample:\n```bash\ninvest.py --cost 601138 66.589\n```\n\n## Quotes & Refresh\n\n### Single-quote lookup\n\n```bash\ninvest.py --quote <代码> --allow-network\n```\n\nExample:\n```bash\ninvest.py --quote 601138 --allow-network\n```\n\n### Refresh all holdings\n\n```bash\ninvest.py --refresh --allow-network\n```\n\n## Portfolio & Reports\n\n### Portfolio (offline, last-set prices)\n\n```bash\ninvest.py --portfolio\n```\n\n### Portfolio with live quotes\n\n```bash\ninvest.py --portfolio --auto-refresh\n```\n\n### Single-holding P&L\n\n```bash\ninvest.py --return <代码>\n```\n\nExample:\n```bash\ninvest.py --return 510050\n```\n\n### Total P&L summary\n\n```bash\ninvest.py --summary\n```\n\nWith live quotes:\n\n```bash\ninvest.py --summary --auto-refresh\n```\n\n## History\n\n### List all transactions\n\n```bash\ninvest.py --list\n```\n\n## Global Options\n\n| Flag | Description |\n|------|-------------|\n| `--allow-network` | Permit one-off network call (code lookup or quote) |\n| `--auto-refresh` | Auto-fetch live quotes for portfolio/summary |\n| `--csv <file>` | Use a non-default `investments.csv` path |\n| `--no-input` | Skip Y/N confirmation (for batch scripts only) |\n\n## Auto-refresh Mode\n\nCreate `~/.openclaw/workspace/data/ledger/.env` with:\n\n```\nAUTO_REFRESH=1\n```\n\nAfter this, `--portfolio` and `--summary` always fetch live quotes (no need to add `--auto-refresh`).\n\nTo disable: delete the `.env` file or set `AUTO_REFRESH=0`.\n\n## Common Errors\n\n| Error | Cause | Fix |\n|-------|-------|-----|\n| `network blocked` | `--allow-network` missing | Add the flag (one-off) or enable auto-refresh |\n| `code not found` | Security name has no Sina/Eastmoney match | Provide code manually with `--buy <名称> <代码>` |\n| `insufficient holdings` | Sell quantity > current holding | Check portfolio with `--portfolio` |\n| `csv not found` | First run, no investments.csv | Use `--buy` to create the file |\n\n## Data Format\n\n`investments.csv` columns:\n\n```\ndate,action,code,name,quantity,price,account,note\n```\n\nWhere:\n- `date` — YYYY-MM-DD\n- `action` — `buy` or `sell`\n- `code` — 6-digit code (510050, 601138, etc.)\n- `name` — security name (used for display)\n- `quantity` — shares (decimal allowed for funds)\n- `price` — per-share price\n- `account` — payment account (same as ledger accounts)\n- `note` — optional memo\n\nThe script also maintains a sidecar state (in CSV comment lines) tracking last-set current prices per code.\n\n## Worked Example\n\n```bash\n# 1. First buy (uses network to find code)\ninvest.py --buy \"贵州茅台\" auto 10 1600.00 2026-06-01 --allow-network\n# → Shows trade summary, prompts Y/N → after Y, appends to investments.csv\n\n# 2. Set current price manually (no network)\ninvest.py --price 600519 1685.50\n\n# 3. Check portfolio\ninvest.py --portfolio\n# Shows: 贵州茅台 (600519) | 10 shares @ cost 1600.00 | current 1685.50 | +5.34%\n\n# 4. Or auto-refresh for live price\ninvest.py --portfolio --auto-refresh\n\n# 5. Partial sell\ninvest.py --sell \"贵州茅台\" 600519 5 1700.00 2026-06-15\n# → Shows gain, prompts Y/N\n\n# 6. Summary\ninvest.py --summary\n```\n\nSee `invest_guide.md` for workflow philosophy and net-cost method explanation.\n\nFile v103.0.1:references/invest_guide.md\n\n# 投资跟踪指南\n\n## 数据文件\n\n- 交易记录：`~/.openclaw/workspace/data/ledger/investments.csv`\n- 价格配置：`~/.openclaw/workspace/data/ledger/prices.json`（需 `--allow-network` 显式允许联网刷新，或手动更新）\n\n> ⚠️ 买入/卖出会持久化写入本地投资账本，必须在交互式终端输入 Y/N 确认；非交互环境不会写入。\n> 🌐 行情刷新、代码搜索、按名称查询会联网；命令必须显式添加 `--allow-network`。联网时仅发送证券代码/名称，不发送账本、余额或交易记录。\n\n## 格式说明\n\n投资账本 CSV 格式：\n```\n# 日期,类型,代码,名称,数量,@单价,金额,账户\n买入: 日期,买入,代码,名称,数量,@单价,金额,账户\n卖出: 日期,卖出,代码,名称,数量,@单价,金额,账户\n```\n\n## 基础操作\n\n### 记录买入\n\n```bash\npython scripts/invest.py --buy \"沪深300ETF\" 510050 1000 3.50 2026-01-15\n```\n\n### 记录卖出\n\n```bash\npython scripts/invest.py --sell \"沪深300ETF\" 510050 500 4.00 2026-03-01\n```\n\n### 更新当前价格\n\n```bash\npython scripts/invest.py --price 510050 3.62\n```\n\n### 显式联网刷新行情\n\n```bash\n# 联网刷新所有持仓的实时/收盘价（股票/ETF → 新浪，场外基金 → 东方财富）\npython scripts/invest.py --refresh --allow-network\n\n# 查询单只证券实时行情。按名称查询会先联网查代码。\npython scripts/invest.py --quote 600487 --allow-network\npython scripts/invest.py --quote 永赢先锋半导体 --allow-network\n```\n\n> ⚠️ 股票/ETF 使用新浪财经接口，场外基金使用东方财富净值接口。联网查询会向第三方发送证券代码/名称；不会发送个人账本数据。未加 `--allow-network` 时命令会拒绝联网。\n\n### 修改成本价\n\n```bash\npython scripts/invest.py --cost 600487 75.631\n```\n\n> 修改最近一笔买入的单价，系统自动重算总成本。\n\n### 查看持仓\n\n```bash\npython scripts/invest.py --portfolio\n```\n\n### 单只收益分析\n\n```bash\npython scripts/invest.py --return 510050\n```\n\n### 汇总收益\n\n```bash\npython scripts/invest.py --summary\n```\n\n### 查看交易记录\n\n```bash\npython scripts/invest.py --list\npython scripts/invest.py --list 510050  # 单只历史\n```\n\n### 确认机制说明\n\n```bash\npython scripts/invest.py --buy \"沪深300ETF\" 510050 100 3.50 2026-01-15\npython scripts/invest.py --sell \"沪深300ETF\" 510050 500 4.00 2026-03-01\n```\n\n> ⚠️ **所有买入/卖出操作必须经过交互式确认（Y/N），不存在跳过确认的快捷参数。**\n> 非交互环境会直接取消写入，这是为了防止 Agent 误操作或 prompt 注入导致错误的金融记录。金融操作必须有安全确认环节。\n\n> ⚠️ **数据隔离：** 投资记录仅写入 investments.csv，与日常账本（default.csv）完全独立。\n\n## 收益计算方式\n\n采用**平均成本法**（成本法）：\n- 买入时记录成本\n- 卖出时按平均成本计算已实现盈亏\n- 持仓盈亏 = 当前市值 - 持仓成本\n- 总收益 = 持仓盈亏 + 已实现盈亏\n\n## 实用建议\n\n1. **先有应急基金再投资** — 应急金没到位之前不碰高风险投资\n2. **用价格配置追踪市价** — 每次 `--buy`/`--sell` 会自动更新价格，也可以手动 `--price` 更新\n3. **定期更新价格** — 持仓盈亏需要当前价格；联网更新必须显式添加 `--allow-network`\n4. **收益跟踪** — 使用 `--summary` 查看投资总体情况\n5. **ETF 适合大多数人** — 沪深 300、中证 500、纳指 ETF 是最简单的选择\n\n## 风险提示\n\n- 投资有风险，入市需谨慎\n- 历史收益不代表未来表现\n- 本工具仅供记录，不构成投资建议\n- 大额投资决策建议咨询专业人士\n\nFile v103.0.1:references/ledger_format.md\n\n# 账本文件格式说明 (.csv)\n\n## 概述\n\n`.csv` 文件是纯文本格式，设计目标：**人类可读、易编辑、结构化**。\n\n简单直观的 CSV 格式，一看就懂。\n\n## 文件结构\n\n```\n# 注释行（以 # 开头）\n# 日期,类型,金额,分类,描述,账户\n\n[账户初始余额]\n[交易记录]\n```\n\n## 格式详解\n\n### 账户初始余额\n\n```\n余额,账户名,金额\n```\n\n示例：\n```\n余额,微信钱包,1000.00\n余额,支付宝,2000.00\n余额,银行卡,50000.00\n余额,现金,500.00\n```\n\n规则：\n- 每个账户最多一行余额记录\n- 余额行以 `余额,` 开头，后面是账户名和金额\n- 后续交易会增减这个余额\n\n### 交易记录\n\n格式：`日期,类型,金额,分类,描述,账户`\n\n示例：\n```\n2026-05-21,支出,50.00,餐饮,午餐,微信钱包\n2026-05-21,支出,299.00,购物,外套,支付宝\n2026-05-01,收入,15000.00,工资,5月工资,银行卡\n```\n\n字段说明：\n- **日期**：YYYY-MM-DD，必填，如 `2026-05-21`\n- **类型**：只能是 `收入` 或 `支出`，必填\n- **金额**：正数，必填，如 `50.00`（支出时填正数，系统自动识别为支出方向）\n- **分类**：一级分类名，必填，如 `餐饮`、`交通`、`购物`、`居住`、`娱乐`、`通讯`、`医疗`、`教育`、`社交`、`其他`\n- **描述**：简短说明，可选\n- **账户**：支付/收款账户，必填，默认 `微信钱包`\n\n### 注释行\n\n```\n# 这是注释行\n# 日期,类型,金额,分类,描述,账户\n```\n\n### 空行\n\n空行会被自动忽略，用于分隔不同逻辑块。\n\n## 完整示例\n\n```\n# 日期,类型,金额,分类,描述,账户\n# === 账户初始余额 ===\n余额,微信钱包,1000.00\n余额,支付宝,2000.00\n余额,银行卡,50000.00\n余额,现金,500.00\n\n# === 2026年5月 ===\n2026-05-01,收入,15000.00,工资,5月工资,银行卡\n2026-05-01,支出,35.00,餐饮,午餐外卖,微信钱包\n2026-05-02,支出,128.00,餐饮,火锅,支付宝\n2026-05-03,支出,23.50,交通,打车上班,微信钱包\n2026-05-05,支出,1200.00,居住,5月房租,银行卡\n2026-05-05,支出,15.00,餐饮,早餐,微信钱包\n2026-05-05,支出,45.00,餐饮,午餐,微信钱包\n2026-05-10,支出,299.00,购物,外套,支付宝\n2026-05-12,支出,30.00,通讯,充话费,微信钱包\n2026-05-15,支出,80.00,娱乐,电影+零食,银行卡\n2026-05-15,支出,50.00,社交,生日红包,现金\n```\n\n## 余额计算\n\n某账户当前余额 = 初始余额 + 收入合计 - 支出合计\n\n示例（微信钱包）：\n```\n余额  +1000.00\n  +35.00（午餐）\n  -23.50（打车）\n  -15.00（早餐）\n  -45.00（午餐）\n  -30.00（话费）\n─────────────\n= 921.50\n```\n\n## 分类系统\n\n| 分类 | 说明 |\n|------|------|\n| 餐饮 | 吃饭、外卖、奶茶、咖啡、零食等 |\n| 交通 | 打车、地铁、公交、加油、高铁等 |\n| 购物 | 衣服、数码、日用品、超市等 |\n| 居住 | 房租、水电、物业、网费、燃气等 |\n| 娱乐 | 电影、游戏、KTV、旅游等 |\n| 通讯 | 话费、流量、手机套餐等 |\n| 医疗 | 看病、买药、体检等 |\n| 教育 | 课程、书籍、考试等 |\n| 社交 | 红包、礼物、请客等 |\n| 其他 | 无法归类的支出 |\n\n收入分类：工资、奖金、理财收益、兼职、报销退款、其他\n\n## 与旧版 .ledger 格式的区别\n\n| 特性 | 新 CSV 格式 | 传统双行格式 |\n|------|------------|------------------|\n| 文件扩展名 | `.csv` | `.ledger` |\n| 账户格式 | 扁平中文名 | 层级路径（如 `Assets:银行`）|\n| 记账方式 | 单边记账（一行一笔）| 双行格式（借贷两条线）|\n| 金额方向 | 类型字段区分 | 正负号区分 |\n| 学习成本 | 极低 | 中等 |\n| 语法要求 | 宽松（CSV格式）| 严格（指令+posting）|\n| 适用场景 | 个人随手记 | 传统双行记账 |\n\nArchive v103.0.0: 37 files, 103773 bytes\n\nFiles: _meta.json (134b), data/example.csv (713b), data/investments.csv (276b), data/README.md (646b), examples/README.md (389b), examples/sample.csv (890b), README.md (4476b), references/budget_guide.md (1853b), references/education.md (7349b), references/financial_benchmarks.md (5871b), references/goal_guide.md (1934b), references/invest_api.md (4473b), references/invest_guide.md (3738b), references/ledger_format.md (3813b), references/user_guide.md (2138b), scripts/_fund_loader.py (835b), scripts/budget.py (16484b), scripts/generate_report.py (11457b), scripts/goal.py (11013b), scripts/invest.py (45907b), scripts/lookup_code.py (4839b), scripts/parse_entry.py (16287b), scripts/query_ledger.py (10964b), scripts/validate_line.py (2486b), skill-card.md (2979b), SKILL.md (14759b), tests/eval_cases.yaml (10184b), tests/fixtures/empty.csv (135b), tests/fixtures/sample.budget.json (131b), tests/fixtures/sample.csv (1380b), tests/results/v2_report.md (3495b), tests/run_tests.py (25021b), tests/test_comprehensive.py (44442b), tests/test_ledger.py (39206b), tests/test_runner.sh (1593b), tests/test_security.py (5852b), tests/validate_skill.sh (5305b)\n\nFile v103.0.0:SKILL.md\n\n---\nname: simple-ledger\nname_zh: 简单记账 · 个人投资管家\ndescription: Log expenses, check balances, track budgets, set savings goals, and monitor stock/fund/ETF investments from natural language. Plain-text CSV storage, multi-account, offline-first with optional real-time quotes via opt-in network access.\ndescription_zh: 记账工具，一句话记录日常消费。自动分类、查账单、预算管理、月度报告、攒钱目标。支持股票/基金/ETF 投资记录、持仓查询、收益分析、实时行情刷新（需显式授权联网）。CSV 本地存储，支持多账户管理。\ntriggerWords:\n  - 记一笔\n  - 帮我记账\n  - 记到账本里\n  - 这个月花了多少\n  - 查账单\n  - 月度报告\n  - 消费报告\n  - 收支\n  - 设定预算\n  - 攒钱目标\n  - 查持仓\n  - 买入基金\n  - 买入股票\n  - 卖出股票\nmetadata:\n  openclaw:\n    requires:\n      bins: [python3]\n      pypi: [akshare]\n    tags: [ledger, budget, personal-finance, accounting, csv, natural-language, zh, 记账, 记一笔, 账本, 流水账, 消费记录, 支出管理, 个人理财, 个人财务, 资产管理, 投资, 投资记账, 持仓, 股票, 基金, ETF, 月度报告, 消费分析, 预算管理, 预算规划, 攒钱目标, 财务目标, 收支记录, 账户余额, 查账]\n    permissions:\n      file:\n        read: [\"~/.openclaw/workspace/data/ledger/**\"]\n        write: [\"~/.openclaw/workspace/data/ledger/**\"]\n      network:\n        domains: [\"*.sina.com.cn\", \"*.eastmoney.com\", \"*.akshare.xyz\"]\n      exec:\n        scripts: [\"scripts/*.py\"]\n---\n\n## Overview\n\nA natural-language expense tracker for everyday spending, plus investment tracking for stocks/funds/ETFs. Just say \"lunch cost 50 today\" — the agent parses and appends a CSV row to your ledger. No database, no cloud sync, just one CSV file.\n\n**What this skill is good at:**\n\n- 📝 **Natural-language logging** — record an expense with one sentence\n- 📊 **Spending queries** — by month, by category, by account\n- 💰 **Multi-account balances** — WeChat Pay, Alipay, bank card, cash\n- 📐 **Budget management** — set monthly caps per category, get overspend alerts\n- 📈 **Monthly reports** — income/expense breakdown with visual ASCII chart\n- 🎯 **Savings goals** — track progress toward a target (trip, emergency fund)\n- 💹 **Investment tracking** — buy/sell stocks & funds, portfolio P&L, optional live quotes\n\n**What this skill is NOT:**\n\n- ❌ Not an investment advisor (no stock picks, no market predictions)\n- ❌ Not a tax planner\n- ❌ Not a bank sync tool (no automatic transaction import)\n\n---\n\n## Quick Start\n\nJust tell the agent something like:\n\n```\n今天中午吃了碗面花了25\n昨天打车23.5\n工资到账8000\n买了件外套299，支付宝付的\n```\n\nThe agent will:\n1. Parse date / amount / category / description / account from your sentence\n2. Append a row to `~/.openclaw/workspace/data/ledger/default.csv`\n3. Show you the updated balance\n\nDefault account is **WeChat Pay** if you don't specify one.\n\n---\n\n## Core Features\n\n### 1. 📝 Natural-language logging\n\n**More examples:**\n- \"今天中午吃饭花了50块\"\n- \"昨天打车花了23.5\"\n- \"工资到账8000\"\n- \"充话费30\"\n- \"买了一件外套299，用支付宝付的\"\n- \"给小王转了200\"\n\n**Batch logging:**\n```\n今天花了：早餐15、打车30、午饭45\n```\n\n**Confirm-then-write:** the agent shows the parsed entry before appending.\n\n**Parsed fields:**\n\n| Field | Default | Notes |\n|-------|---------|-------|\n| `date` | today | supports \"today\", \"yesterday\", \"last Wednesday\" |\n| `amount` | required | decimal allowed |\n| `category` | auto-inferred | from keyword list (see references) |\n| `description` | auto-extracted | brief summary |\n| `account` | 微信钱包 | WeChat Pay default |\n\n### 2. 📊 Spending queries\n\n- \"这个月花了多少\" — total spending this month\n- \"上个月餐饮多少钱\" — by category, by month\n- \"最近的账单\" — recent transactions\n- \"我的余额\" / \"各账户余额\" — account balances\n\nOutput format:\n```\n📊 2026年5月 餐饮支出\n日期        金额      描述\n2026-05-01  ¥50.00   午餐\n2026-05-03  ¥128.00  火锅\n...\n合计        ¥238.00\n```\n\n### 3. 💰 Account balance management\n\n- View: \"微信钱包还有多少\"\n- Initialize: \"微信钱包初始余额1000\"\n- Adjust: \"银行卡余额修正为5000\"\n\nBalance = initial balance + sum(income) − sum(expense)\n\n### 4. 📐 Budget management\n\n```bash\npython3 scripts/budget.py <ledger.csv> --set 餐饮 2000\npython3 scripts/budget.py <ledger.csv> --progress 2026-05\npython3 scripts/budget.py <ledger.csv> --alert 2026-05\npython3 scripts/budget.py <ledger.csv> --template 15000   # 50/30/20 rule\npython3 scripts/budget.py <ledger.csv> --list\npython3 scripts/budget.py <ledger.csv> --remove 餐饮\n```\n\nSee `references/budget_guide.md` for details.\n\n### 5. 📈 Monthly report\n\n```bash\npython3 scripts/generate_report.py ./default.csv --month 2026-05\npython3 scripts/generate_report.py ./default.csv --month 2026-05 --output report.txt\n```\n\nOutput includes: income/expense summary, top 5 categories (ASCII bar chart), daily average, biggest single expense, vs last month delta, brief suggestions.\n\n### 6. 🎯 Savings goals\n\n```bash\ngoal.py create \"旅行基金\" 10000 2026-12-31\ngoal.py deposit \"旅行基金\" 2000\ngoal.py progress \"旅行基金\"\ngoal.py list\ngoal.py delete \"旅行基金\"    # ⚠️ requires typing \"删除\" to confirm\n```\n\nSee `references/goal_guide.md`.\n\n### 7. 💹 Investment tracking\n\n⚠️ **Network:** investment features (code lookup + live quotes) require `akshare` (pip install) and explicit `--allow-network` flag. All other features are offline.\n\n**Quick commands:**\n\n```bash\n# Buy (auto-lookup code by name, requires Y/N confirm)\ninvest.py --buy \"有色金属ETF南方\" auto 3100 2.07 2026-01-10 --allow-network\n\n# Buy (manual code)\ninvest.py --buy \"沪深300ETF\" 510050 100 3.50 2026-01-15\n\n# Sell\ninvest.py --sell \"沪深300ETF\" 510050 500 4.00 2026-03-01\n\n# Portfolio (offline, uses last-set prices)\ninvest.py --portfolio\n\n# Portfolio with auto-refresh quotes (needs network opt-in)\ninvest.py --portfolio --auto-refresh\n\n# Total P&L\ninvest.py --summary\n\n# Single quote\ninvest.py --quote 601138 --allow-network\n```\n\nFull command reference: `references/invest_api.md`.\n\n**Auto-refresh mode:** create `~/.openclaw/workspace/data/ledger/.env` with `AUTO_REFRESH=1` to make portfolio queries always fetch live prices. Delete the file to disable.\n\n---\n\n## Trigger Conditions\n\nActivate this skill **only when the user expresses an explicit financial intent**:\n\n- Log an expense (\"记一笔：花了XX\", \"帮我记账\", \"记到账本里\")\n- Query spending (\"这个月花了多少\", \"查账\", \"账单\")\n- Account management (\"我的余额\", \"银行卡还有多少\")\n- Monthly report (\"月度报告\", \"消费分析\")\n- Investment action (\"买入XX股\", \"卖了XX\", \"查持仓\", \"投资收益\") — ⚠️ needs network\n- Budget (\"设定预算\", \"超支了吗\", \"生成预算模板\")\n- Savings goal (\"建个攒钱目标\", \"旅行基金进度\")\n\n**Do NOT activate for:**\n\n- Casual mention of money in conversation (\"那顿饭花了50，味道一般\")\n- Asking about prices without logging intent (\"这个多少钱\", \"iPhone 17 多少钱\")\n- Generic financial discussion (\"最近花了不少钱\" as a sigh)\n- Other people's spending (only the user's own)\n\n**Disambiguation rule:** If the user is just chatting about a recent expense, treat it as ordinary conversation. The key signal is whether the user has an **explicit intent to record, manage, or query** their finances.\n\n---\n\n## File Format (Original CSV)\n\n```\n# 日期,类型,金额,分类,描述,账户\n余额,微信钱包,1000.00\n余额,支付宝,2000.00\n余额,银行卡,50000.00\n余额,现金,500.00\n2026-05-21,支出,50,餐饮,午餐,微信钱包\n2026-05-22,收入,8000,工资,5月工资,银行卡\n2026-05-23,支出,299,购物,外套,支付宝\n```\n\n**Rules:**\n- 6 fields: `日期,类型,金额,分类,描述,账户`\n- `类型` must be `收入` or `支出`\n- `金额` is always positive (direction comes from `类型`)\n- Flat account names (no hierarchy)\n- Initial balance uses `余额,账户,金额` format\n\n**Default location:** `~/.openclaw/workspace/data/ledger/default.csv`\n\n---\n\n## 🔒 Security & Permissions\n\nThis skill performs the following operations:\n\n| Operation | Behavior | Scope |\n|-----------|----------|-------|\n| 📖 Read files | Reads ledger CSV, budget JSON, investment CSV, goals JSON | Only `data/` directory |\n| ✏️ Write files | Appends/modifies ledger entries, budgets, investments, goals | Only `data/` directory |\n| 🗑️ Delete data | Deletes transactions, budgets, goals (all require user Y/N confirm) | Only `data/` directory |\n| 🌐 Network access | Queries stock/fund codes + real-time quotes via akshare (Sina/Eastmoney APIs) | Sends only security codes/names, no personal financial data |\n| 💻 Execute scripts | Runs Python scripts in `scripts/` | Only this skill's own scripts |\n\n**Data isolation:** `investments.csv` (investments) and `default.csv` (daily ledger) are completely independent files.\n\n**Will NOT do:**\n\n- ❌ Read MEMORY.md, USER.md, SOUL.md, or any non-financial file\n- ❌ Access ~/.ssh, ~/.aws, ~/.config or other system directories\n- ❌ Upload your financial data to any external server\n- ❌ Modify system files or execute external commands\n\n**Backup reminder:** All operations modify local CSV/JSON files directly. Back up `data/` regularly.\n\n---\n\n## 🌐 Network Behavior\n\n> ⚠️ **Network summary:** Investment features (security code lookup + live quotes) require network via the `akshare` library calling Sina Finance public APIs. All other features are fully local — **your financial data is never sent to any external server**.\n\n> 🔒 **Privacy notice:** Network queries only send security codes/names to public quote APIs (Sina, Eastmoney). **No personal financial data (balances, transactions, account info) is transmitted.** Be aware that queries themselves reveal which securities you're interested in.\n\n**Default behavior: offline queries.**\n\nNetwork access uses an **explicit opt-in** mechanism — never enabled by default. Add `--allow-network` to one-off network commands, or set `AUTO_REFRESH=1` in a local `.env` file to auto-refresh quotes on portfolio queries.\n\n| Operation | Default | Enable network |\n|-----------|---------|----------------|\n| Portfolio (`--portfolio`) | offline (uses last-set prices) | add `--auto-refresh` |\n| Summary (`--summary`) | offline | add `--auto-refresh` |\n| Refresh quotes (`--refresh`) | blocked | add `--allow-network` |\n| Single quote (`--quote`) | blocked | add `--allow-network` |\n| Auto-lookup code on buy | blocked | add `--allow-network` |\n\n**Disable auto-refresh:** delete `~/.openclaw/workspace/data/ledger/.env` or say \"关闭自动联网刷新\".\n\n**Manual price update (no network):**\n\n```\n工业富联现在81.58\n亨通光电价格91.43\n```\n\nBoth methods (auto-refresh vs manual update) work side-by-side without conflict.\n\n---\n\n## First-run Setup\n\nWhen the user first triggers this skill:\n\n1. Check if ledger file exists\n2. If not, create with template header\n3. Ask for common payment methods and initial balances\n\n**Template:**\n\n```\n# 日期,类型,金额,分类,描述,账户\n# 个人账本 - 创建于 YYYY-MM-DD\n# 格式说明见 references/ledger_format.md\n\n# 账户初始余额\n余额,微信钱包,0.00\n余额,支付宝,0.00\n余额,银行卡,0.00\n余额,现金,0.00\n\n# === 交易记录 ===\n```\n\n---\n\n## Interaction Modes\n\n### Single entry (most common)\n\n```\n用户: 今天中午吃了碗面花了25\nAgent: 已记录 ✅\n      📅 2026-05-21\n      💰 ¥25.00\n      📂 餐饮\n      💳 微信钱包\n      📝 午餐\n      微信钱包余额：¥975.00\n```\n\n### Dialogue entry (multi-field fill-in)\n\n```\n用户: 花了200块\nAgent: 买的什么？\n用户: 买了本书\nAgent: 已记录 ✅ ...\n```\n\n### Goal-linked entry\n\nWhen the user says they saved money toward a goal, do two things:\n1. Call `goal.py deposit` to update goal progress\n2. Record the expense normally\n\n### Modify / Delete\n\n> ⚠️ All delete operations require user Y/N confirm — never auto-delete.\n\n- \"删掉刚那笔\" (delete most recent, needs confirm)\n- \"删除5月15日那笔餐饮\" (delete specific, needs confirm)\n- \"把刚才那笔改成30块\" (modify amount, needs confirm)\n\n---\n\n## ⚖️ Professional Standards\n\nThis skill provides **financial recording and basic analysis tools**, not investment advisory services.\n\n| Can do | Cannot do |\n|--------|-----------|\n| Record and analyze your spending data | Recommend specific financial products |\n| Compare your spending vs general benchmarks | Guarantee any investment return |\n| Suggest savings based on your data | Predict market movements |\n| Explain financial concepts (compound interest, inflation) | Provide tax planning |\n| Help you build a savings plan | Do asset allocation |\n\n**Bottom line:** I help you understand where your money went, not where it should go.\n\n---\n\n## 📚 References\n\nLoad on demand:\n\n- **`references/ledger_format.md`** — CSV format details\n- **`references/budget_guide.md`** — budget management\n- **`references/goal_guide.md`** — savings goals\n- **`references/invest_guide.md`** — investment tracking workflow\n- **`references/invest_api.md`** — investment command reference\n- **`references/user_guide.md`** — user FAQ\n- **`references/financial_benchmarks.md`** — financial health benchmarks\n- **`references/education.md`** — financial concepts\n\n---\n\n## Tone & Style\n\n| Scenario | Style |\n|----------|-------|\n| Successful logging | Concise confirmation + key info: \"已记录 ✅ 餐饮 ¥35 余额 ¥965\" |\n| Monthly report | Clear data + 1-2 sentence suggestions |\n| User overspending | Gentle reminder, not criticism |\n| User reaching a goal | Genuine encouragement |\n| User asking investment advice | Educational content + disclaimer |\n\n**Avoid:** preachy tone, number-shaming, over-cautious language, fake intimacy.\n\n---\n\n## Constraints\n\n1. **Write vs delete separation.** Deletes require explicit user request + Y/N confirm — no auto-delete.\n2. **Amount required.** If amount can't be confirmed, ask.\n3. **Category guessable.** When confident, auto-categorize; when uncertain, offer options.\n4. **Date optional.** Defaults to today, supports relative dates.\n5. **Account optional.** Defaults to WeChat Pay.\n6. **Files are the database.** All data in CSV/JSON files. Users can edit any file with a text editor. Back up `data/` regularly.\n7. **External deps.** Basic features (logging, queries, budgets, reports, goals) use Python stdlib only. Investment code lookup requires `akshare` (pip install akshare) + network.\n\nFile v103.0.0:data/README.md\n\n# data/ 目录说明\n\n此目录用于存放用户的工作数据文件。\n\n## 文件说明\n\n- `example.csv` — 格式示例账本，包含账户初始余额和示例交易\n- `investments.csv` — 投资交易记录（买入/卖出/分红）\n- `goals.json` — 财务目标数据（自动生成）\n- `prices.json` — 投资品当前价格配置（手动更新）\n\n## 用户使用\n\n- 复制 `example.csv` 为你的工作账本\n- 建议存放在 `~/.openclaw/workspace/data/ledger/default.csv`\n- 也可以放在任何你喜欢的位置，脚本通过路径参数指定\n\n## 备份\n\n所有数据都是纯文本，建议定期备份 `data/` 目录。\n\nFile v103.0.0:examples/README.md\n\n# examples/ 目录说明\n\n包含简单的示例账本，适合初次使用时参考。\n\n## 文件\n\n- `sample.csv` — 最简示例，包含几个常见交易\n\n## 使用方式\n\n```bash\ncp examples/sample.csv ~/.openclaw/workspace/data/ledger/default.csv\n```\n\n然后告诉 Agent：\"我的账本在 `~/.openclaw/workspace/data/ledger/default.csv`\"，或者直接用路径参数调用脚本。\n\nFile v103.0.0:README.md\n\n# Simple Ledger · Personal Finance & Investment Tracker\n\nA natural-language expense tracker for everyday spending, plus investment tracking for stocks, funds, and ETFs. Just talk to your AI agent in plain English (or Chinese) — it parses your sentence and appends a row to a plain-text CSV ledger. No database, no cloud sync, no vendor lock-in.\n\n## Why Simple Ledger?\n\nMost personal finance apps force you into their schema, their cloud, their subscription plan. Simple Ledger does the opposite:\n\n- **One CSV file** — open it in Excel, Numbers, vim, or `cat`\n- **Natural language** — say \"spent 50 on lunch today\" and it's logged\n- **Offline-first** — all daily ledger features work without internet\n- **You own the data** — files live at `~/.openclaw/workspace/data/ledger/`\n- **Optional investments** — track stocks/funds/ETFs with opt-in live quotes\n\n## Features\n\n| Feature | Description | Network? |\n|---------|-------------|----------|\n| 📝 Natural-language logging | One sentence → CSV row | No |\n| 📊 Spending queries | By month, category, account | No |\n| 💰 Multi-account balances | WeChat Pay, Alipay, bank, cash | No |\n| 📐 Budgets | Per-category caps, overspend alerts | No |\n| 📈 Monthly reports | ASCII bar chart, top categories | No |\n| 🎯 Savings goals | Track progress, deposit reminders | No |\n| 💹 Investment tracking | Buy/sell, portfolio P&L | Opt-in |\n| 📡 Live quotes | Real-time prices via Sina/Eastmoney | Yes (opt-in) |\n\n## Quick Start\n\nTalk to your AI agent:\n\n```\nLunch cost 50 today\nSpent 23.5 on a taxi yesterday\nSalary arrived, 8000\nBought a jacket for 299, paid with Alipay\n```\n\nThe agent parses your sentence, shows the parsed entry for confirmation, then appends a row to `~/.openclaw/workspace/data/ledger/default.csv`.\n\n## Example Ledger\n\n```csv\n# 日期,类型,金额,分类,描述,账户\n余额,微信钱包,1000.00\n余额,支付宝,2000.00\n余额,银行卡,50000.00\n余额,现金,500.00\n2026-05-21,支出,50,餐饮,午餐,微信钱包\n2026-05-22,收入,8000,工资,5月工资,银行卡\n2026-05-23,支出,299,购物,外套,支付宝\n```\n\n## Installation\n\n```bash\nclawhub install simple-ledger\n```\n\nOr update to latest:\n\n```bash\nclawhub update simple-ledger --version 1.8.0\n```\n\n## Requirements\n\n- **Python 3** (built-in on macOS)\n- **akshare** (only for investment code lookup & live quotes): `pip install akshare`\n\n## Privacy & Data\n\nAll data lives in plain CSV/JSON files under `~/.openclaw/workspace/data/ledger/`. **Nothing is uploaded to any server.**\n\nThe only network operations are:\n\n1. Security code lookup (you say \"buy 有色金属ETF南方\", we ask Sina for its code)\n2. Live stock/fund quotes (when you opt-in)\n\nBoth only send the security name/code to public APIs — no balance, no transaction history, no account info.\n\n## File Structure\n\n```\nsimple-ledger/\n├── SKILL.md                    # Agent-facing documentation (Chinese + English)\n├── README.md                   # This file (user-facing English)\n├── _meta.json                  # Publishing metadata\n├── scripts/\n│   ├── parse_entry.py          # Parse natural language → CSV row\n│   ├── validate_line.py        # Validate CSV row format\n│   ├── query_ledger.py         # Read & filter ledger\n│   ├── generate_report.py      # Monthly report generator\n│   ├── budget.py               # Budget CRUD + alerts\n│   ├── goal.py                 # Savings goals CRUD\n│   ├── invest.py               # Investment tracking\n│   ├── lookup_code.py          # Security code lookup (network)\n│   └── _fund_loader.py         # Fund data loader\n├── references/\n│   ├── ledger_format.md\n│   ├── budget_guide.md\n│   ├── goal_guide.md\n│   ├── invest_guide.md\n│   ├── invest_api.md           # Investment command reference\n│   ├── user_guide.md\n│   ├── financial_benchmarks.md\n│   └── education.md\n├── examples/                   # Sample ledgers\n└── tests/\n    ├── test_ledger.py\n    ├── test_comprehensive.py\n    ├── test_security.py\n    ├── run_tests.py\n    ├── test_runner.sh\n    ├── validate_skill.sh\n    └── eval_cases.yaml\n```\n\n## License\n\nMIT-0 (free to use, modify, redistribute, no attribution required)\n\n## Links\n\n- ClawHub: https://clawhub.com/skills/simple-ledger\n- Issues: https://github.com/openclaw/clawhub/issues\n\nFile v103.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn7dzk85gz4pz5c569zky2pssn875nwe\",\n  \"slug\": \"simple-ledger\",\n  \"version\": \"103.0.0\",\n  \"publishedAt\": 1782913538668\n}\n\nFile v103.0.0:references/budget_guide.md\n\n# 预算管理指南\n\n## 核心概念\n\n预算帮你在花钱之前先规划好各分类可以花多少，超出时提前预警，而不是事后后悔。\n\n## 基础操作\n\n### 设定单个分类预算\n\n```bash\npython scripts/budget.py 你的账本.csv --set 餐饮 2000\npython scripts/budget.py 你的账本.csv --set 交通 800\n```\n\n### 查看所有预算\n\n```bash\npython scripts/budget.py 你的账本.csv --list\n```\n\n### 查看执行进度\n\n```bash\npython scripts/budget.py 你的账本.csv --progress 2026-05\n```\n\n### 超支预警\n\n```bash\npython scripts/budget.py 你的账本.csv --alert 2026-05\n```\n\n### 移除预算\n\n```bash\npython scripts/budget.py 你的账本.csv --remove 餐饮\n```\n\n## 预算模板\n\n### 50/30/20 法则（推荐）\n\n基于月收入自动生成分类预算：\n- 50% 必要支出（居住、餐饮、交通、通讯、医疗）\n- 30% 弹性支出（购物、娱乐、教育、社交）\n- 20% 储蓄/投资\n\n```bash\npython scripts/budget.py 你的账本.csv --template 15000\n```\n\n### 自定义比例\n\n```bash\n# 需求40% / 想要30% / 弹性20% / 其他10%\npython scripts/budget.py 你的账本.csv --template 15000 --ratio 40 30 20 10\n```\n\n## 预算判断标准\n\n| 进度 | 状态 | 建议 |\n|------|------|------|\n| < 75% | ✅ 正常 | 放心花 |\n| 75-90% | 🔸 注意 | 控制消费节奏 |\n| 90-100% | ⚠️ 快超了 | 谨慎支出 |\n| > 100% | ❌ 已超支 | 本月不要再花了 |\n\n## 实用建议\n\n1. **先有收入再定预算** — 先确认月收入，再反推支出结构\n2. **先紧后松** — 预算设低一点，实际超了比计划超了心理负担小\n3. **重点盯一项** — 同时盯 10 个分类很累，先盯最重要的 2-3 个\n4. **按月清零** — 每月重新评估预算，不建议跨月滚动\n5. **把储蓄当支出** — 每月固定往存款账户\"花\"一笔，预算才算完整\n\nFile v103.0.0:references/education.md\n\n# 财务知识科普\n\n> 不讲高深理论，只讲跟日常记账相关的基础概念。\n> 看完能理解\"为什么这么记\"，而不是死记硬背。\n\n## 1. 单式记账：为什么选单式？\n\n### 单式记账（本 Skill 采用的方式）\n\n**一句话解释：花了一笔就记一笔，像流水账。**\n\n```\n2026-05-21  微信钱包  -50.00  餐饮:饮食  午餐\n```\n\n**特点：**\n- ✅ 简单直觉：花了 50 就写 -50\n- ✅ 学习成本几乎为零\n- ✅ 适合日常\"随手记\"\n- ❌ 无法自动校验是否漏记\n- ❌ 不适合企业财务或复杂资产跟踪\n\n### 传统双行记账\n\n**一句话解释：每笔交易至少影响两个账户，有借必有贷，借贷必相等。**\n\n比如\"午餐花了 50\"：\n```\n2026-05-21 * 午餐\n  Expenses:餐饮:饮食        50.00 CNY\n  Assets:微信钱包          -50.00 CNY\n```\n\n**特点：**\n- ✅ 严谨：每笔交易都平衡，不会出现\"钱从哪来\"的漏洞\n- ✅ 强大的报表能力：自动计算资产负债表、利润表\n- ✅ 适合复杂场景（多币种、投资组合、税务）\n- ❌ 学习门槛较高\n- ❌ 日常记账\"杀鸡用牛刀\"\n\n### 为什么 personal-ledger 选单式？\n\n| 对比 | 单式记账 | 传统双行记账 |\n|------|---------|---------|\n| 记一笔午餐 | 1 行 | 3 行 |\n| 需要知道的概念 | 金额、分类 | 借方、贷方、账户类型、货币 |\n| 记错了怎么办 | 删掉重来 | 可能导致全局不平衡 |\n| 适合谁 | 想随手记钱的普通人 | 需要专业财务报表的人 |\n\n**结论：** 对于\"知道钱花哪了\"这个目标，单式记账完全够用。\n\n## 2. 资产 vs 负债 vs 净资产\n\n### 资产（你拥有的、值钱的东西）\n\n- 银行卡里的存款 ✓\n- 微信/支付宝里的钱 ✓\n- 现金 ✓\n- 你名下的房产 ✓\n- 投资账户里的基金/股票 ✓\n\n### 负债（你欠别人的）\n\n- 信用卡欠款 ✓\n- 花呗/白条 ✓\n- 房贷 ✓\n- 车贷 ✓\n- 借别人的钱 ✓\n\n### 净资产（你\"真正\"有多少）\n\n```\n净资产 = 资产 − 负债\n```\n\n**举例：**\n- 银行卡有 5 万，微信有 3 千，现金 5 百 → 资产 = 53,500\n- 信用卡欠 2 千，花呗欠 5 百 → 负债 = 2,500\n- 净资产 = 53,500 − 2,500 = **51,000**\n\n**一个容易混淆的点：**\n信用卡里的钱不算资产！信用卡额度是\"你能借多少\"，不是\"你有多少\"。\n只有你还款之后，银行卡里减少的那部分才是支出。\n\n### 在记账中怎么体现？\n\n本 Skill 的处理方式：\n- **资产类账户**：微信钱包、支付宝、银行卡、现金 → 记余额变化\n- **负债类账户**：信用卡、花呗 → 支出时记到负债账户，还款时从资产转到负债\n- **净资产**：可通过\"所有资产账户余额之和 − 所有负债账户余额之和\"计算\n\n## 3. 现金流管理基础\n\n### 什么是现金流？\n\n**现金流 = 钱进来的速度 − 钱出去的速度。**\n\n通俗地说：你每个月进账多少，出账多少，中间的差额就是现金流。\n\n### 现金流的三种状态\n\n```\n收入 > 支出  →  正向现金流 → 钱越来越多 → 健康 ✅\n收入 = 支出  →  零现金流  → 没有积累   → 需要注意 ⚠️\n收入 < 支出  →  负向现金流 → 钱越来越少 → 危险 ❌\n```\n\n### 为什么现金流比\"赚多少钱\"重要？\n\n一个人月薪 2 万但每月花 2 万 1 千 → 每个月在\"变穷\"\n一个人月薪 8 千但每月只花 5 千 → 每个月在\"变富\"\n\n**赚多少决定了上限，花多少决定了实际积累。**\n\n### 如何改善现金流？\n\n**开源（增加收入）：**\n- 提升技能涨薪（最可持续）\n- 兼职 / 副业\n- 出租闲置资源\n- 理财收益（长期）\n\n**节流（减少支出）：**\n- 记账 → 发现不该花的钱\n- 区分\"需要\"和\"想要\"\n- 找更便宜的替代方案\n- 减少冲动消费（等 24 小时再买）\n\n**本 Skill 帮你做的是\"节流\"部分：** 通过记账让你看清支出，从而做出更好的消费决策。\n\n## 4. 预算为什么重要？\n\n### 没有预算的生活\n\n```\n月初：感觉有很多钱\n月中：也没怎么花啊？\n月底：钱呢？？？\n```\n\n### 有预算的生活\n\n```\n月初：这个月餐饮预算 2000，购物预算 1000\n月中：餐饮已经花了 1500，还剩 500，控制一下外卖\n月底：餐饮 1900，达标！购物 800，省了 200\n```\n\n### 预算的本质\n\n**预算不是限制你花钱，而是让你主动选择钱花在哪。**\n\n没有预算时，钱是被\"被动消费\"花掉的（广告、冲动、习惯）。\n有预算时，你把钱分配给\"真正重要的东西\"。\n\n### 怎么开始做预算？\n\n**第一步：先记账 1–2 个月，搞清楚现状**\n（别急着做预算，你都不知道现在花多少怎么做预算？）\n\n**第二步：按分类设定月度预算上限**\n\n参考\"财务基准参考\"中的占比，结合自己的实际情况设定。\n\n**第三步：月底对比实际 vs 预算**\n\n本 Skill 的月度报告会帮你做这个对比（未来版本会支持预算功能）。\n\n### 预算的常见误区\n\n| 误区 | 正确做法 |\n|------|---------|\n| \"预算越低越好\" | 预算要现实可行，否则坚持不下来 |\n| \"所有分类都要设预算\" | 先管好 TOP 3 大头（通常是居住、餐饮、购物） |\n| \"超预算就是失败\" | 超预算是正常的，关键是知道超了多少、为什么超 |\n| \"预算一定不能变\" | 每月根据实际情况调整，预算是活的 |\n\n## 5. 应急基金的重要性\n\n### 什么是应急基金？\n\n**一笔专门用来应对突发事件的存款。** 不投资、不消费、不动它，除非真有急事。\n\n### 什么算\"急事\"？\n\n- ✅ 突然失业，需要几个月的生活费\n- ✅ 生病住院，自费部分\n- ✅ 家里突然需要大额维修\n- ✅ 必须的紧急出行\n- ❌ 手机出了新款想换\n- ❌ 朋友借钱（除非是真正的紧急情况）\n- ❌ 双十一打折\n\n### 需要多少？\n\n| 安全等级 | 金额 | 适合谁 |\n|---------|------|--------|\n| 最低保障 | 1 个月支出 | 刚开始攒钱，有个底 |\n| 基本安全 | 3 个月支出 | 大多数人的目标 |\n| 比较安心 | 6 个月支出 | 有房贷/家庭责任的人 |\n| 非常安心 | 6–12 个月支出 | 自由职业/收入不稳定 |\n\n**怎么算 1 个月的支出？**\n看你最近一个月的月度报告里的\"总支出\"数字，或者把最近 3 个月的支出平均一下。\n\n### 放在哪里？\n\n- **活期存款 / 货币基金**：随时能取，收益虽然低但安全性最高\n- ❌ 不要放股票、基金（急用钱时可能正好在亏）\n- ❌ 不要放定期（提前取会损失利息）\n\n### 怎么攒？\n\n1. 每个月发工资后，**先把应急基金的钱转出来**，剩下的才是可以花的\n2. 从小目标开始：先攒 1 个月支出，再攒 3 个月\n3. 记账帮你控制支出，省下的钱就往应急基金里存\n\n### 为什么记账跟应急基金有关？\n\n**因为记账让你知道：**\n- 你每个月实际支出多少（决定了应急基金的目标金额）\n- 你每个月能存多少（决定了多久能攒够）\n- 你的支出里哪些可以砍（加速攒钱）\n- 你的消费趋势是否在恶化（提前预警）\n\n---\n\n> **总结：** 记账是所有财务管理的第一步。你不需要懂投资、不需要懂税务，先把\"钱去哪了\"这个问题回答清楚，其他的都是后面的事。\n\nFile v103.0.0:references/financial_benchmarks.md\n\n# 个人财务基准参考\n\n> 本文档提供常见的财务健康指标，用于在月度报告中给出有意义的参考对比。\n> 所有数据为通用参考值，个人情况千差万别，仅作方向性指引，不作硬性标准。\n\n## 1. 储蓄率目标\n\n| 阶段 | 推荐储蓄率 | 说明 |\n|------|-----------|------|\n| 刚工作 / 还债期 | ≥ 10% | 先养成习惯，金额不重要 |\n| 稳定期 | 20% – 30% | 大多数理财建议的\"甜蜜点\" |\n| 财务自由追求期 | 30% – 50% | 加速积累，需要较强的消费纪律 |\n\n**怎么算：**\n```\n储蓄率 = (收入 − 支出) / 收入 × 100%\n```\n\n**月度报告中的表述示例：**\n- 储蓄率 > 30%：\"本月储蓄率 35%，超过推荐的 30% 目标，继续保持！\"\n- 储蓄率 10%–30%：\"本月储蓄率 22%，在健康范围内。如果目标是加速储蓄，可以看看餐饮和购物有没有优化空间。\"\n- 储蓄率 < 10%：\"本月储蓄率偏低（8%）。建议先排查是否有大额意外支出，后续可以尝试把目标设到 15% 起步。\"\n\n## 2. 分类支出占比参考\n\n以下为税后月收入的百分比参考，适用于中国城市普通工薪家庭：\n\n| 分类 | 健康范围 | 警戒线 | 说明 |\n|------|---------|--------|------|\n| 🏠 居住（房租/房贷+水电物业） | 20% – 30% | > 40% | 含房租、房贷、水电燃气、物业 |\n| 🍜 餐饮 | 15% – 25% | > 35% | 含一日三餐、外卖、零食饮料 |\n| 🚌 交通 | 5% – 10% | > 15% | 含通勤、打车、公共交通 |\n| 🛍️ 购物 | 5% – 15% | > 25% | 含服饰、日用品、电子产品 |\n| 🎮 娱乐 | 3% – 8% | > 15% | 含视频会员、游戏、电影、社交 |\n| 📚 教育 | 2% – 5% | > 10% | 含课程、书籍、技能培训 |\n| 🏥 医疗 | 2% – 5% | > 10% | 含体检、药品、保险（不含社保） |\n| 📱 通讯 | 1% – 3% | > 5% | 含话费、网费 |\n| 💝 社交人情 | 3% – 8% | > 15% | 含红包、礼物、请客 |\n| 💰 储蓄/投资 | 20% – 30% | < 10% | 这是\"剩下来\"的部分 |\n\n## 3. 健康财务指标速查表\n\n### 核心三问\n\n| 指标 | 健康值 | 怎么算 |\n|------|--------|--------|\n| 应急基金 | ≥ 3 个月支出 | 把最近 3 个月的月均支出 × 3 |\n| 储蓄率 | ≥ 20% | (收入 − 支出) / 收入 |\n| 负债收入比 | ≤ 35% | 月还贷总额 / 月收入 |\n\n### 进阶指标\n\n| 指标 | 说明 | 健康范围 |\n|------|------|---------|\n| 流动性比率 | 能随时拿出的钱 / 月支出 | 3 – 6 |\n| 负债资产比 | 总负债 / 总资产 | < 50% |\n| 投资占资产比 | 投资类资产 / 总资产 | 随年龄递增，25岁>10%，35岁>30% |\n| 保险覆盖率 | 年保费 / 年收入 | 5% – 10% |\n\n### 简易评分卡\n\n用以下 5 项快速评估财务健康度，每项 20 分：\n\n1. **每月有结余**（储蓄率 > 10%）— 20 分\n2. **有应急基金**（≥ 1 个月支出）— 20 分\n3. **无高息负债**（无信用卡分期、网贷）— 20 分\n4. **知道钱花在哪了**（有记账习惯）— 20 分\n5. **有储蓄/投资目标**（哪怕是模糊的）— 20 分\n\n- 80–100：财务状况良好 👍\n- 60–79：基本健康，有优化空间\n- 40–59：需要关注，建议从记账开始\n- < 40：需要行动，优先处理高息负债\n\n## 4. 中国普通家庭消费结构参考\n\n数据来源：国家统计局居民消费支出分类（2023 年大致水平），城镇居民人均年消费支出约 3 万元。\n\n| 类别 | 占比 |\n|------|------|\n| 食品烟酒 | 29% |\n| 居住 | 24% |\n| 交通通信 | 14% |\n| 教育文化娱乐 | 10% |\n| 医疗保健 | 9% |\n| 衣着 | 6% |\n| 生活用品及服务 | 5% |\n| 其他用品及服务 | 3% |\n\n**注意：** 这是全国平均水平，一二线城市居住占比会显著更高（可达 35%–40%）。\n\n## 5. 不同收入水平的通用理财建议\n\n### 月收入 < 5000 元\n- **优先目标**：建立记账习惯 + 应急基金（哪怕每月存 200 元）\n- **消费建议**：居住控制在 1500 以内，餐饮自己做为主\n- **投资建议**：先别想投资，把钱存银行活期或货币基金就行\n- **关键动作**：开始记账，知道钱去哪了\n\n### 月收入 5000 – 10000 元\n- **优先目标**：应急基金攒到 1–2 万 + 偿还高息负债\n- **消费建议**：居住 30% 以内，餐饮 25% 以内\n- **投资建议**：可以从货币基金、定期存款开始，学习理财基础知识\n- **关键动作**：让储蓄率稳定在 15% 以上\n\n### 月收入 10000 – 20000 元\n- **优先目标**：应急基金 3–6 个月 + 开始配置保险 + 建立投资组合\n- **消费建议**：居住 30% 以内，娱乐消费设预算上限\n- **投资建议**：指数基金定投（沪深300 / 中证500），每月固定比例\n- **关键动作**：建立系统性理财规划，不只是存钱\n\n### 月收入 20000 元以上\n- **优先目标**：资产配置多元化（房产/基金/债券/保险）\n- **消费建议**：避免\"生活方式膨胀\"（赚得多花得更多）\n- **投资建议**：根据风险承受能力分配资产，考虑长期规划（养老、子女教育）\n- **关键动作**：关注资产增值效率，而不仅仅是存钱速度\n\n---\n\n## 在月度报告中的使用方式\n\nAgent 在生成月度报告时，应：\n\n1. **计算用户的实际储蓄率**，与 20% 基准对比\n2. **计算各分类占收入百分比**，标注超出警戒线的项目\n3. **如果数据充足（≥ 3 个月）**，给出趋势判断（改善 / 恶化 / 稳定）\n4. **每次只提 1–2 个最值得关注的点**，不要把所有指标都列一遍\n5. **用鼓励为主的语言**，避免让用户产生焦虑\n\n**报告建议的标准模板：**\n\n```\n💡 本月财务小结\n\n储蓄率 XX%（目标 ≥20%）：[达标/偏低/优秀]\n最值得关注的支出：[分类名] 占收入 XX%，[正常/偏高/需留意]\n[一句话具体建议]\n```\n\nFile v103.0.0:references/goal_guide.md\n\n# 财务目标指南\n\n## 什么是财务目标\n\n财务目标是有截止日期和目标金额的存款计划。比如：\n- 旅行基金：¥10,000，年底前\n- 应急基金：¥30,000，1年内\n- 买车：¥50,000，3年内\n\n## 基础操作\n\n### 创建目标\n\n```bash\npython scripts/goal.py create \"旅行基金\" 10000 2026-12-31\n```\n\n### 存入金额\n\n```bash\npython scripts/goal.py deposit \"旅行基金\" 2000\n```\n\n### 查看进度\n\n```bash\npython scripts/goal.py progress \"旅行基金\"\n```\n\n### 列出所有目标\n\n```bash\npython scripts/goal.py list\n```\n\n### 删除目标\n\n```bash\npython scripts/goal.py delete \"旅行基金\"\n```\n\n## 预测逻辑\n\n系统会根据你的存款历史计算月均存款速度，判断能否按时达成：\n\n- 月均存款速度基于存款记录自动计算\n- 预测结果会在进度中显示\n- 如果速度不够，会告诉你每月需要存多少才能达标\n\n## 常见目标类型\n\n### 应急基金（优先级最高）\n\n目标金额 = 3-6 个月生活支出\n截止日期：随时开始，越早越好\n建议策略：先把紧急目标存满\n\n### 旅行基金\n\n目标金额：按目的地估算\n截止日期：出发前 1 个月\n建议：把旅行费用单独设账本，避免和生活费混在一起\n\n### 购房首付\n\n目标金额：按目标城市房价估算\n截止日期：5-10 年\n建议：用定期存款 + 基金定投组合\n\n### 养老储备\n\n目标金额：按退休后生活水平估算\n截止日期：退休前\n建议：越早开始越好，利用复利效应\n\n## 实用建议\n\n1. **一个时间只追一个目标** — 同时追 3 个目标等于没有目标\n2. **截止日期设紧一点** — 宽松的截止日期让人拖延\n3. **记录每一笔存款** — 用 `deposit` 指令，积累存款历史用于预测\n4. **达成后立即设新目标** — 不要让攒钱这件事停下来\n5. **应急基金优先于投资** — 应急金没存满之前不要投资高风险产品\n\nFile v103.0.0:references/invest_api.md\n\n# Investment Tracking — Command Reference\n\n> ⚠️ **Network:** All `--allow-network` flags require user confirmation. Without `--allow-network`, commands use last-set prices from `investments.csv`.\n\n## File Location\n\nDefault: `~/.openclaw/workspace/data/ledger/investments.csv`\n\n## Buy / Sell\n\n### Buy (auto-lookup code by name)\n\n```bash\ninvest.py --buy \"<证券名称>\" auto <数量> <单价> <日期> --allow-network\n```\n\nExample:\n```bash\ninvest.py --buy \"有色金属ETF南方\" auto 3100 2.07 2026-01-10 --allow-network\n```\n\nBehavior:\n1. Queries Sina/Eastmoney for the security code\n2. If unique match → shows trade summary, requires Y/N to confirm\n3. If multiple candidates → lists options, asks user to pick\n4. If no match → prompts for manual code\n\n### Buy (manual code)\n\n```bash\ninvest.py --buy \"<名称>\" <代码> <数量> <单价> <日期>\n```\n\nExample:\n```bash\ninvest.py --buy \"沪深300ETF\" 510050 100 3.50 2026-01-15\n```\n\n### Sell\n\n```bash\ninvest.py --sell \"<名称>\" <代码> <数量> <单价> <日期>\n```\n\nExample:\n```bash\ninvest.py --sell \"沪深300ETF\" 510050 500 4.00 2026-03-01\n```\n\n## Price & Cost\n\n### Update current price (manual, no network)\n\n```bash\ninvest.py --price <代码> <价格>\n```\n\nExample:\n```bash\ninvest.py --price 601138 81.58\n```\n\n### Update cost basis\n\n```bash\ninvest.py --cost <代码> <新成本>\n```\n\nExample:\n```bash\ninvest.py --cost 601138 66.589\n```\n\n## Quotes & Refresh\n\n### Single-quote lookup\n\n```bash\ninvest.py --quote <代码> --allow-network\n```\n\nExample:\n```bash\ninvest.py --quote 601138 --allow-network\n```\n\n### Refresh all holdings\n\n```bash\ninvest.py --refresh --allow-network\n```\n\n## Portfolio & Reports\n\n### Portfolio (offline, last-set prices)\n\n```bash\ninvest.py --portfolio\n```\n\n### Portfolio with live quotes\n\n```bash\ninvest.py --portfolio --auto-refresh\n```\n\n### Single-holding P&L\n\n```bash\ninvest.py --return <代码>\n```\n\nExample:\n```bash\ninvest.py --return 510050\n```\n\n### Total P&L summary\n\n```bash\ninvest.py --summary\n```\n\nWith live quotes:\n\n```bash\ninvest.py --summary --auto-refresh\n```\n\n## History\n\n### List all transactions\n\n```bash\ninvest.py --list\n```\n\n## Global Options\n\n| Flag | Description |\n|------|-------------|\n| `--allow-network` | Permit one-off network call (code lookup or quote) |\n| `--auto-refresh` | Auto-fetch live quotes for portfolio/summary |\n| `--csv <file>` | Use a non-default `investments.csv` path |\n| `--no-input` | Skip Y/N confirmation (for batch scripts only) |\n\n## Auto-refresh Mode\n\nCreate `~/.openclaw/workspace/data/ledger/.env` with:\n\n```\nAUTO_REFRESH=1\n```\n\nAfter this, `--portfolio` and `--summary` always fetch live quotes (no need to add `--auto-refresh`).\n\nTo disable: delete the `.env` file or set `AUTO_REFRESH=0`.\n\n## Common Errors\n\n| Error | Cause | Fix |\n|-------|-------|-----|\n| `network blocked` | `--allow-network` missing | Add the flag (one-off) or enable auto-refresh |\n| `code not found` | Security name has no Sina/Eastmoney match | Provide code manually with `--buy <名称> <代码>` |\n| `insufficient holdings` | Sell quantity > current holding | Check portfolio with `--portfolio` |\n| `csv not found` | First run, no investments.csv | Use `--buy` to create the file |\n\n## Data Format\n\n`investments.csv` columns:\n\n```\ndate,action,code,name,quantity,price,account,note\n```\n\nWhere:\n- `date` — YYYY-MM-DD\n- `action` — `buy` or `sell`\n- `code` — 6-digit code (510050, 601138, etc.)\n- `name` — security name (used for display)\n- `quantity` — shares (decimal allowed for funds)\n- `price` — per-share price\n- `account` — payment account (same as ledger accounts)\n- `note` — optional memo\n\nThe script also maintains a sidecar state (in CSV comment lines) tracking last-set current prices per code.\n\n## Worked Example\n\n```bash\n# 1. First buy (uses network to find code)\ninvest.py --buy \"贵州茅台\" auto 10 1600.00 2026-06-01 --allow-network\n# → Shows trade summary, prompts Y/N → after Y, appends to investments.csv\n\n# 2. Set current price manually (no network)\ninvest.py --price 600519 1685.50\n\n# 3. Check portfolio\ninvest.py --portfolio\n# Shows: 贵州茅台 (600519) | 10 shares @ cost 1600.00 | current 1685.50 | +5.34%\n\n# 4. Or auto-refresh for live price\ninvest.py --portfolio --auto-refresh\n\n# 5. Partial sell\ninvest.py --sell \"贵州茅台\" 600519 5 1700.00 2026-06-15\n# → Shows gain, prompts Y/N\n\n# 6. Summary\ninvest.py --summary\n```\n\nSee `invest_guide.md` for workflow philosophy and net-cost method explanation.\n\nFile v103.0.0:references/invest_guide.md\n\n# 投资跟踪指南\n\n## 数据文件\n\n- 交易记录：`~/.openclaw/workspace/data/ledger/investments.csv`\n- 价格配置：`~/.openclaw/workspace/data/ledger/prices.json`（需 `--allow-network` 显式允许联网刷新，或手动更新）\n\n> ⚠️ 买入/卖出会持久化写入本地投资账本，必须在交互式终端输入 Y/N 确认；非交互环境不会写入。\n> 🌐 行情刷新、代码搜索、按名称查询会联网；命令必须显式添加 `--allow-network`。联网时仅发送证券代码/名称，不发送账本、余额或交易记录。\n\n## 格式说明\n\n投资账本 CSV 格式：\n```\n# 日期,类型,代码,名称,数量,@单价,金额,账户\n买入: 日期,买入,代码,名称,数量,@单价,金额,账户\n卖出: 日期,卖出,代码,名称,数量,@单价,金额,账户\n```\n\n## 基础操作\n\n### 记录买入\n\n```bash\npython scripts/invest.py --buy \"沪深300ETF\" 510050 1000 3.50 2026-01-15\n```\n\n### 记录卖出\n\n```bash\npython scripts/invest.py --sell \"沪深300ETF\" 510050 500 4.00 2026-03-01\n```\n\n### 更新当前价格\n\n```bash\npython scripts/invest.py --price 510050 3.62\n```\n\n### 显式联网刷新行情\n\n```bash\n# 联网刷新所有持仓的实时/收盘价（股票/ETF → 新浪，场外基金 → 东方财富）\npython scripts/invest.py --refresh --allow-network\n\n# 查询单只证券实时行情。按名称查询会先联网查代码。\npython scripts/invest.py --quote 600487 --allow-network\npython scripts/invest.py --quote 永赢先锋半导体 --allow-network\n```\n\n> ⚠️ 股票/ETF 使用新浪财经接口，场外基金使用东方财富净值接口。联网查询会向第三方发送证券代码/名称；不会发送个人账本数据。未加 `--allow-network` 时命令会拒绝联网。\n\n### 修改成本价\n\n```bash\npython scripts/invest.py --cost 600487 75.631\n```\n\n> 修改最近一笔买入的单价，系统自动重算总成本。\n\n### 查看持仓\n\n```bash\npython scripts/invest.py --portfolio\n```\n\n### 单只收益分析\n\n```bash\npython scripts/invest.py --return 510050\n```\n\n### 汇总收益\n\n```bash\npython scripts/invest.py --summary\n```\n\n### 查看交易记录\n\n```bash\npython scripts/invest.py --list\npython scripts/invest.py --list 510050  # 单只历史\n```\n\n### 确认机制说明\n\n```bash\npython scripts/invest.py --buy \"沪深300ETF\" 510050 100 3.50 2026-01-15\npython scripts/invest.py --sell \"沪深300ETF\" 510050 500 4.00 2026-03-01\n```\n\n> ⚠️ **所有买入/卖出操作必须经过交互式确认（Y/N），不存在跳过确认的快捷参数。**\n> 非交互环境会直接取消写入，这是为了防止 Agent 误操作或 prompt 注入导致错误的金融记录。金融操作必须有安全确认环节。\n\n> ⚠️ **数据隔离：** 投资记录仅写入 investments.csv，与日常账本（default.csv）完全独立。\n\n## 收益计算方式\n\n采用**平均成本法**（成本法）：\n- 买入时记录成本\n- 卖出时按平均成本计算已实现盈亏\n- 持仓盈亏 = 当前市值 - 持仓成本\n- 总收益 = 持仓盈亏 + 已实现盈亏\n\n## 实用建议\n\n1. **先有应急基金再投资** — 应急金没到位之前不碰高风险投资\n2. **用价格配置追踪市价** — 每次 `--buy`/`--sell` 会自动更新价格，也可以手动 `--price` 更新\n3. **定期更新价格** — 持仓盈亏需要当前价格；联网更新必须显式添加 `--allow-network`\n4. **收益跟踪** — 使用 `--summary` 查看投资总体情况\n5. **ETF 适合大多数人** — 沪深 300、中证 500、纳指 ETF 是最简单的选择\n\n## 风险提示\n\n- 投资有风险，入市需谨慎\n- 历史收益不代表未来表现\n- 本工具仅供记录，不构成投资建议\n- 大额投资决策建议咨询专业人士\n\nFile v103.0.0:references/ledger_format.md\n\n# 账本文件格式说明 (.csv)\n\n## 概述\n\n`.csv` 文件是纯文本格式，设计目标：**人类可读、易编辑、结构化**。\n\n简单直观的 CSV 格式，一看就懂。\n\n## 文件结构\n\n```\n# 注释行（以 # 开头）\n# 日期,类型,金额,分类,描述,账户\n\n[账户初始余额]\n[交易记录]\n```\n\n## 格式详解\n\n### 账户初始余额\n\n```\n余额,账户名,金额\n```\n\n示例：\n```\n余额,微信钱包,1000.00\n余额,支付宝,2000.00\n余额,银行卡,50000.00\n余额,现金,500.00\n```\n\n规则：\n- 每个账户最多一行余额记录\n- 余额行以 `余额,` 开头，后面是账户名和金额\n- 后续交易会增减这个余额\n\n### 交易记录\n\n格式：`日期,类型,金额,分类,描述,账户`\n\n示例：\n```\n2026-05-21,支出,50.00,餐饮,午餐,微信钱包\n2026-05-21,支出,299.00,购物,外套,支付宝\n2026-05-01,收入,15000.00,工资,5月工资,银行卡\n```\n\n字段说明：\n- **日期**：YYYY-MM-DD，必填，如 `2026-05-21`\n- **类型**：只能是 `收入` 或 `支出`，必填\n- **金额**：正数，必填，如 `50.00`（支出时填正数，系统自动识别为支出方向）\n- **分类**：一级分类名，必填，如 `餐饮`、`交通`、`购物`、`居住`、`娱乐`、`通讯`、`医疗`、`教育`、`社交`、`其他`\n- **描述**：简短说明，可选\n- **账户**：支付/收款账户，必填，默认 `微信钱包`\n\n### 注释行\n\n```\n# 这是注释行\n# 日期,类型,金额,分类,描述,账户\n```\n\n### 空行\n\n空行会被自动忽略，用于分隔不同逻辑块。\n\n## 完整示例\n\n```\n# 日期,类型,金额,分类,描述,账户\n# === 账户初始余额 ===\n余额,微信钱包,1000.00\n余额,支付宝,2000.00\n余额,银行卡,50000.00\n余额,现金,500.00\n\n# === 2026年5月 ===\n2026-05-01,收入,15000.00,工资,5月工资,银行卡\n2026-05-01,支出,35.00,餐饮,午餐外卖,微信钱包\n2026-05-02,支出,128.00,餐饮,火锅,支付宝\n2026-05-03,支出,23.50,交通,打车上班,微信钱包\n2026-05-05,支出,1200.00,居住,5月房租,银行卡\n2026-05-05,支出,15.00,餐饮,早餐,微信钱包\n2026-05-05,支出,45.00,餐饮,午餐,微信钱包\n2026-05-10,支出,299.00,购物,外套,支付宝\n2026-05-12,支出,30.00,通讯,充话费,微信钱包\n2026-05-15,支出,80.00,娱乐,电影+零食,银行卡\n2026-05-15,支出,50.00,社交,生日红包,现金\n```\n\n## 余额计算\n\n某账户当前余额 = 初始余额 + 收入合计 - 支出合计\n\n示例（微信钱包）：\n```\n余额  +1000.00\n  +35.00（午餐）\n  -23.50（打车）\n  -15.00（早餐）\n  -45.00（午餐）\n  -30.00（话费）\n─────────────\n= 921.50\n```\n\n## 分类系统\n\n| 分类 | 说明 |\n|------|------|\n| 餐饮 | 吃饭、外卖、奶茶、咖啡、零食等 |\n| 交通 | 打车、地铁、公交、加油、高铁等 |\n| 购物 | 衣服、数码、日用品、超市等 |\n| 居住 | 房租、水电、物业、网费、燃气等 |\n| 娱乐 | 电影、游戏、KTV、旅游等 |\n| 通讯 | 话费、流量、手机套餐等 |\n| 医疗 | 看病、买药、体检等 |\n| 教育 | 课程、书籍、考试等 |\n| 社交 | 红包、礼物、请客等 |\n| 其他 | 无法归类的支出 |\n\n收入分类：工资、奖金、理财收益、兼职、报销退款、其他\n\n## 与旧版 .ledger 格式的区别\n\n| 特性 | 新 CSV 格式 | 传统双行格式 |\n|------|------------|------------------|\n| 文件扩展名 | `.csv` | `.ledger` |\n| 账户格式 | 扁平中文名 | 层级路径（如 `Assets:银行`）|\n| 记账方式 | 单边记账（一行一笔）| 双行格式（借贷两条线）|\n| 金额方向 | 类型字段区分 | 正负号区分 |\n| 学习成本 | 极低 | 中等 |\n| 语法要求 | 宽松（CSV格式）| 严格（指令+posting）|\n| 适用场景 | 个人随手记 | 传统双行记账 |\n\nArchive v102.0.0: 31 files, 100121 bytes\n\nFiles: _meta.json (134b), examples/README.md (389b), examples/sample.csv (890b), references/budget_guide.md (1853b), references/education.md (7349b), references/financial_benchmarks.md (5871b), references/goal_guide.md (1934b), references/invest_guide.md (3738b), references/ledger_format.md (3813b), references/user_guide.md (2138b), scripts/_fund_loader.py (835b), scripts/budget.py (16484b), scripts/generate_report.py (11457b), scripts/goal.py (11013b), scripts/invest.py (45907b), scripts/lookup_code.py (4839b), scripts/parse_entry.py (14844b), scripts/query_ledger.py (10756b), skill-card.md (2496b), SKILL.md (24998b), tests/eval_cases.yaml (10184b), tests/fixtures/empty.csv (135b), tests/fixtures/sample.budget.json (131b), tests/fixtures/sample.csv (1380b), tests/results/v2_report.md (3495b), tests/run_tests.py (25021b), tests/test_comprehensive.py (44442b), tests/test_ledger.py (39206b), tests/test_runner.sh (1593b), tests/test_security.py (5852b), tests/validate_skill.sh (5305b)\n\nFile v102.0.0:SKILL.md\n\n---\nname: simple-ledger\nname_zh: 简单记账 · 个人投资管家\ndescription: Ledger assistant: a simple expense tracker for daily spending. Log expenses, check balances, track budgets, and manage investments.\ndescription_zh: 记账工具，一句话记录日常消费。自动分类、查账单、预算管理、月度报告。支持股票/基金/ETF投资记录、持仓查询、收益分析、实时行情刷新。CSV本地存储，支持多账户管理。\ntriggerWords:\n  - 记账\n  - 记一笔\n  - 花了多少\n  - 查账单\n  - 月度报告\n  - 消费报告\n  - 收支\n  - 预算\n  - 设定预算\n  - 攒钱目标\n  - 查持仓\n  - 买入基金\n  - 买入股票\n  - 卖出手续\nmetadata:\n  openclaw:\n    requires:\n      bins: [python3]\n      pypi: [akshare]\n    tags: [ledger, budget, personal-finance, accounting, csv, natural-language, zh, 记账, 记一笔, 账本, 流水账, 消费记录, 支出管理, 个人理财, 个人财务, 资产管理, 投资, 投资记账, 持仓, 股票, 基金, ETF, 月度报告, 消费分析, 预算管理, 预算规划, 攒钱目标, 财务目标, 收支记录, 账户余额, 查账]\n    permissions:\n      file:\n        read: [\"~/.openclaw/workspace/data/ledger/**\"]\n        write: [\"~/.openclaw/workspace/data/ledger/**\"]\n      network:\n        domains: [\"*.sina.com.cn\", \"*.eastmoney.com\", \"*.akshare.xyz\"]\n      exec:\n        scripts: [\"scripts/*.py\"]\n---\n\n## 概述\n\n面向普通人的自然语言记账工具。用户只需说\"今天吃饭花了50块\"，即可自动生成 CSV 格式账本条目。**原创 CSV 格式**，无需安装数据库，一个 CSV 文件搞定一切。\n\n## 专业标准（Professional Standards）\n\n### 免责声明\n\n本 Skill 提供**财务记录和基础分析工具**，不是投资顾问服务。\n\n| 可以做 | 不可以做 |\n|--------|----------|\n| 帮你记录和分析消费数据 | 推荐具体理财产品 |\n| 对比你的支出和通用基准 | 保证任何投资收益 |\n| 基于你的数据给出节省建议 | 预测市场走势 |\n| 解释财务概念（复利、通胀等） | 提供税务筹划方案 |\n| 帮你制定储蓄计划 | 做资产配置方案 |\n\n**底线原则：** 我帮你搞清楚「钱去哪了」，不帮你决定「钱该去哪」。\n\n## 🔒 安全与权限声明\n\n本 Skill 会进行以下操作，请在使用前了解：\n\n| 操作类型 | 具体行为 | 数据范围 |\n|----------|----------|----------|\n| 📖 读取文件 | 读取账本 CSV、预算 JSON、投资 CSV、目标 JSON | 仅 `data/` 目录下的财务数据 |\n| ✏️ 写入文件 | 追加/修改账本条目、预算配置、投资记录、目标数据 | 仅 `data/` 目录下的财务数据 |\n| 🗑️ 删除数据 | 删除交易记录、预算条目、财务目标（均需用户确认） | 仅 `data/` 目录下的财务数据 |\n| 🌐 网络访问 | 通过 akshare 查询证券/基金代码 + 实时行情（新浪接口） | 仅发送证券代码/名称，不发送任何个人财务数据 |\n| 💻 执行脚本 | 运行 `scripts/` 目录下的 Python 脚本 | 仅本 Skill 自身脚本 |\n\n**数据隔离：** 投资记录（investments.csv）和日常账本（default.csv）完全独立，不互相影响。\n\n**不会做的事：**\n- ❌ 不会读取 MEMORY.md、USER.md、SOUL.md 等非财务文件\n- ❌ 不会访问 ~/.ssh、~/.aws、~/.config 等系统目录\n- ❌ 不会向任何外部服务器发送你的财务数据\n- ❌ 不会修改系统文件或执行外部命令\n\n**数据提醒：** 所有操作直接修改本地 CSV/JSON 文件。建议定期备份 `data/` 目录。\n\n## 账本格式（CSV）\n\n本 Skill 使用**完全原创的 CSV 格式**，简单直观。\n\n```\n# 日期,类型,金额,分类,描述,账户\n余额,微信钱包,1000.00\n余额,支付宝,2000.00\n余额,银行卡,50000.00\n余额,现金,500.00\n2026-05-21,支出,50,餐饮,午餐,微信钱包\n2026-05-22,收入,8000,工资,5月工资,银行卡\n2026-05-23,支出,299,购物,外套,支付宝\n```\n\n格式规则：\n- 6 个字段：`日期,类型,金额,分类,描述,账户`\n- 类型只能是 `收入` 或 `支出`\n- 金额填正数（系统通过类型字段判断方向）\n- 账户用扁平中文名，无需层级路径\n- 初始余额用 `余额,账户,金额` 格式\n\n## 默认位置\n\n`~/.openclaw/workspace/data/ledger/default.csv`\n\n## 触发条件\n\n> ⚠️ **网络说明：** 投资功能（代码查询 + 实时行情）需联网，使用 akshare 新浪接口，其他功能均为纯本地操作。\n\n当用户**明确表达以下财务意图**时激活本 Skill：\n\n- 记一笔账（\"记一笔：花了XX\"、\"帮我记账\"、\"记到账本里\"）\n- 查询消费（\"这个月花了多少\"、\"上个月餐饮多少钱\"、\"查账\"、\"账单\"）\n- 账户管理（\"我的余额\"、\"银行卡还有多少\"）\n- 月度报告（\"月度报告\"、\"这个月花销总结\"、\"消费分析\"）\n- 投资操作（\"买入XX股\"、\"买了XX基金\"、\"卖了XX\"、\"查持仓\"、\"投资收益\"） — ⚠️ 联网\n- 预算管理（\"设定预算\"、\"预算多少\"、\"超支了吗\"、\"生成预算模板\"）\n- 财务目标（\"建个攒钱目标\"、\"旅行基金\"、\"目标进度\"）\n\n**不会激活的场景（严格排除）：**\n- 纯闲聊提及金额（\"那顿饭花了50，味道一般\"）\n- 询问价格/费用但不涉及记账（\"这个多少钱\"、\"iPhone 17 多少钱\"）\n- 不含财务意图的一般对话（\"最近花了不少钱\" 作为感慨）\n- 他人提及的消费（非用户自己的记账）\n\n> ⚠️ **消歧规则：** 如果用户只是在闲聊中提及消费（如\"昨天吃饭花了50，味道一般\"），并非明确要求记账，应视为日常对话，**不应激活本 Skill**。判断依据：用户是否有**记录、管理、查询财务**的明确意图。\n\n## 核心能力\n\n### 1. 📝 自然语言记账\n\n**输入示例：**\n- \"今天中午吃饭花了50块\"\n- \"昨天打车花了23.5\"\n- \"工资到账8000\"\n- \"充话费30\"\n- \"买了一件外套299，用支付宝付的\"\n- \"给小王转了200\"\n\n**处理流程：**\n1. 使用 LLM 从用户输入中提取：日期、金额、分类、描述、账户\n2. 调用 `scripts/parse_entry.py` 格式化为标准 CSV 行\n3. 追加写入账本 CSV 文件\n\n**AI 解析规则：**\n\n| 字段 | 说明 | 默认值 |\n|------|------|--------|\n| `date` | 日期（\"今天\"、\"昨天\"、\"上周三\"等） | 当天 |\n| `amount` | 金额（支持小数） | 必填 |\n| `category` | 消费分类 | 自动推断 |\n| `description` | 摘要描述 | 提取关键信息 |\n| `account` | 支付账户 | 默认微信钱包 |\n\n**分类自动映射规则：**\n\n| 关键词（部分列举） | 分类 |\n|--------|------|\n| 吃饭、午餐、晚餐、早餐、早饭、午饭、晚饭、夜宵、外卖、火锅、烧烤、麻辣烫、冒菜、米线、黄焖鸡、小龙虾、面、米饭、粥、炒菜、快餐、零食、奶茶、咖啡、饮料、水果、甜品、蛋糕、面包、酸奶、牛奶、矿泉水、零食、口香糖、肯德鸡、KFC、麦当劳、汉堡王、星巴克、瑞幸、蜜雪冰城、霸王茶姬、喜茶、一点点、便利店、食堂、团购、秒杀、满减 | 餐饮 |\n| 打车、滴滴、快车、专车、出租车、地铁、公交、巴士、大巴、加油、充电、停车、过路费、高速费、火车票、高铁、飞机票、机票、船票、共享单车、电瓶车、摩的、轮渡、顺风车、拼车、通勤、出行、交通、车费、路况、违章 | 交通 |\n| 租房、房租、房租押金、水电费、电费、水费、燃气费、物业费、网费、宽带费、手机套餐、话费、充值、流量、居住、住房、宿舍、维修、家电维修、管道疏通、开锁、搬家、家政、保洁、住宿费、押金、民宿、酒店、宾馆 | 居住 |\n| 电影、电视剧、会员、视频会员、音乐会员、体育会员、KTV、唱歌、酒吧、夜店、喝酒、演出、演唱会、话剧、音乐会、脱口秀、展览、博物馆、景点、门票、旅游、团建、旅行、酒店预订、健身、游泳、瑜伽、体育运动、羽毛球、篮球、足球、跑步、骑行、游戏、steam、PS5、Switch、游戏皮肤、手游氪金、剧本杀、密室逃脱、棋牌、桌游 | 娱乐 |\n| 淘宝、京东、拼多多、唯品会、得物、咸鱼、网购、超市、便利店、沃尔玛、大润发、永辉、盒马、衣服、裤子、裙子、上衣、外套、衬衫、T恤、鞋子、球鞋、运动鞋、包包、背包、行李箱、帽子、围巾、手套、眼镜、墨镜、化妆品、护肤品、彩妆、口红、香水、面霜、面膜、洗面奶、牙膏、洗发水、沐浴露、纸巾、洗衣液、洗衣粉、厨房用品、家居用品、收纳、收纳盒、拖把、抹布、垃圾桶、床上用品、被子、枕头、四件套、窗帘、地毯、摆件、装饰画、小家电、电饭煲、烧水壶、电风扇、加湿器、空气净化器、数码、手机、电脑、平板、耳机、充电宝、数据线、手机壳、钢化膜、Kindle、相机、镜头、存储卡、电池 | 购物 |\n| 话费、充值、流量、手机费、电话费、固话、宽带、座机 | 通讯 |\n| 看病、挂号、门诊、急诊、体检、医药费、药费、买药、处方、住院、手术、检查、化验、B超、心电图、牙科、眼科、皮肤科、妇科、儿科、中医、疫苗、核酸检测、医保卡、医疗险、看病、验血、血常规、输液、理疗、康复、医保、药房、药店、阿里健康 | 医疗 |\n| 课程、学费、培训班、考试报名、教材、书籍、Kindle买书、网课、慕课、极客时间、得到、知乎、网易云课堂、腾讯课堂、有道精品课、学而思、新东方、沪江、CFA、CPA、教师资格证、驾照、学车、学钢琴、学画画、留学、留学中介、语言班、夏令营、研学 | 教育 |\n| 红包、礼物、礼金、请客、请吃饭、聚餐、聚会、应酬、随份子、份子钱、结婚礼金、生日礼物、节日礼物、人情往来、人情债、给钱、转账、送礼、压岁钱、年终礼物、伴手礼、纪念品 | 社交 |\n| 工资、薪资、薪水、底薪、奖金、年终奖、绩效、提成、加班费、补贴、报销、佣金、稿费、兼职费、外快、副业收入、自由职业收入 | 工资 |\n| 理财、利息、存款利息、基金分红、股票分红、股息、债券利息、理财产品收益、P2P收益、房租收入、版税、知识产权费、专利费、分成 | 理财收益 |\n\n**账户自动映射规则：**\n\n| 关键词 | 账户 |\n|--------|------|\n| 微信、微信支付、零钱 | 微信钱包 |\n| 支付宝、花呗 | 支付宝 |\n| 银行卡、银行 | 银行卡 |\n| 现金 | 现金 |\n| 无关键词 | 微信钱包（默认）|\n\n### 2. 📊 消费查询\n\n**支持查询方式：**\n- 按时间：\"这个月花了多少\"、\"上周支出\"、\"2025年3月\"\n- 按分类：\"餐饮花了多少\"、\"交通费用\"\n- 组合：\"这个月餐饮花了多少\"\n- 全部列表：\"最近的账单\"、\"最近10笔\"\n\n**处理方式：** Agent 读取账本 CSV，按条件筛选并计算汇总。\n\n**输出格式：**\n```\n📊 查询结果：2026年5月 餐饮支出\n\n日期        金额      描述\n2026-05-01  ¥50.00   午餐\n2026-05-03  ¥128.00  火锅\n2026-05-05  ¥15.00   早餐\n2026-05-05  ¥45.00   午饭\n─────────────────────────\n合计        ¥238.00\n```\n\n### 3. 💰 账户余额管理\n\n**支持操作：**\n- 查看余额：\"微信钱包还有多少\"、\"各账户余额\"\n- 设置初始余额：\"微信钱包初始余额1000\"\n- 调整余额：\"银行卡余额修正为5000\"\n\n**余额计算方式：** 初始余额 + 收入合计 - 支出合计\n\nAgent 读取账本 CSV，找到该账户的余额行和所有相关交易，自动计算当前余额。\n\n### 4. 📐 预算管理\n\n**支持操作：**\n- **设定预算**：`python budget.py <账本.csv> --set 餐饮 2000`\n- **查看进度**：`python budget.py <账本.csv> --progress 2026-05`\n- **超支预警**：`python budget.py <账本.csv> --alert 2026-05`\n- **生成模板**：`python budget.py <账本.csv> --template 15000`\n- **列出预算**：`python budget.py <账本.csv> --list`\n- **删除预算**：`python budget.py <账本.csv> --remove 餐饮`\n\n**命令参考：**\n```bash\n# 设定预算\npython budget.py ./default.csv --set 餐饮 2000\n\n# 查看所有预算\npython budget.py ./default.csv --list\n\n# 查看执行进度\npython budget.py ./default.csv --progress 2026-05\n\n# 超支预警\npython budget.py ./default.csv --alert 2026-05\n\n# 生成预算模板（50/30/20法则，基于月收入）\npython budget.py ./default.csv --template 15000\n\n# 自定义比例模板\npython budget.py ./default.csv --template 15000 --ratio 40 30 20 10\n\n# 移除预算\npython budget.py ./default.csv --remove 餐饮\n```\n\n**预算指南：** 详见 `references/budget_guide.md`\n\n### 5. 📈 月度报告\n\n**触发方式：** \"月度报告\"、\"5月消费分析\"、\"这个月总结\"\n\n**命令：**\n```bash\npython generate_report.py ./default.csv --month 2026-05\npython generate_report.py ./default.csv --month 2026-05 --output report.txt\n```\n\n**报告内容：**\n1. 收支概览（总收入、总支出、净结余）\n2. 分类支出排行（文字图表）\n3. 日均消费\n4. 最大单笔支出\n5. 与上月环比对比\n6. 简短消费建议\n\n**输出示例：**\n```\n📈 2026年5月 月度报告\n\n━━━ 收支概览 ━━━\n收入：¥8,500.00\n支出：¥4,230.50\n结余：¥4,269.50\n\n━━━ 支出分类 TOP 5 ━━━\n████████████ 餐饮    ¥1,280.00  (30.3%)\n██████       购物    ¥890.00    (21.0%)\n████         交通    ¥620.50    (14.7%)\n███          娱乐    ¥480.00    (11.3%)\n██           居住    ¥450.00    (10.6%)\n其他                   ¥510.00    (12.1%)\n\n日均消费：¥201.45\n最大单笔：¥299.00（购物-外套）\n```\n\n### 6. 📍 财务目标\n\n**触发方式：**\n- \"我要攒钱旅行\"、\"建一个应急基金目标\"\n- \"目标进度怎么样\"、\"旅行基金存了多少\"\n- \"列出我的财务目标\"\n\n**命令参考：**\n\n| 指令 | 示例 | 脚本调用 |\n|------|------|----------|\n| 创建目标 | \"建一个旅行基金目标，10000块，年底前\" | `goal.py create \"旅行基金\" 10000 2026-12-31` |\n| 存入金额 | \"给旅行基金存2000\" | `goal.py deposit \"旅行基金\" 2000` |\n| 查看进度 | \"旅行基金进度\" | `goal.py progress \"旅行基金\"` |\n| 列出所有 | \"我的财务目标\" | `goal.py list` |\n| 删除目标（⚠️需确认） | \"删掉旅行基金目标\" | `goal.py delete \"旅行基金\"` — ⚠️ **永久删除，不可恢复！操作前会要求输入「删除」二字确认** |\n\n> ⚠️ **删除警告：** 删除财务目标不可恢复，操作前会要求二次确认。建议删除前先查看目标详情。\n\n**详细指南：** 参见 `references/goal_guide.md`\n\n### 7. 📈 投资跟踪\n\n**触发方式：** \"买入XX股\"、\"买了XX基金\"、\"卖了XX\"、\"查持仓\"、\"投资收益\"\n\n**新用户买入流程（名称优先，无需记忆代码）：**\n\n当用户说\"买入XX股/基金\"但没说代码时，系统会：\n1. 先说明将联网搜索代码（需用户允许；仅发送证券名称/代码，不发送账本数据）\n2. 搜到唯一结果 → 显示交易摘要并要求交互式 Y/N 确认，确认后才写入 ✅\n3. 搜到多个候选 → 列出选项，让用户明确选择代码，再显示交易摘要并确认\n4. 搜不到 → 提示用户提供代码\n\n> ⚠️ **写入规则：** 投资买入/卖出会持久化写入 `investments.csv`，必须在交互式终端完成 Y/N 确认；非交互环境不会写入。\n\n**交互示例：**\n\n```\n用户: 买入有色金属ETF南方，3100股，2.07元\nAgent: 🔍 将联网查询「有色金属ETF南方」的代码...\n      ✅ 找到代码：有色金属ETF南方（512400）<基金>\n      📋 买入确认：\n         📅 2026-01-10\n         📊 有色金属ETF南方 (512400)\n         🔢 3100.0股 × ¥2.07 = ¥6,412.66\n         💳 银行卡\n      请在终端输入 Y/N 确认；确认后才写入 investments.csv\n\n用户: 买入沪深300ETF，100股，3.5元\nAgent: 🔍 正在联网查询「沪深300ETF」的代码...\n      ⚠️  找到 10 个候选，请手动确认代码：\n         1. 华夏沪深300ETF联接A（000051）<基金> ← 推荐\n         2. 国寿安保沪深300ETF联接A（000613）<基金>\n         ...\n      请用 --buy \"沪深300ETF\" <代码> <数量> <单价> <日期> 重新输入\n\n用户: 买入贵州茅台，10股，1600元\nAgent: 🔍 将联网查询「贵州茅台」的代码...\n      ✅ 找到代码：贵州茅台（600519）<股票>\n      📋 显示买入确认，等待用户输入 Y/N 后才写入...\n```\n\n**命令参考：**\n\n| 指令 | 示例 | 脚本调用 |\n|------|------|----------|\n| 记录买入（自动查代码） | \"买入有色金属ETF南方，3100股\" | `invest.py --buy \"有色金属ETF南方\" auto 3100 2.07 2026-01-10 --allow-network`（需 Y/N 确认） |\n| 记录买入（手动代码） | \"买入沪深300ETF，100股\" | `invest.py --buy \"沪深300ETF\" 510050 100 3.50 2026-01-15`（需 Y/N 确认） |\n| 记录卖出 | \"卖了500股沪深300ETF，4块\" | `invest.py --sell \"沪深300ETF\" 510050 500 4.00 2026-03-01`（需 Y/N 确认） |\n| 持仓联网刷新 | \"刷新持仓行情\" | `invest.py --refresh --allow-network` |\n| 查询实时行情 | \"工业富联现在多少\" | `invest.py --quote 601138 --allow-network` |\n| 查询持仓（自动联网） | \"查持仓\"（已开启自动刷新） | `invest.py --portfolio --auto-refresh` |\n| 汇总收益（自动联网） | \"投资收益\"（已开启自动刷新） | `invest.py --summary --auto-refresh` |\n| 设置价格 | \"沪深300ETF现在3.62\" | `invest.py --price 510050 3.62` |\n| 修改成本价 | \"把工业富联成本改成66.589\" | `invest.py --cost 601138 66.589` |\n| 持仓概览 | \"看看我的持仓\" | `invest.py --portfolio` |\n| 单只收益 | \"沪深300ETF赚了多少\" | `invest.py --return 510050` |\n| 汇总收益 | \"投资总体情况\" | `invest.py --summary` |\n| 交易记录 | \"看看交易记录\" | `invest.py --list` |\n\n**详细指南：** 参见 `references/invest_guide.md`\n\n---\n\n## 首次使用初始化\n\n当用户首次触发记账时，Agent 应：\n\n1. 检查账本文件是否存在\n2. 不存在则创建，写入模板头部\n3. 询问用户常用支付方式和初始余额\n\n**初始化模板：**\n```\n# 日期,类型,金额,分类,描述,账户\n# 个人账本 - 创建于 YYYY-MM-DD\n# 格式说明见 references/ledger_format.md\n\n# 账户初始余额\n余额,微信钱包,0.00\n余额,支付宝,0.00\n余额,银行卡,0.00\n余额,现金,0.00\n\n# === 交易记录 ===\n```\n\n## 交互模式\n\n### 单行记账（最常用）\n\n```\n用户: 今天中午吃了碗面花了25\nAgent: 已记录 ✅\n      📅 2026-05-21\n      💰 ¥25.00\n      📂 餐饮\n      💳 微信钱包\n      📝 午餐\n\n      微信钱包余额：¥975.00\n```\n\n### 对话记账（多字段补全）\n\n```\n用户: 花了200块\nAgent: 买的什么？\n\n用户: 买了本书\nAgent: 已记录 ✅\n      📅 2026-05-21\n      💰 ¥200.00\n      📂 教育\n      💳 微信钱包\n      📝 书籍\n\n      微信钱包余额：¥775.00\n```\n\n### 目标记账\n\n当用户提到给某个目标存钱时，同时完成两步：\n1. 调用 `goal.py deposit` 更新目标进度\n2. 按常规记账流程记录这笔支出/转账\n\n### 批量记账\n\n```\n用户: 今天花了：早餐15、打车30、午饭45\nAgent: 已记录 3 笔 ✅\n      1. 餐饮  ¥15.00  早餐\n      2. 交通  ¥30.00  打车\n      3. 餐饮  ¥45.00  午饭\n      合计：¥90.00\n```\n\n### 修改/删除\n\n> ⚠️ 所有删除操作会要求用户确认（Y/N），不会直接删除。\n\n- **删除最近一笔**（需确认）：\"删掉刚那笔\"\n- **删除指定笔**（需确认）：\"删除5月15日那笔餐饮\"\n- **修改金额**（需确认）：\"把刚才那笔改成30块\"\n\n## 工作流总结\n\n```\n用户输入\n  │\n  ├─ 记账意图 → 解析字段 → 生成CSV行 → 追加写入 → 确认反馈\n  │\n  ├─ 查询意图 → 读取CSV → 筛选过滤 → 计算汇总 → 格式化输出\n  │\n  ├─ 余额意图 → 读取CSV → 找余额行 → 累计收支 → 计算余额\n  │\n  ├─ 报告意图 → 读取CSV → 按月统计 → 分类排行 → 生成报告\n  │\n  ├─ 投资意图 → 写入 investments.csv / 查询持仓\n  │\n  ├─ 目标意图 → goals.json CRUD\n  │\n  └─ 预算意图 → budget.py → .budget.json\n```\n\n## 🌐 联网行为配置\n\n> ⚠️ **网络说明：** 投资功能（证券代码查询 + 实时行情）需联网，使用 akshare 库调用新浪财经公开行情 API。其他所有功能均为纯本地操作，**不会将你的财务数据上传到任何外部服务器**。\n>\n> 🔒 **隐私提示：** 联网查询时，仅发送证券代码或名称到新浪/东方财富等公开行情接口，**不发送任何个人财务数据（余额、交易记录、账户信息等）**。但这些查询本身会向第三方透露你感兴趣的证券品种，请知悉。\n>\n> ⚠️ **数据隔离说明：** 投资记录（investments.csv）和日常账本（default.csv）是两个独立文件，互不干扰。投资交易仅写入 investments.csv。\n\n**默认行为：离线查询。**\n\n本 skill 的联网功能采用**显式 opt-in** 机制——联网行为不会默认开启，需要用户主动允许。好处是你完全掌控什么时候联网、什么时候离线。\n\n**联网操作一览：**\n\n| 操作 | 默认行为 | 如何开启联网 |\n|------|---------|------------|\n| 查询持仓（--portfolio） | 离线，用手动设置的价格计算 | 加 --auto-refresh |\n| 汇总收益（--summary） | 离线，用手动设置的价格计算 | 加 --auto-refresh |\n| 刷新行情（--refresh） | 禁止联网 | 加 --allow-network |\n| 查询单只行情（--quote） | 禁止联网 | 加 --allow-network |\n| 买入时自动查代码 | 禁止联网 | 加 --allow-network |\n\n**用户可选：开启自动联网刷新**\n\n如果你希望每次查询持仓或收益时都自动联网获取最新行情，无需每次手动加参数，有两种方式：\n\n**方式一：告诉 agent「开启自动联网」**\n\n直接对我说：「开启自动联网刷新行情」\n\n我会在 investments.csv 所在目录创建一个 `.env` 配置文件，将 `AUTO_REFRESH=1` 写入。以后你只要说「查持仓」「投资收益」等，agent 就会自动联网获取实时价格。\n\n**方式二：手动创建配置文件**\n\n```bash\necho \"AUTO_REFRESH=1\" > ~/.openclaw/workspace/data/ledger/.env\n```\n\n**关闭自动联网：**\n\n```bash\nrm ~/.openclaw/workspace/data/ledger/.env\n```\n\n或直接告诉 agent「关闭自动联网刷新」\n\n**关于手动更新价格（不联网）：**\n\n你也可以完全不联网，手动更新持仓价格：\n\n- 「工业富联现在81.58」\n- 「亨通光电价格91.43」\n\n我会通过 `invest.py --price <代码> <价格>` 将其写入 `investments.csv` 的现价列，以后查询持仓时用你设置的价格计算收益。两种方式（联网自动刷新 vs 手动更新）任选其一，互不冲突。\n\n## 参考文档\n\n按需加载：\n\n- **`references/ledger_format.md`**：账本 CSV 格式详细说明\n- **`references/budget_guide.md`**：预算管理功能指南\n- **`references/goal_guide.md`**：财务目标功能指南\n- **`references/invest_guide.md`**：投资跟踪功能指南\n- **`references/user_guide.md`**：用户操作 FAQ\n- **`references/financial_benchmarks.md`**：财务健康基准数据\n- **`references/education.md`**：财务知识科普\n\n## 语气风格（Tone and Approach）\n\n| 场景 | 风格 |\n|------|------|\n| 记账成功 | 简洁确认 + 关键信息 \"已记录 ✅ 餐饮 ¥35 余额 ¥965\" |\n| 月度报告 | 数据清晰 + 一两句建议 |\n| 用户花了太多 | 委婉提醒，不是批评 |\n| 用户攒到了钱 | 真诚鼓励 |\n| 用户问投资建议 | 给教育内容 + 免责 |\n\n**语气忌讳：** 说教口吻、用数字羞辱、过度谨慎、假装亲密。\n\n## 约束\n\n1. **写删分离。** 删除操作（交易记录、预算条目、财务目标）需用户明确要求，且操作前必须二次确认（Y/N），不会自动删除任何数据。\n2. **金额必填。** 无法确认金额时，追问。\n3. **分类可猜。** 有把握时自动分类，不确定时给选项。\n4. **日期可省。** 默认今天，支持相对日期。\n5. **账户可省。** 默认微信钱包。\n6. **文件即数据库。** 所有数据存储在 CSV/JSON 文件中，**操作直接修改本地文件**。用户随时可用任何编辑器查看和修改。建议定期备份 `data/` 目录。\n7. **外部依赖。** 基础功能（记账、查询、预算、报告、目标）使用 Python 标准库，无需额外安装。投资功能的证券代码查询依赖 akshare 库（pip install akshare），需联网。\n\nFile v102.0.0:examples/README.md\n\n# examples/ 目录说明\n\n包含简单的示例账本，适合初次使用时参考。\n\n## 文件\n\n- `sample.csv` — 最简示例，包含几个常见交易\n\n## 使用方式\n\n```bash\ncp examples/sample.csv ~/.openclaw/workspace/data/ledger/default.csv\n```\n\n然后告诉 Agent：\"我的账本在 `~/.openclaw/workspace/data/ledger/default.csv`\"，或者直接用路径参数调用脚本。\n\nFile v102.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn7dzk85gz4pz5c569zky2pssn875nwe\",\n  \"slug\": \"simple-ledger\",\n  \"version\": \"102.0.0\",\n  \"publishedAt\": 1781572339401\n}\n\nFile v102.0.0:references/budget_guide.md\n\n# 预算管理指南\n\n## 核心概念\n\n预算帮你在花钱之前先规划好各分类可以花多少，超出时提前预警，而不是事后后悔。\n\n## 基础操作\n\n### 设定单个分类预算\n\n```bash\npython scripts/budget.py 你的账本.csv --set 餐饮 2000\npython scripts/budget.py 你的账本.csv --set 交通 800\n```\n\n### 查看所有预算\n\n```bash\npython scripts/budget.py 你的账本.csv --list\n```\n\n### 查看执行进度\n\n```bash\npython scripts/budget.py 你的账本.csv --progress 2026-05\n```\n\n### 超支预警\n\n```bash\npython scripts/budget.py 你的账本.csv --alert 2026-05\n```\n\n### 移除预算\n\n```bash\npython scripts/budget.py 你的账本.csv --remove 餐饮\n```\n\n## 预算模板\n\n### 50/30/20 法则（推荐）\n\n基于月收入自动生成分类预算：\n- 50% 必要支出（居住、餐饮、交通、通讯、医疗）\n- 30% 弹性支出（购物、娱乐、教育、社交）\n- 20% 储蓄/投资\n\n```bash\npython scripts/budget.py 你的账本.csv --template 15000\n```\n\n### 自定义比例\n\n```bash\n# 需求40% / 想要30% / 弹性20% / 其他10%\npython scripts/budget.py 你的账本.csv --template 15000 --ratio 40 30 20 10\n```\n\n## 预算判断标准\n\n| 进度 | 状态 | 建议 |\n|------|------|------|\n| < 75% | ✅ 正常 | 放心花 |\n| 75-90% | 🔸 注意 | 控制消费节奏 |\n| 90-100% | ⚠️ 快超了 | 谨慎支出 |\n| > 100% | ❌ 已超支 | 本月不要再花了 |\n\n## 实用建议\n\n1. **先有收入再定预算** — 先确认月收入，再反推支出结构\n2. **先紧后松** — 预算设低一点，实际超了比计划超了心理负担小\n3. **重点盯一项** — 同时盯 10 个分类很累，先盯最重要的 2-3 个\n4. **按月清零** — 每月重新评估预算，不建议跨月滚动\n5. **把储蓄当支出** — 每月固定往存款账户\"花\"一笔，预算才算完整\n\nFile v102.0.0:references/education.md\n\n# 财务知识科普\n\n> 不讲高深理论，只讲跟日常记账相关的基础概念。\n> 看完能理解\"为什么这么记\"，而不是死记硬背。\n\n## 1. 单式记账：为什么选单式？\n\n### 单式记账（本 Skill 采用的方式）\n\n**一句话解释：花了一笔就记一笔，像流水账。**\n\n```\n2026-05-21  微信钱包  -50.00  餐饮:饮食  午餐\n```\n\n**特点：**\n- ✅ 简单直觉：花了 50 就写 -50\n- ✅ 学习成本几乎为零\n- ✅ 适合日常\"随手记\"\n- ❌ 无法自动校验是否漏记\n- ❌ 不适合企业财务或复杂资产跟踪\n\n### 传统双行记账\n\n**一句话解释：每笔交易至少影响两个账户，有借必有贷，借贷必相等。**\n\n比如\"午餐花了 50\"：\n```\n2026-05-21 * 午餐\n  Expenses:餐饮:饮食        50.00 CNY\n  Assets:微信钱包          -50.00 CNY\n```\n\n**特点：**\n- ✅ 严谨：每笔交易都平衡，不会出现\"钱从哪来\"的漏洞\n- ✅ 强大的报表能力：自动计算资产负债表、利润表\n- ✅ 适合复杂场景（多币种、投资组合、税务）\n- ❌ 学习门槛较高\n- ❌ 日常记账\"杀鸡用牛刀\"\n\n### 为什么 personal-ledger 选单式？\n\n| 对比 | 单式记账 | 传统双行记账 |\n|------|---------|---------|\n| 记一笔午餐 | 1 行 | 3 行 |\n| 需要知道的概念 | 金额、分类 | 借方、贷方、账户类型、货币 |\n| 记错了怎么办 | 删掉重来 | 可能导致全局不平衡 |\n| 适合谁 | 想随手记钱的普通人 | 需要专业财务报表的人 |\n\n**结论：** 对于\"知道钱花哪了\"这个目标，单式记账完全够用。\n\n## 2. 资产 vs 负债 vs 净资产\n\n### 资产（你拥有的、值钱的东西）\n\n- 银行卡里的存款 ✓\n- 微信/支付宝里的钱 ✓\n- 现金 ✓\n- 你名下的房产 ✓\n- 投资账户里的基金/股票 ✓\n\n### 负债（你欠别人的）\n\n- 信用卡欠款 ✓\n- 花呗/白条 ✓\n- 房贷 ✓\n- 车贷 ✓\n- 借别人的钱 ✓\n\n### 净资产（你\"真正\"有多少）\n\n```\n净资产 = 资产 − 负债\n```\n\n**举例：**\n- 银行卡有 5 万，微信有 3 千，现金 5 百 → 资产 = 53,500\n- 信用卡欠 2 千，花呗欠 5 百 → 负债 = 2,500\n- 净资产 = 53,500 − 2,500 = **51,000**\n\n**一个容易混淆的点：**\n信用卡里的钱不算资产！信用卡额度是\"你能借多少\"，不是\"你有多少\"。\n只有你还款之后，银行卡里减少的那部分才是支出。\n\n### 在记账中怎么体现？\n\n本 Skill 的处理方式：\n- **资产类账户**：微信钱包、支付宝、银行卡、现金 → 记余额变化\n- **负债类账户**：信用卡、花呗 → 支出时记到负债账户，还款时从资产转到负债\n- **净资产**：可通过\"所有资产账户余额之和 − 所有负债账户余额之和\"计算\n\n## 3. 现金流管理基础\n\n### 什么是现金流？\n\n**现金流 = 钱进来的速度 − 钱出去的速度。**\n\n通俗地说：你每个月进账多少，出账多少，中间的差额就是现金流。\n\n### 现金流的三种状态\n\n```\n收入 > 支出  →  正向现金流 → 钱越来越多 → 健康 ✅\n收入 = 支出  →  零现金流  → 没有积累   → 需要注意 ⚠️\n收入 < 支出  →  负向现金流 → 钱越来越少 → 危险 ❌\n```\n\n### 为什么现金流比\"赚多少钱\"重要？\n\n一个人月薪 2 万但每月花 2 万 1 千 → 每个月在\"变穷\"\n一个人月薪 8 千但每月只花 5 千 → 每个月在\"变富\"\n\n**赚多少决定了上限，花多少决定了实际积累。**\n\n### 如何改善现金流？\n\n**开源（增加收入）：**\n- 提升技能涨薪（最可持续）\n- 兼职 / 副业\n- 出租闲置资源\n- 理财收益（长期）\n\n**节流（减少支出）：**\n- 记账 → 发现不该花的钱\n- 区分\"需要\"和\"想要\"\n- 找更便宜的替代方案\n- 减少冲动消费（等 24 小时再买）\n\n**本 Skill 帮你做的是\"节流\"部分：** 通过记账让你看清支出，从而做出更好的消费决策。\n\n## 4. 预算为什么重要？\n\n### 没有预算的生活\n\n```\n月初：感觉有很多钱\n月中：也没怎么花啊？\n月底：钱呢？？？\n```\n\n### 有预算的生活\n\n```\n月初：这个月餐饮预算 2000，购物预算 1000\n月中：餐饮已经花了 1500，还剩 500，控制一下外卖\n月底：餐饮 1900，达标！购物 800，省了 200\n```\n\n### 预算的本质\n\n**预算不是限制你花钱，而是让你主动选择钱花在哪。**\n\n没有预算时，钱是被\"被动消费\"花掉的（广告、冲动、习惯）。\n有预算时，你把钱分配给\"真正重要的东西\"。\n\n### 怎么开始做预算？\n\n**第一步：先记账 1–2 个月，搞清楚现状**\n（别急着做预算，你都不知道现在花多少怎么做预算？）\n\n**第二步：按分类设定月度预算上限**\n\n参考\"财务基准参考\"中的占比，结合自己的实际情况设定。\n\n**第三步：月底对比实际 vs 预算**\n\n本 Skill 的月度报告会帮你做这个对比（未来版本会支持预算功能）。\n\n### 预算的常见误区\n\n| 误区 | 正确做法 |\n|------|---------|\n| \"预算越低越好\" | 预算要现实可行，否则坚持不下来 |\n| \"所有分类都要设预算\" | 先管好 TOP 3 大头（通常是居住、餐饮、购物） |\n| \"超预算就是失败\" | 超预算是正常的，关键是知道超了多少、为什么超 |\n| \"预算一定不能变\" | 每月根据实际情况调整，预算是活的 |\n\n## 5. 应急基金的重要性\n\n### 什么是应急基金？\n\n**一笔专门用来应对突发事件的存款。** 不投资、不消费、不动它，除非真有急事。\n\n### 什么算\"急事\"？\n\n- ✅ 突然失业，需要几个月的生活费\n- ✅ 生病住院，自费部分\n- ✅ 家里突然需要大额维修\n- ✅ 必须的紧急出行\n- ❌ 手机出了新款想换\n- ❌ 朋友借钱（除非是真正的紧急情况）\n- ❌ 双十一打折\n\n### 需要多少？\n\n| 安全等级 | 金额 | 适合谁 |\n|---------|------|--------|\n| 最低保障 | 1 个月支出 | 刚开始攒钱，有个底 |\n| 基本安全 | 3 个月支出 | 大多数人的目标 |\n| 比较安心 | 6 个月支出 | 有房贷/家庭责任的人 |\n| 非常安心 | 6–12 个月支出 | 自由职业/收入不稳定 |\n\n**怎么算 1 个月的支出？**\n看你最近一个月的月度报告里的\"总支出\"数字，或者把最近 3 个月的支出平均一下。\n\n### 放在哪里？\n\n- **活期存款 / 货币基金**：随时能取，收益虽然低但安全性最高\n- ❌ 不要放股票、基金（急用钱时可能正好在亏）\n- ❌ 不要放定期（提前取会损失利息）\n\n### 怎么攒？\n\n1. 每个月发工资后，**先把应急基金的钱转出来**，剩下的才是可以花的\n2. 从小目标开始：先攒 1 个月支出，再攒 3 个月\n3. 记账帮你控制支出，省下的钱就往应急基金里存\n\n### 为什么记账跟应急基金有关？\n\n**因为记账让你知道：**\n- 你每个月实际支出多少（决定了应急基金的目标金额）\n- 你每个月能存多少（决定了多久能攒够）\n- 你的支出里哪些可以砍（加速攒钱）\n- 你的消费趋势是否在恶化（提前预警）\n\n---\n\n> **总结：** 记账是所有财务管理的第一步。你不需要懂投资、不需要懂税务，先把\"钱去哪了\"这个问题回答清楚，其他的都是后面的事。\n\nFile v102.0.0:references/financial_benchmarks.md\n\n# 个人财务基准参考\n\n> 本文档提供常见的财务健康指标，用于在月度报告中给出有意义的参考对比。\n> 所有数据为通用参考值，个人情况千差万别，仅作方向性指引，不作硬性标准。\n\n## 1. 储蓄率目标\n\n| 阶段 | 推荐储蓄率 | 说明 |\n|------|-----------|------|\n| 刚工作 / 还债期 | ≥ 10% | 先养成习惯，金额不重要 |\n| 稳定期 | 20% – 30% | 大多数理财建议的\"甜蜜点\" |\n| 财务自由追求期 | 30% – 50% | 加速积累，需要较强的消费纪律 |\n\n**怎么算：**\n```\n储蓄率 = (收入 − 支出) / 收入 × 100%\n```\n\n**月度报告中的表述示例：**\n- 储蓄率 > 30%：\"本月储蓄率 35%，超过推荐的 30% 目标，继续保持！\"\n- 储蓄率 10%–30%：\"本月储蓄率 22%，在健康范围内。如果目标是加速储蓄，可以看看餐饮和购物有没有优化空间。\"\n- 储蓄率 < 10%：\"本月储蓄率偏低（8%）。建议先排查是否有大额意外支出，后续可以尝试把目标设到 15% 起步。\"\n\n## 2. 分类支出占比参考\n\n以下为税后月收入的百分比参考，适用于中国城市普通工薪家庭：\n\n| 分类 | 健康范围 | 警戒线 | 说明 |\n|------|---------|--------|------|\n| 🏠 居住（房租/房贷+水电物业） | 20% – 30% | > 40% | 含房租、房贷、水电燃气、物业 |\n| 🍜 餐饮 | 15% – 25% | > 35% | 含一日三餐、外卖、零食饮料 |\n| 🚌 交通 | 5% – 10% | > 15% | 含通勤、打车、公共交通 |\n| 🛍️ 购物 | 5% – 15% | > 25% | 含服饰、日用品、电子产品 |\n| 🎮 娱乐 | 3% – 8% | > 15% | 含视频会员、游戏、电影、社交 |\n| 📚 教育 | 2% – 5% | > 10% | 含课程、书籍、技能培训 |\n| 🏥 医疗 | 2% – 5% | > 10% | 含体检、药品、保险（不含社保） |\n| 📱 通讯 | 1% – 3% | > 5% | 含话费、网费 |\n| 💝 社交人情 | 3% – 8% | > 15% | 含红包、礼物、请客 |\n| 💰 储蓄/投资 | 20% – 30% | < 10% | 这是\"剩下来\"的部分 |\n\n## 3. 健康财务指标速查表\n\n### 核心三问\n\n| 指标 | 健康值 | 怎么算 |\n|------|--------|--------|\n| 应急基金 | ≥ 3 个月支出 | 把最近 3 个月的月均支出 × 3 |\n| 储蓄率 | ≥ 20% | (收入 − 支出) / 收入 |\n| 负债收入比 | ≤ 35% | 月还贷总额 / 月收入 |\n\n### 进阶指标\n\n| 指标 | 说明 | 健康范围 |\n|------|------|---------|\n| 流动性比率 | 能随时拿出的钱 / 月支出 | 3 – 6 |\n| 负债资产比 | 总负债 / 总资产 | < 50% |\n| 投资占资产比 | 投资类资产 / 总资产 | 随年龄递增，25岁>10%，35岁>30% |\n| 保险覆盖率 | 年保费 / 年收入 | 5% – 10% |\n\n### 简易评分卡\n\n用以下 5 项快速评估财务健康度，每项 20 分：\n\n1. **每月有结余**（储蓄率 > 10%）— 20 分\n2. **有应急基金**（≥ 1 个月支出）— 20 分\n3. **无高息负债**（无信用卡分期、网贷）— 20 分\n4. **知道钱花在哪了**（有记账习惯）— 20 分\n5. **有储蓄/投资目标**（哪怕是模糊的）— 20 分\n\n- 80–100：财务状况良好 👍\n- 60–79：基本健康，有优化空间\n- 40–59：需要关注，建议从记账开始\n- < 40：需要行动，优先处理高息负债\n\n## 4. 中国普通家庭消费结构参考\n\n数据来源：国家统计局居民消费支出分类（2023 年大致水平），城镇居民人均年消费支出约 3 万元。\n\n| 类别 | 占比 |\n|------|------|\n| 食品烟酒 | 29% |\n| 居住 | 24% |\n| 交通通信 | 14% |\n| 教育文化娱乐 | 10% |\n| 医疗保健 | 9% |\n| 衣着 | 6% |\n| 生活用品及服务 | 5% |\n| 其他用品及服务 | 3% |\n\n**注意：** 这是全国平均水平，一二线城市居住占比会显著更高（可达 35%–40%）。\n\n## 5. 不同收入水平的通用理财建议\n\n### 月收入 < 5000 元\n- **优先目标**：建立记账习惯 + 应急基金（哪怕每月存 200 元）\n- **消费建议**：居住控制在 1500 以内，餐饮自己做为主\n- **投资建议**：先别想投资，把钱存银行活期或货币基金就行\n- **关键动作**：开始记账，知道钱去哪了\n\n### 月收入 5000 – 10000 元\n- **优先目标**：应急基金攒到 1–2 万 + 偿还高息负债\n- **消费建议**：居住 30% 以内，餐饮 25% 以内\n- **投资建议**：可以从货币基金、定期存款开始，学习理财基础知识\n- **关键动作**：让储蓄率稳定在 15% 以上\n\n### 月收入 10000 – 20000 元\n- **优先目标**：应急基金 3–6 个月 + 开始配置保险 + 建立投资组合\n- **消费建议**：居住 30% 以内，娱乐消费设预算上限\n- **投资建议**：指数基金定投（沪深300 / 中证500），每月固定比例\n- **关键动作**：建立系统性理财规划，不只是存钱\n\n### 月收入 20000 元以上\n- **优先目标**：资产配置多元化（房产/基金/债券/保险）\n- **消费建议**：避免\"生活方式膨胀\"（赚得多花得更多）\n- **投资建议**：根据风险承受能力分配资产，考虑长期规划（养老、子女教育）\n- **关键动作**：关注资产增值效率，而不仅仅是存钱速度\n\n---\n\n## 在月度报告中的使用方式\n\nAgent 在生成月度报告时，应：\n\n1. **计算用户的实际储蓄率**，与 20% 基准对比\n2. **计算各分类占收入百分比**，标注超出警戒线的项目\n3. **如果数据充足（≥ 3 个月）**，给出趋势判断（改善 / 恶化 / 稳定）\n4. **每次只提 1–2 个最值得关注的点**，不要把所有指标都列一遍\n5. **用鼓励为主的语言**，避免让用户产生焦虑\n\n**报告建议的标准模板：**\n\n```\n💡 本月财务小结\n\n储蓄率 XX%（目标 ≥20%）：[达标/偏低/优秀]\n最值得关注的支出：[分类名] 占收入 XX%，[正常/偏高/需留意]\n[一句话具体建议]\n```\n\nFile v102.0.0:references/goal_guide.md\n\n# 财务目标指南\n\n## 什么是财务目标\n\n财务目标是有截止日期和目标金额的存款计划。比如：\n- 旅行基金：¥10,000，年底前\n- 应急基金：¥30,000，1年内\n- 买车：¥50,000，3年内\n\n## 基础操作\n\n### 创建目标\n\n```bash\npython scripts/goal.py create \"旅行基金\" 10000 2026-12-31\n```\n\n### 存入金额\n\n```bash\npython scripts/goal.py deposit \"旅行基金\" 2000\n```\n\n### 查看进度\n\n```bash\npython scripts/goal.py progress \"旅行基金\"\n```\n\n### 列出所有目标\n\n```bash\npython scripts/goal.py list\n```\n\n### 删除目标\n\n```bash\npython scripts/goal.py delete \"旅行基金\"\n```\n\n## 预测逻辑\n\n系统会根据你的存款历史计算月均存款速度，判断能否按时达成：\n\n- 月均存款速度基于存款记录自动计算\n- 预测结果会在进度中显示\n- 如果速度不够，会告诉你每月需要存多少才能达标\n\n## 常见目标类型\n\n### 应急基金（优先级最高）\n\n目标金额 = 3-6 个月生活支出\n截止日期：随时开始，越早越好\n建议策略：先把紧急目标存满\n\n### 旅行基金\n\n目标金额：按目的地估算\n截止日期：出发前 1 个月\n建议：把旅行费用单独设账本，避免和生活费混在一起\n\n### 购房首付\n\n目标金额：按目标城市房价估算\n截止日期：5-10 年\n建议：用定期存款 + 基金定投组合\n\n### 养老储备\n\n目标金额：按退休后生活水平估算\n截止日期：退休前\n建议：越早开始越好，利用复利效应\n\n## 实用建议\n\n1. **一个时间只追一个目标** — 同时追 3 个目标等于没有目标\n2. **截止日期设紧一点** — 宽松的截止日期让人拖延\n3. **记录每一笔存款** — 用 `deposit` 指令，积累存款历史用于预测\n4. **达成后立即设新目标** — 不要让攒钱这件事停下来\n5. **应急基金优先于投资** — 应急金没存满之前不要投资高风险产品\n\nFile v102.0.0:references/invest_guide.md\n\n# 投资跟踪指南\n\n## 数据文件\n\n- 交易记录：`~/.openclaw/workspace/data/ledger/investments.csv`\n- 价格配置：`~/.openclaw/workspace/data/ledger/prices.json`（需 `--allow-network` 显式允许联网刷新，或手动更新）\n\n> ⚠️ 买入/卖出会持久化写入本地投资账本，必须在交互式终端输入 Y/N 确认；非交互环境不会写入。\n> 🌐 行情刷新、代码搜索、按名称查询会联网；命令必须显式添加 `--allow-network`。联网时仅发送证券代码/名称，不发送账本、余额或交易记录。\n\n## 格式说明\n\n投资账本 CSV 格式：\n```\n# 日期,类型,代码,名称,数量,@单价,金额,账户\n买入: 日期,买入,代码,名称,数量,@单价,金额,账户\n卖出: 日期,卖出,代码,名称,数量,@单价,金额,账户\n```\n\n## 基础操作\n\n### 记录买入\n\n```bash\npython scripts/invest.py --buy \"沪深300ETF\" 510050 1000 3.50 2026-01-15\n```\n\n### 记录卖出\n\n```bash\npython scripts/invest.py --sell \"沪深300ETF\" 510050 500 4.00 2026-03-01\n```\n\n### 更新当前价格\n\n```bash\npython scripts/invest.py --price 510050 3.62\n```\n\n### 显式联网刷新行情\n\n```bash\n# 联网刷新所有持仓的实时/收盘价（股票/ETF → 新浪，场外基金 → 东方财富）\npython scripts/invest.py --refresh --allow-network\n\n# 查询单只证券实时行情。按名称查询会先联网查代码。\npython scripts/invest.py --quote 600487 --allow-network\npython scripts/invest.py --quote 永赢先锋半导体 --allow-network\n```\n\n> ⚠️ 股票/ETF 使用新浪财经接口，场外基金使用东方财富净值接口。联网查询会向第三方发送证券代码/名称；不会发送个人账本数据。未加 `--allow-network` 时命令会拒绝联网。\n\n### 修改成本价\n\n```bash\npython scripts/invest.py --cost 600487 75.631\n```\n\n> 修改最近一笔买入的单价，系统自动重算总成本。\n\n### 查看持仓\n\n```bash\npython scripts/invest.py --portfolio\n```\n\n### 单只收益分析\n\n```bash\npython scripts/invest.py --return 510050\n```\n\n### 汇总收益\n\n```bash\npython scripts/invest.py --summary\n```\n\n### 查看交易记录\n\n```bash\npython scripts/invest.py --list\npython scripts/invest.py --list 510050  # 单只历史\n```\n\n### 确认机制说明\n\n```bash\npython scripts/invest.py --buy \"沪深300ETF\" 510050 100 3.50 2026-01-15\npython scripts/invest.py --sell \"沪深300ETF\" 510050 500 4.00 2026-03-01\n```\n\n> ⚠️ **所有买入/卖出操作必须经过交互式确认（Y/N），不存在跳过确认的快捷参数。**\n> 非交互环境会直接取消写入，这是为了防止 Agent 误操作或 prompt 注入导致错误的金融记录。金融操作必须有安全确认环节。\n\n> ⚠️ **数据隔离：** 投资记录仅写入 investments.csv，与日常账本（default.csv）完全独立。\n\n## 收益计算方式\n\n采用**平均成本法**（成本法）：\n- 买入时记录成本\n- 卖出时按平均成本计算已实现盈亏\n- 持仓盈亏 = 当前市值 - 持仓成本\n- 总收益 = 持仓盈亏 + 已实现盈亏\n\n## 实用建议\n\n1. **先有应急基金再投资** — 应急金没到位之前不碰高风险投资\n2. **用价格配置追踪市价** — 每次 `--buy`/`--sell` 会自动更新价格，也可以手动 `--price` 更新\n3. **定期更新价格** — 持仓盈亏需要当前价格；联网更新必须显式添加 `--allow-network`\n4. **收益跟踪** — 使用 `--summary` 查看投资总体情况\n5. **ETF 适合大多数人** — 沪深 300、中证 500、纳指 ETF 是最简单的选择\n\n## 风险提示\n\n- 投资有风险，入市需谨慎\n- 历史收益不代表未来表现\n- 本工具仅供记录，不构成投资建议\n- 大额投资决策建议咨询专业人士\n\nFile v102.0.0:references/ledger_format.md\n\n# 账本文件格式说明 (.csv)\n\n## 概述\n\n`.csv` 文件是纯文本格式，设计目标：**人类可读、易编辑、结构化**。\n\n简单直观的 CSV 格式，一看就懂。\n\n## 文件结构\n\n```\n# 注释行（以 # 开头）\n# 日期,类型,金额,分类,描述,账户\n\n[账户初始余额]\n[交易记录]\n```\n\n## 格式详解\n\n### 账户初始余额\n\n```\n余额,账户名,金额\n```\n\n示例：\n```\n余额,微信钱包,1000.00\n余额,支付宝,2000.00\n余额,银行卡,50000.00\n余额,现金,500.00\n```\n\n规则：\n- 每个账户最多一行余额记录\n- 余额行以 `余额,` 开头，后面是账户名和金额\n- 后续交易会增减这个余额\n\n### 交易记录\n\n格式：`日期,类型,金额,分类,描述,账户`\n\n示例：\n```\n2026-05-21,支出,50.00,餐饮,午餐,微信钱包\n2026-05-21,支出,299.00,购物,外套,支付宝\n2026-05-01,收入,15000.00,工资,5月工资,银行卡\n```\n\n字段说明：\n- **日期**：YYYY-MM-DD，必填，如 `2026-05-21`\n- **类型**：只能是 `收入` 或 `支出`，必填\n- **金额**：正数，必填，如 `50.00`（支出时填正数，系统自动识别为支出方向）\n- **分类**：一级分类名，必填，如 `餐饮`、`交通`、`购物`、`居住`、`娱乐`、`通讯`、`医疗`、`教育`、`社交`、`其他`\n- **描述**：简短说明，可选\n- **账户**：支付/收款账户，必填，默认 `微信钱包`\n\n### 注释行\n\n```\n# 这是注释行\n# 日期,类型,金额,分类,描述,账户\n```\n\n### 空行\n\n空行会被自动忽略，用于分隔不同逻辑块。\n\n## 完整示例\n\n```\n# 日期,类型,金额,分类,描述,账户\n# === 账户初始余额 ===\n余额,微信钱包,1000.00\n余额,支付宝,2000.00\n余额,银行卡,50000.00\n余额,现金,500.00\n\n# === 2026年5月 ===\n2026-05-01,收入,15000.00,工资,5月工资,银行卡\n2026-05-01,支出,35.00,餐饮,午餐外卖,微信钱包\n2026-05-02,支出,128.00,餐饮,火锅,支付宝\n2026-05-03,支出,23.50,交通,打车上班,微信钱包\n2026-05-05,支出,1200.00,居住,5月房租,银行卡\n2026-05-05,支出,15.00,餐饮,早餐,微信钱包\n2026-05-05,支出,45.00,餐饮,午餐,微信钱包\n2026-05-10,支出,299.00,购物,外套,支付宝\n2026-05-12,支出,30.00,通讯,充话费,微信钱包\n2026-05-15,支出,80.00,娱乐,电影+零食,银行卡\n2026-05-15,支出,50.00,社交,生日红包,现金\n```\n\n## 余额计算\n\n某账户当前余额 = 初始余额 + 收入合计 - 支出合计\n\n示例（微信钱包）：\n```\n余额  +1000.00\n  +35.00（午餐）\n  -23.50（打车）\n  -15.00（早餐）\n  -45.00（午餐）\n  -30.00（话费）\n─────────────\n= 921.50\n```\n\n## 分类系统\n\n| 分类 | 说明 |\n|------|------|\n| 餐饮 | 吃饭、外卖、奶茶、咖啡、零食等 |\n| 交通 | 打车、地铁、公交、加油、高铁等 |\n| 购物 | 衣服、数码、日用品、超市等 |\n| 居住 | 房租、水电、物业、网费、燃气等 |\n| 娱乐 | 电影、游戏、KTV、旅游等 |\n| 通讯 | 话费、流量、手机套餐等 |\n| 医疗 | 看病、买药、体检等 |\n| 教育 | 课程、书籍、考试等 |\n| 社交 | 红包、礼物、请客等 |\n| 其他 | 无法归类的支出 |\n\n收入分类：工资、奖金、理财收益、兼职、报销退款、其他\n\n## 与旧版 .ledger 格式的区别\n\n| 特性 | 新 CSV 格式 | 传统双行格式 |\n|------|------------|------------------|\n| 文件扩展名 | `.csv` | `.ledger` |\n| 账户格式 | 扁平中文名 | 层级路径（如 `Assets:银行`）|\n| 记账方式 | 单边记账（一行一笔）| 双行格式（借贷两条线）|\n| 金额方向 | 类型字段区分 | 正负号区分 |\n| 学习成本 | 极低 | 中等 |\n| 语法要求 | 宽松（CSV格式）| 严格（指令+posting）|\n| 适用场景 | 个人随手记 | 传统双行记账 |\n\nFile v102.0.0:references/user_guide.md\n\n# 用户指南\n\n## 快速开始\n\n### 1. 创建账本\n\n首次使用时，Agent 会帮你创建账本文件。只需告诉 Agent：\n- 你常用的支付账户（如微信钱包、支付宝、银行卡）\n- 各账户的当前余额\n\n或者从示例账本开始：\n```bash\ncp data/example.csv ~/.openclaw/workspace/data/ledger/default.csv\n```\n\n### 2. 开始记账\n\n最简单的方式，直接说话：\n\n```\n今天中午吃饭花了50块\n昨天打车35\n工资到账8000\n买了一件外套299，用支付宝付的\n```\n\nAgent 会自动解析并写入账本。\n\n> ⚠️ **注意：** 所有写入操作（记账、修改、删除）都是**持久化、直接修改本地文件**的，不可自动撤销。\n> 建议定期备份 `~/.openclaw/workspace/data/ledger/` 目录。\n\n### 3. 查询消费\n\n```\n这个月花了多少？\n上个月餐饮多少钱？\n查一下我的余额\n```\n\n### 4. 生成月度报告\n\n```\n给我做个5月的月度报告\n```\n\n## FAQ\n\n**Q: 账本存在哪里？**\nA: 默认 `~/.openclaw/workspace/data/ledger/default.csv`，可以用任何文本编辑器打开。\n\n**Q: 分类不准怎么办？**\nA: 可以手动指定：`花了50，分类是餐饮`。Agent 会记住你的偏好。\n\n**Q: 记账错了怎么改？**\nA: 直接告诉 Agent：「删掉5月15日那笔餐饮」或「把刚才那笔改成30块」。\n\n**Q: 需要网络吗？**\nA: 不需要。所有功能都基于本地文件，纯 Python 标准库，无网络依赖。\n\n**Q: 数据安全吗？**\nA: 数据存在你本地的文件里，没有任何外部服务。你可以随时备份、移动或加密。\n\n**Q: 支持多账户吗？**\nA: 支持。微信钱包、支付宝、银行卡、现金等都可以记录，也可以互相转账。\n\n**Q: 可以导出数据吗？**\nA: 直接用文本编辑器打开 CSV 文件即可，格式是标准 CSV，任何表格软件都能打开。\n\n## 分类推荐\n\n建议保持简单，优先用一级分类：\n- 餐饮、交通、购物、居住、娱乐、通讯、医疗、教育、社交、其他\n- 收入用：工资、奖金、理财收益、兼职、其他\n\n分类太细会增加记录负担，失去随手记的意义。\n\nFile v102.0.0:skill-card.md\n\n## Description: <br>\nLedger assistant: a simple expense tracker for daily spending. Log expenses, check balances, track budgets, and manage investments. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[tsag1](https://clawhub.ai/user/tsag1) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nExternal users use this skill to maintain a local personal-finance ledger, track budgets and goals, and monitor investment records with optional market-data refreshes. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill directly changes local personal-finance CSV/JSON files. <br>\nMitigation: Back up the ledger directory before use, review proposed changes, and require confirmation for destructive or investment write operations. <br>\nRisk: Optional market-data refreshes can reveal queried securities to third-party market-data providers. <br>\nMitigation: Enable network-backed quote refresh only when that disclosure is acceptable; routine ledger, budget, and report tasks can remain local. <br>\nRisk: Financial summaries and investment calculations may be incomplete or unsuitable as financial advice. <br>\nMitigation: Use outputs for recordkeeping and basic analysis, and verify calculations before making financial decisions. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/tsag1/simple-ledger) <br>\n- [User guide](references/user_guide.md) <br>\n- [Ledger format](references/ledger_format.md) <br>\n- [Budget guide](references/budget_guide.md) <br>\n- [Investment guide](references/invest_guide.md) <br>\n- [Financial benchmarks](references/financial_benchmarks.md) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Text, Markdown, Shell commands, Configuration, Files, Guidance] <br>\n**Output Format:** [Markdown or plain text with optional shell command examples and local CSV/JSON file updates] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [May modify local ledger, budget, goal, and investment files under the user's ledger data directory; market-data refresh is opt-in.] <br>\n\n## Skill Version(s): <br>\n102.0.0 (source: server release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nFile v102.0.0:tests/results/v2_report.md\n\n# 个人记账 Skill - 测试报告 v2（CSV格式）\n\n**生成时间**: 2026-06-16 08:55:02\n**测试用例**: 28 条\n**通过**: 28 | **失败**: 0\n**通过率**: 100.0%\n\n## 概述\n\n| 类别 | 通过 | 失败 | 合计 | 通过率 |\n|------|------|------|------|--------|\n| 自然语言解析 | 10 | 0 | 10 | 100.0% |\n| 格式验证 | 5 | 0 | 5 | 100.0% |\n| 查询功能 | 8 | 0 | 8 | 100.0% |\n| 报告生成 | 5 | 0 | 5 | 100.0% |\n| **总计** | **28** | **0** | **28** | **100.0%** |\n\n## 失败用例\n无\n\n## 全部用例结果\n\n| ID | 类别 | 描述 | 结果 | 详情 |\n|----|------|------|------|------|\n| NLP-001 | 自然语言解析 | 今天中午吃饭花了50块 | ✅ PASS | 规范验证通过 |\n| NLP-002 | 自然语言解析 | 昨天打车花了23.5 | ✅ PASS | 规范验证通过 |\n| NLP-003 | 自然语言解析 | 工资到账8000 | ✅ PASS | 规范验证通过 |\n| NLP-004 | 自然语言解析 | 买了一件外套299，用支付宝付的 | ✅ PASS | 规范验证通过 |\n| NLP-005 | 自然语言解析 | 充话费30 | ✅ PASS | 规范验证通过 |\n| NLP-006 | 自然语言解析 | 给小王转了200 | ✅ PASS | 规范验证通过 |\n| NLP-007 | 自然语言解析 | 5月15号喝了杯奶茶18 | ✅ PASS | 规范验证通过 |\n| NLP-008 | 自然语言解析 | 上周五看电影花了80 | ✅ PASS | 规范验证通过 |\n| NLP-009 | 自然语言解析 | 今天买了日用品，纸巾和洗发水一共67.5 | ✅ PASS | 规范验证通过 |\n| NLP-010 | 自然语言解析 | 理财收益到账156.80 | ✅ PASS | 规范验证通过 |\n| FMT-001 | 格式验证 | 交易行 CSV 格式正确（标准6字段） | ✅ PASS | 格式正确 |\n| FMT-002 | 格式验证 | 账户初始余额行格式正确 | ✅ PASS | 格式正确 |\n| FMT-003 | 格式验证 | 收入行 CSV 格式正确 | ✅ PASS | 格式正确 |\n| FMT-004 | 格式验证 | 描述含逗号的行（引号包裹）也能正确解析 | ✅ PASS | 格式正确 |\n| FMT-005 | 格式验证 | 多行账本格式验证 | ✅ PASS | 格式正确 |\n| QRY-001 | 查询功能 | 查询某月全部支出 | ✅ PASS | 查询正确 |\n| QRY-002 | 查询功能 | 查询某月工资收入（不含奖金） | ✅ PASS | 查询正确 |\n| QRY-003 | 查询功能 | 按分类查询餐饮支出（含早餐+午餐+咖啡） | ✅ PASS | 查询正确 |\n| QRY-004 | 查询功能 | 查询最近N笔交易 | ✅ PASS | 查询正确 |\n| QRY-005 | 查询功能 | 跨月查询 - 1月和2月合计支出 | ✅ PASS | 查询正确 |\n| QRY-006 | 查询功能 | 查询特定账户交易 | ✅ PASS | 查询正确 |\n| QRY-007 | 查询功能 | 查询最大单笔支出 | ✅ PASS | 查询正确 |\n| QRY-008 | 查询功能 | 按描述关键字搜索（火锅） | ✅ PASS | 查询正确 |\n| RPT-001 | 报告生成 | 月度报告 - 收支概览（1月：工资+奖金） | ✅ PASS | 报告正确 |\n| RPT-002 | 报告生成 | 月度报告 - 分类支出排行（1月） | ✅ PASS | 报告正确 |\n| RPT-003 | 报告生成 | 月度报告 - 日均消费计算（1月） | ✅ PASS | 报告正确 |\n| RPT-004 | 报告生成 | 月度报告 - 最大单笔支出识别 | ✅ PASS | 报告正确 |\n| RPT-005 | 报告生成 | 2月报告 - 确保多月数据独立计算 | ✅ PASS | 报告正确 |\n\n## 格式说明\n\n本版本使用 CSV 格式账本（`*.csv`），格式：\n```\n# 日期,类型,金额,分类,描述,账户\n余额,微信钱包,1000.00\n2026-05-21,支出,50.00,餐饮,午餐,微信钱包\n2026-05-22,收入,8000.00,工资,5月工资,银行卡\n```\n\nArchive v101.0.1: 34 files, 101620 bytes\n\nFiles: _meta.json (134b), data/example.csv (721b), data/investments.csv (276b), data/README.md (646b), examples/README.md (389b), examples/sample.csv (898b), references/budget_guide.md (1853b), references/education.md (7349b), references/financial_benchmarks.md (5871b), references/goal_guide.md (1934b), references/invest_guide.md (3738b), references/ledger_format.md (3813b), references/user_guide.md (2138b), scripts/_fund_loader.py (835b), scripts/budget.py (16484b), scripts/generate_report.py (11459b), scripts/goal.py (11013b), scripts/invest.py (45809b), scripts/lookup_code.py (4839b), scripts/parse_entry.py (14507b), scripts/query_ledger.py (10756b), skill-card.md (2704b), SKILL.md (25480b), tests/eval_cases.yaml (10184b), tests/fixtures/empty.csv (135b), tests/fixtures/sample.budget.json (131b), tests/fixtures/sample.csv (1380b), tests/results/v2_report.md (3495b), tests/run_tests.py (25021b), tests/test_comprehensive.py (44442b), tests/test_ledger.py (39206b), tests/test_runner.sh (1593b), tests/test_security.py (5852b), tests/validate_skill.sh (5305b)\n\nFile v101.0.1:SKILL.md\n\n---\nname: simple-ledger\nname_zh: 简单记账 · 个人投资管家\ndescription: Ledger assistant: a simple expense tracker for daily spending. Log expenses, check balances, track budgets, and manage investments.\ndescription_zh: 记账工具，一句话记录日常消费。自动分类、查账单、预算管理、月度报告。支持股票/基金/ETF投资记录、持仓查询、收益分析、实时行情刷新。CSV本地存储，支持多账户管理。\ntriggerWords:\n  - 记账\n  - 记一笔\n  - 花了多少\n  - 查账单\n  - 月度报告\n  - 消费报告\n  - 收支\n  - 预算\n  - 设定预算\n  - 攒钱目标\n  - 查持仓\n  - 买入基金\n  - 买入股票\n  - 卖出手续\nmetadata:\n  openclaw:\n    requires:\n      bins: [python3]\n      pypi: [akshare]\n    tags: [ledger, budget, personal-finance, accounting, csv, natural-language, zh, 记账, 记一笔, 账本, 流水账, 消费记录, 支出管理, 个人理财, 个人财务, 资产管理, 投资, 投资记账, 持仓, 股票, 基金, ETF, 月度报告, 消费分析, 预算管理, 预算规划, 攒钱目标, 财务目标, 收支记录, 账户余额, 查账]\n    permissions:\n      file:\n        read: [\"~/.openclaw/workspace/data/ledger/**\"]\n        write: [\"~/.openclaw/workspace/data/ledger/**\"]\n      network:\n        domains: [\"*.sina.com.cn\", \"*.eastmoney.com\", \"*.akshare.xyz\"]\n      exec:\n        scripts: [\"scripts/*.py\"]\n---\n\n## 概述\n\n面向普通人的自然语言记账工具。用户只需说\"今天吃饭花了50块\"，即可自动生成 CSV 格式账本条目。\n\n> ⚠️ **网络说明：** 投资功能（证券代码查询 + 实时行情）需联网，使用 akshare 库调用新浪财经公开行情 API。其他所有功能均为纯本地操作，**不会将你的财务数据上传到任何外部服务器**。\n>\n> 🔒 **隐私提示：** 联网查询时，仅发送证券代码或名称到新浪/东方财富等公开行情接口，**不发送任何个人财务数据（余额、交易记录、账户信息等）**。但这些查询本身会向第三方透露你感兴趣的证券品种，请知悉。\n>\n> ⚠️ **数据隔离说明：** 投资记录（investments.csv）和日常账本（default.csv）是两个独立文件，互不干扰。投资交易仅写入 investments.csv。\n>\n> ## 🌐 联网行为配置（重要！请先阅读）\n>\n> **默认行为：离线查询**。\n>\n> 本 skill 的联网功能采用**显式 opt-in** 机制——联网行为不会默认开启，需要用户主动允许。好处是你完全掌控什么时候联网、什么时候离线。\n>\n> **联网操作一览：**\n>\n> | 操作 | 默认行为 | 如何开启联网 |\n> |------|---------|------------|\n> | 查询持仓（--portfolio） | 离线，用手动设置的价格计算 | 加 --auto-refresh |\n> | 汇总收益（--summary） | 离线，用手动设置的价格计算 | 加 --auto-refresh |\n> | 刷新行情（--refresh） | 禁止联网 | 加 --allow-network |\n> | 查询单只行情（--quote） | 禁止联网 | 加 --allow-network |\n> | 买入时自动查代码 | 禁止联网 | 加 --allow-network |\n>\n> **用户可选：开启自动联网刷新**\n>\n> 如果你希望每次查询持仓或收益时都自动联网获取最新行情，无需每次手动加参数，有两种方式：\n>\n> **方式一：告诉小旋风「开启自动联网」**\n>\n> 直接对我说：「开启自动联网刷新行情」\n>\n> 我会在 investments.csv 所在目录创建一个 `.env` 配置文件，将 `AUTO_REFRESH=1` 写入。以后你只要说「查持仓」「投资收益」等，小旋风就会自动联网获取实时价格。\n>\n> **方式二：手动创建配置文件**\n>\n> ```bash\n> echo \"AUTO_REFRESH=1\" > ~/.openclaw/workspace/data/ledger/.env\n> ```\n>\n> **关闭自动联网：**\n>\n> ```bash\n> rm ~/.openclaw/workspace/data/ledger/.env\n> ```\n>\n> 或直接告诉小旋风「关闭自动联网刷新」\n>\n> **关于手动更新价格（不联网）：**\n>\n> 你也可以完全不联网，手动更新持仓价格：\n>\n> - 「工业富联现在81.58」\n> - 「亨通光电价格91.43」\n>\n> 我会将其保存到 `prices.json`，以后查询持仓时用你手动设置的价格计算收益。两种方式（联网自动刷新 vs 手动更新）任选其一，互不冲突。\n\n**原创 CSV 格式**。无需安装数据库，一个 CSV 文件搞定一切。\n\n## 🔒 安全与权限声明\n\n本 Skill 会进行以下操作，请在使用前了解：\n\n| 操作类型 | 具体行为 | 数据范围 |\n|----------|----------|----------|\n| 📖 读取文件 | 读取账本 CSV、预算 JSON、投资 CSV、目标 JSON | 仅 `data/` 目录下的财务数据 |\n| ✏️ 写入文件 | 追加/修改账本条目、预算配置、投资记录、目标数据 | 仅 `data/` 目录下的财务数据 |\n| 🗑️ 删除数据 | 删除交易记录、预算条目、财务目标（均需用户确认） | 仅 `data/` 目录下的财务数据 |\n| 🌐 网络访问 | 通过 akshare 查询证券/基金代码 + 实时行情（新浪接口） | 仅发送证券代码/名称，不发送任何个人财务数据 |\n| 💻 执行脚本 | 运行 `scripts/` 目录下的 Python 脚本 | 仅本 Skill 自身脚本 |\n\n**数据隔离：** 投资记录（investments.csv）和日常账本（default.csv）完全独立，不互相影响。\n\n**不会做的事：**\n- ❌ 不会读取 MEMORY.md、USER.md、SOUL.md 等非财务文件\n- ❌ 不会访问 ~/.ssh、~/.aws、~/.config 等系统目录\n- ❌ 不会向任何外部服务器发送你的财务数据\n- ❌ 不会修改系统文件或执行外部命令\n\n**数据提醒：** 所有操作直接修改本地 CSV/JSON 文件。建议定期备份 `data/` 目录。\n\n## 账本格式（CSV）\n\n本 Skill 使用**完全原创的 CSV 格式**，简单直观。\n\n```\n# 日期,类型,金额,分类,描述,账户\n余额,微信钱包,1000.00\n余额,支付宝,2000.00\n余额,银行卡,50000.00\n余额,现金,500.00\n2026-05-21,支出,50,餐饮,午餐,微信钱包\n2026-05-22,收入,8000,工资,5月工资,银行卡\n2026-05-23,支出,299,购物,外套,支付宝\n```\n\n格式规则：\n- 6 个字段：`日期,类型,金额,分类,描述,账户`\n- 类型只能是 `收入` 或 `支出`\n- 金额填正数（系统通过类型字段判断方向）\n- 账户用扁平中文名，无需层级路径\n- 初始余额用 `余额,账户,金额` 格式\n\n## 默认位置\n\n`~/.openclaw/workspace/data/ledger/default.csv`\n\n## 触发条件\n\n> ⚠️ **网络说明：** 投资功能（代码查询 + 实时行情）需联网，使用 akshare 新浪接口，其他功能均为纯本地操作。\n\n当用户**明确表达以下财务意图**时激活本 Skill：\n\n- 记一笔账（\"记一笔：花了XX\"、\"帮我记账\"、\"记到账本里\"）\n- 查询消费（\"这个月花了多少\"、\"上个月餐饮多少钱\"、\"查账\"、\"账单\"）\n- 账户管理（\"我的余额\"、\"银行卡还有多少\"）\n- 月度报告（\"月度报告\"、\"这个月花销总结\"、\"消费分析\"）\n- 投资操作（\"买入XX股\"、\"买了XX基金\"、\"卖了XX\"、\"查持仓\"、\"投资收益\"） — ⚠️ 联网\n- 预算管理（\"设定预算\"、\"预算多少\"、\"超支了吗\"、\"生成预算模板\"）\n- 财务目标（\"建个攒钱目标\"、\"旅行基金\"、\"目标进度\"）\n\n**不会激活的场景（严格排除）：**\n- 纯闲聊提及金额（\"那顿饭花了50，味道一般\"）\n- 询问价格/费用但不涉及记账（\"这个多少钱\"、\"iPhone 17 多少钱\"）\n- 不含财务意图的一般对话（\"最近花了不少钱\" 作为感慨）\n- 他人提及的消费（非用户自己的记账）\n\n> ⚠️ **消歧规则：** 如果用户只是在闲聊中提及消费（如\"昨天吃饭花了50，味道一般\"），并非明确要求记账，应视为日常对话，**不应激活本 Skill**。判断依据：用户是否有**记录、管理、查询财务**的明确意图。\n\n## 核心能力\n\n### 1. 📝 自然语言记账\n\n**输入示例：**\n- \"今天中午吃饭花了50块\"\n- \"昨天打车花了23.5\"\n- \"工资到账8000\"\n- \"充话费30\"\n- \"买了一件外套299，用支付宝付的\"\n- \"给小王转了200\"\n\n**处理流程：**\n1. 使用 LLM 从用户输入中提取：日期、金额、分类、描述、账户\n2. 调用 `scripts/parse_entry.py` 格式化为标准 CSV 行\n3. 追加写入账本 CSV 文件\n\n**AI 解析规则：**\n\n| 字段 | 说明 | 默认值 |\n|------|----\n\nArchive v101.0.0: 34 files, 101562 bytes\n\nFiles: _meta.json (134b), data/example.csv (721b), data/investments.csv (276b), data/README.md (646b), examples/README.md (389b), examples/sample.csv (898b), references/budget_guide.md (1853b), references/education.md (7349b), references/financial_benchmarks.md (5871b), references/goal_guide.md (1934b), references/invest_guide.md (3738b), references/ledger_format.md (3813b), references/user_guide.md (2138b), scripts/_fund_loader.py (835b), scripts/budget.py (16484b), scripts/generate_report.py (11459b), scripts/goal.py (11013b), scripts/invest.py (45809b), scripts/lookup_code.py (4839b), scripts/parse_entry.py (14507b), scripts/query_ledger.py (10756b), skill-card.md (2877b), SKILL.md (25480b), tests/eval_cases.yaml (10184b), tests/fixtures/empty.csv (135b), tests/fixtures/sample.budget.json (131b), tests/fixtures/sample.csv (1380b), tests/results/v2_report.md (3495b), tests/run_tests.py (25021b), tests/test_comprehensive.py (44442b), tests/test_ledger.py (39206b), tests/test_runner.sh (1593b), tests/test_security.py (5852b), tests/validate_skill.sh (5305b)\n\nArchive v1.8.1: 37 files, 106219 bytes\n\nFiles: _meta.json (132b), data/example.csv (721b), data/investments.csv (276b), data/prices.json (3b), data/README.md (646b), examples/README.md (389b), examples/sample.csv (898b), README.md (6014b), references/budget_guide.md (1853b), references/education.md (7349b), references/financial_benchmarks.md (5871b), references/goal_guide.md (1934b), references/invest_guide.md (3738b), references/ledger_format.md (3813b), references/user_guide.md (2138b), scripts/_fund_loader.py (835b), scripts/budget.py (16484b), scripts/generate_report.py (11459b), scripts/goal.py (11013b), scripts/invest.py (44696b), scripts/lookup_code.py (4839b), scripts/parse_entry.py (14507b), scripts/query_ledger.py (10756b), SECURITY_NOTES.md (2760b), skill-card.md (2822b), SKILL.md (25760b), tests/eval_cases.yaml (10184b), tests/fixtures/empty.csv (135b), tests/fixtures/sample.budget.json (131b), tests/fixtures/sample.csv (1380b), tests/results/v2_report.md (3495b), tests/run_tests.py (25021b), tests/test_comprehensive.py (44442b), tests/test_ledger.py (39206b), tests/test_runner.sh (1593b), tests/test_security.py (5852b), tests/validate_skill.sh (5305b)\n\nArchive v100.0.0: 37 files, 106066 bytes\n\nFiles: _meta.json (134b), data/example.csv (721b), data/investments.csv (276b), data/prices.json (3b), data/README.md (646b), examples/README.md (389b), examples/sample.csv (898b), README.md (6014b), references/budget_guide.md (1853b), references/education.md (7349b), references/financial_benchmarks.md (5871b), references/goal_guide.md (1934b), references/invest_guide.md (3738b), references/ledger_format.md (3813b), references/user_guide.md (2138b), scripts/_fund_loader.py (835b), scripts/budget.py (16484b), scripts/generate_report.py (11459b), scripts/goal.py (11013b), scripts/invest.py (44696b), scripts/lookup_code.py (4839b), scripts/parse_entry.py (14507b), scripts/query_ledger.py (10756b), SECURITY_NOTES.md (2760b), skill-card.md (2573b), SKILL.md (25760b), tests/eval_cases.yaml (10184b), tests/fixtures/empty.csv (135b), tests/fixtures/sample.budget.json (131b), tests/fixtures/sample.csv (1380b), tests/results/v2_report.md (3495b), tests/run_tests.py (25021b), tests/test_comprehensive.py (44442b), tests/test_ledger.py (39206b), tests/test_runner.sh (1593b), tests/test_security.py (5852b), tests/validate_skill.sh (5305b)\n\nArchive v1.8.0: 37 files, 106124 bytes\n\nFiles: _meta.json (132b), data/example.csv (721b), data/investments.csv (276b), data/prices.json (3b), data/README.md (646b), examples/README.md (389b), examples/sample.csv (898b), README.md (6014b), references/budget_guide.md (1853b), references/education.md (7349b), references/financial_benchmarks.md (5871b), references/goal_guide.md (1934b), references/invest_guide.md (3738b), references/ledger_format.md (3813b), references/user_guide.md (2138b), scripts/_fund_loader.py (835b), scripts/budget.py (16484b), scripts/generate_report.py (11459b), scripts/goal.py (11013b), scripts/invest.py (44696b), scripts/lookup_code.py (4839b), scripts/parse_entry.py (14507b), scripts/query_ledger.py (10756b), SECURITY_NOTES.md (2760b), skill-card.md (2747b), SKILL.md (25760b), tests/eval_cases.yaml (10184b), tests/fixtures/empty.csv (135b), tests/fixtures/sample.budget.json (131b), tests/fixtures/sample.csv (1380b), tests/results/v2_report.md (3495b), tests/run_tests.py (25021b), tests/test_comprehensive.py (44442b), tests/test_ledger.py (39206b), tests/test_runner.sh (1593b), tests/test_security.py (5852b), tests/validate_skill.sh (5305b)\n\nArchive v1.7.10: 37 files, 106121 bytes\n\nFiles: _meta.json (133b), data/example.csv (721b), data/investments.csv (276b), data/prices.json (3b), data/README.md (646b), examples/README.md (389b), examples/sample.csv (898b), README.md (6014b), references/budget_guide.md (1853b), references/education.md (7349b), references/financial_benchmarks.md (5871b), references/goal_guide.md (1934b), references/invest_guide.md (3738b), references/ledger_format.md (3813b), references/user_guide.md (2138b), scripts/_fund_loader.py (835b), scripts/budget.py (16484b), scripts/generate_report.py (11459b), scripts/goal.py (11013b), scripts/invest.py (44696b), scripts/lookup_code.py (4839b), scripts/parse_entry.py (14507b), scripts/query_ledger.py (10756b), SECURITY_NOTES.md (2760b), skill-card.md (2726b), SKILL.md (25760b), tests/eval_cases.yaml (10184b), tests/fixtures/empty.csv (135b), tests/fixtures/sample.budget.json (131b), tests/fixtures/sample.csv (1380b), tests/results/v2_report.md (3495b), tests/run_tests.py (25021b), tests/test_comprehensive.py (44442b), tests/test_ledger.py (39206b), tests/test_runner.sh (1593b), tests/test_security.py (5852b), tests/validate_skill.sh (5305b)","readmeExcerpt":"Skill: simple-ledger Owner: tsag1 Summary: Log expenses, check balances, track budgets, set savings goals, and monitor stock/fund/ETF investments from natural language. Plain-text CSV storage, multi-a... Tags: accounting:1.0.0, budget:1.0.0, csv:1.0.0, latest:104.0.1, ledger:1.0.0, personal-finance:1.0.0, zh:1.0.0 Version history: v104.0.1 | 2026-07-15T03:51:19.174Z | user fix: correct test expectations to match net-","codeSnippets":[],"executableExamples":[{"language":"text","snippet":"今天中午吃了碗面花了25\n昨天打车23.5\n工资到账8000\n买了件外套299，支付宝付的"},{"language":"text","snippet":"今天花了：早餐15、打车30、午饭45"},{"language":"text","snippet":"📊 2026年5月 餐饮支出\n日期        金额      描述\n2026-05-01  ¥50.00   午餐\n2026-05-03  ¥128.00  火锅\n...\n合计        ¥238.00"},{"language":"bash","snippet":"python3 scripts/budget.py <ledger.csv> --set 餐饮 2000\npython3 scripts/budget.py <ledger.csv> --progress 2026-05\npython3 scripts/budget.py <ledger.csv> --alert 2026-05\npython3 scripts/budget.py <ledger.csv> --template 15000   # 50/30/20 rule\npython3 scripts/budget.py <ledger.csv> --list\npython3 scripts/budget.py <ledger.csv> --remove 餐饮"},{"language":"bash","snippet":"python3 scripts/generate_report.py ./default.csv --month 2026-05\npython3 scripts/generate_report.py ./default.csv --month 2026-05 --output report.txt"},{"language":"bash","snippet":"goal.py create \"旅行基金\" 10000 2026-12-31\ngoal.py deposit \"旅行基金\" 2000\ngoal.py progress \"旅行基金\"\ngoal.py list\ngoal.py delete \"旅行基金\"    # ⚠️ requires typing \"删除\" to confirm"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: simple-ledger\nname_zh: 简单记账 · 个人投资管家\ndescription: Log expenses, check balances, track budgets, set savings goals, and monitor stock/fund/ETF investments from natural language. Plain-text CSV storage, multi-account, offline-first with optional real-time quotes via opt-in network access.\ndescription_zh: 记账工具，一句话记录日常消费。自动分类、查账单、预算管理、月度报告、攒钱目标。支持股票/基金/ETF 投资记录、持仓查询、收益分析、实时行情刷新（需显式授权联网）。CSV 本地存储，支持多账户管理。\ntriggerWords:\n  - 记一笔\n  - 帮我记账\n  - 记到账本里\n  - 这个月花了多少\n  - 查账单\n  - 月度报告\n  - 消费报告\n  - 收支\n  - 设定预算\n  - 攒钱目标\n  - 查持仓\n  - 买入基金\n  - 买入股票\n  - 卖出股票\nmetadata:\n  openclaw:\n    requires:\n      bins: [python3]\n      pypi: [akshare]\n    tags: [ledger, budget, personal-finance, accounting, csv, natural-language, zh, 记账, 记一笔, 账本, 流水账, 消费记录, 支出管理, 个人理财, 个人财务, 资产管理, 投资, 投资记账, 持仓, 股票, 基金, ETF, 月度报告, 消费分析, 预算管理, 预算规划, 攒钱目标, 财务目标, 收支记录, 账户余额, 查账]\n    permissions:\n      file:\n        read: [\"~/.openclaw/workspace/data/ledger/**\"]\n        write: [\"~/.openclaw/workspace/data/ledger/**\"]\n      network:\n        domains: [\"*.sina.com.cn\", \"*.eastmoney.com\", \"*.akshare.xyz\"]\n      exec:\n        scripts: [\"scripts/*.py\"]\n---\n\n## Overview\n\nA natural-language expense tracker for everyday spending, plus investment tracking for stocks/funds/ETFs. Just say \"lunch cost 50 today\" — the agent parses and appends a CSV row to your ledger. No database, no cloud sync, just one CSV file.\n\n**What this skill is good at:**\n\n- 📝 **Natural-language logging** — record an expense with one sentence\n- 📊 **Spending queries** — by month, by category, by account\n- 💰 **Multi-account balances** — WeChat Pay, Alipay, bank card, cash\n- 📐 **Budget management** — set monthly caps per category, get overspend alerts\n- 📈 **Monthly reports** — income/expense breakdown with visual ASCII chart\n- 🎯 **Savings goals** — track progress toward a target (trip, emergency fund)\n- 💹 **Investment tracking** — buy/sell stocks & funds, portfolio P&L, optional live quotes\n\n**What this skill is NOT:**\n\n- ❌ Not an investment advisor (no stock picks, no market predictions)\n- ❌ Not a tax planner\n- ❌ Not a bank sync tool (no automatic transaction import)\n\n---\n\n## Quick Start\n\nJust tell the agent something like:\n\n```\n今天中午吃了碗面花了25\n昨天打车23.5\n工资到账8000\n买了件外套299，支付宝付的\n```\n\nThe agent will:\n1. Parse date / amount / category / description / account from your sentence\n2. Append a row to `~/.openclaw/workspace/data/ledger/default.csv`\n3. Show you the updated balance\n\nDefault account is **WeChat Pay** if you don't specify one.\n\n---\n\n## Core Features\n\n### 1. 📝 Natural-language logging\n\n**More examples:**\n- \"今天中午吃饭花了50块\"\n- \"昨天打车花了23.5\"\n- \"工资到账8000\"\n- \"充话费30\"\n- \"买了一件外套299，用支付宝付的\"\n- \"给小王转了200\"\n\n**Batch logging:**\n```\n今天花了：早餐15、打车30、午饭45\n```\n\n**Confirm-then-write:** the agent shows the parsed entry before appending.\n\n**Parsed fields:**\n\n| Field | Default | Notes |\n|-------|---------|-------|\n| `date` | today | supports \"today\", \"yesterday\", \"last Wednesday\" |\n| `amount` | required | decimal allowed |\n| `category` | auto-inferred | fr"},{"path":"data/README.md","content":"# data/ 目录说明\n\n此目录用于存放用户的工作数据文件。\n\n## 文件说明\n\n- `example.csv` — 格式示例账本，包含账户初始余额和示例交易\n- `investments.csv` — 投资交易记录（买入/卖出/分红）\n- `goals.json` — 财务目标数据（自动生成）\n- `prices.json` — 投资品当前价格配置（手动更新）\n\n## 用户使用\n\n- 复制 `example.csv` 为你的工作账本\n- 建议存放在 `~/.openclaw/workspace/data/ledger/default.csv`\n- 也可以放在任何你喜欢的位置，脚本通过路径参数指定\n\n## 备份\n\n所有数据都是纯文本，建议定期备份 `data/` 目录。"},{"path":"examples/README.md","content":"# examples/ 目录说明\n\n包含简单的示例账本，适合初次使用时参考。\n\n## 文件\n\n- `sample.csv` — 最简示例，包含几个常见交易\n\n## 使用方式\n\n```bash\ncp examples/sample.csv ~/.openclaw/workspace/data/ledger/default.csv\n```\n\n然后告诉 Agent：\"我的账本在 `~/.openclaw/workspace/data/ledger/default.csv`\"，或者直接用路径参数调用脚本。"},{"path":"README.md","content":"# Simple Ledger · Personal Finance & Investment Tracker\n\nA natural-language expense tracker for everyday spending, plus investment tracking for stocks, funds, and ETFs. Just talk to your AI agent in plain English (or Chinese) — it parses your sentence and appends a row to a plain-text CSV ledger. No database, no cloud sync, no vendor lock-in.\n\n## Why Simple Ledger?\n\nMost personal finance apps force you into their schema, their cloud, their subscription plan. Simple Ledger does the opposite:\n\n- **One CSV file** — open it in Excel, Numbers, vim, or `cat`\n- **Natural language** — say \"spent 50 on lunch today\" and it's logged\n- **Offline-first** — all daily ledger features work without internet\n- **You own the data** — files live at `~/.openclaw/workspace/data/ledger/`\n- **Optional investments** — track stocks/funds/ETFs with opt-in live quotes\n\n## Features\n\n| Feature | Description | Network? |\n|---------|-------------|----------|\n| 📝 Natural-language logging | One sentence → CSV row | No |\n| 📊 Spending queries | By month, category, account | No |\n| 💰 Multi-account balances | WeChat Pay, Alipay, bank, cash | No |\n| 📐 Budgets | Per-category caps, overspend alerts | No |\n| 📈 Monthly reports | ASCII bar chart, top categories | No |\n| 🎯 Savings goals | Track progress, deposit reminders | No |\n| 💹 Investment tracking | Buy/sell, portfolio P&L | Opt-in |\n| 📡 Live quotes | Real-time prices via Sina/Eastmoney | Yes (opt-in) |\n\n## Quick Start\n\nTalk to your AI agent:\n\n```\nLunch cost 50 today\nSpent 23.5 on a taxi yesterday\nSalary arrived, 8000\nBought a jacket for 299, paid with Alipay\n```\n\nThe agent parses your sentence, shows the parsed entry for confirmation, then appends a row to `~/.openclaw/workspace/data/ledger/default.csv`.\n\n## Example Ledger\n\n```csv\n# 日期,类型,金额,分类,描述,账户\n余额,微信钱包,1000.00\n余额,支付宝,2000.00\n余额,银行卡,50000.00\n余额,现金,500.00\n2026-05-21,支出,50,餐饮,午餐,微信钱包\n2026-05-22,收入,8000,工资,5月工资,银行卡\n2026-05-23,支出,299,购物,外套,支付宝\n```\n\n## Installation\n\n```bash\nclawhub install simple-ledger\n```\n\nOr update to latest:\n\n```bash\nclawhub update simple-ledger --version 1.8.0\n```\n\n## Requirements\n\n- **Python 3** (built-in on macOS)\n- **akshare** (only for investment code lookup & live quotes): `pip install akshare`\n\n## Privacy & Data\n\nAll data lives in plain CSV/JSON files under `~/.openclaw/workspace/data/ledger/`. **Nothing is uploaded to any server.**\n\nThe only network operations are:\n\n1. Security code lookup (you say \"buy 有色金属ETF南方\", we ask Sina for its code)\n2. Live stock/fund quotes (when you opt-in)\n\nBoth only send the security name/code to public APIs — no balance, no transaction history, no account info.\n\n## File Structure\n\n```\nsimple-ledger/\n├── SKILL.md                    # Agent-facing documentation (Chinese + English)\n├── README.md                   # This file (user-facing English)\n├── _meta.json                  # Publishing metadata\n├── scripts/\n│   ├── parse_entry.py          # Parse natural language → CSV row\n│   ├── validate_line.py        # Validate C"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7dzk85gz4pz5c569zky2pssn875nwe\",\n  \"slug\": \"simple-ledger\",\n  \"version\": \"104.0.1\",\n  \"publishedAt\": 1784087479174\n}"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"Log expenses, check balances, track budgets, set savings goals, and monitor stock/fund/ETF investments from natural language. Plain-text CSV storage, multi-a... Skill: simple-ledger Owner: tsag1 Summary: Log expenses, check balances, track budgets, set savings goals, and monitor stock/fund/ETF investments from natural language. Plain-text CSV storage, multi-a... Tags: accounting:1.0.0, budget:1.0.0, csv:1.0.0, latest:104.0.1, ledger:1.0.0, personal-finance:1.0.0, zh:1.0.0 Version history: v104.0.1 | 2026-07-15T03:51:19.174Z | user fix: correct test expectations to match net-","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1189,"uniquenessScore":49,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-09T22:08:45.548Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-09T22:08:45.548Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T06:43:47.003Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}