Why Growth Strategy
Belongs in Your Codebase

Why Growth Strategy Belongs in Your Codebase

Agents don't lack capability – they lack context. Once your builder and growth knowledge lives in one searchable place, a new level of performance unlocks.

No Context,
No Help

Earlier this year I noticed something quiet about how I work. I hadn't planned it. My company's context had drifted, file by file, into the Pirate Skills codebase. The growth strategy. The OKRs. The content and story doc. The bottlenecks I kept tripping over. Each one started somewhere else – usually Notion – and at some point ended up as a markdown file inside the repo, groomed across quarterly revisions, sitting one folder over from the product itself. I just observed it one day: I'm not really doing this in Notion anymore.

The catalyst was the latest Opus. Once I had a working agentic partner inside Claude Code, I wasn't willing to give that up. Most of my marketing work is connected to the website or the web app anyway. A prompt like let's build a new landing page for the next Vibe Hackathon now reaches a model that reads our Content & Story doc and gets the wording almost perfectly for our audience, drops in the right sign-up modal with attribution already wired, fires the right conversion events through PostHog, and pulls the upcoming hackathon date from the events database. So much of it just happens magically – because I knew what I wanted, and the agent could infer the rest from the context already living in the codebase. The whole thing felt alive, on the growth side and the builder side.

In the repo
Agents see this
  • Product code & UI
  • Auth, payments, env configs
  • The skills folder & CLAUDE.md
  • README files & migration scripts
  • Tests, schemas, anything checked in
Outside the repo
Agents miss this
  • Strategy slides & decks
  • Notion roadmaps & OKR pages
  • The Google Doc with positioning
  • Customer notes scattered across tools
  • Conversations you had on a walk

Then came Bridesmaid. Christina and I built bridesmaid.love over a single Vibe Hackathon weekend – 48 hours from idea to deployment. The product itself shipped clean. What surprised me was what happened after. Getting the launch moving – landing pages, ads, a content cadence, the funnel – was slow and heavy in a way I couldn't place. I didn't really understand why it felt like there was so much to do, so much resistance.

Eventually I noticed what I had forgotten. I'd set up Bridesmaid's product context in the repo on day one. I had not done the same for the growth side. There was no docs/context/. No goals doc. No bottlenecks doc. No acquisition strategy. The agent that helped me build the product was working with half a brain every time I asked it to help me ship it.

Half of the company's brain was invisible to the agent I'd been working with all weekend.

This goes back to one of the first principles still on the Pirate Skills home page: build and grow have grown too far apart. The product lives in the codebase. The strategy and the marketing live in Notion, in slide decks, in Google Docs. AI Founder Mode last week made the architectural claim: the codebase is the company's brain. The piece you're reading now is what happens when you take that claim seriously enough to move the rest of the company in.

It doesn't have to stay split the way it is.

Build and Grow
in One Repo

I've been doing this at Pirate Skills for over a year. Not as a system anyone planned – it happened the way most useful patterns do, organically, file by file, by noticing what kept saving me time. By now the convention is settled enough that I run it as the opening move with every cohort that goes through the growth segment of Pirate Forge.

Two days ago I sat down with the current cohort and we did it from scratch, using Bridesmaid as the concrete worked example. The setup itself is simple: open the prompts from the Growth Codex's Growth Roadmap chapter one at a time inside Claude Code, answer each one out loud through Wispr Flow as the agent asks, and let the agent write the answers into markdown.

The prompt titles tell you what kind of questions land:

  • Gather foundational business context for growth strategy
  • Align growth goals with company vision and strategy
  • Create OKRs for growth goals
  • Identify bottlenecks in customer journey and operations

Plus a handful more. The file organization you'll see below isn't designed in advance – it falls out of running those prompts in order. The strategy that drives the product now lives in the same repo as the product.

The folder is docs/context/. One topic per file. The convention is short enough to fit in your head and explicit enough that you don't have to think about where anything goes.

📁 docs/context/Bridesmaid · 8 files
📄 README.mdindex, sprint frame, current state
📄 business.mdidentity, value prop, segments, pricing
📄 team.mdfounders, decisions, bandwidth constraint
📄 vision-and-strategy.mdlong-term vision, principles
📄 goals-and-targets.mdnorth-star metric, doubling cadence
📄 bottlenecks.mdbinding constraint, top 3 to fix
📄 acquisition-strategy.mdchannel hypotheses, prioritization
📄 okrs.mdcurrent cycle, objectives, KRs

Here's what each file does. business.md owns identity, value prop, customer segments, pricing – everything about what the company is and how it makes money, in one place. team.md names who decides what, and importantly, what other commitments constrain bandwidth. goals-and-targets.md carries the single north-star metric – for Bridesmaid right now, ten free trial starts per week, then double. bottlenecks.md names the binding constraint and the top three things that resolve it. vision-and-strategy.md holds the long-term direction and the operating principles. acquisition-strategy.md is the channel layer, where the actual go-to-market decisions live. And okrs.md holds the current cycle.

Each file cross-references the others inline with relative links. The agent walks the chain naturally. When it reads a bottlenecks.md item that points at founder bandwidth (see team.md#other-commitments), it follows the link and pulls the context. There's no separate index, no folder of context loaders, no chat-side prompt explaining where to look. The strategy is the index.

A codebase has the practical advantages everyone knows about – automatic saving, version history, diffs – but the one that actually matters for this workflow is more boring than that: it's the easiest place for an agent to search across every document at once, without reaching into another tool with weaker search.

The product and the strategy now share one repo, one memory, and one agent. This is also the same opening move I run with cohorts at the start of the Growth Codex roadmap's first chapters – strategy on day one, not in week eight, and not in a tool the team that actually has to execute it won't open.

The Knowledge Base
That Writes Itself

Here's the part that quietly changes everything. You already know the loop from last week's four-step skill loop – every working session ends with feedback that teaches the agent what was wrong, missing, or freshly learned, and updates the skill in the same breath. Point that same loop at docs/context/ and the strategy keeps itself current. No one sits down on a Sunday to update a process manual. The repo absorbs what you just figured out, and the next session starts from there.

A concrete example. Ask the agent to wire conversion tracking for a new Meta campaign on Bridesmaid. It doesn't need to ask which tool to use or which events to fire. It reads acquisition-strategy.md, which already specifies PostHog plus UTMs plus Meta CAPI as the attribution stack and lists the named conversion events each channel needs to track. It reads okrs.md, which makes paid-attributed trials a key result and forces the data to be reportable weekly. It finds the packages/analytics package already installed in the repo. Instrumentation lands on the first try, in the right places, with the right names.

Linear issue BM-151 for Bridesmaid attribution stack — UTMs, signup source, Meta CAPI, dashboard — generated from acquisition-strategy.md and okrs.md
I never briefed this attribution stack. The agent derived it from the codebase – Bridesmaid runs on next-forge, an opinionated Next.js stack with PostHog already wired in, so UTMs and Meta CAPI were the logical next layer. As a marketing nerd, watching an agent reason its way there was quietly disorienting.

Without that context co-located, the agent either defaults to generic “track signup” boilerplate, or you spend twenty minutes pasting the event list and tool choice into every conversation. Multiplied across every refactor and every new feature, that's the difference between a system that compounds and one that re-derives from zero every Monday.

A second example, less obvious. Instagram and Pinterest content. The mistake is generating posts directly from business.md and vision-and-strategy.md. That jump is too raw. The actual flow is layered: strategy docs feed a derived content and storytelling framework that itself lives in docs/context/, and individual post drafts read from that framework. Each layer is a real artifact in the repo. Each is aligned with the layer above it because the agent literally reads from the prior layer when building the next one. Improving the framework improves every post that comes after it – without you ever re-establishing the brand voice in a prompt. Compare to the Vibe Marketing Stack: that piece named the tools; this layer names what they read.

The same architecture quietly unlocks programmatic SEO templates the moment you reach for them: the city scope, the CTA pattern, the template choice are all already settled in the docs the generator reads from. You build the generator once; the strategy that aims it comes free.

The growth context lives where the agent looks. That single rule changes the cost of every downstream task. The feedback side of the loop is what keeps the rule true: when something surfaces in a conversation that the repo didn't know – a customer-segment correction, a pricing reframe, a competitor angle – the same conversation writes it back. The next session reads the updated version. Drift would require a second copy. There isn't one.

Strategy That Lands
In This Week's Cycle

The second half of the loop is where strategy stops being a doc and starts being a sprint. Once the strategy in docs/context/ is trustworthy, the same agent uses it to write the Linear projects and issues that execute it – no intermediate planning doc, no second copy to drift from.

At Bridesmaid, okrs.md carries three objectives – Organic Launch, Paid Acquisition, Growth Streak – each with two to four key results. The agent reads okrs.md together with the strategy around it (acquisition-strategy.md for channels, bottlenecks.md for what blocks each KR) and generates one Linear project per objective plus three to six issues per project. Each issue lands with its description pointing back to the file path and section it came from.

We don't do that transition by hand. The conversation stays inside Claude Code; the Linear MCP server is what reaches into Linear and writes the projects, the issues, the descriptions, the labels, the cycle assignment – everything. We never open the Linear app during the workshop. By the time we wrap, the strategy is in the repo and the cycle is standing in Linear, generated end-to-end by the agent.

docs/context/okrs.md
### 🎯 O2 — Paid acquisition
       into a working machine

- KR2.3 Paid-attributed trials
  Baseline: 0
  Target (by 2026-08-05):
    ≥ 100 paid-attributed trial starts
  Measure: UTM attribution
    + "how did you hear about us?"

(see acquisition-strategy.md
 for channel detail)
linear · BRM-26Backlog

Wire PostHog + Meta CAPI attribution

  • UTMs on every paid link; “how did you hear about us?” added to signup as iOS-safe backup; Meta CAPI sending signup_completed with hashed email
  • Paid-attributed signup count reportable weekly from Week 4
👤 Ben📅 Weeks 2–4🎯 KR2.3📄 okrs.md

This is the layer above Vibe Management. That piece showed Linear as the PM surface for execution; this section shows the Linear projects and issues themselves generated from the strategy living one folder up. The agent maintains the bidirectional link – every objective in okrs.md gets a Linear: <url> line appended underneath it; every Linear issue links back to its source file path in the description. When you click into a Linear issue and want to know why, the breadcrumb back to the strategy is one click. See the Growth Codex's How We Get There for the OKR-to-project mechanic this section operationalizes.

We've run this loop at Pirate Skills for over a year. Bridesmaid is the freshest demo, sized small enough that the whole pattern fits on one screen. The interesting thing is that the loop runs the same regardless of scale. The number of issues changes. The schema doesn't.

You haven't opened a PM tool to make any of this happen. And when the next conversation surfaces a new constraint, the same agent updates the relevant strategy file – okrs.md, acquisition-strategy.md, or wherever the constraint lives – regenerates the affected Linear issues, and the cycle reflects reality again. The strategy and the sprint share one substrate.

Run the Setup
This Afternoon

Three prompts. No restructuring. No new tools beyond Claude Code and Linear. We call it The Codebase Strategy Setup – paste each prompt into Claude Code in order, running in a fresh docs/context/ folder inside your product's repo. By the end your strategy lives in the same place your agents read from, and your Linear cycle stands up matching it.

The prompts are modelled on the Growth Codex lessons (the Founding Interview is essentially a compressed version of Where the Treasure Lies) – essentials only, no fluff. Total session length: about an hour.

Prompt 1 · ~30 min
The Founding Interview

Five essential questions. The agent writes four files.

  • business.md
  • team.md
  • goals-and-targets.md
  • bottlenecks.md
Prompt 2 · ~15 min
Derive the Strategy Layer

Agent reads the founding files and writes three more.

  • vision-and-strategy.md
  • acquisition-strategy.md
  • okrs.md
Prompt 3 · ~15 min
Stand Up Linear

Account check, MCP install, then projects + issues generated from okrs.md.

  • Workspace ready
  • 1 Linear project per Objective
  • 3–6 issues per KR
  • Bidirectional links

Below are the three prompts in order. Copy each one into a fresh Claude Code conversation in your product's repo. Run them sequentially – each one waits on the files the previous one created.

Prompt 1 — The Founding Interview
You're helping me bootstrap a strategy folder for my company. I'm running this conversation inside my product's codebase, in a fresh docs/context/ folder. Everything we produce in this session will be committed as markdown files in that folder so my agents can read it later.
Interview me with the essential questions only – no fluff. Cover these five areas, one at a time. Don't proceed until I've given enough to write a clean answer. Push back if my answer is mushy – make me commit.
1.The company – name, product, industry, stage, website + repo
2.The business model – what we sell, who we sell to (segments, primary first), how we make money, current pricing
3.The team – founders, who decides what, other commitments that constrain bandwidth
4.The goal right now – the single number we are optimizing this sprint (force one north-star metric)
5.The binding constraint – the one thing in the way of that number (force one)
When the interview is done, write these four files inside docs/context/. Questions 1 and 2 go into business.md as two sections – identity on top, business model below.
- business.md – identity, value prop, segments, pricing (Q1 + Q2)
- team.md – founders, decisions, bandwidth constraint (Q3)
- goals-and-targets.md – north-star metric and the doubling cadence (Q4)
- bottlenecks.md – binding constraint and the top 3 things that resolve it (Q5)
For each file: cross-reference related files inline; flag anything I'm unsure about with a one-line note on what's still open; commit each file as you write it.
Begin with question 1.
Prompt 2 — Derive the Strategy Layer
Now that docs/context/ has the founding files, derive the strategy layer.
Read every file in docs/context/ first. Then produce three more files in the same folder:
1.vision-and-strategy.md – a 1-page synthesis with: long-term vision (1 sentence, ambitious); mission (what we do today, 1 sentence); 5–8 strategic principles, each with a 1-line implication. Mark the whole doc as draft awaiting sign-off until I confirm.
2.acquisition-strategy.md – 3–5 candidate acquisition channels relevant to the segments in business.md. Per channel: hypothesis (why we believe in it), what to measure (named conversion events + KPIs), key risks. Plus a sprint-sequencing recommendation across the cycle (which 2–3 channels to focus on first, why).
3.okrs.md – the current OKR cycle: 2–3 objectives; 2–4 key results per objective, quantifiable and time-bound; calibrated for 60–70% achievement; include a Revision history block at the top and record this as v1; define the cycle window from the sprint timeline I gave you.
Cross-reference everything. Flag anything you're unsure of inline with a one-line note.
When I push back on something during this step, write the correction inline in the doc – append to the Revision history block. Don't lose corrections in chat.
Prompt 3 — Stand Up Linear
Now turn okrs.md (with the surrounding strategy docs in docs/context/ as supporting context) into a Linear workspace, so the strategy and the execution share one substrate. No intermediate projects.md – Linear is the project layer.
1.Linear account check. Ask me whether I already have a Linear workspace. If not, give me the signup link (https://linear.app) and wait for me to confirm I'm in. If I do, ask me for the workspace name.
2.MCP connection. Walk me through installing the Linear MCP server in my editor so you can write directly to Linear from here. Give me the exact install snippet for my editor. Wait for me to confirm "connected".
3.Create the projects. For each Objective in okrs.md, create a matching Linear project. Title = the Objective. Summary = the Objective's description from okrs.md. Set me as lead. Set status to Planned.
4.Create the issues. For each Key Result, derive 3–6 concrete shippable issues by reading the surrounding strategy docs – acquisition-strategy.md for channel work, bottlenecks.md for what each KR needs to resolve, vision-and-strategy.md for posture. Each issue: Title = the shippable task; Description = What / Output / Owner / Timeline / KR served, plus a Source: link back to the exact file path and section. Leave cycle, estimate, and priority unset – those come when the project moves to In Progress.
5.Mirror back. Append a one-line Linear: <project URL> directly under each Objective in okrs.md, so the link lives next to the strategy. Commit the change.

That's the whole Codebase Strategy Setup. The first prompt seeds four files in about thirty minutes. The second derives the strategy layer in about fifteen. The third stands up Linear in another fifteen. By the end of the hour the strategy that drives your product lives in the place your agents already read from, and the cycle that executes it is standing in Linear.

From there the feedback loop carries it. Every working session does two jobs at once. Every correction edits the source. Strategy stops drifting because there is no second copy to drift from.

See Vibe Management for the execution layer this sits on top of, and AI Founder Mode for the architectural claim this extends. The growth segment of the Pirate Forge opens with exactly this setup – the rest of the cohort is six weeks of sharpening it in public.

See you on the bridge.

Cheers,
Ben

Ready to Go Deeper?

Questions & Answers

Ben Sufiani, The Captain

Ben Sufiani

The Captain

Founder from Cologne with 15 years of startup experience across 9 ventures. After helping thousands master growth marketing, Ben learned vibe coding from scratch and launched CaptAIn within three months. He leads the Vibe Coding Cologne community, blending real founder experience with teaching clarity.