Website auditing
Keep your site usable by AI agents: once a week Ora audits how agents discover, read and use your domain and up to three rival domains, one pull request applies the fixes your site source can make, and one Slack digest reports the Ora score and what moved.
Set up the website-auditing cookbook in this project.
1. If the Cargo CLI is not installed yet, follow every step in https://api.getcargo.io/INSTALL.md
2. From the Cargo project, run: cargo-ai project add cookbook/website-auditing
3. Then follow .claude/skills/website-auditing/SKILL.md. Stop for my approval before any paid call, and stop at "cargo-ai project plan" before deploying anything.$cargo-ai project add cookbook/website-auditingSay this to your agent
Every Monday, tell #web-team how agent-ready www.fabrikam.example is, and open a PR with the fixes.
Illustrative output #
Fictional records, to show the shape of what comes back.
:robot_face: *Website audit: 2026-W43*
*www.fabrikam.example*: 71/100 (C), +6 since last week. ora.ai/fabrikam.example
• Fixed: llms.txt formatting, Markdown link alternate
• Newly failing: Sitemap lastmod
*Competitors*
• contoso.example: 84 (B), no change
• wingtip.example: 66 (D), -2
*Where a competitor is ahead*
• ARD discovery: passes at contoso.example
• JSON-LD entity linking: passes at contoso.example, wingtip.example
*Fix pull request*: [website-auditing] 2026-W43: 3 fixes for www.fabrikam.example
*To do by hand*
• Listed in MCP registries: register the MCP server on a public registry.
Three domains were scanned once each; one pull request carries three fixes to the site’s source, and nothing was merged or sent outside the channel.
What you will be asked #
| Input | Why | |
|---|---|---|
AUDIT_DOMAIN (infra/agents/website-auditor.ts) | Looked up | It is the site scored and the one the pull request fixes. Ora drops www. and scans the apex, so the apex must serve or forward to the site. |
COMPETITOR_DOMAINS (infra/agents/website-auditor.ts) | Looked up | Each is a scan a week from a budget shared by every caller on the same IP. More than three is a digest nobody reads to the end. |
WEBSITE_ROOT (infra/agents/website-auditor.ts) | Looked up | The only folder the agent may change. Wrong, and every fix lands in a folder nothing deploys. |
channelId (infra/agents/website-auditor.ts) | Asked | Locked, so the digest lands where the web team reads it and nowhere else. |
Done when #
node --import tsx evals/contract.mjspassescargo-ai project planreports the agent, thewebsite_auditsmodel, the three connectors and the two folders- the first run wrote one
website_auditsrow per configured domain for this ISO week, each with a score, a grade and its failing check ids, and the run transcript shows noforceon any scan - one pull request is open on
website-auditing-<week>, changing only files underWEBSITE_ROOT, each fix naming a failing check from our result, topFixes first; or none, with the digest saying why - one digest landed in the locked channel in the
references/digest.mdshape - a second run the same week wrote no row, opened no pull request and posted nothing
- after the pull request is merged and deployed, the next week’s row shows its checks out of
failing_checks
What it costs #
Ora’s reads are free and keyless; Cargo bills nothing for them. The post is slack.postMessage on
the bound connector; immediately before the plan, run
cargo-ai orchestration action list postMessage --kind connector --integration-slug slack and read
the current cost out loud. The recurring cost is the harness run itself, once a week, billed as LLM
tokens through the Anthropic connector. It is largest on a week with a pull request, when the agent
reads Ora’s playbook, the site’s source and runs its build; a re-run that stops at the ledger costs
a small fraction of that.
To make sure AI agents can find, read and use your website, score it every week and fix what the source can fix. Every Monday this cookbook’s agent reads Ora’s agent-readiness audit of your domain and up to three competitors’ through Ora’s MCP server, records the week, opens one pull request with the top fixes the website’s source can make, and posts one digest to a locked Slack channel.
cargo-ai project add cookbook/website-auditing
What it does #
- Scans each configured domain once a week through Ora, never forced, and records score, grade and
failing checks in
website_audits. - Compares with last week: what was fixed, what newly fails, where a competitor is ahead.
- Applies the first three of Ora’s ranked fixes that live in the website’s source, following Ora’s own playbook, and opens one pull request.
- Posts one digest with the scores, the pull request and the off-site fixes left to a human.
What’s inside #
Adds 7 resources.
| File | Resource | Role |
|---|---|---|
infra/agents/website-auditor.ts | defineAgent (claudeCode) | the cron, the repository binding, the Ora MCP client, the post |
infra/agents/website-auditor.prompt.ts | (not a resource) | score, record, compare, fix, post |
infra/models/website-audits.ts | defineModel (native) | the ledger: one row per domain per week |
infra/connectors/git.ts | defineConnector (github) | the clone and the pull request |
infra/connectors/slack.ts | defineConnector (slack) | the post path |
infra/connectors/anthropic.ts | defineConnector (anthropic) | the model the harness runs on |
infra/folders/index.ts | defineFolder ×2 | where the agent and the model are filed |
references/digest.md | (not a resource) | the message shape and the rule for each line |
Why Ora through MCP and not a connector #
Cargo has no Ora integration, and Ora’s reads need no account or key. The agent attaches Ora’s
public MCP server (mcpClients) and keeps three tools: scan_domain and get_score to read an
audit, and get_skill to fetch Ora’s fix playbook fresh each run. Every tool that writes to Ora or
spends its scan budget is disabled.
Why a model and not the repository #
Ora keeps only the latest scan of a domain. The weekly history, and whether this week was already scanned, fixed and posted, has to live somewhere that is not waiting for a pull request to merge.
Placeholders (edit before deploy) #
AUDIT_DOMAIN,COMPETITOR_DOMAINS,WEBSITE_ROOTininfra/agents/website-auditor.ts.channelId: the Slack channel id the digest lands in.languageModel: any Anthropic model the workspace’s connector can reach.
What it does not do #
It does not merge, edit outside the website’s source, force a scan, submit feedback to Ora, or post anywhere but the locked channel.