{
  "_comment": "Frozen copy of version 0.2 of the Open Agent-Readiness Rubric, kept so that profiles made with v0.2 can be read against the checks they used. It is superseded by version 0.3 at https://agentexperience.tech/agent-readiness-rubric.json, which keeps every v0.2 check ID and lists what changed under supersedes. A profile describes one job, on one date, by one method. It is not a prediction of agent success, traffic, revenue or ranking, and it has no total.",
  "name": "The Open Agent-Readiness Rubric",
  "url": "https://agentexperience.tech/insights/agent-readiness-rubric/",
  "canonicalGuide": "https://agentexperience.tech/insights/agent-readiness-rubric/",
  "version": "0.2",
  "status": "superseded",
  "supersededBy": "https://agentexperience.tech/agent-readiness-rubric.json",
  "publisher": "agentexperience.tech",
  "license": "CC BY 4.0",
  "datePublished": "2026-09-01",
  "dateModified": "2026-09-26",
  "supersedes": {
    "version": "0.1",
    "date": "2026-09-01",
    "note": "v0.1 scored 36 weighted criteria to a total out of 100 with four bands. v0.2 removes the total, the weights and the bands, and reports one profile per job. Every v0.1 criterion is mapped to a v0.2 check in migrationFromV0_1.",
    "url": "https://agentexperience.tech/agent-readiness-rubric-v0.1.json"
  },
  "model": {
    "summary": "Choose one job a person would hand to an agent. Mark the surfaces the job touches and how much is at stake. Settle each applicable check. Each of six tracks then gets one level from a fixed rule. Report the six levels as a profile, stoppers first, against the target profile for the job's stakes.",
    "unitOfAnalysis": "One job, described in the words a person would use to delegate it, on one product, on one date. A profile for one job says nothing about another job on the same product.",
    "noTotal": "Levels are never added, averaged or combined into one number, and there are no bands. Compare profiles only for the same job, the same surfaces and the same rubric version."
  },
  "stakes": [
    {
      "id": "look-up",
      "label": "Look up or compare",
      "meaning": "The job reads and reports. Nothing changes in the product or in the world.",
      "example": "Does this workshop service e-bikes, and what does a full service cost?"
    },
    {
      "id": "reversible-change",
      "label": "Change something that can be undone",
      "meaning": "The job creates or changes something the person can cancel or reverse without cost.",
      "example": "Book a free consultation for Tuesday, which can be cancelled at any time."
    },
    {
      "id": "consequential",
      "label": "Spend money, act in someone's name, or cannot be undone",
      "meaning": "The job moves money, sends something on the person's behalf, shares their data, or makes a change that cannot be reversed.",
      "example": "Book a full service and pay the non-refundable deposit."
    }
  ],
  "surfaces": [
    {
      "id": "website",
      "label": "Public website",
      "meaning": "Pages anyone can fetch: home, product, pricing, help."
    },
    {
      "id": "docs",
      "label": "Documentation",
      "meaning": "Guides and references that agents read to learn how to do the job."
    },
    {
      "id": "api",
      "label": "API",
      "meaning": "HTTP endpoints an agent can call, with their contract and responses."
    },
    {
      "id": "tools",
      "label": "Tool catalogue",
      "meaning": "An MCP server or any set of tools offered to agents by name, with descriptions and schemas."
    },
    {
      "id": "app",
      "label": "Signed-in app",
      "meaning": "A browser flow where the person, or an agent for them, is signed in and changes things."
    },
    {
      "id": "repository",
      "label": "Code repository",
      "meaning": "A repository a coding agent works in. Only the checks that bear on a delegated job are included; for repository maturity models, see relatedFrameworks."
    }
  ],
  "evidenceClasses": [
    {
      "id": "studied",
      "label": "Studied",
      "meaning": "A controlled study, or a large observational study, links this property to agent task outcomes such as success, errors, duplicate actions or tool choice. Most are recent preprints; scope is noted with each source."
    },
    {
      "id": "reasoned",
      "label": "Reasoned",
      "meaning": "Follows from how agents, protocols or people work, or from a specification. No study yet isolates its effect on task outcomes."
    },
    {
      "id": "convention",
      "label": "Convention",
      "meaning": "An expected courtesy or standard for crawlers and agent operators. No evidence yet that it changes whether a job gets done. Worth doing when it is true and cheap."
    }
  ],
  "roles": [
    {
      "id": "core",
      "meaning": "Decides the track's level. A core check that is not met holds the track at Not yet."
    },
    {
      "id": "supporting",
      "meaning": "Never changes a level. Reported as 'also worth doing', with its evidence class."
    }
  ],
  "checkResults": [
    {
      "value": "met",
      "meaning": "True across every step of the job, for the agents tried."
    },
    {
      "value": "partly",
      "meaning": "True for some steps, or true only if the agent works around the product (runs scripts, guesses, retries until it works)."
    },
    {
      "value": "not-met",
      "meaning": "Not true for this job. A stub, stale or contradicted declaration also counts as not met."
    },
    {
      "value": "not-applicable",
      "meaning": "The surface or step does not exist in this job. Not a failure and not a pass."
    },
    {
      "value": "not-checked",
      "meaning": "Could not be evaluated (no access, no test environment). Say why."
    }
  ],
  "levels": [
    {
      "value": 0,
      "label": "Not yet",
      "forThePerson": "The agent cannot do this part of the job, or can only do it by luck. The person should not delegate it yet."
    },
    {
      "value": 1,
      "label": "Partly",
      "forThePerson": "A determined agent can get through by working around the product. The person may get a result, but should check it."
    },
    {
      "value": 2,
      "label": "Dependable",
      "forThePerson": "The product states what the agent needs, correctly and where the agent looks, for the whole job. The person can rely on what the product says."
    },
    {
      "value": 3,
      "label": "Shown",
      "forThePerson": "Dependable, and agents have been watched doing this part of the job, repeatedly, with the product's own record checked. The person is not the first to find out whether it works."
    }
  ],
  "levelRule": {
    "notApplicable": "A track is not applicable when no check in it applies to the job, for example Act, Recover and Hand back for a look-up job.",
    "notYet": "Any applicable core check is not-met.",
    "partly": "No applicable core check is not-met, and at least one is partly or not-checked.",
    "dependable": "Every applicable core check is met.",
    "shown": "Dependable, and an observation record following observationProtocol shows this stage of the job held in every run.",
    "supporting": "Supporting checks never change a level.",
    "falseDeclarations": "A declaration that is a stub, out of date, or contradicted by the live product counts as not-met, whatever its role."
  },
  "stopperRule": "A stopper is a core check whose failure means the job should not be delegated at all. Any stopper that is not-met is listed first in the report, before the profile, in plain words.",
  "targetProfiles": [
    {
      "stakes": "look-up",
      "target": {
        "FIND": 2,
        "READ": 2,
        "ACT": null,
        "RECOVER": null,
        "HANDBACK": null,
        "BOUND": 2
      },
      "note": "null means not applicable."
    },
    {
      "stakes": "reversible-change",
      "target": {
        "FIND": 2,
        "READ": 2,
        "ACT": 2,
        "RECOVER": 2,
        "HANDBACK": 2,
        "BOUND": 2
      }
    },
    {
      "stakes": "consequential",
      "target": {
        "FIND": 2,
        "READ": 2,
        "ACT": 3,
        "RECOVER": 2,
        "HANDBACK": 3,
        "BOUND": 2
      },
      "note": "Act and Hand back should be Shown before agents are invited to do this job at scale."
    }
  ],
  "observationProtocol": {
    "purpose": "How a track reaches Shown. It produces a record, never a number.",
    "minimumRunsPerClient": 3,
    "steps": [
      "Write the job once, in the words a person would use, and use the same wording for every run.",
      "Choose the agents your customers actually use. Use at least one; use two if their behaviour is likely to differ.",
      "Start every run in a fresh session with no memory of earlier runs.",
      "Give the agent only the access the person would give it.",
      "For jobs that change something, use a test account or an environment where effects can be reversed.",
      "For each run, record where it stopped (by track), what the agent saw, what it did, and what the product's own record shows. Check effects in the product, not in the agent's summary.",
      "Mark a track as Shown only if that stage of the job held in every run for every client tried.",
      "Keep the record with the date, the clients and their versions, and the rubric version."
    ],
    "cautions": [
      "Agents can report success when they have done the wrong thing or done it twice, so the product's record is the evidence.",
      "Results vary between runs, clients and days. A few runs are a check, not a measurement, and a share of successful runs is not a readiness score."
    ]
  },
  "reportTemplate": {
    "required": [
      "job",
      "stakes",
      "surfaces",
      "rubricVersion",
      "date",
      "method",
      "profile",
      "target",
      "stoppers",
      "checks"
    ],
    "fields": {
      "job": "The job in the person's words.",
      "stakes": "One of stakes[].id.",
      "surfaces": "The surfaces[].id values the job touches.",
      "rubricVersion": "0.2",
      "date": "Date of assessment, ISO 8601.",
      "method": "inspection, observation, or both.",
      "profile": "One level (0 to 3) or null per track: FIND, READ, ACT, RECOVER, HANDBACK, BOUND.",
      "target": "The targetProfiles[].target for the stakes.",
      "stoppers": "IDs of stopper checks that are not-met, each with a one-line explanation.",
      "checks": "Every applicable check with its result and a note on what was seen.",
      "notChecked": "Checks marked not-checked, and why.",
      "alsoWorthDoing": "Supporting checks that are not met, with their evidence class.",
      "firstFixes": "Up to three changes, stoppers first.",
      "observation": "When method includes observation: clients and versions, runs per client, and the record."
    },
    "profileLine": "Find Dependable · Read Partly · Act Not yet · Recover Not yet · Hand back Not yet · Boundaries Not yet"
  },
  "reportingRules": [
    "Name the job, the stakes, the surfaces, the date, the method and the rubric version with every profile.",
    "List stoppers first, in plain words.",
    "Report the six levels as a profile. Do not add, average or combine them, and do not rank products by them.",
    "Say which checks were not checked, and why.",
    "A profile describes one job on one date. It is not a certificate, a prediction of agent success, or evidence about any other job."
  ],
  "workedExample": {
    "business": "Brightwater Bike Repair, a fictional bike workshop invented for this rubric. It has a website with prices in the page text, a booking page, an account area, a booking API with a current OpenAPI document, and an MCP server with three tools: find_slots, book_service and pay_deposit.",
    "jobs": [
      {
        "job": "Does Brightwater service e-bikes, and what does a full service cost?",
        "stakes": "look-up",
        "surfaces": [
          "website"
        ],
        "profile": {
          "FIND": 2,
          "READ": 2,
          "ACT": null,
          "RECOVER": null,
          "HANDBACK": null,
          "BOUND": 0
        },
        "stoppers": [],
        "notes": {
          "FIND": "The pages are open to the assistants tried, and the home page links to Services.",
          "READ": "\"We service e-bikes\" and \"Full service £85\" are in the page text on first load.",
          "BOUND": "The terms forbid \"automated access to the site\" and do not mention assistants acting for a customer (BOUND-02)."
        },
        "alsoWorthDoing": [
          "FIND-04: llms.txt lists two deleted pages; fix or remove it.",
          "READ-08: publish a Markdown twin of the services page."
        ]
      },
      {
        "job": "Book a full service for my bike next Tuesday and pay the £20 deposit.",
        "stakes": "consequential",
        "surfaces": [
          "website",
          "api",
          "tools",
          "app"
        ],
        "profile": {
          "FIND": 2,
          "READ": 1,
          "ACT": 0,
          "RECOVER": 0,
          "HANDBACK": 0,
          "BOUND": 0
        },
        "stoppers": [
          "ACT-02: the server accepts pay_deposit without any approval; the only guard is \"ask the user before paying\" in the tool description.",
          "ACT-03: pay_deposit takes no idempotency key, so a timed-out call that is retried can charge the card twice."
        ],
        "notes": {
          "FIND": "Reachable, linked from the home page, and a small three-tool catalogue.",
          "READ": "Free slots appear only after a JavaScript calendar loads; Next and Confirm are div elements; the confirmation is a green tick with no text; tool descriptions do not say when not to use each tool.",
          "ACT": "Both stoppers, and the rule that the deposit is non-refundable within 24 hours is only in a PDF of terms (ACT-01).",
          "RECOVER": "Errors say \"Invalid booking\" with no field, rule or suggestion (RECOVER-02). Payment status can be read back (RECOVER-03 met).",
          "HANDBACK": "Bookings are listed with a Cancel button, but a booking made by an assistant looks the same as one the person made (HANDBACK-03).",
          "BOUND": "The terms forbid automated access."
        },
        "profileLine": "Find Dependable · Read Partly · Act Not yet · Recover Not yet · Hand back Not yet · Boundaries Not yet",
        "firstFixes": [
          "An idempotency key and a server-checked approval on pay_deposit.",
          "Errors that name the field and list the free slots.",
          "Free slots in the page text on first load."
        ]
      }
    ]
  },
  "tracks": [
    {
      "id": "FIND",
      "name": "Find",
      "question": "Can the agent get to the right place for this job?",
      "forThePerson": "If the agent cannot reach the page or endpoint where the job happens, the person gets nothing back, or an answer from somewhere less reliable.",
      "fieldMapPart": "Discover",
      "checks": [
        {
          "id": "FIND-01",
          "check": "The pages and endpoints this job needs are open to the agent the person is using.",
          "role": "core",
          "stopper": true,
          "surfaces": [
            "website",
            "docs",
            "api",
            "app"
          ],
          "howToCheck": "Fetch each page or endpoint the job uses with a plain HTTP client and as the assistants your customers use. Expect 200, or a sign-in the person can complete. A 403, a challenge page or an empty shell is not met. Read robots.txt and bot-protection rules for anything that blocks user-triggered assistants.",
          "whyItMatters": "If the door is shut, nothing else here matters. The person asked for help and their assistant comes back empty-handed, often without saying why.",
          "evidence": {
            "class": "studied",
            "basis": [
              {
                "source": "Vercel, Make your site readable by AI agents (controlled probes with Ora), 2026-08-28",
                "url": "https://vercel.com/kb/guide/make-your-site-readable-by-ai-agents",
                "note": "Neither client retrieved the answer when the server returned 403."
              }
            ]
          },
          "replaces": [
            "DIS-01",
            "DIS-03"
          ]
        },
        {
          "id": "FIND-02",
          "check": "A path of real links leads from the front door to where the job happens.",
          "role": "core",
          "stopper": false,
          "surfaces": [
            "website",
            "docs"
          ],
          "howToCheck": "From the home page, or the docs home, follow links that have an href to the page where the job starts. Note any step that needs hover, a script, or the site's own search box.",
          "whyItMatters": "Agents usually start where people do, at the front door. A route that only works with a mouse is a dead end for them.",
          "evidence": {
            "class": "studied",
            "basis": [
              {
                "source": "Vercel, Make your site readable by AI agents, 2026-08-28",
                "url": "https://vercel.com/kb/guide/make-your-site-readable-by-ai-agents",
                "note": "Observational: the home page was reached in 69% of runs and was the first step in 92% of those; docs were reached in 83% of runs."
              }
            ]
          },
          "replaces": []
        },
        {
          "id": "FIND-03",
          "check": "Addresses for this job are stable.",
          "role": "core",
          "stopper": false,
          "surfaces": [
            "website",
            "docs",
            "api"
          ],
          "howToCheck": "Confirm canonical URLs on the job's pages, no session identifiers in URLs, 301 or 308 redirects on the same host when pages move, and no soft 404s (an error page served with 200).",
          "whyItMatters": "An agent that returns to a page from an earlier step, or follows a link its person saved last week, has to land on the same thing.",
          "evidence": {
            "class": "reasoned",
            "basis": [
              {
                "source": "Agent-Friendly Documentation Spec, URL stability category",
                "url": "https://agentdocsspec.com/",
                "note": "Practitioner observation of agent fetch behaviour, not a controlled study."
              }
            ]
          },
          "replaces": [
            "DIS-06"
          ]
        },
        {
          "id": "FIND-04",
          "check": "Any inventory you publish is accurate: the sitemap, and llms.txt if you keep one.",
          "role": "supporting",
          "stopper": false,
          "surfaces": [
            "website",
            "docs"
          ],
          "howToCheck": "Confirm the sitemap is named in robots.txt and that every URL in the sitemap and in llms.txt returns 200 and is current.",
          "whyItMatters": "An index that points at deleted pages sends an agent in circles. Nobody has shown that publishing an index makes jobs succeed more often, so keep one only if you will keep it true.",
          "evidence": {
            "class": "convention",
            "basis": [
              {
                "source": "Vercel, Make your site readable by AI agents, 2026-08-28",
                "url": "https://vercel.com/kb/guide/make-your-site-readable-by-ai-agents",
                "note": "In the controlled probes, adding llms.txt, JSON-LD, sitemaps or Markdown mirrors did not change whether an answer already in server-rendered HTML was retrieved."
              }
            ]
          },
          "replaces": [
            "DIS-02",
            "DIS-04"
          ]
        },
        {
          "id": "FIND-05",
          "check": "If you offer an API or tools, they are described where agents look, and every endpoint named is live.",
          "role": "supporting",
          "stopper": false,
          "surfaces": [
            "api",
            "tools"
          ],
          "howToCheck": "Look for an OpenAPI URL, an MCP server description, an ARD manifest at /.well-known/ard.json, or an A2A agent card. Validate it against its schema and call each endpoint it names. Confirm the site, docs and manifest link to each other.",
          "whyItMatters": "A manifest tells an agent what it can do here, not only what it can read. A manifest that describes a service that does not exist is worse than none.",
          "evidence": {
            "class": "convention",
            "basis": [
              {
                "source": "Cloudflare, Introducing the Agent Readiness score, 2026-04-17",
                "url": "https://blog.cloudflare.com/agent-readiness/",
                "note": "MCP server cards and API catalogues together appeared on fewer than 15 sites in the scanned dataset. No outcome study found."
              }
            ]
          },
          "replaces": [
            "DIS-05",
            "DIS-07"
          ]
        },
        {
          "id": "FIND-06",
          "check": "The tools offered for this job are few enough to choose between, or narrow to the ones that apply.",
          "role": "core",
          "stopper": false,
          "surfaces": [
            "tools"
          ],
          "howToCheck": "Count the tools the agent can see at the moment it must choose. Look for near-duplicates, overlapping names, and tools that only apply in some states but are always offered.",
          "whyItMatters": "The more look-alike tools an agent sees, the more often it picks the wrong one, and the wrong tool can do the wrong thing confidently.",
          "evidence": {
            "class": "studied",
            "basis": [
              {
                "source": "More Skills, Worse Agents? Skill shadowing (arXiv 2605.24050)",
                "url": "https://arxiv.org/abs/2605.24050",
                "note": "Up to a 21% drop as a skill library grew, almost entirely from wrong-skill selection."
              },
              {
                "source": "LiveMCPBench (arXiv 2508.01780)",
                "url": "https://arxiv.org/abs/2508.01780",
                "note": "Retrieval errors caused nearly half of failures at realistic multi-server scale."
              },
              {
                "source": "ToolChoiceConfusion (arXiv 2606.06284)",
                "url": "https://arxiv.org/abs/2606.06284",
                "note": "Filtering to the tools that can advance the current state held success while cutting tokens by about 90%."
              }
            ]
          },
          "replaces": []
        }
      ]
    },
    {
      "id": "READ",
      "name": "Read",
      "question": "Can the agent read what this decision depends on, exactly?",
      "forThePerson": "The person is trusting the agent to report the real price, the real rule and the real next step. If those only exist in a picture, a script or a hover, the agent guesses and the person inherits the guess.",
      "fieldMapPart": "Discover",
      "checks": [
        {
          "id": "READ-01",
          "check": "The facts this decision depends on are in the page text when it first loads.",
          "role": "core",
          "stopper": true,
          "surfaces": [
            "website",
            "docs",
            "app"
          ],
          "howToCheck": "Fetch the job's pages without running JavaScript, or read the initial HTML. Confirm that price, availability, eligibility, requirements and what happens next are there as text, not only in images, PDFs, tabs, accordions or hover states.",
          "whyItMatters": "Many agents read the fetched document rather than driving a browser. A fact that only appears after a script runs does not exist for them, so the person gets an answer built on its absence.",
          "evidence": {
            "class": "studied",
            "basis": [
              {
                "source": "Vercel, Make your site readable by AI agents, 2026-08-28",
                "url": "https://vercel.com/kb/guide/make-your-site-readable-by-ai-agents",
                "note": "A fetch-only client could not retrieve an answer available only through JavaScript."
              },
              {
                "source": "Designing Agent-Ready Websites for AI Web Agents (arXiv 2607.12056)",
                "url": "https://arxiv.org/abs/2607.12056",
                "note": "One prototype shop, 300 runs, three models: strict success about 89% for the agent-ready version against about 49% for the baseline."
              }
            ]
          },
          "replaces": [
            "STR-04",
            "MRC-06"
          ]
        },
        {
          "id": "READ-02",
          "check": "Controls on the job's path are real controls, with names that say what they do.",
          "role": "core",
          "stopper": false,
          "surfaces": [
            "website",
            "app"
          ],
          "howToCheck": "Inspect the accessibility tree along the job's path. Links are links, buttons are buttons, fields have labels. No control has an empty name, an icon-only name, or a generic name such as 'Submit' reused for different actions. Key controls keep stable identifiers across releases.",
          "whyItMatters": "An agent picks an action by its name. A clickable div has no name and no role, so the agent either misses it or guesses by position, and the guess breaks at the next redesign.",
          "evidence": {
            "class": "studied",
            "basis": [
              {
                "source": "Affora: A Design System for Agent-Friendly Interfaces (arXiv 2609.19125)",
                "url": "https://arxiv.org/abs/2609.19125",
                "note": "Agent performance tracked the interaction meaning available through the interface, not visual style."
              }
            ]
          },
          "replaces": [
            "STR-01",
            "STR-02",
            "STR-05"
          ]
        },
        {
          "id": "READ-03",
          "check": "After each step, the new state is written down.",
          "role": "core",
          "stopper": false,
          "surfaces": [
            "website",
            "app"
          ],
          "howToCheck": "After each state-changing step, confirm that the confirmation, the error, or the selected option appears as text or as an ARIA state, not only as colour, an icon or an animation.",
          "whyItMatters": "An agent checks its own work by reading the page again. If success is a green tick with no words, it cannot tell whether the booking went through, and it may do it again.",
          "evidence": {
            "class": "reasoned",
            "basis": []
          },
          "replaces": [
            "STR-07"
          ]
        },
        {
          "id": "READ-04",
          "check": "Each tool or endpoint says what it is for, when not to use it, what it needs and what it returns.",
          "role": "core",
          "stopper": false,
          "surfaces": [
            "api",
            "tools"
          ],
          "howToCheck": "Read each description the agent sees for this job. Confirm it states its purpose, when a neighbouring tool is the better choice, what each parameter means, and the shape of the result. Confirm names are unique and the description matches what the tool actually does.",
          "whyItMatters": "The description is the only thing an agent reads before it chooses. A vague or wrong description sends it to the wrong tool, or the right tool with the wrong input.",
          "evidence": {
            "class": "studied",
            "basis": [
              {
                "source": "From Docs to Descriptions: smell-aware evaluation of MCP server descriptions (arXiv 2602.18914)",
                "url": "https://arxiv.org/abs/2602.18914",
                "note": "Description smells were pervasive across 10,831 servers; fixing accuracy and functionality smells moved selection most."
              },
              {
                "source": "BiasBusters (arXiv 2510.00307)",
                "url": "https://arxiv.org/abs/2510.00307",
                "note": "Small wording changes to descriptions shifted which of several equivalent tools models chose."
              },
              {
                "source": "Making OpenAPI Documentation Agent-Ready (arXiv 2605.14312)",
                "url": "https://arxiv.org/abs/2605.14312",
                "note": "Industrial case: documentation smells in all 600 endpoints, linked to planning, selection and payload failures."
              }
            ]
          },
          "replaces": []
        },
        {
          "id": "READ-05",
          "check": "Inputs have a machine-checkable contract that matches the live service.",
          "role": "core",
          "stopper": false,
          "surfaces": [
            "api",
            "tools"
          ],
          "howToCheck": "Confirm a current OpenAPI document or JSON Schema for the job's calls, at a discoverable URL, with closed sets as enums, required fields marked, and a version that matches what is deployed.",
          "whyItMatters": "A schema lets the agent, or its harness, catch a malformed call before it is sent. It does not make the agent understand the call, which is why READ-04 matters too.",
          "evidence": {
            "class": "studied",
            "basis": [
              {
                "source": "Schema First Tool APIs for LLM Agents (arXiv 2603.13404)",
                "url": "https://arxiv.org/abs/2603.13404",
                "note": "Small pilot: schemas reduced malformed calls but not semantic misuse."
              }
            ]
          },
          "replaces": [
            "MRC-03"
          ]
        },
        {
          "id": "READ-06",
          "check": "Answers fit in one read.",
          "role": "supporting",
          "stopper": false,
          "surfaces": [
            "api",
            "tools",
            "docs"
          ],
          "howToCheck": "Call the job's read operations with typical inputs. Confirm the item the agent needs is in the first page or chunk, that filters exist to avoid bulk, and that irrelevant fields do not dominate the response.",
          "whyItMatters": "Agents rarely ask for the second page. If the answer is on page two, or buried in noise, the agent works from what it has.",
          "evidence": {
            "class": "studied",
            "basis": [
              {
                "source": "Agents Don't Paginate (arXiv 2608.26130)",
                "url": "https://arxiv.org/abs/2608.26130",
                "note": "No agent-initiated requests for a second chunk were observed in one MCP middleware's session logs."
              },
              {
                "source": "Beyond Perfect APIs, WildAGTEval (arXiv 2601.00268)",
                "url": "https://arxiv.org/abs/2601.00268",
                "note": "Irrelevant information was the hardest complexity, reducing strong models' performance by 27.3%."
              }
            ]
          },
          "replaces": []
        },
        {
          "id": "READ-07",
          "check": "Headings name what is below them, and passages stand on their own.",
          "role": "supporting",
          "stopper": false,
          "surfaces": [
            "website",
            "docs"
          ],
          "howToCheck": "Extract the heading outline of the job's pages. Confirm one h1, no skipped levels, and headings that name their subject. Read the first sentences under each heading on their own and confirm they still make sense.",
          "whyItMatters": "Agents read long pages in pieces. A heading that names its section helps the agent read the right piece, and a passage that stands alone stays true when quoted.",
          "evidence": {
            "class": "reasoned",
            "basis": []
          },
          "replaces": [
            "STR-03",
            "MRC-05"
          ]
        },
        {
          "id": "READ-08",
          "check": "A plain-text version carries the same substance and is easy to find.",
          "role": "supporting",
          "stopper": false,
          "surfaces": [
            "website",
            "docs"
          ],
          "howToCheck": "Request a content URL with Accept: text/markdown, or its .md twin. Confirm it carries the same substance as the HTML, and that it is advertised by content negotiation, a Link header, or a link in the page.",
          "whyItMatters": "A clean text version is cheaper for an agent to read. Vendors have measured large token savings; nobody has yet shown it changes whether a job succeeds when the HTML is already readable.",
          "evidence": {
            "class": "reasoned",
            "basis": [
              {
                "source": "Cloudflare, Introducing the Agent Readiness score, 2026-04-17",
                "url": "https://blog.cloudflare.com/agent-readiness/",
                "note": "Vendor-measured token reduction of up to 80% in some cases."
              },
              {
                "source": "Vercel, Make your site readable by AI agents, 2026-08-28",
                "url": "https://vercel.com/kb/guide/make-your-site-readable-by-ai-agents",
                "note": "Markdown mirrors did not change whether an answer already in server-rendered HTML was retrieved."
              }
            ]
          },
          "replaces": [
            "MRC-01",
            "MRC-02"
          ]
        },
        {
          "id": "READ-09",
          "check": "Structured data and dates agree with what the page shows.",
          "role": "supporting",
          "stopper": false,
          "surfaces": [
            "website",
            "docs"
          ],
          "howToCheck": "Validate any JSON-LD and confirm each value it asserts (price, availability, dates) appears on the page. Confirm a visible date matches datePublished and dateModified.",
          "whyItMatters": "Structured data that disagrees with the page hands a machine a confident wrong answer. There is no evidence that adding it helps agents finish jobs, so its value is in being right, not in being present.",
          "evidence": {
            "class": "convention",
            "basis": [
              {
                "source": "Optimizing Visibility in Generative Engines: a critical survey (arXiv 2607.14035)",
                "url": "https://arxiv.org/abs/2607.14035",
                "note": "No reviewed technique showed a stable cross-platform effect on discoverability."
              }
            ]
          },
          "replaces": [
            "STR-06",
            "MRC-04"
          ]
        },
        {
          "id": "READ-10",
          "check": "Repository instructions give the commands to build and test, and the things not to do, rather than a tour.",
          "role": "supporting",
          "stopper": false,
          "surfaces": [
            "repository"
          ],
          "howToCheck": "Read AGENTS.md or its equivalent. Confirm it states the build, test and check commands, non-standard conventions, and specific prohibitions, and that it is short enough to read at the start of every session.",
          "whyItMatters": "Studies disagree on whether instruction files help coding agents succeed. They agree that a general overview adds cost without adding success, and one large study found that the rules that helped were things not to do.",
          "evidence": {
            "class": "studied",
            "basis": [
              {
                "source": "Evaluating AGENTS.md (arXiv 2602.11988)",
                "url": "https://arxiv.org/abs/2602.11988",
                "note": "Context files did not generally improve task success and raised inference cost by over 20%; overviews were not helpful."
              },
              {
                "source": "Guardrails Beat Guidance (arXiv 2604.11088)",
                "url": "https://arxiv.org/abs/2604.11088",
                "note": "Individually beneficial rules were negative constraints; positive style directives were not."
              },
              {
                "source": "On the Impact of AGENTS.md Files on the Efficiency of AI Coding Agents (arXiv 2601.20404)",
                "url": "https://arxiv.org/abs/2601.20404",
                "note": "Lower median runtime and output tokens with comparable completion, in 124 pull requests."
              }
            ]
          },
          "replaces": []
        }
      ]
    },
    {
      "id": "ACT",
      "name": "Act",
      "question": "Can the agent take the step, with the consequences stated and the guardrails held by your system?",
      "forThePerson": "This is where money moves and messages go out in the person's name. The person needs the agent to know what a step will cost before it takes it, and needs your system, not the agent's good intentions, to hold the line.",
      "fieldMapPart": "Act",
      "idNote": "ACT-04 (agent identity in v0.1) moved to HANDBACK-03. Its number is retired and not reused.",
      "checks": [
        {
          "id": "ACT-01",
          "check": "Before a step that matters, what it will do is stated where the agent decides: the cost, who will see it, and whether it can be undone.",
          "role": "core",
          "stopper": false,
          "surfaces": [
            "website",
            "api",
            "tools",
            "app"
          ],
          "appliesWhen": "The job changes something.",
          "howToCheck": "For each step that changes something, read the tool description, API reference or on-page copy next to the action. Confirm it says what it costs, who it is visible to, and whether and how it can be reversed. A rule that lives only in a PDF of terms is not met.",
          "whyItMatters": "An agent cannot infer that a deposit is non-refundable. If the consequence is not stated where it decides, the person discovers it by paying for it.",
          "evidence": {
            "class": "reasoned",
            "basis": []
          },
          "replaces": [
            "ACT-01"
          ]
        },
        {
          "id": "ACT-02",
          "check": "Approval for a consequential step is enforced by your system and bound to the exact action approved.",
          "role": "core",
          "stopper": true,
          "surfaces": [
            "api",
            "tools",
            "app"
          ],
          "appliesWhen": "The job is consequential.",
          "howToCheck": "In a test environment, attempt the step with valid credentials and no approval token, and confirm your system refuses. Then approve one action and try to execute a changed one (a different amount or recipient) with that approval, and confirm it is refused.",
          "whyItMatters": "An instruction such as 'ask the user first' in a tool description is advice the agent may not follow. What the person approves must be what runs, and only your system can make sure of that.",
          "evidence": {
            "class": "studied",
            "basis": [
              {
                "source": "Loopjacking: hijacking human-in-the-loop approval (arXiv 2609.21081)",
                "url": "https://arxiv.org/abs/2609.21081",
                "note": "Reproduced cases in named shipped products where the approved operation was not the one executed."
              },
              {
                "source": "What You Approve Is What Executes: consent integrity (arXiv 2606.02668)",
                "url": "https://arxiv.org/abs/2606.02668",
                "note": "Names the property: the approved action must be bound to the action that executes."
              },
              {
                "source": "Model Context Protocol specification, 2026-07-28",
                "url": "https://modelcontextprotocol.io/specification/2026-07-28",
                "note": "Tool annotations are to be treated as untrusted unless the server is trusted."
              }
            ]
          },
          "replaces": [
            "ACT-02"
          ]
        },
        {
          "id": "ACT-03",
          "check": "Writes are safe to retry.",
          "role": "core",
          "stopper": true,
          "surfaces": [
            "api",
            "tools",
            "app"
          ],
          "appliesWhen": "The job changes something.",
          "howToCheck": "Send the same write twice with the same idempotency key and confirm one effect. Confirm the key is documented. Where keys are not possible, confirm the agent can look the operation up before retrying (see RECOVER-03).",
          "whyItMatters": "Agents retry when a call times out, and the first call may already have worked. Without a way to make the retry harmless, a slow network becomes a second charge on the person's card.",
          "evidence": {
            "class": "studied",
            "basis": [
              {
                "source": "Where Does Exactly-Once Live? (arXiv 2609.29095)",
                "url": "https://arxiv.org/abs/2609.29095",
                "note": "25,930 episodes: offering an idempotency key on every write lowered duplicates from 28% to 4%; agents reported success in 90% of episodes where they had duplicated an effect."
              },
              {
                "source": "Verified Tool Calls Improve LLM Agent Reliability Under Non-Atomic Failures (arXiv 2608.02645)",
                "url": "https://arxiv.org/abs/2608.02645",
                "note": "Simulation: verify-before-retry and idempotency keys reduced duplicate actions."
              }
            ]
          },
          "replaces": [
            "ACT-03"
          ]
        },
        {
          "id": "ACT-05",
          "check": "Agent access can be narrower than the person's whole account, and revoked on its own.",
          "role": "core",
          "stopper": false,
          "surfaces": [
            "api",
            "tools",
            "app"
          ],
          "appliesWhen": "The job changes something.",
          "howToCheck": "Confirm the person can give an agent access limited to this job (scopes, a separate key or token) and can revoke it without signing themselves out or rotating everything.",
          "whyItMatters": "A full-account key turns every mistake into the most expensive version of itself. A narrow key limits what can go wrong, and revoking it should not cost the person their own access.",
          "evidence": {
            "class": "reasoned",
            "basis": []
          },
          "replaces": [
            "ACT-05"
          ]
        },
        {
          "id": "ACT-06",
          "check": "Limits are published and appear in responses.",
          "role": "supporting",
          "stopper": false,
          "surfaces": [
            "api",
            "tools"
          ],
          "appliesWhen": "The job changes something.",
          "howToCheck": "Confirm documented rate limits and quotas, limit headers on responses, and Retry-After on 429.",
          "whyItMatters": "An agent that cannot see its remaining budget either waits far too long or keeps going until it is blocked, and the person's job stalls either way.",
          "evidence": {
            "class": "reasoned",
            "basis": []
          },
          "replaces": [
            "ACT-06"
          ]
        },
        {
          "id": "ACT-07",
          "check": "The step has a typed route, such as an API call, a tool or a declared form, not only clicks.",
          "role": "supporting",
          "stopper": false,
          "surfaces": [
            "website",
            "app",
            "api",
            "tools"
          ],
          "appliesWhen": "The job changes something.",
          "howToCheck": "Confirm the job's action can be taken through an API, an MCP tool, or a declared form (for example WebMCP), with the same rules as the click path.",
          "whyItMatters": "A typed call says exactly what will happen and can be checked and recorded. Clicking through a page works until the layout changes.",
          "evidence": {
            "class": "reasoned",
            "basis": [
              {
                "source": "AXIS: API-first LLM-based agents (arXiv 2409.17140)",
                "url": "https://arxiv.org/abs/2409.17140",
                "note": "One application: preferring APIs to UI actions cut task time while holding accuracy."
              },
              {
                "source": "The Devil Is in the Interface (arXiv 2608.11386)",
                "url": "https://arxiv.org/abs/2608.11386",
                "note": "Tool architecture changed agent behaviour substantially at similar capability."
              }
            ]
          },
          "replaces": []
        }
      ]
    },
    {
      "id": "RECOVER",
      "name": "Recover",
      "question": "When something goes wrong, can the agent find a different next move instead of repeating the last one?",
      "forThePerson": "Things will fail. What matters to the person is whether the agent recovers sensibly, or tries the same thing until it gives up or does damage.",
      "fieldMapPart": "Collaborate",
      "checks": [
        {
          "id": "RECOVER-01",
          "check": "Errors carry a stable code with the message.",
          "role": "core",
          "stopper": false,
          "surfaces": [
            "website",
            "api",
            "tools",
            "app"
          ],
          "appliesWhen": "The job changes something.",
          "howToCheck": "Trigger the job's common failures (missing field, taken slot, expired session, declined payment) and confirm each returns a stable machine-readable code as well as a message.",
          "whyItMatters": "A code is what lets an agent tell 'try another time' from 'try another card'. A sentence that changes between releases cannot be relied on.",
          "evidence": {
            "class": "reasoned",
            "basis": []
          },
          "replaces": [
            "REC-01"
          ]
        },
        {
          "id": "RECOVER-02",
          "check": "Errors say what would make the request succeed: the field, the rule, the accepted values, or another route.",
          "role": "core",
          "stopper": false,
          "surfaces": [
            "website",
            "api",
            "tools",
            "app"
          ],
          "appliesWhen": "The job changes something.",
          "howToCheck": "Submit a partly invalid request and read the response. Confirm it names the field and the rule, gives the accepted range or format, and where useful suggests a corrected request or an alternative.",
          "whyItMatters": "'Invalid booking' gives the agent nothing to change, so it tries the same thing again. A response that says 'slot 14:00 is taken; 15:30 and 16:00 are free' gives it a better second attempt.",
          "evidence": {
            "class": "studied",
            "basis": [
              {
                "source": "Self-Reflective APIs: Structure Beats Verbosity for AI Agent Recovery (arXiv 2606.05037)",
                "url": "https://arxiv.org/abs/2606.05037",
                "note": "Pilot: structured suggestions lifted task completion by 36.7 to 40.0 points over plain-English diagnoses on Anthropic models; not significant on gpt-4o-mini; replicated in a second domain."
              },
              {
                "source": "Beyond Function Calling: ToolBench-X (arXiv 2606.25819)",
                "url": "https://arxiv.org/abs/2606.25819",
                "note": "Failures under recoverable hazards were driven by poor diagnosis and recovery; targeted recovery hints recovered many."
              }
            ]
          },
          "replaces": [
            "REC-02",
            "REC-03"
          ]
        },
        {
          "id": "RECOVER-03",
          "check": "After a timeout or crash, the agent can find out what actually happened.",
          "role": "core",
          "stopper": false,
          "surfaces": [
            "api",
            "tools",
            "app"
          ],
          "appliesWhen": "The job changes something.",
          "howToCheck": "Confirm the agent can look up an operation by its identifier or idempotency key and see whether it completed, failed or is still in progress.",
          "whyItMatters": "Without a way to ask 'did that go through?', the agent must choose between repeating a step that may have worked and abandoning one that may not have. Both hurt the person.",
          "evidence": {
            "class": "studied",
            "basis": [
              {
                "source": "Where Does Exactly-Once Live? (arXiv 2609.29095)",
                "url": "https://arxiv.org/abs/2609.29095",
                "note": "When an immediate read-back could reveal the outcome, frontier models almost never duplicated a write (0.5%)."
              }
            ]
          },
          "replaces": [
            "REC-04"
          ]
        },
        {
          "id": "RECOVER-04",
          "check": "A long job can continue from where it stopped.",
          "role": "supporting",
          "stopper": false,
          "surfaces": [
            "api",
            "tools",
            "app"
          ],
          "appliesWhen": "The job has more than one step that changes something.",
          "howToCheck": "Interrupt the job partway and confirm the state can be read and the job continued, rather than started again.",
          "whyItMatters": "Long agent jobs get interrupted. If the only option is to start over, every interruption risks doing the first half twice.",
          "evidence": {
            "class": "reasoned",
            "basis": []
          },
          "replaces": [
            "REC-04"
          ]
        }
      ]
    },
    {
      "id": "HANDBACK",
      "name": "Hand back",
      "question": "Can the person see, check and undo what was done for them?",
      "forThePerson": "Delegating is only safe if the person can see what happened afterwards, in your product, and put it right. The agent's own summary is not enough, because agents can report success when they have done the wrong thing.",
      "fieldMapPart": "Collaborate",
      "checks": [
        {
          "id": "HANDBACK-01",
          "check": "Your product keeps a record the person can read of what was done for them: when, what, with which inputs, and with what result.",
          "role": "core",
          "stopper": true,
          "surfaces": [
            "app",
            "api",
            "tools"
          ],
          "appliesWhen": "The job changes something.",
          "howToCheck": "After running the job, sign in as the person and find the record of each action: time, action, inputs and outcome, including anything that failed or was retried.",
          "whyItMatters": "If the only account of what happened is the agent's own message, the person cannot tell a clean run from a double charge.",
          "evidence": {
            "class": "reasoned",
            "basis": [
              {
                "source": "Where Does Exactly-Once Live? (arXiv 2609.29095)",
                "url": "https://arxiv.org/abs/2609.29095",
                "note": "Agents reported success in 90% of episodes in which they had duplicated an effect."
              }
            ]
          },
          "replaces": [
            "REC-05"
          ]
        },
        {
          "id": "HANDBACK-02",
          "check": "From that record, the person can undo, cancel or escalate.",
          "role": "core",
          "stopper": false,
          "surfaces": [
            "app",
            "api"
          ],
          "appliesWhen": "The job changes something.",
          "howToCheck": "From the record, confirm the person can reverse or cancel the action, or reach someone who can, without starting from scratch.",
          "whyItMatters": "Seeing a mistake is only half of recovery. The person needs a way to put it right from the same place.",
          "evidence": {
            "class": "reasoned",
            "basis": []
          },
          "replaces": [
            "REC-05"
          ]
        },
        {
          "id": "HANDBACK-03",
          "check": "Your system can tell an agent acting for a person from the person, and records which it was.",
          "role": "core",
          "stopper": false,
          "surfaces": [
            "api",
            "tools",
            "app"
          ],
          "appliesWhen": "The job changes something.",
          "howToCheck": "Confirm agent requests arrive with a distinct identity (delegated scopes, a separate client, or a declared agent identity) and that the record shows which actions an agent took.",
          "whyItMatters": "Knowing who acted is the basis for everything else: limits, audit, revoking one agent without locking out the person, and honest numbers about agent use.",
          "evidence": {
            "class": "reasoned",
            "basis": []
          },
          "replaces": [
            "ACT-04"
          ]
        },
        {
          "id": "HANDBACK-04",
          "check": "Approval requests are few, and each shows the real action.",
          "role": "supporting",
          "stopper": false,
          "surfaces": [
            "app",
            "tools"
          ],
          "appliesWhen": "The job asks the person to approve anything.",
          "howToCheck": "Count the approvals the person is asked for during the job. Confirm routine, reversible steps do not ask, consequential ones do, and each request shows the actual amount, recipient or change rather than the agent's description of it.",
          "whyItMatters": "People approve what they are asked to approve. Too many requests and they stop reading; a request that shows the agent's summary instead of the real action can be approved without being understood.",
          "evidence": {
            "class": "studied",
            "basis": [
              {
                "source": "Oversight Has a Capacity (arXiv 2606.08919)",
                "url": "https://arxiv.org/abs/2606.08919",
                "note": "Reviewers agreed only moderately on what is risky (Fleiss' kappa 0.52); modelling fatigue, more escalation lowered realised safety past a point."
              }
            ]
          },
          "replaces": []
        }
      ]
    },
    {
      "id": "BOUND",
      "name": "Boundaries",
      "question": "Have you said what agents may do here, and do your signals agree?",
      "forThePerson": "The person chose to use an assistant. Your rules decide whether that choice is allowed, and whether the assistant can tell. This track is about permission, not success, so its checks are conventions by nature.",
      "fieldMapPart": "Orient",
      "checks": [
        {
          "id": "BOUND-01",
          "check": "Your crawler and agent rules are a decision, not an accident.",
          "role": "core",
          "stopper": false,
          "surfaces": [
            "website",
            "docs"
          ],
          "howToCheck": "Read robots.txt and any Content Signals or headers. Confirm that indexing for search, use in generated answers, and use for training are treated separately, and that assistants fetching on a person's request are not blocked by mistake.",
          "whyItMatters": "Many sites block the assistant a customer is deliberately using while meaning to block only training crawlers. The two are different user agents with different consequences.",
          "evidence": {
            "class": "convention",
            "basis": [
              {
                "source": "Content Signals",
                "url": "https://contentsignals.org/",
                "note": "A vocabulary for separating search, answer input and training."
              }
            ]
          },
          "replaces": [
            "DIS-03",
            "POL-01",
            "POL-02"
          ]
        },
        {
          "id": "BOUND-02",
          "check": "Your terms say whether customers may use an agent to act for them.",
          "role": "core",
          "stopper": false,
          "surfaces": [
            "website",
            "app",
            "api"
          ],
          "howToCheck": "Read the terms of service for language about automated access on behalf of a signed-in customer, as distinct from scraping.",
          "whyItMatters": "Terms written against scrapers often forbid, by accident, the assistant a paying customer is using. Say what you actually allow.",
          "evidence": {
            "class": "convention",
            "basis": []
          },
          "replaces": [
            "POL-03"
          ]
        },
        {
          "id": "BOUND-03",
          "check": "Your signals agree with each other.",
          "role": "core",
          "stopper": false,
          "surfaces": [
            "website",
            "docs",
            "api",
            "tools"
          ],
          "howToCheck": "Compare robots.txt, any usage declarations, any capability manifest and the terms of service. Note every contradiction.",
          "whyItMatters": "When your signals disagree, whoever reads them decides which one wins. You have stopped choosing your own policy.",
          "evidence": {
            "class": "convention",
            "basis": []
          },
          "replaces": [
            "POL-05"
          ]
        },
        {
          "id": "BOUND-04",
          "check": "People who run agents have a way to reach you.",
          "role": "supporting",
          "stopper": false,
          "surfaces": [
            "website",
            "api",
            "tools"
          ],
          "howToCheck": "Confirm a published contact for access problems, referenced from robots.txt, the docs or the capability manifest.",
          "whyItMatters": "Without a route, an operator whose agent is blocked has no option but to work around you.",
          "evidence": {
            "class": "convention",
            "basis": []
          },
          "replaces": [
            "POL-04"
          ]
        }
      ]
    }
  ],
  "retiredIds": [
    {
      "id": "ACT-04",
      "note": "v0.1 agent identity. Now HANDBACK-03. Never reused."
    }
  ],
  "migrationFromV0_1": {
    "DIS-01": [
      "FIND-01"
    ],
    "DIS-02": [
      "FIND-04"
    ],
    "DIS-03": [
      "FIND-01",
      "BOUND-01"
    ],
    "DIS-04": [
      "FIND-04"
    ],
    "DIS-05": [
      "FIND-05"
    ],
    "DIS-06": [
      "FIND-03"
    ],
    "DIS-07": [
      "FIND-05"
    ],
    "STR-01": [
      "READ-02"
    ],
    "STR-02": [
      "READ-02"
    ],
    "STR-03": [
      "READ-07"
    ],
    "STR-04": [
      "READ-01"
    ],
    "STR-05": [
      "READ-02"
    ],
    "STR-06": [
      "READ-09"
    ],
    "STR-07": [
      "READ-03"
    ],
    "MRC-01": [
      "READ-08"
    ],
    "MRC-02": [
      "READ-08"
    ],
    "MRC-03": [
      "READ-05"
    ],
    "MRC-04": [
      "READ-09"
    ],
    "MRC-05": [
      "READ-07"
    ],
    "MRC-06": [
      "READ-01"
    ],
    "ACT-01": [
      "ACT-01"
    ],
    "ACT-02": [
      "ACT-02"
    ],
    "ACT-03": [
      "ACT-03"
    ],
    "ACT-04": [
      "HANDBACK-03"
    ],
    "ACT-05": [
      "ACT-05"
    ],
    "ACT-06": [
      "ACT-06"
    ],
    "REC-01": [
      "RECOVER-01"
    ],
    "REC-02": [
      "RECOVER-02"
    ],
    "REC-03": [
      "RECOVER-02"
    ],
    "REC-04": [
      "RECOVER-03",
      "RECOVER-04"
    ],
    "REC-05": [
      "HANDBACK-01",
      "HANDBACK-02"
    ],
    "POL-01": [
      "BOUND-01"
    ],
    "POL-02": [
      "BOUND-01"
    ],
    "POL-03": [
      "BOUND-02"
    ],
    "POL-04": [
      "BOUND-04"
    ],
    "POL-05": [
      "BOUND-03"
    ]
  },
  "relatedFrameworks": [
    {
      "name": "Agent Readiness score and isitagentready.com",
      "publisher": "Cloudflare",
      "scope": "A public website's adoption of named standards, checked from outside, with a site-type selector.",
      "url": "https://isitagentready.com/",
      "note": "Site-level and automatic. Category names and counts have changed since launch; describe it by date. Retrieved 2026-09-25."
    },
    {
      "name": "is-agentic.com",
      "publisher": "Vercel with Ora",
      "scope": "A public website: essential checks carry most of the score, capability checks apply when detected, and one observed agent journey is shown beside the score.",
      "url": "https://is-agentic.com/methodology",
      "note": "Site-level, one number; the observed journey is not part of the score. Retrieved 2026-09-25."
    },
    {
      "name": "Lighthouse agentic browsing audits",
      "publisher": "Google Chrome",
      "scope": "A single page in an audit run: WebMCP, accessibility for agents, layout stability and llms.txt.",
      "url": "https://developer.chrome.com/docs/lighthouse/agentic-browsing/scoring",
      "note": "Deliberately no weighted 0 to 100 score. Retrieved 2026-09-25."
    },
    {
      "name": "Agent-Friendly Documentation Spec (afdocs)",
      "publisher": "agent-ecosystem community, led by Dachary Carey",
      "scope": "A documentation site's delivery to coding agents, with pass, warn or fail per check.",
      "url": "https://agentdocsspec.com/",
      "note": "One surface per spec, versioned independently. Retrieved 2026-09-25."
    },
    {
      "name": "AXIS",
      "publisher": "Netlify",
      "scope": "A real agent run against a scenario, scored from the transcript.",
      "url": "https://axis.run/scoring",
      "note": "Behavioural. Compatible with this rubric's observation protocol, but produces a composite score. Retrieved 2026-09-25."
    },
    {
      "name": "Agentic Readiness",
      "publisher": "AWS",
      "scope": "Enterprise applications as tools and resources, at portfolio, workflow or application level, with severity-based findings.",
      "url": "https://aws.amazon.com/blogs/migration-and-modernization/agentic-readiness/",
      "note": "Its workflow level is the closest in spirit to this rubric's job. Retrieved 2026-09-25."
    },
    {
      "name": "Agent Readiness Model",
      "publisher": "Factory",
      "scope": "A code repository's readiness for coding agents, in five gated levels.",
      "url": "https://docs.factory.ai/agent-readiness/overview",
      "note": "Different object: a repository, not a delegated job. Retrieved 2026-09-25."
    }
  ],
  "_frameworksNote": "relatedFrameworks describes what other published instruments measure so readers can tell them apart. It is not a ranking, and their outputs are not comparable with each other or with a profile from this rubric."
}
