calm-artist-7206
10/03/2026, 8:04 PMfresh-machine-37269
10/03/2026, 8:05 PMfresh-machine-37269
10/03/2026, 8:12 PMnoindex: true on all ten V0 pages and the two former monorepo architecture pages is complete, seo.indexing: "navigable" is the documented default, and Mintlify's own docs confirm the mechanism (noindex excludes pages from `llms.txt`/`llms-full.txt` plus search, sitemaps, and AI context). The docs.json diff adds only the two intended nav entries with no removals, the new internal links/anchors resolve, and the browser-recording example matches upstream SDK example 38 exactly. Removing the root Makefile is safe since the make build in CI runs inside the agent-sdk submodule.
Two things worth keeping in mind (not blocking):
β’ It's a genuine behavior change beyond LLM context β pages outside navigation now drop out of the generated index, and noindex also removes the legacy pages from search engines/sitemaps.
β’ The follow-ups matter: #816 (MCP) and #817 (consolidation/redirects) restore the remaining current material, so merging in the #815 β #816 β #817 order is important. A quick post-deploy check of /llms.txt and /llms-full.txt would confirm the expected entries.calm-artist-7206
10/03/2026, 9:23 PMfresh-machine-37269
10/03/2026, 9:23 PMfresh-machine-37269
10/03/2026, 9:29 PMmain is exactly the intended MCP architecture correction from #816 (docs.json + the sdk/arch/mcp.mdx rewrite), so merging it lands #816's content on main β the other two branch commits are already on main via #815 and add nothing.
I checked it against the SDK source and it's all accurate now: the `MCPToolAction`/`data` wrapper vs. the dynamic validation model split, action_from_arguments() sanitization, client connection reuse (no pool), text/image conversion with unsupported blocks skipped, the real ToolAnnotations fields (progressEnabled correctly dropped), and the hints-vs-confirmation-policy distinction. docs.json parses, the nav entry and internal links resolve, and the Mintlify preview + link checks passed.
I also refilled the PR description with a proper summary, stack order, source verification, and validation notes.
One thing to flag: it's still marked draft, and #817 is stacked on this branch β after this merges, retarget/rebase #817 onto main.calm-artist-7206
10/03/2026, 9:37 PMfresh-machine-37269
10/03/2026, 9:45 PMdocs.json. main had gained new enterprise/custom-sandbox-image redirects at the exact insertion point where #817 adds its five redirects. I kept both sets β nothing was dropped.
What I did:
β’ Rebased the branch directly onto main. Since #888 landed #816's MCP content upstream, the rebase dropped #817's duplicate copy of that commit plus the two docs/mintlify-native-llms-stack-base commits. It's now a single clean commit on main (16 files, +109/β797).
β’ Force-pushed with --force-with-lease, so the PR auto-retargeted its base to main and the stack dependency is gone.
β’ Marked it ready for review (it was still draft) and refilled the description with the rebase note.
Verification: all five removed pages are gone from tree and nav with redirects to existing targets; redirect sources are unique (60 entries); every added internal link/anchor resolves, including `#docker-conversation-runtime-settings`; the five retained legacy pages carry noindex: true and archive notices; docs.json parses; git diff --check clean; the cited sources check out.
Review: I submitted an approve. The PR is now MERGEABLE / CLEAN with reviewDecision: APPROVED β nothing left blocking it.calm-artist-7206
10/03/2026, 10:57 PMfresh-machine-37269
10/03/2026, 10:58 PMfresh-machine-37269
10/03/2026, 11:04 PM<https://docs.openhands.dev/llms.txt> β 200, text/plain, ~518 lines / 507 unique entries; every linked .md URL I spot-checked resolves.
β’ llms-full.txt β 200 too (~2.1 MB, ~56k lines, includes the MCP content).
β’ One caveat worth knowing: my very first fetch returned a stale edge cache (older copy missing the new /sdk/arch/mcp entry). A cache-busted fetch came back complete and fresh, so the redeploy is good β but anyone hitting it in the first few minutes may have seen the pre-redeploy copy.
Navigation β β
all clean
β’ All 288 pages listed in docs.json nav β 200.
β’ All 508 sitemap URLs β 200.
β’ Crawled the internal links on a 40-page sample: 120 unique links, zero broken.
β’ The consolidation redirects from the recent work resolve correctly: /openhands/usage/about β /overview/introduction, /overview/first-projects β /openhands/usage/get-started/tutorials, /sdk/arch/sdk β /sdk/arch/overview, /openhands/usage/developers/debugging β /openhands/usage/agent-canvas/development.
PR content is live
β’ sdk/arch/mcp is now in the nav and serving the updated copy ("Argument wrapper", "Connect to Server", "Connection Reuse", "Generate Validation Model"); the old "Dynamic model"/"Connection Pooling"/"Spawn Server" wording is gone.
One small nit to flag π
β’ The homepage advertises /.well-known/api-catalog via its Link header, but that path returns 404. The other advertised endpoints are fine (llms.txt, llms-full.txt, .well-known/mcp/server-card.json, .well-known/agent-card.json, .well-known/agent-skills/index.json). Might be worth a quick look, but nothing else is broken.calm-artist-7206
10/03/2026, 11:40 PMfresh-machine-37269
10/03/2026, 11:40 PMfresh-machine-37269
10/03/2026, 11:41 PMapi-catalog refers to the .well-known/api-catalog endpoint β a machine-readable linkset (RFC 9264, Content-Type: application/linkset+json) that AI agents/clients fetch to discover where a site's APIs live and how to consume them.
What belongs in it:
β’ anchor β the URL the catalog is about (e.g. `https://www.openhands.dev/`)
β’ service-doc β links to human-readable API documentation
β’ describedby β link(s) to the machine-readable API description, i.e. the OpenAPI document (`https://app.openhands.dev/openapi.json`)
β’ optionally service-desc, status, or multiple item entries for multiple APIs
On our sites, www.openhands.dev/.well-known/api-catalog currently serves exactly that shape: an anchor on the homepage, two service-doc entries (the Cloud API docs page + docs.openhands.dev), and one describedby pointing at the OpenHands Cloud OpenAPI spec. It's defined in company-website/src/routes/api-catalog.ts and advertised through the Link: β¦; rel="api-catalog" header in vercel.json.
One thing worth flagging: docs.openhands.dev advertises </.well-known/api-catalog>; rel="api-catalog" in its Link header, but that path currently returns 404 (Mintlify isn't serving one). So either the docs site should serve its own linkset pointing at its API/OpenAPI docs, or it should drop that header β right now it's a dangling reference.
(This reply was drafted by an AI agent, OpenHands.)calm-artist-7206
10/04/2026, 12:22 PMfresh-machine-37269
10/04/2026, 12:23 PMfresh-machine-37269
10/04/2026, 12:46 PMapi-catalog, pointing at the Cloud API.
The fix is one line in `docs.json`: adding "download-spec" to contextual.options. That's the switch Mintlify uses to publish the RFC 9727 linkset at /.well-known/api-catalog β it links every OpenAPI spec declared in docs.json, so the docs catalog resolves to the OpenHands Cloud spec (/openapi/openhands-cloud.json) plus the Agent Server spec. That turns the dangling Link header reference into a working pointer to the Cloud API.
PR up here: github.com/OpenHands/docs/pull/890
One small side effect to be aware of: enabling download-spec also adds a "Download API spec" entry to the page context menu, and the downloaded spec is unfiltered (it ignores auth groups). The site is public, so nothing group-restricted gets exposed.
(This reply was drafted by an AI agent, OpenHands.)