Authoring Fern MDX documentation pages for the Opik docs site, plus release-note and changelog routing. Use when writing or updating pages under apps/opik-documentation/documentation/fern/, drafting PR descriptions, or picking the right changelog surface.
72
88%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
The Opik docs site is built with Fern from MDX sources under apps/opik-documentation/documentation/fern/. Two content surfaces coexist:
fern/docs/ — v1 (the established surface, source of style truth)fern/docs-v2/ — latest (where new pages go)New pages should land in docs-v2/. v1 is the reference for writing style and component usage because it is far richer.
apps/opik-documentation/documentation/fern/docs-v2/<section>/<page-name>.mdx.fern/versions/latest.yml under the right section: block.fern/versions/v1.yml if the page must also ship in the v1 build (rare).fern/docs.yml when adding a page — that file is the global site config (tabs, redirects), not per-version routing.Every page uses YAML frontmatter. title and headline are required; the og:* fields are strongly recommended for SEO/social sharing and are present on every page. Do not repeat title as an inline # H1 in the body — Fern renders it from frontmatter.
---
title: Page Title
headline: Page Title | Opik Documentation
og:title: Page Title — Opik
og:description: One-line summary used for social sharing and previews
og:site_name: Opik Documentation
---subtitle: ... is an optional field used on concept/overview pages to add a secondary line. Landing/overview pages may also set layout: overview.
Pull examples from v1 pages when unsure — fern/docs/tracing/log_traces.mdx, fern/docs/tracing/concepts.mdx, and fern/docs/quickstart.mdx are good anchors.
## heading. No inline H1.## for top-level sections, ### for subsections. Never introduce an inline # — that collides with the frontmatter title.<CardGroup> of links.All examples below are taken from real pages in the repo.
<Tabs> / <Tab> — SDK, language, or environment choiceUse when the whole section varies (not just a code block). Attach language="..." so Fern groups tabs across the site by the reader's last choice.
<Tabs>
<Tab value="Python SDK" title="Python SDK" language="python">
```bash
pip install opik
```
</Tab>
<Tab value="Typescript SDK" title="Typescript SDK" language="typescript">
```bash
npm install opik
```
</Tab>
<Tab value="OpenTelemetry" title="OpenTelemetry">
...
</Tab>
</Tabs><Steps> / <Step> — walkthroughsFor quickstarts, installs, and any sequential procedure. title on each <Step> is optional.
<Steps>
<Step title="Install the Opik skill">
```bash
npx skills add comet-ml/opik-skills
```
</Step>
<Step title="Run the integration">
Once the skill is installed, you can add tracing using the following prompt:
```
Instrument my agent with Opik using the /instrument command.
```
</Step>
</Steps><CodeBlocks> — multi-language code, identical surrounding prosePrefer this over <Tabs> when only the code varies.
<CodeBlocks>
```python title="Python"
import opik
opik.configure()import Opik from "opik";
const client = new Opik();<CardGroup> / <Card> — landing and integration grids<CardGroup cols={3}>
<Card title="LangChain" href="/integrations/langchain" icon={<img src="/img/tracing/langchain.svg" />} iconPosition="left"/>
<Card title="LlamaIndex" href="/integrations/llama_index" icon={<img src="/img/tracing/llamaindex.svg" />} iconPosition="left"/>
<Card title="Anthropic" href="/integrations/anthropic" icon={<img src="/img/tracing/anthropic.svg" />} iconPosition="left"/>
</CardGroup><AccordionGroup> / <Accordion> — FAQs and expandable advanced topics<AccordionGroup>
<Accordion title="Why use the optimizer?">
The Agent Optimizer provides a unified interface...
</Accordion>
</AccordionGroup><Frame> — image wrapper (always wrap images)<Frame>
<img src="/img/tracing/introduction.png" />
</Frame><Tip>, <Note>, <Warning>, <Info>, <Callout>Pick by intent, not aesthetics:
<Tip> — cross-references, shortcuts, "If you're just getting started, see..."<Note> — clarifications and recommendations that aren't risky<Warning> — breaking changes, footguns, prerequisites that will break things<Info> — informational, interchangeable with <Note> in practice<Callout> — catch-all when none of the above fits<Tip>
If you are just getting started with Opik, we recommend first checking out the [Quickstart](/quickstart) guide.
</Tip>
<Warning>
Note that the authorization header value does not include the `Bearer ` prefix.
</Warning><CodeBlocks> for multi-language blocks; use <Tabs> when surrounding prose also varies.pip install opik, npm install opik).<API_KEY>, <TOKEN>, <your-api-key>. Never commit real keys.apps/opik-documentation/documentation/fern/img/<section>/..../img/<section>/<file>.png (path is rooted at the docs base).static/img/ — that folder is legacy and only kept for external integrations.<Frame>. Captions are not a repo convention.Absolute, slug-based paths only. No relative paths (../foo).
[Python SDK](/reference/python-sdk/overview)
[Log traces](/tracing/log_traces)
[Integrations overview](/integrations/overview)In-page anchors use the heading slug: [Concepts](#concepts).
latest.ymlAdd a page entry under the correct section: (keep the YAML at 2-space indent):
- page: Page Title
path: ../docs-v2/section/page-name.mdx
slug: page-nameIf the page also needs to ship in v1, mirror the entry in fern/versions/v1.yml. Leave fern/docs.yml alone.
getting-started.mdx, log-traces.mdx.docs.yml.cd apps/opik-documentation/documentation
npm install # first time only
npm run dev # live-reload previewOpen the rendered page and confirm:
<Tabs> tags visible).Broken link warnings in the terminal).Pick the changelog target by scope — do not default everything to the root CHANGELOG.md.
CHANGELOG.md (repo root) — self-hosted deployment changelog. Breaking, critical, or security-impacting changes only.apps/opik-documentation/documentation/fern/docs/changelog/*.mdx — general product release notes shown at /docs/opik/changelog. One dated .mdx per entry.apps/opik-documentation/documentation/fern/docs/agent_optimization/getting_started/changelog.mdx — Agent Optimizer version updates (e.g. sdks/opik_optimizer releases like 3.1.0).changelog.xml files are migration manifests, not user-facing release notes. Do not put prose there.fern/docs.yml before editing.### [VERSION] - [DATE]
#### New Features
- **Feature Name**: Brief description
#### Improvements
- **Improvement**: What changed and why
#### Bug Fixes
- **Fix**: What was broken (#issue)
#### Breaking Changes
- **Change**: What breaks, migration stepsWhen documenting a new feature, cover:
Keep it user-facing: avoid implementation detail unless it affects how someone uses the feature.
## Summary
- What this PR does (bullet points)
## Test Plan
- How to verify it works
## Related Issues
- Resolves #123readme_CN.md, readme_ES.md, readme_FR.md, readme_DE.md are AI machine-translated from the English README.md.
fern/docs/cookbook/*.mdx by hand. Those files are regenerated from docs/cookbook/*.ipynb by update_cookbooks.sh.fern/img/. static/img/ is legacy-only and cannot be deleted because of external integrations.# H1 inside the body — the frontmatter title already provides it.apps/opik-documentation/documentation/fern/versions/latest.yml — routing for the latest version (edit when adding pages).apps/opik-documentation/documentation/fern/versions/v1.yml — routing for v1 (edit only if the page ships in v1 too).apps/opik-documentation/documentation/fern/docs.yml — global site config (tabs, redirects). Treat as read-only for page adds.apps/opik-documentation/documentation/fern/docs-v2/ — target directory for new pages.apps/opik-documentation/documentation/fern/img/ — image storage.apps/opik-documentation/documentation/update_cookbooks.sh — regenerates cookbook MDX from notebooks.apps/opik-documentation/AGENTS.md — docs-module contribution rules..github/release-drafter.yml — release notes template.aae4650
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.