In my app Superego (https://github.com/superegodev/superego, shameless plug) I use structured JSON documents precisely for this reason, because with a well-defined schema the LLM can write TypeScript functions that must compile. This doesn't guarantee correctness, of course, but it actually goes a long way.
But doing my taxes was a use case I hadn't considered, and it's actually pretty neat! I'll be trying it myself next month (though I'm not looking forward to it).
Mar 28, 2026
6 min
An opinionated workflow showcasing how I used Claude and Obsidian together to help with my personal tax filing in Canada
Recently, I found myself in the same part of the year when I do my wifeβs and my personal taxes here in Canada. Personal income tax filing deadline for most Canadians is usually end of April each year.
It turns out this was also the first year where I had amazing AI tools at my disposal to help me with personal income taxes.
Apart from work, I have been using both ChatGPT and Claude for my personal life as well, which has included varied prompts and workflows such as looking up what engine oil my car takes, or using Notion MCP to create a shopping list for building a deck in my backyard. In short, most of my personal usage has been rather rudimentary compared to my extensive and detailed workflow at work.
I would not call my personal tax situation a complex one, however, given that I manage it for both me and my wife, I would want to optimize it as much as possible.
While collecting all our tax related documents, forms and emails, I came up with a workflow based on Claude Code CLI and Obsidian that I found very useful in trying to get a detailed picture of my tax situation β backed by strong personal context and deterministic calculations using Python.
I set up a working directory for my tax related documents and opened that as a vault in Obsidian.
If you are unfamiliar with Obsidian, you are missing out a lot on what markdown can do for you especially for the agentic world so I highly recommend you familiarize yourself with this amazing tool today.
Obsidian also has excellent support for viewing PDFs which I found very useful for reviewing my tax forms without leaving the app.
Here is a sample structure that I came up with:
obsidian_vault
βββ main.py
βββ pyproject.toml
βββ README.md
βββ taxation
β βββ Currency Rates
β β βββ 2024.md
β β βββ 2025.md
β β βββ 2026.md
β βββ Pasted image 1.png
β βββ Pasted image 2.png
β βββ PersonalTax
β β βββ 2026
β β βββ Wife
β β β βββ CLAUDE.md
β β β βββ Etrade Misc Docs
β β β βββ FILED.md
β β β βββ Forms
β β β β βββ T4_2025.pdf
β β β βββ Payroll
β β β β βββ PayrollEarningStatementReport_JanFeb_2025.pdf
β β β β βββ PayrollEarningStatementReport_MarchDec_2025.pdf
β β β βββ PLAN.md
β β βββ Rafay
β β βββ ESPP.md
β β βββ Charles Schwab Docs
β β βββ CLAUDE.md
β β βββ Contribution Receipts
β β β βββ rsp-contribution-receipt.pdf
β β βββ FILED.md
β β βββ Forms
β β β βββ T4_2025.pdf
β β βββ PLAN.md
β βββ References
β βββ Definitions for capital gains Canada.md
βββ uv.lock
βββ Welcome.md
plaintext
As you might have noticed, I also set up a Python virtual env with uv and installed the following libs to help Claude extract relevant information from PDFs along with a custom bash function for quick invocations by Claude.
markitdown[all] - an open source library from Microsoft to extract information in markdown format, excellent for LLMS since they work well with those.ocrmypdfpdf2md() {
local input="$1"
local venv_markitdown="/Users/rafaypersonal/Documents/obsidian_vault/.venv/bin/markitdown"
local venv_ocrmypdf="/Users/rafaypersonal/Documents/obsidian_vault/.venv/bin/ocrmypdf"
# Try direct conversion first (works for text-based/tagged PDFs)
if "$venv_markitdown" "$input" 2>/dev/null; then
return 0
fi
# Fall back to OCR for scanned PDFs
local output="${input%.pdf}_ocr.pdf"
"$venv_ocrmypdf" --skip-text "$input" "$output" && "$venv_markitdown" "$output"
}
bash
I used the CLAUDE.md file to seed the financial context such as where to find currency rates for ACB calculations, tax forms, RRSP receipts, etc. and asked Claude to update the PLAN.md for what I need to do next along with checklists to mark each step as completed once done. I cross checked all the ACB calculations and corrections that it made against an online ACB calculator to make sure it did not hallucinate on my tax filing, given that it was my first time.
Where necessary, I generously seeded the context with the following:
ESPP.md file that contained any relevant text with information about my ESPP tax withholding, over-contribution, etc.taxation/Currency Rates containing currency rates for the relevant years so that Claude can use them for ACB calculations. I pulled these from https://www.exchange-rates.org/ βCLAUDE.md files.With this setup, Claude was actually able to find issues with my wifeβs last yearβs ACB calculations where we mistakenly used the discounted purchase price instead of the FMV to report capital gains.
The tax filing software that I used (Wealthsimple Tax) allows you to generate a draft T1 once you have input all the information. I used that along with markitdown and ocrmypdf to populate FILED.md and asked Claude Code CLI to audit all the information before I submitted the filing.
I found Claude Code CLI much more convenient and flexible compared to the Claude desktop app. Combined with Obsidian and a terminal like Ghostty β, managing personal life stuff with Claude Code CLI becomes a breeze once you get the hang of it. Having used Notion MCP with the Claude desktop app as well, I would say Claude Code CLI + Obsidian is a step above, both in terms of speed and token usage β the main trade-off being that unlike Notion, you canβt really take the Obsidian workflow with you on your phone (or perhaps you can with Claude Remote Control?).
Overall, I was pretty happy with how this turned out. It did not replace my own judgement β I still reviewed every number and cross-checked the important bits β but it made the whole process a lot more organized and honestly less stressful. If you manage taxes for more than just yourself, even a lightweight setup like this goes a long way. Give it a shot before the April deadline sneak up on you in Canada! π
Disclaimer: This is not a tax adivce.