whisper-money7.21 KB
View saved version →
---
name: whisper-money
description: Work with the user's finances through the Whisper Money connector — spending, cashflow, net worth, budgets, savings goals, categories, labels, automation rules and transaction splits. Use whenever the user asks about their money, their accounts, their budgets or their transactions, or asks to categorize, label, split, record or clean up transactions.
---
# Whisper Money
The connector's own instructions cover the rules (minor units, spaces, what a
budget or a split is). This skill covers how to get real work done with it.
## Before calling anything
- Ids are opaque. Get them from `list_accounts`, `list_categories`,
`list_labels`, `list_budgets`, `list_savings_goals`, `list_automation_rules` —
never guess one, and reuse them for the rest of the conversation instead of
listing again.
- `search_transactions` has no paging: it returns at most 200 rows. Narrow with
`from`/`to` and loop over periods rather than asking for "everything".
- Only mention spaces if the user does. Everything defaults to the personal
space; call `list_spaces` when they say "shared", "household", "our".
- Nothing here moves money. Asked to transfer, pay or send money, say so
plainly instead of asking where to send it, and in the same reply offer to
log the transfer as a manual transaction once the user has made it through
their bank.
## Recipes
**"How did I do this month?"** — `get_cashflow` for the month gives income,
expense, savings and the comparison with the previous period. Add
`spending_by_category` for the same range to say *where* it went, then drill
into the biggest root with `parent_category_id`.
**"What am I paying every month?"** — `search_transactions` over the last 3-6
months, then group by creditor and spacing yourself: same merchant, similar
amount, roughly 28-31 days apart. There is no subscriptions tool.
**"Categorize what's pending"** — search a date range, keep the rows whose
`category` is null, and set them with `categorize_transaction` (works on bank
transactions too). When the same merchant shows up repeatedly, stop doing it by
hand: `create_automation_rule` for future ones, then `apply_automation_rule`
for the history — it previews by default, so show the user the match count and
the sample before calling it again with `dry_run: false`.
**"Always file X under Y"** — build the rule instead of categorizing by hand.
Get the category and label ids from `list_categories` / `list_labels` first,
then write the condition in plain language ("description mentions amazon, but
not amazon prime") and only then map it to JsonLogic:
- contains → `{"in":["amazon",{"var":"description"}]}`, and does not contain →
the same wrapped in a negation, `{"!":{"in":["amazon prime",{"var":"description"}]}}`.
- equals / is not → `{"==":[{"var":"creditor_name"},"netflix"]}` and
`{"!=":[...]}`; empty / not empty are the same two against `null`.
- Join them with `{"and":[...]}` or `{"or":[...]}`, which nest: "any of these
merchants, but not that one" is one `and` holding an `or` and a `!`.
- Values are compared lowercased, and amounts inside `rules_json` are in major
units. "Does not contain" is also true when the field is empty.
Then `create_automation_rule`, and `apply_automation_rule` with `dry_run: true`
before anything else — the match list is the only way to find out the rule says
what you meant. A rule that is merely wrong (bad nesting, a variable that does
not exist, a token that never appears) saves happily and matches nothing, so a
dry run returning 0 matches is a bug in the rule, not an empty history. Fix it
with `update_automation_rule`, dry-run again, then commit with `dry_run: false`.
**"This charge was for two things"** — `split_transaction` with parts that add
up to the original and share its sign. The parts replace it everywhere; to undo
it, `merge_transaction_splits` with any part.
**"Add my savings account / my mortgage / my flat"** — `create_account` with
the type, a currePreview of the first 4,000 characters. Read full instructions →
whisper-money-docs2.23 KB
View saved version →
---
name: whisper-money-docs
description: Read Whisper Money's product documentation before answering how the app works — how accounts, transactions, imports, categories, labels, automation rules, cashflow or budgets behave, what a feature does or does not do, how to connect an AI assistant to it, pricing, privacy and which banks connect. Use when the user asks a "how does Whisper Money…" or "can Whisper Money…" question instead of answering from memory.
---
# Whisper Money documentation
Every page is served as Markdown by appending `.md` to its URL. Fetch that
version — it is the same content without the page chrome.
## Where to start
`https://whisper.money/documentation.md` is the full index: every page with its
description, nested under the topic it belongs to. Read it first when you are
not sure which page answers the question, then fetch the page it points at.
Individual pages follow `https://whisper.money/documentation/{slug}.md`:
| Topic | Slug |
| --- | --- |
| Getting started | `getting-started` |
| Accounts, connecting a bank | `accounts` |
| Importing and editing balances | `accounts/import-balances`, `accounts/edit-balances` |
| Transactions | `transactions` |
| Creating and importing transactions | `transactions/create`, `transactions/import` |
| Splitting a transaction | `transactions/split` |
| Categories | `categories` |
| Labels | `labels` |
| Automation rules | `automation-rules` |
| Cashflow | `cashflow` |
| Budgets | `budgets` |
| Savings goals | `savings-goals` |
| Achievements, medals | `achievements` |
| Monthly summary | `monthly-summary` |
| AI Connector, MCP, connecting Claude or ChatGPT | `ai-connector` |
Add `?lang=es` for Spanish: `https://whisper.money/documentation/budgets.md?lang=es`.
## Anything else
`https://whisper.money/llms.txt` indexes everything public beyond the docs — the
product summary, roadmap, privacy policy, terms, the banks and apps that can be
connected, and the comparison pages.
## How to answer
- Read the page before answering. These pages change; memory does not.
- Answer from what the page says, and link it (the human URL, without `.md`) so
the user can read the rest.
- If the docs do not cover it, say so rather than inferring. The roadmap page
is where "not yet" lives.