Treeline Money技能使用说明
树线理财
与您的财务对话。提出诸如“我的净资产是多少?”、“我在杂货上花了多少钱?”或“我是否超支了?”等问题,并立即从您自己的财务数据中获得答案。
快速开始
# 1. Install the CLI (OpenClaw handles this automatically)
# 2. Enable demo mode (sample data)
tl demo on
# 3. Try it out
tl status
首次设置
对于代理:如果
tl命令失败并提示“命令未找到”,则需要安装CLI。OpenClaw通过技能元数据自动处理安装。从演示模式开始,以便用户可以立即尝试查询。
使用tl --version验证CLI是否可用。从演示模式开始,以便用户可以立即尝试查询。
可选:下载桌面应用程序以便可视化探索您的数据。
演示模式
演示模式加载示例数据,以便用户无需连接银行即可尝试查询:
tl demo on
稍后切换至真实数据的方法:
tl demo off
演示数据与真实数据是分开的。
命令行界面行为说明
运行 tl demo on会打印一条成功消息——如果看起来卡住了,请等待几秒钟(首次运行会初始化数据库)- 使用
tl demo status来验证演示模式是否已启用 - 由于数据库初始化,某些命令在首次运行时可能需要几秒钟
- 如果看到关于缺失表的错误,请尝试再次运行
tl demo on连接真实数据
当用户准备超越演示模式时,引导他们通过下方链接的指南设置数据源。
数据源选项:
SimpleFIN
- (1.50美元/月,美国与加拿大)Lunch Flow
- (约3美元/月,全球)CSV导入
- (免费)设置指南:
设置完成后,使用tl sync来拉取银行交易记录,或使用tl import来加载 CSV 文件。
什么是 Treeline?
Treeline Money是一款本地优先的个人理财应用。您的所有数据都存储在您设备上的本地 DuckDB 数据库中。无需云账户,无需订阅(同步服务为可选),并可对您的财务数据进行完整的 SQL 访问。
加密数据库
当数据库解锁后,加密数据库会自动工作——加密密钥存储在操作系统的密钥链中。
如果您看到“数据库已加密并已锁定”的错误提示,请告知用户在继续操作前自行解锁:
- 打开 Treeline 桌面应用并从那里解锁,或
- 在他们自己的终端中运行
tl encrypt unlock。
请勿尝试解锁数据库或处理凭据。解锁必须由用户在此对话之外直接完成。一旦解锁,密钥将持久保存在钥匙串中,直到用户将其锁定。
响应格式
所有响应格式需适配移动端/聊天界面:
- 使用项目符号列表,而非Markdown表格
- 数字取整以提高可读性(例如 $1,234 而非 $1,234.56)
- 答案先行,细节在后
- 保持回复简洁——聊天界面不是电子表格
- 使用换行分隔不同部分
良好回复示例:
Your net worth is $125k
Assets: $180k
- Retirement: $85k
- Savings: $25k
- Checking: $10k
- Home equity: $60k
Liabilities: $55k
- Mortgage: $52k
- Credit cards: $3k
不良回复示例:
| Account | Type | Balance |
|---------|------|---------|
| My 401k Account | asset | 85234.56 |
...
CLI命令
读取命令(可安全自由运行)
这些命令是只读的,可安全地自动运行:
tl status # Quick account summary with balances
tl status --json # Same, but JSON output
tl query "SQL" --json # Run any SQL query (database opened in read-only mode)
tl sql "SQL" --json # Same as tl query (alias)
tl backup list # List available backups
tl doctor # Check database health
tl demo status # Check if demo mode is on/off
注意:
tl query和tl sql默认以只读模式打开数据库。除非使用--allow-writes 参数,否则它们无法修改数据。已通过(参见下文写入命令)。
使用tl status进行快速余额查询——这比SQL查询更快。
写入命令(需先询问用户)
这些命令会修改本地数据。运行前务必先请求用户确认。
tl query "SQL" --allow-writes --json # Run a SQL query with write access
tl sql "SQL" --allow-writes --json # Same (alias)
tl sync # Sync accounts/transactions from bank integrations
tl sync --dry-run # Preview what would sync (read-only, safe to run)
tl import FILE -a ACCOUNT # Import transactions from CSV
tl import FILE -a ACCOUNT --dry-run # Preview import without applying (read-only, safe to run)
tl import FILE -a ACCOUNT --json # JSON output for scripting
tl backup create # Create a backup
tl backup restore NAME # Restore a backup
tl compact # Compact database (reclaim space, optimize)
tl tag "groceries" --ids ID1,ID2 # Apply tags to transactions
tl demo on|off # Toggle demo mode (sample data)
提示:
--dry-run模式为只读操作,无需确认即可安全运行。可在请求用户确认实际操作前,先用此模式预览效果。
若用户提及查询缓慢,请使用tl compact进行数据库优化——该命令可优化数据库性能。
CSV导入详情
tl import会自动根据CSV表头识别列映射。多数银行CSV文件可直接使用:
tl import bank_export.csv --account "Chase Checking"
通过--account/-aflag 接受账户名称(不区分大小写,子字符串匹配)或 UUID。
始终先预览使用--dry-run来验证列是否被正确检测:
tl import bank_export.csv -a "Checking" --dry-run --json
所有导入标志(除--account外均为可选):
| 标志 | 用途 | 示例 |
|---|---|---|
--date-column | 覆盖日期列 | --date-column "Post Date" |
--amount-column | 覆盖金额列 | --amount-column "Amt" |
--description-column | 覆盖描述列 | --description-column "Memo" |
--debit-column | 使用借方列(代替金额列) | --debit-column "Debit" |
--credit-column | 使用credit列(而非amount列) | --credit-column "Credit" |
--balance-column | 运行余额(创建快照) | --balance-column "Balance" |
--flip-signs | 取反金额(适用于信用卡CSV文件) | --flip-signs |
--debit-negative | 取正数借记金额 | --debit-negative |
--skip-rows N | 在标题行前跳过N行 | --skip-rows 3 |
--number-format | us,eu, 或eu_space | --number-format eu |
--profile NAME | 加载已保存的配置文件 | --profile chase |
--save-profile NAME | 将设置保存为配置文件 | --save-profile chase |
--dry-run | 预览而不导入 | --dry-run |
--json | JSON输出 | --json |
代理的常见模式:
# Step 1: Find the account UUID
tl status --json
# Step 2: Preview import
tl import transactions.csv -a "550e8400-e29b-41d4-a716-446655440000" --dry-run --json
# Step 3: Execute import
tl import transactions.csv -a "550e8400-e29b-41d4-a716-446655440000" --json
通过指纹识别,重复的交易会在重新导入时自动检测并跳过。
用户技能
Treeline 支持用户创建技能,用于个人财务知识。使用tl skills list --json来发现现有技能,并使用tl skills read <路径>来读取它们。
创建技能:当您了解到用户财务中可复用的内容时——例如标签约定、账户含义、税务类别、预算目标——请询问他们是否希望将其保存为技能,以便在未来的对话中使用。要创建一个技能,请编写一个 SKILL.md 文件,保存到~/.treeline/skills/<名称>/SKILL.md(使用tl 技能路径来获取目录)。遵循 Agent Skills 标准(agentskills.io)。
快速参考
净资产
tl query "
WITH latest AS (
SELECT DISTINCT ON (account_id) account_id, balance
FROM sys_balance_snapshots
ORDER BY account_id, snapshot_time DESC
)
SELECT
SUM(CASE WHEN a.classification = 'asset' THEN s.balance ELSE 0 END) as assets,
SUM(CASE WHEN a.classification = 'liability' THEN ABS(s.balance) ELSE 0 END) as liabilities,
SUM(CASE WHEN a.classification = 'asset' THEN s.balance ELSE -ABS(s.balance) END) as net_worth
FROM accounts a
JOIN latest s ON a.account_id = s.account_id
" --json
账户余额
tl query "
WITH latest AS (
SELECT DISTINCT ON (account_id) account_id, balance
FROM sys_balance_snapshots
ORDER BY account_id, snapshot_time DESC
)
SELECT a.name, a.classification, a.institution_name, s.balance
FROM accounts a
JOIN latest s ON a.account_id = s.account_id
ORDER BY s.balance DESC
" --json
实际支出(不含内部转账)
默认模式(排除内部转账):
tl query "
SELECT SUM(ABS(amount)) as total_spent
FROM transactions
WHERE amount < 0
AND transaction_date >= date_trunc('month', current_date)
AND NOT (tags && ARRAY['transfer', 'savings', 'investment'])
" --json
按标签划分的支出
tl query "
SELECT tags, SUM(ABS(amount)) as spent
FROM transactions
WHERE amount < 0
AND transaction_date >= '2026-01-01' AND transaction_date < '2026-02-01'
AND tags IS NOT NULL AND tags != '[]'
GROUP BY tags
ORDER BY spent DESC
" --json
近期交易
tl query "
SELECT t.description, t.amount, t.transaction_date, a.name as account
FROM transactions t
JOIN accounts a ON t.account_id = a.account_id
ORDER BY t.transaction_date DESC
LIMIT 10
" --json
数据库架构
核心表
账户表
| 列 | 描述 |
|---|---|
账户ID | UUID 主键 |
名称 | 账户显示名称 |
分类 | 资产或负债 |
账户类型 | 信贷投资贷款其他,或空值机构名称银行/机构名称货币 |
货币代码(例如: | USD |
) | 是否为手动添加布尔值——手动添加与同步系统余额快照 |
——余额的真实来源 | 列 |
描述快照ID
| UUID主键 | 账户ID |
|---|---|
外键指向账户 | 余额 |
快照时的余额 | 快照时间 |
balance | Balance at snapshot time |
snapshot_time | 记录时间 |
来源 | 同步,手动, 等. |
交易
| 列 | 描述 |
|---|---|
交易ID | UUID主键 |
账户ID | 外键指向账户表 |
金额 | 带符号(负数为支出) |
描述 | 交易描述 |
交易日期 | 发生时间 |
过账日期 | 清算时间 |
标签 | 标签数组 |
标签与类别
标签标签是 Treeline 中的核心概念——一笔交易可以拥有多个标签。
类别源自预算插件 (plugin_budget),该插件将标签映射到预算类别。并非所有用户都安装了这个插件。
插件系统
插件拥有其独立的 DuckDB 模式:plugin_<名称>.*
发现已安装的插件
tl query "
SELECT schema_name
FROM information_schema.schemata
WHERE schema_name LIKE 'plugin_%'
" --json
常见的插件模式
plugin_budget.categories—— 预算类别
| 列 | 描述 |
|---|---|
category_id | UUID 主键 |
month | YYYY-MM格式 |
type | 收入或支出 |
名称 | 分类名称 |
预期金额 | 预算金额 |
标签 | 待匹配的标签数组 |
plugin_goals.goals— 储蓄目标
| 列名 | 描述 |
|---|---|
id | UUID 主键 |
name | 目标名称 |
target_amount | 目标金额 |
target_date | 目标日期 |
completed | 布尔值 |
active | 布尔值 |
plugin_subscriptions— 检测到的定期扣费项目
plugin_cashflow— 现金流预测
plugin_emergency_fund- 紧急资金追踪
检查技能列表针对用户特定插件偏好。
通用模式
获取当前余额
始终使用最新快照:
WITH latest AS (
SELECT DISTINCT ON (account_id) account_id, balance
FROM sys_balance_snapshots
ORDER BY account_id, snapshot_time DESC
)
SELECT a.name, s.balance
FROM accounts a
JOIN latest s ON a.account_id = s.account_id
处理标签
标签为数组:
-- Contains a specific tag
WHERE tags @> ARRAY['groceries']
-- Contains any of these tags
WHERE tags && ARRAY['food', 'dining']
-- Note: UNNEST doesn't work in all contexts in DuckDB
-- Instead, GROUP BY tags directly
日期筛选
-- This month
WHERE transaction_date >= date_trunc('month', current_date)
-- Specific month
WHERE transaction_date >= '2026-01-01'
AND transaction_date < '2026-02-01'
预算与实际对比
SELECT
c.name,
c.expected,
COALESCE(SUM(ABS(t.amount)), 0) as actual,
c.expected - COALESCE(SUM(ABS(t.amount)), 0) as remaining
FROM plugin_budget.categories c
LEFT JOIN transactions t ON t.tags && c.tags
AND t.amount < 0
AND t.transaction_date >= (c.month || '-01')::DATE
AND t.transaction_date < (c.month || '-01')::DATE + INTERVAL '1 month'
WHERE c.month = strftime(current_date, '%Y-%m')
AND c.type = 'expense'
GROUP BY c.category_id, c.name, c.expected
问题映射
| 用户提问 | 处理方法 |
|---|---|
| "净资产?" | 净资产查询 |
| "余额?" | 账户余额查询 |
| "[X] 里有多少钱?" | 按以下条件筛选名称 ILIKE '%X%' |
| "我花了多少钱?" | 真实支出查询(排除内部转账) |
| "[标签] 上的支出?" | 按标签筛选 |
| "我超预算了吗?" | 预算与实际对比(需要预算插件) |
| "最近交易" | 按日期降序排序,限制数量 |
| "储蓄情况?" | 按账户名称/类型筛选 |
| "退休金情况?" | 按401k、IRA、退休金等关键词筛选 |
| "导入CSV" / "上传交易记录" | 引导操作tl import— 先用以下命令预览--dry-run |
| "从[银行名称]导入" | 使用tl import并针对该银行的CSV格式设置相应参数 |
提示
- 始终使用
--json以获取可解析的输出 - 金额带符号— 负值 = 支出
- 使用
分类用于资产/负债 - 余额存在于快照中,而非账户表
- 检查
TL技能列表以了解用户特定的账户含义和标签约定
隐私说明
所有数据均存储在本地 (~/.treeline/treeline.duckdb)。除非明确要求,请勿在对话外分享交易描述或账户详情。



微信扫一扫,打赏作者吧~