Write and edit documentation on a Fern site.
is the index: follow the
principles below, then read the
file that matches the
task before writing. Don't work from this page alone when a reference exists.
Scope: this skill governs Fern docs content only — MDX pages, navigation,
and related config, snippets, changelog entries, custom components,
and landing pages. It does
not govern repo governance or tooling files that
happen to live in the same repo, such as
,
,
, and contributor guides. Never apply the principles below —
"one canonical home," "prefer editing over creating," consolidation — to those
files. Leave them alone unless the user explicitly asks you to edit them.
Fern's configuration evolves. Look things up rather than guessing.
-
-
-
MCP server — connect your agent to Fern's live docs and query it for any
syntax or behavior you're unsure of. The endpoint works with any MCP client;
for Claude Code:
bash
claude mcp add --transport http fern https://buildwithfern.com/learn/_mcp/server
Internal links are URL paths derived from
this repo's own and page
frontmatter — not file paths on disk or relative paths. Nearly every edit
touches a link, so get this right every time.
Example — page
under section "AI features", in product
, base path
:
Section slugs frequently differ from folder names, so never guess the URL from
the directory layout. If you can't resolve a path from
and the page's
frontmatter, say so rather than guessing.
Anchors append
, and only resolve for real
/
Markdown
headings — not for JSX title props like
,
,
, or
.
Not internal links (leave as-is): external
URLs, image paths
(
), snippet includes (
<Markdown src="/snippets/..." />
), and
same-page anchors (
).
When you document new functionality — a new page, or new behavior on an existing
one — related pages usually need a pointer to it, or the new content is hard to
find from where readers actually start. This applies to small edits too, not
just new pages.
-
One canonical home. The full explanation lives on one page; every other
page that touches the topic links to it instead of restating it. If you're
copying more than a sentence or two onto another page, it belongs on the
canonical page.
-
Find the targets. Grep the docs for the feature name and one or two related
keywords, then read each hit and decide whether a pointer is warranted:
bash
grep -rln "<feature>\|<keyword>" fern --include="*.mdx"
Common targets: pages for behavior the feature affects, adjacent feature pages,
and overview or landing pages.
-
Use the lightest form that works: an inline link inside an existing
sentence, then a
for a secondary aside, then a new
section, then
a new page. Inline links and Notes add no maintenance surface; new pages and
sections do.
-
Phrase inline links naturally — never "See [page]." Put the link on a noun
phrase already in the sentence, not a tacked-on pointer sentence. Don't wrap a
lone link in a
whose only job is to host it.
- Good: "Each request counts against your rate limit, which resets hourly."
- Bad: "Requests are rate limited. See the rate limits reference for details."
- Bad: a standalone containing only "For more, see rate limits."
-
Frame by function, not plumbing. Contrast what each feature does ("X
decides A; Y decides B"), not that they share a config key or sit in the same
directory. If the only thing linking two features is the same YAML key, it's
not worth a cross-reference.