@pellux/goodvibes-agent 1.1.6 → 1.2.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 (256) hide show
  1. package/CHANGELOG.md +176 -0
  2. package/README.md +46 -30
  3. package/dist/package/{ast-grep-napi.linux-x64-gnu-mkk8xwww.node → ast-grep-napi.linux-x64-gnu-swtppvy9.node} +0 -0
  4. package/dist/package/{ast-grep-napi.linux-x64-musl-ryqtgdv6.node → ast-grep-napi.linux-x64-musl-ttfcdtap.node} +0 -0
  5. package/dist/package/main.js +132662 -91399
  6. package/docs/README.md +14 -7
  7. package/docs/channels-remote-and-api.md +8 -5
  8. package/docs/connected-host.md +14 -12
  9. package/docs/getting-started.md +56 -30
  10. package/docs/knowledge-artifacts-and-multimodal.md +7 -5
  11. package/docs/project-planning.md +2 -2
  12. package/docs/providers-and-routing.md +11 -3
  13. package/docs/tools-and-commands.md +114 -45
  14. package/docs/voice-and-live-tts.md +3 -1
  15. package/package.json +3 -2
  16. package/release/release-notes.md +130 -5
  17. package/release/release-readiness.json +120 -90
  18. package/src/agent/assistant-cockpit.ts +247 -0
  19. package/src/agent/autonomy-schedule-format.ts +96 -0
  20. package/src/agent/autonomy-schedule.ts +514 -0
  21. package/src/agent/channel-delivery-receipts.ts +292 -0
  22. package/src/agent/competitive-feature-inventory.ts +296 -0
  23. package/src/agent/document-registry-types.ts +106 -0
  24. package/src/agent/document-registry.ts +734 -0
  25. package/src/agent/harness-control.ts +2 -2
  26. package/src/agent/memory-prompt.ts +2 -2
  27. package/src/agent/operator-actions.ts +50 -6
  28. package/src/agent/persona-registry.ts +8 -0
  29. package/src/agent/project-context-files.ts +273 -0
  30. package/src/agent/prompt-context-receipts.ts +502 -0
  31. package/src/agent/reminder-schedule-format.ts +16 -2
  32. package/src/agent/research-run-registry.ts +582 -0
  33. package/src/agent/research-source-registry.ts +441 -0
  34. package/src/agent/routine-registry.ts +19 -3
  35. package/src/agent/routine-schedule-format.ts +27 -2
  36. package/src/agent/runtime-profile-starters.ts +7 -0
  37. package/src/agent/runtime-profile.ts +106 -4
  38. package/src/agent/schedule-edit-format.ts +129 -0
  39. package/src/agent/schedule-edit.ts +496 -0
  40. package/src/agent/schedule-next-routes.ts +42 -0
  41. package/src/agent/setup-wizard-checkpoint.ts +140 -0
  42. package/src/agent/setup-wizard.ts +447 -0
  43. package/src/agent/skill-registry-types.ts +102 -0
  44. package/src/agent/skill-registry.ts +81 -107
  45. package/src/agent/vibe-confirmation-routes.ts +62 -0
  46. package/src/agent/vibe-file.ts +285 -0
  47. package/src/cli/agent-knowledge-command.ts +45 -2
  48. package/src/cli/help.ts +3 -0
  49. package/src/cli/profiles-command.ts +25 -11
  50. package/src/config/agent-settings-policy.ts +1 -18
  51. package/src/input/agent-workspace-activation.ts +53 -0
  52. package/src/input/agent-workspace-artifact-browser-editor.ts +494 -0
  53. package/src/input/agent-workspace-artifact-metadata.ts +17 -0
  54. package/src/input/agent-workspace-basic-command-editors.ts +5 -1
  55. package/src/input/agent-workspace-categories.ts +153 -155
  56. package/src/input/agent-workspace-channel-triage.ts +481 -0
  57. package/src/input/agent-workspace-channels.ts +263 -0
  58. package/src/input/agent-workspace-command-editor.ts +152 -0
  59. package/src/input/agent-workspace-context-snapshot.ts +349 -0
  60. package/src/input/agent-workspace-delegation-editor-submission.ts +8 -0
  61. package/src/input/agent-workspace-document-editor.ts +502 -0
  62. package/src/input/agent-workspace-document-ops-editor.ts +523 -0
  63. package/src/input/agent-workspace-host-category.ts +1 -1
  64. package/src/input/agent-workspace-local-library-snapshot.ts +167 -0
  65. package/src/input/agent-workspace-model-compare-editor.ts +376 -0
  66. package/src/input/agent-workspace-model-compare-prompt-submission.ts +552 -0
  67. package/src/input/agent-workspace-model-compare-types.ts +82 -0
  68. package/src/input/agent-workspace-model-compare-utils.ts +35 -0
  69. package/src/input/agent-workspace-onboarding-categories.ts +141 -0
  70. package/src/input/agent-workspace-operations-command-editor-submission.ts +53 -0
  71. package/src/input/agent-workspace-operations-command-editors.ts +22 -0
  72. package/src/input/agent-workspace-research-report-editor.ts +212 -0
  73. package/src/input/agent-workspace-research-run-editor.ts +144 -0
  74. package/src/input/agent-workspace-research-source-editor.ts +167 -0
  75. package/src/input/agent-workspace-review-packet-snapshot.ts +593 -0
  76. package/src/input/agent-workspace-review-packet-utils.ts +265 -0
  77. package/src/input/agent-workspace-settings.ts +262 -30
  78. package/src/input/agent-workspace-setup-checkpoint-action.ts +127 -0
  79. package/src/input/agent-workspace-setup-snapshot.ts +198 -0
  80. package/src/input/agent-workspace-setup.ts +34 -1
  81. package/src/input/agent-workspace-snapshot.ts +162 -147
  82. package/src/input/agent-workspace-types.ts +287 -2
  83. package/src/input/agent-workspace.ts +18 -0
  84. package/src/input/command-registry.ts +9 -2
  85. package/src/input/commands/agent-runtime-profile-runtime.ts +28 -13
  86. package/src/input/commands/channels-runtime.ts +102 -114
  87. package/src/input/commands/delegation-runtime.ts +87 -24
  88. package/src/input/commands/knowledge-browser-flags.ts +12 -0
  89. package/src/input/commands/knowledge.ts +28 -14
  90. package/src/input/commands/operator-actions-runtime.ts +6 -3
  91. package/src/input/commands/schedule-runtime.ts +71 -14
  92. package/src/input/commands/session-content.ts +2 -2
  93. package/src/input/commands/shell-core.ts +2 -0
  94. package/src/input/commands/vibe-runtime.ts +140 -0
  95. package/src/input/commands.ts +2 -0
  96. package/src/input/connected-host-routes.ts +123 -0
  97. package/src/input/settings-modal-types.ts +14 -0
  98. package/src/main.ts +15 -15
  99. package/src/panels/qr-panel.ts +2 -2
  100. package/src/renderer/agent-workspace-context-lines.ts +686 -0
  101. package/src/renderer/agent-workspace.ts +30 -419
  102. package/src/renderer/settings-modal-helpers.ts +12 -0
  103. package/src/renderer/settings-modal.ts +12 -0
  104. package/src/runtime/bootstrap-command-context.ts +11 -1
  105. package/src/runtime/bootstrap-command-parts.ts +14 -3
  106. package/src/runtime/bootstrap-core.ts +43 -1
  107. package/src/runtime/bootstrap-shell.ts +6 -0
  108. package/src/runtime/bootstrap.ts +113 -30
  109. package/src/runtime/connected-host-auth.ts +3 -2
  110. package/src/runtime/execution-ledger.ts +231 -0
  111. package/src/runtime/services.ts +88 -10
  112. package/src/runtime/tool-permission-safety.ts +287 -0
  113. package/src/shell/session-continuity-hints.ts +39 -0
  114. package/src/tools/agent-artifacts-tool.ts +606 -0
  115. package/src/tools/agent-audit-tool.ts +155 -0
  116. package/src/tools/agent-autonomy-schedule-tool.ts +238 -0
  117. package/src/tools/agent-autonomy-tool.ts +140 -0
  118. package/src/tools/agent-channel-send-tool.ts +24 -2
  119. package/src/tools/agent-channels-tool.ts +140 -0
  120. package/src/tools/agent-computer-tool.ts +168 -0
  121. package/src/tools/agent-context-policy.ts +267 -10
  122. package/src/tools/agent-context-tool.ts +143 -0
  123. package/src/tools/agent-delegation-tool.ts +128 -0
  124. package/src/tools/agent-device-tool.ts +240 -0
  125. package/src/tools/agent-documents-tool.ts +684 -0
  126. package/src/tools/agent-execution-tool.ts +230 -0
  127. package/src/tools/agent-harness-agent-orchestration.ts +703 -0
  128. package/src/tools/agent-harness-autonomy-intake.ts +785 -0
  129. package/src/tools/agent-harness-autonomy-live-records.ts +588 -0
  130. package/src/tools/agent-harness-autonomy-queue-types.ts +88 -0
  131. package/src/tools/agent-harness-autonomy-queue.ts +560 -0
  132. package/src/tools/agent-harness-background-processes-types.ts +35 -0
  133. package/src/tools/agent-harness-background-processes.ts +794 -0
  134. package/src/tools/agent-harness-browser-cockpit-route.ts +219 -0
  135. package/src/tools/agent-harness-browser-control.ts +338 -0
  136. package/src/tools/agent-harness-channel-metadata.ts +168 -10
  137. package/src/tools/agent-harness-cli-command-policy.ts +110 -0
  138. package/src/tools/agent-harness-command-catalog.ts +4 -2
  139. package/src/tools/agent-harness-command-runner.ts +42 -0
  140. package/src/tools/agent-harness-connected-host-status.ts +7 -4
  141. package/src/tools/agent-harness-delegation-posture.ts +234 -19
  142. package/src/tools/agent-harness-document-ops-reviewer-readiness.ts +234 -0
  143. package/src/tools/agent-harness-document-ops-types.ts +72 -0
  144. package/src/tools/agent-harness-document-ops.ts +671 -0
  145. package/src/tools/agent-harness-execution-history.ts +489 -0
  146. package/src/tools/agent-harness-execution-posture.ts +382 -0
  147. package/src/tools/agent-harness-file-recovery.ts +135 -0
  148. package/src/tools/agent-harness-keybinding-metadata.ts +16 -12
  149. package/src/tools/agent-harness-learning-curator-common.ts +102 -0
  150. package/src/tools/agent-harness-learning-curator-consolidation.ts +295 -0
  151. package/src/tools/agent-harness-learning-curator-proposals.ts +606 -0
  152. package/src/tools/agent-harness-learning-curator-types.ts +151 -0
  153. package/src/tools/agent-harness-learning-curator.ts +417 -0
  154. package/src/tools/agent-harness-local-model-benchmarks.ts +199 -0
  155. package/src/tools/agent-harness-local-model-cookbook.ts +238 -0
  156. package/src/tools/agent-harness-local-model-endpoints.ts +673 -0
  157. package/src/tools/agent-harness-media-posture.ts +208 -2
  158. package/src/tools/agent-harness-memory-posture.ts +556 -0
  159. package/src/tools/agent-harness-metadata.ts +100 -168
  160. package/src/tools/agent-harness-mode-catalog.ts +84 -33
  161. package/src/tools/agent-harness-model-catalog.ts +162 -0
  162. package/src/tools/agent-harness-model-provider-health.ts +186 -0
  163. package/src/tools/agent-harness-model-readiness.ts +406 -0
  164. package/src/tools/agent-harness-model-routing-types.ts +266 -0
  165. package/src/tools/agent-harness-model-routing-utils.ts +30 -0
  166. package/src/tools/agent-harness-model-routing.ts +137 -190
  167. package/src/tools/agent-harness-operator-methods.ts +115 -133
  168. package/src/tools/agent-harness-pairing-posture.ts +431 -18
  169. package/src/tools/agent-harness-personal-ops-discovery.ts +533 -0
  170. package/src/tools/agent-harness-personal-ops-intake.ts +385 -0
  171. package/src/tools/agent-harness-personal-ops-lanes.ts +204 -0
  172. package/src/tools/agent-harness-personal-ops-records.ts +732 -0
  173. package/src/tools/agent-harness-personal-ops-runner.ts +637 -0
  174. package/src/tools/agent-harness-personal-ops-types.ts +222 -0
  175. package/src/tools/agent-harness-personal-ops.ts +606 -0
  176. package/src/tools/agent-harness-project-context.ts +144 -0
  177. package/src/tools/agent-harness-prompt-context.ts +589 -0
  178. package/src/tools/agent-harness-provider-account-metadata.ts +2 -2
  179. package/src/tools/agent-harness-release-evidence.ts +9 -7
  180. package/src/tools/agent-harness-release-readiness.ts +9 -7
  181. package/src/tools/agent-harness-research-briefing.ts +427 -0
  182. package/src/tools/agent-harness-research-queue.ts +250 -0
  183. package/src/tools/agent-harness-research-runs.ts +295 -0
  184. package/src/tools/agent-harness-research-workflow.ts +322 -0
  185. package/src/tools/agent-harness-security-posture.ts +2 -2
  186. package/src/tools/agent-harness-service-posture.ts +9 -9
  187. package/src/tools/agent-harness-session-metadata.ts +3 -3
  188. package/src/tools/agent-harness-setup-connected-host.ts +501 -0
  189. package/src/tools/agent-harness-setup-describe.ts +557 -0
  190. package/src/tools/agent-harness-setup-handoffs.ts +502 -0
  191. package/src/tools/agent-harness-setup-model-helpers.ts +101 -0
  192. package/src/tools/agent-harness-setup-plan.ts +253 -0
  193. package/src/tools/agent-harness-setup-posture-types.ts +218 -0
  194. package/src/tools/agent-harness-setup-posture-utils.ts +173 -0
  195. package/src/tools/agent-harness-setup-posture.ts +449 -221
  196. package/src/tools/agent-harness-setup-smoke.ts +508 -0
  197. package/src/tools/agent-harness-sudo-posture.ts +114 -0
  198. package/src/tools/agent-harness-tool-schema.ts +120 -7
  199. package/src/tools/agent-harness-tool-types.ts +78 -0
  200. package/src/tools/agent-harness-tool-utils.ts +43 -0
  201. package/src/tools/agent-harness-tool.ts +311 -370
  202. package/src/tools/agent-harness-ui-surface-metadata.ts +76 -69
  203. package/src/tools/agent-harness-ui-surface-types.ts +46 -0
  204. package/src/tools/agent-harness-vibe-health.ts +105 -0
  205. package/src/tools/agent-harness-workspace-action-runner.ts +149 -0
  206. package/src/tools/agent-harness-workspace-actions.ts +114 -8
  207. package/src/tools/agent-harness-workspace-editor-execution.ts +214 -0
  208. package/src/tools/agent-harness-workspace-editor-runner.ts +755 -0
  209. package/src/tools/agent-host-tool.ts +159 -0
  210. package/src/tools/agent-knowledge-ingest-tool.ts +34 -1
  211. package/src/tools/agent-learning-consolidation-core.ts +327 -0
  212. package/src/tools/agent-learning-consolidation-tool.ts +758 -0
  213. package/src/tools/agent-memory-tool.ts +214 -0
  214. package/src/tools/agent-model-compare-export.ts +315 -0
  215. package/src/tools/agent-model-compare-handoff.ts +592 -0
  216. package/src/tools/agent-model-compare-judgment.ts +633 -0
  217. package/src/tools/agent-model-compare-run.ts +722 -0
  218. package/src/tools/agent-model-compare-tool.ts +698 -0
  219. package/src/tools/agent-model-compare-types.ts +191 -0
  220. package/src/tools/agent-model-compare-utils.ts +93 -0
  221. package/src/tools/agent-models-tool.ts +208 -0
  222. package/src/tools/agent-operator-action-tool.ts +1 -1
  223. package/src/tools/agent-operator-method-tool.ts +643 -0
  224. package/src/tools/agent-personal-ops-tool.ts +197 -0
  225. package/src/tools/agent-policy-explanation.ts +415 -0
  226. package/src/tools/agent-research-report-tool.ts +608 -0
  227. package/src/tools/agent-research-runs-tool.ts +434 -0
  228. package/src/tools/agent-research-sources-tool.ts +443 -0
  229. package/src/tools/agent-research-tool.ts +687 -0
  230. package/src/tools/agent-review-packet-presets-core.ts +757 -0
  231. package/src/tools/agent-review-packet-presets-tool.ts +466 -0
  232. package/src/tools/agent-review-packet-share-tool.ts +305 -0
  233. package/src/tools/agent-route-planner-candidates-setup.ts +411 -0
  234. package/src/tools/agent-route-planner-candidates-surfaces.ts +432 -0
  235. package/src/tools/agent-route-planner-candidates-work.ts +251 -0
  236. package/src/tools/agent-route-planner-helpers.ts +667 -0
  237. package/src/tools/agent-route-planner.ts +185 -0
  238. package/src/tools/agent-route-tool.ts +105 -0
  239. package/src/tools/agent-schedule-edit-tool.ts +210 -0
  240. package/src/tools/agent-schedule-tool.ts +282 -0
  241. package/src/tools/agent-security-tool.ts +145 -0
  242. package/src/tools/agent-sessions-tool.ts +122 -0
  243. package/src/tools/agent-settings-import-tool.ts +104 -0
  244. package/src/tools/agent-settings-tool.ts +176 -0
  245. package/src/tools/agent-setup-tool.ts +226 -0
  246. package/src/tools/agent-support-tool.ts +122 -0
  247. package/src/tools/agent-terminal-process-tools.ts +167 -0
  248. package/src/tools/agent-tool-policy-guard-types.ts +77 -0
  249. package/src/tools/agent-tool-policy-guard.ts +110 -89
  250. package/src/tools/agent-vibe-tool.ts +297 -0
  251. package/src/tools/agent-work-plan-tool.ts +265 -6
  252. package/src/tools/agent-workspace-tool.ts +305 -0
  253. package/src/tools/artifact-archive.ts +169 -0
  254. package/src/tools/tool-definition-compaction.ts +36 -0
  255. package/src/tools/tool-execution-safety.ts +41 -0
  256. package/src/version.ts +1 -1
@@ -1,6 +1,7 @@
1
1
  import type { AgentWorkspaceCategory } from './agent-workspace-types.ts';
2
2
  import { settingAction } from './agent-workspace-category-actions.ts';
3
3
  import { AGENT_WORKSPACE_HOST_CATEGORY } from './agent-workspace-host-category.ts';
4
+ import { AGENT_WORKSPACE_ONBOARDING_DETAIL_CATEGORIES } from './agent-workspace-onboarding-categories.ts';
4
5
 
5
6
  export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
6
7
  {
@@ -8,31 +9,28 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
8
9
  group: 'START',
9
10
  label: 'Home',
10
11
  summary: 'Main operator workspace for normal assistant work.',
11
- detail: 'Use this as the primary Agent workspace: chat in the main conversation, inspect state, choose model/provider, and open setup without switching modes.',
12
+ detail: 'Use this as the primary Agent workspace: start with the user task, then open only the lane that matches the work.',
12
13
  actions: [
13
14
  { 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' },
14
15
  { 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' },
16
+ { id: 'assistant-setup-lane', label: 'Get the assistant working', detail: 'Open setup posture for first-run blockers, GoodVibes settings import, account, model, tools, channels, voice, local context, and finish.', targetCategoryId: 'setup', kind: 'workspace', safety: 'safe' },
17
+ { id: 'assistant-model-lane', label: 'Talk and choose models', detail: 'Open model routing for provider choice, local model cookbook, helper/tool routes, reasoning, cache, and provider failure hints; model inspection uses models action:"status|local|providers".', targetCategoryId: 'account-model', kind: 'workspace', safety: 'safe' },
18
+ { id: 'assistant-browser-cockpit', label: 'Open browser cockpit', detail: 'Open the connected GoodVibes browser cockpit/PWA when the web route is configured, or inspect web setup posture when it is not.', kind: 'guidance', safety: 'safe' },
19
+ { id: 'assistant-work-lane', label: 'Work in this project', detail: 'Open project work controls for plans, host tasks, approvals, local execution posture, and recovery before delegation.', targetCategoryId: 'work', kind: 'workspace', safety: 'safe' },
20
+ { id: 'assistant-personal-ops-lane', label: 'Handle personal operations', detail: 'Open Personal Ops for inbox, agenda, notes, tasks, reminders, routines, and delivery readiness from one daily area.', targetCategoryId: 'personal-ops', kind: 'workspace', safety: 'safe' },
21
+ { id: 'assistant-research-docs-lane', label: 'Research and write', detail: 'Open the writing surface for document drafts, source-backed reports, artifacts, exports, and blind model comparison.', targetCategoryId: 'documents', kind: 'workspace', safety: 'safe' },
22
+ { id: 'assistant-background-lane', label: 'Supervise background work', detail: 'Open work supervision for plans, visible queues, approvals, automation, schedules, log tails, and cancel/recovery routes.', targetCategoryId: 'work', kind: 'workspace', safety: 'read-only' },
23
+ { id: 'assistant-safety-lane', label: 'Stay safe and recover', detail: 'Open tool and MCP trust review; support bundles, execution history, and file recovery stay reachable from diagnostics.', targetCategoryId: 'tools', kind: 'workspace', safety: 'read-only' },
15
24
  { id: 'model', label: 'Choose model', detail: 'Open the model/provider workspace for the Agent chat route.', command: '/model', kind: 'command', safety: 'safe' },
16
25
  { id: 'model-refresh', label: 'Refresh model catalog', detail: 'Refresh locally cached provider model lists without changing the selected route.', command: '/refresh-models', kind: 'command', safety: 'safe' },
17
- { id: 'setup-home', label: 'Onboarding', detail: 'Jump to first-run configuration for account, model, tools, channels, voice, local context, and finish.', targetCategoryId: 'setup', kind: 'workspace', safety: 'safe' },
18
- { 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' },
19
26
  { id: 'mode-show', label: 'Interaction mode', detail: 'Review Agent interaction noise level and per-domain verbosity.', command: '/mode show', kind: 'command', safety: 'read-only' },
20
27
  { 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' },
21
- { 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' },
22
- { 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' },
23
- { 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' },
24
- { 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' },
25
- { 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' },
26
- { 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' },
27
- { 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' },
28
28
  { 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' },
29
- { 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' },
30
- { 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' },
31
- { id: 'help', label: 'Browse commands', detail: 'Open registry-driven command help.', command: '/help', kind: 'command', safety: 'safe' },
32
- { id: 'welcome', label: 'Welcome and setup guide', detail: 'Open the Agent setup guide from the workspace.', command: '/welcome', kind: 'command', safety: 'safe' },
33
29
  { 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' },
34
30
  { 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' },
35
31
  { id: 'compat', label: 'Host compatibility', detail: 'Inspect connected-host compatibility and isolated Agent Knowledge route readiness from the TUI.', command: '/compat', kind: 'command', safety: 'read-only' },
32
+ { id: 'help', label: 'Browse commands', detail: 'Open registry-driven command help.', command: '/help', kind: 'command', safety: 'safe' },
33
+ { id: 'welcome', label: 'Welcome and setup guide', detail: 'Open the Agent setup guide from the workspace.', command: '/welcome', kind: 'command', safety: 'safe' },
36
34
  { id: 'quit', label: 'Quit Agent', detail: 'Exit the TUI and restore terminal state.', command: '/quit', kind: 'command', safety: 'safe' },
37
35
  ],
38
36
  },
@@ -43,7 +41,10 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
43
41
  summary: 'Import preferences, sign in, and choose the main model.',
44
42
  detail: 'Start here on a fresh install. Every row either saves state, opens the shared model picker, or opens a confirmed in-modal form.',
45
43
  actions: [
46
- { id: 'import-goodvibes-tui-settings', label: 'Import GoodVibes settings', detail: 'Copy existing display, provider, subscription, behavior, permission, TTS, channel, helper, tool, release, and automation values into Agent-owned state.', kind: 'settings-import', safety: 'safe' },
44
+ { id: 'import-goodvibes-tui-settings', label: 'Import GoodVibes settings', detail: 'Import compatible shared GoodVibes display, provider, subscription, behavior, permission, TTS, channel, helper, tool, release, and automation values into Agent-owned state.', kind: 'settings-import', safety: 'safe' },
45
+ { id: 'setup-checkpoint-show', label: 'Show setup checkpoint', detail: 'Inspect the saved setup wizard resume point without writing setup state.', setupCheckpointOperation: 'show', kind: 'setup-checkpoint', safety: 'read-only' },
46
+ { id: 'setup-checkpoint-mark-current', label: 'Save setup checkpoint', detail: 'Save the current setup wizard step as the Agent-owned resume point for the next launch.', setupCheckpointOperation: 'mark-current', kind: 'setup-checkpoint', safety: 'safe' },
47
+ { id: 'setup-checkpoint-clear', label: 'Clear setup checkpoint', detail: 'Clear the saved setup wizard resume point after setup is complete or no longer useful.', setupCheckpointOperation: 'clear', kind: 'setup-checkpoint', safety: 'safe' },
47
48
  { id: 'subscription-login-start', label: 'Start subscription login', detail: 'Start one provider sign-in flow, save pending state, and return here.', editorKind: 'subscription-login-start', kind: 'editor', safety: 'safe' },
48
49
  { id: 'subscription-login-finish', label: 'Finish subscription login', detail: 'Exchange a code or redirect URL and save the provider subscription session.', editorKind: 'subscription-login-finish', kind: 'editor', safety: 'safe' },
49
50
  { id: 'setup-provider-model', label: 'Choose main model', detail: 'Open the shared provider/model picker for normal assistant turns.', kind: 'model-picker', modelPickerFlow: 'providerModel', modelPickerTarget: 'main', safety: 'safe' },
@@ -65,6 +66,11 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
65
66
  { id: 'provider-use', label: 'Choose provider and model', detail: 'Open the shared provider/model picker for the main chat route.', kind: 'model-picker', modelPickerFlow: 'providerModel', modelPickerTarget: 'main', safety: 'safe' },
66
67
  { id: 'provider-remove', label: 'Remove custom provider', detail: 'Remove one custom provider config after confirmation.', editorKind: 'provider-remove', kind: 'editor', safety: 'safe' },
67
68
  { id: 'account-main-model', label: 'Choose main model', detail: 'Open the shared model picker for normal assistant turns.', kind: 'model-picker', modelPickerFlow: 'model', modelPickerTarget: 'main', safety: 'safe' },
69
+ { id: 'account-route-readiness', label: 'Inspect route readiness', detail: 'Review chat, helper, tool, and spoken-turn routes with models action:"status" for readiness scores, missing signals, pinned state, and safe setting keys without changing selection.', kind: 'guidance', safety: 'read-only' },
70
+ { id: 'account-local-model-cookbook', label: 'Local model cookbook', detail: 'Review local model recommendations, setup/download guidance, benchmark action routes, and local endpoint candidates with models action:"local".', kind: 'model-picker', modelPickerFlow: 'providerModel', modelPickerTarget: 'main', safety: 'safe' },
71
+ { id: 'account-local-server-health', label: 'Check local servers', detail: 'Run a confirmed read-only model-list smoke check with models action:"smoke" for detected or default local endpoints before refresh, benchmark, provider add, or route change.', kind: 'guidance', safety: 'read-only' },
72
+ { id: 'account-run-local-model-benchmark', label: 'Run local benchmark', detail: 'Run the confirmed local-route benchmark through blind comparison, save latency/task-fit evidence, and keep model changes separate.', editorKind: 'local-model-benchmark', kind: 'editor', safety: 'safe' },
73
+ { id: 'account-local-benchmark-evidence', label: 'Review benchmark evidence', detail: 'Inspect saved local model comparisons, revealed judgments, analytics routes, and next actions through models action:"local" before any default-route change.', kind: 'guidance', safety: 'read-only' },
68
74
  settingAction({ id: 'account-reasoning', label: 'Reasoning effort', detail: 'Cycle the reasoning effort used when supported.', key: 'provider.reasoningEffort' }),
69
75
  settingAction({ id: 'account-embedding', label: 'Embedding provider', detail: 'Set the embedding provider for memory and retrieval.', key: 'provider.embeddingProvider' }),
70
76
  settingAction({ id: 'account-system-prompt', label: 'System prompt file', detail: 'Set an optional local system prompt file path.', key: 'provider.systemPromptFile' }),
@@ -151,147 +157,52 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
151
157
  settingAction({ id: 'display-release-channel', label: 'Release channel', detail: 'Cycle stable or preview for update flows.', key: 'release.channel' }),
152
158
  ],
153
159
  },
160
+ ...AGENT_WORKSPACE_ONBOARDING_DETAIL_CATEGORIES,
154
161
  {
155
- id: 'onboarding-channels',
156
- group: 'ONBOARDING',
157
- label: 'Messaging',
158
- summary: 'Choose remote channels, then fill only the fields for enabled channels.',
159
- detail: 'Enable the channels you actually want. Channel credentials and default targets are saved as Agent settings or secret refs.',
160
- actions: [
161
- settingAction({ id: 'channel-ntfy-enabled', label: 'Use ntfy', detail: 'Toggle ntfy notifications and chat routing.', key: 'surfaces.ntfy.enabled' }),
162
- settingAction({ id: 'channel-ntfy-base-url', label: 'ntfy base URL', detail: 'Set the ntfy server URL.', key: 'surfaces.ntfy.baseUrl', visibleWhenKey: 'surfaces.ntfy.enabled', visibleWhenValue: true }),
163
- settingAction({ id: 'channel-ntfy-chat-topic', label: 'ntfy chat topic', detail: 'Set the topic routed into active terminal chat.', key: 'surfaces.ntfy.chatTopic', visibleWhenKey: 'surfaces.ntfy.enabled', visibleWhenValue: true }),
164
- settingAction({ id: 'channel-ntfy-agent-topic', label: 'ntfy agent topic', detail: 'Set the topic routed to Agent work.', key: 'surfaces.ntfy.agentTopic', visibleWhenKey: 'surfaces.ntfy.enabled', visibleWhenValue: true }),
165
- settingAction({ id: 'channel-ntfy-default-topic', label: 'ntfy default topic', detail: 'Set the default outbound notification topic.', key: 'surfaces.ntfy.topic', visibleWhenKey: 'surfaces.ntfy.enabled', visibleWhenValue: true }),
166
- settingAction({ id: 'channel-ntfy-remote-topic', label: 'ntfy remote topic', detail: 'Set the daemon-owned remote chat topic.', key: 'surfaces.ntfy.remoteTopic', visibleWhenKey: 'surfaces.ntfy.enabled', visibleWhenValue: true }),
167
- settingAction({ id: 'channel-ntfy-token', label: 'ntfy token', detail: 'Store the ntfy access token or secret reference.', key: 'surfaces.ntfy.token', visibleWhenKey: 'surfaces.ntfy.enabled', visibleWhenValue: true }),
168
- settingAction({ id: 'channel-ntfy-priority', label: 'ntfy priority', detail: 'Set default ntfy priority from 1 to 5.', key: 'surfaces.ntfy.defaultPriority', visibleWhenKey: 'surfaces.ntfy.enabled', visibleWhenValue: true }),
169
- settingAction({ id: 'channel-slack-enabled', label: 'Use Slack', detail: 'Toggle Slack adapter configuration.', key: 'surfaces.slack.enabled' }),
170
- settingAction({ id: 'channel-slack-bot-token', label: 'Slack bot token', detail: 'Store the Slack bot token or secret reference.', key: 'surfaces.slack.botToken', visibleWhenKey: 'surfaces.slack.enabled', visibleWhenValue: true }),
171
- settingAction({ id: 'channel-slack-app-token', label: 'Slack app token', detail: 'Store the Slack app token or secret reference.', key: 'surfaces.slack.appToken', visibleWhenKey: 'surfaces.slack.enabled', visibleWhenValue: true }),
172
- settingAction({ id: 'channel-slack-signing-secret', label: 'Slack signing secret', detail: 'Store the Slack signing secret or secret reference.', key: 'surfaces.slack.signingSecret', visibleWhenKey: 'surfaces.slack.enabled', visibleWhenValue: true }),
173
- settingAction({ id: 'channel-slack-default-channel', label: 'Slack default channel', detail: 'Set the default Slack channel for notifications and replies.', key: 'surfaces.slack.defaultChannel', visibleWhenKey: 'surfaces.slack.enabled', visibleWhenValue: true }),
174
- settingAction({ id: 'channel-slack-workspace', label: 'Slack workspace ID', detail: 'Set the Slack workspace id for route binding.', key: 'surfaces.slack.workspaceId', visibleWhenKey: 'surfaces.slack.enabled', visibleWhenValue: true }),
175
- settingAction({ id: 'channel-discord-enabled', label: 'Use Discord', detail: 'Toggle Discord adapter configuration.', key: 'surfaces.discord.enabled' }),
176
- settingAction({ id: 'channel-discord-bot-token', label: 'Discord bot token', detail: 'Store the Discord bot token or secret reference.', key: 'surfaces.discord.botToken', visibleWhenKey: 'surfaces.discord.enabled', visibleWhenValue: true }),
177
- settingAction({ id: 'channel-discord-application', label: 'Discord application ID', detail: 'Set the Discord application id.', key: 'surfaces.discord.applicationId', visibleWhenKey: 'surfaces.discord.enabled', visibleWhenValue: true }),
178
- settingAction({ id: 'channel-discord-public-key', label: 'Discord public key', detail: 'Set the Discord application public key.', key: 'surfaces.discord.publicKey', visibleWhenKey: 'surfaces.discord.enabled', visibleWhenValue: true }),
179
- settingAction({ id: 'channel-discord-guild', label: 'Discord guild ID', detail: 'Set the default Discord guild id.', key: 'surfaces.discord.guildId', visibleWhenKey: 'surfaces.discord.enabled', visibleWhenValue: true }),
180
- settingAction({ id: 'channel-discord-default-channel', label: 'Discord default channel', detail: 'Set the default Discord channel id.', key: 'surfaces.discord.defaultChannelId', visibleWhenKey: 'surfaces.discord.enabled', visibleWhenValue: true }),
181
- settingAction({ id: 'channel-webhook-enabled', label: 'Use webhooks', detail: 'Toggle generic webhook delivery.', key: 'surfaces.webhook.enabled' }),
182
- settingAction({ id: 'channel-webhook-target', label: 'Webhook target URL', detail: 'Set the default outbound webhook target URL.', key: 'surfaces.webhook.defaultTarget', visibleWhenKey: 'surfaces.webhook.enabled', visibleWhenValue: true }),
183
- settingAction({ id: 'channel-webhook-secret', label: 'Webhook secret', detail: 'Store the shared webhook secret or secret reference.', key: 'surfaces.webhook.secret', visibleWhenKey: 'surfaces.webhook.enabled', visibleWhenValue: true }),
184
- settingAction({ id: 'channel-webhook-timeout', label: 'Webhook timeout', detail: 'Set outbound webhook timeout in milliseconds.', key: 'surfaces.webhook.timeoutMs', visibleWhenKey: 'surfaces.webhook.enabled', visibleWhenValue: true }),
185
- settingAction({ id: 'channel-telegram-enabled', label: 'Use Telegram', detail: 'Toggle Telegram bot delivery.', key: 'surfaces.telegram.enabled' }),
186
- settingAction({ id: 'channel-telegram-bot-token', label: 'Telegram bot token', detail: 'Store the Telegram bot token or secret reference.', key: 'surfaces.telegram.botToken', visibleWhenKey: 'surfaces.telegram.enabled', visibleWhenValue: true }),
187
- settingAction({ id: 'channel-telegram-bot-username', label: 'Telegram bot username', detail: 'Set the Telegram bot username.', key: 'surfaces.telegram.botUsername', visibleWhenKey: 'surfaces.telegram.enabled', visibleWhenValue: true }),
188
- settingAction({ id: 'channel-telegram-chat', label: 'Telegram chat ID', detail: 'Set the default Telegram chat, group, or channel id.', key: 'surfaces.telegram.defaultChatId', visibleWhenKey: 'surfaces.telegram.enabled', visibleWhenValue: true }),
189
- settingAction({ id: 'channel-telegram-mode', label: 'Telegram mode', detail: 'Cycle webhook or polling ingress mode.', key: 'surfaces.telegram.mode', visibleWhenKey: 'surfaces.telegram.enabled', visibleWhenValue: true }),
190
- settingAction({ id: 'channel-telegram-webhook-secret', label: 'Telegram webhook secret', detail: 'Store the Telegram webhook secret or secret reference.', key: 'surfaces.telegram.webhookSecret', visibleWhenKey: 'surfaces.telegram.enabled', visibleWhenValue: true }),
191
- settingAction({ id: 'channel-googlechat-enabled', label: 'Use Google Chat', detail: 'Toggle Google Chat delivery.', key: 'surfaces.googleChat.enabled' }),
192
- settingAction({ id: 'channel-googlechat-webhook', label: 'Google Chat webhook', detail: 'Set the Google Chat webhook or app callback URL.', key: 'surfaces.googleChat.webhookUrl', visibleWhenKey: 'surfaces.googleChat.enabled', visibleWhenValue: true }),
193
- settingAction({ id: 'channel-googlechat-space', label: 'Google Chat space', detail: 'Set the default Google Chat space id.', key: 'surfaces.googleChat.spaceId', visibleWhenKey: 'surfaces.googleChat.enabled', visibleWhenValue: true }),
194
- settingAction({ id: 'channel-googlechat-app-id', label: 'Google Chat app ID', detail: 'Set the Google Chat app id.', key: 'surfaces.googleChat.appId', visibleWhenKey: 'surfaces.googleChat.enabled', visibleWhenValue: true }),
195
- settingAction({ id: 'channel-googlechat-verification', label: 'Google Chat verification', detail: 'Store the Google Chat verification token or secret reference.', key: 'surfaces.googleChat.verificationToken', visibleWhenKey: 'surfaces.googleChat.enabled', visibleWhenValue: true }),
196
- settingAction({ id: 'channel-homeassistant-enabled', label: 'Use home automation', detail: 'Toggle home automation conversation and event delivery.', key: 'surfaces.homeassistant.enabled' }),
197
- settingAction({ id: 'channel-homeassistant-url', label: 'Home automation URL', detail: 'Set the home automation instance URL.', key: 'surfaces.homeassistant.instanceUrl', visibleWhenKey: 'surfaces.homeassistant.enabled', visibleWhenValue: true }),
198
- settingAction({ id: 'channel-homeassistant-token', label: 'Home automation token', detail: 'Store the home automation access token or secret reference.', key: 'surfaces.homeassistant.accessToken', visibleWhenKey: 'surfaces.homeassistant.enabled', visibleWhenValue: true }),
199
- settingAction({ id: 'channel-homeassistant-webhook-secret', label: 'Home automation webhook secret', detail: 'Store the shared secret used to verify inbound callbacks.', key: 'surfaces.homeassistant.webhookSecret', visibleWhenKey: 'surfaces.homeassistant.enabled', visibleWhenValue: true }),
200
- settingAction({ id: 'channel-homeassistant-conversation', label: 'Home automation conversation', detail: 'Set the default conversation id.', key: 'surfaces.homeassistant.defaultConversationId', visibleWhenKey: 'surfaces.homeassistant.enabled', visibleWhenValue: true }),
201
- settingAction({ id: 'channel-homeassistant-device-id', label: 'Home automation device ID', detail: 'Set the stable device id exposed to the home automation surface.', key: 'surfaces.homeassistant.deviceId', visibleWhenKey: 'surfaces.homeassistant.enabled', visibleWhenValue: true }),
202
- settingAction({ id: 'channel-homeassistant-device-name', label: 'Home automation device name', detail: 'Set the device display name exposed to the home automation surface.', key: 'surfaces.homeassistant.deviceName', visibleWhenKey: 'surfaces.homeassistant.enabled', visibleWhenValue: true }),
203
- settingAction({ id: 'channel-homeassistant-event-type', label: 'Home automation event type', detail: 'Set the event type used for daemon-to-home automation delivery.', key: 'surfaces.homeassistant.eventType', visibleWhenKey: 'surfaces.homeassistant.enabled', visibleWhenValue: true }),
204
- settingAction({ id: 'channel-homeassistant-session-ttl', label: 'Home automation session TTL', detail: 'Set the idle TTL for remote home automation conversation sessions.', key: 'surfaces.homeassistant.remoteSessionTtlMs', visibleWhenKey: 'surfaces.homeassistant.enabled', visibleWhenValue: true }),
205
- settingAction({ id: 'channel-signal-enabled', label: 'Use Signal', detail: 'Toggle Signal bridge delivery.', key: 'surfaces.signal.enabled' }),
206
- settingAction({ id: 'channel-signal-bridge', label: 'Signal bridge URL', detail: 'Set the Signal bridge base URL.', key: 'surfaces.signal.bridgeUrl', visibleWhenKey: 'surfaces.signal.enabled', visibleWhenValue: true }),
207
- settingAction({ id: 'channel-signal-account', label: 'Signal account', detail: 'Set the Signal account id or phone number.', key: 'surfaces.signal.account', visibleWhenKey: 'surfaces.signal.enabled', visibleWhenValue: true }),
208
- settingAction({ id: 'channel-signal-token', label: 'Signal token', detail: 'Store the Signal bridge token or secret reference.', key: 'surfaces.signal.token', visibleWhenKey: 'surfaces.signal.enabled', visibleWhenValue: true }),
209
- settingAction({ id: 'channel-signal-recipient', label: 'Signal recipient', detail: 'Set the default Signal recipient or group.', key: 'surfaces.signal.defaultRecipient', visibleWhenKey: 'surfaces.signal.enabled', visibleWhenValue: true }),
210
- settingAction({ id: 'channel-whatsapp-enabled', label: 'Use WhatsApp', detail: 'Toggle WhatsApp delivery.', key: 'surfaces.whatsapp.enabled' }),
211
- settingAction({ id: 'channel-whatsapp-provider', label: 'WhatsApp provider', detail: 'Cycle Meta Cloud API or bridge provider mode.', key: 'surfaces.whatsapp.provider', visibleWhenKey: 'surfaces.whatsapp.enabled', visibleWhenValue: true }),
212
- settingAction({ id: 'channel-whatsapp-token', label: 'WhatsApp access token', detail: 'Store the WhatsApp provider access token or secret reference.', key: 'surfaces.whatsapp.accessToken', visibleWhenKey: 'surfaces.whatsapp.enabled', visibleWhenValue: true }),
213
- settingAction({ id: 'channel-whatsapp-phone-id', label: 'WhatsApp phone number ID', detail: 'Set the WhatsApp phone number id.', key: 'surfaces.whatsapp.phoneNumberId', visibleWhenKey: 'surfaces.whatsapp.enabled', visibleWhenValue: true }),
214
- settingAction({ id: 'channel-whatsapp-business-id', label: 'WhatsApp business ID', detail: 'Set the WhatsApp business account id.', key: 'surfaces.whatsapp.businessAccountId', visibleWhenKey: 'surfaces.whatsapp.enabled', visibleWhenValue: true }),
215
- settingAction({ id: 'channel-whatsapp-verify', label: 'WhatsApp verify token', detail: 'Store the WhatsApp verify token or secret reference.', key: 'surfaces.whatsapp.verifyToken', visibleWhenKey: 'surfaces.whatsapp.enabled', visibleWhenValue: true }),
216
- settingAction({ id: 'channel-whatsapp-signing', label: 'WhatsApp signing secret', detail: 'Store the WhatsApp signing secret or secret reference.', key: 'surfaces.whatsapp.signingSecret', visibleWhenKey: 'surfaces.whatsapp.enabled', visibleWhenValue: true }),
217
- settingAction({ id: 'channel-whatsapp-recipient', label: 'WhatsApp recipient', detail: 'Set the default WhatsApp recipient or chat id.', key: 'surfaces.whatsapp.defaultRecipient', visibleWhenKey: 'surfaces.whatsapp.enabled', visibleWhenValue: true }),
218
- settingAction({ id: 'channel-imessage-enabled', label: 'Use iMessage', detail: 'Toggle iMessage bridge delivery.', key: 'surfaces.imessage.enabled' }),
219
- settingAction({ id: 'channel-imessage-bridge', label: 'iMessage bridge URL', detail: 'Set the iMessage bridge base URL.', key: 'surfaces.imessage.bridgeUrl', visibleWhenKey: 'surfaces.imessage.enabled', visibleWhenValue: true }),
220
- settingAction({ id: 'channel-imessage-account', label: 'iMessage account', detail: 'Set the iMessage account id.', key: 'surfaces.imessage.account', visibleWhenKey: 'surfaces.imessage.enabled', visibleWhenValue: true }),
221
- settingAction({ id: 'channel-imessage-token', label: 'iMessage token', detail: 'Store the iMessage bridge token or secret reference.', key: 'surfaces.imessage.token', visibleWhenKey: 'surfaces.imessage.enabled', visibleWhenValue: true }),
222
- settingAction({ id: 'channel-imessage-chat', label: 'iMessage chat ID', detail: 'Set the default iMessage chat id.', key: 'surfaces.imessage.defaultChatId', visibleWhenKey: 'surfaces.imessage.enabled', visibleWhenValue: true }),
223
- ],
224
- },
225
- {
226
- id: 'onboarding-voice-media',
227
- group: 'ONBOARDING',
228
- label: 'Voice & Phone',
229
- summary: 'Configure voice controls, spoken output, and SMS or phone-call delivery.',
230
- detail: 'Use this page for saved voice/TTS settings and telephony credentials. Generating media is available later from Voice & Media.',
231
- actions: [
232
- settingAction({ id: 'voice-enabled', label: 'Use voice controls', detail: 'Toggle the optional local voice control surface.', key: 'ui.voiceEnabled' }),
233
- settingAction({ id: 'voice-tts-provider', label: 'TTS provider', detail: 'Set the default text-to-speech provider id.', key: 'tts.provider' }),
234
- settingAction({ id: 'voice-tts-voice', label: 'TTS voice', detail: 'Set the default text-to-speech voice id.', key: 'tts.voice' }),
235
- settingAction({ id: 'telephony-enabled', label: 'Use telephony', detail: 'Toggle SMS, voice call, or telephony bridge delivery.', key: 'surfaces.telephony.enabled' }),
236
- settingAction({ id: 'telephony-provider', label: 'Telephony provider', detail: 'Cycle direct provider or bridge mode.', key: 'surfaces.telephony.provider', visibleWhenKey: 'surfaces.telephony.enabled', visibleWhenValue: true }),
237
- settingAction({ id: 'telephony-mode', label: 'Telephony mode', detail: 'Cycle SMS, voice call, or bridge delivery mode.', key: 'surfaces.telephony.mode', visibleWhenKey: 'surfaces.telephony.enabled', visibleWhenValue: true }),
238
- settingAction({ id: 'telephony-bridge-url', label: 'Telephony bridge URL', detail: 'Set the telephony bridge base URL.', key: 'surfaces.telephony.bridgeUrl', visibleWhenKey: 'surfaces.telephony.enabled', visibleWhenValue: true }),
239
- settingAction({ id: 'telephony-token', label: 'Telephony bridge token', detail: 'Store the telephony bridge token or secret reference.', key: 'surfaces.telephony.token', visibleWhenKey: 'surfaces.telephony.enabled', visibleWhenValue: true }),
240
- settingAction({ id: 'telephony-account-sid', label: 'Twilio account SID', detail: 'Set the Twilio account SID for provider-direct delivery.', key: 'surfaces.telephony.accountSid', visibleWhenKey: 'surfaces.telephony.enabled', visibleWhenValue: true }),
241
- settingAction({ id: 'telephony-auth-token', label: 'Twilio auth token', detail: 'Store the Twilio auth token or secret reference.', key: 'surfaces.telephony.authToken', visibleWhenKey: 'surfaces.telephony.enabled', visibleWhenValue: true }),
242
- settingAction({ id: 'telephony-from', label: 'Sender phone number', detail: 'Set the default caller or sender phone number.', key: 'surfaces.telephony.fromNumber', visibleWhenKey: 'surfaces.telephony.enabled', visibleWhenValue: true }),
243
- settingAction({ id: 'telephony-recipient', label: 'Recipient phone number', detail: 'Set the default telephony recipient number.', key: 'surfaces.telephony.defaultRecipient', visibleWhenKey: 'surfaces.telephony.enabled', visibleWhenValue: true }),
244
- settingAction({ id: 'telephony-webhook-secret', label: 'Telephony webhook secret', detail: 'Store the shared telephony webhook secret or secret reference.', key: 'surfaces.telephony.webhookSecret', visibleWhenKey: 'surfaces.telephony.enabled', visibleWhenValue: true }),
245
- settingAction({ id: 'telephony-voice-language', label: 'Voice language', detail: 'Set the BCP-47 language code for voice-call text-to-speech.', key: 'surfaces.telephony.voiceLanguage', visibleWhenKey: 'surfaces.telephony.enabled', visibleWhenValue: true }),
246
- ],
247
- },
248
- {
249
- id: 'onboarding-context',
250
- group: 'ONBOARDING',
251
- label: 'Local Context',
252
- summary: 'Create/import memory, personas, skills, routines, notes, and Knowledge.',
253
- detail: 'Use this page to seed the assistant with durable local context. These forms create Agent-owned records or ingest reviewed sources.',
254
- actions: [
255
- { id: 'context-profile-from-discovered', label: 'Profile from discovered files', detail: 'Create an isolated Agent profile from reviewed local persona, skill, and routine files.', editorKind: 'profile-from-discovered', kind: 'editor', safety: 'safe' },
256
- { id: 'context-persona-discovery', label: 'Import persona files', detail: 'Import discovered persona files into the Agent persona registry.', editorKind: 'persona-discovery-import', kind: 'editor', safety: 'safe' },
257
- { id: 'context-skill-discovery', label: 'Import skill files', detail: 'Import discovered skill files into the Agent skill registry.', editorKind: 'skill-discovery-import', kind: 'editor', safety: 'safe' },
258
- { id: 'context-routine-discovery', label: 'Import routine files', detail: 'Import discovered routine files into the Agent routine registry.', editorKind: 'routine-discovery-import', kind: 'editor', safety: 'safe' },
259
- { id: 'context-create-persona', label: 'Create persona', detail: 'Create and optionally activate an Agent-local persona.', editorKind: 'persona', kind: 'editor', safety: 'safe' },
260
- { id: 'context-create-memory', label: 'Create starter memory', detail: 'Create one durable local memory record.', editorKind: 'memory', kind: 'editor', safety: 'safe' },
261
- { id: 'context-create-skill', label: 'Create skill', detail: 'Create one reusable Agent-local skill.', editorKind: 'skill', kind: 'editor', safety: 'safe' },
262
- { id: 'context-create-routine', label: 'Create routine', detail: 'Create one reusable Agent-local routine.', editorKind: 'routine', kind: 'editor', safety: 'safe' },
263
- { id: 'context-create-note', label: 'Create note', detail: 'Create one Agent-local scratchpad note.', editorKind: 'note', kind: 'editor', safety: 'safe' },
264
- { id: 'context-knowledge-url', label: 'Ingest URL', detail: 'Ingest a reviewed URL into isolated Agent Knowledge after confirmation.', editorKind: 'knowledge-url', kind: 'editor', safety: 'safe' },
265
- { id: 'context-knowledge-file', label: 'Ingest file', detail: 'Ingest a local file into isolated Agent Knowledge after confirmation.', editorKind: 'knowledge-file', kind: 'editor', safety: 'safe' },
266
- { id: 'context-knowledge-bookmarks', label: 'Import bookmarks', detail: 'Import a browser bookmark export into isolated Agent Knowledge.', editorKind: 'knowledge-bookmarks', kind: 'editor', safety: 'safe' },
267
- { id: 'context-knowledge-browser-history', label: 'Import browser history', detail: 'Import local browser history or bookmarks into isolated Agent Knowledge.', editorKind: 'knowledge-browser-history', kind: 'editor', safety: 'safe' },
268
- ],
269
- },
270
- {
271
- id: 'onboarding-automation',
272
- group: 'ONBOARDING',
273
- label: 'Automation Setup',
274
- summary: 'Set scheduled work limits for reminders and routines.',
275
- detail: 'Use this page to enable automation and set bounded run limits. Creating actual reminders and routines remains a separate confirmed action.',
162
+ id: 'personal-ops',
163
+ group: 'DAY-TO-DAY',
164
+ label: 'Personal Ops',
165
+ summary: 'Inbox, agenda, notes, tasks, reminders, routines, and delivery.',
166
+ detail: 'Use this as the daily operations hub. It gives one path for personal work while keeping missing email/calendar connectors explicit.',
276
167
  actions: [
277
- settingAction({ id: 'automation-enabled', label: 'Use automation', detail: 'Toggle the automation subsystem for reminders and scheduled routines.', key: 'automation.enabled' }),
278
- settingAction({ id: 'automation-max-concurrent', label: 'Concurrent runs', detail: 'Set the maximum automation runs that can execute concurrently.', key: 'automation.maxConcurrentRuns', visibleWhenKey: 'automation.enabled', visibleWhenValue: true }),
279
- settingAction({ id: 'automation-history-limit', label: 'Run history limit', detail: 'Set the number of run history entries retained per automation job.', key: 'automation.runHistoryLimit', visibleWhenKey: 'automation.enabled', visibleWhenValue: true }),
280
- settingAction({ id: 'automation-default-timeout', label: 'Default timeout', detail: 'Set the default automation run timeout in milliseconds.', key: 'automation.defaultTimeoutMs', visibleWhenKey: 'automation.enabled', visibleWhenValue: true }),
281
- settingAction({ id: 'automation-catch-up', label: 'Catch-up window', detail: 'Set how long startup should catch up missed automation runs.', key: 'automation.catchUpWindowMinutes', visibleWhenKey: 'automation.enabled', visibleWhenValue: true }),
282
- settingAction({ id: 'automation-failure-cooldown', label: 'Failure cooldown', detail: 'Set the cooldown after a failed automation run.', key: 'automation.failureCooldownMs', visibleWhenKey: 'automation.enabled', visibleWhenValue: true }),
283
- settingAction({ id: 'automation-delete-after-run', label: 'Delete one-shot jobs', detail: 'Toggle deleting one-shot automation jobs after their first successful run.', key: 'automation.deleteAfterRun', visibleWhenKey: 'automation.enabled', visibleWhenValue: true }),
168
+ { id: 'personal-ops-map', label: 'Readiness map', detail: 'Use the detail pane and model route personal_ops action:"status" to see which personal operations lanes are ready, partial, or missing setup.', kind: 'guidance', safety: 'safe' },
169
+ { id: 'personal-ops-briefing', label: 'Daily briefing plan', detail: 'Build one read-only briefing plan across inbox, agenda, tasks, reminders, routines, delivery, notes, and the autonomy queue before reading live personal data or sending anything.', kind: 'guidance', safety: 'read-only' },
170
+ { id: 'personal-ops-queue', label: 'Review queue', detail: 'List saved inbox thread and calendar event review items, refreshable provider-read routes, and follow-up confirmation boundaries with personal_ops action:"queue".', kind: 'guidance', safety: 'read-only' },
171
+ { id: 'personal-ops-intake', label: 'Request planner', detail: 'Use personal_ops action:"intake" query:"..." to turn an inbox, agenda, task, reminder, note, routine, or delivery request into the safest visible route.', kind: 'guidance', safety: 'read-only' },
172
+ { id: 'personal-ops-autonomy-queue', label: 'Autonomy queue', detail: 'Inspect visible ongoing work, owners, status, and cancel or recovery routes before creating more background work.', kind: 'guidance', safety: 'read-only' },
173
+ { id: 'personal-ops-inbox', label: 'Inbox workflows', detail: 'Email inbox triage and draft review use workflow cards with reviewed connector routes and explicit send boundaries.', kind: 'guidance', safety: 'safe' },
174
+ { id: 'personal-ops-calendar', label: 'Calendar workflows', detail: 'Calendar agenda and conflict checks use workflow cards with reviewed connector routes; reminders stay on confirmed schedules.', kind: 'guidance', safety: 'safe' },
175
+ { id: 'personal-ops-notes', label: 'Scratchpad notes', detail: 'Open Agent-local notes for source triage, decisions, and handoff context.', targetCategoryId: 'notes', kind: 'workspace', safety: 'safe' },
176
+ { id: 'personal-ops-note-create', label: 'Create note', detail: 'Capture temporary context as an Agent-local scratchpad note.', editorKind: 'note', kind: 'editor', safety: 'safe' },
177
+ { id: 'personal-ops-workplan', label: 'Review work plan', detail: 'Open the visible work-plan route for user-facing task tracking.', targetCategoryId: 'work', kind: 'workspace', safety: 'safe' },
178
+ { id: 'personal-ops-workplan-add', label: 'Add work item', detail: 'Create one visible work-plan item instead of hiding the task in background state.', editorKind: 'workplan-add', kind: 'editor', safety: 'safe' },
179
+ { id: 'personal-ops-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' },
180
+ { id: 'personal-ops-reminder', label: 'Create reminder', detail: 'Create one connected reminder schedule with real timing, optional delivery target, and explicit confirmation.', editorKind: 'reminder-schedule', kind: 'editor', safety: 'safe' },
181
+ { id: 'personal-ops-routines', label: 'Routine library', detail: 'Open repeatable workflows and schedule-promotion readiness.', targetCategoryId: 'routines', kind: 'workspace', safety: 'safe' },
182
+ { id: 'personal-ops-schedules', label: 'Schedules', detail: 'Inspect connected schedules and promotion receipts from the automation area.', targetCategoryId: 'automation', kind: 'workspace', safety: 'safe' },
183
+ { id: 'personal-ops-channels', label: 'Delivery channels', detail: 'Open pairing and channel readiness before sending summaries, reminders, or follow-ups.', targetCategoryId: 'channels', kind: 'workspace', safety: 'safe' },
184
+ { id: 'personal-ops-operator-methods', label: 'Exact daemon methods', detail: 'The model can inspect the live daemon contract with host action:"methods" query:"task" or personal_ops action:"lane" for one lane.', kind: 'guidance', safety: 'read-only' },
284
185
  ],
285
186
  },
286
187
  {
287
188
  id: 'research',
288
189
  group: 'DAY-TO-DAY',
289
190
  label: 'Research',
290
- summary: 'Read-only web research and source triage in the main conversation.',
291
- 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.',
191
+ summary: 'Read-only web research, visible runs, sources, and reports.',
192
+ detail: 'Use this workspace to ask Agent to search, inspect URLs, track checkpointable research runs, compare sources, save sourced report artifacts, and decide what belongs in isolated Agent Knowledge. Research requests run in the normal conversation; source ingestion is explicit.',
292
193
  actions: [
293
194
  { 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' },
294
195
  { 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' },
196
+ { id: 'research-briefing', label: 'Research briefing', detail: 'Show one read-only next-action queue across visible runs, source review, saved report artifacts, browser readiness, and confirmed follow-up routes with research action:"briefing".', kind: 'guidance', safety: 'read-only' },
197
+ { id: 'research-workflow-plan', label: 'Plan workflow', detail: 'Inspect one ordered read-only plan across visible run state, browser-runner readiness, source review, visual-report packet save, and Knowledge promotion with research action:"plan"; use research action:"runner" for browser readiness only.', kind: 'guidance', safety: 'read-only' },
198
+ { id: 'research-runner-readiness', label: 'Browser runner readiness', detail: 'Inspect the direct browser-backed runner contract, setup routes, fallback routes, and user-control requirements with research action:"runner" before treating live browser research as available.', kind: 'guidance', safety: 'read-only' },
199
+ { id: 'research-run-queue', label: 'Research runs', detail: 'Inspect visible checkpointable research runs, phase, progress, resume, cancel, and report routes with research action:"runs".', kind: 'guidance', safety: 'read-only' },
200
+ { id: 'research-public-search', label: 'Public source search', detail: 'Run bounded public web research and return capture-ready source candidates with research action:"search"; source queue writes still require explicit confirmation.', kind: 'guidance', safety: 'read-only' },
201
+ { id: 'research-start-run', label: 'Start research run', detail: 'Open a confirmed form that creates one visible local research run with a resumable plan and no hidden background execution.', editorKind: 'research-run', kind: 'editor', safety: 'safe' },
202
+ { id: 'research-source-queue', label: 'Source queue', detail: 'Inspect project-local source candidates, credibility, report-ready source lines, and safe review or ingest routes with research action:"sources".', kind: 'guidance', safety: 'read-only' },
203
+ { id: 'research-add-source', label: 'Add source to queue', detail: 'Open a confirmed form that captures one source in the project-local research queue without saving a report or ingesting Knowledge.', editorKind: 'research-source', kind: 'editor', safety: 'safe' },
204
+ { id: 'research-report-artifacts', label: 'Report artifacts', detail: 'List saved sourced research report artifacts, visual report packets, citation coverage metadata, and preview routes with research action:"reports".', kind: 'guidance', safety: 'read-only' },
205
+ { id: 'research-save-report', label: 'Save research report', detail: 'Open a confirmed form that saves a reviewed source-grounded report artifact with a visual packet, source map, citation coverage, and handoff checklist. Use reviewed source queue lines when available.', editorKind: 'research-report', kind: 'editor', safety: 'safe' },
295
206
  { 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' },
296
207
  { 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' },
297
208
  { 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' },
@@ -302,14 +213,76 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
302
213
  { 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' },
303
214
  ],
304
215
  },
216
+ {
217
+ id: 'documents',
218
+ group: 'DAY-TO-DAY',
219
+ label: 'Documents & Compare',
220
+ summary: 'Draft docs, files, artifacts, and compare readiness.',
221
+ detail: 'Use this workspace when the user is producing or evaluating a document. Versioned drafts, review comments, AI suggestion review, artifact insertion/export, upload, source, artifact browsing, media, and blind comparison routes stay visible here.',
222
+ actions: [
223
+ { id: 'document-ops-map', label: 'Readiness map', detail: 'Use agent_harness mode:"document_ops" to see document, reviewer-readiness, upload, export, source, media, artifact, and blind compare lanes.', kind: 'guidance', safety: 'read-only' },
224
+ { id: 'document-browse-drafts', label: 'Browse document drafts', detail: 'List Agent-owned markdown drafts with status, version counts, tags, and exported artifact ids.', editorKind: 'document-browse', kind: 'editor', safety: 'read-only' },
225
+ { id: 'document-show-draft', label: 'Show document draft', detail: 'Inspect one Agent-owned markdown draft with body and version history.', editorKind: 'document-show', kind: 'editor', safety: 'read-only' },
226
+ { id: 'document-create-draft', label: 'Create document draft', detail: 'Open a confirmed form that saves a versioned Agent-owned markdown draft.', editorKind: 'document-create', kind: 'editor', safety: 'safe' },
227
+ { id: 'document-revise-draft', label: 'Revise document draft', detail: 'Open a confirmed form that appends a new version to an Agent-owned markdown draft.', editorKind: 'document-update', kind: 'editor', safety: 'safe' },
228
+ { id: 'document-review-draft', label: 'Mark draft reviewed', detail: 'Open a confirmed form that marks one Agent-owned markdown draft reviewed.', editorKind: 'document-review', kind: 'editor', safety: 'safe' },
229
+ { id: 'document-comment-draft', label: 'Add review comment', detail: 'Open a confirmed form that adds one review comment without changing the document body.', editorKind: 'document-comment', kind: 'editor', safety: 'safe' },
230
+ { id: 'document-resolve-comment', label: 'Resolve review comment', detail: 'Open a confirmed form that resolves one document review comment by id.', editorKind: 'document-resolve-comment', kind: 'editor', safety: 'safe' },
231
+ { id: 'document-suggest-draft', label: 'Propose AI suggestion', detail: 'Open a confirmed form that stores a suggested replacement draft for review without changing the current document body.', editorKind: 'document-suggest', kind: 'editor', safety: 'safe' },
232
+ { id: 'document-accept-suggestion', label: 'Accept suggestion', detail: 'Open a confirmed form that applies one pending document suggestion as a new content version.', editorKind: 'document-accept-suggestion', kind: 'editor', safety: 'safe' },
233
+ { id: 'document-reject-suggestion', label: 'Reject suggestion', detail: 'Open a confirmed form that rejects one pending document suggestion without changing the document body.', editorKind: 'document-reject-suggestion', kind: 'editor', safety: 'safe' },
234
+ { id: 'document-insert-artifact', label: 'Insert artifact in draft', detail: 'Open a confirmed form that inserts a saved artifact into one Agent-owned markdown draft as a new version.', editorKind: 'document-insert-artifact', kind: 'editor', safety: 'safe' },
235
+ { id: 'document-attach-artifact', label: 'Attach artifact to draft', detail: 'Open a confirmed form that links a saved artifact to one document draft without changing the body.', editorKind: 'document-attach-artifact', kind: 'editor', safety: 'safe' },
236
+ { id: 'document-review-packet-timeline', label: 'Review packet timeline', detail: 'Scan the chronological document, comment, suggestion, attachment, compare, judgment, handoff, archive, and route-decision timeline in this workspace context.', kind: 'guidance', safety: 'read-only' },
237
+ { id: 'document-review-packet-wizard', label: 'Review packet wizard', detail: 'Open a read-only stepper for draft review, document export, comparison judgment, reviewer handoff, route decision, and final archive evidence.', editorKind: 'document-review-packet-wizard', kind: 'editor', safety: 'read-only' },
238
+ { id: 'document-save-review-packet-preset', label: 'Save packet preset', detail: 'Open a confirmed form that saves the current document, comparison, judgment, handoff, archive, route decision, and related artifact ids as a reusable local preset artifact.', editorKind: 'document-review-packet-preset', kind: 'editor', safety: 'safe' },
239
+ { id: 'document-refresh-review-packet-preset', label: 'Refresh packet preset', detail: 'Open a confirmed form that saves a new preset artifact from an existing stale packet preset and its freshness recommendations.', editorKind: 'document-review-packet-preset-refresh', kind: 'editor', safety: 'safe' },
240
+ { id: 'document-share-review-packet', label: 'Share review packet', detail: 'Open a confirmed form that validates a saved reviewer handoff archive and sends a plain-text packet reference through one configured channel target.', editorKind: 'document-review-packet-share', kind: 'editor', safety: 'safe' },
241
+ { id: 'document-reviewer-readiness', label: 'Review readiness preflight', detail: 'Open a read-only preflight that flags unresolved comments, proposed suggestions, source evidence gaps, unrevealed comparisons, route decisions, and handoff evidence before export, archive, or route update.', editorKind: 'document-reviewer-readiness', kind: 'editor', safety: 'read-only' },
242
+ { id: 'document-export-draft', label: 'Export document artifact', detail: 'Open a confirmed form that exports one document draft as a markdown artifact.', editorKind: 'document-export', kind: 'editor', safety: 'safe' },
243
+ { id: 'document-export-artifact-file', label: 'Export saved artifact', detail: 'Open a confirmed form that copies one saved artifact to a workspace file without printing content.', editorKind: 'artifact-export-file', kind: 'editor', safety: 'safe' },
244
+ { id: 'document-export-artifact-package', label: 'Export artifact package', detail: 'Open a confirmed form that copies selected saved artifacts into a workspace package directory or ZIP archive with a redacted manifest.', editorKind: 'artifact-export-package', kind: 'editor', safety: 'safe' },
245
+ { id: 'document-draft-chat', label: 'Draft in conversation', detail: 'Draft or revise a document in the main conversation, then export or save the resulting artifact through the visible export routes.', kind: 'guidance', safety: 'safe' },
246
+ { id: 'document-attach-image', label: 'Attach image', detail: 'Open an in-workspace image attachment form for a local image path and optional document prompt.', editorKind: 'image-input', kind: 'editor', safety: 'safe' },
247
+ { id: 'document-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' },
248
+ { id: 'document-ingest-file', label: 'Ingest file source', detail: 'Open a confirmed form that imports one reviewed local file into isolated Agent Knowledge for document work.', editorKind: 'knowledge-file', kind: 'editor', safety: 'safe' },
249
+ { id: 'document-ingest-url-list', label: 'Import URL list', detail: 'Open a confirmed form that imports a reviewed URL list into isolated Agent Knowledge.', editorKind: 'knowledge-urls', kind: 'editor', safety: 'safe' },
250
+ { id: 'document-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' },
251
+ { id: 'document-export-session', 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' },
252
+ { id: 'document-sources', 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' },
253
+ { id: 'document-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' },
254
+ { id: 'document-artifacts', label: 'Artifact workspace', detail: 'Open the existing artifact workspace for attachments, source ingest, generated media, and artifact safety policy.', targetCategoryId: 'artifacts', kind: 'workspace', safety: 'safe' },
255
+ { id: 'document-browse-artifacts', label: 'Browse artifacts', detail: 'Search saved uploads, exports, generated media, source artifacts, and comparison artifacts from one read-only browser.', editorKind: 'artifact-browser', kind: 'editor', safety: 'read-only' },
256
+ { id: 'document-show-artifact', label: 'Show artifact', detail: 'Inspect one saved artifact by id with redacted metadata and bounded text preview when possible.', editorKind: 'artifact-show', kind: 'editor', safety: 'read-only' },
257
+ { id: 'document-promote-artifact', label: 'Promote artifact to Knowledge', detail: 'Open a confirmed form that ingests one saved artifact into isolated Agent Knowledge.', editorKind: 'artifact-promote-knowledge', kind: 'editor', safety: 'safe' },
258
+ { id: 'document-media-providers', label: 'Media providers', detail: 'Inspect configured media provider readiness without generating artifacts.', command: '/media providers', kind: 'command', safety: 'read-only' },
259
+ { id: 'document-generate-media', label: 'Generate media artifact', detail: 'Open a confirmed prompt form that generates image or video artifacts through configured media providers.', editorKind: 'media-generate', kind: 'editor', safety: 'safe' },
260
+ { id: 'document-model-routing', label: 'Model routing', detail: 'Open provider/model route controls before any manual model comparison or route change.', targetCategoryId: 'account-model', kind: 'workspace', safety: 'safe' },
261
+ { id: 'document-run-compare', label: 'Run blind compare', detail: 'Open a confirmed form that runs the same prompt or saved text artifact across two to four selectable models, hides candidate identities, and saves a review artifact.', editorKind: 'model-compare', kind: 'editor', safety: 'safe' },
262
+ { id: 'document-review-compare', label: 'Review saved compare', detail: 'Open a read-only form that lists saved blind comparisons, renders one review board, shows related artifacts beside comparison evidence, or diffs two reviewer handoffs.', editorKind: 'model-compare-review', kind: 'editor', safety: 'read-only' },
263
+ { id: 'document-diff-handoffs', label: 'Diff reviewer handoffs', detail: 'Open a split-pane read-only handoff diff form with section jump focus for all, metadata, policy, related artifacts, or comparison evidence.', editorKind: 'model-compare-handoff-diff', kind: 'editor', safety: 'read-only' },
264
+ { id: 'document-judge-compare', label: 'Save compare judgment', detail: 'Open a confirmed form that saves the winning candidate and reasons as a local judgment artifact without changing model routing.', editorKind: 'model-compare-judge', kind: 'editor', safety: 'safe' },
265
+ { id: 'document-compare-analytics', label: 'Compare analytics', detail: 'Summarize or synthesize saved comparison judgments by winner, model, blind slot, themes, task type, document id, benchmark tag, and recent reasons.', editorKind: 'model-compare-analytics', kind: 'editor', safety: 'read-only' },
266
+ { id: 'document-apply-compare', label: 'Apply compare winner', detail: 'Open a confirmed form that applies a revealed saved comparison judgment to the main Agent model route.', editorKind: 'model-compare-apply', kind: 'editor', safety: 'safe' },
267
+ { id: 'document-record-route-decision', label: 'Record route decision', detail: 'Open a confirmed form that records leave-current-model-unchanged evidence for a revealed comparison judgment.', editorKind: 'model-compare-route-decision', kind: 'editor', safety: 'safe' },
268
+ { id: 'document-export-compare', label: 'Export compare report', detail: 'Open a confirmed form that exports a saved comparison or judgment report, creates a reviewer handoff with related artifacts, or archives a saved handoff as one ZIP artifact.', editorKind: 'model-compare-export', kind: 'editor', safety: 'safe' },
269
+ ],
270
+ },
305
271
  {
306
272
  id: 'artifacts',
307
273
  group: 'DAY-TO-DAY',
308
274
  label: 'Artifacts',
309
- summary: 'Files, attachments, exports, source ingest, and generated media.',
310
- 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.',
275
+ summary: 'Browse, attach, export, ingest, and generate artifacts.',
276
+ detail: 'Use this workspace to handle concrete user-visible artifacts: browse saved artifacts, attach images, export conversations, ingest source files into Agent Knowledge, inspect source libraries, and generate media with explicit confirmation.',
311
277
  actions: [
312
- { 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' },
278
+ { id: 'artifact-flow', label: 'Artifact workflow', detail: 'Attach, export, ingest, or generate first, then use the artifact browser to inspect saved ids, redacted metadata, and bounded text previews.', kind: 'guidance', safety: 'safe' },
279
+ { id: 'artifact-browse', label: 'Browse artifacts', detail: 'Search saved uploads, exports, generated media, source artifacts, and comparison artifacts from one read-only browser.', editorKind: 'artifact-browser', kind: 'editor', safety: 'read-only' },
280
+ { id: 'artifact-show', label: 'Show artifact', detail: 'Inspect one saved artifact by id with redacted metadata and bounded text preview when possible.', editorKind: 'artifact-show', kind: 'editor', safety: 'read-only' },
281
+ { id: 'artifact-export-file', label: 'Export saved artifact', detail: 'Open a confirmed form that copies one saved artifact to a workspace file without printing content.', editorKind: 'artifact-export-file', kind: 'editor', safety: 'safe' },
282
+ { id: 'artifact-export-package', label: 'Export package', detail: 'Open a confirmed form that copies selected saved artifacts into a workspace package directory or ZIP archive with a redacted manifest.', editorKind: 'artifact-export-package', kind: 'editor', safety: 'safe' },
283
+ { id: 'artifact-promote-knowledge', label: 'Promote to Knowledge', detail: 'Open a confirmed form that ingests one saved artifact into isolated Agent Knowledge.', editorKind: 'artifact-promote-knowledge', kind: 'editor', safety: 'safe' },
284
+ { id: 'artifact-insert-document', label: 'Insert in document draft', detail: 'Open a confirmed form that inserts a saved artifact into an Agent-owned markdown draft as a new version.', editorKind: 'document-insert-artifact', kind: 'editor', safety: 'safe' },
285
+ { id: 'artifact-attach-document', label: 'Attach to document draft', detail: 'Open a confirmed form that links a saved artifact to a document draft without rewriting the body.', editorKind: 'document-attach-artifact', kind: 'editor', safety: 'safe' },
313
286
  { 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' },
314
287
  { 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' },
315
288
  { 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' },
@@ -322,7 +295,13 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
322
295
  { 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' },
323
296
  { id: 'artifact-media-providers', label: 'Media providers', detail: 'Inspect configured media provider readiness without generating artifacts.', command: '/media providers', kind: 'command', safety: 'read-only' },
324
297
  { 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' },
325
- { 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' },
298
+ { id: 'artifact-review-compare', label: 'Review blind compare', detail: 'Open a read-only saved comparison review, side-by-side evidence view, or reviewer handoff diff for model comparison artifacts.', editorKind: 'model-compare-review', kind: 'editor', safety: 'read-only' },
299
+ { id: 'artifact-diff-handoffs', label: 'Diff reviewer handoffs', detail: 'Open a read-only split-pane form that compares two saved reviewer handoff artifacts with section jump focus.', editorKind: 'model-compare-handoff-diff', kind: 'editor', safety: 'read-only' },
300
+ { id: 'artifact-judge-compare', label: 'Save compare judgment', detail: 'Open a confirmed form that saves a comparison winner and reasons as a local artifact without route mutation.', editorKind: 'model-compare-judge', kind: 'editor', safety: 'safe' },
301
+ { id: 'artifact-compare-analytics', label: 'Compare analytics', detail: 'Summarize or synthesize saved comparison judgment artifacts by winner, model, blind slot, themes, task type, document id, benchmark tag, and recent reasons.', editorKind: 'model-compare-analytics', kind: 'editor', safety: 'read-only' },
302
+ { id: 'artifact-apply-compare', label: 'Apply compare winner', detail: 'Open a confirmed form that applies a revealed judgment artifact to provider.model.', editorKind: 'model-compare-apply', kind: 'editor', safety: 'safe' },
303
+ { id: 'artifact-export-compare', label: 'Export compare report', detail: 'Open a confirmed form that exports a saved comparison or judgment report, creates a reviewer handoff with related artifacts, or archives a saved handoff as one ZIP artifact.', editorKind: 'model-compare-export', kind: 'editor', safety: 'safe' },
304
+ { 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; artifact previews are bounded and redacted.', kind: 'guidance', safety: 'read-only' },
326
305
  ],
327
306
  },
328
307
  {
@@ -379,11 +358,14 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
379
358
  actions: [
380
359
  { 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' },
381
360
  { id: 'pair', label: 'Pair companion', detail: 'Open the QR pairing view for companion app setup.', command: '/pair', kind: 'command', safety: 'safe' },
361
+ { id: 'channel-guide', label: 'Channel setup guide', detail: 'Show the ordered per-channel setup guide with setup schema, policy, live status, and explicit test-send steps.', command: '/channels guide', kind: 'command', safety: 'read-only' },
382
362
  { id: 'channel-readiness', label: 'Channel readiness', detail: 'Show the read-only readiness matrix.', command: '/channels', kind: 'command', safety: 'read-only' },
383
363
  { 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' },
364
+ { id: 'channel-triage', label: 'Channel triage', detail: 'Inspect setup blockers, delivery retry candidates, visible surface messages, route bindings, and redacted Agent receipts without sending messages.', command: '/channels triage', kind: 'command', safety: 'read-only' },
384
365
  { 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' },
385
366
  { id: 'channel-policies', label: 'Channel policies', detail: 'Inspect channel delivery policy posture without changing routing.', command: '/channels policies', kind: 'command', safety: 'read-only' },
386
367
  { 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' },
368
+ { id: 'channel-deliveries', label: 'Delivery receipts', detail: 'Inspect recent confirmed channel sends with message bodies and secret-bearing target values redacted.', command: '/channels deliveries', kind: 'command', safety: 'read-only' },
387
369
  { 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' },
388
370
  { 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' },
389
371
  { 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' },
@@ -472,6 +454,9 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
472
454
  summary: 'Voice, TTS, image input, browser tools, and media providers.',
473
455
  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.',
474
456
  actions: [
457
+ { id: 'voice-workflow-posture', label: 'Voice workflows', detail: 'Inspect push-to-talk, voice memo transcription, spoken responses, and wake-word readiness with device action:"voice".', kind: 'guidance', safety: 'read-only' },
458
+ { id: 'device-capability-map', label: 'Device capability map', detail: 'Inspect pairing, mobile command routing, browser/PWA, notifications, browser/desktop control, and camera/location readiness with device action:"status" without claiming unpublished contracts.', kind: 'guidance', safety: 'read-only' },
459
+ { id: 'browser-cockpit-readiness', label: 'Browser/PWA readiness', detail: 'Inspect the connected browser cockpit/PWA route, workspace category coverage, mobile controls, and first-run receipt gaps with computer action:"browser" before opening a browser.', kind: 'guidance', safety: 'read-only' },
475
460
  { id: 'tts-config', label: 'Configure live TTS', detail: 'Open the settings workspace at the TTS group.', command: '/config tts', kind: 'command', safety: 'safe' },
476
461
  { 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' },
477
462
  { id: 'voice-review', label: 'Voice review', detail: 'Inspect local voice posture before enabling spoken interaction.', command: '/voice review', kind: 'command', safety: 'read-only' },
@@ -522,9 +507,12 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
522
507
  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.',
523
508
  actions: [
524
509
  { id: 'memory-list', label: 'List memory', detail: 'Print the full Agent-owned memory list.', command: '/memory list', kind: 'command', safety: 'read-only' },
510
+ { id: 'memory-posture', label: 'Memory posture', detail: 'Inspect Agent-local memory, prompt-active recall, vector health, embedding providers, and external-memory provider gaps with memory action:"status".', kind: 'guidance', safety: 'read-only' },
525
511
  { 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' },
526
512
  { 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' },
527
513
  { id: 'memory-queue', label: 'Review queue', detail: 'Print the Agent-local memory review queue.', command: '/memory queue', kind: 'command', safety: 'read-only' },
514
+ { id: 'memory-learning-curator', label: 'Learning curator', detail: 'Inspect ranked local memory, note, persona, skill, bundle, routine, duplicate-consolidation, completed-work, completed-research, and saved-session candidates with review, setup, stale, proposal, capture, diff, and rollback routes.', kind: 'guidance', safety: 'read-only' },
515
+ { id: 'memory-prompt-plan', label: 'Prompt plan', detail: 'Explain which reviewed memories and setup-ready behaviors can guide the assistant now, what is suppressed, and which scored review routes should run before prompt context expands.', kind: 'guidance', safety: 'read-only' },
528
516
  { 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' },
529
517
  { 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' },
530
518
  { 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' },
@@ -578,9 +566,13 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
578
566
  id: 'personas',
579
567
  group: 'LOCAL BEHAVIOR',
580
568
  label: 'Personas',
581
- summary: 'Local behavior profiles for the main assistant.',
582
- detail: 'Personas shape the serial Agent in the main conversation. They are local behavior profiles, not separate Agent identities.',
569
+ summary: 'VIBE.md personality and local behavior profiles for the main assistant.',
570
+ detail: 'VIBE.md is the friendly personality file for the serial Agent. Personas remain local behavior profiles, not separate Agent identities.',
583
571
  actions: [
572
+ { id: 'vibe-status', label: 'VIBE.md status', detail: 'Show project/global VIBE.md files that will shape later main-conversation turns, including blocked files.', command: '/vibe status', kind: 'command', safety: 'read-only' },
573
+ { id: 'vibe-init-project', label: 'Create project VIBE.md', detail: 'Preview creation of a project VIBE.md personality file in the current workspace.', command: '/vibe init', kind: 'command', safety: 'read-only' },
574
+ { id: 'vibe-init-global', label: 'Create global VIBE.md', detail: 'Preview creation of a global Agent VIBE.md personality file under the Agent home.', command: '/vibe init --global', kind: 'command', safety: 'read-only' },
575
+ { id: 'vibe-import-persona', label: 'Import VIBE as persona', detail: 'Preview importing VIBE.md into the reviewed local persona library for explicit activation/review workflows.', command: '/vibe import-persona project', kind: 'command', safety: 'read-only' },
584
576
  { id: 'personas-list', label: 'List personas', detail: 'Print the full local persona library.', command: '/personas list', kind: 'command', safety: 'read-only' },
585
577
  { 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' },
586
578
  { id: 'personas-search', label: 'Search personas', detail: 'Open a search form for the local persona library.', editorKind: 'persona-search', kind: 'editor', safety: 'read-only' },
@@ -670,6 +662,9 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
670
662
  detail: 'Use this workspace to inspect active operator state and update visible work-plan items from confirmed TUI forms.',
671
663
  actions: [
672
664
  { 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' },
665
+ { id: 'work-autonomy-queue', label: 'Autonomy queue', detail: 'Inspect visible work-plan, host-task, approval, automation, schedule, routine, and delegation queue cards.', kind: 'guidance', safety: 'read-only' },
666
+ { id: 'work-background-processes', label: 'Background processes', detail: 'Inspect tracked local background processes, bounded output tails, visible monitor routes, and lifecycle controls with execution action:"processes".', kind: 'guidance', safety: 'read-only' },
667
+ { id: 'work-process-capabilities', label: 'Process capabilities', detail: 'Inspect process parity for start/list/poll/wait/log/kill/write, PTY, and sudo before choosing a local execution route.', kind: 'guidance', safety: 'read-only' },
673
668
  { 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' },
674
669
  { 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' },
675
670
  { 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' },
@@ -725,9 +720,11 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
725
720
  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.',
726
721
  actions: [
727
722
  { 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' },
723
+ { id: 'schedule-autonomy-queue', label: 'Autonomy queue', detail: 'Inspect visible reminder, routine promotion, connected schedule, automation run, and cancellation routes.', kind: 'guidance', safety: 'read-only' },
728
724
  { 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' },
729
725
  { 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' },
730
726
  { 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' },
727
+ { id: 'schedule-edit', label: 'Edit schedule', detail: 'Open a confirmed form that edits one connected schedule name, cadence, or prompt by id.', editorKind: 'schedule-edit', kind: 'editor', safety: 'safe' },
731
728
  { 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' },
732
729
  { 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' },
733
730
  { 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' },
@@ -739,7 +736,7 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
739
736
  { 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' },
740
737
  { 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' },
741
738
  { 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' },
742
- { 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' },
739
+ { id: 'schedule-policy', label: 'Local scheduler blocked', detail: 'Local schedule creation remains blocked. Connected edit, run, enable, disable, and delete actions use explicit confirmed forms only.', kind: 'guidance', safety: 'blocked' },
743
740
  { 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' },
744
741
  { 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' },
745
742
  ],
@@ -749,10 +746,10 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
749
746
  group: 'OPERATIONS',
750
747
  label: 'Build Delegation',
751
748
  summary: 'Explicit handoff to GoodVibes TUI for code work.',
752
- 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.',
749
+ detail: 'Agent does not become the coding TUI. Build, implement, fix, patch, and review work can be handed to GoodVibes TUI with the full original ask, reason, success criteria, and delegated review only when explicitly requested.',
753
750
  actions: [
754
- { 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' },
755
- { 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' },
751
+ { id: 'delegate-guidance', label: 'Delegation rule', detail: 'For build/fix/review work, delegate only when isolation, remote execution, parallelism, separate worktrees, a TUI workflow, or explicit review improves the user outcome.', kind: 'guidance', safety: 'delegates' },
752
+ { id: 'delegate-task', label: 'Delegate build task', detail: 'Open a confirmed form that sends one explicit build/fix/review task and handoff brief to GoodVibes TUI/shared-session routes.', editorKind: 'delegate-task', kind: 'editor', safety: 'delegates' },
756
753
  { 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' },
757
754
  { 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' },
758
755
  ],
@@ -782,6 +779,7 @@ export function renderAgentWorkspacePackageText(): string {
782
779
  action.modelPickerFlow ? `model-picker-flow:${action.modelPickerFlow}` : '',
783
780
  action.settingsTarget ? `settings-target:${action.settingsTarget}` : '',
784
781
  action.kind === 'settings-import' ? 'import:goodvibes-tui-settings' : '',
782
+ action.setupCheckpointOperation ? `setup-checkpoint:${action.setupCheckpointOperation}` : '',
785
783
  action.localKind ? `local:${action.localKind}` : '',
786
784
  action.localOperation ? `operation:${action.localOperation}` : '',
787
785
  ];