@open-agent-toolkit/cli 0.3.22 → 0.3.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/assets/bundle-metadata.json +1 -1
  2. package/assets/docs/docs-tooling/add-docs-to-a-repo.md +3 -9
  3. package/assets/docs/docs-tooling/workflows.md +39 -5
  4. package/assets/docs/reference/cli-reference.md +1 -1
  5. package/assets/docs/reference/configuration.md +4 -2
  6. package/assets/public-package-versions.json +4 -4
  7. package/assets/skills/authoring-docs/SKILL.md +18 -8
  8. package/assets/skills/authoring-docs/references/guidance-sources.md +95 -0
  9. package/assets/skills/authoring-docs/references/information-architecture.md +121 -86
  10. package/assets/skills/authoring-docs/references/page-types.md +35 -7
  11. package/assets/skills/authoring-docs/references/review-rubric.md +12 -12
  12. package/assets/skills/authoring-docs/references/templates.md +54 -0
  13. package/assets/skills/authoring-docs/references/workflow.md +6 -1
  14. package/assets/skills/authoring-docs/references/writing-style.md +1 -1
  15. package/assets/skills/authoring-docs/scripts/resolve-guidance.mjs +53 -0
  16. package/assets/skills/oat-docs/SKILL.md +14 -28
  17. package/assets/skills/oat-docs-analyze/SKILL.md +39 -4
  18. package/assets/skills/oat-docs-analyze/references/analysis-artifact-template.md +12 -0
  19. package/assets/skills/oat-docs-analyze/references/legacy-scaffold-checks.md +16 -0
  20. package/assets/skills/oat-docs-apply/SKILL.md +20 -2
  21. package/assets/skills/oat-docs-apply/references/apply-plan-template.md +9 -0
  22. package/assets/skills/oat-docs-authoring/SKILL.md +21 -9
  23. package/assets/skills/oat-docs-authoring/references/lifecycle-boundaries.md +1 -2
  24. package/assets/skills/oat-docs-authoring/references/mkdocs-to-oat-fumadocs-refactor-guide.md +73 -0
  25. package/assets/skills/oat-docs-bootstrap/SKILL.md +96 -321
  26. package/assets/templates/docs-app-fuma/docs/contributing.md +6 -0
  27. package/assets/templates/docs-app-fuma/docs/getting-started.md +1 -1
  28. package/assets/templates/docs-app-fuma/next.config.js +5 -1
  29. package/dist/commands/config/index.d.ts.map +1 -1
  30. package/dist/commands/config/index.js +78 -1
  31. package/dist/commands/docs/analyze.js +1 -1
  32. package/dist/commands/docs/apply.js +1 -1
  33. package/dist/commands/docs/init/scaffold.d.ts.map +1 -1
  34. package/dist/commands/docs/init/scaffold.js +35 -2
  35. package/dist/config/oat-config.d.ts +5 -0
  36. package/dist/config/oat-config.d.ts.map +1 -1
  37. package/dist/config/oat-config.js +38 -4
  38. package/dist/config/resolve.d.ts.map +1 -1
  39. package/dist/config/resolve.js +1 -0
  40. package/package.json +2 -2
@@ -53,18 +53,18 @@ Production runbooks should be especially strong on operational safety.
53
53
  Public-facing docs should be especially strong on examples, accuracy, and
54
54
  audience boundary.
55
55
 
56
- | Area | 0 | 1 | 2 | 3 |
57
- | ------------------------ | --------------------------- | ---------------------- | --------------------------- | ---------------------------------------------------------- |
58
- | Purpose | No clear reason page exists | Purpose is implied | Purpose is stated | Purpose, reader, and outcome are clear |
59
- | Accuracy | Incorrect or invented | Partially accurate | Mostly accurate | Grounded and verified |
60
- | Structure | Hard to scan | Some headings | Clear sections | Predictable IA and strong headings |
61
- | Task support | Cannot complete task | Can partially complete | Can complete with some gaps | Can complete safely with verification |
62
- | Reference quality | Missing facts | Facts scattered | Most fields documented | Types, defaults, constraints, examples, errors documented |
63
- | Operational safety | Risky or absent | Mentions risk | Includes basic verification | Includes verification, rollback, escalation, failure modes |
64
- | Agent usefulness | Ambiguous | Some exact data | Mostly explicit | Exact commands, paths, constraints, and uncertainty |
65
- | Maintainability | Duplicated or stale | Hard to update | Mostly maintainable | Clear source of truth and generated markers where needed |
66
- | Public/internal boundary | Leaks or omits key context | Boundary unclear | Mostly appropriate | Correct assumptions and safe content |
67
- | Links and navigation | Broken or absent | Sparse | Useful | Strong cross-links and clear next steps |
56
+ | Area | 0 | 1 | 2 | 3 |
57
+ | ------------------------ | --------------------------- | ---------------------- | --------------------------- | ------------------------------------------------------------------------- |
58
+ | Purpose | No clear reason page exists | Purpose is implied | Purpose is stated | Purpose, reader, and outcome are clear |
59
+ | Accuracy | Incorrect or invented | Partially accurate | Mostly accurate | Grounded and verified |
60
+ | Structure | Hard to scan | Some headings | Clear sections | Reader-first [IA method](information-architecture.md) and strong headings |
61
+ | Task support | Cannot complete task | Can partially complete | Can complete with some gaps | Can complete safely with verification |
62
+ | Reference quality | Missing facts | Facts scattered | Most fields documented | Types, defaults, constraints, examples, errors documented |
63
+ | Operational safety | Risky or absent | Mentions risk | Includes basic verification | Includes verification, rollback, escalation, failure modes |
64
+ | Agent usefulness | Ambiguous | Some exact data | Mostly explicit | Exact commands, paths, constraints, and uncertainty |
65
+ | Maintainability | Duplicated or stale | Hard to update | Mostly maintainable | Clear source of truth and generated markers where needed |
66
+ | Public/internal boundary | Leaks or omits key context | Boundary unclear | Mostly appropriate | Correct assumptions and safe content |
67
+ | Links and navigation | Broken or absent | Sparse | Useful | Strong cross-links and clear next steps |
68
68
 
69
69
  ## Minimum Acceptable Scores
70
70
 
@@ -547,3 +547,57 @@ docs/
547
547
 
548
548
  - <Explicitly out-of-scope docs>
549
549
  ```
550
+
551
+ ## IA Proposal
552
+
553
+ Use for bootstrap or an existing-tree `--ia` analysis. This proposes structure;
554
+ it neither persists an IA decision nor materializes a preset. Feature and QA
555
+ validation page templates are not included; use the page-type guidance to
556
+ plan their content.
557
+
558
+ ````markdown
559
+ # IA Proposal: {surface}
560
+
561
+ ## Evidence and guidance
562
+
563
+ - Resolved sources, in order: {path/URL, provenance: explicit/conversation/shared/user/builtin}
564
+ - Local authority: {AGENTS/contributing paths and relevant rules}
565
+ - Repo signals: {manifests, navigators, bin, routers, IaC, e2e, docs, units}
566
+ - Readers and work contexts: {who must succeed at what}
567
+ - Entry key per track: {task/domain/capability/unit/command/page type}
568
+ - Page purposes: {one primary job per representative page}
569
+ - Verification overlay: {triad/agent-only/none and evidence}
570
+ - Size gate: {page count and amount of structure justified}
571
+ - Canonical facts elsewhere and links to preserve: {paths/URLs}
572
+ - Unresolved conflicts: {ask_user finding with source citations, or none}
573
+
574
+ ## Candidate A: {reader-facing name}
575
+
576
+ Nearest preset: {approved label}. Choose when: {signals and tradeoffs}.
577
+
578
+ ```text
579
+ {track-or-section}/
580
+ {page.md} — {page's one job}
581
+ {page.md} — {page's one job}
582
+ {track-or-section}/
583
+ {page.md} — {page's one job}
584
+ {page.md} — {page's one job}
585
+ {page.md} — {page's one job}
586
+ ```
587
+
588
+ Use a two-level tree and 5–8 representative page placements. For Flat Small,
589
+ first-level labels are grouped headings in one index, not new directories.
590
+
591
+ ## Candidate B: {alternative reader-facing name}
592
+
593
+ Nearest preset: {approved label}. Choose when: {different plausible signals}.
594
+
595
+ {Second two-level tree with 5–8 representative page placements and page jobs.}
596
+
597
+ ## Recommendation and open decisions
598
+
599
+ {Preferred candidate, evidence and tradeoffs. Ask only decision-changing
600
+ questions. Record an explicit choice before replacement or a second app.
601
+ Existing docs default to analyze → apply of approved recommendations.
602
+ No private exemplar text, copied external contents or unapproved moves.}
603
+ ````
@@ -80,7 +80,12 @@ Most docs serve one or more of these readers:
80
80
  - support engineer
81
81
  - AI agent making future changes
82
82
 
83
- Write pages for actual tasks, not org-chart abstractions.
83
+ Map personas to tracks by work context: consumers and CLI/API users usually
84
+ enter through tasks or contracts; maintainers through domains and operations;
85
+ product stakeholders through behavior; independent QA through validation;
86
+ agents through exact task inputs and checks. One person may use several tracks.
87
+ Use the five axes in [Information Architecture](information-architecture.md)
88
+ before naming a preset. Write pages for actual tasks, not org-chart abstractions.
84
89
 
85
90
  ## 5. Decide the Minimum Useful Set
86
91
 
@@ -93,7 +93,7 @@ Use notes for useful context, not ordinary tips.
93
93
  - Use one `#` heading per page.
94
94
  - Do not skip heading levels.
95
95
  - Use fenced code blocks with language identifiers.
96
- - Use `sh` for shell commands.
96
+ - Use `bash` for shell commands unless the example is POSIX-only (`sh`) or local repository conventions require another fence.
97
97
  - Use `txt` for command output.
98
98
  - Do not include shell prompts unless the prompt itself matters.
99
99
  - Use angle brackets for placeholders, such as `<environment>`.
@@ -0,0 +1,53 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { parseArgs } from 'node:util';
3
+
4
+ // Select inputs only. The consuming skill reads Markdown and checks Contents,
5
+ // local authority and conflicts; this helper never fetches or writes a source.
6
+ const { values } = parseArgs({
7
+ options: {
8
+ builtin: { type: 'string' },
9
+ 'ia-guidance': { type: 'string', multiple: true },
10
+ 'conversation-guidance': { type: 'string', multiple: true },
11
+ },
12
+ });
13
+ const explicit = values['ia-guidance'];
14
+ const conversation = values['conversation-guidance'];
15
+ if (explicit && conversation) {
16
+ throw new Error(
17
+ 'Use one explicit source list; reconcile argument/conversation disagreement with the user first.',
18
+ );
19
+ }
20
+ const input = JSON.parse(readFileSync(0, 'utf8'));
21
+ if (input.status !== 'ok' || input.key !== 'documentation.guidance') {
22
+ throw new Error(
23
+ 'Expected successful oat config get documentation.guidance --json output.',
24
+ );
25
+ }
26
+ let locations;
27
+ let source;
28
+ if (explicit || conversation) {
29
+ locations = explicit ?? conversation;
30
+ source = explicit ? 'explicit' : 'conversation';
31
+ } else if (input.value !== null && input.value !== undefined) {
32
+ if (!['shared', 'user'].includes(input.source)) {
33
+ throw new Error(
34
+ `Unsupported documentation.guidance config source: ${input.source}`,
35
+ );
36
+ }
37
+ locations = Array.isArray(input.value) ? input.value : [input.value];
38
+ source = input.source;
39
+ } else {
40
+ locations = [values.builtin];
41
+ source = 'builtin';
42
+ }
43
+ if (
44
+ !locations.length ||
45
+ locations.some((location) => typeof location !== 'string' || !location.trim())
46
+ ) {
47
+ throw new Error(
48
+ 'Guidance requires non-empty path/URL strings (or --builtin for fallback).',
49
+ );
50
+ }
51
+ process.stdout.write(
52
+ `${JSON.stringify({ sources: locations.map((location) => ({ location: location.trim(), source })) }, null, 2)}\n`,
53
+ );
@@ -6,7 +6,7 @@ disable-model-invocation: false
6
6
  user-invocable: true
7
7
  allowed-tools: Read, Glob, Grep, AskUserQuestion
8
8
  metadata:
9
- version: 1.0.6
9
+ version: 1.0.7
10
10
  ---
11
11
 
12
12
  # OAT Docs
@@ -89,29 +89,15 @@ Read the user's question from `$ARGUMENTS`. If no question was provided or the q
89
89
 
90
90
  > "What would you like to know about OAT? I can help with workflows, CLI commands, skill authoring, configuration, project lifecycle, and more."
91
91
 
92
- Classify the question into one or more topic areas to guide the search:
93
-
94
- | Topic Area | Docs Path | Key Content |
95
- | ---------------- | --------------------------------------------------------------- | -------------------------------------------- |
96
- | Getting started | `getting-started/quickstart.md`, `getting-started/bootstrap.md` | Installation, first project setup |
97
- | Concepts | `getting-started/concepts.md` | Core OAT concepts and terminology |
98
- | CLI commands | `reference/cli-reference.md` | Full CLI command reference |
99
- | Tool packs | `getting-started/tool-packs.md` | Installing and managing skill packs |
100
- | Skills | `contributing/skills.md` | Skill authoring, SKILL.md format |
101
- | Workflows | `workflows/projects/` | Project lifecycle, state machine, artifacts |
102
- | Ideas | `workflows/ideas/` | Idea capture and brainstorming |
103
- | Provider sync | `provider-sync/` | Multi-provider sync, config, commands |
104
- | Documentation | `docs-tooling/` | Docs analysis and apply workflows |
105
- | Contributing | `contributing/` | Code contributions, design principles, hooks |
106
- | File locations | `reference/file-locations.md` | Where OAT puts things |
107
- | Directory layout | `reference/oat-directory-structure.md` | `.oat/` and `.agents/` structure |
108
- | Troubleshooting | `reference/troubleshooting.md` | Common issues and fixes |
92
+ Read `DOCS_ROOT/index.md` and its `## Contents` section. Derive a temporary topic map from the installed labels, summaries, and link targets; do not assume OAT's repository layout or a fixed set of topic paths. Choose the entries that match the question and descend through their authored `index.md` Contents maps when needed. Resolve each link relative to its containing file and verify it exists before reading it.
93
+
94
+ If the installed index has no usable Contents or a linked target is missing, report that specific stale or incomplete installation. Search within `DOCS_ROOT` for the requested terms to find existing evidence, and recommend updating the installed docs when appropriate. Never invent a replacement path or fall back to the repository.
109
95
 
110
96
  ### Step 3: Search and Read Documentation
111
97
 
112
98
  Based on the topic classification:
113
99
 
114
- 1. **Read the most relevant docs file(s)** — start with the primary match from the topic table. All paths are relative to `DOCS_ROOT` (`~/.oat/docs/`).
100
+ 1. **Read the most relevant docs file(s)** — start with the primary match from the topic map derived in Step 2. All paths are relative to `DOCS_ROOT` (`~/.oat/docs/`).
115
101
  2. **Search for specific terms** — if the question mentions specific concepts, commands, or features, use Grep to find mentions across `~/.oat/docs/`.
116
102
  3. **Follow cross-references** — if the primary doc references other pages, read those for complete context.
117
103
  4. **Check the index** — read the `index.md` of relevant directories to discover additional relevant pages.
@@ -143,7 +129,7 @@ Frame these as suggestions, not automatic actions. Let the user decide.
143
129
  ```
144
130
  Based on the docs, here's how OAT project workflows work: [answer]
145
131
 
146
- You can read more in `workflows/projects/lifecycle.md`.
132
+ Cite the installed workflow page discovered through Contents.
147
133
 
148
134
  Would you like me to:
149
135
  - Start a new project? (I'd invoke oat-project-lite for single-sitting work, oat-project-brief for one delivery planned as a Project Brief, oat-project-goal for an outcome delivered over several milestones, or oat-project-quick-start for a larger quick workflow)
@@ -190,7 +176,7 @@ Both create a project directory under your projects root
190
176
  state.md, plan.md, and implementation.md; quick and spec-driven modes also use
191
177
  discovery.md.
192
178
 
193
- See: workflows/projects/lifecycle.md, getting-started/quickstart.md
179
+ See: the actual installed workflow and getting-started pages found through Contents.
194
180
 
195
181
  Would you like me to create a project for you?
196
182
  ```
@@ -203,20 +189,20 @@ Would you like me to create a project for you?
203
189
 
204
190
  ```
205
191
  Tool packs are bundles of related OAT skills that you install together.
206
- There are four packs:
192
+ Describe the packs listed by the installed tool-pack documentation, for example:
207
193
 
208
- - **core** — Diagnostics and docs skills (oat-doctor, oat-docs).
209
- Always installed at user level. 2 skills.
194
+ - **core** — Diagnostics and docs skills.
195
+ Read the installed docs for scope and current membership.
210
196
  - **workflows** — Project lifecycle skills (discover, plan, implement,
211
- review, PR). 26 skills total.
212
- - **ideas** — Brainstorming and idea capture skills. 4 skills.
197
+ review, PR).
198
+ - **ideas** — Brainstorming and idea capture skills.
213
199
  - **utility** — Cross-cutting tools (docs analysis, code review,
214
- skill creation). 9 skills.
200
+ skill creation).
215
201
 
216
202
  Install with: oat init tools
217
203
  Manage with: oat tools list, oat tools update, oat tools outdated
218
204
 
219
- See: getting-started/tool-packs.md
205
+ See: the installed tool-pack page discovered through Contents.
220
206
 
221
207
  Would you like me to check which packs you have installed? (I'd run /oat-doctor --summary)
222
208
  ```
@@ -1,11 +1,12 @@
1
1
  ---
2
2
  name: oat-docs-analyze
3
3
  description: Run when you need to evaluate documentation structure, navigation, and coverage against the OAT documentation contract. Produces a severity-rated analysis artifact for oat-docs-apply.
4
+ argument-hint: '[target] [--ia] [--ia-guidance <path|url>]'
4
5
  disable-model-invocation: true
5
6
  user-invocable: true
6
- allowed-tools: Read, Write, Bash(git:*), Bash(oat docs nav sync --check:*), Glob, Grep, AskUserQuestion, Task
7
+ allowed-tools: Read, Write, Bash(git:*), Bash(oat config:*), Bash(oat docs nav sync --check:*), Bash(pnpm:*), Bash(bash:*), Bash(jq:*), Bash(node:*), Bash(mkdir:*), Bash(date:*), Bash(echo:*), Bash(cd:*), Bash(pwd:*), Glob, Grep, AskUserQuestion, Task
7
8
  metadata:
8
- version: '1.6.2'
9
+ version: '1.7.0'
9
10
  ---
10
11
 
11
12
  # Docs Analysis
@@ -85,6 +86,38 @@ When executing this skill, provide lightweight progress feedback so the user can
85
86
 
86
87
  ## Process
87
88
 
89
+ ### Shared authoring method and optional IA proposal
90
+
91
+ Independently probe each exact `authoring-docs/SKILL.md` in order:
92
+ `${SKILL_DIR}/..` from the loaded skill (`SKILL_DIR` is the absolute directory
93
+ containing that loaded `SKILL.md`), `${HOME}/.agents/skills`, then
94
+ `<repo-root>/.agents/skills`. Bind the first matching `authoring-docs` directory
95
+ once as `AUTHORING_DOCS_ROOT`; load `${AUTHORING_DOCS_ROOT}/SKILL.md` and use
96
+ that same root for every authoring-docs reference and script, never ambient
97
+ discovery. If none is found, name `authoring-docs`, stop this handoff, and give
98
+ the intended-scope recovery command: `oat tools install docs --scope <user|project>`
99
+ or `oat tools update --pack docs --scope <user|project>`.
100
+
101
+ Always use its landing-page contract, section entries and one-purpose-per-page
102
+ rule for the quality pass even without `--ia`. For IA work, read
103
+ `${AUTHORING_DOCS_ROOT}/references/guidance-sources.md` and use the source-aware config-get
104
+ interface/helper: explicit `--ia-guidance` or conversation → repo → user →
105
+ built-in. Preserve selected source order and cite locators/provenance in the
106
+ analysis artifact. External Markdown packs require `index.md` and `## Contents`;
107
+ non-repo inputs stay read-only and private contents never enter the artifact.
108
+
109
+ `--ia` is a skill argument, not a CLI docs command. It adds the shared IA Proposal
110
+ to the **same analysis artifact and existing artifact-review loop**. Read manifests,
111
+ UI navigators/journeys, CLI `bin`, routers, IaC, `e2e/`/`.maestro/`, existing docs
112
+ and independent monorepo units. Ask only decision-changing questions about reader
113
+ work contexts, independent verification, canonical facts and link survival.
114
+ Use the five axes before presets and show two plausible two-level trees with
115
+ 5–8 representative page placements each, page jobs, nearest approved presets
116
+ and tradeoffs. A UI alone does not justify Product/Engineering/QA; size chooses
117
+ depth, not audience. For an existing tree respect AGENTS/contributing authority;
118
+ conflicts are `ask_user`, with both source citations. Propose only: no IA
119
+ persistence, restructure action or scaffold materialization in this stage.
120
+
88
121
  ### Step 0: Resolve Docs Target and Analysis Mode
89
122
 
90
123
  Determine the documentation root using explicit docs-app evidence before generic
@@ -162,6 +195,8 @@ Capture the evidence sources that will justify later findings and recommendation
162
195
  - existing `index.md` trees and repeated directory patterns
163
196
  - exact missing or stale paths, commands, and page references
164
197
 
198
+ For framework apps, also read [Legacy scaffold checks](references/legacy-scaffold-checks.md). Apply those checks to the actual installed app, cite the observed file and source contract, and report discrepancies in Findings and Recommendations. These are read-only checks, not bootstrap post-patches. Do not change app-shell configuration during analysis or assume docs-apply can edit it; identify the manual upgrade needed when outside apply's current scope.
199
+
165
200
  Do **not** infer docs structure conventions from a tiny sample of pages when the broader
166
201
  tree or config disagrees.
167
202
 
@@ -265,8 +300,8 @@ For each evaluated page or directory:
265
300
  syntax intentionally shown inside inline code, fenced examples, or template
266
301
  snippets.
267
302
  4. Check Markdown hygiene: opening code fences need language identifiers; shell
268
- examples should follow local fence conventions, defaulting to `sh` unless
269
- local guidance uses `bash` or the block needs Bash-only syntax.
303
+ examples should follow local fence conventions, defaulting to `bash` unless
304
+ the example is POSIX-only (`sh`) or local guidance requires another fence.
270
305
  5. Flag empty headings, multiple document-level H1s outside intentional imported
271
306
  README contexts, overlong frontmatter descriptions when local guidance
272
307
  defines a limit, ellipsis-truncated descriptions, and README-copy metadata
@@ -15,6 +15,18 @@ oat_analysis_commit: { commitHash }
15
15
  **Surface Type:** {mkdocs-app|oat-fumadocs-app|docs-tree|root-markdown}
16
16
  **Commit:** {short-hash}
17
17
 
18
+ ## IA guidance and proposal
19
+
20
+ - Selected sources in order: {locator + explicit/conversation/shared/user/builtin provenance}
21
+ - Resolved index entries: {entry paths/URLs; external Markdown has index.md + Contents}
22
+ - Local authority: {AGENTS/contributing source citations}
23
+ - Conflicts/unreadable sources: {ask_user with both citations, or none}
24
+ - IA proposal: {when --ia, embed the shared authoring-docs IA Proposal template:
25
+ two two-level trees, 5–8 placements each, page jobs, nearest approved presets,
26
+ evidence and tradeoffs; otherwise not requested}
27
+
28
+ Do not copy private guidance contents or persist an IA decision from this report.
29
+
18
30
  ## Summary
19
31
 
20
32
  - **Files evaluated:** {N}
@@ -0,0 +1,16 @@
1
+ # Legacy scaffold checks
2
+
3
+ Evaluate existing framework apps against the current contracts below. A match produces an evidence-backed finding in the analysis artifact, never an automatic rewrite. Cite the actual app path and line, the missing contract, confidence and a specific repair. Respect intentional user customization; when intent is unclear, use `ask_user`.
4
+
5
+ | Observed older shape | Finding and repair | Contract source |
6
+ | ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- |
7
+ | Fumadocs `next.config.js` replaces `createDocsConfig` with `createMDX()({ reactStrictMode: true, turbopack: { root: __dirname } })` | High: static-export settings are missing and `__dirname` is invalid in ESM. Recommend a manual app-config upgrade to `createDocsConfig({ basePath, turbopack: { root: dirname(fileURLToPath(import.meta.url)) } })`, preserving `output: 'export'`, `trailingSlash`, `images.unoptimized`, base path and client environment. Verify the installed docs-config supports forwarding the root first. | `@open-agent-toolkit/docs-config` factory and the current Fumadocs template |
8
+ | Layout lacks Next `metadata`, or site title differs between branding, metadata and authored headings | Medium: site identity or document metadata is inconsistent. Report exact mismatches; titles belong in layout metadata and branding, not `createDocsConfig`. | Fumadocs layout template and Next metadata export |
9
+ | Getting Started has an empty description, bare commands with no working directory, or claims lint runs when package scripts disable it | Medium: setup guidance disagrees with package scripts or page metadata. Recommend corrected prose backed by the actual scripts. | Rendered scaffold package scripts and page frontmatter |
10
+ | Node prerequisite is a fixed old major or tells readers to guess from repo pins | Medium: compare `.nvmrc` first, then root `package.json` `engines.node`; quote the detected requirement. When neither exists, disclose the CLI minimum rather than claiming a repo pin. | Repository Node pin and current scaffold renderer |
11
+ | Authored `docs/index.md` says it is generated, or contributing lacks the generated-files boundary | Medium: distinguish authored `docs/index.md` from the generated app-root manifest. Document committed `docs/**/meta.json` and `oat docs nav sync` separately. | `oat docs generate-index` and `oat docs nav sync` |
12
+ | Contents links omit `.md` despite real Markdown targets | Medium: recommend `.md`-suffixed source links, which the build transforms into routes. | Authored Contents contract and docs-transforms links plugin |
13
+ | Contributing duplicates agent runtime rules rather than pointing to app-root `AGENTS.md` | Low: recommend consolidating runtime instructions into the existing agent guidance after approval; preserve custom rules. | Docs-app guidance and contributing audience boundary |
14
+ | MkDocs setup says `setup-docs.sh` creates a virtual environment, config calls `tooling` an object, or index points at an assumed `docs/index.md` | Medium: verify the actual script and `.oat/config.json`. The scaffold installs with the selected Python, uses a framework string, and seeds index/config as `mkdocs.yml`. | MkDocs setup script, documentation schema and scaffold config |
15
+
16
+ A user-owned dynamic app may intentionally omit static export. Do not apply a static-export finding to it without evidence that static output is required. Likewise, verify commands and filenames against the target repository; these patterns identify discrepancies, not authority to overwrite customization.
@@ -3,9 +3,9 @@ name: oat-docs-apply
3
3
  description: Run when you have a docs analysis artifact and want to generate or update documentation structure and content. Creates a branch, applies approved changes, and optionally opens a PR.
4
4
  disable-model-invocation: true
5
5
  user-invocable: true
6
- allowed-tools: Read, Write, Edit, Bash(git:*), Bash(gh:*), Glob, Grep, AskUserQuestion
6
+ allowed-tools: Read, Write, Edit, Bash(git:*), Bash(gh:*), Bash(oat:*), Bash(pnpm:*), Bash(bash:*), Bash(jq:*), Bash(mkdir:*), Bash(date:*), Bash(echo:*), Bash(cd:*), Bash(pwd:*), Glob, Grep, AskUserQuestion
7
7
  metadata:
8
- version: '1.4.3'
8
+ version: '1.4.5'
9
9
  ---
10
10
 
11
11
  # Docs Apply
@@ -200,6 +200,24 @@ If branch creation fails because of unrelated local changes, ask the user to res
200
200
 
201
201
  ### Step 4: Apply Approved Changes
202
202
 
203
+ Independently probe each exact `authoring-docs/SKILL.md` in order:
204
+ `${SKILL_DIR}/..` from the loaded skill (`SKILL_DIR` is the absolute directory
205
+ containing that loaded `SKILL.md`), `${HOME}/.agents/skills`, then
206
+ `<repo-root>/.agents/skills`. Bind the first matching `authoring-docs` directory
207
+ once as `AUTHORING_DOCS_ROOT`; load `${AUTHORING_DOCS_ROOT}/SKILL.md` and use
208
+ that same root for every authoring-docs reference and script, never ambient
209
+ discovery. If none is found, name `authoring-docs`, stop this handoff, and give
210
+ the intended-scope recovery command: `oat tools install docs --scope <user|project>`
211
+ or `oat tools update --pack docs --scope <user|project>`.
212
+
213
+ Before content actions, use its page-purpose, landing, placement and five-axis IA
214
+ method within the approved recommendation scope. Carry the analysis artifact's ordered guidance
215
+ locators/provenance into the apply plan; do not silently re-resolve different
216
+ sources. Verify cited inputs still exist and remain read-only outside the repo.
217
+ Local AGENTS/contributing rules stay authoritative; a conflict is `ask_user`
218
+ and blocks that recommendation pending a fresh analysis/user decision. Cite
219
+ sources without copying private contents. This hook adds no restructure action.
220
+
203
221
  Before the first approved write, initialize `OWNED_OUTPUT_FILES=()`. Append
204
222
  each exact successfully created, modified or removed path at that write,
205
223
  including both names of a rename and any generated navigation/index file this
@@ -12,6 +12,15 @@ oat_docs_target: { docs-target-path }
12
12
  **Source Analysis:** `{analysis-artifact-path}`
13
13
  **Docs Target:** `{docs-target-path}`
14
14
 
15
+ ## Guidance provenance
16
+
17
+ - Analysis-selected IA sources, in order: {locators + provenance}
18
+ - Local authority: {AGENTS/contributing citations}
19
+ - Read-only sources verified: {resolved entries or blocked recommendation IDs}
20
+ - Conflicts: {ask_user disposition or none}
21
+
22
+ Keep the analysis selection; do not copy private contents or invent missing evidence.
23
+
15
24
  ## Instructions
16
25
 
17
26
  Review the full recommendation set first, then choose a review mode:
@@ -1,12 +1,12 @@
1
1
  ---
2
2
  name: oat-docs-authoring
3
3
  description: Use when authoring or restructuring targeted content inside an existing OAT Markdown surface or OAT/Fumadocs docs app. Preserves OAT docs navigation, generated indexes, and validation boundaries.
4
- argument-hint: '[docs task or target path]'
4
+ argument-hint: '[docs task or target path] [--ia-guidance <path|url>]'
5
5
  disable-model-invocation: false
6
- allowed-tools: Read, Write, Bash, Glob, Grep, AskUserQuestion
6
+ allowed-tools: Read, Write, Edit, Bash, Glob, Grep, AskUserQuestion
7
7
  user-invocable: true
8
8
  metadata:
9
- version: '1.1.2'
9
+ version: '1.2.0'
10
10
  ---
11
11
 
12
12
  # OAT Docs Authoring
@@ -14,9 +14,8 @@ metadata:
14
14
  Use this skill for targeted documentation authoring and small structural edits
15
15
  inside an existing OAT Markdown surface or OAT/Fumadocs docs app.
16
16
 
17
- This is a thin wrapper over `authoring-docs`. Load `authoring-docs` for
18
- universal evidence gathering, page-type selection, writing style, templates,
19
- and review standards. Keep this wrapper focused on OAT Markdown/Fumadocs placement,
17
+ This is a thin wrapper over `authoring-docs` for universal evidence gathering,
18
+ page-type selection, writing style, templates, and review standards. Keep this wrapper focused on OAT Markdown/Fumadocs placement,
20
19
  navigation, generated artifacts, validation, and lifecycle boundaries.
21
20
 
22
21
  ## Prerequisites
@@ -111,9 +110,22 @@ Use `references/docs-root-resolution.md` before assuming any path. OAT docs apps
111
110
  commonly live outside `apps/oat-docs`, and `.oat/config.json` may describe the
112
111
  generated root index separately from the authored docs root.
113
112
 
114
- If the request needs universal documentation standards, load `authoring-docs`
115
- and use its reference map for evidence gathering, page type, writing style,
116
- templates, and review rubric.
113
+ Independently probe each exact `authoring-docs/SKILL.md` in order:
114
+ `${SKILL_DIR}/..` from the loaded skill (`SKILL_DIR` is the absolute directory
115
+ containing that loaded `SKILL.md`), `${HOME}/.agents/skills`, then
116
+ `<repo-root>/.agents/skills`. Bind the first matching `authoring-docs` directory
117
+ once as `AUTHORING_DOCS_ROOT`; load `${AUTHORING_DOCS_ROOT}/SKILL.md` and use
118
+ that same root for every authoring-docs reference and script, never ambient
119
+ discovery. If none is found, name `authoring-docs`, stop this handoff, and give
120
+ the intended-scope recovery command: `oat tools install docs --scope <user|project>`
121
+ or `oat tools update --pack docs --scope <user|project>`.
122
+
123
+ Use the bound skill's reference map for evidence gathering, page type, writing
124
+ style, templates and review rubric. For IA work use its five-axis method and
125
+ `${AUTHORING_DOCS_ROOT}/references/guidance-sources.md`: explicit `--ia-guidance` or
126
+ conversation → repo config → user config → built-in. Cite ordered source
127
+ locators/provenance in the handoff; respect AGENTS/contributing authority,
128
+ keep non-repo sources read-only and report conflicts as `ask_user`.
117
129
 
118
130
  ### Step 2: Inspect Evidence and Local Maps
119
131
 
@@ -42,8 +42,7 @@ Stop and reroute when you notice:
42
42
  ## Migration Pointer
43
43
 
44
44
  Full MkDocs-to-OAT-Fumadocs migration is not bootstrap and is not targeted
45
- authoring. Use the standalone `mkdocs-to-oat-fumadocs-refactor-guide.md` handoff
46
- when available, and keep the migration in an OAT project or explicit migration
45
+ authoring. Use the bundled [MkDocs-to-OAT-Fumadocs migration guide](mkdocs-to-oat-fumadocs-refactor-guide.md), and keep the migration in an OAT project or explicit migration
47
46
  branch with owner-review items for unverifiable claims.
48
47
 
49
48
  For migration-sensitive follow-up after the migration workflow has created a
@@ -0,0 +1,73 @@
1
+ # MkDocs to OAT/Fumadocs migration guide
2
+
3
+ Use this standalone handoff for an explicitly approved migration of an existing MkDocs site. Bootstrap creates an app; targeted authoring edits content; neither performs a full migration. Keep migration work in an OAT project or an explicit migration branch, with the agreed scope and owner recorded before changes.
4
+
5
+ This guide is reconstructed from current OAT CLI, template and authoring contracts. The older project-local handoff mentioned in OAT's docs-authoring project summary was unavailable; this is not a copy of that historical document.
6
+
7
+ ## Preflight: inventory before mutation
8
+
9
+ 1. Read repository and docs-local instructions, `mkdocs.yml`, `.oat/config.json`, Python dependency files, docs package scripts and deployment workflows. Resolve the actual content root, published URL/base path and build output; do not assume `docs/` or GitHub Pages.
10
+ 2. Inventory every source page, attachment, image, local link, anchor, nav entry and public URL. Record pages outside nav too. Keep a before/after mapping for every source path and URL; never silently drop an unlisted page.
11
+ 3. Inventory MkDocs-specific features: admonitions, tabs, includes/macros, plugin-generated pages, API generation, Mermaid, custom assets/theme, search and redirects. Distinguish supported conversion from manual work and unsupported features.
12
+ 4. Find claims requiring code/config evidence, confidential material, unresolved product behavior and owner-only knowledge. Record owner-review items rather than guessing or publishing uncertain claims.
13
+ 5. Discover validation commands and required runtimes from scripts, CI and contributor instructions. Establish a baseline with exact commands and exit codes, including existing failures. Agree on the target app location, dependency policy, URL preservation strategy and deployment change with the user.
14
+
15
+ Produce an inventory and proposed migration scope for approval. Do not overwrite the MkDocs app, clear its configuration, delete Python tooling or switch deployment as a side effect of preparing a proposal.
16
+
17
+ ## Phase 1: create the approved target app
18
+
19
+ Use `oat docs init --help` to inspect installed capabilities. Scaffold Fumadocs into an empty, approved destination with `--framework fumadocs`, a package/app name, site name, description and target directory. Bootstrap can guide this step, but creating a second app does not imply support for two active `documentation` entries: the current config describes one surface. Explicitly agree when the configured docs root will switch, and preserve the old config for rollback.
20
+
21
+ Read the rendered package scripts and configuration. The current Fumadocs template uses Next static export, trailing slashes and unoptimized images through `createDocsConfig`. For nested-standalone repos only, it forwards an ESM-safe app directory as `turbopack.root`; monorepo and single-package scaffolds use Next.js root discovery. Preserve the site's base path and `NEXT_PUBLIC_BASE_PATH`; set site identity through layout metadata and `DocsLayout` branding, not factory title options.
22
+
23
+ Install using the repository's package-manager conventions. Keep dependency or workspace changes visible in the migration diff. Do not delete the old site yet.
24
+
25
+ ## Phase 2: migrate content without losing source
26
+
27
+ Copy approved content and assets into the target content root, retaining the source until parity is verified. Use the inventory to account for every file.
28
+
29
+ `oat docs migrate` converts supported MkDocs admonitions and injects missing frontmatter in `.md` files. It is a dry run by default; `--apply` writes changes. `--config` supplies MkDocs nav title hints, not a complete navigation or app migration. For example, from the repository root:
30
+
31
+ ```bash
32
+ # Replace paths with the approved destination and preserved source config.
33
+ oat docs migrate --docs-dir apps/handbook/docs --config documentation/mkdocs.yml
34
+ # Review the preview and approve the content conversion before writing.
35
+ oat docs migrate --docs-dir apps/handbook/docs --config documentation/mkdocs.yml --apply
36
+ ```
37
+
38
+ The command does not migrate app shells, deployment, plugins, macros, redirects or all Markdown extensions. Review seeded descriptions for meaningful content; metadata injection is not editorial completion. Convert unsupported syntax manually within the approved scope, preferring `.md` and using `.mdx` only where components require it. Preserve code examples, cautions, provenance and external attributions.
39
+
40
+ ## Phase 3: preserve navigation, links and URLs
41
+
42
+ Create authored `index.md` pages with purpose and `## Contents` maps in each content directory. Map every retained page into the approved tree; use `.md` or `subdir/index.md` targets and the current dash-bullet Contents grammar. When consolidating `overview.md`, carry its content and inbound references into `index.md` and retain the old-URL mapping.
43
+
44
+ Run `oat docs nav sync --target-dir <app-root>` to generate committed `docs/**/meta.json` navigation from authored maps. Resolve unlisted pages explicitly. Do not hand-edit generated navigation. The separate app-root `index.md` manifest is generated by `oat docs generate-index` through the scaffold's `predev`/`prebuild`; it is not the authored root page.
45
+
46
+ Rewrite inbound links, relative assets and anchors using the before/after map. Test public URLs under the real base path. Choose an approved host-compatible recovery for moved URLs; do not assume Next redirects work with static export. If old URLs cannot be preserved, report the exact break and obtain a decision before deployment changes or source deletion.
47
+
48
+ ## Phase 4: validate the migration
49
+
50
+ Discover and run the target app's actual lint, format, build and any link checks. Do not treat disabled/no-op scripts as validation. Run nav sync's read-only `--check` form to check committed navigation. Run existing repository gates required for package, config and workflow changes; keep exact exit codes and distinguish new failures from the baseline.
51
+
52
+ Inspect the static output and use the available browser to spot-check:
53
+
54
+ - landing and deeply nested pages, sidebar labels/order and search;
55
+ - old and new URLs, anchors, relative links and base-path assets;
56
+ - admonitions, tabs, tables, Mermaid, code blocks and custom components;
57
+ - title/description metadata, theme and layout behavior.
58
+
59
+ A successful build does not prove rendering or link parity. If a check cannot run, record the missing evidence and owner action; do not mark it verified. Review every inventory entry as migrated, deliberately retained, or explicitly approved for retirement, with a reason.
60
+
61
+ ## Phase 5: review, switch and retain rollback
62
+
63
+ Present the content conservation diff, URL map, validation evidence, unresolved owner-review items, config changes and deployment proposal. Obtain user approval before switching the configured docs surface, changing publication workflows or retiring the old site. Use `oat-docs-analyze` for a read-only audit and the appropriate reviewed workflow for follow-up changes; do not assume docs-apply may edit app-shell or deployment configuration.
64
+
65
+ Only after parity and approval, remove obsolete MkDocs dependencies/configuration and update repository guidance to the new authored source, generated artifacts and commands. Keep an explicit rollback reference to the prior site/config/deployment. Package publishing and production deployment require their own authorization.
66
+
67
+ ## Final report
68
+
69
+ Report the approved scope, changed files and commits; source-to-target page and URL dispositions; commands and exit codes; rendered spot checks; the configured docs root and publication behavior; known failures and unverified evidence; owner-review items and decisions; and the rollback reference. State whether the migration is ready for owner acceptance, rather than treating the absence of build errors as acceptance.
70
+
71
+ ## Current contract references
72
+
73
+ Within this installed skill, read [lifecycle boundaries](lifecycle-boundaries.md), [the Fumadocs contract](oat-fumadocs-contract.md) and [validation](validation.md). Load `authoring-docs` from installed scope for universal evidence and writing guidance. Inspect installed CLI help and rendered templates before executing commands; the consuming repository's instructions and approved migration scope remain authoritative.