quarto-authoring — Claude Code skill: Quarto documents
A skill for Quarto work: .qmd files, _quarto.yml, cross-references, callouts, citations, Mermaid diagrams and R Markdown migration.
npx skills add posit-dev/skills --skill quarto-authoring -a claude-codeWhat quarto-authoring does
The skill activates when a project actually uses Quarto: .qmd files, a _quarto.yml config, reports, websites, books or presentations. It also covers moving an existing project over from R Markdown, bookdown, xaringan, distill, blogdown or Jupyter. Plain R Markdown questions without a Quarto mention stay outside its scope.
Inside is a main file with the basic document structure plus reference files: cross-references, code cell options, figures, tables, citations, callouts, diagrams, layout, shortcodes, YAML front matter, extensions, compute engines. A separate set covers conversion, and those are meant to be read only during an explicit migration. The skill is based on Quarto CLI v1.9.36.
Some details bite. #| cache: true only works in R cells on the knitr engine; other languages ignore it silently, so you need execute: cache: true in YAML, and Python/Jupyter additionally needs jupyter-cache. Cell options use dashes (fig-cap), not dots, and label prefixes are mandatory: fig-, tbl-, sec-, eq-. Worth checking any snippets copied over from R Markdown.
What it helps with
- build an HTML or PDF report from a
.qmdwith a table of contents and folded code - wire up cross-references to figures, tables and sections
- add note, warning and tip callouts to a document
- hook up a bibliography and format citations with a CSL style
- port a bookdown or xaringan project to Quarto
Example prompts for the agent
- Create a Quarto report with a title, author and html format with a table of contents and folded code
- Add a cross-reference to
fig-plotin this.qmdand give it a caption - Convert this project from R Markdown to Quarto
How to install quarto-authoring
1Skills CLI (Vercel)
npx skills add posit-dev/skills --skill quarto-authoring -a claude-code2Manually: put the files in place
~/.claude/skills/quarto-authoring/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/quarto-authoring/
1Skills CLI (Vercel)
npx skills add posit-dev/skills --skill quarto-authoring -a codex2Manually: put the files in place
.agents/skills/quarto-authoring/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add posit-dev/skills --skill quarto-authoring -a cursor2Manually: put the files in place
.cursor/skills/quarto-authoring/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install posit-dev/skills quarto-authoring2Manually: put the files in place
.github/skills/quarto-authoring/SKILL.md1Skills CLI (Vercel)
npx skills add posit-dev/skills --skill quarto-authoring -a gemini-cli2Platform CLI
gemini skills install https://github.com/posit-dev/skills --path quarto/quarto-authoringManually: put the files in place
.devin/skills/quarto-authoring/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add posit-dev/skills --skill quarto-authoring -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about quarto-authoring
How do I install quarto-authoring in Claude?
Run npx skills add posit-dev/skills --skill quarto-authoring -a claude-code. The skill file then lands at ~/.claude/skills/quarto-authoring/SKILL.md.
What does quarto-authoring do?
It helps you write and configure Quarto documents: .qmd structure, YAML front matter, code cell options, cross-references, tables, citations, callouts and diagrams. It also walks through migration from R Markdown and related formats.
Does it work on plain R Markdown?
No. It only activates when Quarto or a migration to Quarto is mentioned explicitly, so R Markdown questions stay without it.
Source text
SKILL.md · MIT
---
name: quarto-authoring
description: Use when the user is explicitly working with Quarto, .qmd files, _quarto.yml, Quarto projects, or Quarto features such as callouts, cross-references, citations, Mermaid diagrams, extensions, websites, books, presentations, and reports. Also use for explicit migration from or comparison with R Markdown, bookdown, blogdown, xaringan, distill, or Jupyter notebooks to Quarto. Do not use for general R Markdown or related-format questions unless Quarto or migration to Quarto is explicitly mentioned.
metadata:
author: Mickaël Canouil (@mcanouil)
version: "1.4"
license: MIT
---
# Quarto Authoring
> This skill is based on Quarto CLI v1.9.36 (2026-03-24).
## When to Use What
Task: Write a new Quarto document
Use: Follow "QMD Essentials" below, then see specific reference files
Task: Add cross-references
Use: [references/cross-references.md](references/cross-references.md)
Task: Configure code cells
Use: [references/code-cells.md](references/code-cells.md)
Task: Add figures with captions
Use: [references/figures.md](references/figures.md)
Task: Create tables
Use: [references/tables.md](references/tables.md)
Task: Add citations and bibliography
Use: [references/citations.md](references/citations.md)
Task: Add callout blocks
Use: [references/callouts.md](references/callouts.md)
Task: Add diagrams (Mermaid, Graphviz)
Use: [references/diagrams.md](references/diagrams.md)
Task: Control page layout
Use: [references/layout.md](references/layout.md)
Task: Use shortcodes
Use: [references/shortcodes.md](references/shortcodes.md)
Task: Add conditional content
Use: [references/conditional-content.md](references/conditional-content.md)
Task: Use divs and spans
Use: [references/divs-and-spans.md](references/divs-and-spans.md)
Task: Configure YAML front matter
Use: [references/yaml-front-matter.md](references/yaml-front-matter.md)
Task: Find and use extensions
Use: [references/extensions.md](references/extensions.md)
Task: Apply markdown linting rules
Use: [references/markdown-linting.md](references/markdown-linting.md)
Task: Choose or configure a compute engine (knitr, jupyter, julia)
Use: [references/engines.md](references/engines.md)
### Migration (only when converting an existing project)
Do NOT read these references when writing new Quarto documents.
Only read the one matching the source format when the user explicitly asks to convert or migrate an existing project.
- R Markdown (.Rmd) to Quarto: [references/conversion-rmarkdown.md](references/conversion-rmarkdown.md)
- bookdown project: [references/conversion-bookdown.md](references/conversion-bookdown.md)
- xaringan slides: [references/conversion-xaringan.md](references/conversion-xaringan.md)
- distill article: [references/conversion-distill.md](references/conversion-distill.md)
- blogdown site: [references/conversion-blogdown.md](references/conversion-blogdown.md)
- Jupyter notebook (.ipynb) to/from Quarto: [references/conversion-jupyter.md](references/conversion-jupyter.md)
## QMD Essentials
### Basic Document Structure
```markdown
---
title: "Document Title"
author: "Author Name"
date: today
format: html
---
Content goes here.
```
A Quarto document consists of two main parts:
1. **YAML Front Matter**: Metadata and configuration at the top, enclosed by `---`.
2. **Markdown Content**: Main body using standard markdown syntax.
### Divs and Spans
Divs use fenced syntax with three colons:
```markdown
::: {.class-name}
Content inside the div.
:::
```
Spans use bracketed syntax:
```markdown
This is [important text]{.highlight}.
```
Details: [references/divs-and-spans.md](references/divs-and-spans.md)
### Code Cell Options Syntax
A code cell starts with triple backticks and a language identifier between curly braces.
Code cells are code blocks that can be executed to produce output.
Quarto uses the language's comment symbol + `|` for cell options. Options use **dashes, not dots** (e.g., `fig-cap` not `fig.cap`).
- R, Python, Julia: `#|`
- Mermaid: `%%|`
- Graphviz/DOT: `//|`
````markdown
```{language}
#| label: fig-example
#| echo: false
#| fig-cap: "A scatter plot example."
# code that produces a figure
```
````
Set document-level defaults in YAML front matter:
```yaml
execute:
echo: false
warning: false
```
**Caching — critical engine difference:** Only suggest `#| cache: true` for R code cells (knitr engine).
Never suggest it for other language cells — it does not work and will be silently ignored.
The only correct approach is `execute: cache: true` in the top-level YAML front matter when using engines other than `knitr`.
Python/Jupyter requires `jupyter-cache` (`pip install jupyter-cache`):
```yaml
execute:
cache: true
```
Details: [references/code-cells.md](references/code-cells.md)
### Cross-References
Labels must start with a type prefix. Reference with `@`:
- Figure: `fig-` prefix, e.g., `#| label: fig-plot` → `@fig-plot`
- Table: `tbl-` prefix, e.g., `#| label: tbl-data` → `@tbl-data`
- Section: `sec-` prefix, e.g., `{#sec-intro}` → `@sec-intro`
- Equation: `eq-` prefix, e.g., `{#eq-model}` → `@eq-model`
````markdown
```{language}
#| label: fig-plot
#| fig-cap: "A caption for the plot."
# code that produces a figure
```
See @fig-plot for the results.
````
Details: [references/cross-references.md](references/cross-references.md)
### Callout Blocks
Five types: `note`, `warning`, `important`, `tip`, `caution`.
```markdown
::: {.callout-note}
This is a note callout.
:::
::: {.callout-warning}
## Custom Title
This is a warning with a custom title.
:::
```
Details: [references/callouts.md](references/callouts.md)
### Figures
```markdown
{#fig-name fig-alt="Alt text"}
```
Subfigures:
```markdown
::: {#fig-group layout-ncol=2}
{#fig-sub1}
{#fig-sub2}
Main caption for the group.
:::
```
Details: [references/figures.md](references/figures.md)
### Tables
```markdown
::: {#tbl-example}
| Column 1 | Column 2 |
| -------- | -------- |
| Data 1 | Data 2 |
Table caption.
:::
```
Details: [references/tables.md](references/tables.md)
### Citations
```markdown
According to @smith2020, the results show...
Multiple citations [@smith2020; @jones2021].
```
Configure in YAML:
```yaml
bibliography: references.bib
csl: apa.csl
```
Details: [references/citations.md](references/citations.md)
## Common Workflows
### Creating an HTML Document
```yaml
title: "My Report"
author: "Your Name"
date: today
format:
html:
toc: true
code-fold: true
theme: cosmo
```
### Creating a PDF Document
```yaml
title: "My Report"
format:
pdf:
documentclass: article
papersize: a4
```
### Creating a RevealJS Presentation
```markdown
---
title: "My Presentation"
format: revealjs
---
## First Slide
Content here.
## Second Slide
More content.
```
### Setting Up a Quarto Project
Create `_quarto.yml` in the project root:
```yaml
project:
type: website
website:
title: "My Site"
navbar:
left:
- href: index.qmd
text: Home
- href: about.qmd
text: About
format:
html:
theme: cosmo
```
## Resources
- [Quarto Documentation](https://quarto.org/docs/)
- [Quarto Guide](https://quarto.org/docs/guide/)
- [Quarto Extensions](https://quarto.org/docs/extensions/)
- [Community Extensions List](https://m.canouil.dev/quarto-extensions/)
© Mickaël Canouil (@mcanouil) · MIT · posit-dev/skills