AI CFO Brain: Claude + Granola + Obsidian
Part 1: Exploring and testing an AI OS for CFOs
Did you miss me?
How I’ve Experimented with AI
Like every CFO not looking to get replaced in the next 12 months, I’ve been diving DEEP into AI.
But most (all?) of the write-ups I’ve seen on AI for CFOs have been garbage or clearly not solving a true CFO use case.
I don’t want to make a one-time dashboard. I don’t want some half-built 3-statement model. I certainly don’t need a prompt sheet to answer a one-time question.
In reality, how CFOs should experiment and adopt AI is heavily based on their personal skillset, team capabilities, position within company (Accounting vs. COO), and other company factors (size, growth, etc.).
What sparked my first successful use case as CFO was a conversation with my friend Patrick McGovern with a quick text of “Have you tried Claude Code yet?”. Followed by “Give it access to Granola”. My first thought was “I’m not a coder” and my second “I don’t really have a taste for granola”.
A few clicks and searches later I was going down the YouTube rabbit hole of building a “Second Brain”.
Unfortunately every tutorial was geared towards content creators. I wasn’t trying to just remember vague topics and frameworks and copy my writing style. I needed something MUCH more tactical. I needed something in the weeds I could use every single day and week to help set the cadence of my team and the broader organization
I needed something with Brains + Data/Context + Memory. Highly customized to me and my workflows.
I ended on three main tools which handle a different layer of the system:
Granola
Obsidian
Claude Code
Granola for CFOs
Granola is the data and context collection mechanism of the system.
I love that not only is powerful and useful, but customizable, local, privacy focused, and SOC2 compliant (make sure to sign up for the enterprise version, not Free). You can easily select the meetings that are important while choosing NOT to record private/sensitive/1:1 meetings.
In its natural form, Granola spits out a summarized view of the conversation with decent diarization of who said what. It then gives you an option to chat with the transcript and create follow up emails, etc.
The real power comes from their custom Recipe functionality. This gives you the option to customize the summary notes.
Your recipe allows you to add the CFO twist on what’s normally a generalized summary. I need numbers, due dates, context, and exactly what’s been agreed upon.
Here’s the version I use:
Update my meeting notes to include these details.
I'm the CFO of SITE Technologies. I oversee not only finance but broader strategic initiatives including growth, hiring, strategy and ops. I'm particularly focused on tracking tasks and deliverables for cross team projects. (Do not include this context in the notes themselves)
Include comprehensive explanations, numbers/data points, reasoning behind decisions, full context for each topic.
Include more detailed notes for any of the following topics: [[insert your personal important topics here]]Finish with ONE CONSOLIDATED tasks for myself (Thomas) and deliverables for any attendee on the call
Once complete add "SUMMARIZED WITH DETAILED MEETING" to the very end of the notes
I haven’t even experimented that much with the core prompt, but this gets me almost exactly what I need every time. Note: the final 3 sentences might seem obscure, but they’re important for the next part.
Obsidian for CFOs
Obsidian is the memory layer of the system.
Memory is what separates and unlocks AI/LLMs from being able to process useless one-time prompts to thinking and accomplishing real tasks.
Obsidian by itself is a complicated note taking app. Power users will hate that definition but go watch YouTube if you want a better definition and to get the idea and power of this tool.
The important concept here is that Obsidian goes beyond simple note taking and gives you a framework to link notes and ideas across any dimension allowing you or an AI system to better understand concepts and links between such. In addition, its open infrastructure and .md filetype allows it to be heavily compatible and scalable with AI systems and it also runs locally so the system remains SOC2 compliant.
Step 1: Sync Granola with Obsidian
The first step to setting this up is to automatically pull in all your Granola data. There’s a great plugin called “Granola Sync” that allows you do this effortlessly.
I like to import all of my Granola calls into a folder called “DATA_Granola” with the date and system name specified . You can ask your favorite LLM how best to set this up.
It’s also important to keep the meta data attached: granola_ID, title, type, created, updated, attendees.
Step 2: Set up the rest of your Brain (folders)
Here’s the tricky part where you need to combine art, science and your personal flair.
Folders is what allows you to organize the inputs and outputs of the system. Every influencer has a different set up, but in reality you need to build it for your specific thought patterns, daily/weekly processes, and geared towards a CFO.
Here’s mine:
01-Daily. This is my daily organization. It captures to-do lists for the day, meeting summary that occurred that day and updates on specific projects. This sets the pace for the day.
02-Projects. Any sort of ongoing project for myself, my team or the organization which I help track or organize gets a separate .md.
Contacts. Any contacts that I regularly need to communicate and organize with gets a separate .md.
DATA_Granola. Discussed above.
DATA_Other. Other notes best captured separately from daily notes (hand written meetings etc.)
Best practice is generally to keep the folders as broad as possible so you don’t get too much complexity.
Step 3: Add context files/infrastructure
Two extra pages I’ve added is a contact page with a database of all contacts and a project page of quick notes on all active projects.
00 Contact Index. Held in the Contacts folder.
00 proj Index. Held in the “02-Projects” folder.
I actually have no idea if these are needed or “best practice”, but they’ve worked well for as an additional layer of organization and in theory should make it easier for AI (or myself) to find the right .mds faster.
Claude Code for CFOs
Claude Code is the brains and access point of the system.
You now have your data in Obsidian and organized the way you think.
The final part is plugging Claude Code into the system to run. To do this properly you need to download VS Code and hook everything up properly. Again check out YouTube for more detailed instructions. I should also note to keep this SOC2 compliant you need to be on an enterprise version of Claude.
Every influencer has been using the magic term: Skills.
They sound amazing and complicated and not accessible to non-coders. Guess what. You literally just ask Claude Code to build them for you and it works.
I’m still VERY early in my journey of developing this system, but so far I’ve created two skills that run my system:
/call. This Skill processes all of the raw calls into the different buckets of Today, Contacts, and Projects and updates the call notes to a more standardized format I prefer.
/today. This Skill takes all of the notes and data in the system to generate a new daily note which spits out a to-do list
Here’s an example prompt to generate /call:
I want to create a reusable skill (slash command) called “/call” or “/process-call-notes” that automates turning raw call notes into a fully linked Obsidian knowledge base.
The skill should work like this:
- Scan a folder called DATA_Granola/ for any Markdown files that haven’t been processed yet (look for a frontmatter flag like ai_processed: true or false — if it’s missing or false, it’s unprocessed).
- Process the files one by one, starting with the oldest (sort by the date in the filename, like YYYY-MM-DD_call_...).
- Finish every step for one file completely before moving to the next.For each note:
1. Enrich it in place:
- Resolve the attendees (names or emails) by cross-referencing against my Contacts/00 contacts index.md. Turn resolved people into Obsidian wiki links [[Lastname, Firstname]] and add them as an attendee_tags list in the frontmatter. Skip tagging me (Thomas Robb). If someone can’t be resolved, ask me about that one person only — don’t batch questions.
- Analyze the call content and tag relevant projects. Read my project index at 02-Projects/00 proj index.md to know active projects. For each major section in the note, append project links inline like: ### Section Title → [[proj_XXX]] | [[proj_YYY]]. If it’s unclear which project fits a topic, ask me one clarifying question at a time with options (e.g., create a new project, link to an existing one, or skip). Don’t ask about multiple things at once.
- After tagging, add a clean “projects” frontmatter list with the unique project links.
- Collect all action items/next steps from anywhere in the note, move them to the top (right after frontmatter) under a “### Action Items” heading as checkboxes. Tag my own tasks with #task and others’ with #track (linking their name where possible). Clean up any duplicates in the original body.2. Once the note is enriched, propagate the information:
- For each attendee, update (or create) their contact file in Contacts/. Add a new entry at the top of the “## Call Summaries” section with a short 3–5 bullet summary focused on decisions/outcomes, including project links where relevant. Don’t touch the “To Discuss” section.
- For each tagged project, update the project file in 02-Projects/ by adding a dated section with the relevant content from this call (only the parts tagged to that project).
- Update the daily note for the call date (in 01-Daily/) by adding a quick entry under a “### Calls” section.
- Finally, mark the original file as processed by adding ai_processed: true to its frontmatter.Key rules for the skill:
- Always use Obsidian-style [[double bracket wiki links]].
- Never duplicate content across files — only copy what’s relevant.
- Be conservative and interactive: ask one question at a time when something is ambiguous.
- Work chronologically and complete one file fully before the next.
- Skip any file that’s already marked as processed.
Here’s an example prompt to generate /today:
I want you to create a reusable Claude Code skill called “/today” (or “/daily-brief”) that automatically generates or updates my daily note with a clean, synthesized daily brief.
The skill should do the following:
- Create a new daily note at `01-Daily/YYYY-MM-DD.md` using today’s actual date. If the file already exists, just open it instead of overwriting.
Gather context intelligently by reading multiple files in parallel:
- Read the last 5 daily notes from the `01-Daily/` folder (sorted newest first). From them, collect all unchecked tasks from “Today” and “This Week” sections, the full “Waiting On Others” table, and any loose action items.
- Read the project index at `02-Projects/00 proj index.md` to understand all active projects.
- Identify the 4–6 most recently active projects (based on mentions in the recent daily notes) and read their project files. Pull the most recent status and any open next steps.
- Also check every project in the index — if a project file exists but is basically empty (only frontmatter, no dated sections or content), flag it as needing initial setup.Then synthesize a focused daily brief:
- In the **Today** section: Pick the 3–5 highest-priority unchecked items. Prioritize anything with deadlines, items blocking other people, or tasks that have been sitting unchecked for several days.
- In the **This Week** section: Carry over the remaining relevant unchecked weekly items. Drop anything that looks stale or no longer applies.
- For **Waiting On Others**: Combine waiting items from recent notes, deduplicate by person + topic, keep the “Since” date accurate, and remove anything that appears resolved in later notes.
- For **Key Project Status**: Create a short 1–3 bullet update for each of the 4–6 most active projects, including current state and a concrete next step. Also, for any completely empty projects, add a specific starter task in the Today section like “- [ ] **Define scope for [[proj_XXX]]** — project file is empty”.Output the daily note using this clean structure:
## To Do
### Today
- [ ] [urgent item] — [short context or deadline]### This Week
- [ ] ...---
## Waiting On Others
| Who | What | Since |
|-----|------|-------|
| ... | ... | ... |---
## Key Project Status
### [[proj_SITE_XXX]] — Short Name
- **Status:** Current state in one sentence
- **Next:** Concrete next action + owner if known---
## Calls
(Leave the Calls section empty — it will be filled later by another skill)
Key rules:
- Always use Obsidian [[double bracket wiki links]] for projects and people
- Never invent tasks out of thin air — only surface or logically derive them from existing notes and project files
- Avoid duplicating the same task in both Today and This Week
- Keep everything concise and actionable
- Be smart about prioritization and cleaning up stale items
You might be thinking: Is that it?
Yes.
The reality is you need to explore on your own and experiment with what works for you.
Frankly if you aren’t interested in the experimental phase this early in adopting AI then you’re NGMI.
With Blessings of Strong NRR,
Thomas
