From docs-cockpit
Build or set up docs-cockpit from 0→1: create docs-cockpit.yaml, wire modules to specs/plans, add anchors, draft missing docs, and render the dashboard.
How this skill is triggered — by the user, by Claude, or both
Slash command
/docs-cockpit:docs-cockpit-buildThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
**The 7-phase workflow for building a project's module ↔ subtask ↔ spec/plan/RFC association system, from nothing (or from gaps) to a rendered dashboard.**
The 7-phase workflow for building a project's module ↔ subtask ↔ spec/plan/RFC association system, from nothing (or from gaps) to a rendered dashboard.
The hard part of a docs cockpit was never the rendering — it's the association: which subtask is backed by which plan section, which module's spec actually exists, which RFC explains a decision. That is cognitive work (search, read, judge), and trying to encode it in Python produced exactly the failure mode users reported: modules with no docs linkage, subtasks pointing nowhere, and no highlighted evidence for why a link exists. So the v1.0 north-star: cognition lives in skills; Python only renders. This skill is the cognition — it orchestrates four atomic methods (discovery / reasoning / dry-run / highlight) and a dialogue loop with the user, then hands a fully-anchored doc set to the rendering CLI.
One principle governs every phase: a wrong anchor is worse than a missing anchor. A missing anchor is an honest gap; a wrong one sends the user to irrelevant content and destroys trust in the whole dashboard. When in doubt, mark the gap and ask — never guess line numbers.
This skill is the orchestration layer — it tells you which phase to run when. The details live in references (do not restate them; read them when the phase needs them):
| Reference | Holds | Used by |
|---|---|---|
references/schema.md | frontmatter fields · subtask forms · code/doc anchor formats · file naming | Phase 3, 6 |
references/association-method.md | the 4 atomic methods (discovery / reasoning / dry-run / highlight) | Phase 1–4 |
references/operations.md | CLI bootstrap · config skeleton · upgrade | Phase 0 |
references/health-check.md | nine-department checkup methodology · three-part report template · five-bucket triage · HEALTH.md writing rules | Phase 5 (admission checkup), 6 (bucket landing) |
Default scope is the whole project — every module's spec/plan, every subtask's anchors. The user can narrow it ("only M07", "only the new sprint"); say so explicitly in Phase 1's output if scoped down.
docs-cockpit.yaml + installed CLI, so later phases have a config to build against.docs-cockpit.yaml in the repo root. Missing CLI → bootstrap per references/operations.md (uv → pipx → pip --user priority; tell the user, never install silently). Missing config → run docs-cockpit init, then fill the minimal skeleton (see operations.md · config section).references/operations.md (bootstrap + config skeleton).docs-cockpit.yaml + docs-cockpit --version succeeding.Codex / non-Claude agent adaptation — AGENTS.md anchor (idempotent). Codex-style agents don't load Claude Code hooks; they read the project-root AGENTS.md by convention. So this phase also plants a routing anchor there:
AGENTS.md for the substring docs-cockpit:begin (substring match — the actual marker line carries a managed-by suffix, so do NOT grep for the full <!-- docs-cockpit:begin --> literal).
AGENTS.md exists: append the block below at the end of the file. AGENTS.md doesn't exist: create it containing only the block.docs-cockpit:begin and docs-cockpit:end (inclusive of both marker lines) with the current template below (self-healing — refreshes stale blocks planted by older runs).Anchor block template (verbatim, including markers):
<!-- docs-cockpit:begin · managed by docs-cockpit-build Phase 0 · do not edit inside this block -->
## docs-cockpit
This project's documentation association (module ↔ subtask ↔ spec/plan/RFC anchors)
is managed by the docs-cockpit skill family. The `use-docs-cockpit` entry skill is
the router — consult it before any doc-association work. Routing summary:
- Build the association system (0→1, whole-project planning, fill anchor gaps)
→ `docs-cockpit-build` skill
- Refresh an existing association that drifted (post-refactor, stale anchors,
spec evolved) → `docs-cockpit-rebuild` skill
- Just re-render the dashboard HTML, no association change
→ CLI `docs-cockpit render`
Field formats and frontmatter schema: `references/schema.md` in the docs-cockpit plugin.
<!-- docs-cockpit:end -->
docs-cockpit lint gives the latter list for free (look for the subtask-missing-anchors issues in the lint output)).references/association-method.md).references/association-method.md).:lines, heading scan for #§N) (limit = end − start + 1, not the end line number — see Method 3 in references/association-method.md) and assign one of the 4 verdicts (accurate / partial / wrong / missing). partial → adjust the range now; wrong → re-run Phase 1+2 for that item or mark TODO. Never write an unverified line range.references/association-method.md); anchor syntax per references/schema.md.references/association-method.md).Entry step · admission baseline checkup(入院体检). Before presenting any association proposal, consolidate the findings Phases 1–3 already produced (lint issues, anchor verdicts, coverage gaps) into an admission checkup per references/health-check.md — quick mode, reusing what those phases measured rather than re-running checks:
docs/HEALTH.md — frontmatter per references/schema.md · health-report schema; writing rules (stable RX-NNN ids, real module ids only, anchors pre-verified by Method 3, checkup-day date) per health-check.md's HEALTH.md 写入规范 section.The admission checkup is not skippable — greenfield included. Creating new planned cards on an empty or just-cleaned board is still an admission: the newly drafted cards/docs are themselves checkup subjects — ① their frontmatter conformance, ④ whether each new card links a real upstream doc (ROADMAP / PRD / plan) or is an orphan, plus a wording pass on their desc/scope quality. Departments with no subject yet (e.g. anchor verdicts when no anchors exist) report N/A — N/A is a verdict, not a reason to skip the checkup. Always write the baseline HEALTH.md: a clean greenfield board honestly grades A, and that baseline is what the next rebuild checkup diffs against.
Never silently fix. Anything the validator rates error-level (a missing id, a placeholder id, a status×progress conflict) or any project-specific choice (id naming, sprint assignment, which doc kind a file should be) is the user's call — propose, explain, wait. You may auto-apply only mechanical, semantics-free fixes the user already approved as a class (e.g. "fix all whitespace-only issues").
Proposal presentation format (example):
【提议 3/12】 M07 「Job / Task FSM」 · subtask M07-S2 「worker 从队列取下一状态」
建议 anchor : @docs:docs/plans/2026-05-03-m07-fsm-plan.md#§4.2
高亮理由 : §4.2 第 88–104 行定义了队列消费循环和状态迁移触发条件 —— 正是该 subtask 的实现依据
预演 verdict: ✅ accurate
你的决定? accept / 调整 / skip
subtasks: object array vs body @code:/@docs: inline — exact syntax per references/schema.md; remember frontmatter wins over body, so don't mix forms in one doc (if the target doc already has both forms, frontmatter takes precedence — write only to the frontmatter form and leave the body section as is)). For each Phase 2 gap the user approved: draft the missing spec/plan with conforming frontmatter and file naming (both per references/schema.md), then link it from the owning module's docs:. New planned cards drafted here meet a minimum bar: a concrete desc, a scope section in the body, and a real upstream link (prd_ref or docs: to ROADMAP / PRD / plan — never a fabricated anchor). Omitting subtasks: on a planned card is the honest state (subtasks arrive when the module is brainstormed), not a lint-evasion trick — and the card still goes through the Phase 5 admission checkup like everything else.references/schema.md (subtask forms · anchor formats · frontmatter schema · file naming).docs: linkage.Checkup prescription landing(处方→subtask 闭环). Bucket decisions confirmed in Phase 5's checkup land here, alongside the anchor decisions:
sprint — write the prescription as a subtask (title per schema.md's 4 rules) carrying a @code: anchor at the problem location, under the module named by the prescription's module field; no owning module → ask the user before creating a dedicated health-debt module(「健康债」)to hold it. Sync the sprint-plan in_scope.backlog — draft a plan doc(file naming per references/schema.md · 文件命名约定); the prescription's anchors go into its evidence section, and conforming frontmatter puts it on the dashboard automatically.accepted — record in docs/HEALTH.md accepted_debts(item / reason / review date — ledger rules per health-check.md).watch — stays in docs/HEALTH.md prescriptions with bucket: watch; the next checkup verifies these first.now — already treated during Phase 5's dialogue(edit + re-render); nothing further lands here.docs-cockpit render and read the issue output. Any ❌/⚠️ traced to this build's edits → fix (loop back to the relevant phase for that item) and re-render. Pre-existing unrelated warnings: surface to the user, don't block on them.docs/index.html + docs/state.json, 0 warnings from this build's changes.Provides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.
npx claudepluginhub guohao1020/docs-cockpit --plugin docs-cockpit