@pellux/goodvibes-agent 0.1.116 → 1.0.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 (285) hide show
  1. package/CHANGELOG.md +48 -661
  2. package/README.md +64 -57
  3. package/bin/goodvibes-agent.ts +16 -2
  4. package/dist/package/main.js +199180 -192185
  5. package/docs/README.md +15 -8
  6. package/docs/channels-remote-and-api.md +50 -0
  7. package/docs/connected-host.md +59 -0
  8. package/docs/getting-started.md +61 -50
  9. package/docs/knowledge-artifacts-and-multimodal.md +91 -0
  10. package/docs/project-planning.md +79 -0
  11. package/docs/providers-and-routing.md +46 -0
  12. package/docs/release-and-publishing.md +48 -11
  13. package/docs/tools-and-commands.md +123 -0
  14. package/docs/voice-and-live-tts.md +51 -0
  15. package/package.json +3 -6
  16. package/src/agent/behavior-discovery-summary.ts +1 -3
  17. package/src/agent/channel-delivery.ts +201 -0
  18. package/src/agent/media-generation.ts +159 -0
  19. package/src/agent/memory-prompt.ts +0 -1
  20. package/src/agent/note-registry.ts +329 -0
  21. package/src/agent/operator-actions.ts +343 -0
  22. package/src/agent/persona-discovery.ts +1 -3
  23. package/src/agent/persona-registry.ts +19 -16
  24. package/src/agent/record-labels.ts +107 -0
  25. package/src/agent/reminder-schedule-format.ts +33 -24
  26. package/src/agent/reminder-schedule.ts +27 -26
  27. package/src/agent/routine-registry.ts +54 -14
  28. package/src/agent/routine-schedule-args.ts +2 -1
  29. package/src/agent/routine-schedule-format.ts +77 -53
  30. package/src/agent/routine-schedule-promotion.ts +35 -33
  31. package/src/agent/routine-schedule-receipts.ts +29 -27
  32. package/src/agent/runtime-profile-starters.ts +5 -5
  33. package/src/agent/runtime-profile.ts +91 -12
  34. package/src/agent/skill-registry.ts +210 -32
  35. package/src/cli/agent-knowledge-args.ts +5 -1
  36. package/src/cli/agent-knowledge-command.ts +40 -34
  37. package/src/cli/agent-knowledge-format.ts +80 -67
  38. package/src/cli/agent-knowledge-methods.ts +1 -1
  39. package/src/cli/agent-knowledge-runtime.ts +32 -26
  40. package/src/cli/bundle-command.ts +14 -9
  41. package/src/cli/config-overrides.ts +37 -36
  42. package/src/cli/entrypoint.ts +16 -7
  43. package/src/cli/external-runtime.ts +10 -4
  44. package/src/cli/help.ts +54 -29
  45. package/src/cli/local-library-command.ts +203 -83
  46. package/src/cli/management-commands.ts +105 -68
  47. package/src/cli/management.ts +55 -74
  48. package/src/cli/memory-command.ts +66 -32
  49. package/src/cli/parser.ts +37 -3
  50. package/src/cli/profiles-command.ts +166 -31
  51. package/src/cli/provider-auth-routes.ts +2 -1
  52. package/src/cli/routines-command.ts +176 -40
  53. package/src/cli/service-posture.ts +16 -16
  54. package/src/cli/status.ts +56 -135
  55. package/src/core/conversation-message-snapshot.ts +131 -0
  56. package/src/input/agent-workspace-access-command-editor-submission.ts +149 -0
  57. package/src/input/agent-workspace-access-command-editors.ts +170 -0
  58. package/src/input/agent-workspace-activation.ts +35 -8
  59. package/src/input/agent-workspace-basic-command-editor-submission.ts +351 -94
  60. package/src/input/agent-workspace-basic-command-editors.ts +502 -9
  61. package/src/input/agent-workspace-categories.ts +423 -51
  62. package/src/input/agent-workspace-channel-command-editor-submission.ts +83 -0
  63. package/src/input/agent-workspace-channel-command-editors.ts +65 -0
  64. package/src/input/agent-workspace-channels.ts +35 -2
  65. package/src/input/agent-workspace-command-editor.ts +41 -3
  66. package/src/input/agent-workspace-config-reader.ts +16 -0
  67. package/src/input/agent-workspace-delegation-editor-submission.ts +55 -0
  68. package/src/input/agent-workspace-editors.ts +166 -1
  69. package/src/input/agent-workspace-knowledge-command-editor-submission.ts +132 -0
  70. package/src/input/agent-workspace-knowledge-command-editors.ts +110 -0
  71. package/src/input/agent-workspace-knowledge-query-editor.ts +1 -1
  72. package/src/input/agent-workspace-learned-behavior.ts +67 -0
  73. package/src/input/agent-workspace-library-command-editor-submission.ts +50 -0
  74. package/src/input/agent-workspace-library-command-editors.ts +35 -0
  75. package/src/input/agent-workspace-local-operations.ts +218 -0
  76. package/src/input/agent-workspace-local-selection.ts +75 -0
  77. package/src/input/agent-workspace-mcp-command-editor-submission.ts +95 -0
  78. package/src/input/agent-workspace-media-command-editor-submission.ts +62 -0
  79. package/src/input/agent-workspace-media-command-editors.ts +27 -0
  80. package/src/input/agent-workspace-memory-command-editor-submission.ts +232 -0
  81. package/src/input/agent-workspace-memory-command-editors.ts +180 -0
  82. package/src/input/agent-workspace-memory-editor.ts +2 -2
  83. package/src/input/agent-workspace-navigation.ts +81 -0
  84. package/src/input/agent-workspace-notify-editor-submission.ts +121 -0
  85. package/src/input/agent-workspace-operations-command-editor-submission.ts +208 -0
  86. package/src/input/agent-workspace-operations-command-editors.ts +196 -0
  87. package/src/input/agent-workspace-panel-route.ts +43 -0
  88. package/src/input/agent-workspace-provider-command-editor-submission.ts +155 -0
  89. package/src/input/agent-workspace-provider-command-editors.ts +93 -0
  90. package/src/input/agent-workspace-reminder-schedule-editor.ts +1 -1
  91. package/src/input/agent-workspace-requirements.ts +11 -0
  92. package/src/input/agent-workspace-routine-schedule-editor.ts +2 -2
  93. package/src/input/agent-workspace-search.ts +169 -0
  94. package/src/input/agent-workspace-secret-editor-submission.ts +153 -0
  95. package/src/input/agent-workspace-session-command-editor-submission.ts +199 -0
  96. package/src/input/agent-workspace-session-command-editors.ts +249 -0
  97. package/src/input/agent-workspace-setup.ts +37 -16
  98. package/src/input/agent-workspace-skill-bundle-command-editor-submission.ts +101 -0
  99. package/src/input/agent-workspace-skill-bundle-command-editors.ts +110 -0
  100. package/src/input/agent-workspace-snapshot.ts +162 -21
  101. package/src/input/agent-workspace-task-command-editor-submission.ts +61 -0
  102. package/src/input/agent-workspace-task-command-editors.ts +47 -0
  103. package/src/input/agent-workspace-token.ts +18 -2
  104. package/src/input/agent-workspace-types.ts +212 -4
  105. package/src/input/agent-workspace-voice-media.ts +4 -7
  106. package/src/input/agent-workspace-web-research-editor.ts +104 -0
  107. package/src/input/agent-workspace-workplan-editor-submission.ts +153 -0
  108. package/src/input/agent-workspace.ts +178 -240
  109. package/src/input/command-registry.ts +5 -2
  110. package/src/input/commands/agent-runtime-profile-runtime.ts +126 -37
  111. package/src/input/commands/agent-skills-runtime.ts +149 -72
  112. package/src/input/commands/agent-workspace-runtime.ts +23 -6
  113. package/src/input/commands/brief-runtime.ts +55 -25
  114. package/src/input/commands/channels-runtime.ts +147 -33
  115. package/src/input/commands/compat-runtime.ts +32 -0
  116. package/src/input/commands/delegation-runtime.ts +29 -23
  117. package/src/input/commands/experience-runtime.ts +6 -4
  118. package/src/input/commands/guidance-runtime.ts +4 -4
  119. package/src/input/commands/health-runtime.ts +149 -126
  120. package/src/input/commands/knowledge.ts +82 -60
  121. package/src/input/commands/local-provider-runtime.ts +43 -21
  122. package/src/input/commands/local-runtime.ts +138 -16
  123. package/src/input/commands/local-setup-review.ts +10 -20
  124. package/src/input/commands/mcp-runtime.ts +63 -46
  125. package/src/input/commands/notify-runtime.ts +38 -9
  126. package/src/input/commands/operator-actions-runtime.ts +138 -0
  127. package/src/input/commands/operator-runtime.ts +6 -76
  128. package/src/input/commands/personas-runtime.ts +46 -31
  129. package/src/input/commands/planning-runtime.ts +1 -1
  130. package/src/input/commands/platform-access-runtime.ts +35 -98
  131. package/src/input/commands/product-runtime.ts +2 -2
  132. package/src/input/commands/provider-accounts-runtime.ts +60 -39
  133. package/src/input/commands/qrcode-runtime.ts +50 -9
  134. package/src/input/commands/recall-bundle.ts +11 -11
  135. package/src/input/commands/recall-capture.ts +13 -11
  136. package/src/input/commands/recall-query.ts +29 -21
  137. package/src/input/commands/recall-review.ts +2 -1
  138. package/src/input/commands/routines-runtime.ts +99 -45
  139. package/src/input/commands/runtime-services.ts +1 -14
  140. package/src/input/commands/schedule-runtime.ts +33 -20
  141. package/src/input/commands/security-runtime.ts +6 -11
  142. package/src/input/commands/session-content.ts +80 -78
  143. package/src/input/commands/session-workflow.ts +134 -104
  144. package/src/input/commands/session.ts +3 -174
  145. package/src/input/commands/shell-core.ts +38 -17
  146. package/src/input/commands/subscription-runtime.ts +54 -185
  147. package/src/input/commands/support-bundle-runtime.ts +53 -0
  148. package/src/input/commands/tasks-runtime.ts +21 -21
  149. package/src/input/commands/work-plan-runtime.ts +33 -8
  150. package/src/input/commands.ts +6 -2
  151. package/src/input/feed-context-factory.ts +2 -2
  152. package/src/input/file-picker.ts +3 -2
  153. package/src/input/handler-command-route.ts +4 -7
  154. package/src/input/handler-content-actions.ts +89 -26
  155. package/src/input/handler-feed-routes.ts +19 -12
  156. package/src/input/handler-feed.ts +6 -5
  157. package/src/input/handler-interactions.ts +9 -36
  158. package/src/input/handler-modal-stack.ts +3 -3
  159. package/src/input/handler-onboarding.ts +52 -91
  160. package/src/input/handler-shortcuts.ts +16 -7
  161. package/src/input/handler.ts +50 -23
  162. package/src/input/input-history.ts +5 -6
  163. package/src/input/keybindings.ts +27 -16
  164. package/src/input/mcp-workspace.ts +90 -26
  165. package/src/input/onboarding/handler-onboarding-routes.ts +3 -1
  166. package/src/input/onboarding/onboarding-wizard-apply.ts +62 -0
  167. package/src/input/onboarding/onboarding-wizard-constants.ts +1 -0
  168. package/src/input/onboarding/onboarding-wizard-helpers.ts +1 -1
  169. package/src/input/onboarding/onboarding-wizard-operator-steps.ts +223 -55
  170. package/src/input/onboarding/onboarding-wizard-steps.ts +59 -35
  171. package/src/input/onboarding/onboarding-wizard-types.ts +4 -1
  172. package/src/input/onboarding/onboarding-wizard.ts +87 -2
  173. package/src/input/profile-picker-modal.ts +31 -12
  174. package/src/input/session-picker-modal.ts +21 -4
  175. package/src/input/settings-modal-agent-policy.ts +6 -6
  176. package/src/input/settings-modal-behavior.ts +0 -3
  177. package/src/input/settings-modal-subscriptions.ts +3 -3
  178. package/src/input/settings-modal-types.ts +2 -13
  179. package/src/input/settings-modal.ts +20 -66
  180. package/src/input/submission-intent.ts +0 -1
  181. package/src/input/submission-router.ts +3 -3
  182. package/src/main.ts +18 -10
  183. package/src/panels/approval-panel.ts +8 -8
  184. package/src/panels/automation-control-panel.ts +4 -4
  185. package/src/panels/base-panel.ts +1 -1
  186. package/src/panels/builtin/agent.ts +1 -1
  187. package/src/panels/builtin/operations.ts +3 -12
  188. package/src/panels/builtin/session.ts +32 -24
  189. package/src/panels/builtin/shared.ts +7 -7
  190. package/src/panels/cost-tracker-panel.ts +1 -1
  191. package/src/panels/docs-panel.ts +5 -3
  192. package/src/panels/index.ts +0 -1
  193. package/src/panels/knowledge-panel.ts +6 -5
  194. package/src/panels/memory-panel.ts +7 -6
  195. package/src/panels/panel-list-panel.ts +36 -80
  196. package/src/panels/project-planning-panel.ts +19 -12
  197. package/src/panels/provider-account-snapshot.ts +51 -25
  198. package/src/panels/provider-accounts-panel.ts +33 -18
  199. package/src/panels/provider-health-domains.ts +48 -7
  200. package/src/panels/provider-health-panel.ts +5 -4
  201. package/src/panels/qr-panel.ts +44 -20
  202. package/src/panels/schedule-panel.ts +9 -17
  203. package/src/panels/security-panel.ts +8 -8
  204. package/src/panels/session-browser-panel.ts +10 -10
  205. package/src/panels/subscription-panel.ts +6 -6
  206. package/src/panels/system-messages-panel.ts +3 -3
  207. package/src/panels/tasks-panel.ts +21 -14
  208. package/src/panels/tool-inspector-panel.ts +19 -12
  209. package/src/panels/work-plan-panel.ts +5 -5
  210. package/src/planning/project-planning-coordinator.ts +3 -3
  211. package/src/provider-auth-route-display.ts +9 -0
  212. package/src/renderer/agent-workspace-style.ts +34 -0
  213. package/src/renderer/agent-workspace.ts +254 -57
  214. package/src/renderer/autocomplete-overlay.ts +25 -6
  215. package/src/renderer/block-actions.ts +1 -3
  216. package/src/renderer/bookmark-modal.ts +19 -4
  217. package/src/renderer/buffer.ts +4 -2
  218. package/src/renderer/context-inspector.ts +50 -13
  219. package/src/renderer/diff.ts +1 -1
  220. package/src/renderer/file-picker-overlay.ts +19 -6
  221. package/src/renderer/help-overlay.ts +112 -34
  222. package/src/renderer/history-search-overlay.ts +19 -4
  223. package/src/renderer/live-tail-modal.ts +27 -5
  224. package/src/renderer/mcp-workspace.ts +176 -43
  225. package/src/renderer/model-picker-overlay.ts +58 -3
  226. package/src/renderer/model-workspace.ts +104 -22
  227. package/src/renderer/onboarding/onboarding-wizard.ts +20 -4
  228. package/src/renderer/process-modal.ts +27 -6
  229. package/src/renderer/profile-picker-modal.ts +21 -5
  230. package/src/renderer/search-overlay.ts +25 -5
  231. package/src/renderer/selection-modal-overlay.ts +46 -14
  232. package/src/renderer/session-picker-modal.ts +18 -1
  233. package/src/renderer/settings-modal-helpers.ts +2 -40
  234. package/src/renderer/settings-modal.ts +88 -55
  235. package/src/renderer/system-message.ts +1 -1
  236. package/src/renderer/tool-call.ts +20 -11
  237. package/src/runtime/agent-runtime-events.ts +129 -0
  238. package/src/runtime/bootstrap-command-context.ts +7 -1
  239. package/src/runtime/bootstrap-command-parts.ts +11 -8
  240. package/src/runtime/bootstrap-core.ts +23 -65
  241. package/src/runtime/bootstrap-hook-bridge.ts +7 -18
  242. package/src/runtime/bootstrap-shell.ts +46 -8
  243. package/src/runtime/bootstrap.ts +36 -46
  244. package/src/runtime/connected-host-auth.ts +47 -0
  245. package/src/runtime/diagnostics/panels/index.ts +2 -2
  246. package/src/runtime/diagnostics/panels/panel-resources.ts +1 -1
  247. package/src/runtime/diagnostics/panels/policy.ts +7 -7
  248. package/src/runtime/index.ts +2 -5
  249. package/src/runtime/onboarding/apply-file-helpers.ts +66 -0
  250. package/src/runtime/onboarding/apply.ts +288 -74
  251. package/src/runtime/onboarding/derivation.ts +10 -13
  252. package/src/runtime/onboarding/snapshot.ts +2 -17
  253. package/src/runtime/onboarding/types.ts +34 -20
  254. package/src/runtime/onboarding/verify.ts +105 -4
  255. package/src/runtime/operator-token-cleanup.ts +3 -3
  256. package/src/runtime/services.ts +95 -11
  257. package/src/runtime/store/selectors/index.ts +3 -3
  258. package/src/runtime/store/state.ts +1 -4
  259. package/src/runtime/surface-feature-flags.ts +41 -6
  260. package/src/runtime/ui-read-models.ts +3 -4
  261. package/src/runtime/ui-services.ts +6 -6
  262. package/src/shell/blocking-input.ts +2 -1
  263. package/src/shell/service-settings-sync.ts +7 -7
  264. package/src/shell/ui-openers.ts +17 -38
  265. package/src/tools/agent-analysis-registry-policy.ts +0 -1
  266. package/src/tools/agent-channel-send-tool.ts +133 -0
  267. package/src/tools/agent-context-policy.ts +1 -1
  268. package/src/tools/agent-knowledge-ingest-tool.ts +405 -0
  269. package/src/tools/agent-knowledge-tool.ts +170 -0
  270. package/src/tools/agent-local-registry-tool.ts +279 -73
  271. package/src/tools/agent-media-generate-tool.ts +133 -0
  272. package/src/tools/agent-notify-tool.ts +143 -0
  273. package/src/tools/agent-operator-action-tool.ts +137 -0
  274. package/src/tools/agent-operator-briefing-tool.ts +217 -0
  275. package/src/tools/agent-reminder-schedule-tool.ts +237 -0
  276. package/src/tools/agent-tool-policy-guard.ts +13 -15
  277. package/src/tools/agent-work-plan-tool.ts +256 -0
  278. package/src/version.ts +1 -1
  279. package/docs/connected-services.md +0 -51
  280. package/src/cli/package-verification.ts +0 -274
  281. package/src/input/commands/policy-dispatch.ts +0 -339
  282. package/src/input/commands/policy.ts +0 -17
  283. package/src/panels/panel-picker.ts +0 -105
  284. package/src/panels/policy-panel.ts +0 -308
  285. package/src/renderer/panel-picker-overlay.ts +0 -202
@@ -9,16 +9,28 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
9
9
  detail: 'Use this as the Agent front door: chat in the main conversation, inspect state, choose model/provider, and open setup without switching modes.',
10
10
  actions: [
11
11
  { id: 'chat', label: 'Continue assistant chat', detail: 'Return to the main composer and type a normal message. Agent work stays serial in the main conversation.', kind: 'guidance', safety: 'safe' },
12
- { id: 'brief', label: 'Operator briefing', detail: 'Show a concise Agent status and next-actions briefing without mutating connected services.', command: '/brief', kind: 'command', safety: 'read-only' },
12
+ { id: 'brief', label: 'Operator briefing', detail: 'Show a concise Agent status and next-actions briefing without mutating the connected host.', command: '/brief', kind: 'command', safety: 'read-only' },
13
13
  { id: 'model', label: 'Choose model', detail: 'Open the model/provider workspace for the Agent chat route.', command: '/model', kind: 'command', safety: 'safe' },
14
14
  { id: 'setup-home', label: 'Setup checklist', detail: 'Jump to the first-run checklist for provider, knowledge, personas, skills, routines, memory, channels, and voice/media.', targetCategoryId: 'setup', kind: 'workspace', safety: 'safe' },
15
+ { id: 'channels-home', label: 'Channels', detail: 'Jump to companion pairing and channel readiness without changing connected-host routing.', targetCategoryId: 'channels', kind: 'workspace', safety: 'read-only' },
16
+ { id: 'mode-show', label: 'Interaction mode', detail: 'Review Agent interaction noise level and per-domain verbosity.', command: '/mode show', kind: 'command', safety: 'read-only' },
17
+ { id: 'mode-preset', label: 'Set interaction mode', detail: 'Open a confirmed form for quiet, balanced, or operator interaction mode.', editorKind: 'mode-preset', kind: 'editor', safety: 'safe' },
18
+ { id: 'conversation-home', label: 'Conversation controls', detail: 'Jump to transcript, context, save/load, undo/redo, retry, paste, title, and export controls.', targetCategoryId: 'conversation', kind: 'workspace', safety: 'safe' },
19
+ { id: 'artifacts-home', label: 'Artifacts and files', detail: 'Jump to attachment, export, source-ingest, and generated-media handling without leaving the TUI.', targetCategoryId: 'artifacts', kind: 'workspace', safety: 'safe' },
20
+ { id: 'host-home', label: 'Connected host', detail: 'Jump to connected-host health, tasks, sessions, channels, automation, remote, and control-plane posture.', targetCategoryId: 'host', kind: 'workspace', safety: 'read-only' },
15
21
  { id: 'knowledge-home', label: 'Agent Knowledge', detail: 'Jump to isolated Agent Knowledge status, ingest, search, and review flows.', targetCategoryId: 'knowledge', kind: 'workspace', safety: 'read-only' },
16
- { id: 'memory-home', label: 'Memory, skills, routines', detail: 'Jump to local memory, persona, skill, and routine setup. These are core Agent product features.', targetCategoryId: 'memory', kind: 'workspace', safety: 'safe' },
17
- { id: 'channels-home', label: 'Channels', detail: 'Jump to companion pairing and channel readiness without changing connected-service routing.', targetCategoryId: 'channels', kind: 'workspace', safety: 'read-only' },
22
+ { id: 'research-home', label: 'Web research', detail: 'Jump to read-only web research, URL inspection, and source-to-knowledge handoff actions.', targetCategoryId: 'research', kind: 'workspace', safety: 'read-only' },
23
+ { id: 'memory-home', label: 'Memory, skills, routines', detail: 'Jump to local memory, notes, persona, skill, and routine setup. These are core Agent product features.', targetCategoryId: 'memory', kind: 'workspace', safety: 'safe' },
24
+ { id: 'notes-home', label: 'Scratchpad notes', detail: 'Jump to Agent-local working notes for source triage, temporary decisions, and operator handoff.', targetCategoryId: 'notes', kind: 'workspace', safety: 'safe' },
25
+ { id: 'learned-behavior-home', label: 'Capture learned behavior', detail: 'Save a reviewed lesson, workflow, or operating style as a local skill, routine, or persona.', editorKind: 'learned-behavior', kind: 'editor', safety: 'safe' },
18
26
  { id: 'tools-home', label: 'Tools and MCP', detail: 'Jump to MCP server setup, tool inventory, and trust review for day-one operator tool use.', targetCategoryId: 'tools', kind: 'workspace', safety: 'safe' },
19
27
  { id: 'voice-home', label: 'Voice and media', detail: 'Jump to voice, TTS, image input, browser-tool, and media setup.', targetCategoryId: 'voice-media', kind: 'workspace', safety: 'safe' },
20
28
  { id: 'help', label: 'Browse commands', detail: 'Open registry-driven command help.', command: '/help', kind: 'command', safety: 'safe' },
21
- { id: 'health', label: 'Review health', detail: 'Show local health and connected-service status without starting or mutating anything.', command: '/health review', kind: 'command', safety: 'read-only' },
29
+ { id: 'welcome', label: 'Welcome and setup guide', detail: 'Open the Agent setup guide from the workspace.', command: '/welcome', kind: 'command', safety: 'safe' },
30
+ { id: 'health', label: 'Review health', detail: 'Show local health and connected-host status without starting or mutating anything.', command: '/health review', kind: 'command', safety: 'read-only' },
31
+ { id: 'doctor', label: 'Doctor diagnostics', detail: 'Run the same Agent doctor diagnostics from the TUI home workspace instead of relying on the CLI.', command: '/doctor', kind: 'command', safety: 'read-only' },
32
+ { id: 'compat', label: 'Host compatibility', detail: 'Inspect Agent SDK pin, connected-host version, and isolated Agent Knowledge route readiness from the TUI.', command: '/compat', kind: 'command', safety: 'read-only' },
33
+ { id: 'quit', label: 'Quit Agent', detail: 'Exit the TUI and restore terminal state.', command: '/quit', kind: 'command', safety: 'safe' },
22
34
  ],
23
35
  },
24
36
  {
@@ -31,18 +43,140 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
31
43
  { id: 'config', label: 'Open settings', detail: 'Open the fullscreen Agent settings workspace.', command: '/config', kind: 'command', safety: 'safe' },
32
44
  { id: 'setup', label: 'Run setup', detail: 'Review Agent settings in the fullscreen setup flow.', command: '/setup', kind: 'command', safety: 'safe' },
33
45
  { id: 'setup-provider-model', label: 'Provider and model', detail: 'Choose the provider/model route for normal assistant chat.', command: '/model', kind: 'command', safety: 'safe' },
34
- { id: 'setup-agent-knowledge', label: 'Agent Knowledge', detail: 'Inspect the isolated Agent Knowledge store before ingesting source-backed material.', command: '/knowledge status', kind: 'command', safety: 'read-only' },
35
- { id: 'setup-runtime-profiles', label: 'Agent profiles', detail: 'Browse starter templates for isolated Agent homes and operator identities.', command: '/agent-profile templates', kind: 'command', safety: 'read-only' },
46
+ { id: 'setup-model-pinned', label: 'Pinned models', detail: 'Inspect model favorites from the Agent TUI before changing model selection.', command: '/pin', kind: 'command', safety: 'read-only' },
47
+ { id: 'setup-model-refresh', label: 'Refresh model catalog', detail: 'Refresh model catalog, benchmark, and token-limit metadata from the Agent TUI.', command: '/refresh-models', kind: 'command', safety: 'safe' },
48
+ { id: 'setup-model-pin', label: 'Pin model', detail: 'Open a form that pins one model registry key for quick reuse.', editorKind: 'model-pin', kind: 'editor', safety: 'safe' },
49
+ { id: 'setup-model-unpin', label: 'Unpin model', detail: 'Open a form that removes one pinned model registry key.', editorKind: 'model-unpin', kind: 'editor', safety: 'safe' },
50
+ { id: 'setup-model-unpin-command', label: 'Unpin model command', detail: 'Use the direct unpin command when you already know the model registry key.', command: '/unpin', kind: 'command', safety: 'safe' },
51
+ { id: 'setup-effort', label: 'Reasoning effort', detail: 'Open a form that sets reasoning effort for normal Agent chat turns when supported by the selected model.', editorKind: 'effort-level', kind: 'editor', safety: 'safe' },
52
+ { id: 'setup-effort-command', label: 'Reasoning effort command', detail: 'Show or set reasoning effort with the registry command when you already know the level.', command: '/effort', kind: 'command', safety: 'safe' },
53
+ { id: 'setup-mode-show', label: 'Interaction mode', detail: 'Review current Agent interaction mode and domain verbosity.', command: '/mode show', kind: 'command', safety: 'read-only' },
54
+ { id: 'setup-mode-preset', label: 'Set interaction mode', detail: 'Open a confirmed form for quiet, balanced, or operator interaction mode.', editorKind: 'mode-preset', kind: 'editor', safety: 'safe' },
55
+ { id: 'setup-mode-domain', label: 'Set domain verbosity', detail: 'Open a confirmed form for one interaction-domain verbosity override.', editorKind: 'mode-domain', kind: 'editor', safety: 'safe' },
56
+ { id: 'setup-compat', label: 'Compatibility', detail: 'Inspect Agent SDK pin, connected host version, and isolated Agent Knowledge route readiness.', command: '/compat', kind: 'command', safety: 'read-only' },
57
+ { id: 'setup-agent-knowledge', label: 'Agent Knowledge', detail: 'Open isolated Agent Knowledge status, ask/search, ingest, source review, and reindex actions.', targetCategoryId: 'knowledge', kind: 'workspace', safety: 'safe' },
58
+ { id: 'setup-runtime-profiles', label: 'Agent profiles', detail: 'Open starter templates, isolated Agent homes, profile defaults, and profile import/export actions.', targetCategoryId: 'profiles', kind: 'workspace', safety: 'safe' },
36
59
  { id: 'setup-profile-from-discovered', label: 'Profile from discovered behavior', detail: 'Create an isolated Agent profile directly from reviewed local persona, skill, and routine files.', editorKind: 'profile-from-discovered', kind: 'editor', safety: 'safe' },
37
- { id: 'setup-personas', label: 'Personas', detail: 'Create or select the active local Agent persona.', targetCategoryId: 'personas', kind: 'workspace', safety: 'safe' },
38
- { id: 'setup-skills', label: 'Skills', detail: 'Create, review, and enable reusable local Agent skills.', targetCategoryId: 'skills', kind: 'workspace', safety: 'safe' },
39
- { id: 'setup-routines', label: 'Routines', detail: 'Create, review, and enable local Agent routines before any explicit schedule promotion.', targetCategoryId: 'routines', kind: 'workspace', safety: 'safe' },
40
- { id: 'setup-memory', label: 'Local memory', detail: 'Inspect Agent-local memory; secrets stay rejected or redacted.', command: '/memory', kind: 'command', safety: 'read-only' },
41
- { id: 'setup-channels', label: 'Channels', detail: 'Open companion pairing and channel readiness setup.', command: '/pair', kind: 'command', safety: 'safe' },
60
+ { id: 'support-bundle-export', label: 'Export support bundle', detail: 'Open a confirmed form that exports a redacted Agent support bundle from the TUI workspace.', editorKind: 'support-bundle-export', kind: 'editor', safety: 'safe' },
61
+ { id: 'support-bundle-inspect', label: 'Inspect support bundle', detail: 'Open a form that inspects a redacted Agent support bundle before import or sharing.', editorKind: 'support-bundle-inspect', kind: 'editor', safety: 'read-only' },
62
+ { id: 'support-bundle-import', label: 'Import support bundle', detail: 'Open a confirmed form that imports reviewed, non-redacted config values from an Agent support bundle.', editorKind: 'support-bundle-import', kind: 'editor', safety: 'safe' },
63
+ { id: 'support-bundle-command', label: 'Support bundle command', detail: 'Use the support-bundle command for export, inspect, or import from inside the Agent TUI.', command: '/bundle', kind: 'command', safety: 'safe' },
64
+ { id: 'setup-personas', label: 'Personas', detail: 'Create or select the active Agent-local persona.', targetCategoryId: 'personas', kind: 'workspace', safety: 'safe' },
65
+ { id: 'setup-skills', label: 'Skills', detail: 'Create, review, and enable reusable Agent-local skills.', targetCategoryId: 'skills', kind: 'workspace', safety: 'safe' },
66
+ { id: 'setup-routines', label: 'Routines', detail: 'Create, review, and enable Agent-local routines before any explicit schedule promotion.', targetCategoryId: 'routines', kind: 'workspace', safety: 'safe' },
67
+ { id: 'setup-memory', label: 'Local memory', detail: 'Open Agent-local memory creation, review, search, export/import, and maintenance actions. Secrets stay rejected or redacted.', targetCategoryId: 'memory', kind: 'workspace', safety: 'safe' },
68
+ { id: 'setup-notes', label: 'Scratchpad notes', detail: 'Open Agent-local notes for source triage and temporary context. Notes are not memory or Agent Knowledge.', targetCategoryId: 'notes', kind: 'workspace', safety: 'safe' },
69
+ { id: 'setup-channels', label: 'Channels', detail: 'Open companion pairing, channel readiness, delivery target, and notification setup.', targetCategoryId: 'channels', kind: 'workspace', safety: 'safe' },
42
70
  { id: 'setup-tools', label: 'Tools and MCP', detail: 'Open MCP setup, trust review, and tool inventory.', targetCategoryId: 'tools', kind: 'workspace', safety: 'safe' },
43
- { id: 'setup-voice-media', label: 'Voice and media', detail: 'Open TTS/media settings for voice and image-capable Agent flows.', command: '/config tts', kind: 'command', safety: 'safe' },
71
+ { id: 'setup-voice-media', label: 'Voice and media', detail: 'Open voice, TTS, image input, media provider, and browser-tool setup actions.', targetCategoryId: 'voice-media', kind: 'workspace', safety: 'safe' },
44
72
  { id: 'provider', label: 'Provider status', detail: 'Review provider/model posture.', command: '/provider', kind: 'command', safety: 'read-only' },
73
+ { id: 'provider-use', label: 'Use provider', detail: 'Open a provider-id form that switches the Agent chat provider from the workspace.', editorKind: 'provider-use', kind: 'editor', safety: 'safe' },
74
+ { id: 'provider-inspect', label: 'Inspect provider', detail: 'Open a provider-id form for read-only provider auth/setup inspection.', editorKind: 'provider-inspect', kind: 'editor', safety: 'read-only' },
75
+ { id: 'provider-routes', label: 'Inspect provider routes', detail: 'Open a provider-id form for read-only route and fallback inspection.', editorKind: 'provider-routes', kind: 'editor', safety: 'read-only' },
76
+ { id: 'provider-account-repair', label: 'Provider account repair', detail: 'Open a provider-id form for read-only account repair guidance.', editorKind: 'provider-account-repair', kind: 'editor', safety: 'read-only' },
77
+ { id: 'provider-add', label: 'Add custom provider', detail: 'Open a confirmed form that adds one OpenAI-compatible custom provider for Agent model routing.', editorKind: 'provider-add', kind: 'editor', safety: 'safe' },
78
+ { id: 'provider-remove', label: 'Remove custom provider', detail: 'Open a confirmed form that removes one Agent custom provider config.', editorKind: 'provider-remove', kind: 'editor', safety: 'safe' },
79
+ { id: 'provider-accounts', label: 'Provider accounts', detail: 'Review provider account routes, subscription windows, and billing-path safety without starting login or repair flows.', command: '/accounts review', kind: 'command', safety: 'read-only' },
80
+ { id: 'subscription-providers', label: 'Subscription providers', detail: 'Review provider subscription login routes without starting a login.', command: '/subscription providers', kind: 'command', safety: 'read-only' },
81
+ { id: 'subscription-review', label: 'Subscription review', detail: 'Inspect active and pending provider subscription sessions without printing token values.', command: '/subscription review', kind: 'command', safety: 'read-only' },
82
+ { id: 'subscription-inspect', label: 'Inspect subscription provider', detail: 'Open a provider-id form for read-only OAuth/subscription route inspection.', editorKind: 'subscription-inspect', kind: 'editor', safety: 'read-only' },
83
+ { id: 'subscription-login-start', label: 'Start subscription login', detail: 'Open a confirmed form for one provider OAuth login start, with browser/manual completion controls.', editorKind: 'subscription-login-start', kind: 'editor', safety: 'safe' },
84
+ { id: 'subscription-login-finish', label: 'Finish subscription login', detail: 'Open a confirmed form that stores one completed provider subscription session from a code or redirect URL.', editorKind: 'subscription-login-finish', kind: 'editor', safety: 'safe' },
85
+ { id: 'subscription-logout', label: 'Logout subscription', detail: 'Open a confirmed form that removes one stored provider subscription session.', editorKind: 'subscription-logout', kind: 'editor', safety: 'safe' },
86
+ { id: 'subscription-bundle-export', label: 'Export subscription bundle', detail: 'Open a confirmed form that exports a redacted provider subscription bundle for setup review.', editorKind: 'subscription-bundle-export', kind: 'editor', safety: 'safe' },
87
+ { id: 'subscription-bundle-inspect', label: 'Inspect subscription bundle', detail: 'Open a form that inspects a provider subscription bundle before setup review.', editorKind: 'subscription-bundle-inspect', kind: 'editor', safety: 'read-only' },
45
88
  { id: 'auth', label: 'Auth review', detail: 'Review authentication posture without printing token values.', command: '/auth review', kind: 'command', safety: 'read-only' },
89
+ { id: 'auth-show', label: 'Inspect provider auth', detail: 'Open a provider-id form for read-only provider auth inspection.', editorKind: 'auth-show', kind: 'editor', safety: 'read-only' },
90
+ { id: 'auth-repair', label: 'Auth repair guidance', detail: 'Open a provider-id form that shows auth repair guidance without storing tokens or starting login.', editorKind: 'auth-repair', kind: 'editor', safety: 'read-only' },
91
+ { id: 'auth-bundle-export', label: 'Export auth bundle', detail: 'Open a confirmed form that exports a redacted auth review bundle.', editorKind: 'auth-bundle-export', kind: 'editor', safety: 'safe' },
92
+ { id: 'auth-bundle-inspect', label: 'Inspect auth bundle', detail: 'Open a form that inspects an auth review bundle before setup review.', editorKind: 'auth-bundle-inspect', kind: 'editor', safety: 'read-only' },
93
+ ],
94
+ },
95
+ {
96
+ id: 'research',
97
+ group: 'OPERATE',
98
+ label: 'Research',
99
+ summary: 'Read-only web research and source triage in the main conversation.',
100
+ detail: 'Use this workspace to ask Agent to search, inspect URLs, compare sources, and decide what belongs in isolated Agent Knowledge. Research requests run in the normal conversation; source ingestion is explicit.',
101
+ actions: [
102
+ { id: 'research-main', label: 'Research in conversation', detail: 'Open a form that submits a read-only web research request to the main Agent conversation.', editorKind: 'web-research', kind: 'editor', safety: 'read-only' },
103
+ { id: 'research-url', label: 'Inspect URL', detail: 'Open a form that submits one URL inspection task to the main Agent conversation without ingesting it.', editorKind: 'web-fetch', kind: 'editor', safety: 'read-only' },
104
+ { id: 'research-context-ref', label: 'Use URL as context', detail: 'From the composer, type @https://... to include a URL reference in a normal turn without ingesting it into Agent Knowledge.', kind: 'guidance', safety: 'read-only' },
105
+ { id: 'research-knowledge-search', label: 'Search Agent Knowledge', detail: 'Search existing isolated Agent Knowledge before going to the web.', editorKind: 'knowledge-search', kind: 'editor', safety: 'read-only' },
106
+ { id: 'research-knowledge-ask', label: 'Ask Agent Knowledge', detail: 'Ask isolated Agent Knowledge. It fails closed and never uses default knowledge or other knowledge segments.', editorKind: 'knowledge-ask', kind: 'editor', safety: 'read-only' },
107
+ { id: 'research-note', label: 'Capture research note', detail: 'Create an Agent-local scratchpad note for source triage without ingesting it into Agent Knowledge.', editorKind: 'note', kind: 'editor', safety: 'safe' },
108
+ { id: 'research-notes', label: 'Review notes', detail: 'Open scratchpad notes before deciding whether a source belongs in durable memory or Agent Knowledge.', targetCategoryId: 'notes', kind: 'workspace', safety: 'safe' },
109
+ { id: 'research-ingest-url', label: 'Ingest URL into Agent Knowledge', detail: 'After reviewing a source, explicitly ingest it into isolated Agent Knowledge with typed confirmation.', editorKind: 'knowledge-url', kind: 'editor', safety: 'safe' },
110
+ { id: 'research-import-urls', label: 'Import source URL list', detail: 'Import a reviewed local URL list into isolated Agent Knowledge with typed confirmation.', editorKind: 'knowledge-urls', kind: 'editor', safety: 'safe' },
111
+ { id: 'research-web-policy', label: 'Research policy', detail: 'Web research is user-directed and serial. Agent should not silently ingest sources, send external messages, or mutate connected-host state from research requests.', kind: 'guidance', safety: 'blocked' },
112
+ ],
113
+ },
114
+ {
115
+ id: 'artifacts',
116
+ group: 'OPERATE',
117
+ label: 'Artifacts',
118
+ summary: 'Files, attachments, exports, source ingest, and generated media.',
119
+ detail: 'Use this workspace to handle concrete user-visible artifacts: attach images, export conversations, ingest source files into Agent Knowledge, inspect source libraries, and generate media with explicit confirmation.',
120
+ actions: [
121
+ { id: 'artifact-flow', label: 'Artifact workflow', detail: 'Attach or export first, decide whether a source belongs in isolated Agent Knowledge, then inspect generated artifact ids or source records from the transcript.', kind: 'guidance', safety: 'safe' },
122
+ { id: 'artifact-attach-image', label: 'Attach image to prompt', detail: 'Open an in-workspace image attachment form for a local image path and optional prompt.', editorKind: 'image-input', kind: 'editor', safety: 'safe' },
123
+ { id: 'artifact-paste', label: 'Paste clipboard', detail: 'Insert clipboard text or image into the current prompt through the TUI paste route.', command: '/paste', kind: 'command', safety: 'safe' },
124
+ { id: 'artifact-export-conversation', label: 'Export current conversation', detail: 'Open a confirmed form that exports the current Agent conversation to a workspace file.', editorKind: 'conversation-export', kind: 'editor', safety: 'safe' },
125
+ { id: 'artifact-session-export', label: 'Export saved session', detail: 'Open a form that exports one saved Agent session transcript as markdown or text.', editorKind: 'session-export-saved', kind: 'editor', safety: 'read-only' },
126
+ { id: 'artifact-ingest-file', label: 'Ingest file into Agent Knowledge', detail: 'Open a confirmed form that imports one local file into the isolated Agent Knowledge segment.', editorKind: 'knowledge-file', kind: 'editor', safety: 'safe' },
127
+ { id: 'artifact-ingest-url-list', label: 'Import URL list', detail: 'Open a confirmed form that imports a local URL list into Agent Knowledge.', editorKind: 'knowledge-urls', kind: 'editor', safety: 'safe' },
128
+ { id: 'artifact-import-bookmarks', label: 'Import bookmarks', detail: 'Open a confirmed form that imports a browser bookmark export into Agent Knowledge.', editorKind: 'knowledge-bookmarks', kind: 'editor', safety: 'safe' },
129
+ { id: 'artifact-browser-history', label: 'Import browser history', detail: 'Open a confirmed form that imports local browser history/bookmarks into Agent Knowledge.', editorKind: 'knowledge-browser-history', kind: 'editor', safety: 'safe' },
130
+ { id: 'artifact-source-library', label: 'Agent Knowledge sources', detail: 'List source-backed records already ingested into the isolated Agent Knowledge segment.', command: '/knowledge list --kind sources', kind: 'command', safety: 'read-only' },
131
+ { id: 'artifact-show-source', label: 'Show source or node', detail: 'Open an in-workspace form that shows one Agent Knowledge source, node, or issue by id.', editorKind: 'knowledge-get', kind: 'editor', safety: 'read-only' },
132
+ { id: 'artifact-media-providers', label: 'Media providers', detail: 'Inspect configured media provider readiness without generating artifacts.', command: '/media providers', kind: 'command', safety: 'read-only' },
133
+ { id: 'artifact-generate-media', label: 'Generate image or video', detail: 'Open a confirmed prompt form that generates image or video artifacts through configured media providers.', editorKind: 'media-generate', kind: 'editor', safety: 'safe' },
134
+ { id: 'artifact-policy', label: 'Artifact safety', detail: 'Artifact creation, ingest, and media generation are explicit actions. Agent never writes to default knowledge or prints inline base64.', kind: 'guidance', safety: 'read-only' },
135
+ ],
136
+ },
137
+ {
138
+ id: 'conversation',
139
+ group: 'OPERATE',
140
+ label: 'Conversation',
141
+ summary: 'Transcript, prompt, context, and session controls.',
142
+ detail: 'Use this workspace for the main TUI conversation: context review, compaction, prompt helpers, transcript navigation, session continuity, title, export, undo, redo, and retry.',
143
+ actions: [
144
+ { id: 'conversation-return', label: 'Return to composer', detail: 'Close the workspace and keep working in the main Agent conversation.', kind: 'guidance', safety: 'safe' },
145
+ { id: 'conversation-context', label: 'Context usage', detail: 'Inspect context-window usage, token pressure, and message breakdown.', command: '/context', kind: 'command', safety: 'read-only' },
146
+ { id: 'conversation-context-refs', label: 'Context references', detail: 'Type @file, @folder, or @https://... in the composer to add bounded context to the main Agent turn. Use !@file only when you want raw file injection.', kind: 'guidance', safety: 'safe' },
147
+ { id: 'conversation-compact', label: 'Compact conversation', detail: 'Summarize the current conversation to free context while preserving useful working state.', command: '/compact', kind: 'command', safety: 'safe' },
148
+ { id: 'conversation-title', label: 'Show conversation title', detail: 'Show the current conversation title. Use title-edit actions from saved session forms for naming workflows.', command: '/title', kind: 'command', safety: 'read-only' },
149
+ { id: 'conversation-save', label: 'Save current session', detail: 'Open a confirmed form that saves the current Agent session under a local name.', editorKind: 'session-save', kind: 'editor', safety: 'safe' },
150
+ { id: 'conversation-save-command', label: 'Save session command', detail: 'Save the current Agent session through the direct slash command.', command: '/save', kind: 'command', safety: 'safe' },
151
+ { id: 'conversation-load', label: 'Load saved session', detail: 'Open a confirmed form that loads one saved Agent session into the current conversation.', editorKind: 'session-load', kind: 'editor', safety: 'safe' },
152
+ { id: 'conversation-sessions', label: 'Browse saved sessions', detail: 'Browse saved Agent sessions without leaving the TUI.', command: '/sessions', kind: 'command', safety: 'read-only' },
153
+ { id: 'conversation-session-info', label: 'Inspect saved session', detail: 'Open a read-only form that prints saved-session metadata.', editorKind: 'session-info', kind: 'editor', safety: 'read-only' },
154
+ { id: 'conversation-session-search', label: 'Search saved sessions', detail: 'Open a form that searches saved Agent sessions.', editorKind: 'session-search', kind: 'editor', safety: 'read-only' },
155
+ { id: 'conversation-session-export', label: 'Export saved session', detail: 'Open a form that prints one saved-session transcript as markdown or text.', editorKind: 'session-export-saved', kind: 'editor', safety: 'read-only' },
156
+ { id: 'conversation-session-delete', label: 'Delete saved session', detail: 'Open a confirmed form before deleting one saved Agent session.', editorKind: 'session-delete', kind: 'editor', safety: 'safe' },
157
+ { id: 'conversation-export-current', label: 'Export current conversation', detail: 'Open a confirmed form that exports the current Agent conversation to a workspace file.', editorKind: 'conversation-export', kind: 'editor', safety: 'safe' },
158
+ { id: 'conversation-controls-review', label: 'Review transcript', detail: 'Inspect current transcript structure without changing the conversation.', command: '/conversation review', kind: 'command', safety: 'read-only' },
159
+ { id: 'conversation-controls-find', label: 'Find transcript text', detail: 'Open a search form for the current Agent transcript.', editorKind: 'conversation-find', kind: 'editor', safety: 'read-only' },
160
+ { id: 'conversation-controls-next-event', label: 'Next transcript event', detail: 'Jump to the next indexed transcript event.', command: '/conversation next', kind: 'command', safety: 'read-only' },
161
+ { id: 'conversation-controls-prev-event', label: 'Previous transcript event', detail: 'Jump to the previous indexed transcript event.', command: '/conversation prev', kind: 'command', safety: 'read-only' },
162
+ { id: 'conversation-bookmarks', label: 'Bookmarks', detail: 'List bookmarked transcript blocks.', command: '/bookmarks', kind: 'command', safety: 'read-only' },
163
+ { id: 'conversation-paste', label: 'Paste clipboard', detail: 'Insert clipboard text or image into the prompt through the TUI paste route.', command: '/paste', kind: 'command', safety: 'safe' },
164
+ { id: 'conversation-image', label: 'Attach image', detail: 'Open an in-workspace image form for attaching a real image path and optional prompt.', editorKind: 'image-input', kind: 'editor', safety: 'safe' },
165
+ { id: 'conversation-image-command', label: 'Attach image command', detail: 'Attach an image file to the next Agent message using the slash command.', command: '/image', kind: 'command', safety: 'safe' },
166
+ { id: 'conversation-tts', label: 'Speak a prompt', detail: 'Open an in-workspace prompt form for spoken assistant replies through configured live TTS.', editorKind: 'tts-prompt', kind: 'editor', safety: 'safe' },
167
+ { id: 'conversation-tts-command', label: 'TTS command', detail: 'Submit or stop a spoken-response prompt using the direct slash command.', command: '/tts', kind: 'command', safety: 'safe' },
168
+ { id: 'conversation-undo', label: 'Undo last turn', detail: 'Remove the last conversation turn from the current transcript.', command: '/undo', kind: 'command', safety: 'safe' },
169
+ { id: 'conversation-redo', label: 'Redo turn', detail: 'Restore the last undone conversation turn.', command: '/redo', kind: 'command', safety: 'safe' },
170
+ { id: 'conversation-retry', label: 'Retry last message', detail: 'Re-send the last user message in the main Agent conversation.', command: '/retry', kind: 'command', safety: 'safe' },
171
+ { id: 'conversation-clear', label: 'Clear display', detail: 'Clear the visible transcript display while keeping model context.', command: '/clear', kind: 'command', safety: 'safe' },
172
+ { id: 'conversation-reset', label: 'Reset conversation', detail: 'Clear display and model context for a fresh conversation.', command: '/reset', kind: 'command', safety: 'safe' },
173
+ { id: 'conversation-expand', label: 'Expand transcript blocks', detail: 'Expand collapsed thinking, tool, code, or all transcript blocks.', command: '/expand', kind: 'command', safety: 'safe' },
174
+ { id: 'conversation-collapse', label: 'Collapse transcript blocks', detail: 'Collapse thinking, tool, code, or all transcript blocks to reduce visual noise.', command: '/collapse', kind: 'command', safety: 'safe' },
175
+ { id: 'conversation-next-error', label: 'Next error', detail: 'Jump to the next error-like transcript message.', command: '/next-error', kind: 'command', safety: 'read-only' },
176
+ { id: 'conversation-prev-error', label: 'Previous error', detail: 'Jump to the previous error-like transcript message.', command: '/prev-error', kind: 'command', safety: 'read-only' },
177
+ { id: 'conversation-shortcuts', label: 'Keyboard shortcuts', detail: 'Open the keyboard shortcuts reference.', command: '/shortcuts', kind: 'command', safety: 'read-only' },
178
+ { id: 'conversation-keybindings', label: 'Keybindings', detail: 'List current keyboard bindings and their config path.', command: '/keybindings', kind: 'command', safety: 'read-only' },
179
+ { id: 'conversation-command-browser', label: 'Command browser', detail: 'Open registry-driven command browsing inside the TUI.', command: '/commands', kind: 'command', safety: 'read-only' },
46
180
  ],
47
181
  },
48
182
  {
@@ -52,11 +186,22 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
52
186
  summary: 'Companion pairing, channel posture, and delivery safety.',
53
187
  detail: 'Agent uses connected channel accounts. Pairing, account inspection, and readiness checks are visible here; inbound delivery and public channel exposure stay policy-gated.',
54
188
  actions: [
189
+ { id: 'channel-setup-path', label: 'Setup path', detail: 'Use this workspace as the channel setup guide: pair companion, inspect readiness, check accounts/policies/status, review one channel, then add delivery targets only through confirmed forms.', kind: 'guidance', safety: 'safe' },
55
190
  { id: 'pair', label: 'Pair companion', detail: 'Open the QR pairing view for companion app setup.', command: '/pair', kind: 'command', safety: 'safe' },
56
- { id: 'channel-readiness', label: 'Channel readiness', detail: 'Show the read-only readiness matrix, then use /channels attention or /channels show <id> for setup detail.', command: '/channels', kind: 'command', safety: 'read-only' },
191
+ { id: 'channel-readiness', label: 'Channel readiness', detail: 'Show the read-only readiness matrix.', command: '/channels', kind: 'command', safety: 'read-only' },
192
+ { id: 'channel-attention', label: 'Needs attention', detail: 'Show enabled channels that still need setup or a delivery target.', command: '/channels attention', kind: 'command', safety: 'read-only' },
193
+ { id: 'channel-accounts', label: 'Channel accounts', detail: 'Inspect connected channel accounts without printing secret values or sending messages.', command: '/channels accounts', kind: 'command', safety: 'read-only' },
194
+ { id: 'channel-policies', label: 'Channel policies', detail: 'Inspect channel delivery policy posture without changing routing.', command: '/channels policies', kind: 'command', safety: 'read-only' },
195
+ { id: 'channel-status', label: 'Live channel status', detail: 'Inspect channel runtime status from the connected host without mutating state.', command: '/channels status', kind: 'command', safety: 'read-only' },
196
+ { id: 'channel-show', label: 'Show channel detail', detail: 'Open a channel-id form for read-only readiness details.', editorKind: 'channel-show', kind: 'editor', safety: 'read-only' },
197
+ { id: 'channel-doctor', label: 'Run channel doctor', detail: 'Open a channel-id form for read-only route diagnostics.', editorKind: 'channel-doctor', kind: 'editor', safety: 'read-only' },
198
+ { id: 'channel-setup', label: 'Setup guidance', detail: 'Open a channel-id form for read-only setup guidance.', editorKind: 'channel-setup', kind: 'editor', safety: 'read-only' },
57
199
  { id: 'notification-routes', label: 'Notification routes', detail: 'Inspect configured webhook notification URLs without sending a test message.', command: '/notify list', kind: 'command', safety: 'read-only' },
200
+ { id: 'notification-send', label: 'Send notification', detail: 'Open a confirmed form that sends one plain-text message to configured Agent notification webhook targets.', editorKind: 'notify-send', kind: 'editor', safety: 'safe' },
201
+ { id: 'channel-send', label: 'Send channel message', detail: 'Open a confirmed form that sends one message through a configured delivery target.', editorKind: 'channel-send', kind: 'editor', safety: 'safe' },
58
202
  { id: 'notification-add-webhook', label: 'Add webhook target', detail: 'Open a confirmed form that adds one webhook notification target for explicit reminder and routine delivery.', editorKind: 'notify-webhook', kind: 'editor', safety: 'safe' },
59
203
  { id: 'notification-remove-webhook', label: 'Remove webhook target', detail: 'Open a confirmed form that removes one exact webhook notification target from Agent delivery.', editorKind: 'notify-webhook-remove', kind: 'editor', safety: 'safe' },
204
+ { id: 'notification-clear-webhooks', label: 'Clear webhook targets', detail: 'Open a confirmed form before removing every configured webhook notification target.', editorKind: 'notify-webhook-clear', kind: 'editor', safety: 'safe' },
60
205
  { id: 'notification-test-webhooks', label: 'Test webhook targets', detail: 'Open a confirmed form that sends one notification test to configured webhook targets only after typed confirmation.', editorKind: 'notify-webhook-test', kind: 'editor', safety: 'safe' },
61
206
  { id: 'setup-review', label: 'Health review', detail: 'Review setup posture without changing inbound delivery or mutating channel state.', command: '/health review', kind: 'command', safety: 'read-only' },
62
207
  { id: 'channel-safety', label: 'Delivery safety', detail: 'External messages, channel DMs, and public delivery targets require explicit user action and Agent policy. Agent will not silently send or expose channels from this workspace.', kind: 'guidance', safety: 'blocked' },
@@ -69,12 +214,26 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
69
214
  summary: 'MCP server setup, trust review, and tool inventory.',
70
215
  detail: 'Configure and inspect task tools from the Agent TUI. Adding or changing tools requires typed confirmation; normal chat still chooses tools serially in the main conversation.',
71
216
  actions: [
72
- { id: 'mcp-workspace', label: 'Open MCP workspace', detail: 'Open the fullscreen MCP server and tool workspace with live server status, tool list, config paths, and command previews.', command: '/mcp', kind: 'command', safety: 'safe' },
217
+ { id: 'mcp-workspace', label: 'Open MCP workspace', detail: 'Open the fullscreen MCP server and tool workspace with live server status, tool list, config paths, and confirmed add/remove/reload actions.', command: '/mcp', kind: 'command', safety: 'safe' },
73
218
  { id: 'mcp-review', label: 'MCP review', detail: 'Inspect MCP server connection, trust, role, and quarantine posture.', command: '/mcp review', kind: 'command', safety: 'read-only' },
74
219
  { id: 'mcp-tools', label: 'Tool inventory', detail: 'List available MCP tools grouped by server.', command: '/mcp tools', kind: 'command', safety: 'read-only' },
220
+ { id: 'mcp-tools-server', label: 'Server tool inventory', detail: 'Open a server-name form for read-only MCP tool inventory from one server.', editorKind: 'mcp-tools-server', kind: 'editor', safety: 'read-only' },
75
221
  { id: 'mcp-config', label: 'Config locations', detail: 'Show effective MCP config locations and source scopes without mutating them.', command: '/mcp config', kind: 'command', safety: 'read-only' },
76
222
  { id: 'mcp-add-server', label: 'Add MCP server', detail: 'Open a confirmed form that adds or updates one MCP server config with scope, role, trust, env refs, paths, and hosts.', editorKind: 'mcp-server', kind: 'editor', safety: 'safe' },
77
223
  { id: 'mcp-auth-review', label: 'Auth review', detail: 'Show MCP auth and quarantine attention without approving or changing trust.', command: '/mcp auth-review', kind: 'command', safety: 'read-only' },
224
+ { id: 'mcp-repair', label: 'Repair guidance', detail: 'Open a server-name form for read-only MCP repair guidance and next steps.', editorKind: 'mcp-repair', kind: 'editor', safety: 'read-only' },
225
+ { id: 'secret-providers', label: 'Secret providers', detail: 'List supported external secret reference providers without printing secret values.', command: '/secrets providers', kind: 'command', safety: 'read-only' },
226
+ { id: 'secret-list', label: 'Stored secrets', detail: 'List stored secret keys and refs without printing secret values.', command: '/secrets list', kind: 'command', safety: 'read-only' },
227
+ { id: 'secret-set', label: 'Store secret value', detail: 'Open a masked, confirmed form that stores one secret value through the Agent secret manager.', editorKind: 'secret-set', kind: 'editor', safety: 'safe' },
228
+ { id: 'secret-link', label: 'Link secret ref', detail: 'Open a confirmed form that links one key to a goodvibes://secrets/... external reference.', editorKind: 'secret-link', kind: 'editor', safety: 'safe' },
229
+ { id: 'secret-test', label: 'Test secret ref', detail: 'Open a confirmed form that tests one secret reference while printing only redacted status.', editorKind: 'secret-test', kind: 'editor', safety: 'safe' },
230
+ { id: 'secret-delete', label: 'Delete secret', detail: 'Open a confirmed form that deletes one stored secret key from the selected scope and storage mode.', editorKind: 'secret-delete', kind: 'editor', safety: 'safe' },
231
+ { id: 'trust-review', label: 'Trust review', detail: 'Review permission, secret, plugin, and MCP trust posture without exporting bundles or changing trust.', command: '/trust review', kind: 'command', safety: 'read-only' },
232
+ { id: 'trust-bundle-export', label: 'Export trust bundle', detail: 'Open a confirmed form that exports a redacted trust review bundle.', editorKind: 'trust-bundle-export', kind: 'editor', safety: 'safe' },
233
+ { id: 'trust-bundle-inspect', label: 'Inspect trust bundle', detail: 'Open a form that inspects a trust review bundle before setup review.', editorKind: 'trust-bundle-inspect', kind: 'editor', safety: 'read-only' },
234
+ { id: 'security-review', label: 'Security review', detail: 'Inspect token posture, MCP attack paths, policy lint, and plugin risk without mutating security state.', command: '/security review', kind: 'command', safety: 'read-only' },
235
+ { id: 'security-attack-paths', label: 'MCP attack paths', detail: 'Inspect MCP attack-path findings without changing trust or quarantine state.', command: '/security attack-paths', kind: 'command', safety: 'read-only' },
236
+ { id: 'security-tokens', label: 'Token audit', detail: 'Inspect registered API token scope and rotation posture without printing token values.', command: '/security tokens', kind: 'command', safety: 'read-only' },
78
237
  { id: 'mcp-settings', label: 'Settings workspace', detail: 'Open settings at the MCP section for deeper review, including allow-all decisions.', command: '/settings mcp', kind: 'command', safety: 'safe' },
79
238
  { id: 'mcp-safety', label: 'Tool safety', detail: 'Agent may inspect and add reviewed MCP servers by explicit command, but will not silently install packages, change trust, or expose tools from ordinary chat.', kind: 'guidance', safety: 'blocked' },
80
239
  ],
@@ -83,18 +242,35 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
83
242
  id: 'knowledge',
84
243
  group: 'KNOW',
85
244
  label: 'Knowledge',
86
- summary: 'Agent Knowledge/Wiki and source-backed lookup.',
87
- detail: 'Agent knowledge calls use the isolated Agent Knowledge route family only. Default regular wiki and non-Agent knowledge segments are not the Agent knowledge environment.',
245
+ summary: 'Agent Knowledge and source-backed lookup.',
246
+ detail: 'Agent knowledge calls use the isolated Agent Knowledge route family only. Default knowledge and non-Agent knowledge segments are not the Agent knowledge environment.',
88
247
  actions: [
89
248
  { id: 'knowledge-status', label: 'Knowledge status', detail: 'Inspect Agent knowledge readiness and counts.', command: '/knowledge status', kind: 'command', safety: 'read-only' },
90
249
  { id: 'knowledge-search', label: 'Search Agent knowledge', detail: 'Open an in-workspace search form for the isolated Agent Knowledge index.', editorKind: 'knowledge-search', kind: 'editor', safety: 'read-only' },
91
250
  { id: 'knowledge-ingest-url', label: 'Ingest URL', detail: 'Open an in-workspace form that ingests a real URL into Agent Knowledge only after typed confirmation.', editorKind: 'knowledge-url', kind: 'editor', safety: 'safe' },
251
+ { id: 'knowledge-import-urls', label: 'Import URL list', detail: 'Open an in-workspace form that imports a local URL list into Agent Knowledge only after typed confirmation.', editorKind: 'knowledge-urls', kind: 'editor', safety: 'safe' },
92
252
  { id: 'knowledge-ingest-file', label: 'Ingest file', detail: 'Open an in-workspace form that imports a local file into Agent Knowledge only after typed confirmation.', editorKind: 'knowledge-file', kind: 'editor', safety: 'safe' },
93
253
  { id: 'knowledge-import-bookmarks', label: 'Import bookmarks', detail: 'Open an in-workspace form that imports a browser bookmark export into Agent Knowledge after typed confirmation.', editorKind: 'knowledge-bookmarks', kind: 'editor', safety: 'safe' },
94
254
  { id: 'knowledge-import-browser-history', label: 'Import browser history', detail: 'Open an in-workspace form that imports local browser history/bookmarks into Agent Knowledge after typed confirmation.', editorKind: 'knowledge-browser-history', kind: 'editor', safety: 'safe' },
255
+ { id: 'knowledge-connectors', label: 'Connector inventory', detail: 'List Agent Knowledge connectors and readiness without ingesting anything.', command: '/knowledge connectors', kind: 'command', safety: 'read-only' },
256
+ { id: 'knowledge-connector-show', label: 'Connector detail', detail: 'Open an in-workspace form that shows one Agent Knowledge connector by id.', editorKind: 'knowledge-connector-show', kind: 'editor', safety: 'read-only' },
257
+ { id: 'knowledge-connector-doctor', label: 'Connector doctor', detail: 'Open an in-workspace form that runs a read-only readiness doctor for one Agent Knowledge connector.', editorKind: 'knowledge-connector-doctor', kind: 'editor', safety: 'read-only' },
95
258
  { id: 'knowledge-ingest-connector', label: 'Ingest connector input', detail: 'Open an in-workspace form for explicit connector input after checking connector readiness.', editorKind: 'knowledge-connector-ingest', kind: 'editor', safety: 'safe' },
96
259
  { id: 'knowledge-review-queue', label: 'Review queue', detail: 'Inspect source, item, and issue review work before accepting, rejecting, or resolving anything.', command: '/knowledge queue', kind: 'command', safety: 'read-only' },
97
260
  { id: 'knowledge-sources', label: 'Source library', detail: 'List source-backed records already ingested into the isolated Agent Knowledge segment.', command: '/knowledge list --kind sources', kind: 'command', safety: 'read-only' },
261
+ { id: 'knowledge-nodes', label: 'Node library', detail: 'List indexed Agent Knowledge nodes without querying default knowledge.', command: '/knowledge list --kind nodes', kind: 'command', safety: 'read-only' },
262
+ { id: 'knowledge-issues', label: 'Issue library', detail: 'List Agent Knowledge issues from the isolated Agent segment without changing review state.', command: '/knowledge list --kind issues', kind: 'command', safety: 'read-only' },
263
+ { id: 'knowledge-get', label: 'Show item', detail: 'Open an in-workspace form that shows one Agent Knowledge source, node, or issue by id.', editorKind: 'knowledge-get', kind: 'editor', safety: 'read-only' },
264
+ { id: 'knowledge-map', label: 'Knowledge map', detail: 'Open an in-workspace form that summarizes the isolated Agent Knowledge graph map.', editorKind: 'knowledge-map', kind: 'editor', safety: 'read-only' },
265
+ { id: 'knowledge-review-issue', label: 'Review issue', detail: 'Open a confirmed form that accepts, rejects, resolves, reopens, edits, or forgets one Agent Knowledge issue.', editorKind: 'knowledge-review-issue', kind: 'editor', safety: 'safe' },
266
+ { id: 'knowledge-candidates', label: 'Consolidation candidates', detail: 'Inspect Agent Knowledge consolidation candidates without running a consolidation job.', command: '/knowledge candidates', kind: 'command', safety: 'read-only' },
267
+ { id: 'knowledge-lint', label: 'Knowledge lint', detail: 'Inspect Agent Knowledge lint findings.', command: '/knowledge lint', kind: 'command', safety: 'read-only' },
268
+ { id: 'knowledge-reports', label: 'Knowledge reports', detail: 'Inspect recent Agent Knowledge reports without mutating knowledge.', command: '/knowledge reports', kind: 'command', safety: 'read-only' },
269
+ { id: 'knowledge-schedules', label: 'Knowledge schedules', detail: 'Inspect Agent Knowledge report schedules without changing schedules.', command: '/knowledge schedules', kind: 'command', safety: 'read-only' },
270
+ { id: 'knowledge-packet', label: 'Build prompt packet', detail: 'Open an in-workspace form that builds a compact Agent Knowledge prompt packet for a task.', editorKind: 'knowledge-packet', kind: 'editor', safety: 'read-only' },
271
+ { id: 'knowledge-explain', label: 'Explain selection', detail: 'Open an in-workspace form that explains which Agent Knowledge context would be selected.', editorKind: 'knowledge-explain', kind: 'editor', safety: 'read-only' },
272
+ { id: 'knowledge-consolidate', label: 'Consolidate knowledge', detail: 'Open a confirmed form that runs isolated Agent Knowledge consolidation.', editorKind: 'knowledge-consolidate', kind: 'editor', safety: 'safe' },
273
+ { id: 'knowledge-reindex', label: 'Reindex Agent Knowledge', detail: 'Open a confirmed form that rebuilds the isolated Agent Knowledge index without touching default knowledge.', editorKind: 'knowledge-reindex', kind: 'editor', safety: 'safe' },
98
274
  { id: 'knowledge-ask', label: 'Ask Agent knowledge', detail: 'Open an in-workspace question form for isolated Agent Knowledge. Normal chat still uses the main conversation.', editorKind: 'knowledge-ask', kind: 'editor', safety: 'read-only' },
99
275
  ],
100
276
  },
@@ -103,14 +279,25 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
103
279
  group: 'SETUP',
104
280
  label: 'Voice & Media',
105
281
  summary: 'Voice, TTS, image input, browser tools, and media providers.',
106
- detail: 'Voice, media, browser tools, and image-capable flows are first-class Agent tools. Service management stays outside Agent and side effects stay explicit.',
282
+ detail: 'Voice, media, browser tools, and image-capable flows are first-class Agent tools. Connected-host administration stays outside Agent and side effects stay explicit.',
107
283
  actions: [
108
284
  { id: 'tts-config', label: 'Configure live TTS', detail: 'Open the settings workspace at the TTS group.', command: '/config tts', kind: 'command', safety: 'safe' },
109
285
  { id: 'tts-provider', label: 'Choose TTS provider', detail: 'Open provider/model routing for spoken responses through the settings flow.', command: '/config tts.provider', kind: 'command', safety: 'safe' },
286
+ { id: 'voice-review', label: 'Voice review', detail: 'Inspect local voice posture before enabling spoken interaction.', command: '/voice review', kind: 'command', safety: 'read-only' },
287
+ { id: 'voice-enable', label: 'Enable voice', detail: 'Open a confirmed form that enables local voice interaction.', editorKind: 'voice-enable', kind: 'editor', safety: 'safe' },
288
+ { id: 'voice-disable', label: 'Disable voice', detail: 'Open a confirmed form that disables local voice interaction.', editorKind: 'voice-disable', kind: 'editor', safety: 'safe' },
289
+ { id: 'voice-bundle-export', label: 'Export voice bundle', detail: 'Open a confirmed form that exports voice setup state for review.', editorKind: 'voice-bundle-export', kind: 'editor', safety: 'safe' },
290
+ { id: 'voice-bundle-inspect', label: 'Inspect voice bundle', detail: 'Open a form that inspects voice setup state before review.', editorKind: 'voice-bundle-inspect', kind: 'editor', safety: 'read-only' },
110
291
  { id: 'tts-speak', label: 'Speak a prompt', detail: 'Open an in-workspace prompt form for spoken assistant replies through configured live TTS.', editorKind: 'tts-prompt', kind: 'editor', safety: 'safe' },
292
+ { id: 'tts-command', label: 'TTS command', detail: 'Submit a prompt for spoken playback or stop current playback from the TUI.', command: '/tts', kind: 'command', safety: 'safe' },
111
293
  { id: 'image-attach', label: 'Attach image input', detail: 'Open an in-workspace image form for attaching a real image path and optional prompt.', editorKind: 'image-input', kind: 'editor', safety: 'safe' },
112
- { id: 'browser-tools', label: 'Browser tools', detail: 'Inspect browser/tool server readiness without starting inbound endpoints or mutating connected-service state.', command: '/mcp servers', kind: 'command', safety: 'read-only' },
113
- { id: 'mcp-tools', label: 'MCP tool inventory', detail: 'List available MCP tools, including browser and automation roles, without changing server trust or setup.', command: '/mcp tools', kind: 'command', safety: 'read-only' },
294
+ { id: 'image-command', label: 'Attach image command', detail: 'Attach an image file to the next message from the TUI command router.', command: '/image', kind: 'command', safety: 'safe' },
295
+ { id: 'media-providers', label: 'Media providers', detail: 'Inspect configured media provider readiness without generating artifacts.', command: '/media providers', kind: 'command', safety: 'read-only' },
296
+ { id: 'browser-tools', label: 'Browser tools', detail: 'Inspect browser/tool server readiness without starting inbound endpoints or mutating connected-host state.', command: '/mcp servers', kind: 'command', safety: 'read-only' },
297
+ { id: 'voice-media-mcp-tools', label: 'MCP tool inventory', detail: 'List available MCP tools, including browser and automation roles, without changing server trust or setup.', command: '/mcp tools', kind: 'command', safety: 'read-only' },
298
+ { id: 'media-generate', label: 'Generate media', detail: 'Open a confirmed prompt form that generates image or video artifacts through configured media providers.', editorKind: 'media-generate', kind: 'editor', safety: 'safe' },
299
+ { id: 'browser-research', label: 'Research the web', detail: 'Submit a read-only web research request to the main Agent conversation.', editorKind: 'web-research', kind: 'editor', safety: 'read-only' },
300
+ { id: 'browser-url', label: 'Inspect URL', detail: 'Submit one URL inspection request to the main Agent conversation without ingesting it.', editorKind: 'web-fetch', kind: 'editor', safety: 'read-only' },
114
301
  ],
115
302
  },
116
303
  {
@@ -121,53 +308,99 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
121
308
  detail: 'Agent profiles isolate Agent state. Named homes and starter templates let one install behave like separate assistants for household, research, travel, operations, or personal workflows.',
122
309
  actions: [
123
310
  { id: 'runtime-profile-guide', label: 'Starter authoring guide', detail: 'Open the Agent-local starter authoring flow inside the Agent TUI.', command: '/agent-profile guide', kind: 'command', safety: 'safe' },
124
- { id: 'runtime-profile-templates', label: 'Browse starter templates', detail: 'List built-in and local Agent starter templates with persona, skill, routine, and source details.', command: '/agent-profile templates', kind: 'command', safety: 'read-only' },
311
+ { id: 'runtime-profile-templates', label: 'Browse starter templates', detail: 'List built-in and Agent-local starter templates with persona, skill, routine, and source details.', command: '/agent-profile templates', kind: 'command', safety: 'read-only' },
125
312
  { id: 'runtime-profile-list', label: 'List Agent profiles', detail: 'List isolated Agent profile homes under this Agent home.', command: '/agent-profile list', kind: 'command', safety: 'read-only' },
313
+ { id: 'runtime-profile-show', label: 'Show Agent profile', detail: 'Open a profile-name form that shows one isolated Agent profile home and starter metadata.', editorKind: 'profile-show', kind: 'editor', safety: 'read-only' },
314
+ { id: 'runtime-profile-template-show', label: 'Preview starter', detail: 'Open an in-workspace form that previews one built-in or local starter template by id.', editorKind: 'profile-template-show', kind: 'editor', safety: 'read-only' },
126
315
  { id: 'runtime-profile-template-export', label: 'Export starter template', detail: 'Open an in-workspace form that exports a starter template JSON file for review and customization.', editorKind: 'profile-template-export', kind: 'editor', safety: 'safe' },
127
316
  { id: 'runtime-profile-template-import', label: 'Import starter template', detail: 'Open an in-workspace form that imports a reviewed starter template JSON file into this Agent home.', editorKind: 'profile-template-import', kind: 'editor', safety: 'safe' },
317
+ { id: 'runtime-profile-create', label: 'Create Agent profile', detail: 'Open an in-workspace form that creates an isolated Agent home from a built-in or local starter.', editorKind: 'profile', kind: 'editor', safety: 'safe' },
318
+ { id: 'runtime-profile-default', label: 'Use as default profile', detail: 'Select an isolated Agent profile for the next plain goodvibes-agent run. The current session keeps using its existing Agent home.', editorKind: 'profile-default', kind: 'editor', safety: 'safe' },
319
+ { id: 'runtime-profile-clear-default', label: 'Clear default profile', detail: 'Return the next plain goodvibes-agent run to the base Agent home. The current session keeps using its existing Agent home.', editorKind: 'profile-default-clear', kind: 'editor', safety: 'safe' },
320
+ { id: 'runtime-profile-delete', label: 'Delete Agent profile', detail: 'Open a confirmation form before deleting one isolated Agent profile home.', editorKind: 'profile-delete', kind: 'editor', safety: 'safe' },
128
321
  { id: 'runtime-profile-template-from-discovered', label: 'Starter from discovered behavior', detail: 'Open an in-workspace form that creates one local starter template from reviewed discovered persona, skill, and routine files.', editorKind: 'profile-template-from-discovered', kind: 'editor', safety: 'safe' },
129
322
  { id: 'runtime-profile-from-discovered', label: 'Profile from discovered behavior', detail: 'Open an in-workspace form that creates a local starter and isolated Agent profile from reviewed discovered behavior files.', editorKind: 'profile-from-discovered', kind: 'editor', safety: 'safe' },
130
- { id: 'runtime-profile-create', label: 'Create Agent profile', detail: 'Open an in-workspace form that creates an isolated Agent home from a built-in or local starter.', editorKind: 'profile', kind: 'editor', safety: 'safe' },
131
323
  { id: 'runtime-profile-template-edit', label: 'Customize starter', detail: 'Open the starter export form, edit the JSON file, then import it as a local starter.', editorKind: 'profile-template-export', kind: 'editor', safety: 'safe' },
132
- { id: 'runtime-profile-switch', label: 'Switch Agent profile', detail: 'Launch goodvibes-agent --agent-profile NAME to use that isolated Agent home. This workspace cannot switch the current process home after startup.', kind: 'guidance', safety: 'safe' },
133
324
  ],
134
325
  },
135
326
  {
136
327
  id: 'memory',
137
328
  group: 'LEARN',
138
329
  label: 'Memory & Skills',
139
- summary: 'Local assistant memory, routines, skills, and reusable behavior.',
140
- detail: 'Memory, routines, skills, and personas stay Agent-local until stable shared registry contracts exist. Secrets must not be stored as memory.',
330
+ summary: 'Local assistant memory, notes, routines, skills, and reusable behavior.',
331
+ detail: 'Memory, notes, routines, skills, and personas stay Agent-local until stable shared registry contracts exist. Secrets must not be stored as memory or notes.',
141
332
  actions: [
142
333
  { id: 'memory-list', label: 'List memory', detail: 'Print the full Agent-owned memory list.', command: '/memory list', kind: 'command', safety: 'read-only' },
334
+ { id: 'memory-search', label: 'Search memory', detail: 'Open an in-workspace Agent-local memory search form. This never queries default knowledge or other product routes.', editorKind: 'memory-search', kind: 'editor', safety: 'read-only' },
335
+ { id: 'memory-get', label: 'Show memory by id', detail: 'Open an in-workspace form that prints one Agent-local memory record with provenance and links.', editorKind: 'memory-get', kind: 'editor', safety: 'read-only' },
336
+ { id: 'memory-queue', label: 'Review queue', detail: 'Print the Agent-local memory review queue.', command: '/memory queue', kind: 'command', safety: 'read-only' },
337
+ { id: 'memory-explain', label: 'Explain selection', detail: 'Preview which reviewed Agent-local memories would be selected for a task.', editorKind: 'memory-explain', kind: 'editor', safety: 'read-only' },
143
338
  { id: 'memory-prev', label: 'Previous memory', detail: 'Move the local memory selection up without changing review state.', localKind: 'memory', selectionDelta: -1, kind: 'local-selection', safety: 'safe' },
144
339
  { id: 'memory-next', label: 'Next memory', detail: 'Move the local memory selection down without changing review state.', localKind: 'memory', selectionDelta: 1, kind: 'local-selection', safety: 'safe' },
145
- { id: 'memory-create', label: 'Create memory', detail: 'Open an in-workspace form for a durable, non-secret Agent memory. No default wiki fallback is used.', editorKind: 'memory', kind: 'editor', safety: 'safe' },
340
+ { id: 'memory-create', label: 'Create memory', detail: 'Open an in-workspace form for a durable, non-secret Agent memory. No default knowledge fallback is used.', editorKind: 'memory', kind: 'editor', safety: 'safe' },
341
+ { id: 'notes-workspace', label: 'Scratchpad notes', detail: 'Open Agent-local notes for source triage, temporary decisions, and operator handoff.', targetCategoryId: 'notes', kind: 'workspace', safety: 'safe' },
342
+ { id: 'note-create', label: 'Create note', detail: 'Open an in-workspace form for a local scratchpad note. This does not write memory or Agent Knowledge.', editorKind: 'note', kind: 'editor', safety: 'safe' },
343
+ { id: 'learned-behavior', label: 'Capture learned behavior', detail: 'Turn a reviewed workflow, lesson, or operating style into one local skill, routine, or persona.', editorKind: 'learned-behavior', kind: 'editor', safety: 'safe' },
146
344
  { id: 'memory-edit', label: 'Edit selected memory', detail: 'Open the selected Agent memory in an in-workspace editor.', localKind: 'memory', localOperation: 'memory-edit', kind: 'local-operation', safety: 'safe' },
147
345
  { id: 'memory-review', label: 'Review selected', detail: 'Mark the selected Agent memory reviewed after inspecting it.', localKind: 'memory', localOperation: 'memory-review', kind: 'local-operation', safety: 'safe' },
148
346
  { id: 'memory-stale', label: 'Mark selected stale', detail: 'Mark the selected Agent memory stale so it stops being trusted until reviewed.', localKind: 'memory', localOperation: 'memory-stale', kind: 'local-operation', safety: 'safe' },
149
347
  { id: 'memory-delete', label: 'Delete selected memory', detail: 'Open a confirmation form before deleting the selected Agent memory.', localKind: 'memory', localOperation: 'memory-delete', kind: 'local-operation', safety: 'safe' },
348
+ { id: 'memory-promote', label: 'Promote memory', detail: 'Open a confirmed form that promotes one Agent-local memory record to session, project, or team scope.', editorKind: 'memory-promote', kind: 'editor', safety: 'safe' },
349
+ { id: 'memory-link', label: 'Link memories', detail: 'Open a confirmed form that links two Agent-local memory records with a directed relation.', editorKind: 'memory-link', kind: 'editor', safety: 'safe' },
350
+ { id: 'memory-export', label: 'Export memory bundle', detail: 'Open a confirmed form that exports Agent-local memory records and links to a reviewable JSON bundle.', editorKind: 'memory-export', kind: 'editor', safety: 'safe' },
351
+ { id: 'memory-import', label: 'Import memory bundle', detail: 'Open a confirmed form that imports a reviewed Agent-local memory bundle.', editorKind: 'memory-import', kind: 'editor', safety: 'safe' },
352
+ { id: 'memory-handoff-export', label: 'Export handoff bundle', detail: 'Open a confirmed form that exports a scoped Agent-local memory handoff bundle.', editorKind: 'memory-handoff-export', kind: 'editor', safety: 'safe' },
353
+ { id: 'memory-handoff-inspect', label: 'Inspect handoff bundle', detail: 'Open a form that inspects a memory handoff bundle before import.', editorKind: 'memory-handoff-inspect', kind: 'editor', safety: 'read-only' },
354
+ { id: 'memory-handoff-import', label: 'Import handoff bundle', detail: 'Open a confirmed form that imports a reviewed handoff bundle into Agent-local memory.', editorKind: 'memory-handoff-import', kind: 'editor', safety: 'safe' },
355
+ { id: 'memory-vector-status', label: 'Vector status', detail: 'Inspect the Agent-local memory vector index status.', command: '/memory vector status', kind: 'command', safety: 'read-only' },
356
+ { id: 'memory-vector-doctor', label: 'Vector doctor', detail: 'Inspect Agent-local memory vector index health.', command: '/memory vector doctor', kind: 'command', safety: 'read-only' },
357
+ { id: 'memory-vector-rebuild', label: 'Rebuild vector index', detail: 'Open a confirmed form that rebuilds the Agent-local memory vector index.', editorKind: 'memory-vector-rebuild', kind: 'editor', safety: 'safe' },
150
358
  { id: 'personas', label: 'Persona library', detail: 'Open the local persona workspace for active role selection and review.', targetCategoryId: 'personas', kind: 'workspace', safety: 'safe' },
151
359
  { id: 'skills', label: 'Local skill library', detail: 'Open the local skill workspace for reusable procedures and review.', targetCategoryId: 'skills', kind: 'workspace', safety: 'safe' },
152
360
  { id: 'routines', label: 'Routine library', detail: 'Open the local routine workspace for repeatable workflows and schedule promotion review.', targetCategoryId: 'routines', kind: 'workspace', safety: 'safe' },
153
361
  ],
154
362
  },
363
+ {
364
+ id: 'notes',
365
+ group: 'LEARN',
366
+ label: 'Notes',
367
+ summary: 'Agent-local scratchpad for source triage and temporary context.',
368
+ detail: 'Notes are local working context. They are useful for research notes, decisions in progress, and handoff notes, but they are not memory and are not Agent Knowledge.',
369
+ actions: [
370
+ { id: 'notes-guidance', label: 'How notes work', detail: 'Use notes to capture source triage and temporary context. Promote later by creating memory or explicitly ingesting a reviewed source into Agent Knowledge.', kind: 'guidance', safety: 'safe' },
371
+ { id: 'notes-prev', label: 'Previous note', detail: 'Move the local note selection up without changing review state.', localKind: 'note', selectionDelta: -1, kind: 'local-selection', safety: 'safe' },
372
+ { id: 'notes-next', label: 'Next note', detail: 'Move the local note selection down without changing review state.', localKind: 'note', selectionDelta: 1, kind: 'local-selection', safety: 'safe' },
373
+ { id: 'notes-create', label: 'Create note', detail: 'Open an in-workspace form for a local scratchpad note that writes Agent-local state only.', editorKind: 'note', kind: 'editor', safety: 'safe' },
374
+ { id: 'notes-edit', label: 'Edit selected', detail: 'Open the selected local note in an in-workspace editor.', localKind: 'note', localOperation: 'note-edit', kind: 'local-operation', safety: 'safe' },
375
+ { id: 'notes-review', label: 'Review selected', detail: 'Mark the selected local note reviewed after inspecting it.', localKind: 'note', localOperation: 'note-review', kind: 'local-operation', safety: 'safe' },
376
+ { id: 'notes-stale', label: 'Mark selected stale', detail: 'Mark the selected local note stale so it is not trusted as current.', localKind: 'note', localOperation: 'note-stale', kind: 'local-operation', safety: 'safe' },
377
+ { id: 'notes-delete', label: 'Delete selected', detail: 'Open a confirmation form before deleting the selected Agent-local note.', localKind: 'note', localOperation: 'note-delete', kind: 'local-operation', safety: 'safe' },
378
+ { id: 'notes-to-memory', label: 'Create memory from selected', detail: 'Prefill the memory form from the selected note. Saving writes memory only; the note remains unchanged.', localKind: 'note', localOperation: 'note-promote-memory', kind: 'local-operation', safety: 'safe' },
379
+ { id: 'notes-to-skill', label: 'Create skill from selected', detail: 'Prefill a reusable skill from the selected note after reviewing a repeated procedure.', localKind: 'note', localOperation: 'note-promote-skill', kind: 'local-operation', safety: 'safe' },
380
+ { id: 'notes-to-routine', label: 'Create routine from selected', detail: 'Prefill a repeatable main-conversation routine from the selected note.', localKind: 'note', localOperation: 'note-promote-routine', kind: 'local-operation', safety: 'safe' },
381
+ { id: 'notes-to-persona', label: 'Create persona from selected', detail: 'Prefill a local operating persona from the selected note when it describes a durable style or role.', localKind: 'note', localOperation: 'note-promote-persona', kind: 'local-operation', safety: 'safe' },
382
+ { id: 'notes-to-knowledge', label: 'Ingest reviewed source', detail: 'Prefill the Agent Knowledge URL ingest form from the selected note source URL.', localKind: 'note', localOperation: 'note-promote-knowledge-url', kind: 'local-operation', safety: 'safe' },
383
+ { id: 'notes-research', label: 'Research source', detail: 'Open a read-only URL inspection form before deciding whether a source belongs in notes or Agent Knowledge.', editorKind: 'web-fetch', kind: 'editor', safety: 'read-only' },
384
+ ],
385
+ },
155
386
  {
156
387
  id: 'personas',
157
388
  group: 'LEARN',
158
389
  label: 'Personas',
159
390
  summary: 'Local behavior profiles for the main assistant.',
160
- detail: 'Personas shape the serial Agent in the main conversation. They are not background agents and they never spawn specialist roots.',
391
+ detail: 'Personas shape the serial Agent in the main conversation. They are local behavior profiles, not separate Agent identities.',
161
392
  actions: [
162
393
  { id: 'personas-list', label: 'List personas', detail: 'Print the full local persona library.', command: '/personas list', kind: 'command', safety: 'read-only' },
163
394
  { id: 'personas-active', label: 'Show active persona', detail: 'Inspect the active local persona applied to new turns.', command: '/personas active', kind: 'command', safety: 'read-only' },
395
+ { id: 'personas-search', label: 'Search personas', detail: 'Open a search form for the local persona library.', editorKind: 'persona-search', kind: 'editor', safety: 'read-only' },
396
+ { id: 'personas-show', label: 'Show persona', detail: 'Open a persona-id form for read-only local persona detail.', editorKind: 'persona-show', kind: 'editor', safety: 'read-only' },
164
397
  { id: 'personas-discover', label: 'Discover persona files', detail: 'Scan project and global Agent persona folders for persona markdown without importing it.', command: '/personas discover', kind: 'command', safety: 'read-only' },
165
398
  { id: 'personas-import-discovered', label: 'Import discovered persona', detail: 'Open an in-workspace form that imports one reviewed persona markdown file into the Agent-local persona registry after typed confirmation.', editorKind: 'persona-discovery-import', kind: 'editor', safety: 'safe' },
166
399
  { id: 'personas-prev', label: 'Previous persona', detail: 'Move the local persona selection up without changing active state.', localKind: 'persona', selectionDelta: -1, kind: 'local-selection', safety: 'safe' },
167
400
  { id: 'personas-next', label: 'Next persona', detail: 'Move the local persona selection down without changing active state.', localKind: 'persona', selectionDelta: 1, kind: 'local-selection', safety: 'safe' },
168
401
  { id: 'personas-create', label: 'Create persona', detail: 'Open an in-workspace form for a local persona that writes Agent-local state only.', editorKind: 'persona', kind: 'editor', safety: 'safe' },
169
402
  { id: 'personas-edit', label: 'Edit selected', detail: 'Open the selected local persona in an in-workspace editor.', localKind: 'persona', localOperation: 'persona-edit', kind: 'local-operation', safety: 'safe' },
170
- { id: 'personas-use', label: 'Use selected', detail: 'Activate the selected local persona for future main-conversation turns.', localKind: 'persona', localOperation: 'persona-use', kind: 'local-operation', safety: 'safe' },
403
+ { id: 'personas-use', label: 'Use selected', detail: 'Activate the selected local persona for later main-conversation turns.', localKind: 'persona', localOperation: 'persona-use', kind: 'local-operation', safety: 'safe' },
171
404
  { id: 'personas-review', label: 'Review selected', detail: 'Mark the selected local persona reviewed after inspecting it.', localKind: 'persona', localOperation: 'persona-review', kind: 'local-operation', safety: 'safe' },
172
405
  { id: 'personas-clear', label: 'Clear active persona', detail: 'Return to the default Agent policy without deleting any persona.', localKind: 'persona', localOperation: 'persona-clear', kind: 'local-operation', safety: 'safe' },
173
406
  { id: 'personas-delete', label: 'Delete selected', detail: 'Open a confirmation form before deleting the selected local persona.', localKind: 'persona', localOperation: 'persona-delete', kind: 'local-operation', safety: 'safe' },
@@ -177,47 +410,65 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
177
410
  id: 'skills',
178
411
  group: 'LEARN',
179
412
  label: 'Skills',
180
- summary: 'Reusable local procedures the assistant can apply on demand.',
181
- detail: 'Skills are local, reviewable procedures. Enabled skills inform the main conversation; secret-looking content is rejected.',
413
+ summary: 'Reusable local procedures with setup readiness.',
414
+ detail: 'Skills are local, reviewable procedures with optional env/command requirements. Enabled skills inform the main conversation; secret-looking content is rejected.',
182
415
  actions: [
183
- { id: 'skills-list', label: 'List skills', detail: 'Print the full local Agent skill library.', command: '/agent-skills list', kind: 'command', safety: 'read-only' },
184
- { id: 'skills-enabled', label: 'Enabled skills', detail: 'Show only skills currently injected into Agent guidance.', command: '/agent-skills enabled', kind: 'command', safety: 'read-only' },
185
- { id: 'skills-discover', label: 'Discover skill files', detail: 'Scan project and global Agent skill folders for SKILL.md or .md skills without importing them.', command: '/agent-skills discover', kind: 'command', safety: 'read-only' },
416
+ { id: 'skills-list', label: 'List skills', detail: 'Print the full Agent-local skill library.', command: '/skills list', kind: 'command', safety: 'read-only' },
417
+ { id: 'skills-enabled', label: 'Enabled skills', detail: 'Show only skills currently injected into Agent guidance.', command: '/skills enabled', kind: 'command', safety: 'read-only' },
418
+ { id: 'skills-attention', label: 'Needs setup', detail: 'Show local skills whose env or command requirements are not ready.', command: '/skills attention', kind: 'command', safety: 'read-only' },
419
+ { id: 'skills-search', label: 'Search skills', detail: 'Open a search form for Agent-local skills.', editorKind: 'skill-search', kind: 'editor', safety: 'read-only' },
420
+ { id: 'skills-show', label: 'Show skill', detail: 'Open a skill-id form for read-only local skill detail.', editorKind: 'skill-show', kind: 'editor', safety: 'read-only' },
421
+ { id: 'skills-discover', label: 'Discover skill files', detail: 'Scan project and global Agent skill folders for SKILL.md or .md skills without importing them.', command: '/skills discover', kind: 'command', safety: 'read-only' },
186
422
  { id: 'skills-import-discovered', label: 'Import discovered skill', detail: 'Open an in-workspace form that imports one reviewed discovered skill file into the Agent-local skill registry after typed confirmation.', editorKind: 'skill-discovery-import', kind: 'editor', safety: 'safe' },
187
- { id: 'skills-bundles', label: 'Skill bundles', detail: 'List reviewable groups of local skills that can be enabled together.', command: '/agent-skills bundle list', kind: 'command', safety: 'read-only' },
423
+ { id: 'skills-bundles', label: 'Skill bundles', detail: 'List reviewable groups of local skills that can be enabled together.', command: '/skills bundle list', kind: 'command', safety: 'read-only' },
424
+ { id: 'skills-bundle-attention', label: 'Bundle setup gaps', detail: 'Show skill bundles whose member skills have missing env or command requirements.', command: '/skills bundle attention', kind: 'command', safety: 'read-only' },
188
425
  { id: 'skills-create-bundle', label: 'Create bundle', detail: 'Open an in-workspace form that creates a named skill bundle from existing local skill ids.', editorKind: 'skill-bundle', kind: 'editor', safety: 'safe' },
426
+ { id: 'skills-search-bundle', label: 'Search bundles', detail: 'Open an in-workspace form that searches Agent-local skill bundles.', editorKind: 'skill-bundle-search', kind: 'editor', safety: 'read-only' },
427
+ { id: 'skills-show-bundle', label: 'Show bundle', detail: 'Open an in-workspace form that shows one Agent-local skill bundle by id.', editorKind: 'skill-bundle-show', kind: 'editor', safety: 'read-only' },
428
+ { id: 'skills-update-bundle', label: 'Update bundle', detail: 'Open a confirmed form that updates one Agent-local skill bundle.', editorKind: 'skill-bundle-update', kind: 'editor', safety: 'safe' },
429
+ { id: 'skills-enable-bundle', label: 'Enable bundle', detail: 'Open a confirmed form that enables one Agent-local skill bundle for main-conversation guidance.', editorKind: 'skill-bundle-enable', kind: 'editor', safety: 'safe' },
430
+ { id: 'skills-disable-bundle', label: 'Disable bundle', detail: 'Open a confirmed form that disables one Agent-local skill bundle without deleting it.', editorKind: 'skill-bundle-disable', kind: 'editor', safety: 'safe' },
431
+ { id: 'skills-review-bundle', label: 'Review bundle', detail: 'Open a confirmed form that marks one Agent-local skill bundle reviewed.', editorKind: 'skill-bundle-review', kind: 'editor', safety: 'safe' },
432
+ { id: 'skills-stale-bundle', label: 'Mark bundle stale', detail: 'Open a confirmed form that marks one Agent-local skill bundle stale with a reason.', editorKind: 'skill-bundle-stale', kind: 'editor', safety: 'safe' },
433
+ { id: 'skills-delete-bundle', label: 'Delete bundle', detail: 'Open a confirmation form before deleting one Agent-local skill bundle.', editorKind: 'skill-bundle-delete', kind: 'editor', safety: 'safe' },
189
434
  { id: 'skills-prev', label: 'Previous skill', detail: 'Move the local skill selection up without changing enabled state.', localKind: 'skill', selectionDelta: -1, kind: 'local-selection', safety: 'safe' },
190
435
  { id: 'skills-next', label: 'Next skill', detail: 'Move the local skill selection down without changing enabled state.', localKind: 'skill', selectionDelta: 1, kind: 'local-selection', safety: 'safe' },
191
436
  { id: 'skills-create', label: 'Create skill', detail: 'Open an in-workspace form for a reusable local procedure that writes Agent-local state only.', editorKind: 'skill', kind: 'editor', safety: 'safe' },
192
- { id: 'skills-edit', label: 'Edit selected', detail: 'Open the selected local Agent skill in an in-workspace editor.', localKind: 'skill', localOperation: 'skill-edit', kind: 'local-operation', safety: 'safe' },
193
- { id: 'skills-enable', label: 'Enable selected', detail: 'Enable the selected local Agent skill for future main-conversation guidance.', localKind: 'skill', localOperation: 'skill-enable', kind: 'local-operation', safety: 'safe' },
194
- { id: 'skills-disable', label: 'Disable selected', detail: 'Disable the selected local Agent skill without deleting it.', localKind: 'skill', localOperation: 'skill-disable', kind: 'local-operation', safety: 'safe' },
437
+ { id: 'skills-edit', label: 'Edit selected', detail: 'Open the selected Agent-local skill in an in-workspace editor.', localKind: 'skill', localOperation: 'skill-edit', kind: 'local-operation', safety: 'safe' },
438
+ { id: 'skills-enable', label: 'Enable selected', detail: 'Enable the selected Agent-local skill for later main-conversation guidance.', localKind: 'skill', localOperation: 'skill-enable', kind: 'local-operation', safety: 'safe' },
439
+ { id: 'skills-disable', label: 'Disable selected', detail: 'Disable the selected Agent-local skill without deleting it.', localKind: 'skill', localOperation: 'skill-disable', kind: 'local-operation', safety: 'safe' },
195
440
  { id: 'skills-review', label: 'Review selected', detail: 'Mark the selected local skill reviewed after inspecting it.', localKind: 'skill', localOperation: 'skill-review', kind: 'local-operation', safety: 'safe' },
196
- { id: 'skills-delete', label: 'Delete selected', detail: 'Open a confirmation form before deleting the selected local Agent skill.', localKind: 'skill', localOperation: 'skill-delete', kind: 'local-operation', safety: 'safe' },
441
+ { id: 'skills-delete', label: 'Delete selected', detail: 'Open a confirmation form before deleting the selected Agent-local skill.', localKind: 'skill', localOperation: 'skill-delete', kind: 'local-operation', safety: 'safe' },
197
442
  ],
198
443
  },
199
444
  {
200
445
  id: 'routines',
201
446
  group: 'LEARN',
202
447
  label: 'Routines',
203
- summary: 'Repeatable workflows for the main conversation.',
204
- detail: 'Routines run in the main conversation by default. Promotion to a connected schedule requires a real schedule command and --yes.',
448
+ summary: 'Repeatable workflows with setup readiness.',
449
+ detail: 'Routines run in the main conversation by default and can declare env/command requirements. Promotion to a connected schedule requires a real schedule command and --yes.',
205
450
  actions: [
206
- { id: 'routines-list', label: 'List routines', detail: 'Print the full local Agent routine library.', command: '/routines list', kind: 'command', safety: 'read-only' },
451
+ { id: 'routines-setup-path', label: 'Routine setup path', detail: 'Create or import a routine, resolve setup gaps, review it, then start it in the main conversation or promote it explicitly to a connected schedule.', kind: 'guidance', safety: 'safe' },
452
+ { id: 'routines-next-action', label: 'Next routine action', detail: 'Use the detail pane to choose the next useful routine step from local readiness, review state, and promotion receipts.', kind: 'guidance', safety: 'safe' },
453
+ { id: 'routines-list', label: 'List routines', detail: 'Print the full Agent-local routine library.', command: '/routines list', kind: 'command', safety: 'read-only' },
207
454
  { id: 'routines-enabled', label: 'Enabled routines', detail: 'Show routines available for direct use.', command: '/routines enabled', kind: 'command', safety: 'read-only' },
455
+ { id: 'routines-attention', label: 'Needs setup', detail: 'Show local routines whose env or command requirements are not ready.', command: '/routines attention', kind: 'command', safety: 'read-only' },
456
+ { id: 'routines-search', label: 'Search routines', detail: 'Open a search form for Agent-local routines.', editorKind: 'routine-search', kind: 'editor', safety: 'read-only' },
457
+ { id: 'routines-show', label: 'Show routine', detail: 'Open a routine-id form for read-only local routine detail.', editorKind: 'routine-show', kind: 'editor', safety: 'read-only' },
208
458
  { id: 'routines-discover', label: 'Discover routine files', detail: 'Scan project and global Agent routine folders for routine markdown without importing it.', command: '/routines discover', kind: 'command', safety: 'read-only' },
209
459
  { id: 'routines-import-discovered', label: 'Import discovered routine', detail: 'Open an in-workspace form that imports one reviewed routine markdown file into the Agent-local routine registry after typed confirmation.', editorKind: 'routine-discovery-import', kind: 'editor', safety: 'safe' },
210
460
  { id: 'routines-prev', label: 'Previous routine', detail: 'Move the local routine selection up without changing enabled state.', localKind: 'routine', selectionDelta: -1, kind: 'local-selection', safety: 'safe' },
211
461
  { id: 'routines-next', label: 'Next routine', detail: 'Move the local routine selection down without changing enabled state.', localKind: 'routine', selectionDelta: 1, kind: 'local-selection', safety: 'safe' },
212
462
  { id: 'routines-create', label: 'Create routine', detail: 'Open an in-workspace form for a repeatable local workflow that writes Agent-local state only.', editorKind: 'routine', kind: 'editor', safety: 'safe' },
213
- { id: 'routines-edit', label: 'Edit selected', detail: 'Open the selected local Agent routine in an in-workspace editor.', localKind: 'routine', localOperation: 'routine-edit', kind: 'local-operation', safety: 'safe' },
463
+ { id: 'routines-edit', label: 'Edit selected', detail: 'Open the selected Agent-local routine in an in-workspace editor.', localKind: 'routine', localOperation: 'routine-edit', kind: 'local-operation', safety: 'safe' },
214
464
  { id: 'routines-start', label: 'Start selected', detail: 'Mark the selected routine started and show it as a main-conversation workflow. This creates no hidden job.', localKind: 'routine', localOperation: 'routine-start', kind: 'local-operation', safety: 'safe' },
215
- { id: 'routines-enable', label: 'Enable selected', detail: 'Enable the selected routine for future main-conversation guidance.', localKind: 'routine', localOperation: 'routine-enable', kind: 'local-operation', safety: 'safe' },
465
+ { id: 'routines-enable', label: 'Enable selected', detail: 'Enable the selected routine for later main-conversation guidance.', localKind: 'routine', localOperation: 'routine-enable', kind: 'local-operation', safety: 'safe' },
216
466
  { id: 'routines-disable', label: 'Disable selected', detail: 'Disable the selected routine without deleting it.', localKind: 'routine', localOperation: 'routine-disable', kind: 'local-operation', safety: 'safe' },
217
467
  { id: 'routines-review', label: 'Review selected', detail: 'Mark the selected local routine reviewed after inspecting it.', localKind: 'routine', localOperation: 'routine-review', kind: 'local-operation', safety: 'safe' },
218
- { id: 'routines-delete', label: 'Delete selected', detail: 'Open a confirmation form before deleting the selected local Agent routine.', localKind: 'routine', localOperation: 'routine-delete', kind: 'local-operation', safety: 'safe' },
468
+ { id: 'routines-delete', label: 'Delete selected', detail: 'Open a confirmation form before deleting the selected Agent-local routine.', localKind: 'routine', localOperation: 'routine-delete', kind: 'local-operation', safety: 'safe' },
219
469
  { id: 'routines-promote', label: 'Promote to schedule', detail: 'Open an in-workspace form that creates one connected schedule from the selected routine with real timing and confirmation.', editorKind: 'routine-schedule', kind: 'editor', safety: 'safe' },
220
470
  { id: 'routines-receipts', label: 'Promotion receipts', detail: 'Inspect local redacted routine schedule promotion receipts.', command: '/routines receipts', kind: 'command', safety: 'read-only' },
471
+ { id: 'routines-receipt', label: 'Show promotion receipt', detail: 'Open a receipt-id form for read-only routine promotion receipt detail.', editorKind: 'routine-receipt', kind: 'editor', safety: 'read-only' },
221
472
  ],
222
473
  },
223
474
  {
@@ -225,10 +476,97 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
225
476
  group: 'TRACK',
226
477
  label: 'Work & Approvals',
227
478
  summary: 'Visible task state, work plan, and approval posture.',
228
- detail: 'Use this workspace to inspect active operator state. Side-effecting approval decisions require explicit commands and confirmation outside this workspace.',
479
+ detail: 'Use this workspace to inspect active operator state and update visible work-plan items from confirmed TUI forms.',
229
480
  actions: [
230
481
  { id: 'workplan', label: 'Review work plan', detail: 'Print a concise work plan summary in the main Agent transcript.', command: '/workplan list', kind: 'command', safety: 'read-only' },
482
+ { id: 'workplan-show', label: 'Show work plan detail', detail: 'Open a read-only form for the detailed work plan view.', editorKind: 'workplan-show', kind: 'editor', safety: 'read-only' },
483
+ { id: 'workplan-add', label: 'Add work item', detail: 'Open a form that creates one visible work plan item from the Agent workspace.', editorKind: 'workplan-add', kind: 'editor', safety: 'safe' },
484
+ { id: 'workplan-status', label: 'Update work item status', detail: 'Open a form that updates one work plan item to pending, active, blocked, done, failed, or cancelled.', editorKind: 'workplan-status', kind: 'editor', safety: 'safe' },
485
+ { id: 'workplan-delete', label: 'Remove work item', detail: 'Open a confirmed form before removing one work plan item.', editorKind: 'workplan-delete', kind: 'editor', safety: 'safe' },
486
+ { id: 'workplan-clear-completed', label: 'Clear completed work', detail: 'Open a confirmed form before clearing completed and cancelled work plan items.', editorKind: 'workplan-clear-completed', kind: 'editor', safety: 'safe' },
487
+ { id: 'conversation-export', label: 'Export conversation', detail: 'Open a confirmed form that exports the current Agent conversation to a workspace file.', editorKind: 'conversation-export', kind: 'editor', safety: 'safe' },
488
+ { id: 'conversation-review', label: 'Review transcript', detail: 'Inspect current transcript structure without changing the conversation.', command: '/conversation review', kind: 'command', safety: 'read-only' },
489
+ { id: 'conversation-composer', label: 'Composer posture', detail: 'Inspect current composer mode, pending approval posture, and context warning state.', command: '/conversation composer', kind: 'command', safety: 'read-only' },
490
+ { id: 'conversation-hotspots', label: 'Transcript hotspots', detail: 'Show transcript event hotspots from the Agent workspace.', command: '/conversation hotspots', kind: 'command', safety: 'read-only' },
491
+ { id: 'conversation-next-event', label: 'Next event', detail: 'Jump to the next indexed transcript event from the Agent workspace.', command: '/conversation next', kind: 'command', safety: 'read-only' },
492
+ { id: 'conversation-prev-event', label: 'Previous event', detail: 'Jump to the previous indexed transcript event from the Agent workspace.', command: '/conversation prev', kind: 'command', safety: 'read-only' },
493
+ { id: 'conversation-restore', label: 'Restore review', detail: 'Inspect restore-relevant transcript events before resuming or loading sessions.', command: '/conversation restore', kind: 'command', safety: 'read-only' },
494
+ { id: 'conversation-events', label: 'Transcript events', detail: 'Open an event-kind form for read-only transcript event inspection.', editorKind: 'conversation-events', kind: 'editor', safety: 'read-only' },
495
+ { id: 'conversation-groups', label: 'Transcript groups', detail: 'Open an event-kind form for read-only transcript group inspection.', editorKind: 'conversation-groups', kind: 'editor', safety: 'read-only' },
496
+ { id: 'conversation-find', label: 'Find transcript text', detail: 'Open a search form for the current Agent transcript.', editorKind: 'conversation-find', kind: 'editor', safety: 'read-only' },
497
+ { id: 'session-save', label: 'Save session', detail: 'Open a confirmed form that saves the current Agent session under a local name.', editorKind: 'session-save', kind: 'editor', safety: 'safe' },
498
+ { id: 'session-load', label: 'Load session', detail: 'Open a confirmed form that loads one saved Agent session into the current conversation.', editorKind: 'session-load', kind: 'editor', safety: 'safe' },
499
+ { id: 'session-rename', label: 'Rename current session', detail: 'Open a form that renames the current Agent session.', editorKind: 'session-rename', kind: 'editor', safety: 'safe' },
500
+ { id: 'session-fork', label: 'Fork current session', detail: 'Open a form that forks the current Agent session into a new local session.', editorKind: 'session-fork', kind: 'editor', safety: 'safe' },
501
+ { id: 'session-resume', label: 'Resume saved session', detail: 'Open a form that resumes one saved Agent session by id, prefix, or title.', editorKind: 'session-resume', kind: 'editor', safety: 'safe' },
502
+ { id: 'session-info', label: 'Inspect saved session', detail: 'Open a read-only form that prints saved-session metadata.', editorKind: 'session-info', kind: 'editor', safety: 'read-only' },
503
+ { id: 'session-graph', label: 'Session graph', detail: 'Open a read-only form for cross-session graph inspection; graph mutation remains blocked in Agent.', editorKind: 'session-graph', kind: 'editor', safety: 'read-only' },
504
+ { id: 'session-export-saved', label: 'Export saved session', detail: 'Open a form that prints one saved-session transcript as markdown or text.', editorKind: 'session-export-saved', kind: 'editor', safety: 'read-only' },
505
+ { id: 'session-search', label: 'Search saved sessions', detail: 'Open a form that searches saved Agent sessions.', editorKind: 'session-search', kind: 'editor', safety: 'read-only' },
506
+ { id: 'session-delete', label: 'Delete saved session', detail: 'Open a confirmed form before deleting one saved Agent session.', editorKind: 'session-delete', kind: 'editor', safety: 'safe' },
507
+ { id: 'planning-status', label: 'Planning status', detail: 'Inspect current Agent planning readiness, mode, and next question without seeding or approving planning state.', command: '/plan status', kind: 'command', safety: 'read-only' },
508
+ { id: 'planning-mode', label: 'Planning mode', detail: 'Inspect current planner mode and runtime strategy without changing it.', command: '/plan mode', kind: 'command', safety: 'read-only' },
509
+ { id: 'planning-explain', label: 'Explain planner', detail: 'Explain planner state and readiness without approving or changing it.', command: '/plan explain', kind: 'command', safety: 'read-only' },
510
+ { id: 'planning-list', label: 'Saved plans', detail: 'List saved Agent execution plans without changing current planning state.', command: '/plan list', kind: 'command', safety: 'read-only' },
511
+ { id: 'plan-seed', label: 'Seed planning goal', detail: 'Open a form that seeds current planning state from a concrete Agent operating goal.', editorKind: 'plan-seed', kind: 'editor', safety: 'safe' },
512
+ { id: 'plan-show', label: 'Show saved plan', detail: 'Open a plan-id form for read-only saved plan detail.', editorKind: 'plan-show', kind: 'editor', safety: 'read-only' },
513
+ { id: 'plan-approve', label: 'Approve planning state', detail: 'Open a confirmation form before approving current planning state for execution.', editorKind: 'plan-approve', kind: 'editor', safety: 'safe' },
514
+ { id: 'plan-override', label: 'Override planning strategy', detail: 'Open a confirmation form before changing planner strategy.', editorKind: 'plan-override', kind: 'editor', safety: 'safe' },
515
+ { id: 'plan-clear', label: 'Clear planning state', detail: 'Open a confirmation form before clearing planner state.', editorKind: 'plan-clear', kind: 'editor', safety: 'safe' },
516
+ { id: 'tasks-list', label: 'Host tasks', detail: 'Inspect connected-host task state without creating, retrying, or mutating tasks.', command: '/tasks list', kind: 'command', safety: 'read-only' },
517
+ { id: 'tasks-filter', label: 'Filter host tasks', detail: 'Open a status/kind form for read-only connected-host task filtering.', editorKind: 'task-list-filter', kind: 'editor', safety: 'read-only' },
518
+ { id: 'task-show', label: 'Inspect host task', detail: 'Open a task-id form for read-only connected-host task metadata.', editorKind: 'task-show', kind: 'editor', safety: 'read-only' },
519
+ { id: 'task-output', label: 'Show task output', detail: 'Open a task-id form for read-only connected-host task output.', editorKind: 'task-output', kind: 'editor', safety: 'read-only' },
520
+ { id: 'sessions-list', label: 'Saved sessions', detail: 'Browse saved Agent sessions without leaving the TUI.', command: '/sessions', kind: 'command', safety: 'read-only' },
231
521
  { id: 'approvals', label: 'Review approvals', detail: 'Print the approval matrix without approving or denying requests.', command: '/approval matrix', kind: 'command', safety: 'read-only' },
522
+ { id: 'approval-review', label: 'Review approval class', detail: 'Open an approval-kind form for read-only review of one approval class.', editorKind: 'approval-review', kind: 'editor', safety: 'read-only' },
523
+ { id: 'approval-approve', label: 'Approve request', detail: 'Open a confirmed form for approving one pending connected-host approval request by id.', editorKind: 'approval-approve', kind: 'editor', safety: 'safe' },
524
+ { id: 'approval-deny', label: 'Deny request', detail: 'Open a confirmed form for denying one pending connected-host approval request by id.', editorKind: 'approval-deny', kind: 'editor', safety: 'safe' },
525
+ { id: 'approval-cancel', label: 'Cancel request', detail: 'Open a confirmed form for cancelling one pending connected-host approval request by id.', editorKind: 'approval-cancel', kind: 'editor', safety: 'safe' },
526
+ ],
527
+ },
528
+ {
529
+ id: 'host',
530
+ group: 'WATCH',
531
+ label: 'Connected Host',
532
+ summary: 'Connected-host health, tasks, sessions, channels, automation, and control-plane posture.',
533
+ detail: 'Use this workspace to inspect the GoodVibes host surfaces that Agent can see: system health, remote routes, host tasks, sessions, channels, schedules, knowledge, media, MCP, provider auth, support bundles, and telemetry/config posture.',
534
+ actions: [
535
+ { id: 'host-overview', label: 'Host overview', detail: 'Review connected-host, provider, settings, continuity, and Agent health without starting or mutating host work.', command: '/health review', kind: 'command', safety: 'read-only' },
536
+ { id: 'host-services', label: 'Host services', detail: 'Inspect connected-host service readiness, credentials, and integration issues without changing them.', command: '/health host', kind: 'command', safety: 'read-only' },
537
+ { id: 'host-setup', label: 'Setup review', detail: 'Inspect setup issues that affect connected-host and Agent runtime readiness.', command: '/health setup', kind: 'command', safety: 'read-only' },
538
+ { id: 'host-remote', label: 'Remote routes', detail: 'Inspect remote build-host route health and recovery signals without starting build work.', command: '/health remote', kind: 'command', safety: 'read-only' },
539
+ { id: 'host-maintenance', label: 'Session maintenance', detail: 'Review continuity, compaction, and current-session maintenance posture.', command: '/health maintenance', kind: 'command', safety: 'read-only' },
540
+ { id: 'host-continuity', label: 'Continuity', detail: 'Inspect last-session pointer, recovery-file posture, and return-context state.', command: '/health continuity', kind: 'command', safety: 'read-only' },
541
+ { id: 'host-tasks', label: 'Host tasks', detail: 'Inspect connected-host task state without creating, retrying, or mutating tasks.', command: '/tasks list', kind: 'command', safety: 'read-only' },
542
+ { id: 'host-task-filter', label: 'Filter host tasks', detail: 'Open a status/type form for read-only connected-host task filtering.', editorKind: 'task-list-filter', kind: 'editor', safety: 'read-only' },
543
+ { id: 'host-task-show', label: 'Inspect host task', detail: 'Open a task-id form for read-only connected-host task metadata.', editorKind: 'task-show', kind: 'editor', safety: 'read-only' },
544
+ { id: 'host-task-output', label: 'Show task output', detail: 'Open a task-id form for read-only connected-host task output.', editorKind: 'task-output', kind: 'editor', safety: 'read-only' },
545
+ { id: 'host-sessions', label: 'Host session routes', detail: 'Browse saved Agent sessions and return-context posture exposed through the runtime session surface.', command: '/session list', kind: 'command', safety: 'read-only' },
546
+ { id: 'host-session-graph', label: 'Session graph', detail: 'Open a read-only form for cross-session graph inspection; graph mutation remains blocked in Agent.', editorKind: 'session-graph', kind: 'editor', safety: 'read-only' },
547
+ { id: 'host-channels-status', label: 'Channel status', detail: 'Inspect connected channel runtime status from the host without mutating delivery state.', command: '/channels status', kind: 'command', safety: 'read-only' },
548
+ { id: 'host-channel-accounts', label: 'Channel accounts', detail: 'Inspect connected channel accounts without printing secret values or sending messages.', command: '/channels accounts', kind: 'command', safety: 'read-only' },
549
+ { id: 'host-channel-policies', label: 'Channel policies', detail: 'Inspect channel delivery policy posture without changing routing.', command: '/channels policies', kind: 'command', safety: 'read-only' },
550
+ { id: 'host-channels', label: 'Open Channels', detail: 'Jump to the channel setup and delivery workspace.', targetCategoryId: 'channels', kind: 'workspace', safety: 'safe' },
551
+ { id: 'host-automation', label: 'Open Automation', detail: 'Jump to connected schedules, reminders, receipts, and explicit run controls.', targetCategoryId: 'automation', kind: 'workspace', safety: 'safe' },
552
+ { id: 'host-schedules', label: 'Schedule status', detail: 'Inspect schedules and run history without running or mutating them.', command: '/schedule list', kind: 'command', safety: 'read-only' },
553
+ { id: 'host-schedule-reconcile', label: 'Reconcile schedules', detail: 'Compare local promotion receipts with live connected schedules.', command: '/schedule reconcile', kind: 'command', safety: 'read-only' },
554
+ { id: 'host-knowledge', label: 'Knowledge route', detail: 'Inspect isolated Agent Knowledge route readiness and source counts.', command: '/knowledge status', kind: 'command', safety: 'read-only' },
555
+ { id: 'host-knowledge-open', label: 'Open Knowledge', detail: 'Jump to Agent Knowledge source, graph, review, and ingest controls.', targetCategoryId: 'knowledge', kind: 'workspace', safety: 'safe' },
556
+ { id: 'host-media', label: 'Media providers', detail: 'Inspect configured media providers before generating media with confirmation.', command: '/media providers', kind: 'command', safety: 'read-only' },
557
+ { id: 'host-media-open', label: 'Open Voice and Media', detail: 'Jump to voice, TTS, image input, media provider, and browser-tool setup actions.', targetCategoryId: 'voice-media', kind: 'workspace', safety: 'safe' },
558
+ { id: 'host-mcp-health', label: 'MCP health', detail: 'Inspect MCP lifecycle issues without changing trust posture or approving tool-definition review.', command: '/health mcp', kind: 'command', safety: 'read-only' },
559
+ { id: 'host-mcp-review', label: 'MCP review', detail: 'Inspect MCP server connection, trust, role, and review posture.', command: '/mcp review', kind: 'command', safety: 'read-only' },
560
+ { id: 'host-tools-open', label: 'Open Tools and MCP', detail: 'Jump to MCP server setup, tool inventory, secrets, and security review.', targetCategoryId: 'tools', kind: 'workspace', safety: 'safe' },
561
+ { id: 'host-provider-accounts', label: 'Provider accounts', detail: 'Review provider account routes, subscription windows, and billing-path safety.', command: '/accounts review', kind: 'command', safety: 'read-only' },
562
+ { id: 'host-auth-owner', label: 'Connected-host auth owner', detail: 'Show that connected-host auth administration belongs to the owning GoodVibes host, not Agent.', command: '/auth local', kind: 'command', safety: 'read-only' },
563
+ { id: 'host-auth-review', label: 'Provider auth review', detail: 'Review provider auth posture without printing token values.', command: '/auth review', kind: 'command', safety: 'read-only' },
564
+ { id: 'host-security', label: 'Security review', detail: 'Inspect token posture, MCP attack paths, policy lint, plugin risk, and incident pressure.', command: '/security review', kind: 'command', safety: 'read-only' },
565
+ { id: 'host-trust', label: 'Trust review', detail: 'Review permission, secret, plugin, and MCP trust posture without exporting bundles or changing trust.', command: '/trust review', kind: 'command', safety: 'read-only' },
566
+ { id: 'host-support-bundle', label: 'Support bundle', detail: 'Open support bundle export, inspect, and import actions for host-facing setup review.', targetCategoryId: 'setup', kind: 'workspace', safety: 'safe' },
567
+ { id: 'host-telemetry', label: 'Telemetry settings', detail: 'Open telemetry payload policy settings for connected-host and Agent observability review.', command: '/config telemetry', kind: 'command', safety: 'safe' },
568
+ { id: 'host-config', label: 'Control-plane settings', detail: 'Open configuration controls for service, channels, tools, automation, provider, and storage posture.', command: '/config', kind: 'command', safety: 'safe' },
569
+ { id: 'host-safety', label: 'Host mutation policy', detail: 'Agent may inspect connected-host surfaces and run explicit confirmed actions, but does not silently create tasks, send channel messages, mutate auth, or start automation.', kind: 'guidance', safety: 'blocked' },
232
570
  ],
233
571
  },
234
572
  {
@@ -236,15 +574,26 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
236
574
  group: 'WATCH',
237
575
  label: 'Automation',
238
576
  summary: 'Reminders, schedule observability, and explicit routine promotion.',
239
- detail: 'Agent does not create local automation jobs or hidden scheduler spawns. Confirmed reminders and reviewed local routines can create connected schedules through explicit schedules.create commands with --yes.',
577
+ detail: 'Agent does not create hidden local automation jobs. Confirmed reminders, reviewed routine promotion, and explicit run/pause/resume controls go through the connected host with confirmation.',
240
578
  actions: [
579
+ { id: 'schedule-setup-path', label: 'Schedule setup path', detail: 'Create a reminder or promote a reviewed routine, pick a real cadence, optionally choose a delivery target, confirm, then reconcile receipts with connected schedules.', kind: 'guidance', safety: 'safe' },
580
+ { id: 'schedule-next-action', label: 'Next schedule action', detail: 'Use the detail pane to choose whether to create a reminder, prepare a routine, promote a routine, or reconcile existing receipts.', kind: 'guidance', safety: 'safe' },
241
581
  { id: 'schedule-reminder', label: 'Create reminder', detail: 'Open an in-workspace form that creates one connected reminder schedule with real timing, optional delivery target, and explicit confirmation.', editorKind: 'reminder-schedule', kind: 'editor', safety: 'safe' },
242
582
  { id: 'schedule-list', label: 'List schedules', detail: 'Inspect configured jobs and history without running or mutating them.', command: '/schedule list', kind: 'command', safety: 'read-only' },
243
- { id: 'schedule-promote-routine', label: 'Promote routine', detail: 'Open an in-workspace form that creates one connected schedule from a local Agent routine with real timing, optional delivery target, and explicit confirmation.', editorKind: 'routine-schedule', kind: 'editor', safety: 'safe' },
583
+ { id: 'automation-job-run', label: 'Run job now', detail: 'Open a confirmed form that runs one connected-host automation job by id.', editorKind: 'automation-job-run', kind: 'editor', safety: 'safe' },
584
+ { id: 'automation-job-pause', label: 'Pause job', detail: 'Open a confirmed form that pauses one connected-host automation job by id.', editorKind: 'automation-job-pause', kind: 'editor', safety: 'safe' },
585
+ { id: 'automation-job-resume', label: 'Resume job', detail: 'Open a confirmed form that resumes one connected-host automation job by id.', editorKind: 'automation-job-resume', kind: 'editor', safety: 'safe' },
586
+ { id: 'automation-run-cancel', label: 'Cancel run', detail: 'Open a confirmed form that cancels one connected-host automation run by id.', editorKind: 'automation-run-cancel', kind: 'editor', safety: 'safe' },
587
+ { id: 'automation-run-retry', label: 'Retry run', detail: 'Open a confirmed form that retries one connected-host automation run by id.', editorKind: 'automation-run-retry', kind: 'editor', safety: 'safe' },
588
+ { id: 'schedule-run', label: 'Run schedule now', detail: 'Open a confirmed form that triggers one connected-host schedule by id.', editorKind: 'schedule-run', kind: 'editor', safety: 'safe' },
589
+ { id: 'schedule-promote-routine', label: 'Promote routine', detail: 'Open an in-workspace form that creates one connected schedule from an Agent-local routine with real timing, optional delivery target, and explicit confirmation.', editorKind: 'routine-schedule', kind: 'editor', safety: 'safe' },
244
590
  { id: 'schedule-receipts', label: 'Promotion receipts', detail: 'Review local redacted receipt history for routine-to-schedule promotion attempts.', command: '/schedule receipts', kind: 'command', safety: 'read-only' },
591
+ { id: 'schedule-receipt', label: 'Show receipt', detail: 'Open a receipt-id form for read-only schedule receipt detail.', editorKind: 'schedule-receipt', kind: 'editor', safety: 'read-only' },
245
592
  { id: 'schedule-reconcile', label: 'Reconcile schedules', detail: 'Compare local promotion receipts with live connected schedules using schedules.list.', command: '/schedule reconcile', kind: 'command', safety: 'read-only' },
246
- { id: 'schedule-policy', label: 'Local scheduler blocked', detail: 'Local schedule add/run/remove/enable/disable remain blocked; confirmed reminders and routine promotion use connected schedules only.', kind: 'guidance', safety: 'blocked' },
247
- { id: 'health-services', label: 'Service status', detail: 'Inspect connected-service readiness without starting, stopping, or restarting anything.', command: '/health review', kind: 'command', safety: 'read-only' },
593
+ { id: 'schedule-delivery-targets', label: 'Delivery targets', detail: 'Open Channels to pair companion surfaces, inspect route readiness, and add explicit notification targets before reminder delivery.', targetCategoryId: 'channels', kind: 'workspace', safety: 'safe' },
594
+ { id: 'schedule-policy', label: 'Local scheduler blocked', detail: 'Local schedule add/remove/enable/disable remain blocked. Run/pause/resume actions are explicit connected-host actions from confirmed forms only.', kind: 'guidance', safety: 'blocked' },
595
+ { id: 'health-services', label: 'Host status', detail: 'Inspect connected-host readiness without starting, stopping, or restarting anything.', command: '/health review', kind: 'command', safety: 'read-only' },
596
+ { id: 'health-repair', label: 'Health repair guidance', detail: 'Open a domain form for read-only health repair guidance.', editorKind: 'health-repair', kind: 'editor', safety: 'read-only' },
248
597
  ],
249
598
  },
250
599
  {
@@ -252,11 +601,34 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
252
601
  group: 'BUILD',
253
602
  label: 'Build Delegation',
254
603
  summary: 'Explicit handoff to GoodVibes TUI for code work.',
255
- detail: 'Agent does not become the coding TUI. Build, implement, fix, patch, and review work must be handed to GoodVibes TUI with the full original ask and WRFC only when explicitly requested.',
604
+ detail: 'Agent does not become the coding TUI. Build, implement, fix, patch, and review work must be handed to GoodVibes TUI with the full original ask and delegated review only when explicitly requested.',
256
605
  actions: [
257
- { id: 'delegate-guidance', label: 'Delegation rule', detail: 'For build/fix/review work, delegate one request to GoodVibes TUI instead of spawning local Engineer/Reviewer/Tester roots.', kind: 'guidance', safety: 'delegates' },
258
- { id: 'review-command', label: 'Review delegation command', detail: 'Use /delegate --wrfc TASK only when the user explicitly asks for code review/build execution. Return to the composer and include the actual task text.', kind: 'guidance', safety: 'delegates' },
606
+ { id: 'delegate-guidance', label: 'Delegation rule', detail: 'For build/fix/review work, delegate one request to GoodVibes TUI instead of creating coding-role Agent jobs.', kind: 'guidance', safety: 'delegates' },
607
+ { id: 'delegate-task', label: 'Delegate build task', detail: 'Open a confirmed form that sends one explicit build/fix/review task to GoodVibes TUI/shared-session routes.', editorKind: 'delegate-task', kind: 'editor', safety: 'delegates' },
608
+ { id: 'review-command', label: 'Review delegation command', detail: 'Use the confirmed delegation form only when the user explicitly asks for code review/build execution. Include the actual task text, preserve the full original ask, and request delegated review only when asked.', kind: 'guidance', safety: 'delegates' },
259
609
  { id: 'delegation-status', label: 'Delegation status', detail: 'Inspect build-delegation receipts and shared-session status without starting coding work.', command: '/delegate status', kind: 'command', safety: 'read-only' },
260
610
  ],
261
611
  },
262
612
  ];
613
+
614
+ export function renderAgentWorkspacePackageText(): string {
615
+ const lines: string[] = [];
616
+ for (const category of AGENT_WORKSPACE_CATEGORIES) {
617
+ lines.push(
618
+ category.id,
619
+ category.group,
620
+ category.label,
621
+ category.summary,
622
+ category.detail,
623
+ );
624
+ for (const action of category.actions) {
625
+ lines.push(action.id, action.label, action.detail, action.kind, action.safety);
626
+ if (action.command) lines.push(action.command);
627
+ if (action.targetCategoryId) lines.push(`target:${action.targetCategoryId}`);
628
+ if (action.editorKind) lines.push(`editor:${action.editorKind}`);
629
+ if (action.localKind) lines.push(`local:${action.localKind}`);
630
+ if (action.localOperation) lines.push(`operation:${action.localOperation}`);
631
+ }
632
+ }
633
+ return lines.join('\n');
634
+ }