Agent Skills
AI coding agents (Claude Code, GitHub Copilot, Cursor, Windsurf, Codex, and many others) produce better code when they have structured context about the libraries theyβre using. The Agent Skills open standard provides that context through a SKILL.md file: a concise cheat sheet that tells agents what a package does, how to use it correctly, and what mistakes to avoid.
Great Docs has two roles in this ecosystem:
- For package authors: Great Docs generates, bundles, and serves
SKILL.mdfiles as part of your documentation site, making your packageβs skill discoverable by anyone. - For package users: Great Docs provides a CLI (
great-docs skill install) and Python API to install skills into your local project, keep them up to date, and manage them across different agents.
This guide covers both sides. If you maintain a Python package and want to ship a skill with it, start with Publishing Skills (for Authors). If you use a package that ships a skill and want to install it into your project, skip ahead to Installing Skills (for Users).
Installing Skills (for Users)
If youβre a user of a Python package that ships a skill, you can install it into your local project so your AI coding agent has context about the package whenever youβre writing code.
Great Docs ships its own skill. If youβre building documentation sites with Great Docs, installing it gives your AI agent context about great-docs.yml configuration, the build pipeline, CLI commands, and common pitfalls:
great-docs skill install great-docsGreat Docs provides three ways to install skills:
- The
great-docs skillCLI: the recommended approach for most users - The Python API (great_docs.install_skill()): for programmatic use or CI integration
npx skills add: the standard Agent Skills protocol (works without Great Docs installed)
The first two are covered in detail below. The third is the community standard and works with any skills-compatible tool.
great-docs skill install
Installs a skill from a Python package, a documentation site URL, or the current project:
# Install from an installed Python package
great-docs skill install great-tables
# Install from a documentation site URL
great-docs skill install https://posit-dev.github.io/great-tables/
# Install from the current project (auto-detects package from pyproject.toml)
great-docs skill installGreat Docs auto-detects which AI coding agents you have configured by scanning for marker files (.claude/, .github/, .cursor/, etc.) and installs the skill into the correct directory. If no agent is detected, it defaults to Claude Code (.claude/skills/<name>/).
You can also target a specific agent or a custom path:
# Target a specific agent
great-docs skill install great-tables --agent copilot
# Install to a custom path
great-docs skill install great-tables --path .claude/skills/my-gt
# Install globally (to ~/ instead of the current repo)
great-docs skill install great-tables --global
# Update all existing installations in place
great-docs skill install --detectSupported agents:
| Agent | Flag | Default directory |
|---|---|---|
| Claude Code | --agent claude |
.claude/skills/<name>/ |
| GitHub Copilot | --agent copilot |
.github/skills/<name>/ |
| Cursor | --agent cursor |
.cursor/skills/<name>/ |
| Windsurf | --agent windsurf |
.windsurf/skills/<name>/ |
| OpenCode | --agent opencode |
.opencode/skills/<name>/ |
| Codex | --agent codex |
.codex/skills/<name>/ |
When multiple agents are detected (e.g., both .claude/ and .cursor/ exist), the skill is installed into all of them in a single command.
great-docs skill check
Checks whether installed skills are current or outdated:
# Check all installed skills
great-docs skill check
# Check a specific package
great-docs skill check great-tables
# Check and auto-update any outdated skills
great-docs skill check --update
# Check global installations only
great-docs skill check --globalExample output:
Checking installed skills...
β great-tables (Claude Code): v0.15.0 [current]
β plotnine (Claude Code): v0.14.2 β v0.15.0 [outdated]
Β· my-local-skill (Cursor) [local]
Summary: 1 current, 1 outdated, 1 local
The status labels mean:
| Status | Meaning |
|---|---|
| current | Installed skill matches the content in the installed package |
| outdated | The package has newer skill content available |
| local | Hand-written skill with no matching package (not checked) |
Add --update to automatically replace any outdated skills with the latest content from the installed package.
great-docs skill list
Lists the skills bundled inside a package or available at a URL:
# List skills from an installed package
great-docs skill list great-tables
# List skills from a documentation site
great-docs skill list https://posit-dev.github.io/great-tables/
# List skills from the current project
great-docs skill listThis is useful for discovering what skills a package provides before installing them.
How Freshness Checking Works
When you install a skill from a Python package, Great Docs stamps two pieces of metadata into the installed SKILL.mdβs frontmatter:
metadata.package_version: the Python package version at install time (e.g.,"0.15.0")metadata.content_hash: a SHA-256 prefix of the original skill content (before stamping)
When you later run great-docs skill check, the tool:
- finds the bundled
SKILL.mdinside the currently installed Python package - hashes its content
- compares that hash against the
content_hashstored in the installed copy
If the hashes match, the skill is current (even if the package version has changed). This eliminates false positives: if you upgrade from v0.10.0 to v0.11.1 and the skill text didnβt change, check correctly reports current instead of outdated.
This stamping only happens on the consumer side (during skill install). Published skills on documentation sites are never modified and Great Docs copies them verbatim.
If you create a SKILL.md manually (not via great-docs skill install), there is no matching Python package to compare against. These skills are reported as [local] and are never flagged as outdated. Great Docs leaves them entirely alone.
Python API
For programmatic use (CI scripts, setup automation, downstream package wrappers), the same functionality is available as Python functions:
from great_docs import install_skill, check_skill, list_skills
# Install a skill
paths = install_skill(package="great-tables")
# Check installed skills
results = check_skill(package="great-tables")
for r in results:
print(f"{r['name']}: {r['status']}")
# List available skills
skills = list_skills(package="great-tables")install_skill() accepts the same options as the CLI:
install_skill(
package="great-tables", # or url="https://...", or skill_content="..."
agent="claude", # target agent (auto-detected if omitted)
global_=False, # install to ~/ instead of repo
path=None, # explicit target path
detect=False, # update existing installations
skill_name=None, # override the skill name
quiet=False, # suppress output
)All three functions return lists. The install_skill() function returns the paths of installed SKILL.md files, check_skill() returns status dictionaries, and list_skills() returns skill metadata.
How It All Fits Together
Here is the full lifecycle from authoring to consumption:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β AUTHOR SIDE β
β β
β 1. Write SKILL.md in skills/<pkg>/ β
β (or let Great Docs auto-generate one) β
β β
β 2. great-docs build β
β β copies SKILL.md to docs output β
β β places at .well-known/agent-skills/<name>/SKILL.md β
β β writes index.json discovery manifest β
β β
β 3. Deploy docs site β
β β skill is discoverable at the published URL β
β β
β 4. pip install / pip publish β
β β skill is bundled inside the Python package β
β (in skills/<name>/) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β USER SIDE β
β β
β Install: β
β great-docs skill install <package> β
β great-docs skill install https://docs-site.com β
β npx skills add https://docs-site.com β
β β stamps content_hash + package_version β
β β writes to .claude/skills/<name>/SKILL.md (or other) β
β β
β Check: β
β great-docs skill check β
β β hashes bundled SKILL.md from installed package β
β β compares against stored content_hash β
β β reports current / outdated / local β
β β
β Update: β
β great-docs skill check --update β
β β replaces outdated skills with latest content β
β β re-stamps content_hash + package_version β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
The key insight is that Great Docs never touches the authored skill content. The content-hash stamping, version tracking, and freshness checking all happen exclusively on the consumer side. Authors write a SKILL.md, and it is published and bundled exactly as written.
Disabling Skills
If you donβt want Great Docs to generate or serve a SKILL.md at all:
great-docs.yml
skill:
enabled: falseThis suppresses both the skill.md generation and the .well-known/ discovery endpoints.
Next Steps
Agent Skills bridge the gap between your packageβs documentation and the AI coding agents that help people use it. Whether you author a hand-crafted skill or let Great Docs generate one, the result is a discoverable, installable cheat sheet that makes agents more effective.
- Agent Skills Specification: the full open standard
- llms.txt: the auto-generated LLM context files that complement skills
- Configuration: all
great-docs.ymloptions including theskillblock - Deployment: deploying your site to GitHub Pages (with the
include-hidden-filessetting) - Building: the full build pipeline, including how skill generation fits in