
Great Docs
- 1 installs
- 264 repo stars
- Updated August 4, 2026
- posit-dev/great-docs
great-docs is a Claude Code skill for ai & agent building.
About
great-docs is a Claude Code skill for ai & agent building. It helps solo builders move faster with AI-assisted coding.
- great-docs
- AI & Agent Building
- AI-coding skill
Great Docs by the numbers
- 1 all-time installs (skills.sh)
- Ranked #14,102 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/posit-dev/great-docs --skill great-docsAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 1 |
|---|---|
| repo stars | ★ 264 |
| Last updated | August 4, 2026 |
| Repository | posit-dev/great-docs ↗ |
How do I helps with ai & agent building tasks during AI-assisted development.?
Helps with ai & agent building tasks during AI-assisted development.
Who is it for?
Best when you're working on ai & agent building and need structured help with great docs.
Skip if: Teams with no ai & agent building needs, or anyone wanting a generic chat assistant without this specific workflow.
When should I use this skill?
When you need to helps with ai & agent building tasks during AI-assisted development., or when great-docs is a claude code skill for ai & agent building.
What you get
Structured output aligned to great-docs: great-docs, AI & Agent Building.
Files
Great Docs
A docs generator for Python packages. Introspects your API, renders reference pages, and produces a Quarto-based static site with user guides, CLI docs, theming, and more.
Quick start
pip install great-docs
# Quarto must also be installed: https://quarto.org/docs/get-started/
cd my-package/ # directory with pyproject.toml
great-docs init # create great-docs.yml, discover API
great-docs build # full build -> great-docs/_site/
great-docs preview # local server on port 3000Skill directory structure
This skill ships with companion files for agent consumption:
skills/great-docs/
├── SKILL.md ← This file
├── references/
│ ├── config-reference.md ← All great-docs.yml options
│ ├── cli-reference.md ← CLI commands and arguments
│ └── common-errors.md ← Error patterns and fixes
├── scripts/
│ ├── setup-env.sh ← Environment bootstrap script
│ └── run-build.sh ← Build with validation
└── assets/
└── config-template.yaml ← Starter great-docs.ymlWhen to use what
| Need | Use |
|---|---|
| Start a new docs site | great-docs init |
| Full build from scratch | great-docs build |
| Rebuild after edits | great-docs build --no-refresh |
| Live preview | great-docs preview |
| See discoverable API | great-docs scan --verbose |
| Change docstring parser | parser: google in great-docs.yml |
| Add CLI reference | cli: {enabled: true, module: pkg.cli} |
| Add a gradient navbar | navbar_style: sky |
| Exclude internal symbols | exclude: [_InternalClass] |
| Add user guide pages | Create user_guide/05-topic.qmd |
| Add recipes | Create recipes/07-topic.qmd |
| Set up GitHub Pages CI | great-docs setup-github-pages |
| Use static analysis | dynamic: false (for tricky imports) |
| Generate agent skill file | skill: {enabled: true} |
Core concepts
Configuration (great-docs.yml)
Single YAML file at the project root controls everything. All keys are optional — sensible defaults are auto-detected from pyproject.toml and package structure.
Full config reference: See references/config-reference.md
Build pipeline
The build command runs 13 steps in order:
1. Prepare build directory (copy assets, JS, SCSS) 2. Copy user guide from user_guide/ 3. Copy project assets/ 4. Refresh API reference (introspect package) 5. Generate llms.txt and llms-full.txt 6. Generate skill.md (if enabled) 7. Generate source links JSON 8. Generate changelog (from GitHub Releases) 9. Generate CLI reference (if enabled) 10. Process user guide (frontmatter, sidebar) 11. Process custom sections 12. Render API reference (.qmd files) 13. Run quarto render -> _site/ HTML output
The great-docs/ directory is ephemeral — regenerated on every build. Never edit files inside it directly.
Two rendering modes
- Dynamic (default): imports the package at runtime for full
introspection. Requires pip install -e . first.
- Static (
dynamic: false): uses griffe for AST-based analysis.
Use when the package has circular imports, lazy loading, or compiled extensions.
Dynamic mode auto-falls-back to static if the import fails.
Docstring directives
Custom directives inside docstrings use % prefix:
def my_function():
"""
Description.
%seealso func_a, func_b: related functions, ClassC
%nodoc
"""%seealso name1, name2: desc— Cross-references in rendered docs%nodoc— Exclude this item from documentation
Workflows
New documentation site
Task Progress:
- [ ] Step 1: Install prerequisites
- [ ] Step 2: Initialize configuration
- [ ] Step 3: Customize config
- [ ] Step 4: Build and preview
- [ ] Step 5: Verify outputStep 1: Ensure great-docs and quarto are installed. The target package must be importable (pip install -e .).
Step 2: Run great-docs init from the project root (where pyproject.toml lives). This creates great-docs.yml.
Step 3: Edit great-docs.yml to customize. See references/config-reference.md or assets/config-template.yaml for all options.
Step 4: Run great-docs build then great-docs preview.
Step 5: Check the site at http://localhost:3000. If errors occur, see references/common-errors.md.
Adding content
User guide page: Create user_guide/NN-title.qmd with a 2-digit numeric prefix. Auto-discovered on next build.
Recipe: Create recipes/NN-title.qmd. Same numeric prefix convention.
Custom section: Add to great-docs.yml:
sections:
- title: Examples
dir: examplesCustomizing appearance
# great-docs.yml
navbar_style: sky # gradient: sky, peach, lilac, mint, etc.
content_style: lilac # content area glow
dark_mode_toggle: true # toggle switch in navbar
logo: assets/logo.svg # or {light: ..., dark: ...}
hero: true # landing page hero section
announcement:
content: "v2 is out!"
type: info
dismissable: trueTroubleshooting a build
1. Run great-docs build and read the error output 2. Check references/common-errors.md for the error pattern 3. Fix the config or source file 4. Rebuild with great-docs build --no-refresh (faster, skips API rediscovery) 5. If the error persists, try great-docs build with full refresh
Reference files
Config reference (references/config-reference.md)
Complete list of every great-docs.yml option with types, defaults, and examples. Organized by category: metadata, GitHub, navigation, theming, content, features, and advanced.
CLI reference (references/cli-reference.md)
All CLI commands with arguments and usage examples:
| Command | Purpose |
|---|---|
init | Create config, discover API |
build | Full build pipeline |
preview | Local dev server |
scan | Preview discoverable API |
config | Generate template config |
uninstall | Remove config and build dir |
setup-github-pages | Create CI/CD workflow |
Common errors (references/common-errors.md)
Error patterns, causes, and fixes for the most frequent build failures — import errors, missing exports, config mismatches, Quarto issues, and more.
Scripts
scripts/setup-env.sh
Bootstrap a development environment:
#!/usr/bin/env bash
set -euo pipefail
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
pip install great-docs
quarto --version || echo "ERROR: Quarto not installed"scripts/run-build.sh
Build with validation:
#!/usr/bin/env bash
set -euo pipefail
great-docs build
echo "Build complete. Site at great-docs/_site/"
ls great-docs/_site/index.html && echo "OK: index.html exists"Configuration template
The assets/config-template.yaml provides a starter config with annotated options. Copy it as great-docs.yml and customize.
Gotchas
1. Run from project root. All commands must run from the directory containing great-docs.yml (and pyproject.toml). 2. `module` vs package name. The module key is the Python importable name, not the PyPI name. For py-shiny, set module: shiny. 3. Circular imports. Set dynamic: false for packages with lazy loading or circular aliases. 4. User guide ordering. Files need numeric prefixes (00-intro.qmd, 01-install.qmd) for deterministic order. 5. Don't edit `great-docs/` directly. It's regenerated on every build. Edit source files instead. 6. Quarto required. If quarto is not on PATH, the build fails at step 13. 7. Package must be importable. In dynamic mode, run pip install -e . before building.
Capabilities and boundaries
What agents can configure:
- All
great-docs.ymlsettings - User guide
.qmdpages inuser_guide/ - Recipe
.qmdpages inrecipes/ - Custom section
.qmdpages - Logo, favicon, and other assets
- Custom CSS/SCSS overrides
- Docstring directives (
%seealso,%nodoc)
Requires human setup:
pip install great-docsand Quarto installationpip install -e .for the target package- GitHub Pages or hosting deployment
- Custom domain DNS
- GitHub access tokens (for changelog)
Resources
- Full documentation
- llms.txt — Indexed API reference for LLMs
- llms-full.txt — Comprehensive documentation for LLMs
- Configuration guide
- GitHub repository
# great-docs.yml starter configuration
# Copy to your project root and customize.
# All keys are optional — remove what you don't need.
# ── Package identity ──────────────────────────────────────────
# module: my_package # Python importable name (auto-detected)
# display_name: My Package # Custom site title
# parser: numpy # Docstring style: numpy, google, sphinx
# dynamic: true # false = static analysis (for tricky imports)
# ── Exclusions ────────────────────────────────────────────────
# exclude:
# - _InternalClass
# - _helper_fn
# ── Theming ───────────────────────────────────────────────────
# navbar_style: sky # Gradient: sky, peach, lilac, slate, honey, dusk, mint
# navbar_color: "#1a1a2e" # Solid color (overrides navbar_style)
# content_style: lilac # Content area glow
# dark_mode_toggle: true # Dark mode toggle in navbar
# attribution: true # "Built with Great Docs" footer
# ── Logo and hero ─────────────────────────────────────────────
# logo: assets/logo.svg # Or: {light: assets/logo.svg, dark: assets/logo-dark.svg}
# favicon: assets/favicon.png # Auto-generated from logo if SVG
# hero:
# enabled: true
# tagline: "Beautiful docs for your Python package"
# ── Announcement banner ───────────────────────────────────────
# announcement:
# content: "v2.0 released!"
# type: info # info, warning, success
# dismissable: true
# url: https://example.com/changelog
# ── GitHub ────────────────────────────────────────────────────
# repo: https://github.com/my-org/my-package
# github_style: widget # widget (shows stars) or icon
# ── Source links ──────────────────────────────────────────────
# source:
# enabled: true
# branch: main
# path: my_package # Path to source (auto-detected)
# ── Content ───────────────────────────────────────────────────
# homepage: index # index (README) or user_guide
# sections:
# - title: Examples
# dir: examples
# ── CLI documentation ─────────────────────────────────────────
# cli:
# enabled: true
# module: my_package.cli # Module with Click app
# name: my-cli # CLI command name
# ── Changelog ─────────────────────────────────────────────────
# changelog:
# enabled: true # Auto-generate from GitHub Releases
# ── Sidebar filter ────────────────────────────────────────────
# sidebar_filter:
# enabled: true
# min_items: 10 # Show filter when sidebar has 10+ items
# ── Agent skill ───────────────────────────────────────────────
# skill:
# enabled: true
# file: skills/my-package/SKILL.md # Path to hand-written SKILL.md
CLI Reference — great-docs
Contents
- Global options
- init
- build
- preview
- scan
- config
- uninstall
- setup-github-pages
All commands accept --project-path PATH to target a different directory.
Global options
great-docs [OPTIONS] COMMAND [ARGS]| Option | Description |
|---|---|
--project-path PATH | Path to project root (default: current directory) |
--version | Show version and exit |
--help | Show help and exit |
init
One-time setup: create great-docs.yml and auto-discover API.
great-docs init
great-docs init --force # reset existing config| Option | Description |
|---|---|
--force | Overwrite existing great-docs.yml |
Creates great-docs.yml with detected package name, module, parser style, and API sections. Safe to run multiple times (no-op if config exists unless --force).
build
Full build pipeline: prepare → render → build HTML.
great-docs build
great-docs build --no-refresh # skip API rediscovery (faster)
great-docs build --watch # rebuild on file changes| Option | Description |
|---|---|
--watch | Watch for changes and rebuild incrementally |
--no-refresh | Skip API reference rediscovery (uses cached) |
Output goes to great-docs/_site/. Build streams progress in real-time.
preview
Start a local development server.
great-docs preview
great-docs preview --port 8080| Option | Default | Description |
|---|---|---|
--port | 3000 | Server port |
Serves great-docs/_site/ with live reload. Run build first if the site doesn't exist yet.
scan
Preview which API items will be documented.
great-docs scan
great-docs scan --verbose # show methods and attributes| Option | Description |
|---|---|
--verbose | Show member details (methods, attributes) |
Useful for verifying what great-docs init will discover before committing to a build.
config
Generate a template great-docs.yml.
great-docs config
great-docs config --force # overwrite existing| Option | Description |
|---|---|
--force | Overwrite existing config file |
Similar to init but only creates the config file without running any discovery or setup.
uninstall
Remove great-docs.yml and the great-docs/ build directory.
great-docs uninstallPreserves source files (user_guide/, recipes/, assets/).
setup-github-pages
Create a GitHub Actions workflow for automated deployment.
great-docs setup-github-pages
great-docs setup-github-pages --main-branch main --python-version 3.12| Option | Default | Description |
|---|---|---|
--main-branch | "main" | Branch that triggers deployment |
--python-version | "3.12" | Python version in CI |
--force | — | Overwrite existing workflow |
Creates .github/workflows/docs.yml configured for GitHub Pages deployment with proper caching and Quarto installation.
Common Errors — great-docs
Contents
- Import and discovery errors
- Configuration errors
- Build and rendering errors
- Quarto errors
- Deployment errors
Import and discovery errors
Cannot find an object named X
Cause: Object listed in API config but not exported from __init__.py.
Fix: Add from .module import X to the package's __init__.py.
dynamic: true fails with ImportError
Cause: Package is not importable in the current environment.
Fix: Run pip install -e . in the project root, or set dynamic: false in great-docs.yml to use static analysis.
No API items discovered
Cause: Package has no public exports in __init__.py.
Fix: Ensure public classes and functions are imported in __init__.py or listed in __all__.
Wrong items documented
Cause: Re-exported third-party symbols treated as own API.
Fix: Add unwanted items to exclude list in great-docs.yml:
exclude:
- ThirdPartyClass
- imported_helperConfiguration errors
module not found
Cause: module key doesn't match the importable package name.
Fix: Use the Python import name, not the PyPI install name. For pip install py-shiny, set module: shiny.
Parser mismatch (garbled docstrings)
Cause: Docstring style doesn't match parser setting.
Fix: Set parser to match your docstrings:
parser: numpy # Parameters\n----------\narg : type
parser: google # Args:\n arg (type): desc
parser: sphinx # :param arg: desc\n:type arg: typeCLI reference not generated
Cause: cli.module points to wrong module or the Click app isn't findable.
Fix: Verify cli.module and cli.name:
cli:
enabled: true
module: my_package.cli # must contain a Click group/command
name: my-cli # the CLI entry point nameBuild and rendering errors
great-docs/ directory has stale content
Cause: Edited files inside great-docs/ directly.
Fix: Delete great-docs/ and rebuild. Never edit the build directory — it's overwritten on every build.
User guide pages in wrong order
Cause: Missing or inconsistent numeric prefixes.
Fix: Use 2-digit prefixes: 00-intro.qmd, 01-install.qmd, 02-quickstart.qmd. Gaps are fine (00, 05, 10).
Missing cross-references
Cause: %seealso directive references items not in the API.
Fix: Ensure referenced items are exported and not in exclude.
Source links point to wrong branch
Cause: source.branch doesn't match the repository default.
Fix:
source:
branch: main # or "master", "develop", etc.Quarto errors
quarto: command not found
Cause: Quarto is not installed or not on PATH.
Fix: Install from https://quarto.org/docs/get-started/ and ensure quarto --version works in the terminal.
Quarto render fails with YAML error
Cause: Generated _quarto.yml has invalid syntax, usually from special characters in config values.
Fix: Check great-docs.yml for unquoted special characters. Wrap values with colons, brackets, or quotes in double quotes:
announcement:
content: "Version 2.0: now with more features!"Quarto render fails with missing bibliography
Cause: .qmd files reference a .bib file that doesn't exist.
Fix: Remove the bibliography field from .qmd frontmatter or create the referenced .bib file.
Deployment errors
GitHub Pages shows 404
Cause: Workflow deploys from wrong directory or branch.
Fix: Run great-docs setup-github-pages to regenerate the workflow. Ensure GitHub Pages is configured to deploy from GitHub Actions (Settings → Pages → Source → GitHub Actions).
Site URL incorrect in links
Cause: site-url not set in Quarto config.
Fix: Great Docs auto-detects this from pyproject.toml URLs. Add a Documentation URL:
[project.urls]
Documentation = "https://my-org.github.io/my-package/"Changelog empty
Cause: No GitHub Releases exist, or GITHUB_TOKEN not available in CI.
Fix: Create at least one GitHub Release, or set changelog: {enabled: false} to disable.
Configuration Reference — great-docs.yml
Contents
- Metadata and package info
- GitHub and source links
- Navigation and theming
- Logo, favicon, and hero
- Content organization
- Features
- Advanced
All keys are optional. Defaults are auto-detected from pyproject.toml.
Metadata and package info
| Key | Type | Default | Description |
|---|---|---|---|
module | str | auto-detected | Python importable name (not PyPI name) |
display_name | str | package name | Custom site title |
parser | str | "numpy" | Docstring style: "numpy", "google", "sphinx" |
dynamic | bool | true | true: runtime introspection; false: static (griffe) |
exclude | list[str] | [] | Items to hide from API docs |
auto_include | list[str] | [] | Force-include names that match the auto-exclude list |
no_auto_exclude | bool | false | Bypass the built-in auto-exclude list entirely |
GitHub and source links
| Key | Type | Default | Description |
|---|---|---|---|
repo | str | auto-detected | GitHub repository URL |
github_style | str | "widget" | "widget" (shows stars) or "icon" |
source.enabled | bool | true | Show "View source" links |
source.branch | str | "main" | Git branch for source links |
source.path | str | auto-detected | Path to package source |
source.placement | str | "repo" | Where source links point |
Navigation and theming
| Key | Type | Default | Description |
|---|---|---|---|
navbar_style | str | none | Gradient preset: "sky", "peach", "lilac", "slate", "honey", "dusk", "mint" |
navbar_color | str or dict | none | Solid color: "#1a1a2e" or {light: "#fff", dark: "#1a1a2e"} |
content_style | str or dict | none | Content glow: "lilac" or {preset: "sky", pages: "homepage"} |
dark_mode_toggle | bool | true | Dark mode toggle in navbar |
attribution | bool | true | "Built with Great Docs" footer |
Logo, favicon, and hero
| Key | Type | Default | Description |
|---|---|---|---|
logo | str or dict | auto-detected | Logo path or {light: ..., dark: ...} |
favicon | str | auto-generated | Favicon path (generated from logo if SVG) |
hero | bool or dict | auto | Hero section on homepage. {enabled: true, tagline: "..."} |
Logo auto-detection looks for assets/logo.svg, assets/logo-dark.svg, etc.
Content organization
| Key | Type | Default | Description |
|---|---|---|---|
homepage | str | "index" | "index" (README) or "user_guide" (first guide page) |
user_guide | auto or dict | auto-discover | User guide content source |
reference | auto or list | auto-discover | API reference sections |
sections | list[dict] | [] | Custom pages: [{title: "Examples", dir: "examples"}] |
Features
| Key | Type | Default | Description |
|---|---|---|---|
cli.enabled | bool | false | Generate CLI reference from Click app |
cli.module | str | — | Module containing the Click app |
cli.name | str | — | CLI command name |
changelog.enabled | bool | true | Generate changelog from GitHub Releases |
markdown_pages | bool | false | Generate downloadable .md pages |
sidebar_filter.enabled | bool | true | Search/filter in API reference sidebar |
sidebar_filter.min_items | int | 10 | Minimum items to show filter box |
skill.enabled | bool | false | Generate SKILL.md for agent consumption |
skill.file | str | — | Path to hand-written SKILL.md |
Advanced
| Key | Type | Default | Description |
|---|---|---|---|
announcement | str or dict | none | Banner: "text" or {content: "...", type: "info", dismissable: true, url: "..."} |
authors | list[dict] | [] | Author metadata: {name, affiliation, github, orcid} |
funding | dict | none | Funding/copyright: {funder: "...", award: "..."} |
include_in_header | list[str] | [] | Custom HTML/CSS/JS includes |
site | dict | Quarto defaults | Quarto theme, TOC, grid settings |
jupyter | str | "python3" | Jupyter kernel for executable code cells |
Example: minimal config
# great-docs.yml
parser: numpyExample: fully customized config
# great-docs.yml
module: my_package
display_name: My Package
parser: google
dynamic: true
exclude:
- _InternalClass
- _helper_fn
navbar_style: sky
content_style: lilac
dark_mode_toggle: true
logo:
light: assets/logo.svg
dark: assets/logo-dark.svg
hero:
enabled: true
tagline: "Beautiful documentation for Python"
announcement:
content: "v2.0 released!"
type: info
dismissable: true
cli:
enabled: true
module: my_package.cli
name: my-cli
changelog:
enabled: true
sections:
- title: Examples
dir: examples
skill:
enabled: true#!/usr/bin/env bash
# Build and validate a great-docs site
set -euo pipefail
echo "Building documentation..."
great-docs build
# Validate output
SITE_DIR="great-docs/_site"
if [[ ! -d "$SITE_DIR" ]]; then
echo "ERROR: Build directory $SITE_DIR not found"
exit 1
fi
if [[ ! -f "$SITE_DIR/index.html" ]]; then
echo "ERROR: index.html not found in $SITE_DIR"
exit 1
fi
echo "Build complete. Site at $SITE_DIR/"
# Count generated pages
PAGE_COUNT=$(find "$SITE_DIR" -name "*.html" | wc -l | tr -d ' ')
echo "Generated $PAGE_COUNT HTML pages"
# Check for key outputs
for file in llms.txt llms-full.txt; do
if [[ -f "great-docs/$file" ]]; then
echo "OK: $file exists"
else
echo "WARN: $file not found"
fi
done
echo "Done."
#!/usr/bin/env bash
# Setup development environment for great-docs
set -euo pipefail
echo "Creating virtual environment..."
python -m venv .venv
source .venv/bin/activate
echo "Installing package in editable mode..."
pip install -e ".[dev]"
echo "Installing great-docs..."
pip install great-docs
echo "Checking Quarto..."
if command -v quarto &> /dev/null; then
echo "Quarto $(quarto --version) found"
else
echo "ERROR: Quarto not installed. Visit https://quarto.org/docs/get-started/"
exit 1
fi
echo "Validating package import..."
PACKAGE=$(python -c "
import tomllib
with open('pyproject.toml', 'rb') as f:
d = tomllib.load(f)
pkg = d.get('project', {}).get('name', '').replace('-', '_')
print(pkg)
")
python -c "import ${PACKAGE}; print('Import OK: ${PACKAGE}')"
echo "Environment ready."
Related skills
FAQ
What does great-docs do?
great-docs is a Claude Code skill for ai & agent building.
When should I use great-docs?
When you need to helps with ai & agent building tasks during AI-assisted development., or when great-docs is a claude code skill for ai & agent building.
What are the main capabilities?
great-docs; AI & Agent Building; AI-coding skill.