Update to Whisper Money
Snapshot Nov 13, 2026 · 18:09 UTC · version 2.2.0
Collection source: downloaded plugin package. These snapshots do not have a confirmed matching collection source. Differences in file lists alone do not establish changes to the package.
Payment or plan references changed
Full description — Now says: savings goals,
Observed in published text. Live prices and checkout terms have not been verified by this change.
Up to 3 plugins free · no card required.
All fields and original values.
Full description
Sep 30, 2026 · 22:59 UTC
Nov 13, 2026 · 18:09 UTC
savings goals,
Skill instructions
Sep 30, 2026 · 22:59 UTC
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. `list...
Nov 13, 2026 · 18:09 UTC
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 transa...
Compare saved observations
Download comparison JSONSKILL.md text changes
− removed · + added
--- before +++ after @@ -1,6 +1,6 @@ --- name: whisper-money -description: Work with the user's finances through the Whisper Money connector — spending, cashflow, net worth, budgets, 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. +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 @@ -11,12 +11,17 @@ ## Before calling anything - Ids are opaque. Get them from `list_accounts`, `list_categories`, - `list_labels`, `list_budgets`, `list_automation_rules` — never guess one, and - reuse them for the rest of the conversation instead of listing again. + `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 @@ -36,10 +41,40 @@ 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 currency and, if the user knows it, today's `balance`. A `loan` or a +`real_estate` account is worth doing properly in one call: pass +`annual_interest_rate`, `loan_term_months` and `original_amount` (or +`purchase_price` and `purchase_date`), and with a balance the monthly history in +between is generated for the chart. Link a mortgage to the property it pays for +with `linked_real_estate_account_id`. Renaming, retyping or reweighing an +account later is `update_account`, which touches only the fields you pass. + **"Am I overspending?"** — `list_budgets` already reports allocated, spent and remaining for the period in progress. Say `current_period: null` means no period covers today, and treat `spent_amount` as provisional while @@ -50,6 +85,17 @@ creation, so get them right the first time: confirm them with the user before creating, because changing them later means deleting and recreating the budget. +**"Save €300 a month" / "How did my savings go?"** — a `monthly` savings goal +(`create_savings_goal`): a fixed `amount` or an `income_rate` share of income, +judged afresh every month with no carry-over. Offer `auto_tag_account_id` when +the money lands in a savings account, or contributions only count once tagged. +`list_savings_goals` gives each month's target, saved and difference; a kind +cannot change later, and a new target applies from the month in progress. A +month with status `partial` (created in its last 5 days) or `archived` (archived +during it) has no verdict and stays out of months met, the streak and the +cumulative figures — mention what was saved, not whether it was met. An account +already auto-tagged by another running monthly goal is refused. + ## What bites - Bank transactions cannot be edited or deleted — only categorized, labelled or @@ -59,6 +105,16 @@ the user ends up with the charge twice. - Balances (`create_balance`) work on manual accounts only; a connected account's balances come from the bank. +- Bank-connected accounts cannot be created: only the user can, in the app, + through the bank's consent flow. Offer that instead of building a manual + lookalike, which would never sync. On one that already exists, + `update_account` takes the name and the ownership fields and refuses the + currency, the bank and any type without a transaction ledger. +- Neither account tool archives, hides or deletes. Archiving in particular also + revokes the bank connection, so it stays in the app where the user can see + what they are agreeing to. +- `list_accounts` shows every account in a shared space, but only the owner can + edit one — `update_account` refuses a housemate's account. - Ask first before anything that destroys data: `delete_budget` (takes the spending history with it), `merge_transaction_splits` (loses the categories, labels and notes on every part), `delete_category` with
Full technical diff · 2 changed fields
changed /description
"Work with the user's finances through the Whisper Money connector — spending, cashflow, net worth, budgets, 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."
"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."
changed /skill_md_contents
"---\nname: whisper-money\ndescription: Work with the user's finances through the Whisper Money connector — spending, cashflow, net worth, budgets, 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.\n---\n\n# Whisper Money\n\nThe connector's own instructions cover the rules (minor units, spaces, what a\nbudget or a split is). This skill covers how to get real work done with it.\n\n## Before calling anything\n\n- Ids are opaque. Get them from `list_accounts`, `list_categories`,\n `list_labels`, `list_budgets`, `list_automation_rules` — never guess one, and\n reuse them for the rest of the conversation instead of listing again.\n- `search_transactions` has no paging: it returns at most 200 rows. Narrow with\n `from`/`to` and loop over periods rather than asking for \"everything\".\n- Only mention spaces if the user does. Everything defaults to the personal\n space; call `list_spaces` when they say \"shared\", \"household\", \"our\".\n\n## Recipes\n\n**\"How did I do this month?\"** — `get_cashflow` for the month gives income,\nexpense, savings and the comparison with the previous period. Add\n`spending_by_category` for the same range to say *where* it went, then drill\ninto the biggest root with `parent_category_id`.\n\n**\"What am I paying every month?\"** — `search_transactions` over the last 3-6\nmonths, then group by creditor and spacing yourself: same merchant, similar\namount, roughly 28-31 days apart. There is no subscriptions tool.\n\n**\"Categorize what's pending\"** — search a date range, keep the rows whose\n`category` is null, and set them with `categorize_transaction` (works on bank\ntransactions too). When the same merchant shows up repeatedly, stop doing it by\nhand: `create_automation_rule` for future ones, then `apply_automation_rule`\nfor the history — it previews by default, so show the user the match count and\nthe sample before calling it again with `dry_run: false`.\n\n**\"This charge was for two things\"** — `split_transaction` with parts that add\nup to the original and share its sign. The parts replace it everywhere; to undo\nit, `merge_transaction_splits` with any part.\n\n**\"Am I overspending?\"** — `list_budgets` already reports allocated, spent and\nremaining for the period in progress. Say `current_period: null` means no\nperiod covers today, and treat `spent_amount` as provisional while\n`processing_historical` is true.\n\n**\"Track my X spending\"** — `create_budget` over the categories that matter.\nPeriod length, start day, rollover and tracked categories are frozen after\ncreation, so get them right the first time: confirm them with the user before\ncreating, because changing them later means deleting and recreating the budget.\n\n## What bites\n\n- Bank transactions cannot be edited or deleted — only categorized, labelled or\n split. Reach for `categorize_transaction` / `label_transaction`, not\n `update_transaction`.\n- `create_transaction` never dedups. Only add what the bank will not sync, or\n the user ends up with the charge twice.\n- Balances (`create_balance`) work on manual accounts only; a connected\n account's balances come from the bank.\n- Ask first before anything that destroys data: `delete_budget` (takes the\n spending history with it), `merge_transaction_splits` (loses the categories,\n labels and notes on every part), `delete_category` with\n `strategy: \"cascade\"`, and any bulk `dry_run: false` run.\n- Amounts inside an automation rule's `rules_json` are in major units. Every\n other amount in the connector is in cents.\n"
"---\nname: whisper-money\ndescription: 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.\n---\n\n# Whisper Money\n\nThe connector's own instructions cover the rules (minor units, spaces, what a\nbudget or a split is). This skill covers how to get real work done with it.\n\n## Before calling anything\n\n- Ids are opaque. Get them from `list_accounts`, `list_categories`,\n `list_labels`, `list_budgets`, `list_savings_goals`, `list_automation_rules` —\n never guess one, and reuse them for the rest of the conversation instead of\n listing again.\n- `search_transactions` has no paging: it returns at most 200 rows. Narrow with\n `from`/`to` and loop over periods rather than asking for \"everything\".\n- Only mention spaces if the user does. Everything defaults to the personal\n space; call `list_spaces` when they say \"shared\", \"household\", \"our\".\n- Nothing here moves money. Asked to transfer, pay or send money, say so\n plainly instead of asking where to send it, and in the same reply offer to\n log the transfer as a manual transaction once the user has made it through\n their bank.\n\n## Recipes\n\n**\"How did I do this month?\"** — `get_cashflow` for the month gives income,\nexpense, savings and the comparison with the previous period. Add\n`spending_by_category` for the same range to say *where* it went, then drill\ninto the biggest root with `parent_category_id`.\n\n**\"What am I paying every month?\"** — `search_transactions` over the last 3-6\nmonths, then group by creditor and spacing yourself: same merchant, similar\namount, roughly 28-31 days apart. There is no subscriptions tool.\n\n**\"Categorize what's pending\"** — search a date range, keep the rows whose\n`category` is null, and set them with `categorize_transaction` (works on bank\ntransactions too). When the same merchant shows up repeatedly, stop doing it by\nhand: `create_automation_rule` for future ones, then `apply_automation_rule`\nfor the history — it previews by default, so show the user the match count and\nthe sample before calling it again with `dry_run: false`.\n\n**\"Always file X under Y\"** — build the rule instead of categorizing by hand.\nGet the category and label ids from `list_categories` / `list_labels` first,\nthen write the condition in plain language (\"description mentions amazon, but\nnot amazon prime\") and only then map it to JsonLogic:\n\n- contains → `{\"in\":[\"amazon\",{\"var\":\"description\"}]}`, and does not contain →\n the same wrapped in a negation, `{\"!\":{\"in\":[\"amazon prime\",{\"var\":\"description\"}]}}`.\n- equals / is not → `{\"==\":[{\"var\":\"creditor_name\"},\"netflix\"]}` and\n `{\"!=\":[...]}`; empty / not empty are the same two against `null`.\n- Join them with `{\"and\":[...]}` or `{\"or\":[...]}`, which nest: \"any of these\n merchants, but not that one\" is one `and` holding an `or` and a `!`.\n- Values are compared lowercased, and amounts inside `rules_json` are in major\n units. \"Does not contain\" is also true when the field is empty.\n\nThen `create_automation_rule`, and `apply_automation_rule` with `dry_run: true`\nbefore anything else — the match list is the only way to find out the rule says\nwhat you meant. A rule that is merely wrong (bad nesting, a variable that does\nnot exist, a token that never appears) saves happily and matches nothing, so a\ndry run returning 0 matches is a bug in the rule, not an empty history. Fix it\nwith `update_automation_rule`, dry-run again, then commit with `dry_run: false`.\n\n**\"This charge was for two things\"** — `split_transaction` with parts that add\nup to the original and share its sign. The parts replace it everywhere; to undo\nit, `merge_transaction_splits` with any part.\n\n**\"Add my savings account / my mortgage / my flat\"** — `create_account` with\nthe type, a currency and, if the user knows it, today's `balance`. A `loan` or a\n`real_estate` account is worth doing properly in one call: pass\n`annual_interest_rate`, `loan_term_months` and `original_amount` (or\n`purchase_price` and `purchase_date`), and with a balance the monthly history in\nbetween is generated for the chart. Link a mortgage to the property it pays for\nwith `linked_real_estate_account_id`. Renaming, retyping or reweighing an\naccount later is `update_account`, which touches only the fields you pass.\n\n**\"Am I overspending?\"** — `list_budgets` already reports allocated, spent and\nremaining for the period in progress. Say `current_period: null` means no\nperiod covers today, and treat `spent_amount` as provisional while\n`processing_historical` is true.\n\n**\"Track my X spending\"** — `create_budget` over the categories that matter.\nPeriod length, start day, rollover and tracked categories are frozen after\ncreation, so get them right the first time: confirm them with the user before\ncreating, because changing them later means deleting and recreating the budget.\n\n**\"Save €300 a month\" / \"How did my savings go?\"** — a `monthly` savings goal\n(`create_savings_goal`): a fixed `amount` or an `income_rate` share of income,\njudged afresh every month with no carry-over. Offer `auto_tag_account_id` when\nthe money lands in a savings account, or contributions only count once tagged.\n`list_savings_goals` gives each month's target, saved and difference; a kind\ncannot change later, and a new target applies from the month in progress. A\nmonth with status `partial` (created in its last 5 days) or `archived` (archived\nduring it) has no verdict and stays out of months met, the streak and the\ncumulative figures — mention what was saved, not whether it was met. An account\nalready auto-tagged by another running monthly goal is refused.\n\n## What bites\n\n- Bank transactions cannot be edited or deleted — only categorized, labelled or\n split. Reach for `categorize_transaction` / `label_transaction`, not\n `update_transaction`.\n- `create_transaction` never dedups. Only add what the bank will not sync, or\n the user ends up with the charge twice.\n- Balances (`create_balance`) work on manual accounts only; a connected\n account's balances come from the bank.\n- Bank-connected accounts cannot be created: only the user can, in the app,\n through the bank's consent flow. Offer that instead of building a manual\n lookalike, which would never sync. On one that already exists,\n `update_account` takes the name and the ownership fields and refuses the\n currency, the bank and any type without a transaction ledger.\n- Neither account tool archives, hides or deletes. Archiving in particular also\n revokes the bank connection, so it stays in the app where the user can see\n what they are agreeing to.\n- `list_accounts` shows every account in a shared space, but only the owner can\n edit one — `update_account` refuses a housemate's account.\n- Ask first before anything that destroys data: `delete_budget` (takes the\n spending history with it), `merge_transaction_splits` (loses the categories,\n labels and notes on every part), `delete_category` with\n `strategy: \"cascade\"`, and any bulk `dry_run: false` run.\n- Amounts inside an automation rule's `rules_json` are in major units. Every\n other amount in the connector is in cents.\n"Full snapshot data
{
"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.",
"included_files": [],
"name": "whisper-money",
"skill_md_contents": "---\nname: whisper-money\ndescription: 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.\n---\n\n# Whisper Money\n\nThe connector's own instructions cover the rules (minor units, spaces, what a\nbudget or a split is). This skill covers how to get real work done with it.\n\n## Before calling anything\n\n- Ids are opaque. Get them from `list_accounts`, `list_categories`,\n `list_labels`, `list_budgets`, `list_savings_goals`, `list_automation_rules` —\n never guess one, and reuse them for the rest of the conversation instead of\n listing again.\n- `search_transactions` has no paging: it returns at most 200 rows. Narrow with\n `from`/`to` and loop over periods rather than asking for \"everything\".\n- Only mention spaces if the user does. Everything defaults to the personal\n space; call `list_spaces` when they say \"shared\", \"household\", \"our\".\n- Nothing here moves money. Asked to transfer, pay or send money, say so\n plainly instead of asking where to send it, and in the same reply offer to\n log the transfer as a manual transaction once the user has made it through\n their bank.\n\n## Recipes\n\n**\"How did I do this month?\"** — `get_cashflow` for the month gives income,\nexpense, savings and the comparison with the previous period. Add\n`spending_by_category` for the same range to say *where* it went, then drill\ninto the biggest root with `parent_category_id`.\n\n**\"What am I paying every month?\"** — `search_transactions` over the last 3-6\nmonths, then group by creditor and spacing yourself: same merchant, similar\namount, roughly 28-31 days apart. There is no subscriptions tool.\n\n**\"Categorize what's pending\"** — search a date range, keep the rows whose\n`category` is null, and set them with `categorize_transaction` (works on bank\ntransactions too). When the same merchant shows up repeatedly, stop doing it by\nhand: `create_automation_rule` for future ones, then `apply_automation_rule`\nfor the history — it previews by default, so show the user the match count and\nthe sample before calling it again with `dry_run: false`.\n\n**\"Always file X under Y\"** — build the rule instead of categorizing by hand.\nGet the category and label ids from `list_categories` / `list_labels` first,\nthen write the condition in plain language (\"description mentions amazon, but\nnot amazon prime\") and only then map it to JsonLogic:\n\n- contains → `{\"in\":[\"amazon\",{\"var\":\"description\"}]}`, and does not contain →\n the same wrapped in a negation, `{\"!\":{\"in\":[\"amazon prime\",{\"var\":\"description\"}]}}`.\n- equals / is not → `{\"==\":[{\"var\":\"creditor_name\"},\"netflix\"]}` and\n `{\"!=\":[...]}`; empty / not empty are the same two against `null`.\n- Join them with `{\"and\":[...]}` or `{\"or\":[...]}`, which nest: \"any of these\n merchants, but not that one\" is one `and` holding an `or` and a `!`.\n- Values are compared lowercased, and amounts inside `rules_json` are in major\n units. \"Does not contain\" is also true when the field is empty.\n\nThen `create_automation_rule`, and `apply_automation_rule` with `dry_run: true`\nbefore anything else — the match list is the only way to find out the rule says\nwhat you meant. A rule that is merely wrong (bad nesting, a variable that does\nnot exist, a token that never appears) saves happily and matches nothing, so a\ndry run returning 0 matches is a bug in the rule, not an empty history. Fix it\nwith `update_automation_rule`, dry-run again, then commit with `dry_run: false`.\n\n**\"This charge was for two things\"** — `split_transaction` with parts that add\nup to the original and share its sign. The parts replace it everywhere; to undo\nit, `merge_transaction_splits` with any part.\n\n**\"Add my savings account / my mortgage / my flat\"** — `create_account` with\nthe type, a currency and, if the user knows it, today's `balance`. A `loan` or a\n`real_estate` account is worth doing properly in one call: pass\n`annual_interest_rate`, `loan_term_months` and `original_amount` (or\n`purchase_price` and `purchase_date`), and with a balance the monthly history in\nbetween is generated for the chart. Link a mortgage to the property it pays for\nwith `linked_real_estate_account_id`. Renaming, retyping or reweighing an\naccount later is `update_account`, which touches only the fields you pass.\n\n**\"Am I overspending?\"** — `list_budgets` already reports allocated, spent and\nremaining for the period in progress. Say `current_period: null` means no\nperiod covers today, and treat `spent_amount` as provisional while\n`processing_historical` is true.\n\n**\"Track my X spending\"** — `create_budget` over the categories that matter.\nPeriod length, start day, rollover and tracked categories are frozen after\ncreation, so get them right the first time: confirm them with the user before\ncreating, because changing them later means deleting and recreating the budget.\n\n**\"Save €300 a month\" / \"How did my savings go?\"** — a `monthly` savings goal\n(`create_savings_goal`): a fixed `amount` or an `income_rate` share of income,\njudged afresh every month with no carry-over. Offer `auto_tag_account_id` when\nthe money lands in a savings account, or contributions only count once tagged.\n`list_savings_goals` gives each month's target, saved and difference; a kind\ncannot change later, and a new target applies from the month in progress. A\nmonth with status `partial` (created in its last 5 days) or `archived` (archived\nduring it) has no verdict and stays out of months met, the streak and the\ncumulative figures — mention what was saved, not whether it was met. An account\nalready auto-tagged by another running monthly goal is refused.\n\n## What bites\n\n- Bank transactions cannot be edited or deleted — only categorized, labelled or\n split. Reach for `categorize_transaction` / `label_transaction`, not\n `update_transaction`.\n- `create_transaction` never dedups. Only add what the bank will not sync, or\n the user ends up with the charge twice.\n- Balances (`create_balance`) work on manual accounts only; a connected\n account's balances come from the bank.\n- Bank-connected accounts cannot be created: only the user can, in the app,\n through the bank's consent flow. Offer that instead of building a manual\n lookalike, which would never sync. On one that already exists,\n `update_account` takes the name and the ownership fields and refuses the\n currency, the bank and any type without a transaction ledger.\n- Neither account tool archives, hides or deletes. Archiving in particular also\n revokes the bank connection, so it stays in the app where the user can see\n what they are agreeing to.\n- `list_accounts` shows every account in a shared space, but only the owner can\n edit one — `update_account` refuses a housemate's account.\n- Ask first before anything that destroys data: `delete_budget` (takes the\n spending history with it), `merge_transaction_splits` (loses the categories,\n labels and notes on every part), `delete_category` with\n `strategy: \"cascade\"`, and any bulk `dry_run: false` run.\n- Amounts inside an automation rule's `rules_json` are in major units. Every\n other amount in the connector is in cents.\n"
}SHA-256 of public snapshot: 2da8589ee5f51d3d6b0ec2acea7eb373d33e215c43015c1f491489c2824b6666