基于 SOC 职业分类
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/pipecat-ai/pipecat --skill update-docs命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
正在显示 SKILL.md
Research every provider behind Pipecat's services for new models and API affordances, writing per-service reports and local branches for clear-cut updates; publishing is scripts/provider-watch/publish.py's job, run outside this skill
Render the digest for one provider-research date from every report on disk, topped with authored highlight bullets; publishing is scripts/provider-watch/publish.py's job, run outside this skill
Create changelog files for important commits in a PR
| name | update-docs |
| description | Update documentation pages to match source code changes on the current branch |
Update documentation pages to reflect source code changes on the current branch. Analyzes the diff against main, maps changed source files to their corresponding doc pages, and makes targeted edits.
This skill is repo-agnostic and shared. It is published by the
pipecat-dev-skills marketplace and used by every repository whose changes feed
pipecat-ai/docs, so it must stay free of anything specific to one of them.
Everything repo-specific — what is in scope, how files map to pages, what a new
page looks like, where it gets registered — comes from that repo's profile,
.claude/skills/update-docs/SOURCE_DOC_MAPPING.md, which lives in the repo
being documented. The skill never hardcodes a source path, a page template, or a
navigation group. See PROFILE_CONTRACT.md for what a profile must provide.
/update-docs [DOCS_PATH]
DOCS_PATH (optional): Path to the docs repository root. If not provided, ask the user.Examples:
/update-docs /Users/me/src/docs/update-docsIf DOCS_PATH was provided as an argument, use it. Otherwise, ask the user for the path to their docs repository.
Verify the path exists and contains docs.json.
Read the profile at .claude/skills/update-docs/SOURCE_DOC_MAPPING.md in the
source repository. It defines this repo's scope, mapping tables, page
template, and registration steps. If it is missing, stop and say so — without it
there is no way to resolve a file to a page, and guessing produces edits to
pages that don't exist.
Get the current source branch name:
git rev-parse --abbrev-ref HEAD
In the docs repo, create a new branch off main with a matching name:
cd DOCS_PATH && git checkout main && git pull && git checkout -b {branch-name}-docs
For example, if the source branch is feat/new-service, the docs branch becomes feat/new-service-docs.
All doc edits in subsequent steps are made on this branch.
Run:
git diff main..HEAD --name-only
Every source file under the roots the profile's Scope section names is in scope. Repos ship public API well beyond their most obvious entry points, so scope is defined as exclusions rather than an allowlist: a new directory is covered the day it appears rather than when someone remembers to list it.
Exclude what the profile's Scope section excludes, plus build and cache
artifacts (__pycache__/, *.pyc, node_modules/, dist/) and re-export-only
index files that define nothing themselves.
Changes outside those roots — examples, CI config, the docs directory — don't trigger doc updates on their own.
Then apply the profile's Skip list (Step 4), which names the small set of genuinely internal files. Don't invent further reasons to drop a file here: being a base class, a shared module, or "core architecture" is not one. Public constructor parameters and observable behavior get documented wherever they live, and a file whose page isn't obvious should reach Step 8 as a reported gap rather than disappear.
For each changed source file, resolve the doc page to edit using the profile's
tables, in this order. Confirm every candidate path exists in DOCS_PATH
before using it.
.mdx file exists (glob/ls it under DOCS_PATH). If it exists, use it.DOCS_PATH for the file's main class or exported symbol name (see the profile's Search section).Never edit a path you haven't confirmed exists. If a candidate path doesn't resolve, fall through to the search step.
Reaching step 6 is a finding, not a dead end: an unmapped file means public API with no home on the docs site, which is exactly what Step 8 exists to surface. Never resolve a file by dropping it.
For each mapped pair:
git diff main..HEAD -- <source_file>Identify what changed by comparing source to docs. The profile's Section vocabulary names the sections this repo's pages use and what each is built from; check each one that applies:
<ParamField> entriesFor each doc page that needs updates, edit only the sections that need changes. Preserve all other content exactly as-is.
<ParamField> tags, use them; if it uses tables, use tablesMatch the size of the doc change to the size of the source change. A changed default is a changed default: edit the value and, if it needs one, the clause beside it. A two-line source change should not produce a paragraph. When a diff suggests more prose than the change warrants, that prose is usually explaining the change rather than the API.
Add a note only when the behavior would surprise a reader who has never seen the previous behavior. Judge it with the diff covered up: if the note only makes sense as an explanation of what changed, it belongs in the changelog, not here.
A behavior change is not by itself a reason to add a note. The question is
whether the new behavior needs explaining on its own terms. A default that
moved from True to None needs the default updated; it needs a note only if
None is confusing to someone meeting it for the first time — and then the note
explains None, not the move.
Do not add a <Note>, <Warning>, or <Tip> for a change that fits in the
sentence that is already there. Callouts are for behavior a reader would
otherwise get wrong, not for drawing attention to what a PR happened to touch.
Configuration (constructor params):
<ParamField path="name" type="type" default="value"> format if the page already uses itOptions / settings objects (runtime settings):
<ParamField> entriesUsage (code examples):
Notes:
Event Handlers:
Overview / Key Features / Prerequisites:
When source marks something deprecated — a DeprecationWarning, a
@deprecated decorator, a docstring note, or a removal version — the doc entry
for it says so too. Mark the entry itself rather than adding a separate note
elsewhere on the page: readers find the parameter, not the changelog.
deprecated attribute on <ParamField> where the page uses ParamFieldsGuides reference specific class names, parameters, imports, and code patterns. After completing reference doc edits, check whether any guides need updates too. The profile's Guide directories section lists the directories to search for this repo.
For each changed source file, collect the class names, renamed parameters, and changed imports from the diff, then search those directories:
grep -rl "ClassName\|old_param_name" DOCS_PATH/<guide dirs from profile>
For each guide that references changed code:
After processing all mapped pairs, check for two kinds of gaps:
Missing pages: Source files that resolved to no doc page (pattern, non-standard table, and search all came up empty) and are not on the skip list. For each, report:
Missing sections: Mapped doc pages missing a section the source implies — a page with no Configuration section for a type that takes constructor parameters, or no options table where the source declares a settings class. Flag these and offer to add them.
If a new page is wanted, follow the profile's New pages section, which provides the page template, the destination path, and every registration step this repo requires (navigation, and any index or support-matrix page). Do all of them: a page that exists but isn't registered is invisible.
A new page's title and description become its llms.txt entry and its
citation label in AI tools, and the docs repo's metadata lint enforces them:
- Pipecat suffix (Mintlify appends it). Add a
sidebarTitle when the title runs past 30 chars.og:title if set, else title) — add an
og:title when another page already uses the same short title.The docs repo checks in llms.txt (a navigation-ordered index built from each
page's frontmatter) and llms-full.txt (every page's full body). Its metadata
lint fails when either is stale, so regenerate them after any page edit,
docs.json navigation change, or new page.
Prettier reflows MDX and llms-full.txt embeds the page bodies verbatim, so
formatting has to settle before generation:
cd DOCS_PATH
npx prettier --ignore-unknown --write <edited files>
node scripts/gen-llms-txt.mjs
Commit the doc edits together with the regenerated llms.txt and
llms-full.txt. Generating before formatting leaves them stale — as does
relying on the repo's pre-commit hook, which formats pages after generation has
already run.
node scripts/docs-meta-lint.mjs reports the same staleness and frontmatter
findings CI will.
After all edits are complete, print a summary:
## Documentation Updates
### Updated reference pages
- `<page path>` — what changed, and in which section
### Updated guides
- `<guide path>` — what changed
### New pages
- `<page path>` — created, plus every place it was registered
### Unmapped source files
- `<source path>` — ClassName (no doc page exists)
### Skipped files
- `<source path>` — why
[X], {placeholder}) or assistant meta ("I hope this helps") in a page — this skill runs unattended in CI, so nothing downstream will catch it.<ParamField>/table entry do. After editing a code example or renaming a param, re-read the surrounding prose for stale references.<ParamField> already format these inside tables.Before finishing, verify:
llms.txt and llms-full.txt regenerated and committed