It's 1:45pm. You have a discovery with Acme Corp at 2pm.
Your CRM tells you Acme is Stage 2 — Qualified, owner is Jane, ARR band is $25-50M. Useful — and not what you actually need.
What you need walking into that room:
- Why we reached out the first time
- What the contact said two quarters ago
- Which signal made us score them a 9
- Who else at the company we've touched, and what they said
- What changed at Acme between January and now
That intel exists. It's spread across last campaign's reply log, a Notion page someone wrote in March, a Fathom transcript from a discovery that went sideways, a Slack thread two operators remember, and an AE's head who left in April.
So you spend twenty minutes Frankensteining it back together from six tabs. Then you walk in.
Every AE does this. Every RevOps lead has watched it happen. The CRM was supposed to fix it; it doesn't. Notion was supposed to fix it; it didn't. Adding a tenth tool to the stack will not fix it either.
The thing actually missing is a place for the story of an account to live — one place per account, agents can read it before they act, every signal that fires gets appended automatically, and six months in, the file is sharper than any human could rebuild from scratch.
That's what this repo is.
- Founder-led GTM teams where the founder is the AE, the CSM, and the marketer, and the intel that lives in their head is the company's main liability
- RevOps leaders who have watched the CRM-notes-field experiment fail three times and want a real narrative layer their agents can actually use
- Lean GTM operators running outbound + content + customer expansion against the same target list, where every channel needs context the others generated
- Anyone shipping AI agents into a sales motion who has discovered that agents need persistent context to be useful past their first prompt
If you have less than ~1,000 active accounts and you are tired of intel evaporating between touches, this is for you. Past that, the architecture is still useful — but read docs/failure-modes.md first; you'll be planning a migration earlier than you think.
One markdown file per target account. Agents read it before every score, every email, every call. Every signal gets appended automatically. After six months, every account has a compounding dossier your CRM can't store.
This is the foundational layer that turns a flat markdown vault into a compounding GTM intelligence asset — applied to one specific problem: account-level intel that lives across CRM, Slack, Fathom, your inbox, and your head.
It is a working system, not a tutorial. Drop it onto an agent that supports the Claude Code Skill spec (Claude Code, Cursor, Cline, Windsurf — anything that reads markdown skills) and the slash commands work immediately.
Input: a domain. That's it.
Output:
- A per-account markdown file in
vault/accounts/<domain>.mdwith YAML frontmatter, firmographics, a chronological signal log, a people graph, an interaction history, open questions, and an agent-notes appendix. - A
/dossier <domain>slash command that returns a 5-bullet brief in ~4 seconds. - A scheduled
heartbeat.pyjob that watches signal sources, appends new entries to the right account file, and surfaces what changed this week. - A
/account-appendslash command that writes a new signal or interaction into the correct file with the right metadata.
Your CRM stores fields: name, title, domain, stage, ARR. It is bad at stories: why you reached out, what the contact said two quarters ago, which signal made you score this account a 9, what changed at the company between touches.
That intel lives somewhere now — a Notion page nobody updates, a Fathom transcript nobody re-watches, a Slack thread two operators remember. The vault makes it queryable. Agents read it before they act. The CRM stays the source of truth for structured fields; the vault is the source of truth for narrative.
Concretely:
| CRM | Vault | |
|---|---|---|
| Firmographics, stage, ARR | yes | mirrored in frontmatter |
| Signal log, "why we reached out" | weak (notes field) | chronological, structured |
| People graph, multi-thread | weak | wikilinks [[person]] |
| Interaction log across channels | partial | unified |
| Agent-readable | needs SQL or an integration | one grep |
| Compounds over time | only with discipline | by design |
- One file per account (
vault/accounts/<domain>.md). The filename is the domain. No exceptions. This is your join key against everything else. - YAML frontmatter mirrors the CRM (account id, stage, tier, owners, status). Agents filter by frontmatter — fast, no full-file reads.
- Body is the story. Signal log, people graph, interaction log, open questions. New entries go at the top of each section (newest-first).
- Agents append, never rewrite. The heartbeat job and slash commands write below an explicit marker so human edits and agent edits don't fight.
- Summary at the top, log below. A 5-bullet summary lives near the top of the file. Agents read the summary by default; full log on demand. This keeps token cost flat as the file grows.
account-intelligence-vault/
├── README.md
├── LICENSE
├── CLAUDE.md
├── .gitignore
├── vault/
│ ├── README.md
│ ├── _templates/
│ │ ├── account.md
│ │ ├── interaction.md
│ │ └── person.md
│ ├── accounts/
│ │ └── EXAMPLE-acme-corp.md
│ ├── people/
│ │ └── EXAMPLE-jane-doe-acme.md
│ └── signals/
│ └── signal-catalog.md
├── .claude/
│ └── skills/
│ └── account-vault/
│ └── SKILL.md
├── scripts/
│ ├── requirements.txt
│ ├── heartbeat.py
│ ├── ingest_signal.py
│ └── summarize_account.py
├── docs/
│ ├── architecture.md
│ ├── crm-mirror.md
│ └── failure-modes.md
└── examples/
├── pre-call-dossier.md
├── outbound-pre-send.md
└── weekly-account-review.md
# 1. Clone
git clone https://github.com/tga-cheetung/account-intelligence-vault.git
cd account-intelligence-vault
# 2. Install Python deps (one-shot summary + heartbeat)
pip install -r scripts/requirements.txt
export ANTHROPIC_API_KEY=sk-ant-...
# 3. Drop the skill into Claude Code's skills directory
mkdir -p ~/.claude/skills/account-vault
cp .claude/skills/account-vault/SKILL.md ~/.claude/skills/account-vault/
# 4. Open the vault folder with Claude Code
cd vault
claude
# 5. Inside Claude Code:
> /account-vault new acme.com
> /account-vault dossier acme.comThat is the whole integration. Claude Code reads markdown files natively; the skill teaches it the schema and the slash commands. No MCP server, no plugin, no API key beyond your Anthropic key.
Three places to edit; the rest of the repo is generic.
vault/signals/signal-catalog.md— the signal taxonomy. Out of the box it has ten common B2B signals (leadership change, funding, hiring surge, product launch, partnership, layoffs, post engagement, conference appearance, competitor mention, technographic change). Add yours. The taxonomy is what theingest_signal.pyscript and slash commands route off.vault/_templates/account.md— the per-account schema. Add ICP-specific frontmatter fields (e.g.,arr_band,compliance_required,vertical_specialization). The skill auto-detects and surfaces them in dossiers.scripts/heartbeat.py— the signal adapters. Stubs are included for: Trigify saved-search results, RSS feeds, manual CSV drops. Add an adapter for whatever signal source your stack uses (Apify scrape, Apollo enrichment, your CRM webhook).
The skill itself is provider-agnostic. The scripts are where stack-specific glue lives.
| Alternative | Why this is better |
|---|---|
| CRM notes field | No structure, no search, no agent access, no chronology |
| Notion per-account pages | Slow to read, expensive to query at agent-scale, no agent-write protocol |
| Vector DB over your CRM | Loses chronology, opaque to humans, expensive to maintain |
| Just stuff context in CLAUDE.md | Hits the context window before you say hello |
Markdown wins because (a) agents read it natively at zero translation cost, (b) you can grep it with one shell command, (c) you can diff it in git for a full history of what changed when, (d) it survives every model and every agent — switch from Claude Code to Cursor and the vault still works.
The thing the markdown-is-not-memory critics get right: it does not scale to 50,000 accounts. Read docs/failure-modes.md for the thresholds and the migration path to a real database when you outgrow this.
This is the foundational layer. The same pattern produces vaults for replies, ICP refinement, deal rooms, customer success — every place where chronology and narrative matter and your CRM stores fields. Ship this first; the others build on top.
Built by The GTM Architects. MIT licensed. PRs welcome.