Citeworthy runs on seo-agent — our own MIT-licensed Cloudflare Worker. Not a demo, not a stripped "community edition": the same crawl, the same rules, the same proposal pipeline, the same edge injector. Clone it and run it today.
The engine is open source. Running it is the product. That sentence used to be a button to a signup. It is now an architecture: you point one DNS record at us and we serve your site from a proxy we operate — no Cloudflare account of your own, no plugin, no code change.
Every line below is a feature of the public repo at v1.21.0 — read the source if you'd rather not take our word for it.
Daily, from a Cloudflare Worker — the pages, the headers, and the difference between what a browser sees and what a bot sees.
Titles, descriptions, canonicals, sitemap hygiene, structured data — plus the AEO posture: robots.txt AI-crawler policy, llms.txt health, and whether a page serves any content without JavaScript.
Nothing is written until a proposal is approved. Every applied change is journaled and reversible.
The companion injector Worker merges KV overrides — title, description and Article JSON-LD — over your computed <head>, as middleware if your site is a Worker, or as a proxy Worker on a route for any other origin behind Cloudflare.
Including "Markdown for agents": a .md twin per page, served on an Accept: text/markdown negotiation, on any Cloudflare plan.
Read-only. Impressions, queries, positions — the fuel for CTR work and for measuring whether a change did anything.
Before/after on the pages you changed, so a change gets a verdict instead of a vibe.
A stateless Streamable-HTTP MCP server at /mcp on your own Worker — connect Claude Code to your own instance with one command.
Self-hosting is a real answer, and for a technical team with one site it may be the right one. This is what each side costs and gives — facts, not a scare column.
Workers, D1, KV, Queues and Workers AI, created and wired up by you.
The agent Worker plus the injector Worker on the zone in front of the site.
The library is a single-site Worker, and the injector goes on the zone in front of the site. Ten sites is ten deployments and ten databases.
A Google Cloud project, the Search Console API enabled, a JSON key, and the service account granted access in Search Console.
Facts, markdown twins, vocabulary and autoApplyFields are configuration. Powerful, unopinionated, and yours to get right.
It is MIT code. Issues are welcome; an SLA is not on offer.
One DNS record. We hold the custom hostname and the certificate on our zone and proxy to your real origin, so there is no Cloudflare account of your own, no API token, no plugin and no code change. WordPress, Shopify, Squarespace, a Vercel app or a VPS — from where we stand they are all just an origin.
Four kinds of hit kept as detailed rows — AI crawler, assistant referral, markdown-lane agent, and search arrival counted separately because it is a human. 21 AI crawler tokens, 14 assistants, 15 named search engines — counted off the classifier, not typed. Underneath them, every request your site serves through us is counted across 9 categories, catch-alls included. Only the referrer's hostname is ever stored, and a counted request stores nothing at all.
One click and a read-only scope instead of a Google Cloud project and a JSON key — plus the low-CTR fix loop the service-account path never had.
Fail-open serving, a customer-operated kill switch, a public status page and synthetic probes. The MIT repo ships none of that, because it is not a service.
Every site you own in one place, with one switcher — no per-site deploy.
OAuth instead of a service-account key file. Read-only scope, and disconnecting deletes the data.
Drafts are checked against the facts you confirmed, so generated copy cannot invent a price, a number or a guarantee.
A title or a description is yours to rewrite in place, and the edit re-runs the same validator and the same claim guard. A structured-data document or a whole resource file is offered as-is instead — those you accept or reject, because half-editing a canonical document is how you ship a broken one.
You click, it queues, and it turns up on your proposals page. Nothing to sit and watch, and a second click on the same page will not start a second draft.
We read the site and propose them; nothing counts as true until you say so.
Severity times what this page is actually worth on this site — not a fixed severity order.
A fix type only goes automatic after real, settled, non-negative d28 verdicts on that type, on that site. One negative verdict takes it back.
The email that tells you a metric moved, so you are not required to remember to look.
Approve from the dashboard, live at the edge; undo the same way.
Which is the honest whole of it: a person answers.
Capability is open source. What stays ours is the part that decides which change is worth making, checks a draft against what is true about you, and refuses to hand a fix type the keys until it has measured that fix type helping. That is a product, and we charge for it.
The reader's real question about any open-core product is "where's the line, and will you move it?" We wrote our answer down before it was convenient, and this is it.
Crawl, the rule set, proposal drafting, the edge injector, llms.txt, markdown twins, impact scoring at 14 and 28 days, and the MCP server. All MIT, all in the public repo, all the same code we run.
The claim guard that refuses a draft, the prioritizer that decides which fix is worth making, and the ladder that won't hand a fix type the keys until it has measured that fix type helping.
The open package keeps autoApplyFields as a raw knob you can point at your own foot — we did not take it away to sell it back. What we did instead is pin the hosted pipeline to an empty autoApplyFields, permanently, with a test that fails if anyone changes it: the hosted product can never auto-apply through the library at all. Every automatic action we ever take is a control-plane approver walking the exact same guard stack your click walks. Self-hosting gives you more raw power here, not less, and that is the honest shape of the trade.
A page about honesty that only lists wins isn't one.
The open-source Worker serves an MCP endpoint of its own — connect Claude Code to your own instance today. Per-site MCP endpoints inside Citeworthy are coming soon: there is nothing to connect yet, and we won't print a URL that 404s.
Pro launches soon. There is no checkout today, so there is nothing to buy — the free tier is real and works now, and we'll email you the day paid plans open.
For markdown twins we read your HTML, then JSON-LD, then a content API. Rendering a page in a headless browser is the last resort and is off unless browser rendering is available on your account — it costs money, so it is never switched on quietly.
Free tier, one site, no card. Sign in with Google and point us at a domain.
start free