Money was always on the list for Pai. I wanted the same thing I get for school: a short message after work that tells me where things stand, so I don't have to open three apps to find out. My checking account, when my credit card is due, how my brokerage and retirement accounts did today.
It was also the feature I was most careful about. "An AI agent with access to my bank" is a sentence that should make anyone a little nervous, me included. So before writing any code I wrote a design note, and most of it was about what Pai would never be able to do.
Read-only, all the way down
Pai connects through Plaid, which sits between apps and banks. I only use Plaid's read-only products: Transactions, Balance, Investments and Liabilities (that last one is where the card's due date and minimum payment come from). Pai never uses Transfer or Payment Initiation. It can't move money, because the code to do that doesn't exist and the access to do it was never asked for.
Linking an account never involves a password going through Pai. I send /money link bank in
Telegram and get a button that opens Plaid's own page in the browser. I log in to my bank there,
Pai checks back every 30 seconds, and when it's done it says how many accounts it linked. The link
only works once and only for 30 minutes. If I back out, nothing is saved.
What Pai gets back is an access token. It encrypts that with a key that only exists in its
environment, stores it in its database, and never shows it in Telegram. Tokens are left out of the
logs, redacted from /fix, and wiped from the weekly backup Pai sends me.
Every number behind a spoiler
Telegram has spoiler formatting: text that stays blurred until you tap it. Every amount, card number and date in a money message is behind one. The first line of the message never has a number in it, so notifications on my lock screen just say "💵 Money recap inside".
It sounds like a small thing, but it means I can let Pai send money updates at all. I check my phone at work, around other people, all day.
The model doesn't see my money
This is the part I'm most happy with. By default, Claude never sees a single number from my accounts.
When I ask "how much did I spend this week?", the question goes through the normal tool loop, but the answer doesn't come back through the model. Code runs the query against Pai's own database and sends the result straight to me, behind spoilers. The model only knows that it answered a money question.
Money also stays out of everything else that involves a model. It never goes into long-term
memory, the background check-ins or the /fix agent.
What it actually sends me
- A sync every afternoon: balances, new transactions, the card's due date, and a snapshot of my holdings, so daily gains and losses come from my own data.
- After my weekday shift, a money section following the regular recap.
- A spending line in the Sunday review.
- Answers to questions in chat.
- A message once a day if a connection needs logging in again.
My brokerage account and my retirement account stay separate everywhere, and the retirement one is labeled as retirement. Pai doesn't give advice and doesn't make picks. It tells me what's there.
/money off pauses all of it without deleting anything.
Where it's at
Right now it's all running against Plaid's Sandbox, with fake banks and fake money. The next step is Plaid's Trial access for my real accounts, and there are two things I haven't been able to check yet: whether linking from my phone works on that plan, and whether my brokerage returns investment data through Plaid at all. If it doesn't, Pai shows the bank side and says so.
What I wanted to get right before any of that was the shape: read-only, hidden by default, and the model only seeing what it needs to answer the question I asked. A real account goes in after that, not before.