@hybridlabor-api/aos 4.13.2 → 4.14.1

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 (151) hide show
  1. package/.agents/AGENTS.md +8 -0
  2. package/.agents/nodes.json +5 -2
  3. package/.claude/hooks/conventional-commits.mjs +14 -15
  4. package/.claude/hooks/env-file-protection.mjs +14 -15
  5. package/.claude/hooks/go-gate.mjs +152 -10
  6. package/.claude/hooks/go-token.mjs +55 -0
  7. package/.claude/hooks/memb-inject.mjs +75 -62
  8. package/.claude/hooks/trail-autostart.mjs +27 -0
  9. package/.claude/hooks/trail-relay.mjs +1 -0
  10. package/.claude/settings.json +22 -4
  11. package/.claude/workflows/startcycle-dispatch.mjs +11 -4
  12. package/.opencode/plugins/bdb-aos.js +98 -121
  13. package/.opencode/plugins/lib/trail-autostart.js +38 -0
  14. package/CLAUDE.md +1 -1
  15. package/README.de.md +6 -6
  16. package/README.md +6 -6
  17. package/README.pt.md +6 -6
  18. package/THIRD_PARTY_NOTICES.md +19 -3
  19. package/assets/header-v5.png +0 -0
  20. package/bin/aos-acp.mjs +211 -0
  21. package/bin/aos-doctor.mjs +1 -1
  22. package/bin/aos-uninstall.mjs +2 -2
  23. package/docs/master-session-acp.md +51 -0
  24. package/installer.js +314 -42
  25. package/mcps/mcsc/packages/mcp/server.js +6 -7
  26. package/package.json +4 -3
  27. package/scripts/validate-skills.mjs +76 -0
  28. package/skills/basic/bdbmediastorm/SKILL.md +1 -1
  29. package/skills/basic/godmode-shipping/SKILL.md +3 -0
  30. package/skills/basic/master-session/SKILL.md +89 -0
  31. package/skills/basic/startcycle/SKILL.md +1 -1
  32. package/skills/basic/startcycle-graph/SKILL.md +2 -2
  33. package/skills/basic/startcycle-graph-user/SKILL.md +1 -1
  34. package/skills/basic/teamwork-preview/SKILL.md +1 -1
  35. package/skills/bdbrainstorm/SKILL.md +7 -1
  36. package/skills/global_config/agentic-harness-patterns/SKILL.md +257 -0
  37. package/skills/global_config/agentic-harness-patterns/metadata.json +10 -0
  38. package/skills/global_config/agentic-harness-patterns/references/agent-orchestration-pattern.md +97 -0
  39. package/skills/global_config/agentic-harness-patterns/references/bootstrap-sequence-pattern.md +106 -0
  40. package/skills/global_config/agentic-harness-patterns/references/context-engineering/compress-pattern.md +78 -0
  41. package/skills/global_config/agentic-harness-patterns/references/context-engineering/isolate-pattern.md +82 -0
  42. package/skills/global_config/agentic-harness-patterns/references/context-engineering/select-pattern.md +86 -0
  43. package/skills/global_config/agentic-harness-patterns/references/context-engineering-pattern.md +29 -0
  44. package/skills/global_config/agentic-harness-patterns/references/hook-lifecycle-pattern.md +111 -0
  45. package/skills/global_config/agentic-harness-patterns/references/memory-persistence-pattern.md +109 -0
  46. package/skills/global_config/agentic-harness-patterns/references/permission-gate-pattern.md +111 -0
  47. package/skills/global_config/agentic-harness-patterns/references/skill-runtime-pattern.md +104 -0
  48. package/skills/global_config/agentic-harness-patterns/references/task-decomposition-pattern.md +92 -0
  49. package/skills/global_config/agentic-harness-patterns/references/tool-registry-pattern.md +101 -0
  50. package/skills/global_config/agenttrail/SKILL.md +8 -0
  51. package/skills/global_config/agenttrail/bin/agenttrail.mjs +14 -0
  52. package/skills/global_config/agenttrail/bin/ensure.mjs +118 -0
  53. package/skills/global_config/aos-setup/scripts/aos-doctor.mjs +1 -1
  54. package/skills/global_config/bdb-visual-edit/SKILL.md +51 -0
  55. package/skills/global_config/bdb-visual-edit/references/vite-react-source-attr.md +59 -0
  56. package/skills/global_config/bdb-visual-edit/scripts/pick-snippet.js +27 -0
  57. package/skills/global_config/bdb-visual-edit/scripts/sanitize-element.mjs +123 -0
  58. package/skills/global_config/factory-collect/SKILL.md +74 -0
  59. package/skills/global_config/factory-human-digest/SKILL.md +92 -0
  60. package/skills/global_config/factory-lookback/SKILL.md +95 -0
  61. package/skills/global_config/factory-review-prs/SKILL.md +63 -0
  62. package/skills/global_config/git-pr-review/SKILL.md +3 -0
  63. package/skills/global_config/grilling/SKILL.md +2 -0
  64. package/skills/global_config/mcsc/SKILL.md +1 -1
  65. package/skills/global_config/plan-arbiter/SKILL.md +125 -0
  66. package/skills/global_config/plan-canvas/SKILL.md +62 -5
  67. package/skills/global_config/plan-canvas/scripts/lib/loopback-guard.js +19 -3
  68. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/README.md +285 -0
  69. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/agent-trail.js +129 -0
  70. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/board-client.js +124 -0
  71. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/examples/demo-plan/canvas.mdx +19 -0
  72. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/examples/demo-plan/plan.mdx +18 -0
  73. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/examples/recap-demo/plan.mdx +72 -0
  74. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/examples/showcase/README.md +29 -0
  75. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/examples/showcase/architecture.json +30 -0
  76. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/examples/showcase/builder/00_architecture.html +14950 -0
  77. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/examples/showcase/builder/canvas.mdx +511 -0
  78. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/examples/showcase/builder/plan.mdx +208 -0
  79. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/examples/showcase/recap/plan.mdx +102 -0
  80. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/examples/showcase/standard/plan.md +136 -0
  81. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/examples/signup-storyboard/canvas.mdx +124 -0
  82. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/examples/signup-storyboard/plan.mdx +37 -0
  83. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/index.js +188 -0
  84. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/kit.js +123 -0
  85. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/mdx.js +411 -0
  86. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/render.js +1291 -0
  87. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/architecture/meta.json +1 -0
  88. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/architecture/plan.mdx +195 -0
  89. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/architecture/standard.md +95 -0
  90. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/bugfix/meta.json +1 -0
  91. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/bugfix/plan.mdx +105 -0
  92. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/bugfix/standard.md +76 -0
  93. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/feature/canvas.mdx +81 -0
  94. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/feature/meta.json +1 -0
  95. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/feature/plan.mdx +145 -0
  96. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/feature/standard.md +76 -0
  97. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/migration/meta.json +1 -0
  98. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/migration/plan.mdx +172 -0
  99. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/migration/standard.md +100 -0
  100. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/recap/meta.json +1 -0
  101. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/recap/plan.mdx +67 -0
  102. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/recap/standard.md +49 -0
  103. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/recap-board/canvas.mdx +63 -0
  104. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/recap-board/meta.json +1 -0
  105. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/recap-board/plan.mdx +49 -0
  106. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/recap-board/standard.md +39 -0
  107. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/recap-review/meta.json +1 -0
  108. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/recap-review/plan.mdx +118 -0
  109. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/recap-review/standard.md +57 -0
  110. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/release/meta.json +1 -0
  111. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/release/plan.mdx +173 -0
  112. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/release/standard.md +96 -0
  113. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/research/meta.json +1 -0
  114. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/research/plan.mdx +91 -0
  115. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/research/standard.md +54 -0
  116. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/show-control/canvas.mdx +53 -0
  117. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/show-control/meta.json +1 -0
  118. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/show-control/plan.mdx +225 -0
  119. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/show-control/standard.md +111 -0
  120. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/theme.css +472 -0
  121. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/trail.js +216 -0
  122. package/skills/global_config/plan-canvas/scripts/lib/plan-canvas/markdown.js +1 -1
  123. package/skills/global_config/plan-canvas/scripts/lib/plan-canvas/server.js +37 -4
  124. package/skills/global_config/plan-canvas/scripts/lib/plan-canvas/ui.js +125 -29
  125. package/skills/global_config/plan-canvas/scripts/plan-canvas.js +196 -8
  126. package/skills/global_config/pr-recap/SKILL.md +47 -0
  127. package/skills/global_config/pr-recap/scripts/pr-recap.mjs +200 -0
  128. package/skills/global_config/quick-recap/SKILL.md +55 -0
  129. package/skills/global_config/stay-within-limits/SKILL.md +85 -0
  130. package/skills/global_config/triage/SKILL.md +3 -0
  131. package/skills/global_config/visual-edit/README.md +96 -0
  132. package/skills/global_config/visual-edit/SKILL.md +615 -0
  133. package/skills/global_config/visual-plan/README.md +93 -0
  134. package/skills/global_config/visual-plan/SKILL.md +544 -0
  135. package/skills/global_config/visual-plan/references/canvas.md +139 -0
  136. package/skills/global_config/visual-plan/references/connection.md +51 -0
  137. package/skills/global_config/visual-plan/references/document-quality.md +186 -0
  138. package/skills/global_config/visual-plan/references/exemplar.md +62 -0
  139. package/skills/global_config/visual-plan/references/local-files.md +99 -0
  140. package/skills/global_config/visual-plan/references/wireframe.md +319 -0
  141. package/skills/global_config/visual-recap/README.md +103 -0
  142. package/skills/global_config/visual-recap/SKILL.md +560 -0
  143. package/skills/global_config/visual-recap/references/connection.md +51 -0
  144. package/skills/global_config/visual-recap/references/local-files.md +99 -0
  145. package/skills/global_config/visual-recap/references/wireframe.md +319 -0
  146. package/skills/playbooks/pb-ci-fix/SKILL.md +49 -0
  147. package/skills/playbooks/pb-event-tracker/SKILL.md +45 -0
  148. package/skills/playbooks/pb-meeting-actions/SKILL.md +42 -0
  149. package/skills/playbooks/pb-project-new/SKILL.md +48 -0
  150. package/skills/playbooks/pb-week-plan/SKILL.md +45 -0
  151. package/assets/header-v4.jpg +0 -0
@@ -0,0 +1,560 @@
1
+ ---
2
+ name: visual-recap
3
+ description: Turn a PR, branch, commit, or git diff into an interactive visual recap with diagrams, file maps, API/schema summaries, annotated diffs, and focused review notes.
4
+ category: engineering-method
5
+ source: BuilderIO/skills
6
+ ---
7
+
8
+ # Visual Recap
9
+
10
+ `/visual-recap` creates a visual plan built **from** a diff, not toward one. It
11
+ is the reverse of forward planning: instead of describing the change you are
12
+ about to make, you describe the change that was just made, at a higher altitude
13
+ than line-by-line review. The same plan data model serves both directions —
14
+ schema, API, file, and architecture changes become the same `data-model`,
15
+ `api-endpoint`, `file-tree`, and `diagram` blocks a forward plan would use, only
16
+ now they summarize work that exists. A reviewer scans the shape of the change
17
+ before spending attention on the literal lines.
18
+
19
+ ## Publish As An Agent-Native Plan — Never Inline
20
+
21
+ The deliverable is ALWAYS a published Agent-Native Plan, created with
22
+ `create-visual-recap` on the Plan MCP connector — NEVER inline chat content (not
23
+ Markdown prose, an ASCII sketch, a table, a fenced "wireframe", or a "here's the
24
+ recap" summary). A recap's entire value is the hosted, interactive, annotatable
25
+ plan; an inline summary is not a degraded recap, it is the thing a recap
26
+ replaces. If the `plan` (or legacy `agent-native-plans`) tools are not visible,
27
+ discover them through the host's `tool_search` first; if they are still missing,
28
+ STOP and give the user the client-specific reconnect step rather than improvising
29
+ an inline recap. Before publishing, or whenever a connector or auth error
30
+ appears, READ `references/connection.md` in this skill directory — it is the
31
+ single source of truth for the never-inline rule, connector discovery, and the
32
+ per-client reconnect steps. Local-files privacy mode (below) is the one
33
+ exception.
34
+
35
+ ## Local-Files Privacy Mode — read `references/local-files.md`
36
+
37
+ When the user wants no hosted Plan database writes — no DB writes, no Plan MCP
38
+ publish, fully local/offline/private recaps, or `AGENT_NATIVE_PLANS_MODE=local-files`
39
+ — do not call any hosted Plan tool except the schema-only `get-plan-blocks`
40
+ catalog lookup. Read the diff with the local `recap collect-diff` / `scan` /
41
+ `build-prompt --local-files` helpers, author a local MDX folder (set
42
+ `kind: "recap"` and `localOnly: true`), and preview it with `plan local check`,
43
+ `plan local serve --kind recap`, and `plan local verify --kind recap`. Before
44
+ using local-files mode, READ `references/local-files.md` in this skill directory
45
+ — it is the single source of truth for the full contract.
46
+
47
+ ## When To Use
48
+
49
+ Build a recap when a PR or commit is large, multi-file, or touches schema, API
50
+ contracts, or architecture, and a reviewer would benefit from seeing the change
51
+ mapped to structured blocks before reading the raw diff. A GitHub Action can
52
+ generate one automatically from a PR diff; an agent can generate one on request
53
+ ("recap this PR", "show me what this branch changed"). Skip it for small,
54
+ single-file, or obvious diffs — a recap is review overhead, and a tiny change
55
+ reviews faster as plain diff.
56
+
57
+ ## Recap The Whole Work Unit
58
+
59
+ When `/visual-recap` is invoked in a chat thread after work has already happened,
60
+ the default scope is the whole current work unit/thread, not only the most recent
61
+ user message, tool action, or follow-up fix. Gather the thread-owned changes
62
+ across the conversation: original implementation work, later bug fixes, UI
63
+ follow-ups, tests, changesets, skill/instruction updates, generated plan/source
64
+ artifacts, and any local import/linking fixes needed to make the recap open.
65
+
66
+ Use the current diff plus conversation context to separate thread-owned changes
67
+ from unrelated dirty work that existed before the thread. Exclude unrelated
68
+ pre-existing edits. If the scope is genuinely ambiguous and cannot be inferred,
69
+ state the assumption or ask a concise question before publishing.
70
+
71
+ When updating an existing recap after feedback, revise the recap so it still
72
+ covers the whole thread/work unit plus the new correction. Do not replace a broad
73
+ recap with a narrow recap of only the latest feedback unless the user explicitly
74
+ asks for that narrower scope.
75
+
76
+ ## Keep The Recap Body Lean
77
+
78
+ Do not add boilerplate intro, disclaimer, provenance, or summary prose blocks to
79
+ the generated plan body. In particular, do not create a `rich-text` block just to
80
+ say the recap is an aid, that the reviewer should still review the diff, how many
81
+ files changed, or which ref/working tree generated the recap. The plan title,
82
+ brief, and `file-tree` (which carries the per-file change stats) already carry
83
+ that context.
84
+
85
+ Only add prose blocks when they tell the reviewer something specific about the
86
+ change that the structured blocks do not: the objective, a real compatibility
87
+ risk, an important decision visible in the diff, or a grounded review note.
88
+
89
+ ## Recaps Must Be Substantial
90
+
91
+ Lean is not the same as thin. A recap is not a single wireframe plus one
92
+ sentence — that under-serves the reviewer as much as boilerplate prose over-serves
93
+ them. Alongside the visual/structural headline (wireframes, `data-model`,
94
+ `api-endpoint`, `diagram`), a substantial recap also carries the implementation
95
+ evidence:
96
+
97
+ - A short surface/state inventory before authoring: list the changed routes,
98
+ components, popovers/dialogs, role/access states, empty/error states, and
99
+ shared abstractions visible in the diff. The final recap must either represent
100
+ each meaningful item with a block or intentionally omit it because it is tiny,
101
+ redundant, or not user-visible.
102
+ - A `file-tree` of the changed files with each entry's `change` flag, so the
103
+ reviewer sees the footprint of the work at a glance.
104
+ - The split `diff` of the KEY changed files, grouped under a `## Key changes`
105
+ `rich-text` heading in a single horizontal `tabs` block (the default
106
+ orientation, one file per tab), with a one-line `summary` and a few
107
+ `annotations` on each — so the reviewer can drop from the high-altitude shape
108
+ straight into the load-bearing code. Use horizontal file tabs, not a vertical
109
+ side rail, so the selected file has enough width for the side-by-side diff.
110
+
111
+ Skip the diff appendix only for a genuinely tiny change that reviews faster as
112
+ plain diff (see "When To Use"); for any change worth recapping, the file-tree and
113
+ key-change diffs belong in the plan.
114
+
115
+ ## Canonical Shape And Budgets
116
+
117
+ A strong recap follows one skeleton, top to bottom:
118
+
119
+ 1. UI-impact headline — wireframes first, when the diff changed rendered UI.
120
+ 2. Short outcome narrative (`rich-text`): what changed and why, 1-3 paragraphs.
121
+ 3. `data-model` / `api-endpoint` blocks for schema and contract changes.
122
+ 4. `file-tree` of the changed files with `change` flags.
123
+ 5. `## Key changes` — one horizontal `tabs` block of `diff` / `annotated-code`.
124
+
125
+ Budgets that keep the recap reviewable:
126
+
127
+ - 3-8 key-change tabs. Fewer than 3 on a large change under-serves the
128
+ reviewer; more than 8 stops being a summary.
129
+ - Keep each diff/annotated-code excerpt focused — prefer under ~150 lines per
130
+ tab; summarize or link the rest of a long file instead of dumping it.
131
+ - Title at most ~70 characters; brief 1-3 sentences.
132
+
133
+ These budgets are also the cost ceiling: do not exceed them in the name of
134
+ thoroughness, and do not re-read the full diff after the initial sequential
135
+ pass — work from the notes taken during that pass.
136
+
137
+ **GOOD.** A 25-file auth change: Before/After wireframes of the login surface,
138
+ a two-paragraph narrative, a diff-aware `data-model` of the sessions table, an
139
+ `api-endpoint` for the new refresh route, a `file-tree` with change flags, and
140
+ `## Key changes` with five focused tabs, each with a one-line `summary` and a
141
+ few annotations on the load-bearing hunks.
142
+
143
+ **BAD.** One giant unsegmented diff dump with no summaries or annotations; or a
144
+ sparse three-block recap of a 40-file change (one wireframe, one sentence, one
145
+ file list) that forces the reviewer back into the raw diff anyway.
146
+
147
+ ## UI Impact Needs Wireframes
148
+
149
+ When the diff changes rendered UI, layout, density, visual state, interaction
150
+ affordances, navigation, controls, menus, dialogs, or design tokens, the recap
151
+ MUST include one or more wireframes. Prose and file diffs are not a substitute
152
+ for showing what changed visually.
153
+
154
+ Before choosing wireframes, make a UI coverage pass from the diff:
155
+
156
+ - Identify the entry surface where the change appears, such as a page header,
157
+ list row, toolbar, route shell, or menu trigger.
158
+ - Identify the interaction surface that opens or changes, such as a popover,
159
+ dialog, tab, sheet, dropdown, inline editor, or toast.
160
+ - Identify the resulting destination or persistent state, such as a public page,
161
+ read-only view, empty state, error state, loading state, permission-denied
162
+ state, or saved/shared state.
163
+ - Identify access or role variants when permissions change. Owner/admin/editor
164
+ versus viewer/non-manager differences are visual behavior and need a compact
165
+ matrix, paired wireframes, or clearly labeled state sequence.
166
+
167
+ For UI-heavy PRs, a single before/after of the entry surface is not enough.
168
+ Show the changed entry point, the main changed interaction surface, and the
169
+ resulting/destination state. Add more states when the diff adds tabs, role-based
170
+ controls, public/private visibility, invite/manage flows, destructive controls,
171
+ or empty/error branches.
172
+
173
+ Choose the smallest visual surface that makes the review clear:
174
+
175
+ - Use a `Before` / `After` wireframe pair when the reviewer benefits from direct
176
+ comparison, such as a removed or added control, a changed state, layout
177
+ density, ordering, navigation, or a visible component replacement.
178
+ `references/wireframe.md` owns how to lay that pair out (columns vs.
179
+ vertical stack by geometry).
180
+ - Use an after-only wireframe when the change is purely additive or the "before"
181
+ state would only show absence without adding review value.
182
+ - Use more than two wireframes when the UI change is flow-dependent, responsive,
183
+ or stateful; show the meaningful states in order instead of forcing a single
184
+ before/after pair.
185
+ - For tiny surfaces like menus, popovers, dialogs, toasts, or panels, use the
186
+ matching `surface` (`popover`, `panel`, etc.) and show the focused sub-surface.
187
+ Do not redraw a full page unless placement in the page is itself part of the
188
+ change.
189
+
190
+ Ground each wireframe in the changed UI behavior, component names, file paths,
191
+ and diff-visible labels/states. If exact pixels are inferred rather than
192
+ captured, say so in the wireframe caption or a concise annotation. For
193
+ local/manual recaps, import or update the plan source that holds the wireframes
194
+ so the rendered recap opens with the UI visual available.
195
+
196
+ ## Wireframe Quality — read `references/wireframe.md`
197
+
198
+ UI recap/plan wireframes must meet a strict quality bar — full-width chrome,
199
+ pinned bottom bars, real product content, before/after comparability, the right
200
+ `surface` preset, `--wf-*` tokens instead of hex, and no `<html>`/`<style>`/font
201
+ tags. Before authoring ANY wireframe / `<Screen>` / `WireframeBlock`, READ
202
+ `references/wireframe.md` in this skill directory — it is the single source of
203
+ truth for HTML wireframe quality, shared word for word with `/visual-plan`
204
+ and `/visual-recap`. Do not author wireframes from memory.
205
+
206
+ Use the standard `WireframeBlock` / `<Screen>` format so the Plan viewer owns the
207
+ surface frame, theme, and sketchy/clean toggle. HTML wireframes are appropriate
208
+ when placement precision matters, especially popovers, menus, dialogs, and dense
209
+ forms. For HTML
210
+ wireframes, keep `renderMode` unset or `wireframe` unless a design-only editable
211
+ mockup is explicitly required, because `renderMode="design"` disables the
212
+ sketchy rough overlay.
213
+
214
+ When a browser tool is available, render a UI-impact recap in the Plan viewer
215
+ and visually inspect it at the current theme before sharing. If any label,
216
+ annotation, toolbar, or wireframe content overlaps another element, fix the MDX
217
+ and re-import before reporting the link. Limit this to one render-and-inspect
218
+ pass plus at most one fix-and-re-render; do not keep iterating beyond that
219
+ unless the user explicitly asks. A text-match screenshot is not enough;
220
+ visually inspect the captured image. When no browser is available (for example
221
+ a headless CI agent), state that in the recap handoff instead.
222
+
223
+ ## Top Canvas Recaps — read `../visual-plan/references/canvas.md`
224
+
225
+ When a recap includes a top canvas, storyboard, or flow view, READ
226
+ `../visual-plan/references/canvas.md` before authoring `canvas.mdx`. Recap
227
+ canvas artboards must use the same HTML wireframe path as good document-body
228
+ wireframes: `<Screen surface="..." html={...} />` with a semantic HTML fragment.
229
+ Do not author fresh kit-tree children such as `<FrameScreen>`, `<Card>`,
230
+ `<Row>`, `<Title>`, or `<Btn>` inside canvas `<Screen>` tags. Those components
231
+ are legacy compatibility markup for old plans; in new canvas storyboards they
232
+ can produce cramped or overlapping layouts even when the inline body wireframe
233
+ looks good. If a canvas mockup looks worse than the same screen below the fold,
234
+ assume it used the legacy kit path and replace it with an HTML screen.
235
+
236
+ ## Open And Report The Recap
237
+
238
+ In local-files privacy mode, run `plan local check` first, then report the local
239
+ bridge URL from
240
+ `npx @agent-native/core@latest plan local serve --dir <plan-dir> --kind recap --open`
241
+ or from `<plan-dir>/.plan-url`. It opens the hosted Plan UI but reads from the
242
+ localhost bridge on this machine, so it is not shareable across machines. If the
243
+ Plan app itself is running locally with the same `PLAN_LOCAL_DIR`, the
244
+ `/local-plans/<slug>` route is also valid. Do not invent a hosted database URL
245
+ and do not publish just to get an absolute Plan link.
246
+
247
+ After creating the recap, link the reviewer to the rendered plan with an
248
+ **absolute URL on the origin whose database actually holds the plan**. That
249
+ origin is the Plan MCP server you just created the recap through — NOT whatever
250
+ dev server you happen to know is running. The create tool returns the correct
251
+ link; report THAT. Never make the primary link a local `plan.mdx` file, a local
252
+ mirror folder, or a relative path such as `/plans/<id>`.
253
+
254
+ When the recap is posted to a PR for a private repo, the plan link is not a
255
+ public URL. Make the PR comment/handoff copy explicit: reviewers may need to
256
+ sign in to Agent-Native Plans with an account that has access to the owning
257
+ organization before the link loads. Use wording like: "Private repo recap:
258
+ sign in with access to this org if the plan does not open." Do not imply the
259
+ link is broken or public when access is gated by repo/org visibility.
260
+
261
+ A recap lives only in the database of the MCP that created it. A separately
262
+ running local dev server (e.g. `http://localhost:8081`) has its OWN database and
263
+ will NOT contain a recap created through the hosted MCP, so a hand-built
264
+ `localhost` link returns "Plan not found". This is the most common recap
265
+ mistake — do not guess an origin you have not confirmed shares the MCP's data.
266
+
267
+ Resolve the URL in this order:
268
+
269
+ 1. Use the absolute URL the create tool RETURNS — `openLink.webUrl`, else the
270
+ `visualUrl` in the returned `plan.mdx` frontmatter, else `url`/`path`
271
+ resolved against the MCP server's own origin (for the hosted MCP that is
272
+ `https://plan.agent-native.com`). This always points at the database that has
273
+ the plan.
274
+ 2. Use a `localhost`/dev origin ONLY when the recap was created through a Plan
275
+ MCP bound to that same origin — i.e. that MCP's url is
276
+ `http://localhost:<port>/mcp`. Creating through the hosted MCP
277
+ and linking to localhost is the exact mismatch that 404s.
278
+ 3. If only a plan id is available, build the MCP origin's absolute URL
279
+ (hosted: `https://plan.agent-native.com/plans/<id>`) and say it was inferred.
280
+
281
+ If the user wants to review on localhost but the recap was created through the
282
+ hosted MCP, say so plainly: the local dev server cannot see it. To view a recap
283
+ on localhost (e.g. to exercise un-deployed local renderer changes), they must
284
+ connect a LOCAL Plan MCP (`http://localhost:<port>/mcp`) and
285
+ re-create the recap through it so it lands in the local database; offer to do
286
+ that rather than handing over a localhost URL that will not resolve.
287
+
288
+ When running in Codex and the Browser/in-app side browser tools are available,
289
+ open the returned absolute recap URL there automatically after creation. Still
290
+ include the same absolute URL in the final response. Local mirror files like
291
+ `plans/<slug>/plan.mdx` may be mentioned only as secondary source-control
292
+ artifacts, not as the main way to open the recap.
293
+
294
+ ## Diff → Block Mapping
295
+
296
+ Map each kind of change to the block that carries it, derived mechanically from
297
+ the actual diff. The names below are the CONCEPTUAL block types, not the JSX
298
+ tags — resolve every conceptual name to its exact tag + prop schema with the
299
+ `get-plan-blocks` tool (see "Block reference" below) before authoring.
300
+
301
+ - **Schema / migration change** → `data-model` for the resulting entities,
302
+ fields, and relations. Flag what moved per field/entity with
303
+ `change: "added" | "modified" | "removed" | "renamed"`, and for a changed type
304
+ set `was` to the prior value (e.g. the old column type) — grounded in the real
305
+ migration diff. That diff-aware `data-model` is the headline; reach for a split
306
+ `diff` of the literal SQL only when the exact statement still matters, not by
307
+ default.
308
+ - **API / action / route change** → `api-endpoint` with the method, path,
309
+ params, request, and responses as they are after the change. Flag each changed
310
+ param/response with `change` (and `was` on a param whose type/shape changed),
311
+ and set `change` on the endpoint root for a wholly added or removed route. Mark
312
+ removed endpoints with `deprecated: true` and explain in prose.
313
+ Keep multiple API endpoints in the normal single-column document flow unless
314
+ they are an explicit before/after contract comparison.
315
+ Author each request/response example as a SINGLE valid JSON value — one
316
+ top-level object or array, parseable on its own — so it renders in the
317
+ collapsible JSON explorer. Do not put `//` or `/* */` comments, prose,
318
+ trailing commas, or two or more concatenated top-level objects inside one
319
+ example; a non-parseable body falls back to flat text and loses the explorer.
320
+ When an endpoint has several distinct message shapes (for example separate
321
+ websocket frame types, or a success body versus an error body), give each its
322
+ OWN example with its own label rather than cramming them into one body.
323
+ - **Compatibility-sensitive change** → short `rich-text` notes beside the
324
+ relevant `data-model` / `api-endpoint` block. Name the changed field,
325
+ endpoint, or behavior and mark whether it is breaking, risky, or non-breaking;
326
+ pair that note with a split `diff` for the literal lines.
327
+ - **Any meaningful code hunk** → `diff` with `mode: "split"`, carrying the real
328
+ `before` / `after` text and the `filename` / `language`. Split mode is the
329
+ default for recap code review because before/after legibility is the point;
330
+ use `mode: "unified"` only for a genuinely narrow standalone hunk where
331
+ side-by-side would hide the code. Give every `diff` a one-line `summary`
332
+ saying what the hunk changes and why; it renders as a description above the
333
+ code so the reviewer reads intent first. Never leave a diff unlabeled.
334
+ For the KEY changed files, attach `annotations` to the `diff` so the recap
335
+ calls out what each important hunk does — this is the headline affordance for
336
+ annotating the key files updated. Each annotation anchors to the AFTER-side
337
+ line numbers by default (set `side: "before"` to point at removed lines). Keep
338
+ it to a few high-signal notes per file, not one per line.
339
+ When several key files each need a substantial diff, introduce the group with a
340
+ `rich-text` heading block whose markdown is `## Key changes`, then place the
341
+ `diff` blocks under it in a reusable `tabs` block with horizontal orientation
342
+ (the default — omit `orientation`) so the selected file's split diff gets the
343
+ full document width. Let that heading label the section — do NOT also set a
344
+ `title` on the `tabs` block. Keep each tab label to the file path or a short
345
+ basename plus directory hint.
346
+ The renderer's wide document layout is intentionally allowlisted: `diff`,
347
+ `annotated-code`, vertical `tabs`, and `tabs` containing diff-like children
348
+ break out wider than prose. Do not put API endpoints, OpenAPI specs, data
349
+ models, JSON explorers, wireframes, question forms, or custom HTML into tabs
350
+ merely to make them wide.
351
+ If the recap ends with more than one supporting diff, that trailing diff
352
+ appendix should be one horizontal `tabs` block under its own `## Key changes`
353
+ heading, not a stack of separate `diff` blocks.
354
+ - **Brand-new file or a substantial added block with no meaningful "before"** →
355
+ `annotated-code` rather than a one-sided split `diff`. Carry the real new code
356
+ with its `filename` / `language` and anchor a few high-signal notes to the lines
357
+ that matter so the reviewer reads what the new code does, not code for code's
358
+ sake. Keep split `diff` for true before/after hunks where the removed lines
359
+ still carry meaning, and group several annotated walkthroughs in a horizontal
360
+ `tabs` block the same way diffs are grouped.
361
+ - **Files added / removed / renamed** → `file-tree` with each entry's `change`
362
+ flag (`added`, `removed`, `modified`, `renamed`) and a short `note`; attach a
363
+ `snippet` only when one tells the reviewer something the path does not.
364
+ - **Rendered UI / interaction change** → one or more wireframes showing the
365
+ visible UI delta before the reviewer reads code. Use `Before` / `After`
366
+ wireframes when the comparison clarifies the change; otherwise use after-only
367
+ or a short state/flow sequence. Use realistic UI surfaces: for a popover
368
+ change, show a popover with its title row, top-right actions, options/fields,
369
+ tabs, selected/disabled states, people/lists/rows, and any opened prompt/menu
370
+ anchored to the correct trigger. If a route was added, show the route body and
371
+ the unavailable/empty state when the diff implements one. If permissions
372
+ changed, show what managers can do and what viewers/non-managers see instead.
373
+ Keep the body lean: the wireframe carries the UI story, while the file tree
374
+ and `diff` blocks carry implementation evidence.
375
+ - **Architecture or data-flow shift** → `diagram` with `data.html` / `data.css`
376
+ as a two-panel before/after, layered, or swimlane layout, or `mermaid` for a
377
+ quick graph. Use two-dimensional layouts; do not reduce a structural change to
378
+ a left-to-right chain. Do not use `diagram` as a stand-in for rendered UI
379
+ controls; UI changes need `wireframe` blocks.
380
+ Author diagram HTML/CSS with the renderer-owned `.diagram-*` primitives
381
+ (`.diagram-panel`, `.diagram-node`, `.diagram-pill`, `[data-rough]`, …) and
382
+ the same `--wf-*` theme tokens `references/wireframe.md` defines — never
383
+ `font-family`, hex, rgb/hsl literals, or one-off dark/light palettes. Choose
384
+ the outer `frame` intentionally: recap diagrams usually benefit from
385
+ `frame: "show"` when they stand alone, but use `frame: "hide"` when columns,
386
+ tabs, a card, or the diagram's own panels already provide the boundary.
387
+ - **Outcome-first narrative** → `rich-text` for the "what changed and why" prose:
388
+ the objective the diff served, the key decisions visible in it, and the risks a
389
+ reviewer should weigh. This is the only place the model writes freely.
390
+
391
+ ## Block reference — call `get-plan-blocks`, do not memorize tags
392
+
393
+ The conceptual block names above (`api-endpoint`, `data-model`, `json-explorer`,
394
+ `tabs`, …) are NOT the JSX tags you author with, and the exact tags, required
395
+ fields, and prop shapes change as the block library evolves. Do not author from
396
+ memorized tags — they drift and silently produce a wrong tag (`ApiEndpoint`
397
+ instead of `Endpoint`, `JsonExplorer` instead of `Json`, `Tabs` instead of
398
+ `TabsBlock`) that errors on import.
399
+
400
+ **Before writing any structured plan content, fetch/read the block catalog.** In
401
+ hosted or self-hosted mode, call `get-plan-blocks` on the Plan MCP connector
402
+ (`plan` or legacy `agent-native-plans`). If no Plan tools are visible yet in a
403
+ lazy-loading client, search/load them through the host's tool discovery surface
404
+ first (`tool_search` when available). In local-files mode, or when the skill was
405
+ installed as plain text and no MCP tools are registered after discovery, run
406
+ `npx @agent-native/core@latest plan blocks --out plan-blocks.md` and read that
407
+ file first. The CLI command calls the public no-auth `get-plan-blocks` route and
408
+ sends no plan/recap content. If network access is unavailable, use the bundled
409
+ references and validate with `plan local check`; run `plan local serve` only
410
+ when the hosted Plan UI is reachable or a local Plan app is already running.
411
+
412
+ The catalog returns the authoritative, always-current block vocabulary generated
413
+ live from the app's own block registry — the same config the renderer and MDX
414
+ round-trip use — so it can never be stale even if this SKILL.md is an old
415
+ installed copy:
416
+
417
+ - `get-plan-blocks` (default `format: "reference"`) → a compact table of every
418
+ block's runtime `type`, exact MDX `<Tag>`, placement, and key data fields.
419
+ This is your map from each conceptual name above to its real tag and props.
420
+ - `get-plan-blocks` with `format: "schema"` → the full per-block JSON Schema
421
+ plus a worked example for each block, when you need exact field types,
422
+ enums, or nesting (e.g. `Diff.annotations`, `Endpoint.params[].in`,
423
+ `DataModel.entities[].fields[]`).
424
+
425
+ Author the recap source against the tags and schemas that call returns. The
426
+ complete set of valid block-level tags is whatever `get-plan-blocks` lists;
427
+ any other capitalized tag at the block level is rejected on import with an
428
+ "Unknown plan block" / "did you mean" error. Lowercase HTML tags inside
429
+ `rich-text`/markdown prose (`<div>`, `<span>`, `<code>`, `<br>`, …) are always
430
+ fine — only capitalized component-style block tags are validated.
431
+
432
+ A few recap-specific authoring rules the registry table cannot encode:
433
+
434
+ - Every structured block takes a REQUIRED `id` (unique across the whole plan)
435
+ plus the shared optional `summary` / `editable` envelope. Ordinary top-level
436
+ Markdown prose imports as rich-text automatically; use `<RichText id="...">`
437
+ only when prose needs explicit metadata or a preserved referenced block id.
438
+ - Every capitalized block component must be self-closing (`<Diagram ... />`) or
439
+ explicitly closed around children (`<RichText ...>...</RichText>`). Never
440
+ leave a bare opening tag like `<RichText ...>` in a paragraph; MDX treats it
441
+ as unclosed JSX and import fails before the recap can render.
442
+ - Code-bearing blocks (`Code`, `AnnotatedCode`, and `Diff`) are
443
+ whitespace-sensitive. Prefer the exact MDX form from the `get-plan-blocks`
444
+ examples / source exporter, where multiline code is encoded as JSON string
445
+ attributes such as `code={"const x =\n y"}`. Static template literals are
446
+ accepted only when they are static strings with no `${...}` interpolation.
447
+ - `Endpoint`: prose `description` is the MDX **children** (body between the
448
+ tags), not an attribute; for a WebSocket upgrade use `method="GET"`. Each
449
+ request/response `example` is a JSON **string** (the renderer parses it into
450
+ the JSON explorer), so keep it a single parseable JSON value.
451
+ - `TabsBlock`: the whole `tabs` array (including nested child blocks) is ONE
452
+ JSON `tabs={[…]}` prop — there is NO nested `<Tab>` element.
453
+ - `WireframeBlock`: its body is a single `<Screen surface ... html=… />` subtree
454
+ (nested MDX, not a flat prop); `html` must be a single-quoted string or static
455
+ template literal, never a dynamic `html={someVar}` expression. See
456
+ `references/wireframe.md` for the HTML rules.
457
+ - `Diagram`: the whole payload is one `data={{ html?, css?, nodes?, edges?, … }}`
458
+ attribute and requires either `html` or at least one node; `Mermaid` is its
459
+ own separate block (`source` text), not a `Diagram` prop.
460
+
461
+ ## Before / After Is The Headline
462
+
463
+ The recap's center of gravity is the before/after comparison. For document-body
464
+ comparisons there are two primitives, and they cover the whole need together:
465
+
466
+ - **`columns`** — the side-by-side container, for **structured** comparisons.
467
+ Use two columns labeled `Before` and `After`, each holding a block (commonly a
468
+ `data-model`, `api-endpoint`, or `rich-text`), so the reviewer reads the old
469
+ shape against the new shape in one glance. This is the right primitive for
470
+ "the schema went from X to Y" or "the endpoint contract changed like this."
471
+ Do not use `columns` simply to compact or group a list of API endpoints.
472
+ - **`diff`** — for **code**. It renders the literal removed and added lines. Use
473
+ it for the actual hunks. Use split mode by default for recap code review;
474
+ reserve `mode: "unified"` for genuinely narrow standalone hunks where
475
+ side-by-side would hide the code. Key-file diff groups should use horizontal
476
+ tabs so split diffs get the full document width.
477
+
478
+ For UI diffs, wireframes are the visual comparison primitive. Use before/after
479
+ wireframes when the comparison clarifies the change; use after-only or a state
480
+ sequence when that better matches the change. The visual headline must show
481
+ exact placement, realistic chrome, and adequate padding before any abstract
482
+ explanation. Do not stop at the first visible affordance when the diff adds a
483
+ flow; show the entry point, the opened surface, and the resulting state or page
484
+ so the reviewer can trace the actual user path. `references/wireframe.md` owns
485
+ the before/after layout choice —
486
+ the `columns` renderer keeps narrow surfaces side by side and auto-stacks wide
487
+ `desktop`/`browser` frames vertically; never hand-build a side-by-side
488
+ wireframe layout in `custom-html`. For document-body
489
+ comparisons, there is no other multi-column primitive — `columns` plus the
490
+ `diff` block are the whole comparison vocabulary. Do not hand-build side-by-side
491
+ layouts in `custom-html`, and do not stack two `data-model` blocks vertically
492
+ and call it a comparison when `columns` exists to put them side by side.
493
+
494
+ ## Grounding Rule
495
+
496
+ Structured blocks are **true by construction** only if they are derived from the
497
+ actual changed lines. The `diff`, `data-model`, `api-endpoint`, and `file-tree`
498
+ blocks MUST be built mechanically from the real diff — real paths, real fields,
499
+ real method/path, real before/after text — never inferred, rounded, or invented.
500
+ The model writes only the prose: the "why", the narrative, the risk read. A
501
+ confidently wrong recap is dangerous in a review context, because a reviewer who
502
+ trusts the summary may skip the very line the summary got wrong. When the diff
503
+ does not contain a fact, leave it out rather than guess; mark anything the model
504
+ inferred (not extracted) as inferred in prose.
505
+
506
+ ## Security
507
+
508
+ - **Gate visibility.** Recaps of a private repo are org/login-gated — set the
509
+ plan's visibility to the owning org or login, never auto-public. A recap can
510
+ expose unreleased schema, internal endpoints, and architecture; treat it like
511
+ the source it summarizes. Any PR comment or handoff that links to the recap
512
+ must say that private-repo recaps require signing in with access to the owning
513
+ org if the link does not load.
514
+ - **Never transcribe secrets.** A diff can contain API keys, tokens, webhook
515
+ URLs, signing secrets, `.env` values, or credential-looking literals. Do not
516
+ copy any of these into a `diff`, `file-tree` snippet, `api-endpoint`, or prose
517
+ block — redact them (`sk-•••`, `<redacted>`). This mirrors the repo's
518
+ hardcoded-secret rule: obviously fake placeholders only, never the real value,
519
+ in any block, caption, or note.
520
+
521
+ ## Bidirectional Loop
522
+
523
+ In hosted mode, because a recap is a real, editable plan, the same review loop
524
+ as forward plans applies: a reviewer can annotate any block, and the coding
525
+ agent reads `get-plan-feedback` to drive fixes back into the code — annotation →
526
+ agent → diff, the same close-the-loop flow forward plans use. After a reviewer
527
+ annotates a block, call `get-plan-feedback` to read the structured feedback,
528
+ then either update the recap with `create-visual-recap` (passing the existing
529
+ `planId` to replace it in place) or apply targeted changes with
530
+ `update-visual-plan`. The loop is live and wired. In local-files privacy mode,
531
+ do not call those hosted tools; read review notes from chat or local files, edit
532
+ `<plan-dir>/*.mdx` directly, and rerun `plan local check`, `serve`, or `verify`
533
+ for `<plan-dir>`. The one thing not yet automatic is PR-comment-triggered
534
+ re-runs: the GitHub Action creates an initial recap per PR, but it does not yet
535
+ re-run automatically when new review feedback is posted in GitHub — that
536
+ auto-re-run is the remaining fast-follow.
537
+
538
+ ## Related Skills
539
+
540
+ - **visual-plan** — the canonical command and the source of the shared Wireframe
541
+ & Canvas and Document Quality cores; a recap follows the same block discipline
542
+ in reverse.
543
+ - **comment anchors** — recap comments use the same anchor rules as forward
544
+ plans; see "Interpreting comment anchors" in the visual-plan skill for
545
+ coordinate frames, wireframe node ids, text-quote resolution, detached
546
+ threads, routing via `resolutionTarget`, and two-axis consumed/resolved state.
547
+ - **security** — data scoping, secret handling, and the hardcoded-secret rule the
548
+ recap's redaction and visibility gating mirror.
549
+ - **sharing** — org/login-gated visibility for the plan that holds the recap.
550
+
551
+ ## AOS notes
552
+
553
+ This skill is optional and drives the Agent-Native Plan service through an MCP
554
+ connector named `plan` that AOS does NOT register or install — you connect it
555
+ yourself. It may point at a self-hosted or local Plan app URL. Do not run any
556
+ `npx @agent-native/...@latest` command from this skill unless you explicitly
557
+ approved the network access in this conversation. Hosted publishing, posting to
558
+ GitHub, merging, and any other external write need your literal GO (AOS go-gate).
559
+ When the optional local BDB Plan Builder is installed, it can serve the same tool
560
+ names locally (planned, not yet built; say so).
@@ -0,0 +1,51 @@
1
+ # Connecting & publishing — single source of truth
2
+
3
+ This file is the canonical rule for the never-inline deliverable, finding the
4
+ Plan MCP connector, and restoring it when its tools are missing. It is shared
5
+ word for word by `/visual-plan` and `/visual-recap`. Read it when you are about
6
+ to publish, or whenever a connector or auth error appears; do not improvise an
7
+ inline fallback from memory.
8
+
9
+ <!-- SHARED-CORE:connection START -->
10
+
11
+ **The deliverable is ALWAYS a published Agent-Native Plan, never inline chat
12
+ content.** Do not hand the plan or recap to the user as Markdown prose, an ASCII
13
+ sketch, a table, a fenced "wireframe", or a "here's the summary" paragraph. The
14
+ entire value is the hosted, interactive, annotatable Plan; an inline summary is
15
+ the thing a Plan replaces, not a degraded version of one. The only supported
16
+ output is to publish through the Plan MCP connector and return its absolute URL.
17
+ Local-files privacy mode (`references/local-files.md`) is the one exception.
18
+
19
+ **The connector is usually the `plan` server**, but older installed agents may
20
+ expose the same hosted connector as `agent-native-plans` — both names are valid,
21
+ so never report the connector as missing just because it is named
22
+ `agent-native-plans` instead of `plan`. Some clients also lazy-load connector
23
+ tools through a deferred tool registry instead of showing the namespace upfront.
24
+ Before declaring the connector missing, search/load tools with the host's
25
+ discovery surface (`tool_search` when available) for `create_visual_plan`,
26
+ `create_visual_recap`, or `get_plan_blocks`, then use the tools it exposes.
27
+
28
+ **If the tools are still missing after discovery, do NOT fall back to inline
29
+ output.** The usual cause is a connector that did not finish connecting this
30
+ session (it registers zero tools), NOT necessarily an auth problem — so do not
31
+ assume the user must re-authenticate. Stop and give the user the exact restore
32
+ step for their current client:
33
+
34
+ - **Codex / Codex Desktop:** run
35
+ `npx -y @agent-native/core@latest reconnect https://plan.agent-native.com --client codex`
36
+ and start a new Codex session.
37
+ - **Claude Code:** run `/mcp` and choose Authenticate/Reconnect, or run the same
38
+ reconnect command with `--client claude-code` and restart Claude.
39
+
40
+ The same applies when a Plan tool returns `needs auth`, `Unauthorized`, or
41
+ `Session terminated`: stop retrying the tool and give the reconnect step instead.
42
+
43
+ Auth is stored per client config/session, so one client's reconnect does not make
44
+ another running client load tools. `--client all` refreshes every local client
45
+ config that already has the Plan entry, but each running client still has to
46
+ reload its MCP tools afterward. Reconnect re-authenticates WITHOUT reinstalling
47
+ and finds the entry by URL regardless of connector name — never reinstall from
48
+ scratch just to fix auth. Publish once the tool is reachable. Falling back to
49
+ inline content is a defect, not a degraded mode.
50
+
51
+ <!-- SHARED-CORE:connection END -->