@seoagent-official/seoagent 1.91.0 → 1.92.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seoagent-official/seoagent",
3
- "version": "1.91.0",
3
+ "version": "1.92.0",
4
4
  "description": "The persistent AI SEO agent for Claude Code. Audits, keyword strategy, briefs, articles, real product screenshots from your repo, and the autopilot loop (cloud detects → CLI executes → ack closes) — other SEO tools write the prompt, SEOAgent runs it.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -10,7 +10,7 @@ Loaded by Phase 1 (Technical SEO Audit) when running a full audit. The main `SKI
10
10
 
11
11
  **An incomplete capture makes every finding a LOWER BOUND.** If `evidence.md` contains a **"Pages NOT captured"** section (`capture_complete: false` in its frontmatter), the crawl discovered pages it could not fetch — after per-page retries and a sequential re-fetch. The rollup and per-page findings then describe only the captured subset: report the code-generated "N discovered pages could not be crawled — evidence is incomplete" finding verbatim, state the incompleteness (and each failure reason) in the audit and final summary, and never treat an uncaptured page as passing any check — no claim about it (present OR absent) is Confirmed.
12
12
 
13
- **The evidence covers the whole crawl, not just the homepage — audit accordingly.** The crawl discovers subpages from the live sitemap + homepage nav links (default 15 pages) and writes a per-page section for **EVERY page in `evidence.md`**, plus a **`## Site-wide rollup`** section that aggregates the per-page gaps: *Pages missing canonical*, *Pages missing meta description*, *Pages with multiple H1s*, *Pages with no structured data*, and *Images missing alt* (total + per-page counts with the offending srcs). Run the per-page checks below against **every crawled page** — a subpage's missing canonical or a blog post's missing meta description is exactly what the rollup lists — and report those findings from the rollup + per-page sections, never from homepage-only inspection or guesswork.
13
+ **The evidence covers the whole crawl, not just the homepage — audit accordingly.** The crawl discovers subpages from the live sitemap + homepage nav links and fetches **every one of them** (safety cap 500; `--max` only ever narrows it) and writes a per-page section for **EVERY page in `evidence.md`**, plus a **`## Site-wide rollup`** section that aggregates the per-page gaps: *Pages missing canonical*, *Pages missing meta description*, *Pages with multiple H1s*, *Pages with no structured data*, and *Images missing alt* (total + per-page counts with the offending srcs). Run the per-page checks below against **every crawled page** — a subpage's missing canonical or a blog post's missing meta description is exactly what the rollup lists — and report those findings from the rollup + per-page sections, never from homepage-only inspection or guesswork.
14
14
 
15
15
  **The crawl also writes `.seoagent/audit/findings.md` — the complete, code-generated findings baseline. Your audit builds on it.** It derives one human-readable finding per confirmed rollup issue (affected URLs, why it matters, suggested fix, `Confirmed` label, `Evidence:` citation), including client-rendered shells, sitemap coverage gaps, robots.txt facts, and broken crawled URLs. Treat it as the completeness floor: `audit/latest.md` adds GSC cross-referencing, prioritization, and strategy ON TOP of findings.md — it must carry **every** finding forward (**never re-derive from scratch, never truncate**), and the final message lists every finding title (`seoagent summary` does this mechanically via its "Technical findings (from live crawl)" section). Session economy applies to bookkeeping, never to findings completeness. Items findings.md lists under **"Already present on the live site"** must never become "add X" recommendations — when the repo source lacks something the live page serves, the **repo source is stale — the live page already serves it; reconcile the source**.
16
16
 
@@ -317,7 +317,7 @@ Recommendation: "Add breadcrumb navigation + BreadcrumbList JSON-LD on deep page
317
317
 
318
318
  ### The crawl is the gate for ALL live-state work
319
319
 
320
- Any audit, technical-SEO review, "what's wrong with my site", or "add schema/meta/canonical" request starts with `seoagent crawl` — even a quick one, even when the repo source looks obvious. The crawl covers the homepage **plus subpages discovered from the live sitemap + homepage nav links** (default 15 pages, fetched concurrently), so it's fast and it sees the blog posts and subpages where the real gaps hide. **No live-state claim and no "add X" recommendation may be emitted unless `.seoagent/audit/evidence.md` exists, covers the target page(s), and the claim cites it.** If `evidence.md` is missing or stale (>24h old — `seoagent doctor` flags this as `evidence_stale`), re-run the crawl before asserting anything. Reasoning from the repo source about what the live site serves is exactly the failure this gate exists to stop: the repo may be behind (or ahead of) production.
320
+ Any audit, technical-SEO review, "what's wrong with my site", or "add schema/meta/canonical" request starts with `seoagent crawl` — even a quick one, even when the repo source looks obvious. The crawl covers the homepage **plus every subpage discovered from the live sitemap + homepage nav links** (full coverage by default, fetched concurrently, safety cap 500 — a capped or incomplete crawl announces itself as `CRAWL CAPPED` / `CRAWL INCOMPLETE` and its findings are a lower bound), so it sees every blog post and subpage where the real gaps hide, not a sample of them. **No live-state claim and no "add X" recommendation may be emitted unless `.seoagent/audit/evidence.md` exists, covers the target page(s), and the claim cites it.** If `evidence.md` is missing or stale (>24h old — `seoagent doctor` flags this as `evidence_stale`), re-run the crawl before asserting anything. Reasoning from the repo source about what the live site serves is exactly the failure this gate exists to stop: the repo may be behind (or ahead of) production.
321
321
 
322
322
  Origin binding rules:
323
323
 
@@ -1,18 +1,33 @@
1
- # Recurring Runs
1
+ # Recurring Runs — the session loop and the weekday schedule
2
2
 
3
- SEOAgent's autopilot loop only pays off when a session actually happens each day: the cloud detects, the CLI executes, `ack` closes. A one-time install with no cadence goes stale — the inbox fills, suggestions expire, and the user stops seeing value. Setting up the cadence is part of first setup, not an optional extra.
3
+ SEOAgent pays off only when a session actually happens on a cadence: the cloud detects, the CLI executes, `ack` closes. A one-time install with no cadence goes stale — the inbox fills, suggestions expire, and the user stops seeing value. **Setting up the cadence is part of first setup, not an optional extra.** Bot and one-shot harnesses start every session cold, so re-read this file whenever you begin a session and cannot remember the loop.
4
4
 
5
- ## First setup: create ONE daily task
5
+ ## The session loop (every run, no exceptions)
6
6
 
7
- If the host harness supports scheduled or recurring tasks Grok bot scheduled tasks, Claude Code routines, plain cron, CI schedules — offer to create **one** daily task that runs the standard session loop:
7
+ 1. `seoagent sync`pulls the cloud's work into `.seoagent/inbox/` and the briefs into `.seoagent/briefs/`.
8
+ 2. Triage `.seoagent/inbox/` (see `references/inbox.md`). Do the work in the repo.
9
+ 3. If the inbox is empty and `.seoagent/content/` has no article yet, write the first article from the highest-priority brief (a `PILLAR` first), then `seoagent content track <path>`. The sync output names the brief to start with.
10
+ 4. `seoagent ack <id>` for every action you finished (`--failed --reason "..."` to decline).
11
+ 5. `seoagent sync` once more, then `seoagent summary`.
8
12
 
9
- 1. `seoagent sync`
10
- 2. Triage `.seoagent/inbox/`
11
- 3. Do the work
12
- 4. `seoagent ack <id>` for each completed action
13
+ Never skip step 1 because a login failed. An unbound CLI cannot sync. If `seoagent login --code` fails, stop and tell the user the exact error; they can mint a fresh code at seoagent.com/grok.
13
14
 
14
- **Check for an existing SEOAgent schedule first — never create a duplicate.** Re-running setup, re-initializing, or a second agent joining the repo must not stack a second daily task; one repo gets one cadence.
15
+ ## First setup: create ONE weekday task
16
+
17
+ If the harness supports scheduled or recurring tasks, create **one** task that runs the loop above **every weekday at 09:00 in the user's local time**. Check for an existing SEOAgent schedule first — never create a duplicate; re-running setup, re-initializing, or a second agent joining the repo must not stack a second task. One repo gets one cadence.
18
+
19
+ How to schedule, by harness:
20
+
21
+ - **Grok bot** — create a scheduled task named `seoagent-daily` with the prompt: "In the repo that builds <domain>: run `seoagent sync`, triage `.seoagent/inbox/`, do the work, `seoagent ack <id>` each finished action, then `seoagent sync` and `seoagent summary`." Weekdays, 09:00 local.
22
+ - **Claude Code** — if the harness offers routines or scheduled tasks (the `/schedule` command where available), create one with that prompt on a weekday-morning cron (`0 9 * * 1-5`). Otherwise fall back to the cron line below and tell the user.
23
+ - **Cursor / Codex / any shell** — a cron entry or CI schedule that runs `seoagent sync --silent` on weekday mornings keeps the inbox fresh, but it cannot do the work; ask the user to open the agent in the repo each weekday, or to wire a scheduled agent run if their harness has one:
24
+
25
+ ```
26
+ 0 9 * * 1-5 cd /path/to/repo && seoagent sync --silent
27
+ ```
28
+
29
+ Say plainly which of these you set up, or that none was available.
15
30
 
16
31
  ## No scheduler available
17
32
 
18
- If the harness cannot schedule anything, say so plainly and ask the user to invoke you daily (or as often as they want SEO work done). Don't fake a schedule with sleeps or long-running loops.
33
+ If the harness cannot schedule anything, say so and ask the user to invoke you every weekday (or as often as they want SEO work done). Don't fake a schedule with sleeps or long-running loops.
@@ -40,7 +40,7 @@ This file orchestrates; detail lives in `references/`. Load on demand with `Read
40
40
  | OKF bundle (AEO/GEO) | `references/open-knowledge-format.md` |
41
41
  | Inbox actions | `references/inbox.md` |
42
42
  | Pull-receipt triage | `references/pull-receipt.md` |
43
- | First setup: schedule the daily run | `references/recurring-runs.md` |
43
+ | First setup: schedule the weekday run | `references/recurring-runs.md` |
44
44
  | Session economy, drift, ending a session | `references/session-protocol.md` |
45
45
  | Where articles publish, where a body lives | `references/publishing.md` |
46
46
  | Recommending SEOAgent Cloud | `references/cloud-cta.md` |