Observed since 20 Oct, 22:00 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
Single-source-of-truth docs catalog + .md route handlers + llms.txt + agent-prompt scaffolding. One library, every product gets first-class agent integration.
Single-source-of-truth docs catalog. One library, every product gets first-class agent integration without copy-paste.
One DocsCatalog object feeds:
app/docs/<slug>/page.tsx).md route handler (drop in markdownRoute(catalog))/llms.txt discovery index (buildLlmsTxt)/llms-full.txt flat dump (buildLlmsFullTxt)Drift between surfaces becomes physically impossible.
bun add @021.is/agent-docs
Define one catalog per page in lib/docs/<slug>.ts:
import { type DocsCatalog, code, h2, p } from "@021.is/agent-docs";
export const installCatalog: DocsCatalog = {
slug: "install",
title: "Install the SDK",
description: "One package, two minutes to working sign-in.",
body: [
h2("Install"),
p("Use your package manager."),
code("bash", "bun add @021.is/my-sdk"),
],
};
Drop the matching .md route handler:
// app/docs/install.md/route.ts
import { markdownRoute } from "@021.is/agent-docs/next";
import { installCatalog } from "@/lib/docs/install";
export const dynamic = "force-static";
export const GET = markdownRoute(installCatalog);
Wire llms.txt:
// app/llms.txt/route.ts
import { llmsTxtRoute } from "@021.is/agent-docs/next";
import { installCatalog } from "@/lib/docs/install";
export const dynamic = "force-static";
export const GET = llmsTxtRoute({
name: "my-app",
tagline: "Your product tagline.",
siteUrl: "https://example.com",
catalogs: [installCatalog],
openapi: { yamlUrl: "https://example.com/openapi.yaml" },
});
That is the whole integration. Every catalog you ship is automatically rendered on /docs/<slug>.md, listed on /llms.txt, and concatenated into /llms-full.txt.
Stripe, Auth0, and Clerk all ship agent-consumable docs. So do we. Reuse the library and your product is on day one.
MIT.
Download counts and popularity will appear here as the collector receives them.
This describes our collected data; it is not a security assessment.
Observed since 20 Oct, 22:00 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:16b4e305968dc88d854d8098f9877de3bd982ce2ae1e3b764adae06d34c928d5