flags / apps
AGENTS.md628 starsChanged 34 days agoMITView on GitHub
This app uses the packaged Geistdocs architecture. The @vercel/geistdocs package owns shared runtime behavior; this app owns local content, configuration, adapters, and site-specific routes. Use these instructions when an AI coding agent edits this project.
- Reads credentials
Where files are headingNew AGENTS.md files have more rules about keeping secrets out of the code, and fewer about code style.
Of the AGENTS.md files we read, the 31,774 first seen in the last six months, against the older ones: the kind of rule that gained most share, and the kind that lost most. About files like this in general, not this one, and an estimate, since a kind is a pattern in the words.
In this repository6 other files it gives its agents.
- AGENTS.mdAGENTS.md
- apps/playground/AGENTS.mdAGENTS.md
- apps/playground/CLAUDE.mdCLAUDE.md
- packages/vercel-flags-core/CLAUDE.mdCLAUDE.md
- flags-sdkSkill
- vercel-flagsSkill
The file
Show its rules and text
We split this AGENTS.md into the rules it gives an agent
38 rules. About 1 is common, 3 are distinctive, and 34 are very specific to this project.
≈1
Common · estimate
Many files like this have a rule of this kind.
≈3
Distinctive · estimate
This author's own choices. Worth a look.
34
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- could be automatic: a setting could enforce it
- Distinctive: line 5
Use these instructions when an AI coding agent edits this project.
- Very specific: line 12
Do not copy package internals into the app to make a customization.
- Very specific: line 13
Do not deep import from @vercel/geistdocs/dist or edit files in node_modules/@vercel/geistdocs.
- Very specific: line 14
Do not edit generated directories such as .source/, .next/, node_modules/, or build output.
- Very specific: line 18
When package API behavior is unclear, read the installed package docs in node_modules/@vercel/geistdocs/docs before guessing.
- Very specific: line 19
Start with node_modules/@vercel/geistdocs/docs/agents.md and node_modules/@vercel/geistdocs/docs/sitemap.md to identify the relevant …
- Very specific: line 20
Use node_modules/@vercel/geistdocs/docs/pages/*.md for task-specific guidance and node_modules/@vercel/geistdocs/docs/llms.txt only when …
- Very specific: line 45
Put docs in content/docs unless the project has added another source in lib/geistdocs/source.ts.
- Very specific: line 46
Add each new page to content/docs/meta.json so it appears in the sidebar.
- Very specific: line 47
Use MDX frontmatter with at least title and description for documentation pages.
- Distinctive: line 48
Keep slugs stable unless the task explicitly includes redirects or link updates.
- Very specific: line 49
When adding translated content, follow the existing locale suffix pattern, such as page.cn.mdx.
- Very specific: line 50
Use CopyPrompt when a page should give readers a prompt they can copy into a coding agent.
- Very specific: line 54
Keep App Router route files as thin adapters around package helpers such as createDocsPage, createChatRoute, createLlmsRoute, and …
- Very specific: line 55
Keep cacheComponents: true and partialPrefetching: true in next.config.ts.
- Very specific: line 56
Read [lang] from next/root-params in Server Components (via lib/geistdocs/root-params.ts).
- Very specific: line 57
Use prefetch={true} for app-owned links to fully static documentation pages so navigation does not stop at the generic route shell.
- Very specific: line 58
Keep export const config in proxy.ts as a static object.
- Very specific: line 59
Use proxy matcher exclusions that only match /api and /api/..., such as api(?:/|$).
- Very specific: line 62
When adding custom proxy behavior, prefer before, after, and markdownRoutes options on createProxy instead of replacing the proxy.
- Very specific: line 63
Use explicit markdownRoutes for root-mounted docs or any site where homepage/app routes coexist with docs routes.
- Very specific: line 64
Keep source URLs, navigation links, getPageUrl, and markdownRoutes app-local when config.basePath is set.
- Very specific: line 68
Leave GEISTDOCS_CHAT_PROXY_URL unset and ai.eveAgent unconfigured to use the default AI Gateway path.
- Very specific: line 71
If the app uses ai or @ai-sdk/react for product code outside Geistdocs, migrate that app code separately or let the package manager install …
- Very specific: line 73
Do not add Vertex credentials to a Geistdocs site.
- Very specific: line 74
Use GEISTDOCS_CHAT_PROXY_TOKEN only for a custom proxy that requires bearer authentication.
- Very specific: line 75
Keep app/api/chat/route.ts as a thin adapter around createChatRoute.
- Very specific: line 79
When migrating from Fumadocs or a custom Geist docs site, inventory source.config.ts, route files, middleware.ts or proxy.ts, …
- Very specific: line 81
Import source-config helpers from @vercel/geistdocs/source-config in source.config.ts.
- Very specific: line 84
Add Tailwind CSS v4 @source entries for @vercel/geistdocs and related runtime dependencies when migrating styles.
- Common: line 85
Add local fallbacks for production-only environment variables so migration builds do not require production secrets.
- Very specific: line 89
Use pnpm exec geistdocs update to update package-based Geistdocs projects.
- Distinctive: line 95
Run commands from the repository root unless noted:
- Very specific: line 99
Start the built app: pnpm start -F docs
- Very specific: line 102
Run translations if configured: pnpm translate -F docs
- Very specific: line 106
Run pnpm build -F docs after changing routes, config, source setup, MDX components, or package versions.
- Very specific: line 107
Run pnpm dev -F docs and open the changed pages when visual layout, navigation, or MDX rendering changes.
- Very specific: line 108
Check both /docs and AI-readable routes such as /agents.md, /.well-known/mcp.json, /llms.txt, or a page-level .md URL when changing content …
≈ “Common” is an estimate: at least 1 in 5 of the 40,246 AGENTS.md files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Geistdocs agent instructions
This app uses the packaged Geistdocs architecture. The @vercel/geistdocs package owns shared runtime behavior; this app owns local content, configuration, adapters, and site-specific routes.
Use these instructions when an AI coding agent edits this project.
Architecture
- Runtime features come from
@vercel/geistdocs, including the docs page renderer, layout helpers, MDX components, search, Ask AI, markdown routes, proxy helpers, and source helpers. @vercel/geistdocsowns the Ask AI client, server route behavior, and AI SDK v6 runtime dependencies. Do not fork package internals to fit an older app-levelaiversion.- Local files are user-owned adapters. They should stay thin and call public package exports from
@vercel/geistdocs/*. - Do not copy package internals into the app to make a customization. Prefer configuring an adapter file or upgrading
@vercel/geistdocs. - Do not deep import from
@vercel/geistdocs/distor edit files innode_modules/@vercel/geistdocs. - Do not edit generated directories such as
.source/,.next/,node_modules/, or build output.
Package Docs For Agents
- When package API behavior is unclear, read the installed package docs in
node_modules/@vercel/geistdocs/docsbefore guessing. - Start with
node_modules/@vercel/geistdocs/docs/agents.mdandnode_modules/@vercel/geistdocs/docs/sitemap.mdto identify the relevant focused page. - Use
node_modules/@vercel/geistdocs/docs/pages/*.mdfor task-specific guidance andnode_modules/@vercel/geistdocs/docs/llms.txtonly when you need broad package context. - These package docs are read-only generated artifacts. Do not edit files under
node_modules/@vercel/geistdocs; change local adapter files or update the package instead.
Common edit targets
| Task | Edit |
Configure site title, logo, nav, GitHub links, AI prompt, suggestions, translations, basePath, or siteId | geistdocs.tsx |
| Add or update documentation pages | content/docs/**/*.mdx |
| Control sidebar order, groups, and folder labels | content/docs/meta.json |
| Give a page a shorter navigation label | Set navTitle in the page's frontmatter |
| Override MDX components | components/geistdocs/mdx-components.tsx |
| Wrap the site provider, analytics, or global client behavior | components/geistdocs/provider.tsx |
| Customize the docs layout shell | components/geistdocs/docs-layout.tsx |
| Configure the Fumadocs source adapter or versioned docs | lib/geistdocs/source.ts |
| Configure Fumadocs collections and source-safe MDX processing | source.config.ts |
| Configure the docs page renderer | app/[lang]/docs/[[...slug]]/page.tsx |
| Configure AI-readable markdown output | app/[lang]/agents.md/route.ts, app/[lang]/.well-known/mcp.json/route.ts, app/[lang]/llms.txt/route.ts, app/[lang]/llms.mdx/[[...slug]]/route.ts, app/[lang]/sitemap.md/route.ts |
| Configure chat or search APIs | app/api/chat/route.ts, app/api/search/route.ts |
| Add request handling before or after Geistdocs routing | proxy.ts |
| Edit the flag-driven home page | app/[lang]/home/[code]/** |
| Edit shared styles | app/global.css, app/styles/geistdocs.css |
Content guidelines
- Put docs in
content/docsunless the project has added another source inlib/geistdocs/source.ts. - Add each new page to
content/docs/meta.jsonso it appears in the sidebar. - Use MDX frontmatter with at least
titleanddescriptionfor documentation pages. SetnavTitleonly when the navigation label should differ from the page heading. - Keep slugs stable unless the task explicitly includes redirects or link updates.
- When adding translated content, follow the existing locale suffix pattern, such as
page.cn.mdx. - Use
CopyPromptwhen a page should give readers a prompt they can copy into a coding agent.
Routing and proxy guidelines
- Keep App Router route files as thin adapters around package helpers such as
createDocsPage,createChatRoute,createLlmsRoute, andcreateProxy. - Keep
cacheComponents: trueandpartialPrefetching: trueinnext.config.ts. Do not exportdynamic,revalidate, orfetchCachefrom App Router pages or route handlers. - Read
[lang]fromnext/root-paramsin Server Components (vialib/geistdocs/root-params.ts). Keep route contextparamsin Route Handlers and Server Actions. - Use
prefetch={true}for app-owned links to fully static documentation pages so navigation does not stop at the generic route shell. - Keep
export const configinproxy.tsas a static object. Next.js must parse proxy matchers at build time. - Use proxy matcher exclusions that only match
/apiand/api/..., such asapi(?:/|$). Do not exclude broad prefixes likeapi, because that also excludes routes such as/api-reference. - Preserve markdown negotiation unless the task explicitly changes AI-readable output. Geistdocs serves
/agents.md,/llms.txt,/.well-known/mcp.json, and per-page Markdown for.md,.mdx,Accept: text/markdown, and AI-agent requests. - The homepage rewrite (
/to/[lang]/home/[code]) lives in acreateProxyafterhook so it never preempts markdown negotiation. - When adding custom proxy behavior, prefer
before,after, andmarkdownRoutesoptions oncreateProxyinstead of replacing the proxy. - Use explicit
markdownRoutesfor root-mounted docs or any site where homepage/app routes coexist with docs routes. - Keep source URLs, navigation links,
getPageUrl, andmarkdownRoutesapp-local whenconfig.basePathis set. Geistdocs derives public page-action and Markdown URLs separately.
Ask AI and Vertex proxy guidelines
- Leave
GEISTDOCS_CHAT_PROXY_URLunset andai.eveAgentunconfigured to use the default AI Gateway path. In that mode,app/api/chat/route.tscallscreateChatRoutewithout aproxyoption and uses the local docs search tool during the AI SDKstreamTextloop. - Set
ai.eveAgent: { url }ingeistdocs.tsxto answer Ask AI with a hosted eve framework agent instead. The URL flows through the config object; the route file needs no changes. Requests authenticate with a per-request Vercel OIDC bearer token by default; pass server-only headers through theeveAgentoption oncreateChatRoutefor custom auth. Never put auth material ingeistdocs.tsx. Configuring bothproxyand an eve agent throws at route creation. - Geistdocs Ask AI targets AI SDK v6:
aiv6 and@ai-sdk/reactv3. Keep those dependencies on the generated package versions unless a@vercel/geistdocsrelease changes them. - If the app uses
aior@ai-sdk/reactfor product code outside Geistdocs, migrate that app code separately or let the package manager install separate versions. Do not downgrade Geistdocs Ask AI to match unrelated app code. - Set
GEISTDOCS_CHAT_PROXY_URLonly when Ask AI should route through the central Vertex-backed proxy. The value must include the/vertexroute, such ashttps://<geistdocs-platform-deployment>/vertex. - Do not add Vertex credentials to a Geistdocs site. The central platform proxy forwards the Vercel OIDC token in
x-vercel-trusted-oidc-idp-token; the Vertex deployment should trust the platform Vercel project through Deployment Protection Trusted Sources. - Use
GEISTDOCS_CHAT_PROXY_TOKENonly for a custom proxy that requires bearer authentication. The default Geistdocs platform/vertexproxy does not require it. - Keep
app/api/chat/route.tsas a thin adapter aroundcreateChatRoute. Prefer configuringGEISTDOCS_CHAT_PROXY_URLandGEISTDOCS_CHAT_PROXY_TOKENover forking the package chat route.
Migration guidelines
- When migrating from Fumadocs or a custom Geist docs site, inventory
source.config.ts, route files,middleware.tsorproxy.ts,public/llms.txt, OG routes, Tailwind CSS setup, and required environment variables before editing. - Inventory direct app usage of
aiand@ai-sdk/react. Package-owned Ask AI uses AI SDK v6; migrate local AI SDK code separately from Geistdocs route adapters. - Import source-config helpers from
@vercel/geistdocs/source-configinsource.config.ts. Do not import runtime component entry points from source config. - Move existing
middleware.tsbehavior intocreateProxy({ before })orcreateProxy({ after })hooks. - Set
openGraph.imagesincreateDocsPageonly when the app includes the Geistdocs OG route, or override metadata to avoid broken/og/...URLs. - Add Tailwind CSS v4
@sourceentries for@vercel/geistdocsand related runtime dependencies when migrating styles. - Add local fallbacks for production-only environment variables so migration builds do not require production secrets.
Package updates
- Use
pnpm exec geistdocs updateto update package-based Geistdocs projects. geistdocs updateupdates the@vercel/geistdocsdependency. It does not overwrite local adapter files.- Review dependency changes and run the verification commands before committing an update.
Commands
Run commands from the repository root unless noted:
- Start development:
pnpm dev -F docs - Build for production:
pnpm build -F docs - Start the built app:
pnpm start -F docs - Regenerate Fumadocs output after dependency installation:
pnpm postinstall -F docs - Update Geistdocs:
pnpm -F docs exec geistdocs update - Run translations if configured:
pnpm translate -F docs
Verification
- Run
pnpm build -F docsafter changing routes, config, source setup, MDX components, or package versions. - Run
pnpm dev -F docsand open the changed pages when visual layout, navigation, or MDX rendering changes. - Check both
/docsand AI-readable routes such as/agents.md,/.well-known/mcp.json,/llms.txt, or a page-level.mdURL when changing content routing or proxy behavior. - Confirm no secrets were added to source files. Use
.env.localfor local values and keep it out of Git.
<!-- BEGIN:nextjs-agent-rules -->This is NOT the Next.js you know
This version has breaking changes — APIs, conventions, and file structure may all differ from your training data. Read the relevant guide in node_modules/next/dist/docs/ (resolved from this file's directory; in monorepos the next package may not be visible from the repo root) before writing any code. Heed deprecation notices.
This block is written and re-added by next dev — verify at node_modules/next/dist/server/lib/generate-agent-files.js. Removing it from a diff only re-creates the uncommitted change; committing it with your work keeps the tree clean.
<!-- END:nextjs-agent-rules -->Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

