add-adapter
Add a vendor-official or community adapter to the Chat SDK catalog and docs — adapters.json registry, chat/adapters catalog entry, the docs MDX page,…
npx skills add https://github.com/vercel/chat --skill add-adapterAdd a catalog adapter (vendor-official or community)
Use this to list a third-party adapter in the Chat SDK catalog and docs. It is not for building a first-party packages/adapter-* package.
Required: load the technical-writer skill (../technical-writer/SKILL.md) before writing any prose: the docs page, frontmatter tagline and description, the changeset, commit messages, and the PR description. Follow its editorial standards alongside the sourcing rules below.
Gather the source — never invent details
Ask the user for:
- Their adapter's GitHub repository URL.
- Their docs or README.
Read both. Everything you write into the catalog and docs must come directly from those sources or from the user. Do not assume or guess any information:
packageName— read it from the repo'spackage.json, verbatim.- Factory export (e.g.
createFooAdapter) — read it from the package's exports/source. Do not guess it from the display name. type(platformorstate), env vars, and the feature matrix — base these on what the code and README actually document.- Install and usage snippets — take them from the README; do not write example code the adapter may not support.
If the repo or README does not make something clear, stop and ask the user rather than filling it in. When in doubt, ask.
Choose the slug (kebab-case) and confirm it is not already taken: ls apps/docs/content/adapters/*/.
Pick the tier
- community — listed in the docs. A
CommunityAdapterentry in@chat-adapter/catalog(listing metadata and capabilities only), no scaffold spec. - vendor-official — a maintained/blessed adapter. A full
CatalogAdapterentry with setup metadata (factory export, peer deps, env vars), a matchingcreate-chat-sdkscaffold-spec entry, and a changeset. Frontmatter addsvendorOfficial: trueandauthor.
Files to change
<tier> is vendor-official or community.
apps/docs/content/adapters/<tier>/<slug>.mdx: the docs page. Start from assets/adapter.mdx for a platform adapter or assets/adapter-state.mdx for a state adapter, and follow the section order and names in references/page-layout.md. The filename basename must equal theslugfrontmatter field, and the page must render<FeatureSupport />.apps/docs/content/adapters/<tier>/meta.json— add"<slug>"to thepagesarray.packages/catalog/src/adapters/<tier>/<slug>.ts— the catalog entry:name,slug,type,group,description,packageName,author,readme(the GitHub tree URL of the adapter's source folder, pinned to a commit or tag; the docs page fetches the README from it and links to it as "View source"), andfeatures(the capability matrix the docs page renders). Copy a neighbor in the same folder. Then register it inpackages/catalog/src/adapters/index.ts:COMMUNITY_ADAPTERSfor community,ADAPTERSfor vendor-official. Seepackages/catalog/AGENTS.md.
Vendor-official also:
- Setup fields in the catalog entry —
factoryExport,peerDeps, optionalimportPath, andenv. Reuse theenv/secretEnv/urlEnvhelpers frompackages/catalog/src/env.ts; useenv: { notes: "…" }when there are no env vars. packages/create-chat-sdk/src/catalog/scaffold-spec.ts— add a matching"<slug>": { invocation: … }entry, modeled on a similar adapter. This is a required registration step, not a behavior change: the object issatisfies Record<AdapterSlug, …>, so every catalog slug must have one orcreate-chat-sdkfails to type-check..changeset/<slug>-adapter.md—"@chat-adapter/catalog": patch+"create-chat-sdk": patch, one line describing the addition. Community listings ship in the published catalog too, so add a"@chat-adapter/catalog": patchchangeset for them as well.
Invariants the tests enforce
- Docs ↔ catalog parity. Every adapter MDX page has a catalog entry in the matching
group, and every catalog entry has a page. Vendor-official entries go inADAPTERS; community entries go inCOMMUNITY_ADAPTERS. This is why community adapters skip steps 4 and 5. - peerDeps ↔ PackageInstall. The catalog entry's
peerDeps(sorted) must exactly equal the extra packages in the MDX<PackageInstall package="…" />, after removing the adapter's ownpackageName,chat, and any@chat-adapter/state-*. Easiest:peerDeps: [], install only<packageName> chat(plus a state adapter) inPackageInstall, and keep any other imports in fenced code blocks. - Fields match.
packageName,type, andauthor(when set in frontmatter) must match between the MDX frontmatter and the catalog entry. - Capabilities live in the catalog. Frontmatter must not declare
features;<FeatureSupport />reads them from the catalog entry. Only keys fromPLATFORM_FEATURE_CATEGORIESorSTATE_FEATURE_CATEGORIES(matching the adaptertype) are allowed. - Required frontmatter:
title,description,packageName,slug,tagline,type(platform|state),mdxBody: true,community: true(plusvendorOfficial: trueandauthorfor vendor-official).
Validate
pnpm --filter @chat-adapter/catalog build # regenerate the catalog the tests import
pnpm --filter @chat-adapter/catalog test
pnpm --filter @chat-adapter/integration-tests test
pnpm --filter create-chat-sdk typecheck # vendor-official only
pnpm check && pnpm konsistent
Resources
- Human guide (vendor-official):
apps/docs/content/docs/contributing/vendor-official.mdx - Human guide (community listing):
apps/docs/content/docs/contributing/publishing.mdx - MDX templates: assets/adapter.mdx (platform) and assets/adapter-state.mdx (state)
- Page layout and section names: references/page-layout.md
- Writing standards (required): technical-writer skill
- Catalog conventions:
packages/catalog/AGENTS.md - Examples to copy:
apps/docs/content/adapters/vendor-official/andapps/docs/content/adapters/community/