seo-rhythm-weekly
Weekly SEO rhythm — Monday report, Wednesday AEO citation probe, Friday retrospective. TRIGGER automatically by cron or Tycoon RoutineScheduler; the three fixed
npx skills add seo-rhythm-weekly
seo-rhythm-weekly — The Feedback Loop
The week has three moments. Each one serves a distinct purpose. Missing any one breaks something downstream.
Monday 09:03 — Weekly Report
Synthesize last week's work into a 1-screen brief for the owner.
Invoke seo-monitor.weekly_report(). It produces reports/seo/weekly/weekly-{YYYY-WWW}.md with:
- 3-week trend on key KPIs (clicks, impressions, avg position, indexed pages, citation rate)
- Wins — experiments that hit targets in last 7 days
- Losses — experiments that regressed
- Open experiments — what we're still measuring
- ≤ 3 recommendations for next week, each citing a playbook or experiment
Regression detector
After monitor runs, scan the 3-week trend table. If any KPI dropped ≥ 30% week-over-week, invoke seo-postmortem immediately with that metric as the trigger.
This is the one moment of the week that can cascade into emergency action. Don't skip the scan.
Status write
daily-status/{YYYY-MM-DD}.log:
09:07 ✅ Weekly report shipped. 2 wins, 1 loss, 3 open experiments.
Wednesday 10:07 — AEO Citation Probe
Our 20 representative queries need a weekly refresh so citation rate trend isn't noise.
The 20 queries live in memory/facts/aeo-probe-queries.yaml (established during seo-onboard, updated monthly). They represent the queries where we most want to be cited.
Workflow
For each query in the list, run against:
- ChatGPT (via API or web scrape)
- Perplexity (via API)
- Claude (via API)
- Google AI Overviews (via scraping)
- Was our brand cited?
- What position in the citation list?
- What exact URL was cited?
- Top 3 other domains cited (for competitive intel)
reports/seo/aeo/aeo-probe-{YYYY-MM-DD}.json.
Compute citation_rate = (cited queries × platforms) / (total queries × platforms).
Append to reports/seo/data/aeo-history.json for trend tracking.
Flag changes
If citation_rate dropped > 20% week-over-week → trigger seo-postmortem.
If a new competitor surfaced in ≥ 3 citations this week → update memory/facts/competitor-{name}.md.
Friday 16:00 — Retrospective
The load-bearing moment of the week. Invoke seo-retro.
Retro measures every experiment where measure_at <= today. It assigns win/loss/inconclusive verdicts and writes reports/seo/retros/retro-{YYYY-MM-DD}.md.
After retro completes
- If any experiment hit the
delta_vs_expected < -0.5threshold → retro auto-triggeredseo-postmortem. Verify it ran. - If the retro surfaced a pattern with ≥ 3 recent wins → flag for
seo-learn(which runs monthly). - If discipline check failed (experiments overdue, changes without logs) → append to next Monday's report as a reminder.
Week closure
Write reports/seo/weekly-close/{YYYY-WWW}.md:
# Week {WWW} close — {end_date}
Shipped
{count} experiments logged, {count} measured this week
Learned
{short summary of retro findings}
Deferred
{any experiments measuring next week}
For next week
{top 3 from retro recommendations}
Quality bar
- [ ] All three moments ran
- [ ] Regression detector fired on Monday (or was noise-free)
- [ ] AEO probe covered all 20 queries across ≥ 3 platforms
- [ ] Retro measured every due experiment
- [ ] Weekly report has ≤ 3 recommendations
- [ ]
weekly-close/{WWW}.mdexists
What I refuse
- To skip Friday's retro. That breaks the learning loop — all subsequent weeks drift.
- To defer an AEO probe because "we ran one last week". Citation rates move in days, not months.
- To let a 30%+ regression sit without postmortem.
- To ship a Monday report with > 3 recommendations. Over-recommendation produces paralysis.
Integration
Called by:
- Tycoon RoutineScheduler (cron rules:
3 9 1,7 10 3,0 16 5) - Standalone cron equivalent
seo-monitor(Monday)seo-retro(Friday)seo-postmortem(on regressions, any day)
reports/seo/weekly/weekly-{YYYY-WWW}.mdreports/seo/aeo/aeo-probe-{date}.jsonreports/seo/retros/retro-{date}.mdreports/seo/weekly-close/{YYYY-WWW}.md