Research a library and create comprehensive documentation in .claude/docs/libraries/.
Research $ARGUMENTS and create documentation in .claude/docs/libraries/.
Scope: this skill produces documentation only. It never edits source code and never edits a dependency manifest or lockfile — if the research implies a version bump, report it as an action item instead of making it.
Derive the path once, from the script, and reuse the value everywhere below.
$ARGUMENTS is raw user wording (FastAPI, ruamel.yaml, @scope/pkg); the
script normalizes it the same way lib_inventory.py normalizes a declared
dependency, so the doc filename and the dependency name always match.
python3 .claude/skills/_shared/workspace.py --skill research-lib \
--title "$ARGUMENTS" --create
Emits {ok, skill, slug, paths: {lib_doc}, dirs, created, artifacts, verify}.
Exit 0 on success, 1 on a bad argument. Use paths.lib_doc verbatim from here
on — never re-derive it by hand, and never substitute $ARGUMENTS.md.
The declared and locked versions are facts with one correct answer, so read them instead of asking the web:
python3 .claude/skills/update-lib-docs/lib_inventory.py --library "$ARGUMENTS"
The dependencies array carries {name, declared_spec, declared_in, locked_version, locked_in, ecosystem}. > **Version Checked**: records
locked_version when a lockfile pins one, otherwise the version satisfying
declared_spec. If dependencies is empty the library is not (yet) a
dependency of this project — record the version you are documenting against and
say so in ## Constraints & Notes.
Exit codes: 0 ok, 1 bad argument, 2 a manifest could not be parsed
(manifest_errors), 3 a library doc could not be read (read_error). On a
non-zero exit, stop and report — do not fill the version in from a web search.
Newer upstream releases are research findings, not the project's version: note
them under ## Constraints & Notes as an upgrade consideration. The blockquote
is the only place a version number lives.
Use general-purpose-opus with WebSearch/WebFetch for comprehensive library
research. Pass the resolved path and version into the prompt:
Agent tool:
subagent_type: "general-purpose-opus"
prompt: |
Research: {library}. Find official documentation, key features,
constraints, best practices, known issues, and usage patterns.
Use WebSearch and WebFetch to gather information.
The version this project uses is {locked_version or declared_spec};
document against that version, and note newer releases separately.
Save results to {paths.lib_doc} using the template in
.claude/skills/research-lib/SKILL.md.
List every URL you consulted under ## References.
Return concise summary.
If the subagent is unavailable, verify via manual web search:
Record every source you used in ## References; a research note whose sources
are only in the conversation cannot be audited later.
Basic Information
Core Features
Constraints & Notes
Usage Patterns in This Project
Troubleshooting
paths.lib_doc from step 1 — the only derivation of this path.
# {Library Name}
> **Last Updated**: {YYYY-MM-DD}
> **Version Checked**: {declared or locked version in this project}
## Overview
- **License**: {license}
- **Official URL**: {url}
- **Installation**: `{install command}`
## Core Features
{Description of main features}
## Basic Usage
```python
{Code example}
{Good pattern}
{Anti-pattern}
Cause: {cause} Solution: {solution}
The `> **Last Updated**` / `> **Version Checked**` blockquote is mandatory, not
decoration: `lib_inventory.py` parses exactly those two lines, and a doc without
them is invisible to `update-lib-docs` — never stale, never undocumented, never
maintained.
## Validate the Document
Both checks are gates. Do not report completion until both exit 0.
```bash
python3 .claude/skills/_shared/validate_doc.py --contract lib-doc \
--file <paths.lib_doc>
python3 .claude/skills/_shared/workspace.py --skill research-lib \
--slug <slug> --verify
validate_doc.py exit codes:
sections_missing. Re-delegate with paths.lib_doc; do not hand-edit a
different path.sections_missing lists
absent ## sections (Overview, Core Features, Constraints & Notes,
References) and metadata_missing lists absent metadata lines
(Last Updated, Version Checked). Fill those in and re-run.workspace.py --verify exit 2 with verify.empty containing lib_doc means
the file exists but is a stub (under 20 non-whitespace characters) — a summary
was returned without real content.
Search for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer