We Built an Agency Operating System in Obsidian. Here’s What We Learned.
Reports in a minute. Content that sounds exactly like me. A system that knows every client decision we’ve ever made and tells me what to write next based on what I just shipped.
That’s not a pitch. That’s how GreyWolf runs today.
And before you roll your eyes at another “AI changed my agency” post, let me be specific about what we actually built, why it works, and what we tried first that didn’t.
The Problem Nobody Wants to Admit
Running a small agency is a context-switching nightmare.
You’re halfway through a strategy doc for one client when a question comes in about another. You stop. You try to remember what you decided three months ago about their positioning. You search Slack. You search Google Drive. You find something that might be the right doc — or might be a superseded version of it. You spend 20 minutes excavating context that should have been instantly accessible.
Then you go back to the strategy doc. The thread is gone.
We tried to fix this the normal way. Asana for task management. Notion for client knowledge. Google Drive for documents. Slack for communication. We had the whole standard tool stack.
And every tool was useful in isolation. The problem is that they fragment knowledge instead of compounding it. Insights from a client meeting live in Notion. The content we produced from those insights lives in Google Drive. The decision about why we made a specific creative choice is buried in a Slack thread from eight months ago. The new team member trying to get up to speed has to go to four different places to understand one client — and even then, they’re getting an incomplete picture.
The tools don’t talk to each other. The knowledge doesn’t accumulate. You end up rebuilding context from scratch every time.
That’s what we were trying to fix.
What We Tried First
We went through the Notion phase. Everyone does. Notion is genuinely flexible and I don’t want to kick it — it’s a fine tool for a lot of things.
But Notion has a fundamental problem for our use case: it’s a database with a document interface. The knowledge lives in tables and linked databases and block references that start making sense after you’ve set them up, but don’t naturally build the kind of associative connections you want when you’re trying to understand how one thing relates to another.
We also tried a fairly elaborate Google Drive structure. Folders within folders. Naming conventions. The whole thing. The problem with that is that Google Drive is a filing cabinet, not a knowledge base. You can find things if you know what you’re looking for. You can’t discover connections you didn’t know existed.
What we needed was something that felt less like a database and more like a brain. Something where a file about a client’s positioning could be linked directly to the email campaign that expressed that positioning, which was linked to the results of that campaign, which fed back into an updated positioning doc.
A web of knowledge, not a hierarchy of folders.
That’s what sent me down the Obsidian rabbit hole.
What We Built
GreyWolf OS is our agency operating system. It lives entirely in Obsidian, with Claude Code running inside it as an AI layer that can read, write, and act on every piece of context we’ve accumulated.
Here’s the architecture, briefly.
Client context that actually compounds
Every client has a /context/ folder containing their messaging, personas, competitive landscape, offerings, and voice DNA. Not a single overview document — a structured set of files, each focused on one thing, all wikilinked to each other.
When we do new work, Claude loads this context first. Every time. It doesn’t ask me to remind it who the client is or what they stand for. It already knows — because that knowledge is encoded in files it can read, not in my head or in a Slack thread.
And the context builds. After every meaningful meeting, we process the transcript and update the relevant context files. The positioning doc becomes more accurate over time. The personas get sharper. After six months, the context folder for an established client is genuinely deep — and every piece of work we produce reflects that depth.
The jobs-only system
We don’t use tasks. We killed tasks.
Everything is a job. From a 15-minute email reply to a quarter-long campaign strategy. Jobs are T-shirt sized (XS through XL) instead of being categorized into task types that require taxonomy decisions at capture. A job gets a folder. Inside that folder: the brief, the deliverables, and a chronological workings file.
The folder is the job. Everything related to that piece of work lives in one place. When it’s done, it gets archived. Clean.
There’s a unified kanban (/Work.base) that shows every active job across every client in one view. No switching between project management tools. No reconciling what’s in Asana with what’s in the calendar with what’s in someone’s head. One view. All the work.
The content pipeline that runs itself
This is the part I find most interesting, because it solves a problem I didn’t think had a clean solution.
Content marketing for agencies is a bit of a joke. Everyone knows you should be publishing thought leadership. Nobody does it consistently because nobody has time — the actual client work takes all the time, and content is always the thing that gets pushed.
But here’s what we figured out: the client work IS the content. Everything we produce for a client is a potential article, case study, or framework piece. The insight from the insurance company’s record month becomes a blog post. The email sequence we built for a wellness brand becomes a framework article. The operating system we built for ourselves becomes exactly this article.
We do a weekly review that scans everything we’ve shipped that week and asks: what did we learn? What problem did we solve that other people have? What framework did we apply that’s worth sharing? It generates 5-7 content ideas per week, each pre-loaded with the hook, the problem, the approach, and the specific data points from the actual work.
The content calendar stops being a blank page you stare at. It becomes a queue of real insights waiting to be written up.
Voice DNA so everything sounds human
This is the piece that makes the AI layer actually useful rather than productive-but-generic.
We have a voice DNA file for my writing — 400 lines of documented patterns, rhythms, vocabulary choices, rhetorical tools, things I say and things I would never say. It’s extracted from years of my actual writing. When Claude writes anything as me, it loads that file first.
The result is that the output sounds like me. Not corporate-Claude. Not marketing-team-polish. Me.
That’s not a small thing. The reason most AI-assisted agency content is bad isn’t because the AI can’t write — it’s because nobody’s told it who it’s writing as. Generic writing is the default. Voice DNA breaks the default.
The Technical Stack
Obsidian is the vault — the place where everything lives. All the client context, all the job files, all the knowledge articles, all the templates.
Claude Code runs in a sidebar plugin inside Obsidian. It can read any file in the vault, write to any file, execute multi-step workflows via custom skills, and make decisions based on context it’s accumulated over time.
The skills are the glue. We’ve built custom skills for: processing meeting transcripts, running the weekly review, writing job briefs, generating content ideas, writing articles in my voice. Each skill knows what context to load, what format to output, and what to do next.
Cron automation handles the things that should happen without prompting — overnight research on links saved from my phone, weekly review triggers, backup and git sync.
The whole thing runs on a laptop. No SaaS subscription. No integration hell. One vault, one AI, everything in one place.
What Actually Changed
The thing that surprised me most isn’t the speed improvement, even though that’s real — reports that took two hours now take 15 minutes, because Claude already knows the client and the brief is already structured.
The thing that surprised me is the compounding.
The system gets smarter over time. Each client context file gets richer. Each completed job adds to a library of what we’ve tried and what worked. When we start a new piece of work, Claude doesn’t start from zero — it starts from everything we know. And it surfaces connections I wouldn’t have made consciously: “We solved a similar positioning problem for the insurance client six months ago — here’s what we found.”
That’s institutional memory. For a small agency, that’s a competitive advantage.
The other thing that changed: content happens as a byproduct of client work, not as a separate initiative that competes with it for time. This article exists because the weekly review surfaced it. The brief was pre-loaded with the hook and the key points. The writing took an afternoon, not a week of agonizing over what to write.
You get paid for the client work once. The insight from that work pays you in perpetuity if you have a system to capture it.
If You Want to Build Something Like This
Start smaller than you think you should. The temptation is to build the whole system before you use any of it. Don’t.
Start with one client. Build their context folder. Add the voice DNA file. Get used to loading context before you start a piece of work. See if the output improves.
It will improve. Then you’ll want to expand.
The jobs system comes next — kill the task list, replace it with job folders, try the T-shirt sizing for two weeks. The content pipeline comes after that, once you have a few months of completed work to feed it.
The system compounds only if you use it consistently. If you build it and don’t commit to it, it’s just a fancy folder structure.
Commit. Use it for every client. Update the context files after every meeting. Do the weekly review even when you’re busy, especially when you’re busy.
Six months in, you’ll have something that genuinely makes you better at your job — not because the AI is smart, but because the accumulated context around it is deep.
