Using Docs Kit
lobehub/lobe-ui
Set up and author a documentation site with @lobehub/docs-kit (the lobedocs CLI, React Router + Vite static docs used by ui.lobehub.com).
Handle Hugo docs information-architecture moves: discover old vs new URLs, add front matter aliases (Phase 1), update in-repo links (Phase 2), interactive List 2 resolution and fragment validation…
$ npx skills add docker/docs --skill migrate-content-ia -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install docker/docs migrate-content-ia --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/docker/docs.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/migrate-content-ia .claude/skills/migrate-content-ia && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "migrate-content-ia" agent skill from https://github.com/docker/docs/tree/main/.agents/skills/migrate-content-ia into .claude/skills/migrate-content-ia/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-content-ia", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/docker/docs/tree/main/.agents/skills/migrate-content-iaType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add docker/docs --skill migrate-content-ia -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install docker/docs migrate-content-ia --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/docker/docs.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/migrate-content-ia .agents/skills/migrate-content-ia && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "migrate-content-ia" agent skill from https://github.com/docker/docs/tree/main/.agents/skills/migrate-content-ia into .agents/skills/migrate-content-ia/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-content-ia", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add docker/docs --skill migrate-content-ia -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install docker/docs migrate-content-ia --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/docker/docs.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/migrate-content-ia .cursor/skills/migrate-content-ia && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "migrate-content-ia" agent skill from https://github.com/docker/docs/tree/main/.agents/skills/migrate-content-ia into .cursor/skills/migrate-content-ia/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-content-ia", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/docker/docs.git --path .agents/skills/migrate-content-ia--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add docker/docs --skill migrate-content-ia -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install docker/docs migrate-content-ia --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/docker/docs.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/migrate-content-ia .gemini/skills/migrate-content-ia && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "migrate-content-ia" agent skill from https://github.com/docker/docs/tree/main/.agents/skills/migrate-content-ia into .gemini/skills/migrate-content-ia/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-content-ia", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install docker/docs migrate-content-iaInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add docker/docs --skill migrate-content-ia -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/docker/docs.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/migrate-content-ia .github/skills/migrate-content-ia && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "migrate-content-ia" agent skill from https://github.com/docker/docs/tree/main/.agents/skills/migrate-content-ia into .github/skills/migrate-content-ia/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-content-ia", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add docker/docs --skill migrate-content-ia -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install docker/docs migrate-content-ia --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/docker/docs.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/migrate-content-ia .opencode/skills/migrate-content-ia && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "migrate-content-ia" agent skill from https://github.com/docker/docs/tree/main/.agents/skills/migrate-content-ia into .opencode/skills/migrate-content-ia/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-content-ia", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
migrate-content-iaHandle Hugo docs information-architecture moves: discover old vs new URLs, add front matter aliases (Phase 1), update in-repo links (Phase 2), interactive List 2 resolution and fragment validation…
Migrate Content Ia is an agent skill from docker/docs, published by the product's own GitHub organization. Handle Hugo docs information-architecture moves: discover old vs new URLs, add front matter aliases (Phase 1), update in-repo links (Phase 2), interactive List 2 resolution and fragment validation (Phase 3; no guessing). Supports PR-scoped mapping plus whole-content sweeps for inbound links to that mapping, or a full-site follow-up. Triggers on: "IA migration", "redirects for moved pages", "fix links after content move", "PR-scoped link/anchor pass", "aliases for old URLs". After branch work, chain the…
Its SKILL.md is about 5.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including scripts (for example `scripts/scope-pr-files.sh`).
It sits in Frontend & Design, covering Static sites and blogs, Markdown and UX design. It works with Docker. The repository describes itself as: Source repo for Docker's Documentation. The licence is Apache-2.0.
5 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 65aa5cd. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 1 file in scripts/ (Shell), which the agent can run.
Shell commands in SKILL.md call:
gitdockerFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
docs.docker.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Migrate Content Ia loads about 5.1k tokens when it runs. Until then it costs about 170 tokens; SKILL.md has 2,766 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from docker/docs at commit 65aa5cd, republished under its Apache-2.0 licence (© docker). 2,766 words, ~5,119 tokens.
.claude/skills/migrate-content-ia/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.Use this skill when pages move or rename under content/ and you must
preserve old public URLs and/or fix cross-references. Work in phases;
choose PR-scoped vs full-site mode per run.
Read first: CLAUDE.md / AGENTS.md (URL rules, vendored areas, external
links, special cases) and hugo.yaml (permalinks, refLinksErrorLevel,
disablePathToLower). For prose and link text, follow STYLE.md; for
components, front matter, and link examples, follow COMPONENTS.md.
Related skills: research helps map moves and find inbound links; write commits minimal edits. Run this skill’s phases after the move is identified (or in parallel with research for large IA work).
Common mistake (wrong): use git diff main...HEAD (or the PR’s file
list) as the full set of places to fix links for a migration. That set shows
what moved; it is not the list of every page that points to a
moved page. Inbound stragglers are often in files the PR never touched. You
must still sweep the repo for every string in the old path and published-URL set
for this run, not only for “files in the diff.”
Definition of done (when the migration is finished): Both of the following (unless the user or AGENTS.md explicitly defers a List 2 item in Phase 3; document the deferral):
docker buildx bake validate passes for the branch, with no new
build/link errors from this work..md and equivalent ref forms),#fragment,link: /
url: / full-site URL strings,aliases on the new
canonical page, or redirects.yml sources you must not edit per policy.
(A hit on a source that is only an alias line on the new page is
expected—do not “fix” that away; distinguish alias rows from straggler
links in body or nav config.)Chaining (policy): when this branch’s content work is ready for handoff,
run the review-changes skill on
main...HEAD (or merge-base…HEAD for a different target branch) so
the whole branch is re-read for cross-page issues before opening a PR. Do
not treat phases 0–3 alone as the final check.
Run in order (mandatory for agents):
main: git diff --name-only main...HEAD; for another target:
BASE=$(git merge-base <target-branch> HEAD) then
git diff --name-only $BASE...HEAD, as in Phase 0.5). Include
renames; build the old → new table (source and published) per Phase
0.#) or List 2 (old path with #...) per
Phase 0.5.aliases), then Phase 2 (List 1), then
Phase 3 (List 2) with no guessing—as in the sections below.docker buildx bake validate. The Definition of done above is met or you have explicit
defers for the remainder.main…HEAD (or the correct base) before a PR.Use a repository search (e.g. rg / your IDE) so nothing in the
allowed scope is only eyeballed.
Trees to include (at minimum): all of content/, plus data/ and
layouts/ when a migration can appear in config, link:-like fields,
shortcodes, or hardcoded path strings. Follow Vendored / generated rules in
AGENTS.md; do not edit disallowed files.
What to search for (repeat per row in the old side of the mapping):
manuals/.../old-segment/... or ../old-segment/.../page.md as your tree
uses; include variants that still appear in the repo./admin/.../old-slug/ in front matter, nav
url:, or https://docs.docker.com/... in allowed files—match the
file’s established pattern, per Conventions below.#... belong on List 2 for Phase 3 unless the whole link is
a pure path-only case.scripts/scope-pr-files.sh (if present) prints
PR_SCOPE_FILES only—it does not replace this sweep. Use it to build
the old → new table, not to list where inbound links were fixed.
The procedure below stays in this file. If a run produces a very large
old → new URL table, store that table in reference.md in this skill
directory and link it from the task summary, so the agent reads the long
mapping only when needed.
PR-scoped (typical for a single PR)
git diff / base...HEAD to know which
pages and renames the branch actually moves (PR_SCOPE_FILES). The old →
new mapping and List 1 / List 2 for this migration are defined from
that work, not from unrelated areas.content/ (and config, shortcodes, layouts, per Conventions)—for inbound
links and fields whose target is an old path or URL in this PR’s
mapping. Inbound stragglers are often in files the PR never touched; finding
them is in scope for this migration. PR_SCOPE_FILES as a hard limit on
which files you may save for inbound link repairs (unless
project policy for a given PR says otherwise; then follow policy and
defer out-of-PR file fixes).content/strawberry/... should not “fix the whole site”; it should
still fix a link under mango/… that points at an old strawberry/… path
in the mapping, and should not chase mango/-only issues that do
not involve those old targets.Full-site (complete migration after the PR)
link: fields if policy allows. #anchor → new #…). If the user has not given an
explicit new target, ask, defer, or stop per AGENTS.md; never
infer, autocomplete, or substitute a plausible fragment from the target page’s
heading list. That rule applies in every phase, including after validation
in Phase 3.aliases (redirects)aliases are URLs that redirect to this page./), and
trailing / when that matches existing pages in the same area.data/redirects.yml, only add entries when
project policy requires it; avoid duplicating the same old URL in
aliases and redirects.yml unless maintainers do.../section/page.md) with
.md, following COMPONENTS.md examples, unless the file already
uses an established pattern (e.g. some link: or nav fields use published
paths without manuals or .md — match the surrounding file).content/manuals/... often use the full /manuals/... path; published
URLs omit the manuals segment—do not confuse the two when fixing links.ref /
relref, link fields in shortcode args, or hardcoded
docs.docker.com / path strings. Grep for old paths, slugs, and fragments
under layouts/shortcodes/ (and layouts/_default/ if partials build nav).#fragment values: after the user supplies a new fragment, it should
match the target page’s generated heading ID (Hugo slugification; see
CLAUDE.md / AGENTS.md). The agent still validates (see Phase 3) and
must not “pick” a different id from the page to replace a bad answer—No
guessing.[Text](#section-id).#fragment must still be checked against the
target file. Validate fragments in shortcodes the same way as in body
Markdown./latest/ aliases
rules—never leave two version files both owning /latest/.refLinksErrorLevel, disablePathToLower).disablePathToLower: true, filesystem path case appears in
URLs—directory and link casing must match (e.g. setup vs Setup).#fragment. That split feeds
List 1 and List 2 in Phase 0.5 and drives Phase 2 ordering (see
there).Set PR_SCOPE_FILES (Git scope for PR mode)
main, use the same triple-dot form as
review-changes:git diff --name-only main...HEAD BASE=$(git merge-base <target-branch> HEAD)git diff --name-only "$BASE"...HEAD content/ (and other trees per Conventions). Build checklists (see Modes for sweep vs area-of-work):
#... fragment (e.g. …/banana.md in the repo’s link style for that
file).#... fragment
(e.g. …/banana.md#anchor or the published-style equivalent in context). The
same old path string may appear on both List 1 and List 2 for
different links; duplication across the two lists is OK.../path/banana.md vs
root-anchored) per the conventions in this doc and the surrounding
file’s established pattern. Agents compare and skip List 2 links in the
List 1 pass using the same representation rules.Out of scope for the lists: only include references whose old target is in this run’s mapping. Do not build List 1/2 for unrelated mango/ (or other) problems unless those links also target an old path that this migration renames. Defer those issues separately (see Modes).
aliases (old published URLs)aliases for every real
former public URL..md paths). Do not apply the same bulk path replacement to
links that appear in List 2 (old path with #...) during this
sub-step—leave every List 2 link unchanged for now.content/ plus config) or print a clear list of
all remaining List 2 entries. Those links should still point at the
old path and old fragment until Phase 3. link: and similar so nav and grids are not left on old slugs. Apply the
List 1 / List 2 rules there too: path-only old references first; defer
fragment-bearing rewrites in line with List 2 until Phase 3.PR_SCOPE_FILES, per Modes. Log and defer (do not “fix”)
unrelated stragglers. If policy forbids out-of-PR file edits, defer per step 1
of Phase 0.5. Prerequisites: Phase 2 has updated List 1; List 2 still lists old
path + #... (unchanged) for this migration. See Modes for which files
may be edited; No guessing applies.
#anchor (in the
agreed representation), so nothing is hidden before the loop.old-path#oldAnchor (or process in the order the user
prefers, one at a time): #newAnchor per
project conventions. #newAnchor (if any) exists as a real heading
/ generated id on that page, per CLAUDE.md / AGENTS.md (same rules
as the rest of the site). Do not replace the user’s fragment with a
“better” one from the file. #newAnchor not found on
the page): warn clearly (what failed: path vs missing fragment), then
ask again for a corrected path and/or fragment. Repeat until
validation passes or the user defers / drops the fragment (per
AGENTS.md). Never guess a new fragment to fix the problem. old-path#oldAnchor to the user-approved new-path#newAnchor
(respect each file’s link style; include shortcodes/layouts on the same
sweep surface as Phase 2).This skill includes a small scope helper so agents do not re-derive Git
recipes. See scripts/scope-pr-files.sh — it prints
paths in PR scope for a given target branch (default main).
docker buildx bake validateUse the Definition of done in Agent: required procedure (do not skip)
as the final bar: validate must pass, and the sweep must be clean for
plain and #fragment old-path references, or the remainder must be
explicitly deferred in Phase 3 per AGENTS.md / the user. Mid-run,
Phase 2 may still leave List 2 links unchanged until Phase 3; that
intermediate state is not the finished migration.
© docker, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file (scripts) in .agents/skills/migrate-content-ia of docker/docs.
Open the folder on GitHubat commit 65aa5cd
Migrate Content Ia next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Migrate Content Ia this skilldocker/docs | 4.7k | — | ~5.1k | Automated safety check: Pass | Apache-2.0 | |
| Using Docs Kitlobehub/lobe-ui | 2.2k | — | ~2.8k | Automated safety check: Pass | MIT | |
| Mintlify Previewlatitude-dev/latitude-llm | 4.7k | — | ~813 | Automated safety check: Pass | MIT | |
| Portable Text Serializationsanity-io/agent-toolkit | 187 | 1 repos | ~1.1k | Automated safety check: Pass | MIT | |
| System Bridge Landing Content Updatestimmo001/system-bridge | 356 | — | ~313 | Automated safety check: Pass | Apache-2.0 | |
| Hugo To Markdownsickn33/agentic-awesome-skills | 47k | 1 repos | ~3.3k | Automated safety check: Pass | Apache-2.0 |
lobehub/lobe-ui
Set up and author a documentation site with @lobehub/docs-kit (the lobedocs CLI, React Router + Vite static docs used by ui.lobehub.com).
latitude-dev/latitude-llm
Run the public Mintlify product docs site locally for live preview.
sanity-io/agent-toolkit
Render and serialize Portable Text to React, Svelte, Vue, Astro, HTML, Markdown, and plain text.
timmo001/system-bridge
Update the System Bridge marketing landing page in the Astro + Starlight docs site.
sickn33/agentic-awesome-skills
Convert Hugo documentation sites and Hugo-managed content into standard Markdown.
mycelium-io/mycelium
Regenerate the HTML docs site (CLI Reference, Configuration, content sections) from decorators, the pydantic config schema, and markdown source files
docker/docs
Audit a documentation site for agent-friendliness: discovery, markdown delivery, crawlability, semantic structure, machine-readable surfaces, and content legibility.
docker/docs
Write or edit reader-facing technical prose for immediate comprehension.
docker/docs
Clone a dockersamples Labspace repo, extract learning objectives and module structure from labspace.yaml, and produce a Hugo guide page under content/guides/ with correct frontmatter…
docker/docs
Curate noteworthy Docker launches from documentation pull requests merged during a requested period.
docker/docs
Fix a single GitHub issue end-to-end: triage, research, write the fix, review, and create a PR.
docker/docs
Maintain and follow up on a single Docker documentation pull request that you own or are responsible for updating.
Works with
Categories
Handle Hugo docs information-architecture moves: discover old vs new URLs, add front matter aliases (Phase 1), update in-repo links (Phase 2), interactive List 2 resolution and fragment validation…. Migrate Content Ia is an agent skill from docker/docs, published by the product's own GitHub organization. Handle Hugo docs information-architecture moves: discover old vs new URLs, add front matter aliases (Phase 1), update in-repo links (Phase 2), interactive List 2 resolution and fragment validation (Phase 3; no guessing).
Migrate Content Ia fits situations like: redirects for moved pages; fix links after content move; PR-scoped link/anchor pass; aliases for old URLs.
Run `npx skills add docker/docs --skill migrate-content-ia -a claude-code`. Or copy the skill folder (.agents/skills/migrate-content-ia in docker/docs) into .claude/skills/migrate-content-ia in your project. Claude Code loads it when a task matches its description.
Run `npx skills add docker/docs --skill migrate-content-ia -a codex`. Or copy the skill folder (.agents/skills/migrate-content-ia in docker/docs) into .agents/skills/migrate-content-ia in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add docker/docs --skill migrate-content-ia -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/migrate-content-ia, .gemini/skills/migrate-content-ia, .github/skills/migrate-content-ia and .opencode/skills/migrate-content-ia in your project.
Going by SKILL.md and its folder, Migrate Content Ia needs a shell for the scripts in its folder and the command-line tools its instructions call (git and docker). Our summary lists: A Bash shell; Docker.
SKILL.md names 1 domain. In commands or code: docs.docker.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Migrate Content Ia is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 5.1k tokens (SKILL.md is roughly 20k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Migrate Content Ia: Using Docs Kit (lobehub/lobe-ui, 2.2k stars), Mintlify Preview (latitude-dev/latitude-llm, 4.7k stars), Portable Text Serialization (sanity-io/agent-toolkit, 187 stars) and System Bridge Landing Content Updates (timmo001/system-bridge, 356 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
docker (a GitHub organization, an official publisher) maintains it in docker/docs, which has 4,666 GitHub stars. The repository holds 13 skills in this directory. The repository was last updated on October 7, 2026.
Source: docker/docs on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.