Skill: Spending Summary
When to Use
- User asks "how much did I spend [in some period / on some category]"
- User asks for a monthly / weekly / quarterly / YTD summary
- User asks "what's my tax-deductible total for [period]"
- User asks "what's my biggest expense category this month"
- User asks "how often do I spend at [merchant]"
- User asks "am I over budget on [category]"
- User asks for data to send to their accountant
Prerequisites
Reads from the user's Notion Expenses database. Same keys as log-expense:
expenses_database_id: <user's Notion database ID>
expenses_data_source: collection://<data source id>
If the keys aren't configured or the database has zero rows, say so and stop — don't fabricate numbers.
Expected Schema
Same as log-expense:
- Name (title), Amount (number), Currency (select), Category (select), Merchant (text), Date (date), Payment Method (select), Tax Deductible (checkbox), Business (checkbox), Notes (text)
Flow
Step 1 — Parse the ask
Extract filters from the user's message:
- Period — "this month", "last week", "Q1 2026", "2025", "March", "since March 1", "this year"
- Category — any value from the Category select, or keyword matches ("food", "travel")
- Merchant — specific name or pattern
- Tax status — "tax-deductible", "business only", "personal"
- Aggregation — total, average, breakdown by category, top merchants, frequency
Resolve relative dates to absolute dates in the user's timezone (from .claude/rules/operating-rules.md User Profile).
Step 2 — Query
Use mcp__notion__notion-fetch or the Notion data-source query tool to pull the matching rows. Typical filters:
| User ask |
Notion query |
| "How much this month" |
Date between first-of-month and today |
| "Food spending this year" |
Date ≥ Jan 1 2026, Category = "Food & Drink" OR "Groceries" |
| "Tax-deductible Q1" |
Date in Q1, Tax Deductible = true |
| "Biggest category this month" |
Date in month, group by Category, sum Amount |
| "How often at Starbucks" |
Merchant contains "Starbucks", count |
If the dataset is small (under 200 rows), pull everything and aggregate locally for flexibility.
Step 3 — Aggregate
Compute the right shape for the question:
- Total: sum of Amount, grouped by Currency (don't collapse different currencies).
- Breakdown by category: sum + percent of total, sorted descending.
- By merchant: top 5 merchants by spend + count.
- Over time: bucket by week/month, show trend.
- Tax-deductible: total of rows with Tax Deductible = true, with a note about consulting an accountant.
Step 4 — Report
Output format depends on the interface:
On Telegram — compressed, plain text, under 10 lines:
April 2026 spending:
Total: $1,847 USD
Food & Drink: $412 (22%)
Transport: $389 (21%)
Groceries: $285 (15%)
Shopping: $234 (13%)
Other: $527 (29%)
Tax-deductible: $178
In Claude Code — slightly richer, with a one-line observation at the bottom:
## April 2026 Spending
Total: $1,847 USD (12 days into the month)
| Category | Amount | % |
|---|---|---|
| Food & Drink | $412 | 22% |
| Transport | $389 | 21% |
| Groceries | $285 | 15% |
| Shopping | $234 | 13% |
| Software & SaaS | $187 | 10% |
| Business | $140 | 8% |
| Other | $200 | 11% |
Tax-deductible total: $178
Observation: Food & Drink is trending 18% higher than March. Mostly takeout.
Step 5 — Offer the next action
Based on what the user asked, suggest a follow-up:
- If they asked for a monthly summary → offer to export to CSV for their accountant (
mcp__filesystem__write_file, if filesystem MCP is enabled)
- If they're over a mental budget → offer to flag the category in
snapshot.md
- If they asked for tax-deductible → remind them to double-check with their accountant; Athena is not a tax advisor
Rules
- Never invent data. If the query returns zero rows or the database isn't configured, say so plainly.
- Keep currencies separate in the output. Mixed-currency totals are usually wrong.
- Round to the nearest unit in output; keep full precision in calculations.
- If the user asks about a category that doesn't exist in their data, say so and list the categories that do appear.
- Never suggest tax strategies. Surface the deductible total and stop.
Observations the mentor might add
After presenting numbers, Athena's coaching lens can surface:
- Pattern detection: "You've spent $400 on food delivery this month. Last month was $180."
- Underpricing pattern: if the user runs a business and expenses are low relative to stated revenue
- Comfort-zone work: if a category keeps creeping up (e.g. retail therapy after stressful weeks documented in diary.md)
Keep observations tight. One sentence. Never moralize.
Output Format
Always lead with the numbers. Observations come last, one sentence, optional.
Related Skills
log-expense — capture a receipt/invoice into the Expenses DB
compile — synthesize spending history into a longer-term brief ("what are my financial patterns?")
weekly-review — budget audit fits naturally into the weekly review flow
1---2name: spending-summary3description: Query the user's Notion Expenses database and produce spending summaries — by month, category, merchant, tax-deductible status, or arbitrary date range. Use when the user says "how much did I spend", "summarize my spending", "budget for [period]", "tax-deductible total", "what did I spend on [category]", "monthly summary", "spending breakdown", or asks anything analytical about their expenses.4---56# Skill: Spending Summary78## When to Use910- User asks "how much did I spend [in some period / on some category]"11- User asks for a monthly / weekly / quarterly / YTD summary12- User asks "what's my tax-deductible total for [period]"13- User asks "what's my biggest expense category this month"14- User asks "how often do I spend at [merchant]"15- User asks "am I over budget on [category]"16- User asks for data to send to their accountant1718## Prerequisites1920Reads from the user's Notion Expenses database. Same keys as `log-expense`:2122```23expenses_database_id: <user's Notion database ID>24expenses_data_source: collection://<data source id>25```2627If the keys aren't configured or the database has zero rows, say so and stop — don't fabricate numbers.2829## Expected Schema3031Same as `log-expense`:32- Name (title), Amount (number), Currency (select), Category (select), Merchant (text), Date (date), Payment Method (select), Tax Deductible (checkbox), Business (checkbox), Notes (text)3334## Flow3536### Step 1 — Parse the ask3738Extract filters from the user's message:39- **Period** — "this month", "last week", "Q1 2026", "2025", "March", "since March 1", "this year"40- **Category** — any value from the Category select, or keyword matches ("food", "travel")41- **Merchant** — specific name or pattern42- **Tax status** — "tax-deductible", "business only", "personal"43- **Aggregation** — total, average, breakdown by category, top merchants, frequency4445Resolve relative dates to absolute dates in the user's timezone (from `.claude/rules/operating-rules.md` User Profile).4647### Step 2 — Query4849Use `mcp__notion__notion-fetch` or the Notion data-source query tool to pull the matching rows. Typical filters:5051| User ask | Notion query |52|---|---|53| "How much this month" | Date between first-of-month and today |54| "Food spending this year" | Date ≥ Jan 1 2026, Category = "Food & Drink" OR "Groceries" |55| "Tax-deductible Q1" | Date in Q1, Tax Deductible = true |56| "Biggest category this month" | Date in month, group by Category, sum Amount |57| "How often at Starbucks" | Merchant contains "Starbucks", count |5859If the dataset is small (under 200 rows), pull everything and aggregate locally for flexibility.6061### Step 3 — Aggregate6263Compute the right shape for the question:6465- **Total:** sum of Amount, grouped by Currency (don't collapse different currencies).66- **Breakdown by category:** sum + percent of total, sorted descending.67- **By merchant:** top 5 merchants by spend + count.68- **Over time:** bucket by week/month, show trend.69- **Tax-deductible:** total of rows with Tax Deductible = true, with a note about consulting an accountant.7071### Step 4 — Report7273Output format depends on the interface:7475**On Telegram** — compressed, plain text, under 10 lines:7677```78April 2026 spending:79Total: $1,847 USD80Food & Drink: $412 (22%)81Transport: $389 (21%)82Groceries: $285 (15%)83Shopping: $234 (13%)84Other: $527 (29%)8586Tax-deductible: $17887```8889**In Claude Code** — slightly richer, with a one-line observation at the bottom:9091```92## April 2026 Spending9394Total: $1,847 USD (12 days into the month)9596| Category | Amount | % |97|---|---|---|98| Food & Drink | $412 | 22% |99| Transport | $389 | 21% |100| Groceries | $285 | 15% |101| Shopping | $234 | 13% |102| Software & SaaS | $187 | 10% |103| Business | $140 | 8% |104| Other | $200 | 11% |105106Tax-deductible total: $178107108Observation: Food & Drink is trending 18% higher than March. Mostly takeout.109```110111### Step 5 — Offer the next action112113Based on what the user asked, suggest a follow-up:114115- If they asked for a monthly summary → offer to export to CSV for their accountant (`mcp__filesystem__write_file`, if filesystem MCP is enabled)116- If they're over a mental budget → offer to flag the category in `snapshot.md`117- If they asked for tax-deductible → remind them to double-check with their accountant; Athena is not a tax advisor118119## Rules120121- Never invent data. If the query returns zero rows or the database isn't configured, say so plainly.122- Keep currencies separate in the output. Mixed-currency totals are usually wrong.123- Round to the nearest unit in output; keep full precision in calculations.124- If the user asks about a category that doesn't exist in their data, say so and list the categories that do appear.125- Never suggest tax strategies. Surface the deductible total and stop.126127## Observations the mentor might add128129After presenting numbers, Athena's coaching lens can surface:130- Pattern detection: "You've spent $400 on food delivery this month. Last month was $180."131- Underpricing pattern: if the user runs a business and expenses are low relative to stated revenue132- Comfort-zone work: if a category keeps creeping up (e.g. retail therapy after stressful weeks documented in diary.md)133134Keep observations tight. One sentence. Never moralize.135136## Output Format137138Always lead with the numbers. Observations come last, one sentence, optional.139140## Related Skills141142- `log-expense` — capture a receipt/invoice into the Expenses DB143- `compile` — synthesize spending history into a longer-term brief ("what are my financial patterns?")144- `weekly-review` — budget audit fits naturally into the weekly review flow