Skip to content

Competitor Release Monitor #19

Competitor Release Monitor

Competitor Release Monitor #19

name: Competitor Release Monitor
# Daily scan of competing Claude Code / dev tool repos. If any has published
# a new release since the last check, opens an alert issue with the details.
# This gives you launch-day awareness if a competitor preempts you.
#
# Competitors watched (edit COMPETITORS below to add/remove):
# - thedotmack/claude-mem
# - DeusData/codebase-memory-mcp
# - RooCodeInc/Roo-Code
# - paul-gauthier/aider
# - continuedev/continue
#
# Created 2026-06-18 as part of the launch automation stack.
# Zero cost: GitHub Actions on public repo.
on:
schedule:
# Daily at 10:00 UTC (03:00 PT, 15:30 IST). Picks up overnight US drops.
- cron: '0 10 * * *'
workflow_dispatch:
permissions:
contents: read
issues: write
env:
COMPETITORS: |
thedotmack/claude-mem
DeusData/codebase-memory-mcp
RooCodeInc/Roo-Code
paul-gauthier/aider
continuedev/continue
jobs:
watch-releases:
runs-on: ubuntu-latest
steps:
- name: Check each competitor for new release in last 24h
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
CUTOFF=$(date -u -d "24 hours ago" '+%Y-%m-%dT%H:%M:%SZ')
NEW_RELEASES=""
echo "$COMPETITORS" | while IFS= read -r repo; do
[ -z "$repo" ] && continue
repo=$(echo "$repo" | xargs) # trim whitespace
[ -z "$repo" ] && continue
echo "Checking $repo..."
# Get the latest release published date
LATEST=$(gh api "repos/$repo/releases/latest" 2>/dev/null || echo "{}")
PUBLISHED=$(echo "$LATEST" | jq -r '.published_at // empty')
TAG=$(echo "$LATEST" | jq -r '.tag_name // empty')
URL=$(echo "$LATEST" | jq -r '.html_url // empty')
NAME=$(echo "$LATEST" | jq -r '.name // empty')
if [ -z "$PUBLISHED" ]; then
echo " no releases or repo unreachable, skipping"
continue
fi
# Compare ISO 8601 strings (lexicographic compare works for this format)
if [ "$PUBLISHED" \> "$CUTOFF" ]; then
echo " 🔔 NEW RELEASE: $repo $TAG at $PUBLISHED"
# Append to an alert file the next step will read
echo "- **[$repo]($URL)** released **$TAG** ($NAME) on $PUBLISHED" >> /tmp/new_releases.md
else
echo " no new release since $CUTOFF"
fi
done
# Set env var for the alert step
if [ -f /tmp/new_releases.md ]; then
{
echo 'NEW_RELEASES<<EOF'
cat /tmp/new_releases.md
echo 'EOF'
} >> $GITHUB_ENV
fi
- name: Open alert issue if any competitor shipped
if: env.NEW_RELEASES != ''
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
# Ensure label exists (idempotent)
gh label create "competitor-alert" \
--repo ${{ github.repository }} \
--color "FF6347" \
--description "Auto-managed: a competitor shipped a release" 2>/dev/null || true
TODAY=$(date -u '+%Y-%m-%d')
BODY="One or more competitors shipped a release in the last 24 hours.
## New releases
${{ env.NEW_RELEASES }}
## Recommended action
Review the release notes. If any of them is a direct competitive feature (warm-fill, drift detection, integrity scoring, mid-session install), pivot to **Angle B** or **Angle C** from \`competitor-monitor.md\` in private notes.
## Reminder
Your launch narrative is the bug-found-fixed-in-24-hours story. That stays defensible regardless of what competitors ship. Do not move launch date because of a competitor release.
---
*Auto-generated by [\`competitor-monitor.yml\`](https://github.com/${{ github.repository }}/actions/workflows/competitor-monitor.yml)*"
gh issue create \
--repo ${{ github.repository }} \
--title "🔔 Competitor shipped a release ($TODAY)" \
--label "competitor-alert" \
--body "$BODY"
- name: Heartbeat to Healthchecks (success)
# Pings even when no competitors shipped (that is still a successful
# run, we want Healthchecks to know we are alive). Only fires if all
# previous steps succeeded.
run: curl -fsS -m 10 --retry 3 https://hc-ping.com/5143cf69-d235-453a-885a-b2617d0a0c33