Agent readiness · prosemirror.net
2026-08-12 10:41 UTC · formula v9.2 · 1.6s
Only 647 characters of your documentation survive without JavaScript, and that is the version an agent reads.
https://prosemirror.net/docs/ served 647 characters of text to a plain fetch. The check passes at 2,000, which is about one screen of prose.
A dashed column is a stage we could not measure, not a stage you failed.
- A · Discovery
- 3/5
- B · Agent entry
- 0/4
- C · Registration
- n/m
- D · Provisioning
- n/m
- E · Integration
- 1/2
of the 11 points that apply to you and we could measure · 6 of 17 were not scored
You 4 · category median 5.5 · best liveblocks.io 8 · 15 deterministic HTTP checks, published formula
Fix this first
This is the whole list: everything we could measure and you do not pass. Another 6 points sit behind checks we could not evaluate on your domain, and each of those lines below says what would make it measurable.
- 1llms.txt publishedminutes · +1
Publish /llms.txt: a markdown list linking your quickstart, API reference, pricing and package name. It is the cheapest file on this list.
- 2Agent entry pointan afternoon · +2
Publish /agent-signup.md: the path from nothing to a working key, written as steps for a machine rather than a tour for a person. Ours is at /agent-signup.md if you want a worked example, and it says plainly that we have nothing to sign up for.
- 3Machine-readable API descriptionan afternoon · +1
Publish an OpenAPI file at /openapi.json, or serve markdown when a client sends Accept: text/markdown. Either one stops agents guessing your API.
Then, when you have room
- Docs readable without JavaScript a project · +1Server-render the docs or mirror them as markdown. A plain fetch gets 647 characters, which reads as an empty product.
- OAuth dynamic client registration a project · +1Publish OAuth authorization server metadata with an RFC 7591 registration_endpoint in it. It is the only standard way an agent registers itself without a human.
- MCP surface a project · +1Wrap your top three API calls in an MCP server and declare it at /.well-known/mcp.json.
Take it with you
10 of the checks an agent depends on, prosemirror.net does not pass.
Send yourself the list above with the checks that cost the most, and a permanent link. Whoever owns the fix is usually not the person who ran the scan.
One email with the report, and one follow-up asking what you did with it. No newsletter, no sequence. Delete on request at hello@letagentsin.com.
None of this tells you whether an agent picked you
Everything above is a file an agent could read. Whether one actually chose you is a different measurement, and we have not run it on prosemirror.net. What we have run it on is a rich text editor vendor: six agents, one brief, six isolated copies of a real codebase. All six picked the same competitor, and the vendor being studied was never named, not even on a rejection list, while the runs named and dismissed ten alternatives between them. In an earlier round, run before we isolated the copies, it was named twice and struck off both times in four words: Fully commercial, licence key required. That study is about them, not about you. It is here because it is the difference between a file and a decision.
Against embeddable rich text editors
You are 10 of 10 in a category where a developer is trying to put a real editor inside a product.
- 1liveblocks.io8/14
- 2ckeditor.com9/16
- 3tiptap.dev9/16
- 4froala.com5/9
- 5tiny.cloud8/15
- 6quilljs.com5/10
- 7slatejs.org6/13
- 8editorjs.io4/10
- 9lexical.dev4/10
- 10prosemirror.netyou4/11
Where competitors pass and prosemirror.net does not
- Docs readable without JavaScriptckeditor.com · tiny.cloud · tiptap.dev · quilljs.com · slatejs.org · liveblocks.io
- llms.txt publishedckeditor.com · tiny.cloud · tiptap.dev · froala.com · liveblocks.io
- Free tier or no-card trial stated in textckeditor.com · tiny.cloud · tiptap.dev · liveblocks.io
- Machine-readable API descriptionckeditor.com · tiptap.dev · slatejs.org · liveblocks.io
Only domains we have actually scanned appear here, so the ranking is a floor: a competitor missing from the list has not been measured, not beaten.
By stage
Every check
Each line is one HTTP observation with a published rule, so you can rerun any of them yourself. Most are the same tomorrow if you are: the two that are not are the bot gate and the pricing page, which answer inconsistently on their own, which is why those run more than once and say so when the tries disagreed. PASS and PART are counted. UNMEASURED means we could not evaluate it, N/A means it does not apply to a product like yours, and neither is in the score or its denominator. See the formula
A · Discovery
- PASSAnswers an agent user-agentAnswered 200 to LetAgentsIn/1.0 (+https://letagentsin.com/methodology)
- FAILllms.txt publishedNo llms.txt at any of the 4 locations probedA curated map of your docs is the cheapest way to control what an agent reads first. Worth one point and not more: in eighteen isolated agent runs across four categories, not one cited llms.txt among its sources, and an independent ninety-day measurement published by Otterly in February 2026 found it served 84 requests against 62,100 AI-bot visits.
- FAILDocs readable without JavaScriptOnly 647 characters render without JSMost agents fetch HTML, they do not run your bundle. An empty shell reads as an empty product.
- PASSOn-demand agents not blockedNo robots.txt, so nothing is disallowed for anyone
- N/APaths robots.txt points at answerNo robots.txt, so it points nowhere
- PASSNo punishing crawl delayNo robots.txt, so no Crawl-delay applies
B · Agent entry
- FAILAgent entry pointNone of the 9 known agent entry paths returns a file rather than your page shellA markdown file written for a machine turns a guessing game into a procedure it can follow.
- FAILOAuth dynamic client registrationNo OAuth metadata on any of the 8 hosts probed, including the usual auth and api subdomainsRFC 7591 is the only standard path by which an agent can register itself without a human.
- FAILMCP surfaceNo MCP surface: nothing answered at mcp.prosemirror.net, mcp.prosemirror.net/mcp, mcp.prosemirror.net/v1/mcp, api.prosemirror.net/mcp, /mcp or /api/mcp, and no file mentions MCPAn MCP server turns your API from something an agent reads about into something it can call.
C · Registration
- N/ANo CAPTCHA in the signup HTMLNot applicable: nothing on the site links to pricing or to an account signup, so there is no gate to measureIf accounts are created somewhere else, tell us where and we will rescan.
- N/ASignup reachable without a browserNot applicable: nothing on the site links to pricing or to an account signupA product with no accounts cannot fail this. If yours has them elsewhere, point us at the page.
D · Provisioning
- UNMEASUREDProgrammatic key provisioningUnmeasurable: only 1 documentation page could be read, which is too little to conclude anythingLink your API reference from your docs index or from llms.txt and this becomes measurable.
- N/AFree tier or no-card trial stated in textNot applicable: nothing on the site links to pricing or to an account, so there is no tier to stateIf there is a paid tier, link its pricing from your home page and we will rescan.
E · Integration
- PASSTyped SDK on the registryprosemirror-view@1.42.2 ships types, matched from the registry by who publishes it rather than by a link on your site
- FAILMachine-readable API descriptionNo OpenAPI spec at the 5 usual paths, none declared by https://prosemirror.net/docs/, and no markdown negotiationAn OpenAPI file or markdown negotiation lets an agent read your API instead of guessing it.Point at your spec from your docs page with rel="service-desc" and an agent finds it without guessing.
What we discovered on the way
- Docs
- https://prosemirror.net/docs/ · linked from the site
- Pricing
- not found
- Signup
- not found
- npm package
- prosemirror-view (registry guess)
- GitHub
- not found
- Package licence
- MIT
- Crawl-delay
- none
- Content-Signal
- none
- Blocked on-demand agents
- none