Great Docs Great Docs
  • User Guide
  • Recipes
  • Reference
  • Changelog

Skills

A skill is a package of structured files that teaches an AI coding agent how to work with a specific tool or framework. Install it in your agent and it will be able to run commands, edit configuration, write content, and troubleshoot problems without step-by-step guidance from you.

Any agent — install with npx:

npx skills add https://posit-dev.github.io/great-docs/

Works with Claude Code, GitHub Copilot, Cursor, Gemini CLI, Codex, and 30+ other agents.

Codex / OpenCode — tell the agent:

Fetch the skill file at https://posit-dev.github.io/great-docs/skill.md and follow the instructions.

Manual — download the skill file:

curl -O https://posit-dev.github.io/great-docs/skill.md

Or browse the SKILL.md file.

SKILL LAYOUT

great-docs/
├── SKILL.md
├── references/
│   ├── cli-reference.md
│   ├── common-errors.md
│   └── config-reference.md
├── scripts/
│   ├── run-build.sh
│   └── setup-env.sh
└── assets/
    └── config-template.yaml

SKILL.md

---
name: great-docs
description: >
  Generate documentation sites for Python packages with Great Docs.
  Covers init, build, preview, configuration (great-docs.yml), API
  reference, CLI docs, user guides, theming, deployment, and the
  llms.txt agent-context files. Use when creating, configuring,
  building, or troubleshooting Python package documentation.
license: MIT
compatibility: Requires Python >=3.11, Quarto CLI installed.
metadata:
  author: rich-iannone
  version: "2.0"
  tags:
    - documentation
    - python-packages
    - quarto
    - api-reference
    - static-site
---

# 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

```bash
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 3000
```

## Skill 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.yml
```

## When 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](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:

```python
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 output
```

**Step 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](references/config-reference.md) or
[assets/config-template.yaml](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](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`:

```yaml
sections:
  - title: Examples
    dir: examples
```

### Customizing appearance

```yaml
# 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: true
```

### Troubleshooting a build

1. Run `great-docs build` and read the error output
2. Check [references/common-errors.md](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:

```bash
#!/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:

```bash
#!/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.yml` settings
- User guide `.qmd` pages in `user_guide/`
- Recipe `.qmd` pages in `recipes/`
- Custom section `.qmd` pages
- Logo, favicon, and other assets
- Custom CSS/SCSS overrides
- Docstring directives (`%seealso`, `%nodoc`)

**Requires human setup:**

- `pip install great-docs` and Quarto installation
- `pip install -e .` for the target package
- GitHub Pages or hosting deployment
- Custom domain DNS
- GitHub access tokens (for changelog)

## Resources

- [Full documentation](https://posit-dev.github.io/great-docs/)
- [llms.txt](llms.txt) — Indexed API reference for LLMs
- [llms-full.txt](llms-full.txt) — Comprehensive documentation for LLMs
- [Configuration guide](https://posit-dev.github.io/great-docs/user-guide/03-configuration.html)
- [GitHub repository](https://github.com/posit-dev/great-docs)

references/cli-reference.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.

```bash
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.

```bash
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.

```bash
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.

```bash
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`.

```bash
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.

```bash
great-docs uninstall
```

Preserves source files (`user_guide/`, `recipes/`, `assets/`).

## setup-github-pages

Create a GitHub Actions workflow for automated deployment.

```bash
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.

references/common-errors.md

# 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`:

```yaml
exclude:
  - ThirdPartyClass
  - imported_helper
```

## Configuration 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:

```yaml
parser: numpy    # Parameters\n----------\narg : type
parser: google   # Args:\n    arg (type): desc
parser: sphinx   # :param arg: desc\n:type arg: type
```

### CLI reference not generated

**Cause**: `cli.module` points to wrong module or the Click app
isn't findable.

**Fix**: Verify `cli.module` and `cli.name`:

```yaml
cli:
  enabled: true
  module: my_package.cli # must contain a Click group/command
  name: my-cli # the CLI entry point name
```

## Build 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**:

```yaml
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:

```yaml
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:

```toml
[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.

references/config-reference.md

# 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                             |

## 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

```yaml
# great-docs.yml
parser: numpy
```

## Example: fully customized config

```yaml
# 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
```

scripts/run-build.sh

#!/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."

scripts/setup-env.sh

#!/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."

assets/config-template.yaml

# 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

Developed by Rich Iannone and Tomasz Kalinowski. Supported by Posit Software, PBC.
Site created with Great Docs (4b6fb8f).