treeline
Treeline Moneyの財務データと対話できます。残高、支出、予算、取引履歴などをクエリして確認できます。
description の原文を見る
Chat with your finances from Treeline Money. Query balances, spending, budgets, and transactions.
SKILL.md 本文
Treeline Money
あなたの財務について会話します。 「純資産はいくら?」「食料品にいくら使った?」「予算を超えていないか?」といった質問をして、自分の財務データから即座に答えを得られます。
クイックスタート
# 1. CLIをインストール(OpenClawが自動的に処理します)
# 2. デモモードを有効にする(サンプルデータ)
tl demo on
# 3. 試してみる
tl status
初回セットアップ
エージェント向け:
tlコマンドが「command not found」エラーで失敗する場合、CLIをインストールする必要があります。OpenClawはスキルメタデータを経由してインストールを自動的に処理します。デモモードで始めれば、ユーザーは即座にクエリを試せます。
tl --versionでCLIが利用可能か確認します。デモモードで始めれば、ユーザーは即座にクエリを試せます。
オプション: デスクトップアプリをダウンロードして、データを視覚的に探索できます。
デモモード
デモモードはサンプルデータを読み込むため、ユーザーは銀行と接続せずにクエリを試すことができます:
tl demo on
後で実データに切り替えるには:
tl demo off
デモデータは実データと分離しています。
CLIの動作に関する注意
tl demo onは成功メッセージを出力します — ハングしているように見える場合は数秒待ってください(初回実行時はデータベースを初期化します)tl demo statusを使用してデモモードが有効か確認します- 初回実行時はデータベースの初期化が原因で、いくつかのコマンドに数秒かかることがあります
- テーブルが見つからないエラーが表示される場合は、
tl demo onをもう一度試してください
実データの接続
ユーザーがデモモードを卒業する準備ができたら、以下のリンクのガイドを使用してデータソースをセットアップするよう指示してください。
データソースオプション:
- SimpleFIN ($1.50/月、米国・カナダ)
- Lunch Flow (~$3/月、グローバル)
- CSVインポート (無料)
セットアップガイド: Bank Sync · CSV Import
セットアップ後、tl syncで銀行トランザクションを取得するか、tl importでCSVを読み込みます。
Treelineとは
Treeline Moneyはローカルファーストの個人財務管理アプリです。すべてのデータはデバイス上のローカルDuckDBデータベースに保存されます。クラウドアカウント、サブスクリプションは不要です(同期サービスはオプション)。財務データへの完全なSQLアクセスが可能です。
暗号化されたデータベース
暗号化されたデータベースは、ロック解除されたとき自動的に動作します — 暗号化キーはOSキーチェーンに保存されます。
「database is encrypted and locked」エラーが表示される場合は、ユーザーに続行前にロック解除するよう指示してください:
- Treelineデスクトップアプリを開いて、そこからロック解除する、または
- ユーザー自身のターミナルで
tl encrypt unlockを実行する
データベースのロック解除や認証情報の処理を試みないでください。 ロック解除はユーザーが直接、このチャット外で行う必要があります。ロック解除されたら、ユーザーがロックするまでキーはキーチェーンに保持されます。
レスポンスフォーマット
すべてのレスポンスをモバイル/チャット向けにフォーマットしてください:
- マークダウンテーブルではなく箇条書きを使用する
- 読みやすくするために数字を四捨五入する($1,234.56ではなく$1,234)
- 答えを最初に、詳細は後に
- レスポンスは簡潔に — チャットはスプレッドシートではありません
- セクションを区切るために改行を使用する
良いレスポンスの例:
純資産は$125k
資産: $180k
- リタイアメント: $85k
- 貯蓄: $25k
- 当座預金: $10k
- 住宅資産: $60k
負債: $55k
- モーゲージ: $52k
- クレジットカード: $3k
悪いレスポンスの例:
| アカウント | タイプ | 残高 |
|---------|------|---------|
| My 401k Account | asset | 85234.56 |
...
CLIコマンド
読み込みコマンド(自由に実行可能)
これらのコマンドは読み込み専用で、自律的に実行しても安全です:
tl status # 残高付きのクイックアカウント概要
tl status --json # 同じく、JSON出力
tl query "SQL" --json # SQLクエリを実行(データベースは読み込み専用モードで開きます)
tl sql "SQL" --json # tl queryと同じ(エイリアス)
tl backup list # 利用可能なバックアップをリスト
tl doctor # データベースの健全性を確認
tl demo status # デモモードがオン/オフかを確認
注:
tl queryとtl sqlはデフォルトでデータベースを読み込み専用モードで開きます。--allow-writesが渡されない限り、データを変更することはできません(以下の書き込みコマンドを参照)。
残高確認にはuuutl statusを使用してください — SQLクエリより高速です。
書き込みコマンド(ユーザーに確認してください)
これらのコマンドはローカルデータを変更します。実行前に必ずユーザーに確認を求めてください。
tl query "SQL" --allow-writes --json # 書き込みアクセス付きSQLクエリを実行
tl sql "SQL" --allow-writes --json # 同じ(エイリアス)
tl sync # 銀行統合からアカウント/トランザクションを同期
tl sync --dry-run # 同期内容をプレビュー(読み込み専用、安全に実行可能)
tl import FILE -a ACCOUNT # CSVからトランザクションをインポート
tl import FILE -a ACCOUNT --dry-run # プレビュー(読み込み専用、安全に実行可能)
tl import FILE -a ACCOUNT --json # スクリプト用JSON出力
tl backup create # バックアップを作成
tl backup restore NAME # バックアップをリストア
tl compact # データベースを圧縮(スペース解放、最適化)
tl tag "groceries" --ids ID1,ID2 # トランザクションにタグを適用
tl demo on|off # デモモードを切り替え(サンプルデータ)
ヒント:
--dry-runバリアントは読み込み専用で、確認なしで安全に実行できます。ユーザーに実際の操作の確認を求める前にプレビューするのに使用します。
クエリが遅い場合はtl compactを使用してください — データベースを最適化します。
CSVインポートの詳細
tl importはCSVヘッダーから列のマッピングを自動検出します。ほとんどの銀行CSVはそのまま動作します:
tl import bank_export.csv --account "Chase Checking"
--account / -aフラグはアカウント名(大文字小文字を区別しない、部分文字列マッチ)または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-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 |
エージェント向けの一般的なパターン:
# ステップ1: アカウントUUIDを検索
tl status --json
# ステップ2: インポートをプレビュー
tl import transactions.csv -a "550e8400-e29b-41d4-a716-446655440000" --dry-run --json
# ステップ3: インポートを実行
tl import transactions.csv -a "550e8400-e29b-41d4-a716-446655440000" --json
重複トランザクションは再インポート時にフィンガープリントで自動検出・スキップされます。
ユーザースキル
Treelineはユーザー作成スキルをサポートしており、個人の財務知識を記録できます。tl skills list --jsonで既存スキルを発見し、tl skills read <path>で読み込みます。
スキルの作成: ユーザーの財務について再利用可能なことを学んだら — タグ規則、アカウントの意味、税務カテゴリ、予算目標 — それを将来のチャットのためのスキルとして保存するかどうかを尋ねてください。スキルを作成するには、~/.treeline/skills/<name>/SKILL.mdにSKILL.mdファイルを作成します(tl skills pathでディレクトリを取得)。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
データベーススキーマ
コアテーブル
accounts
| 列 | 説明 |
|---|---|
account_id | UUIDプライマリキー |
name | アカウント表示名 |
classification | assetまたはliability |
account_type | credit、investment、Loan、other、またはnull |
institution_name | 銀行/機関名 |
currency | 通貨コード(例:USD) |
is_manual | ブール値 — 手動追加 vs 同期 |
sys_balance_snapshots — 残高の信頼できるソース
| 列 | 説明 |
|---|---|
snapshot_id | UUIDプライマリキー |
account_id | accounts外部キー |
balance | スナップショット時の残高 |
snapshot_time | 記録された時刻 |
source | sync、manualなど |
transactions
| 列 | 説明 |
|---|---|
transaction_id | UUIDプライマリキー |
account_id | accounts外部キー |
amount | 符号付き(負 = 支出) |
description | トランザクション説明 |
transaction_date | 発生時刻 |
posted_date | 確定時刻 |
tags | タグの配列 |
タグ対カテゴリ
タグはTreelineの主要な概念です — トランザクションは複数のタグを持つことができます。
カテゴリは予算プラグイン(plugin_budget)から来ます。このプラグインはタグを予算カテゴリにマッピングします。すべてのユーザーがこのプラグインを持っているわけではありません。
プラグインシステム
プラグインは独自のDuckDBスキーマを持ちます: plugin_<name>.*
インストール済みプラグインの発見
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 | incomeまたはexpense |
name | カテゴリ名 |
expected | 予算額 |
tags | マッチするタグの配列 |
plugin_goals.goals — 貯蓄目標
| 列 | 説明 |
|---|---|
id | UUIDプライマリキー |
name | 目標名 |
target_amount | 目標額 |
target_date | 目標日 |
completed | ブール値 |
active | ブール値 |
plugin_subscriptions — 検出された定期支払い
plugin_cashflow — キャッシュフロー予測
plugin_emergency_fund — 緊急基金トラッキング
tl skills listでユーザー固有のプラグイン設定を確認します。
一般的なパターン
現在の残高を取得
常に最新のスナップショットを使用してください:
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
タグを使用する
タグは配列です:
-- 特定のタグを含む
WHERE tags @> ARRAY['groceries']
-- これらのタグのいずれかを含む
WHERE tags && ARRAY['food', 'dining']
-- 注: UNNESTはDuckDBのすべてのコンテキストで動作しません
-- 代わりに直接GROUP BY tagsを使用してください
日付フィルタ
-- 今月
WHERE transaction_date >= date_trunc('month', current_date)
-- 特定の月
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]にいくら?」 | name ILIKE '%X%'でフィルタ |
| 「いくら使った?」 | 真の支出クエリ(内部移動を除外) |
| 「[タグ]への支出は?」 | タグでフィルタ |
| 「予算を超えていないか?」 | 予算対実績(予算プラグインが必要) |
| 「最近のトランザクション」 | 日付でDESC並べ替え、リミット |
| 「貯蓄は?」 | 名前/タイプでアカウントをフィルタ |
| 「リタイアメント?」 | 401k、IRA、リタイアメントキーワードでフィルタ |
| 「CSVをインポート」 / 「トランザクションをアップロード」 | tl importをガイド — --dry-runで最初にプレビュー |
| 「[銀行名]からインポート」 | その銀行のCSV形式に適切なフラグでtl importを使用 |
ヒント
- 常に
--jsonを使用してください パース可能な出力のため - 金額は符号付きです — 負 = 支出
classificationを使用してください 資産/負債用- 残高はスナップショットに存在します、accountsテーブルではなく
tl skills listを確認してください ユーザー固有のアカウント意味とタグ規則用
プライバシーノート
すべてのデータはローカルです(~/.treeline/treeline.duckdb)。明示的に求められない限り、トランザクション説明またはアカウント詳細をチャット外で共有しないでください。
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- treeline-money
- ライセンス
- MIT
- 最終更新
- 2026/5/9
Source: https://github.com/treeline-money/treeline / ライセンス: MIT