Competitor Monitor / aeon skill

AI agent that monitors competitor pages

Watch a list of competitor web pages on a cadence - snapshots each page's real signals (pricing, headings, CTAs, new/removed pages, title/description), diffs against the last run, and reports only what actually changed.

CATEGORY ProductivityRUNS On demandUPDATED
Skill
Competitor Monitor competitor-monitor
Category
Productivity
Default schedule
On demand
Last updated

commit ef04cf1
Source
aeonfun/aeon/skills/competitor-monitor/SKILL.md MIT licensed, one prompt file

What it does

Competitor Monitor is an aeon skill: Watch a list of competitor web pages on a cadence - snapshots each page's real signals (pricing, headings, CTAs, new/removed pages, title/description), diffs against the last run, and reports only what actually changed. Like every aeon skill it is one SKILL.md prompt file that runs unattended on your own GitHub Actions, on a schedule or when you trigger it, and sends what it finds to Telegram, Discord, Slack or email.

Fetches each watched page, extracts the handful of signals a human would notice if they reopened the tab - the pricing numbers, the section headings, the call-to-action buttons, the nav/footer links, the <title> and meta description - snapshots them, and diffs today's snapshot against the previous run. It reports only the differences, ranked by how much they matter (a pricing change beats a reworded button), and keeps a durable log of every change it has ever seen.

The heavy lifting is in scripts/competitor-monitor.mjs, which returns machine-readable signals and a machine-computed diff, so you reason over facts instead of eyeballing two HTML dumps. Diffing signals, not raw HTML, is the whole point - raw HTML churns every deploy (build hashes, nonces, inlined timestamps) and would fire on every run. Signals only move when the site actually moved.

This reads what a page serves. A pure client-rendered SPA that ships an empty shell will look thin - the meta tags and any server-rendered copy still diff, but JS-injected content won't. Most marketing, pricing, blog, and changelog pages are server-rendered enough to track; say so if a target comes back near-empty rather than inventing signal.

Input: the var setting

Every aeon skill takes one optional text input, var, set in aeon.yml or typed in when you run it by hand. It picks the target or the mode for that run.

The pages to watch, comma-separated.

  • empty → read the watch list from memory/competitors.md.
  • https://rival.com/pricing, https://rival.com → watch exactly these pages this run (a bare host gets https:// prepended). Watch specific pages, not just origins: /pricing, /changelog, /blog are where a competitor's moves actually show up.
  • add:<url> → append <url> to memory/competitors.md, confirm, and end (the shape the Telegram force-reply sends). No monitor runs.

What it needs

No extra API keys or MCP servers. It runs on the model you connected to aeon (a Claude subscription token, an API key, or another login).

Install and run it

Easiest: open Aeon Connect, sign in with GitHub and turn on Competitor Monitor. No clone, no terminal. To add it to an existing aeon repo from a shell, run:

bin/add-skill aeonfun/aeon competitor-monitor

Then switch it on in aeon.yml (the default schedule is filled in):

skills:
  competitor-monitor: { enabled: true, schedule: "workflow_dispatch", var: "" }

New to aeon? Read the docs for how skills, schedules and memory fit together, or browse all skills.