v1.0 AGPL-3.0 · runs on your machine · BYOK

Every SEO tool tells you what's wrong. Agent Sean fixes it.

An open-source, self-hosted autonomous SEO engineer. It crawls your site, connects to Search Console, finds what's broken across 425 checks — then writes the fix into WordPress, Shopify, your Git repo, or the edge. As a diff you can read and revert.

$ npx agentsean View source

Runs once via npx — nothing installed. For a permanent sean command: npm i -g agentsean.

Free forever, self-hosted No account, no card No telemetry until you opt in
acme.example / <head> idle
critical ONP.TITLE_TOO_SHORT Homepage title is 12 characters
−<title>Home</title>
+<title>Acme HVAC repairs in Austin, TX</title>
425SEO checks
30Injections blocked
14Platforms it writes to
$0To self-host
The whole product in one interaction

It doesn't stop at the finding

Reports are cheap. The gap in every SEO tool is that a human still has to go and do the work. Here is a real onboarding run — it types itself out.

sean — 127.0.0.1:7777

        
$ npx agentsean

? What site should Sean work on?  https://acme.example
? Where does it live?             WordPress
? Connect Search Console?         yes → 127.0.0.1:7777/connect

Crawling acme.example ············· 80 pages · 6s
Running 425 checks    ············· 14 findings · score 62

  critical  RESP.4XX_INTERNAL    3 pages return 404
  medium    IMG.MISSING_ALT_ATTR 31 images without alt text
  medium    LINK.BROKEN_INTERNAL 4 internal links return 404
  …11 more

✓ Sean is watching. 7-day observe window, then it starts fixing.
  Dashboard       http://127.0.0.1:7777
  Survive reboot  sean service install
  Stop everything sean freeze
+ What it does after you walk away
  • Crawls weekly and after every deploy
  • Fixes titles, meta, headings, alt text, broken links, sitemaps, schema
  • Refreshes decaying content — capped at 2 refreshes and 2 new pages per day
  • Queues anything dangerous for one click
  • Tracks ranks, brand mentions, and AI citation share
  • Reports weekly with an honest evidence tier on every claim
  • Stops instantly and everywhere on sean freeze
− What it will never do
  • Scrape Google
  • Serve different HTML to crawlers than to people
  • Buy links, build PBNs, or hide text
  • Write to a domain that isn't yours
  • Generate content for YMYL or affiliate sites
  • Spin up unbounded city × service pages
  • Claim causation it cannot prove
Press the button

The one thing no report can do

A finding, and the fix for it, side by side. Apply it and watch Sean snapshot, write, and verify against the live page. Then take it back — the snapshot is always there.

Critical Finding
ONP.TITLE_TOO_SHORT
Homepage title is 12 characters

Title length 12/60 recommended. The highest-ROI autonomous action there is — controlled tests show ±8–16% swings from title rewrites alone.

T1 · auto acme.example · after 7-day observe
Ready
−<title>Home</title>
+<title>Acme HVAC repairs in Austin, TX</title>
WordPress post meta·verified by live HTML

Every change stores a before-snapshot. Revert is one command, forever.

Why not a proxy tool

Because the fixes evaporate when you cancel

Serving crawlers a JavaScript-proxied page also sits uncomfortably close to cloaking.

Report-only toolsProxy "auto-fix" toolsAgent Sean
Finds issuesYesYesYes
Writes the fixNoAt a JS proxyInto your source of truth
Survives cancellation—NoYes
Reviewable diff—NoYes
One-click revert——With a stored snapshot
Self-hostableSometimesNoEntirely
Your data leaves your machineYesYesNever — local-first, BYOK
Threat model

Its entire input diet is written by your competitors

A crawling agent reads pages authored by people with a financial interest in you ranking worse — and it holds keys to your website. Everything below follows from that.

Plane 01

Analysis

Crawls and parses. Emits closed-schema structs with zero free-string fields.

✓ Sees third-party bytes
✕ Holds credentials
Plane 02

Planning

Decides what to do. Emits typed actions. The LLM lives here and only here.

✕ Sees third-party bytes
✕ Holds credentials
Plane 03

Execution

Applies validated actions. Snapshot, apply, re-fetch to verify, record.

✕ Sees third-party bytes
✓ Holds credentials

No plane both reads attacker-controlled bytes and holds a credential. That separation is structural, not a policy.

The first-appearance rule

No action may contain a URL or domain whose first sighting was inside third-party content. One deterministic rule that kills canonical injection, attacker redirects, hreflang poisoning and disavow attacks — without asking a model to be clever.

Fail-closed by construction

Binds 127.0.0.1:7777. Host-header allowlist, Origin and Sec-Fetch-Site checks, CSRF header, constant-time token compare, CORS stripped. Auth cannot be disabled; binding off-loopback without it throws before the socket opens.

30 payloads, all blocked

Hidden text, Unicode tag blocks, bidi overrides, base64 and HTML-entity payloads, X-AI header injection, off-site canonicals, JSON-LD hijacks. Adding one that gets through is a build failure.

Read the full security model →

Where it writes

Into the thing you actually own

Every adapter implements the same six methods, and verify always re-fetches the live page. An API saying "ok" is not evidence.

SurfaceHow Sean writesRollback
WordPressCompanion plugin + Application Passwords. Understands Yoast, Rank Math, AIOSEO, SEOPress.Revision restore
ShopifyAdmin GraphQL SEO fields and metafields. Theme writes refused.Field restore
Next.js / any Git repoA branch, a commit, and a pull request you read before merging.git revert
Squarespace · Framer · DudaCloudflare Worker overlay. Never branches on user-agent.Overlay removal
Webflow · Ghost · Wix · BigCommerceNative SEO APIsField restore
Contentful · Sanity · Strapi · PayloadGeneric headless adapterField restore

Request an adapter → the interface is six methods

The honesty ladder

It grades its own confidence, and only the top rung may say "caused"

Every result Sean reports carries an evidence tier from A to E. The tier is assigned by a formula, not chosen — and the code will not attach a causal claim to anything below tier A.

A
Controlled experiment may claim causation

A pre-registered split-cohort test with a matched control and enough traffic to reach significance. The only rung permitted to say a change caused a result.

B
Matched-cohort observational

A treated group measured against a comparable untreated one, where the effect clears the minimum detectable effect. Strong, but not a controlled experiment.

C
Pre / post with a Google-update join

Before-and-after on the same pages, annotated against known Google updates so a ranking shift isn't quietly credited to Sean when the algorithm moved.

D
Directional signal only

Movement in the right direction, but below the minimum detectable effect. Reported as a hint, never as proof.

E
Applied, not yet measurable no causal claim

The change is live and reverted-able, but this site's traffic is too low to measure an effect. Most small sites land here — and Sean says so plainly instead of inventing a number. This is the default.

Per-URL click attribution is refused outright — clicks are only ever attributed to a cohort, never a single page. A tool that promises more than the data supports is the one people stop trusting.

Pricing

Self-hosting is the whole product

Not a crippled tier. Free forever. Cloud exists because not everyone wants to run a daemon.

Self-host

The complete product, on your own machine.

$0
forever · AGPL-3.0
  • Unlimited sites and seats
  • All 425 checks
  • Autonomous fixes, every adapter
  • Bring your own LLM key
  • White-label reports
  • Nothing leaves your machine
  • Community support
Install it

Cloud

One site, hosted. We run the daemon and handle Google OAuth.

$9
per month · 1 site · 1 seat
  • Everything in Self-host
  • Managed Google OAuth
  • Weekly rank tracking
  • Attach to your daemon's terminal (read-only)
  • Email support
Start free trial
For teams

Team

Everything switched on, for everyone who touches the site.

$14.99
per month · up to 25 sites
  • Everything in Cloud
  • Up to 25 sites, unlimited seats
  • Daily rank tracking
  • AI visibility and citation share
  • Advanced analytics — cohorts, experiments, per-template attribution
  • White-label reports and client seats
  • API access, bulk operations, priority queue
  • Interactive terminal attach
Start free trial

Enterprise

For regulated estates and procurement.

Talk to us
annual · invoice billing
  • Everything in Team, unlimited
  • SSO / SAML / SCIM
  • Self-managed or air-gapped
  • Audit log export
  • SLA and uptime guarantee
  • Named contact, private channel
  • Custom contract, security review, DPA
Contact sales

Every plan is bring-your-own-LLM-key — you pay the model provider directly, at cost. That is what keeps the price honest.

Questions

The ones that actually get asked

Will it break my site?

Every change stores a before-snapshot, then re-fetches the live page to confirm the write landed — and rolls back automatically if it didn't. Dangerous categories (robots.txt, noindex, redirects, canonicals, page deletion) always require a human click and cannot be set to auto. New sites get a 7-day observe-only period where Sean watches and proposes but writes nothing. sean freeze halts everything, everywhere, and survives a restart.

Is this going to get me a Google penalty?

The design constraints come from Google's own spam policies, not our caution. Content generation is capped at 2 new pages and 2 refreshes per day per site, because scaled content abuse is defined by scale. Link buying, PBNs, cloaking, hidden text and review gating are refused with no setting to enable them. The edge worker is asserted in CI to never branch on user-agent.

What does the LLM actually see?

Narrow judgement calls only, on closed-schema structs — never raw page content, never a credential, and it never calls a write API. It emits typed actions that deterministic code validates against 15 checks before anything is applied. Prioritisation is a published formula, not a model output.

Do I need paid API keys?

No. The free stack — Search Console, Analytics, PageSpeed, CrUX, Bing, and Sean's own crawler — covers roughly 90% of capability with zero paid keys. sean audit runs the full 425-check audit with no account and no credentials at all. You supply an LLM key for the writing features; paid data providers are optional and quote their cost before spending.

Can it prove it worked?

Sometimes, and it says so when it can't. Every claim carries an evidence tier from A to E, and only tier A — a pre-registered controlled experiment with a matched cohort — is allowed to claim causation. Small sites usually land at tier E, which reads "applied; not measurable at this traffic volume." Tools that promise more than that are the ones people stop trusting.

Why AGPL?

Because it's a real OSI-approved licence rather than a source-available substitute. You can self-host, modify and redistribute. The network-use clause is what prevents someone reselling it as a hosted service without contributing back. Commercial features live in a separately-licensed packages/ee/ so the AGPL claim over the core stays clean.

Ninety seconds

Start with the free one

sean audit runs the full 425-check audit with no daemon, no account, and no credentials. If it isn't useful, you've lost a minute and a half.

$ npx agentsean audit https://your-site.com

Cloud accounts are opening in batches — join the discussion for an invite, or talk to us about Enterprise.

Prior art

OpenSEO proved an open-source SEO platform could work. Agent Sean is the execution layer that writes reversible diffs to your actual site — not a fork of OpenSEO, and not a report that stops at the finding. Selected modules are ported under MIT with attribution.

Open, and staying open

The 66,000-word engineering plan this was built from and the 3 MB of fact-checked research behind it are both published in the repository. The locked lists of actions Sean will never take are a commitment, not a default — see GOVERNANCE.md.