update-docs
Generate docs/ markdown documentation from real source code; no site generator lock-in
SKILL.mdupdate-docs/SKILL.md
GitHubGoal
Create the docs/ directory in plain markdown — readable on GitHub or any markdown viewer without a site generator, nav config, or complex UX. For a VitePress docs site, use /update-vitepress-docs.
Scope
- Set up
docs/for a single project and for a monorepo - Create/update markdown with real content from the source code
docs/index.mdis the only nav — one grouped section per real docs directory, every page exactly once; a section group is the sidebar, andreferences/navigation.mdis the contract- Supports
update-features-md(workflowfeatures-md) with a separateproject/featurespage - Reuse raw findings that skills persist under
.devin/temp/report/<workspace>/via/create-report-to-dot-agents— e.g./deep-test website,/watch-browser fix— as input for updating docs - References: Development Pages Reference
Execute
1. Prepare
Goal: Identify the project type, distribution type, and docs scope
- Run
/check-should-updateif there are git changes - Run
/check-monorepoto detect a monorepo - Determine the docs type per the detection in
references/<type>.md— the file structure varies by project shape:lib/library: hasexports/main+types, nobin; users install via a package manager —references/library.mdsdk: client library for a service/API (has a client entry,*_URL/*_KEYenv) —references/sdk.mdtool: dev/internal tool, toolkit, generator, runner (serves developers/CI, not end users) —references/tool.mdcli: hasbinor a CLI framework inpackage.json—references/cli.mdwebsite: deployable web app (framework +dev/buildoutput) —references/website-guide.mdopen-source: no auth, open license —references/open-source.mdopensource-product: OSS that is an end-user product (app/framework/platform with releases + community) —references/opensource-product.mdproduct: has auth,private: true, commercial license —references/product.mdsaas-product: hosted SaaS (dashboard, billing, multi-tenant) —references/saas-product.mdmonorepo: layered on the base type —references/monorepo.md
- Read
package.jsonto identify the project type (CLI, Library, Web, Product) — if CLI, use theclidocs type; if published as a package, use thelibrarydocs type; if a deployable web app, use thewebsitedocs type
2. Ensure Docs Structure
Goal: Have a base directory structure for markdown docs
Generated-docs detection: If.gitignorelistsdocs/ordocs/contains generated markers (manifest.json,sources.json, build output) —docs/is generated output; un-ignore only project-owned paths in.gitignore(docs/*+!docs/index.md+!docs/<section>/) and write project docs only to committable paths — never write under generated dirs- Create
docs/at the root (always, notapps/docs/) - Do not create
docs/.vitepress/— site config is in the scope of/update-vitepress-docs - Create the page structure:
docs/index.mddocs/project/overview.mddocs/project/features.mddocs/features/index.mddocs/getting-started/quickstart.mddocs/getting-started/installation.mddocs/getting-started/usage.mddocs/development/setup.mddocs/development/architecture.mddocs/development/workflows.mddocs/development/testing.mddocs/development/deployment.mddocs/development/troubleshooting.mddocs/references/docs/roadmap/index.md- extensibility sections (per the project's real content):
docs/guides/index.md+docs/guides/<topic>.md,docs/examples/index.md+docs/examples/<name>.md,docs/integrations/index.md,docs/plugins/index.md,docs/adapters/index.md,docs/ecosystem/index.md— create only sections that have real content, never empty placeholders; a section without a directory must not be linked from index/nav/sidebar
- For a monorepo, add
docs/project/workspaces.mdanddocs/workspaces/<name>.md - Add type-specific pages from
references/<type>.md, e.g.docs/commands/forcli,docs/references/contributing.mdforopen-source,docs/references/auth.md+admin.md+pricing.mdforproduct(no dedicated template; fall back totemplates/content-page.md),references/api.md+comparison.md+glossary.mdforlibrary,references/endpoints.md+errors.mdforsdk,operations/forsaas-product,guides/foropensource-product
3. Write Docs Nav
Goal:
docs/index.mdis the only nav — every page reachable, each one exactly once
- Read
references/navigation.md— group order, what belongs in each group, and the placement rules - Use
templates/docs-index.md— title, one-paragraph description, groups of- [Page](path.md) — what it answers - Groups follow the base order Project → Workspaces → Getting Started → Features → Development → Operations → References → Roadmap; a group with no pages is skipped, never created empty
- One door per concept — a group index (
features/index.md) is its only nav line; the exhaustiveproject/features.mdis linked from that index, never listed twice - A family stays in the group that names it —
project/workspaces.md+workspaces/<name>.mdboth live under Workspaces - Relative
.mdlinks only — never a directory (references/) and never a site route (/references/api)
4. Write Content Pages
Goal: Content from real data in the project
- Every page uses its dedicated template from
templates/index.md— fall back totemplates/content-page.mdonly for pages without a dedicated template project/overview.md: usetemplates/overview.md— summarize the project, architecture, tech stack, key conceptsproject/features.md: usetemplates/features.md— list all features fromupdate-features-mdor analysisgetting-started/quickstart.md: usetemplates/quickstart.md— the shortest path, <5mingetting-started/installation.md: usetemplates/installation.md— installation steps, dependency checksgetting-started/usage.md: usetemplates/usage.md— real usage examplesdevelopment/setup.md: dev environment setupdevelopment/architecture.md: usetemplates/architecture.md— architecture, conventions, boundariesdevelopment/workflows.md: usetemplates/workflows.md— slash commands, scripts, CI/CDdevelopment/testing.md: usetemplates/testing.md— how to run tests, lint, typecheck +## Latest Resultsfrom real runner artifacts under.devin/temp/report/<workspace>/(Vitestvitest-*.json/unit-test-*.md, Playwrightplaywright-*.json/e2e-*.md,coverage-*) — never put exploratory results (browser-test-*,e2e-exploratory-*,uxui-*) in Latest Results; if there are no artifacts, write only the commands/runners partdevelopment/deployment.md: usetemplates/deployment.md— pipeline, secrets, rollbackdevelopment/troubleshooting.md: usetemplates/troubleshooting.md— symptom → fixreferences/: summarize references with their dedicated templates —api.md/configuration.md/changelog.md/faq.md/glossary.md/security.md/performance.md/migration.md/comparison.mduse the same-named template; the open-source type addscontributing.mdwithtemplates/contributing.md; the product type addsauth.mdwithtemplates/auth.md; the cli type addscommands/<name>.mdwithtemplates/commands.mdproject/decisions/NNNN-*.md: usetemplates/adr.md— one ADR per decision when architecture choices are non-obviousroadmap/index.md: usetemplates/roadmap.md— summarize the roadmap (Now/Next/Later)- monorepo:
workspaces/<name>.mdusestemplates/workspace.md
5. Integrate update-features-md
Goal: The existing-features page is accurate
- If invoked by
/update-features-md, feature data comes from routes/modules/schemas/API - Write
docs/project/features.mdas a markdown table - Each row has name, description, module, status
- Group by domain with headings or sub-sections
- No dropdowns; use plain headings and bullets
docs/features/index.mdis the Features nav door — one row per area linkingfeatures/<area>.md, plus a line to the exhaustiveproject/features.md
6. Content Quality
Goal: Content is readable, consistent, and non-duplicative
- Run
/deep-review - Check heading structure, frontmatter, links
- Fix duplication or placeholders
- ≤ ~150 lines per page — if longer, split into sub-pages and link them from index
6b. Drift Check
Goal: Docs do not lag behind the code
- Compare
project/features.md+references/api.mdagainst the real source —package.jsonexports/scripts,src/modules, routes - Any row absent from the code → delete or mark
deprecated; a new module without a row → add one - Compare commands in docs with
package.jsonscripts — never teach a command that doesn't exist - staleness: add
> Last verified: <YYYY-MM-DD>at the end of pages with frequently changing data (features, api, changelog)
7. Update References
Goal: Links are not broken
- Run
/update-references - Check internal links between pages in
docs/and links indocs/index.md— verify every link resolves to a real file (e.g. useSelect-Stringto find](and compare against the file listing; no broken links) - Update the README to link to the docs
Doc Skills
Goal: Dispatch per-file markdown docs work to the more detailed skill
| Domain | Topic | Skill |
|---|---|---|
agents-md |
Create/update root + workspace AGENTS.md |
/update-agents-md |
contributing-md |
Create/update CONTRIBUTING.md |
/update-contributing |
features-md |
Analyze features and write FEATURES.md |
/update-features-md |
readme-md |
Create README.md + LICENSE.md from a template |
/update-readme-md |
todo-md |
Manage TODO.md (add/read/enhance prompt) |
/update-todo-md |
usage-md |
Create/update USAGE.md from real code |
/update-usage-md |
Rules
1. Markdown Only
- Write content in plain markdown
- Never create HTML reports, interactive tables, or complex UX
- Tables may use markdown tables
- No Vue components or generator-specific syntax — pages must render correctly on GitHub
2. Docs Nav
docs/index.mdmust link to every real section, ordered perreferences/navigation.md- Every page appears exactly once; two pages for one concept get one door and an internal link, never two nav lines
- Each entry carries an em-dash line saying what the page answers
- Use relative links to
.mdfiles (e.g.project/overview.md) — no site-generator-style paths and never a directory link - Other pages link back to
index.mdor related pages with relative links when needed
3. Frontmatter
- Every markdown file must have frontmatter:
--- title: Page Title description: Short description --- - title uses Title Case
- description ≤ 120 characters
- optional keys:
since: <version>(new API),deprecated: <version>— use when docs specify the API surface
4. Feature Tables
docs/project/features.mduses the table| Feature | Description | Module | Status |
5. Language
- Markdown content uses the project's language or English
- Never mix languages within the same paragraph
6. No Workspace Duplicates
- A monorepo creates a single
docs/at the root - Never create
docs/inside each workspace - Workspace pages live at
docs/workspaces/<name>.md
7. Real Data
- Content must come from real source code
- Examples must run
- No placeholders or lorem ipsum
- Use /run-docs if needed
- Use /deep-review if needed
- Use /check-reference if needed
- Use /reframe if needed
- Use
/follow-single-of-sourceif needed
Expected Outcome
- A
docs/directory at the root with markdown pages for every section docs/index.mdis a TOC linking every page, directly readable on GitHubdocs/project/features.mdhas a features table fromupdate-features-mddocs/roadmap/index.mdhas Now/Next/Later fromtemplates/roadmap.md- Every file has frontmatter
- No HTML/complex UX or site-generator-specific syntax
- Links are correct and unbroken
- README updated with links to the docs