A skill you install in your own Claude Code

The Sales Brief.

A skill you install in your own Claude Code. Paste four prompts. Around half an hour to your first brief. Fifteen minutes per meeting after that. Every fact in the brief carries a clickable link back to where it came from, and your angle into the room is calibrated for what you sell and who you sell to.

Around 30 min to first brief 4 paste-prompts 15 min per meeting after No coding

The problem, and the promise.

A salesperson, five minutes before a first discovery call, wants to walk in knowing things the prospect will be surprised you know. Not a recital of their LinkedIn About section. Real things: what the company actually sells in the segment your prospect runs, what changed there in the last quarter, who else on the buying committee will matter, where the friction is going to sit.

Doing it properly is slow. The information is scattered across LinkedIn, the company's own site, recent news, filings, and reviews. Pulling it together takes the best part of an hour per meeting. So under time pressure it gets skimped or skipped, and the rep walks into a one-shot credibility moment underprepared. Generic questions. Missed context. The wrong angle. And when prep is rushed it is easy to carry in a stale or simply wrong fact, which is worse than walking in with none.

The category of tools that promises to fix this fabricates. We tested it. Pre-meeting briefs from the big SaaS prep tools, and from the open-source agents floating around GitHub, generate confident facts that are not in the sources cited. The brief says the company raised £30m in Series A. The cited source says they raised £20m in Series B. A rep who walks into a discovery call with three confidently wrong facts loses the room in the first ten minutes.

So we built a sales meeting brief that does the thing a prompt does genuinely well, and is honest about the one line it does not cross. Two halves.

The first half is sourcing. Every hard fact in the brief carries a clickable link to where it came from, or it does not appear as a fact. The brief says plainly that the skill has not verified those facts for you. You click and check anything that matters before you walk in. Sourcing is what a prompt can do reliably. Verification is engineering work, and engineering work belongs in code, not in a model asked to mark its own homework.

The second half is calibration. The brief reads the prospect through what you sell and who you sell to, and produces a section called Your angle: where this prospect fits your ICP, where your offer touches their world, what might make this hard, the questions to ask that trace back to specific facts, the objections to anticipate, the candidate opening angles you can lift. The brief gives you material. It does not write your pitch.

You install the skill in your own Claude Code. Four paste-prompts. Around half an hour from start to your first brief.

Fifteen minutes per meeting after that. Briefs land in your ~/meetings/ folder as markdown for editing, a self-contained HTML page for reading, and a PDF on request via your browser.

The four prompts are right below. Each step tells you what the prompt builds and why it works the way it does. Hit Copy prompt, paste into Claude Code, follow the questions.

Here's how the install works:

Step 1

Set yourself up.

Paste Prompt 1. A short conversation, about five minutes. Claude Code asks who you are, what your business does, and who you sell to, then writes three small setup files the skill reads on every brief.

Step 2

Install the agent.

Paste Prompt 2. About a minute. This lands the skill itself, so /sales-brief appears in your command menu, plus the ~/meetings/ folder where every brief will be saved.

Step 3

Add the research team.

Paste Prompt 3. About a minute. This adds six research agents, each looking at a different angle on the person and company you are meeting, plus a check that confirms you have the right person before any research starts.

Step 4

Brief writer, tools, first run.

Paste Prompt 4. The heaviest step, about fifteen minutes to your first brief. It adds the part that writes the brief, connects two free research tools, does one quick restart, and runs your first real brief.

Before you start.

If you do not already have Claude Code open on your machine, this is where to start. Anyone with Claude Code running can skip to Step 1.

Claude Code is the local tool from Anthropic. It runs on your laptop and connects to Claude through your subscription or your API. It is what makes this skill possible: a prompt-based agent you install once and run as a slash command. It is not the Claude tab in your browser, and not the Claude desktop chat app. It is its own thing.

The install works the same on a Mac or on Windows.

Step 1

Install Claude Code.

Go to docs.claude.com/en/docs/claude-code and follow the install instructions for your operating system.

Step 2

Sign in.

Sign in with a Claude account. The free tier is enough to complete the install. Daily use needs Pro or Max (the monthly tiers Anthropic sells), or pay-as-you-go API credits via console.anthropic.com if you would rather start at the lowest commitment.

Step 3

Open Claude Code in a working folder.

On a Mac: open Terminal or iTerm2, type cd ~, press Enter (you are now in your home directory, which is where the skill will write), then type claude and press Enter. On Windows: open Windows Terminal or PowerShell, type cd ~ and press Enter, then type claude.

If you would rather not touch a terminal at all, Claude Code also runs as a desktop app. Open it, point it at your home folder, and Claude is ready in there. You will know it is working when you see the Claude Code prompt waiting for your input. That is the place every prompt in this install lands.

Step 4

Have your company website handy.

One thing you will need: the URL of your own company website (or, if you sell independently, the URL of where your work lives). Step 1 reads it to ask sharper setup questions. That is the only preparation. The two free tool sign-ups come later, inside Step 4, where the payoff is one minute away.

 

Want help getting this installed? → 30 mins · Google Meet · Free

Step 1. Set yourself up.

Paste Prompt 1 (the box below). This is a conversation, about five minutes. Claude Code asks you who you are, what your business does, and who you sell to, one question at a time. It can read your company website to ask sharper questions, or you can just answer directly. Your answers land in three small files the skill reads on every brief.

After Prompt 1 you will have three files in ~/.claude/:

These are the lens every brief reads the world through. You can edit any of them any time.

One paste. Three setup files. About five minutes.

Set Yourself Up Paste into Claude Code
Prompt 1
You are guiding me through setting up my own sales-brief agent in Claude Code (a command called /sales-brief). Keep it simple, warm and clear, in plain everyday words. Write in plain sentences, with no dashes. Skip technical jargon where you can; if something technical shows up that I will see on screen (a box asking me to approve an action, or a word like "bash"), tell me plainly what it is and that it is a normal part of how Claude Code works. The goal is to get me set up smoothly, not to teach me how it all works.

Above all, do not ask me things you can find out for yourself. Read whatever I point you at, work out what you can, and just check it with me. Only ask outright for things no website could know. Ask one thing at a time and wait for my answer.

Follow these steps in order.

1. Greet me, then offer me the choice. Tell me: "Let's get you set up. I just need a picture of who you are, what your business does, and who you are trying to win as customers, so every brief is tuned to you. We can do this whichever way suits you:
   (a) point me at your website, and your LinkedIn or a file too if you have one handy, and I will read it and check what I find with you,
   (b) paste in any notes you have already got, or
   (c) answer a few quick questions.
   Which would you prefer?" Wait for my answer.

2. Gather what you can, based on my choice.
   - If I want you to read things: ask "Great. What is your company website? Just paste the link. A LinkedIn page or a file is welcome too, but the website on its own is plenty." Then read whatever I give you: use your built-in web reader (the WebFetch tool) for any web link (the homepage, plus its about, products or services, and customers or case studies pages if they exist), and read any file I point you at. Tell me "Reading that now, about half a minute" before you start.
   - If I want to paste: ask "Go ahead and paste whatever you have got. A bio, an About blurb, a few lines on what you sell and who you sell to. Anything helps."
   - If I want to answer questions: skip the reading and go to step 3, where you will ask me for the basics directly instead of drafting them.
   From whatever you read or I paste, pull out the exact words for as much of this as you can find: my name, my role, my company name, what the business does, the products or services it sells, and the names of any customers or case studies. If a fetch comes back mostly empty or cannot be read, just tell me plainly and carry on with whatever you did get.

3. Show me a draft and let me fix it. Do not ask me for anything you already found. Tell me what you worked out, in plain sentences:
   "Here is what I have got so far. Correct anything that is off.
   - You are {NAME}, {ROLE} at {COMPANY_NAME}.
   - Your business: {BUSINESS_DOES}.
   - What you sell: {WHAT_SELL}.
   - Your typical customer looks like: {WHO_SELL_TO}.
   {If you found named customers, add: 'And you have worked with {LIST_OF_NAMED_CUSTOMERS}.'}
   Anything to change, or shall I take that as right?"
   Wait. Update any value I correct. Store the confirmed values as NAME, ROLE, COMPANY_NAME, BUSINESS_DOES, WHAT_SELL, WHO_SELL_TO, and EXAMPLES (any named customers).
   For anything you genuinely could not find, leave it blank and ask me for just that one thing, simply and on its own.
   If I chose the questions route, ask for these one at a time instead, keeping each light and warm: my name; my role (however I would describe it, like Founder, Account Executive, or Consultant); the business I sell for (employer, my own company, agency, whichever it is); in a sentence, what it does; what I sell; and who I typically sell to.
   One sharper check, only if the company clearly sells several things: "Your company offers {LIST}. Which of those do you actually sell in your role, or do you sell across all of them?" Update WHAT_SELL with my answer.

4. Now the few things a website could not tell me. Ask these one at a time, kept easy, and let me skip any of them:
   - "How would you like me to write to you? Casual, or more formal? Longer answers, or short and to the point?" Store as VOICE.
   - "Is there anything you bring to a meeting that others might not? Maybe deep experience in their world, a track record with similar companies, or a point of view you are known for. A line or two is plenty, or just say skip." Store as WHAT_BRING.
   - "What does a good prospect look like for you, from experience? The signs that tell you a conversation is going somewhere good. Skip if you are not sure." Store as GOOD_PROSPECT.
   - "And anything that is usually NOT a fit? Skip if nothing comes to mind. This is not a filter that screens meetings out, you have already chosen to take the meeting. It just helps the brief flag where things might rub." Store as NOT_FIT.
   Set LANGUAGE to "English". Do not ask me about language.

5. **Write all three files.** Single-quote any frontmatter value that contains a colon, a special character, or an apostrophe (and double any apostrophe inside a single-quoted value). For any value I skipped, write "Not specified".

=== BEGIN ~/.claude/about-me.md ===
---
type: about-me
name: '{{NAME}}'
role: '{{ROLE}}'
company: '{{COMPANY_NAME}}'
language: 'English'
---

# About me

## Name
{{NAME}}

## Role
{{ROLE}}

## Business I sell for
{{COMPANY_NAME}}

## How I'd like Claude to write back to me
{{VOICE}}

## Language
English (edit this file if you'd prefer another)

---

*Edit this file any time. /sales-brief reads it before every meeting.*
=== END ~/.claude/about-me.md ===

=== BEGIN ~/.claude/about-my-business.md ===
---
type: about-my-business
---

# About my business

## What my business does
{{BUSINESS_DOES}}

## What I sell
{{WHAT_SELL}}

## What I bring to a meeting
{{WHAT_BRING}}

## Examples (optional)
{{EXAMPLES}}

---

*Edit this file any time your offer shifts.*
=== END ~/.claude/about-my-business.md ===

=== BEGIN ~/.claude/about-my-icp.md ===
---
type: about-my-icp
---

# About my ICP

## Who I sell to
{{WHO_SELL_TO}}

## What good prospects look like
{{GOOD_PROSPECT}}

## What's not a fit (optional)
{{NOT_FIT}}

---

*Edit this file any time your target shifts. /sales-brief reads it as a lens. It shapes how the brief reads a prospect's world, it does not qualify or disqualify any meeting.*
=== END ~/.claude/about-my-icp.md ===

6. Check your work by reading each of the three files back yourself (just open them, no terminal needed, so this works the same on any computer). For each of ~/.claude/about-me.md, ~/.claude/about-my-business.md and ~/.claude/about-my-icp.md, confirm it is there and that it opens and closes its top section with a `---` line. Tell me each one is in place, for example "about-me.md, saved." If any is missing or its top section does not open and close cleanly, fix it and check again.

7. Read it back to me using what you captured: "So you are {{NAME}}, {{ROLE}} at {{COMPANY_NAME}}, you sell {{WHAT_SELL}}, and you are looking for {{WHO_SELL_TO}}. You can edit any of these three files in ~/.claude/ whenever you like." (If a value runs long, shorten it just for this line.)

8. Tell me: "That is you set up, and that is 1 of the 4 prompts done. Your sales-brief agent is now tuned to you. Next, paste Prompt 2 and I will build the agent itself." Then stop. Do not do anything else.
Why this works

Three files, not one. Your business is what you are. Your ICP is what you are looking for. They are different things, they change at different rates, and splitting them lets each evolve without rewriting the other. This is how the GTM teams who do sales prep well actually keep their setup.

The ICP file is a lens to read prospects through, not a qualification form. There are no scoring fields, no prioritise or skip framing. You have already chosen to take the meeting; the brief prepares you for it, it does not qualify it. This is the line that separates the Sales Brief from every prospect-scoring tool in the category.

Setup runs first, not last. Most installs ask you to wire tools first and personalise later, which forces the new reader through the hardest step before they have any reason to believe the rest will be worth it. The Sales Brief flips that order. The first thing you do is a short conversation. No sign-ups, no keys, no terminal beyond the one you opened. The friction lands in Step 4, right before the payoff, where the motivation is highest.

Step 2. Install the agent.

Paste Prompt 2. About one minute. This lands the skill itself and writes the complete, final instructions inside it. The skill is now registered with Claude Code. Type /sales-brief and the command appears in the menu. You will also see ~/meetings/ created, the parent folder where every brief will land in its own dated sub-folder.

Nothing visible happens when you run /sales-brief yet. The skill is registered but the research team and the brief writer are not in place. Prompts 3 and 4 add them.

One paste. The agent installed. About one minute.

Install the Agent Paste into Claude Code
Prompt 2
You are guiding me through setting up my own sales-brief agent in Claude Code (a command called /sales-brief). This prompt installs the agent itself. Keep it simple, warm and clear, in plain everyday words. Write in plain sentences, with no dashes, and never read out file names, line counts, or words like frontmatter or runtime. Skip technical jargon where you can. If something technical shows up that I'll see on screen, like a box asking me to approve an action or a word like "bash", tell me plainly what it is and that it's a normal part of how Claude Code works. You don't need to ask me anything in this prompt: just follow the steps, show me what you made, tell me how far along we are, and point me to the next prompt.

1. Greet me, then tell me: "This prompt installs the agent itself, the /sales-brief command and the instructions behind it. I'm about to create a few small files for it. Claude Code will check with you before each one, which is just it keeping you in control. They're all plain text files going into your agent's own folder, so it's fine to say yes each time. There's nothing else for you to do but watch, and you'll switch it all on with one restart near the end. About 2 minutes."

2. Make sure the folder ~/.claude/skills/sales-brief/ exists. Create it if it doesn't (use whatever is right for this machine to make a folder — the path is the same everywhere).

3. Create the file ~/.claude/skills/sales-brief/SKILL.md with exactly the content between the two sentinel lines below. Write everything between "=== BEGIN SKILL.md ===" and "=== END SKILL.md ===", and do not include the sentinel lines themselves.

=== BEGIN SKILL.md ===
---
name: sales-brief
description: 'Pre-meeting research and brief for first sales meetings. Run before walking into a first sales call. Asks who you''re meeting and at which company, finds the right person, runs six research agents in parallel (Person, Company, Key people, What''s changed, Their sector, Challenges), and writes a faithful brief in markdown and HTML. Every hard fact carries a numbered link to its source, so you can check anything that matters. Interpretation is grouped into clearly framed read sections that cite the facts they rest on. Reads your standing setup files (about-me.md, about-my-business.md, about-my-icp.md) so the brief is tuned to what you sell and who you sell to.'
---

# /sales-brief — Sales meeting research and brief

Produce a faithful, sourced brief for a first sales meeting. The brief delivers research the meeting actually needs: who you are meeting, what their company does, what is recent and material, where your angle into the meeting sits, what to ask, what objections to expect, and a candidate opener. Every hard fact is quoted and linked back to its source. Interpretation is grouped into clearly framed read sections that cite the facts they rest on. You walk in calibrated; you still write the words.

## When to use

- Before any first sales meeting where doing your homework matters
- When you have a name and a company and 15 minutes to prepare
- When the prospect is a stranger and you want grounded facts before you start writing your opener

When not to use:

- Internal meetings (this is sales-meeting prep, not a generic briefing tool)
- Meetings where you already have a prior relationship and notes (read your notes)
- Post-meeting analysis (use your own follow-up process)

## Configuration

This skill reads three standing setup files from your home folder. They are written once by the setup prompt and then edited any time your business or target shifts.

- ~/.claude/about-me.md — name, role, the business you sell for, how you like Claude to write back to you, your language
- ~/.claude/about-my-business.md — what your business does, what you sell, what you bring to a meeting
- ~/.claude/about-my-icp.md — who you sell to, what good prospects look like, optionally what's not a fit

If any of the three files is missing when the skill runs, the skill still produces a research brief; Your angle (the section that uses your setup files — tuned questions, tuned objections, opening angles) is only as rich as the setup it can read. Tell the user once, then proceed.

## Inputs

The skill asks for these conversationally. No flags.

- Person name (required) — who you are meeting, e.g. "Maria Hernandez"
- Company (required) — the company they work for, e.g. "Northwind Logistics"
- Optional meeting context (one line) — how the meeting came about (cold approach / inbound enquiry / referral) and what you're hoping to get out of it, e.g. "inbound demo request, hoping to scope their onboarding pain"

## How to talk to the user while you work

The brief takes a few minutes to build, and you talk to the user the whole way through. Keep it warm, plain and human, the same way the install spoke to them.

- Use everyday words and short sentences. Write with no dashes.
- Say what you are doing and what you found, simply. For example: "I'm reading their latest news now," or "I found three people who could be the one you're meeting, here they are."
- Do not narrate your inner workings. Skip words like skill, agents, fanning out, cache, files on disk, running notes, scaffold, race, synthesiser, search syntax, and any file names. The user does not need them.
- When something technical has to appear on screen (a box asking the user to approve a step, or a word like "bash"), tell them plainly what it is and that it is a normal part of how Claude Code works, then carry on.
- Signpost progress so the user is never left wondering, and mark each milestone as it lands.
- No teaching boxes, no asides, no insight callouts. Just tell them simply what is happening and what you found.

## Workflow

The skill runs in this order. Each step explains itself to the user before running. Steps 4, 5, and 6 each begin by checking whether their engine files are installed yet — until the full install is complete, a step that finds its files missing tells you which prompt to paste next and halts. Once everything is installed, those checks pass silently and the skill runs end to end.

### Step 1 — Today's date

Read today's date into a variable so every later step (folder name, brief date, recency filters) uses the same date.

TODAY=$(date +%Y-%m-%d)

This is a one-line shell read inside the skill. It is not a Claude Code hook. It does not touch the user's global config.

### Step 2 — Conversational intake

Ask one question at a time. Wait for the answer before asking the next.

1. "Who are you meeting? Just the person's name is fine."
2. "What company do they work for?"
3. "Anything I should know about this meeting? For example, is it a cold approach, an inbound enquiry, or a referral, and what are you hoping to get out of it? One line, or just say 'no' to skip."

Hold the three answers in memory as PERSON, COMPANY, MEETING_CONTEXT (the third may be empty).

### Step 3 — Confirm back

Stitch the answers into one short readback and ask the user to confirm before any research starts.

"So you're preparing for a first meeting with {PERSON} at {COMPANY} (and, if there is meeting context, mention it). I'll find the right person, gather sourced facts from six angles, and write you a brief. Ready to start, or anything to correct?"

Wait for confirmation. If the user corrects a value, update it and read back again before continuing.

### Step 4 — Research

Install check: if ~/.claude/skills/sales-brief/agents/right-person-check.md does not exist, the research team is not installed yet. Tell the user: "The research team isn't installed yet. Paste the next install prompt (Prompt 3) to add the six research agents, then run /sales-brief again." Then stop. Otherwise continue.

Run the right-person check first. Read agents/right-person-check.md and execute it with the intake values from Steps 2 and 3 (including the optional meeting context). It classifies the result set as CLEAR / AMBIGUOUS / WEAK / NOT FOUND and returns its verdict plus the two confirmed identity rows.

- CLEAR: continue silently to the team announcement.
- AMBIGUOUS / WEAK / NOT FOUND: stop, show the candidates with the agent's reasoning, wait for the user to pick or skip. If the user skips, note the gap and continue with the company-side research only.

Once identity is locked, create the meeting folder and its cache/ subfolder at ~/meetings/{TODAY}-{company-slug}/cache/ (where company-slug is the company name lowercased and hyphenated; this folder is referred to below as {slug}). Create ~/meetings/{TODAY}-{company-slug}/running-notes.md from templates/running-notes.md, substitute the meeting metadata, and write the right-person check's verdict and its two identity rows into it.

The skill is the only thing that writes running-notes.md. The agents never write it themselves — six agents writing one file in parallel would race and silently lose rows. The agents return their rows to you; you write the file.

Announce the team:

"I'm looking into {PERSON} and {COMPANY} now, from six angles at once: who they are, the company itself, the people around them, what's changed for them recently, their market, and the challenges they're facing. Back in about a minute."

Then fan out all six agents in a single message, multiple tool calls, instructing each to retry once after a few seconds if a search comes back rate-limited (HTTP 429) before recording a gap — even with a free Exa key, six agents searching at once can occasionally be throttled. Each reads its own prompt file from agents/, runs its searches, caches the page text of every URL it fetches into ~/meetings/{TODAY}-{company-slug}/cache/{url-slug}.txt. {url-slug} is the URL lowercased, with http(s):// removed, every run of non-alphanumeric characters replaced by a single hyphen, trimmed to 80 characters. Each cache file has a distinct name, so parallel caching is safe. Each agent returns its facts to you as a markdown table block in its final message; it does not write running-notes.md.

LinkedIn (nothing to install): the Person agent gets the publicly-visible profile material from Exa search. Public profiles usually carry plenty on their own.

When all six agents have returned, write running-notes.md in one pass:

- Append every returned row — keep them all, including repeats from different agents or syndicated reprints of the same item. Running-notes is the complete audit trail; de-duplication happens later, at the synthesiser, where source agreement is actually weighed (it is not collapsed here).
- **Sanitise each fact before writing it into the table:** replace any literal `|` in the fact text with `/`, and collapse any newlines to spaces. A raw pipe inside a markdown table cell splits the row, so this is not optional.
- Write each agent's returned gap: or contradiction: lines into the Open gaps section.
- Set the frontmatter status: done and agents_done to the full list, then continue to Step 5.

Resume: if a previous run was interrupted and running-notes.md already holds rows for some agents, re-run only the agents not yet represented.

### Step 5 — Brief writing

Install check: if ~/.claude/skills/sales-brief/synthesiser.md does not exist, the brief writer is not installed yet. Tell the user: "Research complete. See running-notes.md in the meeting folder for everything I found, with sources. The brief writer isn't installed yet. Paste the next install prompt (Prompt 4) to install it." Then stop. Otherwise continue.

After Step 4 (Research) completes and running-notes.md exists, invoke the synthesiser. Read ~/.claude/skills/sales-brief/synthesiser.md and execute its sequence:

1. Read running-notes.md (all rows).
2. Read ~/.claude/about-me.md + about-my-business.md + about-my-icp.md (tolerate missing files).
3. Map facts to sections by who_about.
4. Write sections 1-4 as readable prose built from the sourced fact rows, each specific fact or number carrying its [n] (restate facts in plain words, never add to or change them; the exact source words stay in Sources); close section 4 with the "Why now:" read line. Apply source independence before weighing any "why now" signal — collapse syndicated/duplicate sources to one (ten reprints of one announcement are one signal), keep the most authoritative as the surviving [n], flag genuine conflicts.
5. Write section 5 Your angle — open with the "skill's read" note, then the going-in hypothesis (inference to test), ICP match, adjacency, risk flags. Each line cites [n]. No per-line tag; the section frame signals it's interpretation.
6. Write section 6 Questions, section 7 Objections (preparation, not a script), section 8 Opener (insight-led angles) and the single next step to propose.
7. Write the TL;DR last from already-confirmed body facts.
8. Write the Sources section listing every [n].
9. Apply templates/brief-html.html to render the HTML.
10. Write brief.md and brief.html into ~/meetings/{slug}/.
11. Multi-attendee meetings: one per-attendee subfolder, one brief each.

Then tell the user, plainly, that the brief is sourced but not automatically fact-checked: "Every fact in your brief has a link to where it came from, so you can click and check anything that matters before the meeting. I have not checked them for you, so treat the links as your way to confirm the things that count."

## Output paths

Each run of /sales-brief creates one folder under ~/meetings/ containing: running-notes.md (the sourced facts, each with a link) plus brief.md and brief.html (the brief). The meeting folder is created on the first real run, not at install. For meetings with multiple attendees, the skill writes one folder per attendee under the same date-slug parent.

## Tool routing

The research agents use Exa and Firecrawl if they're connected. If neither is connected yet, the agents fall back to the built-in WebSearch and WebFetch tools — the brief is still produced, with slightly less reliable sourcing. The agents never invite an API key into the chat.

## Files this skill writes

The skill writes nothing on disk beyond its intake until a real run. The research engine and the brief writer write files into the meeting folder under ~/meetings/. The skill's own installed files (agents/, synthesiser.md, templates/) are written once by the install prompts and not modified at runtime.
=== END SKILL.md ===

4. Create the folder ~/meetings/ (this is where each brief will be saved later) and an empty file ~/meetings/.gitkeep inside it so the folder exists.

5. Check your work quietly, then tell me plainly. Read SKILL.md back and check the ~/meetings/ folder: make sure the file is there and complete (it should open and close its top section cleanly) and the folder exists. Do not read the technical details out to me. Just tell me, in plain words, "Your agent's instructions are saved, and the folder for your briefs is ready." If anything is missing or looks wrong, tell me plainly and stop rather than carrying on.

6. Tell me: "The agent is installed — its command and instructions are in place, and the ~/meetings/ folder where your briefs will be saved is ready too. That's 2 of the 4 prompts done. There's nothing to switch on yet; we do that with one restart at the very end. Next, paste Prompt 3 and I'll add its research team." Then stop. Do not create anything else.
Why this works

The instructions are written once, complete and final. They name every agent and template that Prompts 3 and 4 will create, even though those files do not exist yet. An instruction file is allowed to name a file before that file exists, and writing a brand-new file cannot fail the way editing an existing one can. There is no spot to find, nothing to truncate, nothing to duplicate.

This is the load-bearing design choice of the install. The bug that breaks Claude Code skill installs in this category is the in-place edit: a later prompt tries to find a section in the instructions, fails to match exactly, and inserts the wrong thing or duplicates a block. The Sales Brief avoids the entire category by writing those instructions once and never re-opening them. Every later prompt only creates new whole files.

What this means for you: if a prompt's file write does not land, the install says so plainly rather than continuing in a broken state. Each step also carries a small existence check, so the same instructions run cleanly at every stage and tell you which prompt to paste next.

Step 3. Add the research team.

Paste Prompt 3. About one minute. This adds six research agents, plus a right-person check that runs before any of them, plus the template the skill writes facts into.

Run /sales-brief now and Claude Code walks you through the per-meeting intake (who you are meeting, what their company is, an optional one-line note on what the meeting is for), runs the right-person check, fans the six research agents out at once, and writes facts into running notes. Then it halts cleanly with a note to paste Prompt 4 next.

Around fifteen minutes into a run, the notes are full of facts in the source's own words, each with a URL and the date the source was published. If your laptop closes mid-run, no work is lost: re-running picks up where it left off.

One paste. The research team installed. About one minute.

Add the Research Team Paste into Claude Code
Prompt 3
You are guiding me through adding the research team to a Claude Code skill called /sales-brief. Keep it simple, warm and clear. In a sentence, tell me the point of each step so I know what I'm getting. The goal is to get this in place smoothly, not to teach me how it all works. Use plain, everyday words and skip technical jargon where you can. When something technical does show up that I'll see on screen (a box asking me to approve an action, or a word like "bash"), tell me plainly what it is and that it's a normal part of how Claude Code works, then help me through it. Let me know how I'm getting on as we go. Write in plain sentences, with no dashes. Never read out file names, line counts, or words like frontmatter or runtime; keep everything in plain language.
This is the longest of the four prompts. It writes eight files. You won't ask me any questions beyond the opening acknowledgement. Just create the files in order, show me what you made, and point me to the next prompt.

Follow these steps in order. Do not skip ahead.

1. Greet me, then tell me: "Hi again. This prompt adds the research team to your sales-brief agent: six researchers, each looking at a different angle, plus a check to make sure you have the right person before anyone starts. I'll put everything in place, let you know what I've added, and point you to the next prompt. Takes about ninety seconds. Ready?" Wait for my acknowledgement.

2. Check the skill folder exists. Run `ls ~/.claude/skills/sales-brief/SKILL.md 2>/dev/null` — if this returns nothing, stop and tell me "I cannot find SKILL.md at ~/.claude/skills/sales-brief/SKILL.md. You need to paste Prompt 2 first to install the skill scaffold before this prompt can do its work." Then stop. Otherwise continue.

3. Create the agents folder and templates folder: `mkdir -p ~/.claude/skills/sales-brief/agents/ ~/.claude/skills/sales-brief/templates/`.

4. Create each of the eight files below by writing the literal content between its `=== BEGIN ... ===` and `=== END ... ===` sentinel markers byte-for-byte. Do not include the sentinel marker lines in the files. Create them in this order:

=== BEGIN ~/.claude/skills/sales-brief/agents/right-person-check.md ===
---
name: right-person-check
purpose: 'Confirm the right person and company before any research runs. Classify the result set as CLEAR / AMBIGUOUS / WEAK / NOT FOUND; proceed only on CLEAR, otherwise ask the user.'
---

# Right-person check

## Goal

Land on one person and one company before the team fans out. A brief on the wrong person or company is the worst failure, so this gate runs first.

## Inputs

- `PERSON` — the name from intake
- `COMPANY` — the company from intake
- `MEETING_CONTEXT` — optional one-line context

## Tools

Exa MCP (`mcp__exa__web_search_exa`), three searches in parallel:

- `"{PERSON}" "{COMPANY}"` — primary disambiguator
- `"{PERSON}" {COMPANY} site:linkedin.com/in` — find the LinkedIn profile
- `"{COMPANY}" official site` — find the company's canonical URL

## Classify

Corroboration counts only across **independent source types** — their LinkedIn, the company's own site, and genuinely separate reporting are three signals; ten reprints of one press release are one signal, not ten. Agreement between copies of the same item is not confirmation.

- **CLEAR** — the right person + company is confirmed by two or more *independent* source types (e.g. their LinkedIn lists the company AND the company site lists them)
- **AMBIGUOUS** — two or more plausible candidates
- **WEAK** — one thin match (mentioned in passing, no LinkedIn, no employer confirmation), or apparent confirmation that all traces back to a single syndicated item
- **NOT FOUND** — no confirmable identity

## Behaviour

| Result | Do |
|---|---|
| CLEAR | Continue silently. Write the confirmed LinkedIn + company URLs as the first two running-notes rows. |
| AMBIGUOUS | Stop. Show the candidates with your reasoning ("Sarah Jones at Northwind Logistics in London, OR Sarah Jones at Northwind Software in Bristol?"). Wait for the user to pick. |
| WEAK | Stop. Show what was found. Ask: proceed and flag the gap, or refine the inputs? Wait. |
| NOT FOUND | Stop. Offer: (a) skip person-side research and run the company agents only, (b) refine the name or company, (c) stop. Wait. |

## Output

Return your verdict (CLEAR / AMBIGUOUS / WEAK / NOT FOUND) and these two rows to the skill — the skill writes `running-notes.md`, you do not:

- person confirmed, fact "{PERSON} confirmed at {LinkedIn URL}", source_url = LinkedIn URL, source_date = run date
- company confirmed, fact "{COMPANY} confirmed at {url}", source_url = company URL, source_date = run date

On WEAK / NOT FOUND where the user proceeds anyway, return a note for the progress line ("right-person: WEAK — person research carries lower confidence").

## Rules

Exa MCP only. Classify by judgement; no numeric threshold. Corroboration counts across independent source types only; never count reprints of one item as multiple confirmations. If anything you show the user surfaces on screen (candidates to choose between, a gap to confirm), speak in plain everyday words: no dashes, no jargon, no insight asides, no file names or search syntax.
=== END ~/.claude/skills/sales-brief/agents/right-person-check.md ===

=== BEGIN ~/.claude/skills/sales-brief/agents/person.md ===
---
name: person
purpose: 'Research the person being met for a first sales meeting: role, background, public activity, rapport material, and anything sensitive to avoid.'
---

# Person agent

## Goal

Build a verbatim-sourced picture of the person the rep is meeting, so they walk in knowing who they're talking to: role, background, what they've said and done publicly, what they care about (the makings of a genuine opener), and anything sensitive to steer around. One person, deep — the wider org is the Key people agent's job.

## Inputs

- Confirmed person identity (LinkedIn URL + name) from right-person-check
- Confirmed company

## Tools

- Exa MCP for recent public activity. Recency-bound searches use `mcp__exa__web_search_advanced_exa` with `startPublishedDate` = today minus 365 (ISO YYYY-MM-DD); undated searches use `mcp__exa__web_search_exa`. Queries: `"{PERSON}" {COMPANY}`, `"{PERSON}" interview OR podcast OR talk`, `"{PERSON}" article OR essay`.
- LinkedIn: Exa public search for what's publicly visible (current role, background, posts, talks, articles) with real URLs. Public profiles usually carry plenty on their own — role, history, recent posts, public activity. Never drive the user's browser.
- Firecrawl MCP for any specific URL.

## What to capture

- Current role (verbatim) + tenure if visible
- Career trajectory (previous roles, verbatim)
- Recent public activity: posts, articles, talks, podcasts (last 12 months, dated)
- Rapport / opener material: what they care about, recurring themes in their posts and talks, public stances
- Background / education, only if it gives a rapport hook
- Landmines to avoid: recent bad press, layoffs, a lawsuit, a failed product they're likely defensive about. Lead the fact with "Landmine: ".
- Anything they've said publicly about their role or direction

## Output

Return your facts to the skill as a markdown table block (one fact per row, verbatim quotes); do not write `running-notes.md` yourself. Columns:

| who_about | fact | source_url | source_date |
| person | "Joined {COMPANY} as Head of Product in June 2024, after six years at Stripe" | https://linkedin.com/in/{slug} | 2026-05-28 |

When you put a fact in the table, replace any literal `|` inside the quoted text with `/` so it cannot break the table row.

## Rules

Quote verbatim, never paraphrase. No fabricated rapport. If your searches leave the remit uncovered, or sources conflict, return a `gap:` or `contradiction:` line rather than guessing.
=== END ~/.claude/skills/sales-brief/agents/person.md ===

=== BEGIN ~/.claude/skills/sales-brief/agents/company.md ===
---
name: company
purpose: 'Research the company: what it does, who it serves, the tools and vendors it already uses, and its stated strategic priorities.'
---

# Company agent

## Goal

Build a verbatim-sourced picture of the company, read through the user's business + ICP lens: what it does, who it serves, the tools and vendors it already uses in the user's category, and where it's trying to go. Surface the right things for the synthesiser to find adjacency on; never invent facts to fit the lens.

## Inputs

- Confirmed company canonical URL
- User's `about-my-business.md` + `about-my-icp.md` (context for what to weight)

## Tools

- Firecrawl MCP: scrape the About, customers, case studies, leadership, and careers / job-post pages (`mcp__firecrawl__firecrawl_scrape` on each — job posts are a strong signal of the tools they already use).
- Exa MCP: `"{COMPANY}" overview`, `"{COMPANY}" customers OR case studies`, `"{COMPANY}" uses OR "built with" OR "tech stack" OR vendor`, `"{COMPANY}" strategy OR priorities OR roadmap OR "investing in"`. For the recent-news query use `mcp__exa__web_search_advanced_exa` with `startPublishedDate` = today minus 180.

## What to capture

- What they do (verbatim from their own site)
- Where they sit (size band, geography, public/private, founding year — only what's verbatim-confirmable)
- Who they serve (named customers, case studies, the kind of work they showcase)
- Tools and vendors they already use in the user's category — are they already on a competitor? Inferred from job posts, tech signals, reviews; mark inferences "inferred".
- Stated strategic priorities — where they're going, not just pain: from exec interviews, job posts, investor material, verbatim
- Light G2 / Glassdoor sentiment where it signals buying intent or internal stress (patterns across reviews, not a single review)

## Output

Return your facts to the skill as a markdown table block (verbatim quotes, source URLs); do not write `running-notes.md` yourself. Tool/vendor inferences carry "inferred" in the fact column.

## Rules

Quote verbatim, never paraphrase. Flag inferences as inferred; never assert them as fact. If your searches leave the remit uncovered, or sources conflict, return a `gap:` or `contradiction:` line rather than guessing.
=== END ~/.claude/skills/sales-brief/agents/company.md ===

=== BEGIN ~/.claude/skills/sales-brief/agents/key-people.md ===
---
name: key-people
purpose: 'Identify the decision path around the contact (manager, economic buyer, champion, technical evaluator/blocker) plus the CEO and founders. 3-6 people, not a roster.'
---

# Key people agent

## Goal

Surface the handful who matter beyond the contact: who runs the place, and who else likely has a say in anything the rep does together with them. Depth on a few, not breadth on dozens.

## Inputs

- Confirmed company + confirmed contact
- User's `about-my-business.md` (to judge which exec roles are relevant — a CTO for tech offers, a CRO for revenue)

## Tools

- Firecrawl MCP: the Leadership / Team / About page
- Exa MCP: `"{COMPANY}" CEO OR founder`, `"{COMPANY}" leadership team`, `"{COMPANY}" "{CONTACT}" reports to OR manager`
- The contact's LinkedIn (via the Person agent's search): their manager / reporting line if listed

## What to capture (3-6 people, never a flat list of 50)

Decision path first — the people who matter for getting this deal done:

- **Champion** — the contact, or someone visibly invested in this kind of work
- **Economic buyer** — the role that signs the contract (usually a director or VP one or two levels up)
- **Technical evaluator** — the role that assesses feasibility
- **Likely blockers** — anyone whose remit the offer might step on
- The contact's manager or reporting line, if findable

Then who runs the place: CEO + founders (name + role + tenure + one-line context), and exec-team members in roles relevant to the offer.

Mark each buying-committee guess as inference: "Inferred: {name + role} — likely {champion/economic buyer/etc.} because {one-line reason}." Flag every named person so the rep can check their own network for a warm intro. When a row is an inference rather than a sourced fact, set its `source_url` to `INFERENCE` so it reads as a clearly-marked guess, not a sourced fact.

## Output

Return your facts to the skill as a markdown table block (name + role + one-line context per person, source URLs); do not write `running-notes.md` yourself. Buying-committee rows carry "Inferred" in the fact column and `INFERENCE` as the `source_url`. Example:

| who_about | fact | source_url | source_date |
| key_people | "CEO: Tom Blomfield, co-founder, in role since 2015" | https://monzo.com/about | 2026-05-28 |

## Rules

3-6 people, never a flat list. Label inferences with `INFERENCE` as the source. Don't assert who decides — flag candidates and prompt the rep's own warm-intro check. If you can't confirm the decision path, return a `gap:` line rather than guessing.
=== END ~/.claude/skills/sales-brief/agents/key-people.md ===

=== BEGIN ~/.claude/skills/sales-brief/agents/whats-changed.md ===
---
name: whats-changed
purpose: 'Surface recent material moves at the company: M&A, funding, leadership changes, product launches, layoffs, strategic shifts, hiring, public commitments.'
---

# What's changed agent

## Goal

Tell the rep what just happened with this company, so they can time the entry and pick an opener. Material moves and buying signals both; the user's setup files drive interpretation of relevance, not whether a fact is included. This is the raw material for the synthesiser's "why now" read.

## Inputs

- Confirmed company
- User's `about-my-business.md` + `about-my-icp.md` (the lens, not a filter)
- Today's date

## Tools

Exa MCP with date filtering (`mcp__exa__web_search_advanced_exa`, `startPublishedDate` in ISO — 365 days for most, 90 for hiring):

- `"{COMPANY}" acquired OR acquires OR acquisition` (365)
- `"{COMPANY}" funding OR Series OR raised` (365)
- `"{COMPANY}" CEO OR appointed OR hired OR resigned` (365)
- `"{COMPANY}" launched OR launches OR announcing` (365)
- `"{COMPANY}" layoffs OR restructuring OR redundancies` (365)
- `"{COMPANY}" hiring OR "now hiring" OR "open roles"` (90)

Firecrawl MCP: press release, hiring, news pages.

## What to capture

M&A, funding, leadership changes, product launches, layoffs / restructuring / pivots, hiring patterns + named open roles relevant to the offer — all verbatim, with the source's date.

## Recency

Drop anything older than 12 months unless it's background-significant (founding date). Every row carries the source's publication date; if none is visible, mark `source_date` "undated".

## Output

Return your facts to the skill as a markdown table block (verbatim quotes, source URLs, dates); do not write `running-notes.md` yourself. Return every reprint you find as its own row — do not collapse syndicated copies here; the synthesiser de-duplicates when it weighs them.

## Rules

Quote verbatim, never paraphrase. Don't gate inclusion by the user's lens — the lens interprets relevance later. If a date is missing mark `source_date` "undated"; if nothing material is found in the freshness window, return a `gap:` line rather than padding with stale items.
=== END ~/.claude/skills/sales-brief/agents/whats-changed.md ===

=== BEGIN ~/.claude/skills/sales-brief/agents/their-sector.md ===
---
name: their-sector
purpose: 'The one or two forces creating urgency for this prospect right now, plus a few named competitors. Not a full industry map.'
---

# Their sector agent

## Goal

Give the rep a sharp read on the prospect's world: the forces most likely creating urgency for this prospect right now, and the competitors they face by name. Not a full industry map, and not the user's own competitive set (the user knows their own competition).

## Inputs

- Confirmed company
- Today's date

## Tools

- Exa MCP: `"{COMPANY}" competitors OR alternatives` (`web_search_exa`); `{SECTOR} pressure OR regulation OR disruption OR consolidation` (`web_search_advanced_exa`, `startPublishedDate` = today minus 365).
- Firecrawl MCP: any competitor-comparison or sector page worth the read.

## What to capture

- The one or two macro forces most likely creating urgency for this prospect (a regulatory shift, market pressure, a competitor eating their lunch), each with a one-line implication
- 2-3 named competitors of the prospect (direct or indirect), each with a one-line implication

## Output

Return your facts to the skill as a markdown table block (source URLs); do not write `running-notes.md` yourself. Example:

| who_about | fact | source_url | source_date |
| their_sector | "Urgency force: FCA 2026 consumer-duty deadline — implication: compliance spend is board-level this year" | https://example.com/fca | 2026-04-10 |

## Rules

The prospect's competitors, never the user's own set. Urgency forces + named competitors only. No paraphrase. If you can't find a real urgency force, return a `gap:` line rather than inventing one.
=== END ~/.claude/skills/sales-brief/agents/their-sector.md ===

=== BEGIN ~/.claude/skills/sales-brief/agents/challenges.md ===
---
name: challenges
purpose: 'What is hard for the prospect right now and what it likely costs them. The grounding for good discovery questions.'
---

# Challenges agent

## Goal

Find what's hard for this company right now, and where it's sourceable, what that pain costs them. The rep uses this to ask specific discovery questions, not generic ones.

## Inputs

- Confirmed company
- (Sector context if available; this agent runs in parallel, so rely on your own searches)

## Tools

Exa MCP (`web_search_exa`; recency-bound queries use `web_search_advanced_exa` with `startPublishedDate` = today minus 365):

- `"{COMPANY}" challenges OR struggling OR difficulty`
- `"{COMPANY}" earnings call transcript` (public companies — surfaces named pain, often with a number)
- `"{COMPANY}" review OR complaints` (B2B SaaS — customer-reported pain)
- `{SECTOR} challenges OR pressure OR "cost of"` (365)

Firecrawl MCP: Glassdoor, G2 critical reviews, earnings-call transcripts.

## What to capture

- Pain named publicly by the exec team (earnings calls, interviews)
- Customer-reported issues (G2 / Capterra, with date)
- Employee-reported friction (Glassdoor, only when patterns repeat across reviews)
- Sector pressures specific to this company
- Cost of inaction where sourceable — what the pain costs them (financial, operational, reputational), in the source's own words. Quote the figure and its source; never invent one.

## Output

Return your facts to the skill as a markdown table block (verbatim quotes, source URLs); do not write `running-notes.md` yourself. Example:

| who_about | fact | source_url | source_date |
| challenges | "CEO on Q4 earnings call: 'Customer acquisition costs rose 22% year-over-year, putting pressure on unit economics'" | https://example.com/transcript | 2026-02-15 |

## Rules

Quote verbatim, never paraphrase. No invented cost figures. No proposed solutions — that's the synthesiser's job. If you can't source a real challenge, return a `gap:` line rather than guessing one.
=== END ~/.claude/skills/sales-brief/agents/challenges.md ===

=== BEGIN ~/.claude/skills/sales-brief/templates/running-notes.md ===
---
type: running-notes
meeting: '{{PERSON}} at {{COMPANY}}'
date: '{{YYYY-MM-DD}}'
status: in_progress
agents_done: []
---

# Running notes — {{PERSON}} at {{COMPANY}}

**Progress:** Meeting with {{PERSON}} at {{COMPANY}} on {{YYYY-MM-DD}}. Status: in_progress. Agents complete: [list as they finish].

**Right-person verdict:** [CLEAR / AMBIGUOUS / WEAK / NOT FOUND — filled by right-person-check]

## Facts

One fact per row. Verbatim source words in `fact`. URL in `source_url`. Source's publication date in `source_date` (or "undated").

| who_about | fact | source_url | source_date |
|---|---|---|---|
| | | | |

(The skill writes all rows here once, after the agents return their facts. Agents do not write this file directly. Every row is kept — including syndicated reprints and repeats across agents; this is the full audit trail, de-duplication happens at the synthesiser.)

## Open gaps

(Filled by the skill from the `gap:` / `contradiction:` lines the agents return, plus any right-person-check WEAK / NOT FOUND. Each line names what could not be confirmed, or where sources conflict, and why.)
=== END ~/.claude/skills/sales-brief/templates/running-notes.md ===

5. After all eight file writes, quietly check your work by reading the files back. Do not read the technical details out to me (no file names, no line counts). Just confirm everything is in place, then tell me in plain words: "All set. Your agent now has six researchers, each covering a different angle on the person and company you're meeting, plus a check to confirm you have the right person before the research starts." If anything is missing, say so plainly rather than carrying on.

6. Tell me: "Research team installed. Your agent can now find the right person and gather sourced facts from six researchers, all running at the same time. That's 3 of the 4 prompts done. Next, paste Prompt 4 and I'll add the part that writes your brief."

7. Then stop. Do not create anything else.
Why this works

A brief on the wrong person is the worst failure of all. The right-person check is the gate that runs before any research, classifies the result as clear, ambiguous, weak, or not found, and proceeds silently only when it is clear. Otherwise it shows you the candidates and asks. No research spend before the human is locked.

Six research agents instead of one. Each runs in fresh context with a tight scope. Person dives on one human. Company maps the prospect's company. Key people scans the wider org. What's changed surfaces material moves at the prospect. Their sector surfaces named competitors and industry dynamics. Challenges hunts the friction patterns the rep will want to ask about. The alternative is one large agent trying to do all of it, which is what every other tool in the category does, and it produces shallow output on each. Six agents, fresh context per agent, produce depth on each.

The agents fan out, the skill writes. Each agent returns its rows of sourced facts to the skill, which is the sole writer of the running notes. Six agents writing one file at once would race and silently lose rows. Fan-out then fan-in keeps the notes coherent.

Key people is what reps care about most and what category tools systematically under-deliver on. The agent returns the CEO and founders, the named exec team where relevant, the contact's reporting line where it can be found, and the likely buying committee, with each role inferred from public signals. Inferences are labelled as inferences. Three to six named people with role and one-line context. Not fifty names with no story. And What's changed surfaces news about them specifically, while Their sector surfaces news about their world, so the rep can scan the two separately rather than as one indistinct list.

Step 4. Brief writer, tools, first run.

Paste Prompt 4. The heaviest step. About fifteen minutes to your first brief. It has three phases.

Phase 1: the brief writer. The part that turns the running notes into a brief lands in the skill folder, plus the two brief templates, one for editing and one for reading. About thirty seconds of file writes.

Phase 2: connect your research tools. Two free sign-ups, each a couple of minutes. Exa is built for semantic search and returns recent, relevant material plus synthesised answers with citations. Firecrawl reads pages properly, pulling clean full-page content even from sites the built-in fetch cannot read. Sign up at exa.ai and firecrawl.dev, then the install runs one command that wires them in. Your keys go into your own terminal, never into the chat. They are the recommended setup, not a hard dependency: skip them and the skill falls back to the built-in search and still produces a brief, with slightly less reliable sourcing.

Phase 3: the one restart, and your first brief. Quit Claude Code and start it again, so the two tools and the new command register together. Then run /sales-brief on a real prospect. Around fifteen minutes later, your first brief lands in ~/meetings/ as a markdown file for editing, a self-contained HTML page for reading, and the full running notes. Every numbered link in the body goes back to the exact words the fact rests on.

Brief Writer, Tools, First Run Paste into Claude Code
Prompt 4
You are guiding me through adding the brief writer to a Claude Code skill called /sales-brief. Keep it simple, warm and clear. In a sentence, tell me the point of each step so I know what I'm getting. The goal is to get this in place smoothly, not to teach me how it all works. Use plain, everyday words and skip technical jargon where you can. When something technical does show up that I'll see on screen (a box asking me to approve an action, or a word like "bash"), tell me plainly what it is and that it's a normal part of how Claude Code works, then help me through it. Let me know how I'm getting on as we go. Write in plain sentences, with no dashes. Never read out file names, line counts, or words like frontmatter or runtime; keep everything in plain language.
IMPORTANT: later in this prompt you'll connect two tools that each need a free key. Never ask me to paste a key into this chat. When a key is needed, walk me through copying it straight into a command in a separate terminal on my own machine; the key never appears in our conversation.
This is the last prompt. It writes the brief writer, then connects your two research tools and switches everything on. I'll ask you a couple of quick things along the way.

Follow these steps in order. Do not skip ahead.

1. Greet me, then tell me: "Hi again. This is the last one. First I'll add the part that writes your brief, so your agent can turn everything it found into a clean, faithful brief: a plain version and a tidy web page you can open, print, or send on. Then we'll connect two tools that give it sharper sources, do one quick restart, and make your very first brief. About five minutes in all. Ready?" Wait for my acknowledgement.

2. Check the skill folder and research team exist. Run `ls ~/.claude/skills/sales-brief/SKILL.md 2>/dev/null` and `ls ~/.claude/skills/sales-brief/agents/ 2>/dev/null`. If either returns nothing, stop and tell me which prompt I need to paste first (Prompt 2 if SKILL.md is missing, Prompt 3 if the agents folder is missing). Otherwise continue.

3. Create the templates folder if it does not already exist: `mkdir -p ~/.claude/skills/sales-brief/templates/`.

4. Create the synthesiser file. Write the literal content between the sentinel markers byte-for-byte.

=== BEGIN ~/.claude/skills/sales-brief/synthesiser.md ===
---
name: synthesiser
purpose: 'Turn the running-notes facts into a faithful, readable sales brief. Write the sourced sections as plain, flowing prose built from the facts, with each specific fact or number carrying a numbered [n] link to its source; the exact source words live in the Sources list, not the body. Restate facts in plain words, but never add to or change what they say. Interpretation is grouped into clearly-framed read sections, each line citing the facts it leans on. Produce Your angle from the user setup files, opening with a going-in hypothesis and closing with a single next step.'
---

# Synthesiser

## Goal

Build a meeting-prep brief from `running-notes.md` that the rep can trust and actually wants to read. Write it the way a sharp colleague would brief you: plain, flowing prose, not a list of raw quotes. Every specific fact or number carries a numbered `[n]` link back to where it came from, so the rep can check anything that matters; the exact source words live in the Sources list at the end, not in the body. Restate facts in plain words, but never add to them or change what they say. Interpretation is grouped into clearly-framed "the skill's read" sections, each line citing the facts it leans on. The TL;DR is written last. Your angle reads the prospect's world through what the rep sells.

## Inputs

- `running-notes.md` — the source of every hard fact (read all rows).
- `~/.claude/about-me.md`, `about-my-business.md`, `about-my-icp.md` — the lens for Your angle (tolerate missing files; Your angle is thinner without them).

## What the synthesiser does NOT do

- Re-fetch, search, or call an LLM to "improve" or add to a fact.
- Add to or change what a fact says. Restating a fact in plain words is wanted; sharpening a number, hardening a hedge, or stretching a claim beyond what the source supports is not. When in doubt, stay close to the source and let the exact words in Sources carry the proof.
- Invent. Every body line is either a sourced fact carrying its `[n]`, or an interpretation that cites the facts it rests on.
- Pre-cook the pitch. No drafted opening lines, no strategic exec summaries, no multi-phase next-steps roadmaps. One next step to propose is fine; a phased plan is not.

## How facts and interpretation are shown

- **Sourced sections (sections 1-4):** readable prose built from the facts, with `[n]` after each specific fact or number it rests on. The citation is the signal it's sourced; the exact words live in Sources. Use a verbatim quote in the body only when the exact wording matters — something the person actually said, or a phrase that loses meaning if reworded.
- **Derived sections (section 5 Your angle, section 6 Questions, section 7 Objections, section 8 Opener and next step):** the skill's read of those facts. section 5 opens with the one-line note *"The skill's read of the facts above, not new facts."* Each line cites the `[n]`(s) it leans on. No per-line tag — the section frame carries the signal. Every citation is a numeric `[n]` that resolves to a Sources entry; the three setup files are the implicit lens for these sections and are never themselves written as a citation (no `[about-my-business]`-style tags).
- The going-in hypothesis (top of section 5) carries an explicit `(inference to test)`, because it's the boldest call.

## Source independence (before weighing agreement)

This applies wherever you treat a fact as well-supported — the section 4 *why now* read and the section 5 going-in hypothesis. Before agreement counts as confidence, in this order:

1. **De-duplicate first.** Collapse syndicated and duplicate sources to one: ten reprints of one press release are one source, not ten confirmations, and the same fact returned by two agents is one fact. Agreement between copies of the same item is not confirmation.
2. **Then weigh reliability.** Keep the most authoritative or original source as the surviving `[n]` — the company's own announcement or a primary outlet over an aggregator or reprint.
3. **Then resolve conflicts.** If genuinely independent sources disagree, prefer the more reliable and more recent, and note it; if it can't be resolved, flag it in the brief as `[sources disagree: ...]` rather than picking silently. Treat any `contradiction:` line in running-notes Open gaps as a signal to do this.

Running-notes keeps every row (the full audit trail); this collapsing happens only in how you read and weigh them, never by editing the file.

## Sequence

### 1. Read running notes

Open `running-notes.md`. Read the progress line, the right-person verdict, the fact rows, the Open gaps. Use all rows.

### 2. Read the setup files

Read the three `~/.claude/about-*.md` files. They drive Your angle. If they're missing, Your angle is thinner and the body still ships.

### 3. Group facts

Map each row to a body section by `who_about`:

| who_about | Section |
|---|---|
| person | section 1 Who you're meeting (rapport rows also ground the section 8 opener) |
| company | section 2 Their company |
| key_people | section 3 Key people (the decision path) |
| whats_changed, their_sector | section 4 What's recent and material (and why now) |
| challenges | section 6 Questions (grounds the questions); any cost-of-inaction row also feeds the section 5 going-in hypothesis |

Order facts within a section by source date (newest first for time-bound, chronological for biographical).

### 4. Write sections 1-4

Write each section as short, flowing prose — a tight paragraph or two, or a few full-sentence points — the way a colleague would brief you out loud. Build it from the facts, and put each `[n]` right after the specific fact or number it supports (the TL;DR already reads this way — write the whole brief like that). Assign citation numbers fresh: start at `[1]` and number in order of first appearance in the body, never carrying over the row order or any numbering from running-notes. Once the final set of facts is chosen, the numbers must run contiguously `[1]…[N]` with no gaps — a dropped source is not a skipped number, so renumber the survivors to keep the sequence unbroken. State facts in plain words; keep a verbatim quote only where the exact words matter. Keep approximations as approximations ("around 200 employees"). Lead with who or what the section is about, and stay scannable — no padding.

Close section 4 with a labelled read line: **Why now:** the one or two recent signals that make this the moment `[n]`, and what they imply. This is the only interpretation in sections 1-4. Apply Source independence first — a signal carried by ten reprints of one announcement is one signal, not ten.

### 5. Write section 5 Your angle

Open with the note: *"The skill's read of the facts above — interpretation, not new facts."* Then four parts, each line citing the `[n]`(s) it rests on:

**Going-in hypothesis** *(inference to test):*
- likely problem — the prospect's most likely problem, given sections 1-4 `[n]`
- likely cost — what it plausibly costs them, drawing on any cost-of-inaction fact `[n]`
- what good looks like — the outcome a fix would deliver

Phrase every line as a bet ("likely…", "probably…"), never as an assertion.

**ICP match:** 1-2 lines on where they fit the user's ICP `[n]`, 1-2 on where they don't `[n]`.

**Where your offer touches their world:** 2-4 bullets, each naming a specific signal from sections 1-4 and the touch-point with the user's offer `[n]`.

**What might make this hard:** 0-2 bullets, only if `about-my-icp.md`'s "not a fit" overlaps something in sections 1-4. Often empty.

If a line can't cite a fact, don't write it.

### 6. Write section 6 Questions to ask

5-10 grounded discovery questions, each tracing to a fact:

> "Given they've publicly committed to expanding into EU markets `[7]`, how is that programme going so far?"

Specific probes, not generic discovery.

### 7. Write section 7 Objections to anticipate

3-5 objections the prospect may raise, grounded in their situation (role, public stance, recent moves, sector pressures), each with a one-line note on why it's likely `[n]`. These are preparation for the rep, not a script to raise — don't introduce an objection the prospect didn't have. The rep drafts their own response.

### 8. Write section 8 Opener and next step

2-3 opening angles that lead with insight (the rep's read on the prospect's world), not a question, grounded in section 1 rapport rows or a section 4 fact `[n]`. Entry points, not drafted lines — the rep picks one and writes their own.

Close with one line: a single logical next step the rep could propose at the end of the meeting, tied to the angle.

### 9. Write the TL;DR last

3-4 lines: 1-2 headline facts with `[n]`, plus one line summarising the going-in hypothesis. No fact that doesn't appear elsewhere in the body with `[n]`.

### 10. Sources

List every `[n]` in numerical order, contiguous from `[1]` with no gaps: URL, the exact words the fact came from, source date.

### 11. Render HTML

Apply `templates/brief-html.html`, substitute the body into the content slot. Self-contained — opens offline in any browser.

### 12. Write output files

Assemble `brief.md` using `templates/brief-md.md` as the section skeleton (its 8 section headings plus Sources and the TL;DR slot), filling each section with the content built in steps 4-10. Then write:

- `~/meetings/{slug}/brief.md`
- `~/meetings/{slug}/brief.html`

Multi-attendee meetings: one per-attendee subfolder, one brief each.

## Output verification

- Every `[n]` in the body has a Sources entry, and every Sources entry is used at least once
- Citation numbers are contiguous from `[1]` to `[N]` with no gaps — renumber the survivors after any source is dropped, never leave a hole like 29 → 33
- No non-numeric citations: every bracketed citation is a numeric `[n]`; the setup files are the lens, never a citation tag
- TL;DR facts all appear with `[n]` elsewhere
- The going-in hypothesis reads as inference ("likely…"), not assertion
- Every line in sections 5-8, plus the section 4 why-now line, cites at least one `[n]`
- Every specific fact, name, number or date in sections 1-4 carries an `[n]`; light connective wording between facts is fine, but no *claim* sits unsourced (the single why-now line is the one piece of interpretation)
- No "well-supported" or corroboration claim rests on reprints of one item — syndicated/duplicate sources were collapsed to one `[n]` before agreement was weighed; genuine conflicts are flagged, not silently resolved

## Rules

Write from `running-notes.md` and the three setup files only. Never re-fetch, never call an LLM to improve a fact. The HTML render is self-contained.
=== END ~/.claude/skills/sales-brief/synthesiser.md ===

5. Create the markdown brief template:

=== BEGIN ~/.claude/skills/sales-brief/templates/brief-md.md ===
---
type: sales-brief
meeting: '{{PERSON}} at {{COMPANY}}'
date: '{{YYYY-MM-DD}}'
---

# Sales brief — {{PERSON}} at {{COMPANY}}

**Meeting date:** {{MEETING_DATE}}  ·  **Generated:** {{RUN_DATE}}  ·  **Sources:** every fact below carries a link you can click to check it

## TL;DR

{{1-2 headline facts with [n], plus one line summarising the going-in hypothesis. 3-4 lines.}}

## 1. Who you're meeting

{{Readable prose built from the person facts, each fact carrying its [n]. Include rapport material and any landmines (flagged).}}

## 2. Their company

{{Readable prose built from the company facts, each fact carrying its [n]. Tech-stack/vendor inferences flagged "inferred".}}

## 3. Key people (the decision path)

{{Decision path first (manager / economic buyer / champion / technical evaluator/blocker, labelled, inference marked), then CEO + founders. Name + role + one-line context, each with [n]. Names flagged for the rep's warm-intro check.}}

## 4. What's recent and material (and why now)

{{Readable prose built from the what's-changed + their-sector facts, each fact carrying its [n] and source date.}}

**Why now:** {{the one or two signals that make this the moment}} [n] — {{what they imply}}

## 5. Your angle into this meeting

*The skill's read of the facts above — interpretation, not new facts.*

**Going-in hypothesis** *(inference to test)*

- likely problem — {{...}} [n]
- likely cost — {{...}} [n]
- what good looks like — {{...}}

**ICP match**

- {{where they fit / where they don't}} [n]

**Where your offer touches their world**

- {{specific signal → touch-point with your offer}} [n]

**What might make this hard** *(often empty)*

- {{risk flag, OR omit the subsection}} [n]

## 6. Questions to ask

1. {{Question grounded in a sections 1-4 fact}} [n]
2. ...

## 7. Objections to anticipate

*(These may come up — preparation, not a script to raise.)*

- {{Objection}} — {{why likely}} [n]
- ...

## 8. Opener and next step

**Opening angles** *(lead with insight, not a question — you write the line)*

- {{Angle grounded in section 1 rapport or a section 4 fact}} [n]
- ...

**Next step to propose**

- {{a single logical next step, tied to the angle}}

## Sources

[1] {{URL}} — {{verbatim source words the fact came from}} *(source date: {{YYYY-MM-DD}})*
[2] ...

---

*Generated by /sales-brief. Full audit trail in `running-notes.md`.*
=== END ~/.claude/skills/sales-brief/templates/brief-md.md ===

6. Create the HTML brief template (self-contained, no remote dependencies):

=== BEGIN ~/.claude/skills/sales-brief/templates/brief-html.html ===
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Sales brief — {{PERSON}} at {{COMPANY}}</title>
<style>
  body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif; max-width: 760px; margin: 2rem auto; padding: 0 1.5rem; color: #1a1a1a; line-height: 1.55; }
  h1 { font-size: 1.6rem; margin-bottom: 0.4rem; }
  h2 { font-size: 1.2rem; margin-top: 2rem; padding-bottom: 0.3rem; border-bottom: 1px solid #e5e5e5; }
  h3 { font-size: 1rem; margin-top: 1.2rem; }
  .meta { color: #666; font-size: 0.9rem; margin-bottom: 1.5rem; }
  .tldr { background: #f7f7f5; border-left: 4px solid #1a1a1a; padding: 1rem 1.2rem; margin: 1.5rem 0; border-radius: 4px; }
  .tldr h2 { margin-top: 0; border: none; font-size: 1rem; text-transform: uppercase; letter-spacing: 0.05em; color: #666; }
  .derived-note { color: #666; font-style: italic; font-size: 0.92rem; margin: 0.3rem 0 0.8rem; }
  ul { padding-left: 1.4rem; }
  li { margin-bottom: 0.4rem; }
  sup a { text-decoration: none; color: #0a66c2; font-size: 0.8rem; padding: 0 0.1rem; }
  details { margin-top: 2.5rem; }
  details summary { cursor: pointer; font-size: 0.95rem; color: #666; padding: 0.5rem 0; }
  .sources { font-size: 0.85rem; color: #444; }
  .sources li { margin-bottom: 0.6rem; }
  .sources .quote { color: #555; }
  .sources .date { color: #888; }
  .team-note { font-size: 0.85rem; color: #777; margin-top: 1.5rem; padding-top: 0.8rem; border-top: 1px solid #eee; }
</style>
</head>
<body>

<h1>Sales brief — {{PERSON}} at {{COMPANY}}</h1>
<div class="meta">Meeting on {{MEETING_DATE}} · Brief generated {{RUN_DATE}} · Every fact carries a link to its source</div>

<div class="tldr">
<h2>TL;DR</h2>
{{TLDR_HTML}}
</div>

{{BODY_HTML}}

<details>
<summary>Sources ({{N_SOURCES}})</summary>
<ol class="sources">
{{SOURCES_HTML}}
</ol>
</details>

<div class="team-note">
Researched by the /sales-brief skill: Person, Company, Key people, What's changed, Their sector, Challenges. Audit trail in <code>running-notes.md</code>.
</div>

</body>
</html>
=== END ~/.claude/skills/sales-brief/templates/brief-html.html ===

7. Quietly check your work by reading the files back. Do not read the technical details out to me (no file names, no line counts). Just confirm everything is in place, then tell me in plain words: "All set. Your agent can now take everything it found and write it up as a brief. You will get a plain version and a web-page version you can open in your browser, print, or send on." If anything is missing, say so plainly rather than carrying on.

8. Tell me: "That's your brief writer in. Your agent can now turn what it found into a clean, faithful brief: a plain version and a tidy web page you can open in your browser, print, or send to someone. One last thing and you're ready: connecting two tools that give it sharper sources, then a quick restart. About five minutes." Then continue to step 9.

9. Find out how I'm running Claude Code, and explain the terminal step. Ask me: "Quick question: are you using Claude Code inside a code editor like VS Code, or in a plain terminal window? If it's a panel inside an editor, that's VS Code. If it's filling a plain window on its own, that's the terminal." Wait for my answer.

   Then explain warmly: "A couple of the next steps need you to run a one-line command. Claude Code is using this window for our chat, so you'll run that command in a SEPARATE terminal, then come back and tell me you're done. Nothing here is lost while you do that."

   Then tell me how to open that separate terminal:
   - If I said VS Code: "Press Ctrl and the backtick key ` (top-left, just under Escape), or on a Mac press Cmd and backtick. Or use the menu: Terminal then New Terminal. A small panel opens at the bottom. That is where the commands go."
   - If I said terminal: "Open a SECOND terminal so this one keeps running Claude Code. On a Mac press Cmd+T for a new tab. On Windows, open another PowerShell window. Run the commands there, then switch back here."

   Tell me to keep that terminal open, we will use it twice. Then continue to step 10.

10. Connect Exa, the tool that finds the right people and news. Tell me: "Sign up for a free account at https://exa.ai. Open the page and click the sign-up button to create your account (it may say 'Sign up', 'Get API key', or 'Dashboard'). When you sign up, Exa shows a quick 'Create your setup prompt' screen. Complete it, since finishing it usually unlocks some free credits: choose 'Claude', then 'MCP', then 'I don't know yet', and click 'Generate'. You'll land on a 'You're all set!' screen. Just below the big button, under 'Your API Key', click the eye icon to reveal your key, then the copy icon to copy it. (If it isn't there, it's always at https://dashboard.exa.ai/api-keys.) Keep your key to yourself, you won't paste it here."

   Then create a text file on my Desktop so the command is easy to copy cleanly. Create `~/Desktop/connect-exa.txt` containing exactly this single line and nothing else:

   ```
   claude mcp add -s user --transport http exa "https://mcp.exa.ai/mcp?tools=web_search_exa,web_search_advanced_exa,web_fetch_exa&exaApiKey=YOUR_EXA_KEY"
   ```

   Then tell me: "I've put a file called connect-exa.txt on your Desktop, so the command is easy to copy without anything getting jumbled. Open it (double-clicking opens it in a plain text editor). You'll see YOUR_EXA_KEY near the end of the line. Type or paste your key straight over those words, leave everything else exactly as it is, and save. Then select the whole line, copy it, paste it into the separate terminal you opened, and press enter. That connects Exa. Tell me 'done' when you've done that, just the word done, not your key."

   Wait for me to confirm. Then run `claude mcp list` yourself, look for exa, and tell me plainly whether it connected. If it didn't, ask me whether the command showed a message and what it said.

11. Connect Firecrawl, the tool that reads web pages cleanly. Tell me: "Sign up free at https://www.firecrawl.dev/. The moment you sign up you land on your dashboard, and your key is on the right under 'API Key'. Click the eye icon to reveal it, then the copy icon to copy it. You want the key that starts with 'fc-'. Keep it to yourself, you won't paste it here."

   Then create a second file on my Desktop. Create `~/Desktop/connect-firecrawl.txt` containing exactly this single line and nothing else:

   ```
   claude mcp add -s user --transport http firecrawl "https://mcp.firecrawl.dev/YOUR_KEY_HERE/v2/mcp"
   ```

   Then tell me: "I've put a second file on your Desktop, connect-firecrawl.txt. Open it, and you'll see YOUR_KEY_HERE in the middle of the line. Type or paste your Firecrawl key straight over those words, leave everything else as it is, and save. Then copy the whole line, paste it into the same terminal, and press enter. Tell me 'done' when you've run it."

   Wait. Then run `claude mcp list` yourself, look for firecrawl, and tell me plainly whether it connected.

12. Check both are connected. Run `claude mcp list` and show me what you find, I'm looking for both exa and firecrawl. If either is missing, tell me plainly which one, and we'll sort it before moving on.

13. The one restart. Tell me: "Both tools are connected, and that's everything built. One last thing and you're ready: close Claude Code and open it again, so it picks up your two new tools and your new /sales-brief agent together." Then give me the step for my setup:
   - If VS Code: "Open the Command Palette (Cmd+Shift+P on a Mac, Ctrl+Shift+P on Windows), type 'Reload Window', and press Enter. Or just close and reopen VS Code."
   - If terminal: "Close Claude Code (type /exit), then start it again by typing `claude`."

14. Tell me: "You're all set up. To make your first brief: type /sales-brief, then give it the name of someone you're about to meet and their company. It'll research them and write you a short, sourced brief in a couple of minutes. From now on that's all it takes: /sales-brief, a name, and a company. Enjoy." Then stop. Do not create anything else.
Why this works

The tool sign-ups land in the same step as the payoff. The only friction in the whole install, two free sign-ups, copying two keys, one restart, sits one minute away from your first brief. Most installs front-load the friction before any value, which is why most readers bounce. Setup-first inverts that: the easy part, a conversation, opens the install, and the friction sits at the end, motivated by what arrives a minute later.

Keys are never invited into the chat. They go into a text file on your Desktop, then into a command Claude Code runs. The skill works with them but never sees them. And the built-in search is a real no-key fallback: we tested it, it matches Exa on headline coverage and occasionally finds an item Exa misses, slightly weaker on source quality, but the brief still runs.

The brief writer reads the running notes alongside your three setup files and writes in scan order: a TL;DR, who you are meeting, their company, the key people, what is recent and material, your angle into the meeting, questions to ask, objections to anticipate, an opener and next step, and the sources. A rep opens the brief five minutes before the call and works top to bottom.

Your angle is the section the prep philosophy lives in. It reads your three setup files alongside the notes and produces where this prospect fits your ICP, where your offer touches their world, what might make this hard, the questions to ask traced to confirmed facts, the objections to anticipate, and two or three opening angles you can choose between. Every line cites the facts it leans on with a numbered link. The going-in hypothesis is flagged as an inference to test.

The line the brief does not cross: it gives you material, it does not write your pitch. No drafted opening lines, no exec summaries that sound strategic, no recommended-next-steps roadmaps. You are the salesperson. The brief is what you walk in with, not what you read out. The category tools that try to write the pitch fail at this distinction, and reps lose the room the moment they sound like they are reading from a script.

The brief gives you material. It does not write your pitch. You walk in calibrated. You still write the words.

Four paste-prompts. One install pass.

The skill that lands in your Claude Code does this every time you run /sales-brief:

What you get, every run
/sales-brief
You name who you are meeting
A right-person check runs first, then six researchers go out at once
Person
One human, in depth
Company
Maps the business
Key people
The wider org and likely buying committee
What's changed
Recent moves at the company
Their sector
Competitors and industry news
Challenges
The friction worth asking about
Every fact captured in the source's own words, with a link and a date
running-notes.md
The full audit trail
Synthesised into
brief.md  ·  brief.html
Every fact linked back to its source

Fifteen minutes per meeting after install. A brief with every fact linked back to its source. A reading of the prospect through your business and your ICP. Material to work with in the room, never a pre-cooked pitch.

Sourced, not verified.

This is the one line of honesty the rest of the design rests on. Every hard fact in the brief carries a clickable link to where it came from. The brief tells you plainly that the skill has not verified those facts for you.

Sourcing is what a prompt does reliably. Real verification, matching each claim against its source word for word and catching the ones that do not hold, is engineering work. It belongs in code, not in a model asked to mark its own output. A free tool you install by pasting prompts is the right place to do rigorous sourcing, and the wrong place to claim a verification it cannot stand behind. So the skill does the thing a prompt does genuinely well: it sources, and it sources rigorously. And it is honest about the one line it does not cross.

Three pieces, working together

One

A link per fact

Every hard fact carries a clickable link to where it came from, or it is not stated as a fact. You can check anything that matters.

Two

Calibrated labelling

Confirmed facts read as facts. Reads and bets read as reads and bets, in plain words. The going-in hypothesis is flagged as an inference to test. The why-now line is labelled.

Three

Source independence at synthesis time

Before any why-now signal counts as confidence, syndicated and duplicate sources collapse to one. Ten reprints of one press release are one source, not ten confirmations. Genuine conflicts between sources are flagged.

That honesty is the credibility and the upsell in one. Free, you get sourced facts you can check yourself in a click: genuinely useful prep, fast. The next level, hard, code-based verification that catches the claims a source does not support even when the model says it does, is what we build for clients who need it. The brief earns trust by being good and honest, not by claiming more than a prompt can do.

What you've just built is one example of how Serpin works: we help people bring AI into the work, in whatever shape fits the problem. Sometimes an agentic system. Sometimes an AI workflow. Sometimes the governance and change wrap-around that lets a team actually trust and use what they have. The Sales Brief is one example of how we work, not the whole offer.