@agent-native/core 0.69.0 → 0.70.0

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 (200) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +48 -0
  3. package/corpus/core/package.json +1 -1
  4. package/corpus/core/src/changelog/parse.ts +245 -0
  5. package/corpus/core/src/cli/changelog.ts +199 -0
  6. package/corpus/core/src/cli/index.ts +19 -0
  7. package/corpus/core/src/cli/recap.ts +24 -1
  8. package/corpus/core/src/cli/skills.ts +72 -45
  9. package/corpus/core/src/client/CommandMenu.tsx +183 -75
  10. package/corpus/core/src/client/agent-chat-adapter.ts +44 -7
  11. package/corpus/core/src/client/analytics.ts +181 -0
  12. package/corpus/core/src/client/changelog/Changelog.tsx +321 -0
  13. package/corpus/core/src/client/index.ts +11 -0
  14. package/corpus/core/src/client/mcp-apps/McpAppRenderer.tsx +54 -0
  15. package/corpus/core/src/client/settings/useBuilderStatus.ts +82 -20
  16. package/corpus/core/src/mcp/build-server.ts +1 -1
  17. package/corpus/core/src/mcp/embed-app.ts +112 -6
  18. package/corpus/core/src/server/attribution.ts +211 -0
  19. package/corpus/core/src/server/auth.ts +6 -0
  20. package/corpus/core/src/server/better-auth-instance.ts +49 -5
  21. package/corpus/core/src/server/builder-browser.ts +27 -1
  22. package/corpus/core/src/server/core-routes-plugin.ts +58 -0
  23. package/corpus/core/src/server/google-oauth.ts +19 -6
  24. package/corpus/core/src/shared/mcp-embed-headers.ts +1 -1
  25. package/corpus/core/src/styles/agent-conversation.css +21 -0
  26. package/corpus/core/src/templates/workspace-core/.agents/skills/changelog/SKILL.md +111 -0
  27. package/corpus/core/src/templates/workspace-core/.agents/skills/tracking/SKILL.md +46 -14
  28. package/corpus/templates/analytics/CHANGELOG.md +10 -0
  29. package/corpus/templates/analytics/actions/install-dashboard-template.ts +2 -2
  30. package/corpus/templates/analytics/actions/open-traffic-dashboard.ts +1 -1
  31. package/corpus/templates/analytics/actions/update-dashboard.ts +5 -3
  32. package/corpus/templates/analytics/app/components/layout/CommandPalette.tsx +180 -144
  33. package/corpus/templates/analytics/app/components/layout/Header.tsx +2 -2
  34. package/corpus/templates/analytics/app/components/layout/Layout.tsx +7 -5
  35. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +221 -213
  36. package/corpus/templates/analytics/app/hooks/use-navigation-state.ts +6 -3
  37. package/corpus/templates/analytics/app/lib/demo-dashboard-path.ts +1 -1
  38. package/corpus/templates/analytics/app/lib/last-opened.ts +2 -1
  39. package/corpus/templates/analytics/app/pages/Settings.tsx +4 -0
  40. package/corpus/templates/analytics/app/pages/adhoc/explorer-dashboard/index.tsx +3 -3
  41. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/DashboardFilterBar.tsx +2 -2
  42. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +101 -99
  43. package/corpus/templates/analytics/app/pages/overview/OverviewPage.tsx +1 -1
  44. package/corpus/templates/analytics/app/routes/adhoc.$id.tsx +18 -5
  45. package/corpus/templates/analytics/app/routes/catalog.tsx +1 -1
  46. package/corpus/templates/analytics/app/routes/dashboards.$id.tsx +9 -0
  47. package/corpus/templates/analytics/app/routes/traffic.tsx +1 -1
  48. package/corpus/templates/analytics/changelog/2026-06-23-the-dashboards-and-analyses-sidebar-settings-buttons-now-sta.md +6 -0
  49. package/corpus/templates/analytics/seeds/dashboards/agent-native-templates-first-party.json +145 -0
  50. package/corpus/templates/analytics/server/db/index.ts +1 -1
  51. package/corpus/templates/analytics/server/lib/dashboard-catalog.ts +9 -2
  52. package/corpus/templates/analytics/server/lib/demo-dashboards.ts +1 -1
  53. package/corpus/templates/analytics/server/plugins/agent-chat.ts +2 -2
  54. package/corpus/templates/analytics/server/plugins/core-routes.ts +6 -6
  55. package/corpus/templates/assets/CHANGELOG.md +10 -0
  56. package/corpus/templates/assets/app/root.tsx +7 -1
  57. package/corpus/templates/assets/app/routes/settings.tsx +6 -0
  58. package/corpus/templates/brain/CHANGELOG.md +10 -0
  59. package/corpus/templates/brain/app/root.tsx +7 -1
  60. package/corpus/templates/brain/app/routes/settings.tsx +8 -1
  61. package/corpus/templates/calendar/CHANGELOG.md +10 -0
  62. package/corpus/templates/calendar/app/pages/Settings.tsx +4 -0
  63. package/corpus/templates/calendar/app/root.tsx +7 -1
  64. package/corpus/templates/chat/CHANGELOG.md +10 -0
  65. package/corpus/templates/chat/app/root.tsx +7 -1
  66. package/corpus/templates/clips/CHANGELOG.md +10 -0
  67. package/corpus/templates/clips/app/components/player/share-dialog.tsx +33 -7
  68. package/corpus/templates/clips/app/components/player/sign-in-prompt-dialog.tsx +8 -0
  69. package/corpus/templates/clips/app/components/player/video-player.tsx +150 -20
  70. package/corpus/templates/clips/app/components/recorder/pre-record-panel.tsx +7 -11
  71. package/corpus/templates/clips/app/components/recorder/recorder-engine.ts +31 -0
  72. package/corpus/templates/clips/app/components/sharing/slack-share-hint.tsx +71 -0
  73. package/corpus/templates/clips/app/root.tsx +7 -1
  74. package/corpus/templates/clips/app/routes/_app.settings._index.tsx +15 -1
  75. package/corpus/templates/clips/app/routes/record.tsx +78 -5
  76. package/corpus/templates/clips/app/routes/share.$shareId.tsx +86 -5
  77. package/corpus/templates/clips/changelog/2026-06-23-clips-shared-in-slack-no-longer-show-a-could-not-start-playb.md +6 -0
  78. package/corpus/templates/clips/changelog/2026-06-23-made-the-play-button-on-shared-and-embedded-clips-scale-with.md +6 -0
  79. package/corpus/templates/clips/changelog/2026-06-23-public-clip-share-links-now-show-whether-they-ll-play-inline.md +6 -0
  80. package/corpus/templates/clips/changelog/2026-06-23-screen-camera-recordings-now-keep-the-presenter-s-face-in-th.md +6 -0
  81. package/corpus/templates/clips/desktop/src/lib/recorder.ts +20 -0
  82. package/corpus/templates/clips/desktop/src/main.tsx +3 -0
  83. package/corpus/templates/clips/desktop/src/overlays/region-record-border.tsx +76 -0
  84. package/corpus/templates/clips/desktop/src/styles.css +49 -0
  85. package/corpus/templates/clips/desktop/src-tauri/capabilities/default.json +2 -1
  86. package/corpus/templates/clips/desktop/src-tauri/src/clips/mod.rs +67 -1
  87. package/corpus/templates/clips/desktop/src-tauri/src/lib.rs +2 -0
  88. package/corpus/templates/clips/desktop/src-tauri/src/util.rs +4 -1
  89. package/corpus/templates/clips/server/routes/api/video/[recordingId].get.ts +51 -1
  90. package/corpus/templates/clips/shared/share-attribution.ts +79 -0
  91. package/corpus/templates/content/CHANGELOG.md +10 -0
  92. package/corpus/templates/content/app/root.tsx +7 -1
  93. package/corpus/templates/design/CHANGELOG.md +10 -0
  94. package/corpus/templates/design/actions/generate-design.ts +4 -0
  95. package/corpus/templates/design/app/root.tsx +7 -1
  96. package/corpus/templates/design/app/routes/settings.tsx +10 -2
  97. package/corpus/templates/dispatch/CHANGELOG.md +10 -0
  98. package/corpus/templates/dispatch/app/root.tsx +7 -1
  99. package/corpus/templates/forms/CHANGELOG.md +10 -0
  100. package/corpus/templates/forms/app/root.tsx +7 -1
  101. package/corpus/templates/macros/CHANGELOG.md +10 -0
  102. package/corpus/templates/macros/app/root.tsx +7 -1
  103. package/corpus/templates/mail/CHANGELOG.md +10 -0
  104. package/corpus/templates/mail/app/components/layout/CommandPalette.tsx +3 -0
  105. package/corpus/templates/mail/app/pages/SettingsPage.tsx +27 -0
  106. package/corpus/templates/plan/.agents/skills/visual-plan/SKILL.md +31 -17
  107. package/corpus/templates/plan/.agents/skills/visual-plan/references/wireframe.md +7 -4
  108. package/corpus/templates/plan/.agents/skills/visual-recap/SKILL.md +34 -24
  109. package/corpus/templates/plan/.agents/skills/visual-recap/references/wireframe.md +7 -4
  110. package/corpus/templates/plan/AGENTS.md +4 -0
  111. package/corpus/templates/plan/CHANGELOG.md +10 -0
  112. package/corpus/templates/plan/actions/view-screen.ts +5 -0
  113. package/corpus/templates/plan/app/components/layout/Sidebar.tsx +98 -1
  114. package/corpus/templates/plan/app/pages/PlansPage.tsx +107 -7
  115. package/corpus/templates/plan/app/root.tsx +7 -1
  116. package/corpus/templates/plan/shared/share-attribution.ts +72 -0
  117. package/corpus/templates/slides/CHANGELOG.md +10 -0
  118. package/corpus/templates/slides/app/root.tsx +7 -1
  119. package/corpus/templates/videos/CHANGELOG.md +4 -151
  120. package/corpus/templates/videos/app/root.tsx +7 -1
  121. package/dist/changelog/parse.d.ts +70 -0
  122. package/dist/changelog/parse.d.ts.map +1 -0
  123. package/dist/changelog/parse.js +200 -0
  124. package/dist/changelog/parse.js.map +1 -0
  125. package/dist/cli/changelog.d.ts +4 -0
  126. package/dist/cli/changelog.d.ts.map +1 -0
  127. package/dist/cli/changelog.js +166 -0
  128. package/dist/cli/changelog.js.map +1 -0
  129. package/dist/cli/index.js +18 -0
  130. package/dist/cli/index.js.map +1 -1
  131. package/dist/cli/recap.d.ts.map +1 -1
  132. package/dist/cli/recap.js +22 -1
  133. package/dist/cli/recap.js.map +1 -1
  134. package/dist/cli/skills.d.ts +3 -3
  135. package/dist/cli/skills.d.ts.map +1 -1
  136. package/dist/cli/skills.js +72 -45
  137. package/dist/cli/skills.js.map +1 -1
  138. package/dist/client/CommandMenu.d.ts +17 -1
  139. package/dist/client/CommandMenu.d.ts.map +1 -1
  140. package/dist/client/CommandMenu.js +49 -13
  141. package/dist/client/CommandMenu.js.map +1 -1
  142. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  143. package/dist/client/agent-chat-adapter.js +43 -6
  144. package/dist/client/agent-chat-adapter.js.map +1 -1
  145. package/dist/client/analytics.d.ts +18 -0
  146. package/dist/client/analytics.d.ts.map +1 -1
  147. package/dist/client/analytics.js +177 -0
  148. package/dist/client/analytics.js.map +1 -1
  149. package/dist/client/changelog/Changelog.d.ts +47 -0
  150. package/dist/client/changelog/Changelog.d.ts.map +1 -0
  151. package/dist/client/changelog/Changelog.js +138 -0
  152. package/dist/client/changelog/Changelog.js.map +1 -0
  153. package/dist/client/index.d.ts +2 -1
  154. package/dist/client/index.d.ts.map +1 -1
  155. package/dist/client/index.js +2 -1
  156. package/dist/client/index.js.map +1 -1
  157. package/dist/client/mcp-apps/McpAppRenderer.d.ts +1 -0
  158. package/dist/client/mcp-apps/McpAppRenderer.d.ts.map +1 -1
  159. package/dist/client/mcp-apps/McpAppRenderer.js +42 -1
  160. package/dist/client/mcp-apps/McpAppRenderer.js.map +1 -1
  161. package/dist/client/settings/useBuilderStatus.d.ts +2 -0
  162. package/dist/client/settings/useBuilderStatus.d.ts.map +1 -1
  163. package/dist/client/settings/useBuilderStatus.js +58 -10
  164. package/dist/client/settings/useBuilderStatus.js.map +1 -1
  165. package/dist/mcp/build-server.js +1 -1
  166. package/dist/mcp/build-server.js.map +1 -1
  167. package/dist/mcp/embed-app.d.ts.map +1 -1
  168. package/dist/mcp/embed-app.js +112 -6
  169. package/dist/mcp/embed-app.js.map +1 -1
  170. package/dist/server/attribution.d.ts +83 -0
  171. package/dist/server/attribution.d.ts.map +1 -0
  172. package/dist/server/attribution.js +178 -0
  173. package/dist/server/attribution.js.map +1 -0
  174. package/dist/server/auth.d.ts.map +1 -1
  175. package/dist/server/auth.js +7 -0
  176. package/dist/server/auth.js.map +1 -1
  177. package/dist/server/better-auth-instance.d.ts +9 -1
  178. package/dist/server/better-auth-instance.d.ts.map +1 -1
  179. package/dist/server/better-auth-instance.js +32 -2
  180. package/dist/server/better-auth-instance.js.map +1 -1
  181. package/dist/server/builder-browser.d.ts +4 -0
  182. package/dist/server/builder-browser.d.ts.map +1 -1
  183. package/dist/server/builder-browser.js +20 -1
  184. package/dist/server/builder-browser.js.map +1 -1
  185. package/dist/server/core-routes-plugin.d.ts +25 -0
  186. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  187. package/dist/server/core-routes-plugin.js +38 -0
  188. package/dist/server/core-routes-plugin.js.map +1 -1
  189. package/dist/server/google-oauth.d.ts.map +1 -1
  190. package/dist/server/google-oauth.js +16 -2
  191. package/dist/server/google-oauth.js.map +1 -1
  192. package/dist/shared/mcp-embed-headers.js +1 -1
  193. package/dist/shared/mcp-embed-headers.js.map +1 -1
  194. package/dist/styles/agent-conversation.css +21 -0
  195. package/dist/templates/workspace-core/.agents/skills/changelog/SKILL.md +111 -0
  196. package/dist/templates/workspace-core/.agents/skills/tracking/SKILL.md +46 -14
  197. package/package.json +1 -1
  198. package/src/templates/workspace-core/.agents/skills/changelog/SKILL.md +111 -0
  199. package/src/templates/workspace-core/.agents/skills/tracking/SKILL.md +46 -14
  200. /package/corpus/templates/analytics/app/routes/{dashboards.tsx → dashboards._index.tsx} +0 -0
@@ -567,12 +567,15 @@ no labels or copy. The renderer drops borders, sketch, and color into the
567
567
  skeleton register automatically. Never escape to a \`custom-html\` document block
568
568
  to fake a loader.
569
569
 
570
- **Editing an existing mockup.** To change one element, text, or color in an
571
- existing html mockup, call \`update-visual-plan\`
572
- with \`contentPatches: [{ op: "patch-wireframe-html", blockId, edits: [{ find,
570
+ **Editing an existing mockup.** In hosted mode, to change one element, text, or
571
+ color in an existing html mockup, do not regenerate the frame — call
572
+ \`update-visual-plan\` with
573
+ \`contentPatches: [{ op: "patch-wireframe-html", blockId, edits: [{ find,
573
574
  replace }] }]\`. Each \`find\` is a unique snippet of the current html (read it
574
575
  first with \`get-visual-plan\`); set \`all: true\` on an edit to replace every
575
- occurrence. The result is re-sanitized.
576
+ occurrence. The result is re-sanitized. In local-files privacy mode, do not call
577
+ hosted Plan tools; edit the local MDX source directly and rerun the local
578
+ check/serve or verify command for \`<plan-dir>\`.
576
579
 
577
580
  **Treat the wireframe border as part of the visible design.** Always wrap HTML
578
581
  wireframe content in a root container with real inner padding before drawing
@@ -1204,13 +1207,14 @@ surface.
1204
1207
  approach and options in the plan. Ask a clarifying question only when an
1205
1208
  ambiguity would change the design and you cannot resolve it from the code; use
1206
1209
  the host agent's normal ask-user-question flow and batch 2-4 high-leverage
1207
- questions before finalizing. Do not call \`create-visual-questions\` from
1208
- \`/visual-plan\`. Otherwise state the assumption explicitly and proceed, and
1209
- keep anything unresolved in the plan's single bottom \`question-form\` Open
1210
- Questions block. For complex plans, do a final open-question pass before
1211
- handoff: if a decision would affect architecture, scope, UX, data shape, or
1212
- rollout, either decide it in the plan with rationale or put it in that bottom
1213
- form with a recommended default.
1210
+ questions before finalizing. Do not call \`create-visual-questions\` for
1211
+ ordinary clarification or preflight; reserve it for the visual-intake mode when
1212
+ the user explicitly asks for a visual intake questionnaire. Otherwise state the
1213
+ assumption explicitly and proceed, and keep anything unresolved in the plan's
1214
+ single bottom \`question-form\` Open Questions block. For complex plans, do a
1215
+ final open-question pass before handoff: if a decision would affect
1216
+ architecture, scope, UX, data shape, or rollout, either decide it in the plan
1217
+ with rationale or put it in that bottom form with a recommended default.
1214
1218
  - **The plan is the approval gate.** After surfacing it, ask the user to review
1215
1219
  and approve before you write code, and name which files/areas the work touches.
1216
1220
  Presenting the plan and requesting sign-off is the approval step — do not ask a
@@ -1255,6 +1259,11 @@ is reachable. Local-files privacy mode (after Tool Guidance) is the exception.
1255
1259
 
1256
1260
  ## Core Workflow
1257
1261
 
1262
+ This section describes the default hosted Plan MCP workflow. If
1263
+ \`AGENT_NATIVE_PLANS_MODE=local-files\` is set, or the user asks for fully local
1264
+ files/no hosted Plan writes, use **Local-Files Privacy Mode** instead; carry
1265
+ forward only the code-research and plan-composition guidance here.
1266
+
1258
1267
  1. Follow the host agent's normal planning flow: inspect the codebase, delegate
1259
1268
  wide exploration when useful, gather the info needed, and ask native
1260
1269
  clarifying questions as needed before generating the plan. If a source plan
@@ -1301,11 +1310,13 @@ is reachable. Local-files privacy mode (after Tool Guidance) is the exception.
1301
1310
  backend, data, multi-file, or risky), also kick off the self-review pass in
1302
1311
  **Self-Review Before Handoff** while the user reads, instead of blocking the
1303
1312
  handoff on it.
1304
- 5. Call \`get-plan-feedback\` before editing, after review, after any long pause,
1313
+ 5. For hosted plans, call \`get-plan-feedback\` before editing, after review,
1314
+ after any long pause,
1305
1315
  and before the final response. Treat \`anchorDetails\`, resolver intent, recent
1306
1316
  review events, and any focused screenshots from browser handoff as the source
1307
1317
  of truth for exactly what changed and exactly what each comment points at.
1308
- 6. Apply changes with \`update-visual-plan\`, preferring targeted \`contentPatches\`.
1318
+ 6. For hosted plans, apply changes with \`update-visual-plan\`, preferring
1319
+ targeted \`contentPatches\`.
1309
1320
  Treat the top-level \`content\` payload as a full replacement, not a merge; do
1310
1321
  not send a partial \`content\` object to add a canvas or one block. If a full
1311
1322
  replacement is unavoidable, first read the complete plan source/content, carry
@@ -1313,8 +1324,8 @@ is reachable. Local-files privacy mode (after Tool Guidance) is the exception.
1313
1324
  afterward so the document body was not truncated. When the user wants
1314
1325
  source-control friendly edits, use \`patch-visual-plan-source\` against the MDX
1315
1326
  files instead of regenerating the plan.
1316
- 7. Export with \`export-visual-plan\` only when the user wants a shareable receipt
1317
- or repo-check-in artifacts.
1327
+ 7. For hosted plans, export with \`export-visual-plan\` only when the user wants a
1328
+ shareable receipt or repo-check-in artifacts.
1318
1329
 
1319
1330
  ## Self-Review Before Handoff
1320
1331
 
@@ -1510,11 +1521,12 @@ The local-files contract is:
1510
1521
  wants the artifact checked into the repo, or use a repo-ignored/temporary
1511
1522
  folder such as \`.agent-native/plans/<slug>/\` or \`/tmp/agent-native-plans/<slug>/\`
1512
1523
  when it should not be checked in. The folder contains \`plan.mdx\`, optional
1513
- \`canvas.mdx\`, optional \`prototype.mdx\`, and optional \`.plan-state.json\`.
1514
- - Run \`npx @agent-native/core@latest plan local check --dir plans/<slug>\`
1515
- before serving, then run
1516
- \`npx @agent-native/core@latest plan local serve --dir plans/<slug> --kind plan --open\`.
1517
- Report the returned local bridge URL from stdout or \`plans/<slug>/.plan-url\`.
1524
+ \`canvas.mdx\`, optional \`prototype.mdx\`, and optional \`.plan-state.json\`. Use
1525
+ that exact chosen folder as \`<plan-dir>\` in every local CLI command below.
1526
+ - Run \`npx @agent-native/core@latest plan local check --dir <plan-dir>\` before
1527
+ serving, then run
1528
+ \`npx @agent-native/core@latest plan local serve --dir <plan-dir> --kind plan --open\`.
1529
+ Report the returned local bridge URL from stdout or \`<plan-dir>/.plan-url\`.
1518
1530
  Treat \`.plan-url\` as a local token file and do not commit it. The URL opens
1519
1531
  the hosted Plan UI but reads from the localhost bridge on this machine, so it
1520
1532
  is not shareable across machines. On macOS, \`--open\` prefers Chromium browsers;
@@ -1523,7 +1535,7 @@ The local-files contract is:
1523
1535
  running locally with the same \`PLAN_LOCAL_DIR\`, the \`/local-plans/<slug>\` route
1524
1536
  is also valid.
1525
1537
  - For headless verification, run
1526
- \`npx @agent-native/core@latest plan local verify --dir plans/<slug> --kind plan\`.
1538
+ \`npx @agent-native/core@latest plan local verify --dir <plan-dir> --kind plan\`.
1527
1539
  It starts the bridge, checks the private-network preflight and JSON payload,
1528
1540
  prints diagnostics, and exits. If the browser hangs on "Loading plan", fetch
1529
1541
  the \`bridgeUrl\` from the verify/serve JSON to read the concrete validation
@@ -1545,6 +1557,11 @@ otherwise approved by the user.
1545
1557
 
1546
1558
  ## Interpreting comment anchors
1547
1559
 
1560
+ This section applies to hosted plans with \`get-plan-feedback\` /
1561
+ \`update-visual-plan\`. In local-files mode, do not call hosted feedback or update
1562
+ tools; interpret file/chat feedback directly, edit the MDX files, rerun the
1563
+ local bridge check/serve/verify command, and report the new local URL.
1564
+
1548
1565
  \`get-plan-feedback\` returns rich anchors — read them before acting on any comment.
1549
1566
 
1550
1567
  - **Coordinate frames.** \`targetX\`/\`targetY\` are percentages *within* the
@@ -1667,8 +1684,9 @@ In local-files mode:
1667
1684
  \`npx @agent-native/core@latest plan blocks --out plan-blocks.md\` when the Plan
1668
1685
  MCP connector is not registered; it calls the public no-auth
1669
1686
  \`get-plan-blocks\` route and sends no recap content. If network access is
1670
- unavailable, use the bundled references and validate with
1671
- \`plan local check\` / \`plan local serve\`. For \`checklist\` and \`question-form\`,
1687
+ unavailable, use the bundled references and validate the MDX with
1688
+ \`plan local check\`; do not run \`plan local serve\` unless the hosted Plan UI is
1689
+ reachable or a local Plan app is already running. For \`checklist\` and \`question-form\`,
1672
1690
  copy the catalog examples verbatim: checklist items need \`id\` and \`label\`;
1673
1691
  question-form questions need \`id\`, \`title\`, and \`mode\`; and each option needs
1674
1692
  \`id\` and \`label\`. \`plan local check\` validates these required fields against
@@ -1678,21 +1696,24 @@ In local-files mode:
1678
1696
  folder such as \`.agent-native/plans/<slug>/\` or \`/tmp/agent-native-plans/<slug>/\`
1679
1697
  when it should not be checked in. The folder contains \`plan.mdx\`, optional
1680
1698
  \`canvas.mdx\`, optional \`prototype.mdx\`, and optional \`.plan-state.json\`. Set
1681
- \`kind: "recap"\` and \`localOnly: true\` in frontmatter/state when authoring
1682
- the source.
1683
- - Run \`npx @agent-native/core@latest plan local check --dir plans/<slug>\`
1684
- before serving, then run
1685
- \`npx @agent-native/core@latest plan local serve --dir plans/<slug> --kind recap --open\`.
1686
- Report the returned local bridge URL from stdout or \`plans/<slug>/.plan-url\`.
1699
+ \`kind: "recap"\` and \`localOnly: true\` in frontmatter/state when authoring the
1700
+ source. Use that exact chosen folder as \`<plan-dir>\` in every local CLI command
1701
+ below.
1702
+ - Run \`npx @agent-native/core@latest plan local check --dir <plan-dir>\` before
1703
+ any preview. When the hosted Plan UI is reachable, run
1704
+ \`npx @agent-native/core@latest plan local serve --dir <plan-dir> --kind recap --open\`.
1705
+ Report the returned local bridge URL from stdout or \`<plan-dir>/.plan-url\`.
1687
1706
  Treat \`.plan-url\` as a local token file and do not commit it. The URL opens
1688
1707
  the hosted Plan UI but reads from the localhost bridge on this machine, so it
1689
1708
  is not shareable across machines. On macOS, \`--open\` prefers Chromium browsers;
1690
1709
  if Safari opens, switch to Chrome/Chromium because Safari can block the hosted
1691
1710
  HTTPS page from fetching the HTTP localhost bridge. If the Plan app itself is
1692
1711
  running locally with the same \`PLAN_LOCAL_DIR\`, the \`/local-plans/<slug>\` route
1693
- is also valid.
1712
+ is also valid. In a truly offline environment, hand off the local \`<plan-dir>\`
1713
+ path after \`plan local check\` and note that interactive preview requires either
1714
+ network access to the hosted Plan UI or a running local Plan app.
1694
1715
  - For headless verification, run
1695
- \`npx @agent-native/core@latest plan local verify --dir plans/<slug> --kind recap\`.
1716
+ \`npx @agent-native/core@latest plan local verify --dir <plan-dir> --kind recap\`.
1696
1717
  It starts the bridge, checks the private-network preflight and JSON payload,
1697
1718
  prints diagnostics, and exits. If the browser hangs on "Loading plan", fetch
1698
1719
  the \`bridgeUrl\` from the verify/serve JSON to read the concrete validation
@@ -1703,7 +1724,9 @@ In local-files mode:
1703
1724
  \`set-resource-visibility\`, or any hosted Plan tool for that recap except the
1704
1725
  schema-only block catalog lookup above.
1705
1726
  - Treat review feedback as file or chat feedback: update the MDX files directly,
1706
- rerun the local bridge command, and summarize the new local bridge URL.
1727
+ rerun \`plan local check\`, and rerun \`serve\` or \`verify\` only when that preview
1728
+ path is available. Summarize the new local URL when one exists; otherwise
1729
+ summarize the checked local folder path.
1707
1730
  Hosted comments, sharing, screenshots, usage attachment, and PR sticky comment
1708
1731
  publishing are unavailable until the user explicitly opts into publishing.
1709
1732
 
@@ -1919,10 +1942,10 @@ and re-import before reporting the link. A text-match screenshot is not enough;
1919
1942
  visually inspect the captured image. When no browser is available (for example
1920
1943
  a headless CI agent), state that in the recap handoff instead.
1921
1944
 
1922
- ## Top Canvas Recaps — read \`../visual-plans/references/canvas.md\`
1945
+ ## Top Canvas Recaps — read \`../visual-plan/references/canvas.md\`
1923
1946
 
1924
1947
  When a recap includes a top canvas, storyboard, or flow view, READ
1925
- \`../visual-plans/references/canvas.md\` before authoring \`canvas.mdx\`. Recap
1948
+ \`../visual-plan/references/canvas.md\` before authoring \`canvas.mdx\`. Recap
1926
1949
  canvas artboards must use the same HTML wireframe path as good document-body
1927
1950
  wireframes: \`<Screen surface="..." html={...} />\` with a semantic HTML fragment.
1928
1951
  Do not author fresh kit-tree children such as \`<FrameScreen>\`, \`<Card>\`,
@@ -1936,8 +1959,8 @@ assume it used the legacy kit path and replace it with an HTML screen.
1936
1959
 
1937
1960
  In local-files privacy mode, run \`plan local check\` first, then report the local
1938
1961
  bridge URL from
1939
- \`npx @agent-native/core@latest plan local serve --dir plans/<slug> --kind recap --open\`
1940
- or from \`plans/<slug>/.plan-url\`. It opens the hosted Plan UI but reads from the
1962
+ \`npx @agent-native/core@latest plan local serve --dir <plan-dir> --kind recap --open\`
1963
+ or from \`<plan-dir>/.plan-url\`. It opens the hosted Plan UI but reads from the
1941
1964
  localhost bridge on this machine, so it is not shareable across machines. If the
1942
1965
  Plan app itself is running locally with the same \`PLAN_LOCAL_DIR\`, the
1943
1966
  \`/local-plans/<slug>\` route is also valid. Do not invent a hosted database URL
@@ -2102,7 +2125,8 @@ installed as plain text and no MCP tools are registered after discovery, run
2102
2125
  \`npx @agent-native/core@latest plan blocks --out plan-blocks.md\` and read that
2103
2126
  file first. The CLI command calls the public no-auth \`get-plan-blocks\` route and
2104
2127
  sends no plan/recap content. If network access is unavailable, use the bundled
2105
- references and validate with \`plan local check\` / \`plan local serve\`.
2128
+ references and validate with \`plan local check\`; run \`plan local serve\` only
2129
+ when the hosted Plan UI is reachable or a local Plan app is already running.
2106
2130
 
2107
2131
  The catalog returns the authoritative, always-current block vocabulary generated
2108
2132
  live from the app's own block registry — the same config the renderer and MDX
@@ -2210,14 +2234,17 @@ inferred (not extracted) as inferred in prose.
2210
2234
 
2211
2235
  ## Bidirectional Loop
2212
2236
 
2213
- Because a recap is a real, editable plan, the same review loop as forward plans
2214
- applies: a reviewer can annotate any block, and the coding agent reads
2215
- \`get-plan-feedback\` to drive fixes back into the code — annotation → agent →
2216
- diff, the same close-the-loop flow forward plans use. After a reviewer annotates
2217
- a block, call \`get-plan-feedback\` to read the structured feedback, then either
2218
- update the recap with \`create-visual-recap\` (passing the existing \`planId\` to
2219
- replace it in place) or apply targeted changes with \`update-visual-plan\`. The
2220
- loop is live and wired. The one thing not yet automatic is PR-comment-triggered
2237
+ In hosted mode, because a recap is a real, editable plan, the same review loop
2238
+ as forward plans applies: a reviewer can annotate any block, and the coding
2239
+ agent reads \`get-plan-feedback\` to drive fixes back into the code — annotation →
2240
+ agent → diff, the same close-the-loop flow forward plans use. After a reviewer
2241
+ annotates a block, call \`get-plan-feedback\` to read the structured feedback,
2242
+ then either update the recap with \`create-visual-recap\` (passing the existing
2243
+ \`planId\` to replace it in place) or apply targeted changes with
2244
+ \`update-visual-plan\`. The loop is live and wired. In local-files privacy mode,
2245
+ do not call those hosted tools; read review notes from chat or local files, edit
2246
+ \`<plan-dir>/*.mdx\` directly, and rerun \`plan local check\`, \`serve\`, or \`verify\`
2247
+ for \`<plan-dir>\`. The one thing not yet automatic is PR-comment-triggered
2221
2248
  re-runs: the GitHub Action creates an initial recap per PR, but it does not yet
2222
2249
  re-run automatically when new review feedback is posted in GitHub — that
2223
2250
  auto-re-run is the remaining fast-follow.