PMM Runbook
11 routines to copy.
1Refresh the battlecard when a competitor ships
When a competitor changes their product or pricing, an updated battlecard section: what changed, what it means for us, what to say when a prospect raises it, and what not to claim.
Details
Ask first
- Which competitors and which pages? (release notes, pricing, blog)
- Where do your battlecards live?
- What may you never claim? (default anything you cannot show a source for)
Needs
- An assistant that can read web pages daily and keep a copy to compare
- Read access to the battlecards
- If your assistant cannot read one of these, paste it when it asks. A thinner version still works
- Any password or token is entered by you into your device's secure store, never pasted into a chat or saved in a plain file
Build
- Each day, read each competitor page and compare to the saved copy.
- For a change, write what changed and the link, what it means for us, what to say, and what not to claim.
- Propose it as an edit to the right battlecard. Change nothing without a yes.
- If nothing changed, send nothing.
Check
- Run it once with the saved copy set a month back; every line has a link
- Confirm a claim to avoid is listed whenever the competitor has already closed a gap
- Say whether the writing step ran for real or on sample text. Check that every figure, quote and link matches its source, and drop any that does not
In my version
- Claude Code on a daily schedule, a proposed edit as a message
Built it? Tell Polly.
Battlecard updateNorthwind
Changedfree tier added, up to 3 users (pricing page, Tue).
Meanssmall teams can start free with them.
Say"Free works for three people; ours starts to pay back when a team shares reports."
Do not claimthat they lack sharing. They added it in March.
2Rewrite our battlecard line when a competitor changes
When a competitor changes how they describe themselves, a rewritten line for our own battlecard in our voice, shown beside the old line so I can see what moved.
Details
I approve before anything is saved.
Ask first
- Which competitors and which page for each? (home page headline and pricing page)
- Where do your battlecards and voice notes live?
- Who approves? (default you)
Needs
- An assistant that can read web pages daily and keep a saved copy to compare
- Read access to the battlecards and any notes on how you write
- If your assistant cannot read one of these, paste it when it asks. A thinner version still works
- Any password or token is entered by you into your device's secure store, never pasted into a chat or saved in a plain file
Build
- Each day, read each listed page and compare headline and key phrases to the saved copy.
- If a headline or key phrase changed, find our current line on the same point.
- Write a replacement in our voice, with one sentence on what they now claim and what we should lean on.
- Show old and new side by side. Change nothing without a yes. Send nothing if nothing changed.
Check
- Set a saved headline to an older wording; the change is caught and the proposal quotes both
- Confirm the battlecard was not edited
- Say whether the writing step ran for real or on sample text. Check that every figure, quote and link matches its source, and drop any that does not
In my version
- Claude Code on a daily schedule, a proposal as a message
Built it? Tell Polly.
Northwind changed their headline.
Was"Reporting for teams."
Now"Reports that run themselves."
Our line was"A reporting platform for growing teams."
Proposed"Reports your whole team trusts, without the Friday scramble."
Whythey now claim automation; our edge is trust and shared views.
Reply yes and I will update the card.
3Tell me who I've lost touch with
Everyone I talk to gets a closeness level from email, texts, WhatsApp and calls.
Details
Fall below the target I set and my assistant flags it, for maximum guilt.
Ask first
- Which channels may it read? (default mail and texts; add chat apps and the call log if available)
- Who is in scope, and who is left out? (default everyone you have exchanged messages with; leave out household members and yourself)
- What target level does each person you care about get? (default none set; the list is empty until you set some)
- How many people on the list? (default 10)
- How often? (default twice a day)
- Where should it show? (default a table on a page you open daily; a weekly message if none)
Needs
- A contact list that merges each person's email address, phone number and chat handles into one record. Contacts rarely do this on their own: build the merge first, and report people who appear under two records.
- The channels above, as a log of interactions: contact, channel, timestamp, direction.
- A small table for scores and targets, and a page that shows a table.
- Connecting: "It counts when you and each person last spoke; it never reads message content or sends anything."
- If your assistant can only chat: tell it "spoke to X today" and keep a list of targets; it keeps the dates and answers "who am I overdue with?"
Build
- Read: on each run, import new messages and calls since the last import as interactions.
- Decide (level): a ladder of seven levels, inner circle, close, active, familiar, casual, fading, dormant. Score each person from interaction count and recency, weighting the last 30 days most, and map the score to a level. Label the trend warming, steady or cooling by comparing this month's score with last month's.
- Decide (below target): the person sets a target level per contact. Someone is below target when their scored level is lower than the target.
- Decide (order): sort by largest gap in levels, then oldest last contact. Keep the top 10.
- Deliver: a table on the page: rank, name, level, target, time since last contact. Refresh twice a day and after each import. Fallback: a weekly message with the same rows. Never send anything to the people listed.
- Memory: the interaction log and last import stamp; a person drops off once a new interaction lifts them to target. No model calls; this is arithmetic.
Check
- Run with today's imports: someone you spoke to today is not on the list; someone with a high target and months of silence is near the top.
- Raise a target and they appear; lower it and they go.
- Quiet run: a run with no new messages leaves the table unchanged and moves the import stamp; the first real run shows as the stamp.
In my version
- Q, my assistant, on my Mac, scores everyone twice a day from Gmail, iMessage, WhatsApp and the call log. Seven levels. Anyone below target can raise a "may need attention" alert, and I can ask Q who I'm losing touch with.
Built it? Tell Polly.
Polly's assistant
You: Who am I losing touch with?
Assistant: Dana Whitfield, Inner circle, target Close, last spoke 11 weeks ago. Omar Reyes, Familiar, target Active, last spoke 9 weeks ago.
4Watch my competitors and tell me what changed
A short weekly note on what each competitor shipped, said or changed: release notes, pricing pages, blog posts and press.
Details
Each item links to where it was found. Nothing new, nothing sent.
Ask first
- Which competitors, and which pages for each? (release notes, pricing, blog; a few each)
- What counts as worth telling you? (default anything on pricing, a new feature that overlaps yours, or a new customer named)
- Where should it land? (default a message and a page in your notes)
Needs
- An assistant that can run weekly, read web pages and keep a small store of what it has already shown you
- For a page that loads with JavaScript: a browser you are signed in to, read as text
- If your assistant cannot read one of these, paste it into the chat when it asks. A thinner version still works
Build
- Each week, read each listed page and compare to the stored copy.
- For every difference, write one line: who, what changed, why it matters to you, and the link.
- Keep an item only if the link points to a page you actually opened. Store each item so it is never shown twice. If you run a content calendar, pass any pricing or feature change to it so a rival's move gets a response the following week.
- If nothing changed, send nothing. If a page could not be read, say which one.
Check
- Run it once with the saved copy set a month back; every line has a competitor, a date and a link
- Run it again; confirm it says nothing
- Say whether the writing step ran for real or on sample text. Check that every quote and link on the page matches its source, and drop any that does not
In my version
- Claude Code on a Monday schedule, results as a message and a page in my notes
Built it? Tell Polly.
Competitor watch, week of 12 Oct: 3 changes
Northwind: added a free tier, up to 3 users. Pricing page, changed Tue.
Fieldstone: released an AI summary feature; same ground as our digest. Release notes, Thu.
Brightwell: nothing new.
Links on every line.
5Find new runs worth copying, weekly
Two or three new Runbook runs that fit how I work, each with one line on why.
Details
Nothing when nothing fits.
Ask first
- Which day and time to check? (default Friday 8am, your time zone)
- How you want the picks? (default the place you already hear from your assistant)
- How many picks at most? (default 3)
Needs
- An assistant that can run on a schedule and open a web page
- What your assistant already knows about you: your routines, tools and recurring tasks
- If your assistant cannot read one of these, paste it into the chat when it asks. A thinner version still works
Build
- Each week, open the Runbook list of new runs since the last check.
- Pick at most three that fit something specific about the person. Skip ones they already have or that need a setup they lack.
- If nothing fits, send nothing. Otherwise send each pick's name, one line on why it fits and its link.
- Never build anything without a yes. On a yes, open that run's build steps and follow them.
- Save the date of this check.
Check
- Run it once with since set to 30 days ago and delivery off; every pick names a specific reason it fits
- A week with nothing new sends nothing
- Say whether the writing step ran for real or on sample text. Check that every quote and link on the page matches its source, and drop any that does not
In my version
- Claude Code on a schedule, Fridays at 8am, picks sent to my assistant
Built it? Tell Polly.
New on Runbook for you this week
1Watch your competitors and tell you what changed: you asked about pricing moves last month.
2Turn calls and tickets into themes: you run six customer calls a week.
Reply with a number and I'll set it up.
6Listen for what people say about the companies I choose, on the sites I choose
Each week, what people are saying about any company or product on my list, pulled from the sites I pick: Hacker News, Reddit, review sites, employee reviews.
Details
Confusion points, complaints, praise and price remarks, each linked to where it was said. I change the list by editing one file.
Ask first
- Which companies or products should it listen for? Give a name and, if the name is a common word, a few phrases that show a post is about them and a few that mean something else. (Several is fine.)
- Which sites for each? (default Hacker News, plus Reddit if the company has a community there, plus any review pages you name)
- Where should it reach you? (default a message from your assistant, only when something is new)
Needs
- A list file with one block per company. Adding a company is adding a block; removing one is deleting it. A broken file must be reported, never replaced by a default
- An assistant that can run on a schedule and keep a small store of what it has already shown you
- For sites with no open API: a browser you are signed in to, read as text. If a page shows a login wall or a challenge, stop and say so. Never work around one
Build
- Each week, for every company on the list, fetch what is new from each of its sites. Hacker News has an open search API. Reddit is slow and gives little, so keep its queries few.
- Keep only text that is about the right company. Drop job ads and other meanings of the name.
- Store each item once with its link and date. Never report one twice.
- Sort each into confusion, complaint, praise, comparison, price or news, with one plain sentence in your own words. The link comes from the page, never from the model.
- If nothing is new, send nothing. If a site could not be read, say which one and try again later the same day, so a closed browser delays the report and does not lose it.
Check
- Run it once now over a past week with sending off; every line has a company, a site, a date and a link
- Add a second, unrelated company and confirm its posts are kept apart and the first company is not mixed in
- A quiet week sends no message
In my version
- Claude Code on a schedule: every hour on Mondays from 7:30am Pacific until the sources read, G2 and Glassdoor read in my own browser, results to a card and a text
Built it? Tell Polly.
Customer voice, week of 30 Aug: 5 new items
Company A, review site (complaint): Reliability is the biggest complaint. A silent failure writing to a CRM field, with no clear error.
Company A, review site (pricing): Harder to justify for smaller teams.
Company B, Hacker News (comparison): A founder asks a rival how it differs from the incumbent.
A link on every line.
7Turn the week's calls and tickets into themes
What customers actually said this week, grouped into themes with a count and one quote each: what confused them, what they asked for, what nearly made them leave.
Details
Ask first
- Which of these do you have? Pick any: your notes from calls, the messages customers send you, a support inbox or help desk. (default the ones you have, from the last seven days)
- How can I tell a customer's message from other mail? A folder, a label or a list of their email domains works. (default anyone outside your own company)
- Where should it land? (default a page in your notes)
Needs
- Read access to the sources
- A running list of themes so a theme keeps the same name week to week
- If your assistant cannot read one of these, paste it when it asks. A thinner version still works
- Any password or token is entered by you into your device's secure store, never pasted into a chat or saved in a plain file
Build
- Every Friday afternoon, collect every customer message from the last seven days.
- Group them into themes. Reuse last week's names where the theme is the same.
- For each theme: a count of messages that support it with the customers listed beside it, one real quote with its source, and a label. New means it was not in last week's list; growing means more messages than last week; fading means fewer.
- Put the strongest three at the top, ranked by messages then by number of customers. Never invent a quote. If a customer's exact words are not in your notes, mark that line as paraphrase.
- Save the theme list for next week.
Check
- Run it on last week; every quote matches a real message
- Confirm a theme from last week keeps the same name
- Confirm a paraphrase is never shown as a quote
- Say whether the writing step ran for real or on sample text. Check that every figure, quote and link matches its source, and drop any that does not
In my version
- Claude Code on a Friday afternoon schedule, a page in my notes and a link in my weekly update
Built it? Tell Polly.
Themes, week of 12 Oct (31 conversations)
1Setup is confusing (9): "I could not find where to add my second user."
2Wants export to a spreadsheet (6): "Our finance team lives in Excel."
3Price came up (4): "Hard to justify at five seats."
New this weekSSO requested by two accounts.
8Draft post ideas from my week
Three post ideas drawn from what I actually did and said this week, each with a hook line and why it is worth posting.
Details
Private to me; nothing is posted.
Ask first
- Which sources may it read? (default calendar, notes and your own sent messages)
- What should it avoid? (default anything about named customers, money or people who have not agreed)
- Where should the ideas arrive? (default a private message on Sunday evening)
Needs
- Any password or token is entered by you into your device's secure store, never pasted into a chat or saved in a plain file
- Read access to the sources and a record of what you posted before, so it does not repeat
- If your assistant cannot read one of these, paste it into the chat when it asks. A thinner version still works
Build
- Each Sunday, read the week's calendar, notes and sent messages.
- Find three moments that taught or surprised you. Skip anything private. If you have a customer-voice run, add one idea that answers a confusion or complaint it found this week.
- For each, write a one-line hook and one line on why it is worth posting.
- Never post. On a reply with a number, draft that one for you to edit.
Check
- Run it on last week; every idea points to something real in your notes
- Confirm no idea names a customer or a figure you marked private
- Say whether the writing step ran for real or on sample text. Check that every quote and link on the page matches its source, and drop any that does not
In my version
- Claude Code on a Sunday schedule, ideas sent as a private message
Built it? Tell Polly.
Three ideas from your week
1The webinar nobody asked for: 118 signups from one email. Hook: "We almost cancelled it."
2What a customer said about onboarding on Tuesday's call. Hook: "The 5-minute rule."
3A thing you changed your mind about: pricing page copy.
Reply with a number and I will draft it.
9Draft a launch brief from the roadmap and release notes
A first draft launch brief: what is shipping, who it is for, the one-line message, three proof points from real customer words, and what sales and support need to know.
Details
Ask first
- Which launches? (default anything on the roadmap dated within the next two weeks)
- Where do the release notes and feedback live?
- Who gets the brief? (default product, sales and support)
Needs
- Read access to the roadmap, release notes and a place customer words are kept
- If your assistant cannot read one of these, paste it when it asks. A thinner version still works
- Any password or token is entered by you into your device's secure store, never pasted into a chat or saved in a plain file
Build
- Every Monday, find roadmap items with a launch date in the next 7 days, reading the date from the roadmap field you name. For each, read the item, its tickets and release notes.
- Find three real customer quotes that bear on it, with where they came from.
- Write the message in one line, the audience, three proof points, and what each team needs to know.
- Mark anything with no source as missing and do not fill it in.
Check
- Run it on a past launch; every proof point has a real quote
- Confirm the missing items are listed, not invented
- Say whether the writing step ran for real or on sample text. Check that every figure, quote and link matches its source, and drop any that does not
In my version
- Claude Code on a weekly schedule, a draft brief in my docs
Built it? Tell Polly.
Launch briefshared dashboards (ships 4 Nov)
Forteam leads who report upward.
Messageshare a live view, not a screenshot.
Proof"I stopped sending Friday decks" (customer call, 9 Oct).
Sales needit is on all paid plans. Support need: the permission model has two roles.
10Check our messaging against how customers describe us
Our headline and key phrases against the words customers use when they describe what we do.
Details
Where they match, where they do not, and three phrases to try.
Ask first
- Which pages hold your messaging? (home page, pricing, a sales deck)
- Where are customer words kept? (call notes, reviews, emails)
- Where should the note land? (default a page in your docs)
- How often? (default monthly)
Needs
- Read access to your copy and to customer words, or paste them in
- If your assistant cannot read one of these, paste it when it asks. A thinner version still works
- Any password or token is entered by you into your device's secure store, never pasted into a chat or saved in a plain file
Build
- Collect your headline and key phrases.
- Collect the phrases customers use for the same job, with how many times and a source.
- List matches and gaps. Never count a phrase it did not find.
- Offer three phrases to try, each tied to a customer phrase.
Check
- Run it with a phrase you know customers say; it is counted and sourced
- Confirm every suggested phrase traces to a customer phrase
- Say whether the writing step ran for real or on sample text. Check that every figure, quote and link matches its source, and drop any that does not
In my version
- Claude Code on a monthly schedule, a page in my docs
Built it? Tell Polly.
Messaging check, October
We say"intelligent reporting platform." Customers say: "a way to stop building Friday decks" (seen 11 times).
Gapnobody uses "intelligent" or "platform."
Try"Reports that update themselves." "No more Friday decks." "One view the whole team trusts."
11Summarise win and loss themes
Why we won and why we lost this month, grouped into themes with a count and one quote each, so the next positioning change rests on what buyers said.
Details
Ask first
- Where do closed deals and their reasons live?
- What counts as a theme? (default a reason given by at least two deals; if a deal gives two reasons, count it once in each theme and say so, so the totals can exceed the number of deals)
- Where should the summary land? (default a page in your docs)
Needs
- Read access to deals and notes, or paste a month's worth
- If your assistant cannot read one of these, paste it when it asks. A thinner version still works
- Any password or token is entered by you into your device's secure store, never pasted into a chat or saved in a plain file
Build
- List the month's closed deals with their stated reason.
- Group reasons into themes. Reuse last month's names for the same theme.
- For each theme: a count, deal names and one quote.
- Mark a theme new if it was not in last month's list.
Check
- Run it on last month; every quote matches a note
- Confirm each deal is counted at least once, and that a deal with two reasons appears in two themes and is marked
- Say whether the writing step ran for real or on sample text. Check that every figure, quote and link matches its source, and drop any that does not
In my version
- Claude Code on a monthly schedule, a page in my docs
Built it? Tell Polly.
Win and loss, October (14 deals)
Won (6): "Easy to set up" (4), "Support answered fast" (3).
Lost (8): "Missing a connector we need" (3), "Price at five seats" (3), "Chose a bigger vendor" (2).
New"connector" appears for the first time.