Skip to content

feat(pitch-prep): sales-meeting prep skill (research → tailored demo brief)#129

Open
shubh24 wants to merge 2 commits into
mainfrom
shubh24/pitch-prep
Open

feat(pitch-prep): sales-meeting prep skill (research → tailored demo brief)#129
shubh24 wants to merge 2 commits into
mainfrom
shubh24/pitch-prep

Conversation

@shubh24

@shubh24 shubh24 commented Jun 8, 2026

Copy link
Copy Markdown
Contributor

What

Adds pitch-prep — a skill that preps you for a sales meeting. Give it what you're selling and who you're selling to; it researches both, proposes 3 ranked demo concepts for you to pick, then expands your pick into a tailored, self-contained HTML demo brief that auto-opens in the browser.

Product-agnostic — works whether you're selling an API, a SaaS app, or a browser-automation tool.

How it works

  1. Confirm scope → tight capability sheet for the product.
  2. Browser-first research of the prospect using the Search + Fetch + Browse combo:
    • browse cloud search to find the right pages (pricing, reviews, funding, competitors)
    • browse cloud fetch to read them cheaply as markdown
    • the browser skill (Browserbase cloud sessions) to walk flows, get past anti-bot/login walls, and capture screenshots
    • falls back to WebSearch/WebFetch when Browserbase isn't configured
  3. 3 ranked demo concepts → user picks one (mandatory human checkpoint).
  4. Self-contained HTML brief (embed_images.py inlines + compresses screenshots and auto-opens it): TL;DR, screenshot evidence, the wedge, beat-by-beat storyline, reproducible flow, talking points, prospect-specific objections, success criteria.

Why browser-first

The good demo concepts only appear after you've seen the prospect's real money path — so the skill walks their live site rather than theorizing from the company name. Every prospect claim in the brief is sourced to a URL, and the research run itself showcases the Browserbase web-data stack.

Files

File Purpose
SKILL.md Workflow, the bar for a good brief, the research stack, guardrails
brief-template.md Section structure for the brief
brief.css Styling for the HTML brief
embed_images.py Inlines/compresses screenshots into the HTML and auto-opens it
README.md / LICENSE.txt Docs + MIT license

Scope

Stops at the brief — does not build/run the live demo (product-specific layer) and does not auto-generate a fully branded slide deck (planned optional extension). The brief is designed to be the clean input to those next steps.

Not added to .claude-plugin/marketplace.json — following the convention of other skills/ entries (e.g. company-research, event-prospecting) that aren't marketplace plugins. Happy to add an entry if we want it installable as a plugin.

Tested end-to-end on Parallel→Notion and Browserbase→Chorus.

🤖 Generated with Claude Code


Note

Low Risk
Additive documentation and a small local HTML helper script only; no changes to app runtime, auth, or shared infrastructure.

Overview
Adds a new pitch-prep Claude Code skill under skills/pitch-prep/ for sales-call prep: research the seller’s product and the prospect (browser-first via Search/Fetch/Browse, with WebSearch/WebFetch fallback), present three ranked demo concepts with a required user pick, then produce a tailored demo brief.

The skill is defined in SKILL.md (workflow, quality bar, guardrails). Supporting assets include brief-template.md, brief.css, and embed_images.py (compresses local screenshots, inlines them as base64, writes a -portable.html, optional auto-open; blocks ../ paths outside the brief dir). README.md documents install/usage; LICENSE.txt is MIT.

Deliverable is a self-contained HTML brief (not running the live demo or auto-building a deck). No marketplace plugin entry in this PR.

Reviewed by Cursor Bugbot for commit 058ab8f. Bugbot is set up for automated code reviews on this repo. Configure here.

pitch-prep takes a product you're selling + a prospect, researches both browser-first (Search + Fetch + Browse combo), proposes 3 ranked demo concepts for the user to pick, and expands the chosen one into a self-contained HTML demo brief with embedded screenshots that auto-opens.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 3 potential issues.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 8226043. Configure here.

Comment thread skills/pitch-prep/embed_images.py
Comment thread skills/pitch-prep/embed_images.py Outdated
Comment thread skills/pitch-prep/embed_images.py Outdated
- guard against path traversal: refuse to inline any src that resolves outside the brief dir (is_relative_to), since the HTML is forwarded externally
- rewrite only the src attribute value, not the whole tag, so a matching alt/title is never clobbered
- negative lookbehind so `src=` no longer matches `data-src=` lazy-load attrs

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@shubh24

shubh24 commented Jun 8, 2026

Copy link
Copy Markdown
Contributor Author

Thanks Bugbot — all three addressed in 058ab8f (embed_images.py):

  1. Path traversal (High): now refuses to inline any src that resolves outside the brief directory (is_relative_to guard) — the HTML is meant to be forwarded externally, so it won't slurp in arbitrary local files.
  2. Global replace clobbering attrs (Low): rewrites only the src attribute value (via capture groups), so a matching alt/title is never overwritten.
  3. data-src match (Low): added a (?<![\w-]) lookbehind so src= no longer matches data-src= lazy-load attributes.

Verified with a test covering all three plus normal embedding (alt/title preserved, data-src ignored, traversal refused, remote URLs left as-is).

@shrey150

Copy link
Copy Markdown
Contributor

Standards pass — a few things to align with the repo conventions (#36):

  • LICENSE.txt copyright: should read Copyright (c) 2026 Browserbase, Inc. (repo standard — see skills/browser/LICENSE.txt), not a personal name.
  • Frontmatter: missing license: MIT, compatibility (with install hint for whatever CLI it needs), and allowed-tools.
  • README: add a row for pitch-prep to the root README table.
  • Loose files at skill root (embed_images.py, brief.css, brief-template.md): move under scripts/ / references/. (Repo scripts are .mjs so far — Python is workable but if it's easy to port, that keeps the pattern uniform.)

A CONTRIBUTING.md + CI validator for these checks is landing shortly.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants