网淘吧来吧,欢迎您!

Treeline Money技能使用说明

2026-03-29 新闻来源:网淘吧 围观:15
电脑广告
手机广告

树线理财

与您的财务对话。提出诸如“我的净资产是多少?”、“我在杂货上花了多少钱?”或“我是否超支了?”等问题,并立即从您自己的财务数据中获得答案。


快速开始

# 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通过技能元数据自动处理安装。从演示模式开始,以便用户可以立即尝试查询。

Treeline Money

使用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导入
  • (免费)设置指南:

银行同步Bank Sync·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 querytl 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-formatus,eu, 或eu_space--number-format eu
--profile NAME加载已保存的配置文件--profile chase
--save-profile NAME将设置保存为配置文件--save-profile chase
--dry-run预览而不导入--dry-run
--jsonJSON输出--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

数据库架构

核心表

账户表

描述
账户IDUUID 主键
名称账户显示名称
分类资产负债
账户类型信贷投资贷款其他,或空值机构名称银行/机构名称货币
货币代码(例如:USD
是否为手动添加布尔值——手动添加与同步系统余额快照
——余额的真实来源

描述快照ID

UUID主键账户ID
外键指向账户余额
快照时的余额快照时间
balanceBalance at snapshot time
snapshot_time记录时间
来源同步,手动, 等.

交易

描述
交易IDUUID主键
账户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_idUUID 主键
monthYYYY-MM格式
type收入支出
名称分类名称
预期金额预算金额
标签待匹配的标签数组

plugin_goals.goals— 储蓄目标

列名描述
idUUID 主键
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格式设置相应参数

提示

  1. 始终使用--json以获取可解析的输出
  2. 金额带符号— 负值 = 支出
  3. 使用分类用于资产/负债
  4. 余额存在于快照中,而非账户表
  5. 检查TL技能列表以了解用户特定的账户含义和标签约定

隐私说明

所有数据均存储在本地 (~/.treeline/treeline.duckdb)。除非明确要求,请勿在对话外分享交易描述或账户详情。

免责申明
部分文章来自各大搜索引擎,如有侵权,请与我联系删除。
打赏
文章底部电脑广告
手机广告位-内容正文底部

相关文章

您是本站第326242名访客 今日有220篇新文章/评论