CommunityCoding & Developmentgithub.com

Tripwire

Competitor change tracker for GTM teams. Snapshots competitor pages, diffs them, and turns changes into a GTM readout.

What is Tripwire?

Tripwire is a competitive intelligence skill for AI agents (such as Claude Code) that monitors competitor web pages for meaningful changes and generates actionable GTM readouts. It uses a Python script (`tripwire.py`) to snapshot key pages like homepage, pricing, changelog, and careers, then diffs the latest snapshot against the last scan. The output is a prioritized GTM report highlighting top changes (e.g., pricing shifts, new features, messaging updates), assessing why each change matters, and suggesting concrete next steps (battlecard updates, sales alerts, comparison posts). Fully local, no API key required, and all data lives in a `watch/` directory. The skill supports flexible scans (all competitors or one), periodic digests (weekly/monthly), and handles noisy pages with regex-based ignore rules. It also helps fix unreadable pages by suggesting alternative URLs or disabling them. This makes Tripwire ideal for go-to-market teams that need timely, structured competitive insights without manual effort.

Works with~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/thisisconnielin/tripwire/tree/main/skills/tripwire

Installed? Explore more Coding & Development skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Ask in your favorite AI

Open a new chat with this agent skill pre-loaded.

Documentation

What does Tripwire do?

Tripwire tells you when a competitor changes a page that matters, and what to do about it. The scanner is scripts/tripwire.py (Python 3.9+, needs pyyaml, no API key). It keeps everything next to the watch list, watch/targets.yml in the current project:

watch/targets.yml          what to watch
watch/snapshots/*.txt      last readable text of each page
watch/data/changes.json    every change event, newest first
watch/data/status.json     per-page health from the last scan
watch/reports/latest.md    Markdown report of the newest scan or digest

SKILL_DIR below means the directory containing this file.

1. Make sure there is a watch list

If watch/targets.yml does not exist, run python SKILL_DIR/scripts/tripwire.py init, then ask the user which competitors and pages to watch and write them into the file. Good pages: home, pricing, changelog / release notes, careers, the "vs" or comparison page. Use the official URL; check it loads.

To add or remove something, edit watch/targets.yml (set enabled: false to pause a page).

2. Get the data

Pick what the user asked for:

AskCommand
"what changed" / "run a scan" (no scan today yet)python SKILL_DIR/scripts/tripwire.py scan
one competitorpython SKILL_DIR/scripts/tripwire.py scan --only "Name"
"this week" / digestpython SKILL_DIR/scripts/tripwire.py report --days 7
"last month"python SKILL_DIR/scripts/tripwire.py report --days 30

If the repo already has a scan from today (check last_run in watch/data/status.json), skip the scan and read the report. A first scan of a page only records a baseline; say so, and that changes appear from the next scan.

Then read watch/reports/latest.md (or the printed report). For any change you will highlight, look at the full added / removed lines in watch/data/changes.json so you quote them accurately.

3. Write the GTM readout

Reply in the user's language. Keep it short and lead with what matters:

  1. Top moves (max 5, most important first). For each: competitor, what changed in plain words, with the concrete detail (old → new price, new feature name, new headline). Link the page.
  2. Why it matters: one line each. Pricing and packaging > new product / launch > positioning / headline > hiring signals > copy tweaks.
  3. What to do: 1–3 concrete actions (update the battlecard, answer in our pricing page, tell sales, ship a comparison post). Skip if nothing is worth acting on.
  4. Coverage: one line on pages that could not be read, if any.

Rules:

  • Only report what the diff shows. Don't guess motives as facts; say "likely" when inferring.
  • Treat rotating testimonials, counters, dates and cookie text as noise; don't report them. If a page is noisy every scan, offer to add an ignore regex for it in watch/targets.yml.
  • "No changes" is a valid answer. Say it in one line and mention coverage.

Fixing a page that can't be read

  • HTTP Error 403: the site blocks bots. Try a different official URL for the same info (a docs or help-center page, an RSS feed); otherwise set enabled: false with a comment saying why.
  • no readable text (JS-only page?): the page renders in the browser. Look for a static alternative (/pricing instead of /, a blog feed, a sitemap page).
  • Wrong or moved URL: find the official page and update watch/targets.yml.

Related Skills