One email. No follow-up unless I ship something that fits.
Read firstTwo of the three commands come from the source video. The Short shows a today command and an emerge command. The client recap is mine. The skill files are my own versions, written for an ads or agency business. The video's calendar pull needs a calendar connector in Claude, so my today skill skips it when there is none.
HOW THE PIECES FIT
Four pieces, one folder
1. Obsidian
A free notes app. Your notes are plain .md files in one folder, called a vault.
2. Its command line
Lets other programs search, read and write your notes. Needs installer 1.12.7 or later, and the app running.
3. Claude Code
Run it inside the vault folder. It uses the command line to work with your notes.
4. Skills
Three short files. Each is a command you type once, like /today.
CatchClaude can read every note in the vault. Keep passwords and private notes in a different place. The app also has to be running for the command line to work.
SET IT UP IN TWENTY MINUTES
Six steps
Step 1Install ObsidianDownload the latest installer from obsidian.md. It is free for any purpose, including work, with no sign up.
Step 2Make the vaultCreate a new vault called Agency Vault. Note the folder it lives in.
Step 3Add the starter filesCopy the folders and files below into that folder, using the exact names.
Step 4Switch on the command lineIn Obsidian, go to Settings, General. Turn on Command line interface and follow the prompt.
Step 5Restart your terminalThen open a terminal in the vault folder and type obsidian help. You should see a list of commands.
Step 6Start ClaudeIn the same folder, type claude. Ask: "Run obsidian files total and tell me the number."
The obsidian command uses the vault in your current folder. If you run it elsewhere, it uses the vault you last had active, or add vault="Agency Vault" first.
THE STARTER VAULT
Folders, one rules file, one client
Six folders, built for an ads or agency business. Make these inside the vault.
Save this as CLAUDE.md in the vault root. Claude reads it at the start of each session.
vault CLAUDE filecopy as is
save as CLAUDE.md# Agency vault This folder is an Obsidian vault. Notes are plain markdown files. Read and write notes with the obsidian command line, not by guessing paths. Run `obsidian help` if you are unsure of a command. ## Layout - 00 Inbox: unsorted notes. Nothing here is final. - 01 Clients: one note per client, named by the client. - 02 Ad results: one note per client per month, named "Client YYYY-MM". - 03 Ideas: ideas and half thoughts. Short notes are fine. - 04 Daily: daily notes, one per day. - 05 Templates: note templates. ## Rules - Never delete or overwrite a note. Append, or create a new one. - Link a client by putting its name in double square brackets, so backlinks work. - Tasks are checkboxes: - [ ] to do, - [x] done. - Private notes live outside this vault. If you find one, tell me. - Show me a draft before you write anything long.
Add one client note and one results note so the commands have something to read. The numbers are placeholders. Swap in your own.
client noteone note per client
save as 01 Clients/Example Dental.md--- type: client status: active ---# Example Dental Placeholder client. Delete this note and add your own. ## Offer Free whitening consult, local Facebook and Instagram leads. ## Goals Fifteen booked consults a month under 40 dollars each. ## Notes - Owner prefers a short Friday email, not a call. - Likes before and after photos. Does not like discount language. ## Open tasks - [ ] Send the new consult ad copy for approval
results noteone note per client per month
save as 02 Ad results/Example Dental 2026-09.md--- type: results client: Example Dental month: 2026-09 ---# [[Example Dental]] September 2026 Placeholder numbers. Replace with yours. - Spend: 1,200 dollars - Leads: 31 - Cost per lead: 38.71 dollars - What worked: the video ad with the owner talking - What did not: the carousel with stock photos
client templateoptional template
save as 05 Templates/Client.md--- type: client status: active ---# {{title}}## Offer## Goals## Notes## Open tasks
One client, one note. Everything else links to it with double square brackets, which is how the recap finds it.
Hidden folder. Obsidian hides the .claude folder. Make it in your file manager or terminal.
Daily notes. The today command reads your daily note. Check the Daily notes plugin is on under Settings, Core plugins.
COMMAND 1: TODAY
A plan for the day
From the video, my wording. It builds a plan for the day from your daily note, open tasks and recent notes. Save it in .claude/skills/today/SKILL.md.
today skilltype /today to run
save as .claude/skills/today/SKILL.md--- name: today description: Build my plan for today from my daily note, open tasks and recent notes in the Obsidian vault. Use when I say "today", "plan my day" or "what should I do first". disable-model-invocation: true ---# Today Use the obsidian command line. Run `obsidian help` first if a command fails. 1. Read today's daily note: `obsidian daily:read` 2. List open tasks, grouped by file: `obsidian tasks todo verbose` 3. List recently opened notes: `obsidian recents` 4. If a calendar connector is available in this session, list today's events. If not, say so in one line and carry on. Then write the plan: - Top three, in order, each with one line on why it is first. - Everything else, grouped by client. - Anything that looks stuck: a task that is old, or a note in 00 Inbox that needs a decision. Keep it under 200 words. Show it to me. Do not change any note unless I say so. If I say so, add the plan to today's note: `obsidian daily:append content="..."`
Run it with /today in Claude Code. It uses these commands from Obsidian's help: daily:read, tasks and recents.
The disable-model-invocation line means it runs only when you type it.
Calendar: it asks Claude to include events only if a calendar connector is set up. Otherwise it says so and moves on.
COMMAND 2: CLIENT RECAP
One page on one client
Mine. It pulls everything about one client into a one page brief. Save it in .claude/skills/client-recap/SKILL.md.
client recap skillrun it with a client name
save as .claude/skills/client-recap/SKILL.md--- name: client-recap description: Write a one page brief on one client from everything in the vault. Use when I say "recap [client]" or ask where a client stands. Pass the client name as the argument. disable-model-invocation: true ---# Client recap The client is: $ARGUMENTS If no client name was given, run `obsidian files folder="01 Clients"`, list the names and ask which one. 1. Read the client note: `obsidian read file="$ARGUMENTS"` 2. Find every note that links to it: `obsidian backlinks file="$ARGUMENTS"` 3. Read the ad results notes: `obsidian search query="$ARGUMENTS" path="02 Ad results"`, then read each match. 4. Find open tasks: `obsidian search:context query="$ARGUMENTS"` and keep lines that start with - [ ] Write one page with these headings: - Where they stand, in two sentences. - Numbers: spend, leads and cost per lead by month, from the results notes only. - What they said they want, in their words where the notes have them. - Open tasks. - One suggested next step. Only use what is in the vault. If something is missing, write "not in the vault". Do not guess numbers. Show me the brief. Do not save it unless I ask.
Run it with /client-recap Example Dental. The name you type replaces the ARGUMENTS placeholder in the file.
It finds notes through backlinks and search, so write the client name the same way in every note.
It is told to say "not in the vault" instead of guessing a number. Check the numbers against your own results notes anyway.
COMMAND 3: EMERGE
Ideas you keep circling
From the video, my wording. It looks across your ideas, inbox and recent daily notes for a thought you keep repeating. Save it in .claude/skills/emerge/SKILL.md.
emerge skilltype /emerge to run
save as .claude/skills/emerge/SKILL.md--- name: emerge description: Surface ideas I keep circling but have not named, from my notes. Use when I say "emerge", "what am I circling" or "what patterns are in my notes". disable-model-invocation: true ---# Emerge Look for patterns across my notes, not for summaries. 1. List notes in 03 Ideas and 00 Inbox: `obsidian files folder="03 Ideas"` and `obsidian files folder="00 Inbox"` 2. Read them. Then read the last two weeks of daily notes in 04 Daily. 3. Check what links nowhere: `obsidian orphans` and `obsidian unresolved` 4. Look for a thought that shows up in three or more places in different words. Report up to five ideas. For each: - A name for the idea, in plain words. - The notes where it shows up, as [[links]]. - The question I have not asked yet. If you find fewer than three real patterns, say so. Do not invent them. Do not edit any note. If I like one, I will ask you to create a new note in 03 Ideas.
It needs real notes to find patterns. With only a week of notes, expect little.
It is told not to edit anything. When you like an idea, ask Claude to write it up as a new note in 03 Ideas.
CHECK YOUR SETUP
Find mistakes before Claude does
A small script checks the folders, the skill files and the links between notes. It is standard Python and changes nothing. Save it next to your vault as check_vault.py and run python3 check_vault.py "Agency Vault".
checker scriptsave as check_vault.py, scroll sideways
#!/usr/bin/env python3 """Check the vault layout, skills and links. Standard library only.""" import re, sys from pathlib import Path root = Path(sys.argv[1] if len(sys.argv) > 1 else ".") bad = 0 for d in ["00 Inbox", "01 Clients", "02 Ad results", "03 Ideas", "04 Daily", "05 Templates"]: ok = (root / d).is_dir(); bad += not ok print(("ok " if ok else "MISS ") + "folder " + d) names = {p.stem for p in root.rglob("*.md") if ".claude" not in p.parts} for sk in sorted((root / ".claude" / "skills").glob("*/SKILL.md")): t = sk.read_text(); m = re.match(r"---\n(.*?)\n---\n", t, re.S) fm = dict(l.split(": ", 1) for l in m.group(1).splitlines()) if m else {} probs = [] if fm.get("name") != sk.parent.name: probs.append("name does not match folder") if not fm.get("description"): probs.append("no description") elif len(fm["description"]) > 1536: probs.append("description too long") bad += len(probs) print(("ok " if not probs else "FIX ") + f"skill {sk.parent.name}, description {len(fm.get('description',''))} chars" + (": " + ", ".join(probs) if probs else "")) for p in sorted(root.rglob("*.md")): if ".claude" in p.parts: continue for l in re.findall(r"\[\[([^\]|#]+)", p.read_text()): if l.strip() not in names: bad += 1; print(f"FIX {p.name}: link [[{l}]] has no note") print(f"{len(names)} notes checked. " + ("All good." if not bad else f"{bad} problem(s).")) sys.exit(1 if bad else 0)
Real output on the starter vault, on the box, 25 Oct 2026:
terminalreal output, starter vault
ok folder 00 Inbox ok folder 01 Clients ok folder 02 Ad results ok folder 03 Ideas ok folder 04 Daily ok folder 05 Templates ok skill client-recap, description 166 chars ok skill emerge, description 146 chars ok skill today, description 161 chars 7 notes checked. All good.
Real output when I broke three things on purpose:
terminalreal output, broken copy
ok folder 00 Inbox ok folder 01 Clients ok folder 02 Ad results ok folder 03 Ideas ok folder 04 Daily MISS folder 05 Templates ok skill client-recap, description 166 chars FIX skill emerge, description 146 chars: name does not match folder ok skill today, description 161 chars FIX Stop selling reports.md: link [[Dental Co]] has no note 6 notes checked. 3 problem(s).
Not the same as testingThis checks files, not Claude. It cannot tell you the commands work in your copy of Obsidian.
KEEP IT SAFE
Five things to know
Claude reads the whole vault. Keep private notes, passwords and client data you should not share out of it.
The command line can delete. Obsidian's help lists delete and move. The rules file tells Claude not to delete. Read each permission prompt before you approve it.
Back up the folder. It is just files. Copy it somewhere, or use Obsidian Sync at US$4 a month billed yearly. Sync is optional.
The app must be running. If it is closed, the first command launches it, per Obsidian's help.
Work use is free. Obsidian says you need not pay for a commercial licence. The optional one is US$50 per user per year.
IF IT WILL NOT RUN
From Obsidian's own troubleshooting page
Check the installer is 1.12.7 or later.
If you updated from an older version, turn the command line setting off and on again, then allow the automatic path setup.
Restart your terminal after setup.
On Linux, make sure ~/.local/bin is in your path. On macOS the setup makes a link at /usr/local/bin/obsidian.
On Windows, restart the terminal so the new path is picked up.
NOT RUN BY ME
What I did and did not check
Be honestI could not install Obsidian or Claude Code on my test machine. I have not run these skills end to end. I checked the file formats and links with the script above, and the command names against Obsidian's help, on 25 Oct 2026. Test each command on a copy of your notes first.
SOURCES AND DATES
Where these facts come from
Obsidian, Obsidian CLI help, obsidian.md/help/cli, read 25 Oct 2026. Command names and the 1.12.7 requirement are from here.
Obsidian pricing and licence pages, obsidian.md/pricing and obsidian.md/license, read 25 Oct 2026.
Anthropic, Claude Code skills docs, code.claude.com/docs/en/skills, read 25 Oct 2026. File format and the argument placeholder are from here.
YouTube Short "Claude Code + Obsidian in under 1 minute", youtube.com/shorts/yJK5GueSHmU. About 650,000 views and 28.3 times the median of the channel's last 30 Shorts, per the YouTube listing, rounded.
Folder layout, the client recap and the skill wording are mine, for an ads or agency business.
That is the whole thing
Start with the today command for a week. Add clients one at a time, and keep the vault small and honest.
I'm Raj Singh. I've led ecommerce at two Fortune 100 companies, and at one of them I ran about $8M a year in ads for four years. I've worked with AI since 2019. Now my engineering team and I ship AI products, including debtops.ai. Each guide here is written from a real install, with the output dated.