Marketing Engineering

The Growth Repo: The First Thing Every Marketing Engineer Should Build

ShareXLinkedInFacebookEmail

A growth repo is one folder, usually a private GitHub repository, where a company's marketing memory lives as plain text files that every AI agent reads before it writes. It holds what customers actually say, how the founder sounds, what was tested and what won, the outbound rules, and a job spec for each agent. Greg Isenberg puts it first on the list of things a marketing engineer should build, and the reason is simple: a chat forgets everything when you close it, and a repo does not.

You can start one in an afternoon with five markdown files and no code.

Chats forget. Repos remember.

Monday morning, someone on your team opens a chat and asks for ten LinkedIn posts. The model has never heard of your company. It does not know which post booked calls last month, which objection sales heard four times last week, or which words the founder refuses to use.

So it writes ten average posts. Your colleague keeps one, pastes it into a doc, and next Monday the whole thing starts from zero again.

That is the problem a growth repo solves, and it is why it comes first in the marketing engineer's job. Greg Isenberg makes the same call in his episode on the role: before any agent or campaign, build one home for everything the company has learned about selling. He suggests a GitHub repo, or a plain folder if that is easier.

The model is the same. The memory is the difference.

What a growth repo is, in plain words

A growth repo is a folder of plain text files that describe your market, your voice and your results, written so an AI agent can read them before it does any work. Nothing in it is clever. It is notes, kept in one place, in a format every tool can open.

Anthropic's engineers describe the same idea for agents in general. In their guide to context engineering, they call it structured note-taking: the agent writes notes that live outside the chat and reads them back later. Their own example is a file called NOTES.md.

The files are Markdown, the headings-and-bullets format you already type in Slack and Notion. That choice matters more than any tool. OpenAI's Codex reads an AGENTS.md file at the start of a task, Claude Code reads CLAUDE.md, and the open AGENTS.md format says more than 60,000 open-source projects already use it.

So the repo is not tied to one vendor. Switch models next year and the memory comes with you.

It is also the memory half of what we call an agent harness: the inputs, rules and checks wrapped around the model. The model writes. The harness decides what it knows and what it may do.

Framework: The Weekly Diff Test

Every Friday, open the list of what changed in the growth repo this week: the commit list in git, or the files sorted by date in a folder. Count three kinds of change only: a new receipt in customer-truth (a quote with its source), a result written into the experiment log, and a rule added to the corrections file after someone fixed an agent's output. Any one of them means the company learned something this week.

None means the marketing ran and the memory did not move. Two empty weeks in a row means the repo has no owner; name one before you add another file.

The folder tree

Here is the tree we would start with. It follows the folders Isenberg lists, customer truth, content, outbound, creative testing and agents, and adds three things every repo ends up needing: a front door file, an offer folder that holds your proof, and a rules folder for corrections.

Eight folders, about 25 files. You will not fill them in a week, and you should not try.

Day one is five files. The front door, the market memo, the voice file, the experiment log and one agent spec. Everything else gets created the first time a task needs it, which keeps the repo honest: every file exists because something used it.

Name files for what they hold, in lowercase with dashes. An agent told to read customer-truth/objections.md finds it. An agent told to read "the objections doc Sarah made" does not.

The growth repo: a starter folder tree
growth-os/
|-- AGENTS.md                      front door: who we sell to, where things live, hard rules
|-- CLAUDE.md                      one line: @AGENTS.md (so Claude Code reads the same file)
|-- README.md                      for people: how to add a file, who owns each folder
|-- .gitignore                     .env, customer-truth/raw/, any file with names or emails
|-- customer-truth/
|   |-- what-the-market-is-telling-us.md   the weekly memo, newest on top
|   |-- buyer-words.md             exact phrases buyers use, each with a source
|   |-- objections.md              objection, how often, what answered it
|   |-- memos/2026-10-12.md        last week's memo, kept so you can compare
|   `-- raw/calls/ tickets/ churn/ reviews/   source files, one per conversation
|-- founder-voice/
|   |-- voice.md                   how the founder talks, words to use and avoid
|   |-- examples-good.md           three real pieces that sound right
|   |-- examples-bad.md            three drafts that missed, and why
|   `-- stories.md                 true stories, dated, with permission noted
|-- offer/
|   |-- offer.md                   what you sell, to whom, for what result
|   `-- proof.md                   every claim you may make, with its source
|-- outbound/
|   |-- icp.md                     who to contact and who never to contact
|   |-- triggers.md                events that make an account worth a message
|   |-- angles.md                  first lines that got replies
|   `-- banned-language.md         phrases the agent may never write
|-- experiments/
|   |-- log.md                     one line per test: date, change, metric, result, decision
|   |-- ad-angles.md               angles tried, angles waiting
|   `-- page-tests.md              landing page changes and what they did
|-- content/
|   `-- published.md               what shipped, where, and what it produced
|-- agents/
|   |-- customer-truth.md          job spec: inputs, schedule, output, approval, metric
|   `-- content-drafter.md         job spec for the second agent
`-- rules/
    `-- corrections.md             every fix to an agent's output, written as a rule
Eight folders and about 25 files. Day one needs only five of them: AGENTS.md, the market memo, voice.md, log.md, and one agent spec. Copy the tree, rename what does not fit your business, and add a file only when a task needs it.

What goes in each file

The front door is AGENTS.md. It says in three lines what you sell and to whom, maps the folders, and lists the rules that never bend: no invented numbers, a source for every claim, a person approves anything that reaches a customer. Write it once, and make CLAUDE.md a single line, @AGENTS.md, which Anthropic's memory guide documents as the way to share one file across tools.

Keep the front door short. The same guide says to aim for under 200 lines per file, because longer files use more context and get followed less closely, and imported files do not get around that because they load at the start too.

So the front door points and the folders hold. A 40-line AGENTS.md that says where the voice guide lives beats a 900-line one that pastes it in.

The customer truth folder is the one that pays for the rest. Raw material goes in raw/, one file per call, ticket or cancel note, named by date and source; the habit of capturing it the day it happens is the subject of Collect, Don't Invent. The memo on top is rebuilt every week with a quote and a file path behind every line, and the customer truth system walks through that memo in full.

Give every raw file the same five lines at the top: date, source, who the person is (role and company size, not their name), where they were in the deal, and what happened next. Those five lines are what let an agent say "four of the six buyers who closed mentioned onboarding" instead of "people like onboarding."

Buyer-words.md is the file copywriters will thank you for. Each line is a phrase in the buyer's exact words, the file it came from, and how many times it has shown up. When the same phrase appears in a call, a ticket and a review in one month, it goes in a headline test.

The experiment log is one line per test: date, the one thing you changed, the metric, the result, the decision. One change per test, for the reason in One Variable at a Time: two changes and one result tell you nothing about either.

The agents folder holds one job spec per agent. Isenberg's advice is to write it as if you were hiring a person: the data it reads, when it runs, what it filters out, what good output looks like, what needs approval, the metric, and where it writes the result. We go line by line through that format in How to Write a Job Spec for an AI Agent.

If you use Claude Code, a spec can later become a real subagent: a markdown file in .claude/agents/ with a name, a description of when to use it, and the tools it may touch, per the subagent docs. Long procedures can become skills, which load only when a task calls for them, so they never crowd the front door.

What goes in each file, and when to start it
AGENTS.md (the front door)Three lines on what you sell and to whom. A map of the folders. Hard rules: never invent a number, quote a source for every claim, ask before anything reaches a customer. Keep it short; it loads every session.
under 200 linesDay 1
customer-truth/what-the-market-is-telling-us.mdThis week: what changed in what buyers say, with a quote and a file path for each point. Five calls, forty tickets and a cancel note beat a summary of a hundred calls with no receipts.
rewritten weeklyDay 1
founder-voice/voice.mdTen to twenty lines. Words the founder uses, words they never use, sentence length, how they open and close. Pair it with three good and three bad examples so the agent can see the line.
edited monthlyDay 1
experiments/log.mdOne row per test. Example: 2026-10-14 | headline names the pain, not the product | demo requests | 11 vs 7 in 7 days | keep. One change per test, so the result means something.
one line per testDay 1
agents/customer-truth.mdThe job spec: what it reads, when it runs, what it skips, what it writes and where, what needs a person to approve, and the one number it is judged on.
one per agentDay 1
offer/proof.mdEvery claim the agents may use, each with where it came from: a case result, a review link, a dated metric. If it is not in this file, the agent may not say it.
add as proof arrivesWeek 2
outbound/banned-language.mdPhrases that make outreach sound like a template, plus anything legal or the brand forbids. Each line has the date and the reason it was added.
grows with correctionsWeek 2
rules/corrections.mdExample: 2026-10-09: never open a post with a question. Reason: founder rejected four drafts for it. Every time you fix an agent's output, the fix becomes a line here.
never deletedWeek 1
Day 1 to Week 2 is the order we would fill them in. The examples are illustrative; replace them with your own dates and numbers.

The prompts that change once the repo exists

Here is how you know the repo works. Before it exists, a prompt has to carry the whole company, so it carries almost none of it. After, a prompt names files.

The four in the figure are the ones that change first. Each one reads before it writes, quotes its source, and finishes by writing something back.

That last step is the one people skip.

The prompt reads the repo. The repo stores the result. The result shapes next week's prompt, and nobody has to rewrite it.

You will also notice the after-prompts are longer and easier to judge. When the agent says a post came from a buyer's line, you can open the file and check. When it says nothing about where it came from, you are grading a guess.

The prompts that change once the repo exists
LinkedIn postsBefore: Write 10 LinkedIn posts about our product. After: Read customer-truth/what-the-market-is-telling-us.md and founder-voice/voice.md. From content/published.md, take the five posts with the most qualified replies as models. Draft five posts, each on one pain a buyer named this week, and quote the line it came from.
of 41
Ad anglesBefore: Give me 20 Facebook ad ideas. After: Read offer/offer.md, offer/proof.md and experiments/log.md. Skip every angle already tested. Write 20 new angles from customer-truth/buyer-words.md, one per row, each with its source quote and the claim from proof.md it relies on.
of 42
Outbound first linesBefore: Write a cold email to clinic owners. After: Read outbound/icp.md, outbound/triggers.md and outbound/banned-language.md. For each account in today's list, write one first line tied to its trigger. If a line breaks a banned rule, flag it instead of fixing it quietly.
of 43
Friday reviewBefore: How did marketing do this week? After: Compare this week's rows in experiments/log.md with last week's memo. List what won, what lost and what changed in buyer words, with a file path for every claim. Propose one test for next week and add it to the log as planned.
of 44
Each after-prompt reads before it writes, points at files instead of describing the company, and ends by putting something back into the repo. Copy them and swap in your own file names.

Git or a folder

Start with whatever you will actually open. A shared drive folder works for week one, and so does a Claude Project, where you upload files to a knowledge base that every chat in the project can use.

Move to git when either of two things is true: more than one person edits the files, or an agent writes to them on a schedule. Git keeps every version of every file; the Pro Git book describes it as a series of snapshots of your project over time. That history is the point, because it shows you what the company learned and when.

On GitHub, choose private when you create the repository, and add a README that tells a new teammate how to add a file. You never need the command line for this; GitHub lets you create and edit files in the browser.

On day one, add a .gitignore file that lists .env and every raw folder holding names, emails or phone numbers. GitHub's push protection blocks known kinds of secret from public repositories by default, but it will not catch a spreadsheet of customer emails.

If you use Claude Code, a deny rule such as Read(./.env) in .claude/settings.json stops the agent from reading your keys at all; it is the first example in Anthropic's settings docs.

Keys go in .env. Memory goes in the repo. Never the other way round.

"This is a developer thing. I am a marketer."

Fair. The word repo sounds like a job you were not hired for. Open one, though, and you find text files with headings, which is what you write all day.

You do not need a single git command in month one. Claude Code's /init command will draft a first CLAUDE.md from what is already in the folder, and you can edit every file in the browser.

Here is what the skeptics get right. A repo nobody updates is worse than no repo, because it hands the agent last quarter's truth with full confidence. The fix is not more files; it is an owner and a weekly check, which is the next section.

The Weekly Diff Test

Every Friday, look at what changed in the repo this week. In git that is one screen, the list of commits. In a plain folder it is the files sorted by date modified.

Three kinds of change count. A new receipt in customer-truth, a result written into experiments/log.md, or a rule added to rules/corrections.md after someone fixed an agent's output.

If none of the three happened, your marketing ran this week and your company learned nothing from it. We call that the Weekly Diff Test, and it is the fastest way to tell a growth repo from a folder of old notes.

One empty week is a quiet week. Two in a row means nobody owns the repo.

The corrections file is where the gains add up. Isenberg's point is that every fix should become a rule in the repo.

When an agent keeps writing bland openers, show it a few strong ones next to a few weak ones and say why. Each rule is one line, dated, with the reason, so the same mistake costs you once.

The whole check takes about fifteen minutes. Read the diff, write one line in the memo about what the team learned, and pick the file that went stale. That file gets updated first next week.

Our version

We run Anar this way. The agency works in Claude Code with skill files that keep every agent on the same facts and rules, and a memory in a vector database that is searched before anything is written and updated after. The setup is in Source-of-Truth Skills.

This library is built the same way: one Python file per article, a generator, and checks that block publishing until every external citation loads, no paragraph runs past three sentences, and no 8-word run is lifted from a source. Twenty-three articles have been live since October 13, 2026, with more than 120 drafted.

A rule in a file applies to every article. A rule in someone's head applies when they remember it.

If you would rather have the repo and its first system built inside your company, that is the work in our marketing engineering engagements, one system at a time and measured before the next. The automations that write into it are covered on our AI automation page.

What to read next, and why

Claude Code for Marketers [quickstart]. The ten-minute setup that puts an agent on top of this folder. Read it the same afternoon you make the tree.

How to Become a Marketing Engineer in 30 Days [plan]. Week two of that plan is this repo. If you want the job, this is the order to do it in.

The Growth Cockpit [system]. The Monday memo that reads the experiment log and tells the team what to test next. It is only as good as the repo under it.

How We Run a Marketing Agency as Marketing Engineers [proof]. Our own stack, checks and pipelines, with the numbers. The best argument that a folder of text files can run real work.

So the simple takeaway is this: if your AI does not read your files before it writes, it starts from zero every Monday, and so do you.

Share this articleXLinkedInFacebookEmail
Filip Kovacevic
About the author

Filip Kovacevic is the founder of Anar Agency in Phoenix. He spent five years running SEO, Meta ads, email, and content for medical practices across the United States, and now does the same work for healthcare, home-service, legal, and professional-service businesses, alongside AI implementation. More from Filip →

Want to build this on real client work?

Our training runs four weeks: an audit, a growth repo, one working machine, and a case study with results. You leave with a repo you built and the numbers to show for it.

See the training →

Want the repo and its first system built inside your company? See how we build them.