@askexenow/exe-os 0.9.64 → 0.9.66

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 (105) hide show
  1. package/deploy/stack-manifests/v0.9.json +4 -4
  2. package/dist/bin/backfill-conversations.js +22 -0
  3. package/dist/bin/backfill-responses.js +22 -0
  4. package/dist/bin/backfill-vectors.js +22 -0
  5. package/dist/bin/cleanup-stale-review-tasks.js +22 -0
  6. package/dist/bin/cli.js +2280 -1199
  7. package/dist/bin/exe-agent-config.js +4 -0
  8. package/dist/bin/exe-agent.js +16 -0
  9. package/dist/bin/exe-assign.js +22 -0
  10. package/dist/bin/exe-boot.js +116 -7
  11. package/dist/bin/exe-call.js +16 -0
  12. package/dist/bin/exe-cloud.js +6671 -464
  13. package/dist/bin/exe-dispatch.js +24 -0
  14. package/dist/bin/exe-doctor.js +2845 -1223
  15. package/dist/bin/exe-export-behaviors.js +24 -0
  16. package/dist/bin/exe-forget.js +22 -0
  17. package/dist/bin/exe-gateway.js +24 -0
  18. package/dist/bin/exe-heartbeat.js +23 -0
  19. package/dist/bin/exe-kill.js +22 -0
  20. package/dist/bin/exe-launch-agent.js +24 -0
  21. package/dist/bin/exe-link.js +310 -178
  22. package/dist/bin/exe-new-employee.js +127 -1
  23. package/dist/bin/exe-pending-messages.js +22 -0
  24. package/dist/bin/exe-pending-notifications.js +22 -0
  25. package/dist/bin/exe-pending-reviews.js +22 -0
  26. package/dist/bin/exe-rename.js +22 -0
  27. package/dist/bin/exe-review.js +22 -0
  28. package/dist/bin/exe-search.js +24 -0
  29. package/dist/bin/exe-session-cleanup.js +24 -0
  30. package/dist/bin/exe-settings.js +10 -0
  31. package/dist/bin/exe-start-codex.js +135 -1
  32. package/dist/bin/exe-start-opencode.js +149 -1
  33. package/dist/bin/exe-status.js +22 -0
  34. package/dist/bin/exe-team.js +22 -0
  35. package/dist/bin/git-sweep.js +24 -0
  36. package/dist/bin/graph-backfill.js +22 -0
  37. package/dist/bin/graph-export.js +22 -0
  38. package/dist/bin/install.js +115 -1
  39. package/dist/bin/intercom-check.js +24 -0
  40. package/dist/bin/scan-tasks.js +24 -0
  41. package/dist/bin/setup.js +412 -157
  42. package/dist/bin/shard-migrate.js +22 -0
  43. package/dist/bin/update.js +4 -0
  44. package/dist/gateway/index.js +24 -0
  45. package/dist/hooks/bug-report-worker.js +135 -42
  46. package/dist/hooks/codex-stop-task-finalizer.js +24 -0
  47. package/dist/hooks/commit-complete.js +24 -0
  48. package/dist/hooks/error-recall.js +24 -0
  49. package/dist/hooks/exe-heartbeat-hook.js +4 -0
  50. package/dist/hooks/ingest-worker.js +4 -0
  51. package/dist/hooks/ingest.js +23 -0
  52. package/dist/hooks/instructions-loaded.js +22 -0
  53. package/dist/hooks/notification.js +22 -0
  54. package/dist/hooks/post-compact.js +22 -0
  55. package/dist/hooks/post-tool-combined.js +24 -0
  56. package/dist/hooks/pre-compact.js +260 -109
  57. package/dist/hooks/pre-tool-use.js +22 -0
  58. package/dist/hooks/prompt-submit.js +24 -0
  59. package/dist/hooks/session-end.js +161 -122
  60. package/dist/hooks/session-start.js +142 -0
  61. package/dist/hooks/stop.js +23 -0
  62. package/dist/hooks/subagent-stop.js +22 -0
  63. package/dist/hooks/summary-worker.js +195 -79
  64. package/dist/index.js +24 -0
  65. package/dist/lib/agent-config.js +4 -0
  66. package/dist/lib/cloud-sync.js +50 -6
  67. package/dist/lib/config.js +12 -0
  68. package/dist/lib/consolidation.js +4 -0
  69. package/dist/lib/database.js +4 -0
  70. package/dist/lib/db-daemon-client.js +4 -0
  71. package/dist/lib/db.js +4 -0
  72. package/dist/lib/device-registry.js +4 -0
  73. package/dist/lib/embedder.js +12 -0
  74. package/dist/lib/employee-templates.js +16 -0
  75. package/dist/lib/employees.js +4 -0
  76. package/dist/lib/exe-daemon-client.js +4 -0
  77. package/dist/lib/exe-daemon.js +1144 -480
  78. package/dist/lib/hybrid-search.js +24 -0
  79. package/dist/lib/identity.js +4 -0
  80. package/dist/lib/license.js +4 -0
  81. package/dist/lib/messaging.js +4 -0
  82. package/dist/lib/reminders.js +4 -0
  83. package/dist/lib/schedules.js +22 -0
  84. package/dist/lib/skill-learning.js +12 -0
  85. package/dist/lib/status-brief.js +39 -0
  86. package/dist/lib/store.js +22 -0
  87. package/dist/lib/task-router.js +4 -0
  88. package/dist/lib/tasks.js +12 -0
  89. package/dist/lib/tmux-routing.js +12 -0
  90. package/dist/lib/token-spend.js +4 -0
  91. package/dist/mcp/server.js +1045 -427
  92. package/dist/mcp/tools/complete-reminder.js +4 -0
  93. package/dist/mcp/tools/create-reminder.js +4 -0
  94. package/dist/mcp/tools/create-task.js +12 -0
  95. package/dist/mcp/tools/deactivate-behavior.js +4 -0
  96. package/dist/mcp/tools/list-reminders.js +4 -0
  97. package/dist/mcp/tools/list-tasks.js +4 -0
  98. package/dist/mcp/tools/send-message.js +4 -0
  99. package/dist/mcp/tools/update-task.js +12 -0
  100. package/dist/runtime/index.js +24 -0
  101. package/dist/tui/App.js +24 -0
  102. package/package.json +3 -2
  103. package/src/commands/exe/cloud.md +15 -8
  104. package/src/commands/exe/link.md +7 -6
  105. package/stack.release.json +2 -2
@@ -99,6 +99,10 @@ var init_config = __esm({
99
99
  checkOnBoot: true,
100
100
  autoInstall: false,
101
101
  checkIntervalMs: 24 * 60 * 60 * 1e3
102
+ },
103
+ orchestration: {
104
+ phase: "phase_1_coo",
105
+ phaseSetBy: "default"
102
106
  }
103
107
  };
104
108
  }
@@ -99,6 +99,10 @@ var init_config = __esm({
99
99
  checkOnBoot: true,
100
100
  autoInstall: false,
101
101
  checkIntervalMs: 24 * 60 * 60 * 1e3
102
+ },
103
+ orchestration: {
104
+ phase: "phase_1_coo",
105
+ phaseSetBy: "default"
102
106
  }
103
107
  };
104
108
  }
@@ -156,6 +156,11 @@ function normalizeAutoUpdate(raw) {
156
156
  const userAU = raw.autoUpdate ?? {};
157
157
  raw.autoUpdate = { ...defaultAU, ...userAU };
158
158
  }
159
+ function normalizeOrchestration(raw) {
160
+ const defaultOrg = DEFAULT_CONFIG.orchestration;
161
+ const userOrg = raw.orchestration ?? {};
162
+ raw.orchestration = { ...defaultOrg, ...userOrg };
163
+ }
159
164
  async function loadConfig() {
160
165
  const dir = process.env.EXE_OS_DIR ?? process.env.EXE_MEM_DIR ?? EXE_AI_DIR;
161
166
  await ensurePrivateDir(dir);
@@ -180,6 +185,7 @@ async function loadConfig() {
180
185
  normalizeScalingRoadmap(migratedCfg);
181
186
  normalizeSessionLifecycle(migratedCfg);
182
187
  normalizeAutoUpdate(migratedCfg);
188
+ normalizeOrchestration(migratedCfg);
183
189
  const config = { ...DEFAULT_CONFIG, dbPath: path.join(dir, "memories.db"), ...migratedCfg };
184
190
  if (config.dbPath.startsWith("~")) {
185
191
  config.dbPath = config.dbPath.replace(/^~/, os.homedir());
@@ -203,6 +209,7 @@ function loadConfigSync() {
203
209
  normalizeScalingRoadmap(migratedCfg);
204
210
  normalizeSessionLifecycle(migratedCfg);
205
211
  normalizeAutoUpdate(migratedCfg);
212
+ normalizeOrchestration(migratedCfg);
206
213
  return { ...DEFAULT_CONFIG, dbPath: path.join(dir, "memories.db"), ...migratedCfg };
207
214
  } catch {
208
215
  return { ...DEFAULT_CONFIG, dbPath: path.join(dir, "memories.db") };
@@ -224,6 +231,7 @@ async function loadConfigFrom(configPath) {
224
231
  normalizeScalingRoadmap(migratedCfg);
225
232
  normalizeSessionLifecycle(migratedCfg);
226
233
  normalizeAutoUpdate(migratedCfg);
234
+ normalizeOrchestration(migratedCfg);
227
235
  return { ...DEFAULT_CONFIG, ...migratedCfg };
228
236
  } catch {
229
237
  return { ...DEFAULT_CONFIG };
@@ -295,6 +303,10 @@ var init_config = __esm({
295
303
  checkOnBoot: true,
296
304
  autoInstall: false,
297
305
  checkIntervalMs: 24 * 60 * 60 * 1e3
306
+ },
307
+ orchestration: {
308
+ phase: "phase_1_coo",
309
+ phaseSetBy: "default"
298
310
  }
299
311
  };
300
312
  CONFIG_MIGRATIONS = [
@@ -99,6 +99,10 @@ var init_config = __esm({
99
99
  checkOnBoot: true,
100
100
  autoInstall: false,
101
101
  checkIntervalMs: 24 * 60 * 60 * 1e3
102
+ },
103
+ orchestration: {
104
+ phase: "phase_1_coo",
105
+ phaseSetBy: "default"
102
106
  }
103
107
  };
104
108
  }
@@ -99,6 +99,10 @@ var init_config = __esm({
99
99
  checkOnBoot: true,
100
100
  autoInstall: false,
101
101
  checkIntervalMs: 24 * 60 * 60 * 1e3
102
+ },
103
+ orchestration: {
104
+ phase: "phase_1_coo",
105
+ phaseSetBy: "default"
102
106
  }
103
107
  };
104
108
  }
@@ -122,6 +122,10 @@ var init_config = __esm({
122
122
  checkOnBoot: true,
123
123
  autoInstall: false,
124
124
  checkIntervalMs: 24 * 60 * 60 * 1e3
125
+ },
126
+ orchestration: {
127
+ phase: "phase_1_coo",
128
+ phaseSetBy: "default"
125
129
  }
126
130
  };
127
131
  }
@@ -122,6 +122,10 @@ var init_config = __esm({
122
122
  checkOnBoot: true,
123
123
  autoInstall: false,
124
124
  checkIntervalMs: 24 * 60 * 60 * 1e3
125
+ },
126
+ orchestration: {
127
+ phase: "phase_1_coo",
128
+ phaseSetBy: "default"
125
129
  }
126
130
  };
127
131
  }
@@ -156,6 +156,11 @@ function normalizeAutoUpdate(raw) {
156
156
  const userAU = raw.autoUpdate ?? {};
157
157
  raw.autoUpdate = { ...defaultAU, ...userAU };
158
158
  }
159
+ function normalizeOrchestration(raw) {
160
+ const defaultOrg = DEFAULT_CONFIG.orchestration;
161
+ const userOrg = raw.orchestration ?? {};
162
+ raw.orchestration = { ...defaultOrg, ...userOrg };
163
+ }
159
164
  async function loadConfig() {
160
165
  const dir = process.env.EXE_OS_DIR ?? process.env.EXE_MEM_DIR ?? EXE_AI_DIR;
161
166
  await ensurePrivateDir(dir);
@@ -180,6 +185,7 @@ async function loadConfig() {
180
185
  normalizeScalingRoadmap(migratedCfg);
181
186
  normalizeSessionLifecycle(migratedCfg);
182
187
  normalizeAutoUpdate(migratedCfg);
188
+ normalizeOrchestration(migratedCfg);
183
189
  const config = { ...DEFAULT_CONFIG, dbPath: path.join(dir, "memories.db"), ...migratedCfg };
184
190
  if (config.dbPath.startsWith("~")) {
185
191
  config.dbPath = config.dbPath.replace(/^~/, os.homedir());
@@ -203,6 +209,7 @@ function loadConfigSync() {
203
209
  normalizeScalingRoadmap(migratedCfg);
204
210
  normalizeSessionLifecycle(migratedCfg);
205
211
  normalizeAutoUpdate(migratedCfg);
212
+ normalizeOrchestration(migratedCfg);
206
213
  return { ...DEFAULT_CONFIG, dbPath: path.join(dir, "memories.db"), ...migratedCfg };
207
214
  } catch {
208
215
  return { ...DEFAULT_CONFIG, dbPath: path.join(dir, "memories.db") };
@@ -224,6 +231,7 @@ async function loadConfigFrom(configPath) {
224
231
  normalizeScalingRoadmap(migratedCfg);
225
232
  normalizeSessionLifecycle(migratedCfg);
226
233
  normalizeAutoUpdate(migratedCfg);
234
+ normalizeOrchestration(migratedCfg);
227
235
  return { ...DEFAULT_CONFIG, ...migratedCfg };
228
236
  } catch {
229
237
  return { ...DEFAULT_CONFIG };
@@ -295,6 +303,10 @@ var init_config = __esm({
295
303
  checkOnBoot: true,
296
304
  autoInstall: false,
297
305
  checkIntervalMs: 24 * 60 * 60 * 1e3
306
+ },
307
+ orchestration: {
308
+ phase: "phase_1_coo",
309
+ phaseSetBy: "default"
298
310
  }
299
311
  };
300
312
  CONFIG_MIGRATIONS = [
@@ -149,6 +149,11 @@ function normalizeAutoUpdate(raw) {
149
149
  const userAU = raw.autoUpdate ?? {};
150
150
  raw.autoUpdate = { ...defaultAU, ...userAU };
151
151
  }
152
+ function normalizeOrchestration(raw) {
153
+ const defaultOrg = DEFAULT_CONFIG.orchestration;
154
+ const userOrg = raw.orchestration ?? {};
155
+ raw.orchestration = { ...defaultOrg, ...userOrg };
156
+ }
152
157
  async function loadConfig() {
153
158
  const dir = process.env.EXE_OS_DIR ?? process.env.EXE_MEM_DIR ?? EXE_AI_DIR;
154
159
  await ensurePrivateDir(dir);
@@ -173,6 +178,7 @@ async function loadConfig() {
173
178
  normalizeScalingRoadmap(migratedCfg);
174
179
  normalizeSessionLifecycle(migratedCfg);
175
180
  normalizeAutoUpdate(migratedCfg);
181
+ normalizeOrchestration(migratedCfg);
176
182
  const config = { ...DEFAULT_CONFIG, dbPath: path2.join(dir, "memories.db"), ...migratedCfg };
177
183
  if (config.dbPath.startsWith("~")) {
178
184
  config.dbPath = config.dbPath.replace(/^~/, os2.homedir());
@@ -196,6 +202,7 @@ function loadConfigSync() {
196
202
  normalizeScalingRoadmap(migratedCfg);
197
203
  normalizeSessionLifecycle(migratedCfg);
198
204
  normalizeAutoUpdate(migratedCfg);
205
+ normalizeOrchestration(migratedCfg);
199
206
  return { ...DEFAULT_CONFIG, dbPath: path2.join(dir, "memories.db"), ...migratedCfg };
200
207
  } catch {
201
208
  return { ...DEFAULT_CONFIG, dbPath: path2.join(dir, "memories.db") };
@@ -217,6 +224,7 @@ async function loadConfigFrom(configPath) {
217
224
  normalizeScalingRoadmap(migratedCfg);
218
225
  normalizeSessionLifecycle(migratedCfg);
219
226
  normalizeAutoUpdate(migratedCfg);
227
+ normalizeOrchestration(migratedCfg);
220
228
  return { ...DEFAULT_CONFIG, ...migratedCfg };
221
229
  } catch {
222
230
  return { ...DEFAULT_CONFIG };
@@ -288,6 +296,10 @@ var init_config = __esm({
288
296
  checkOnBoot: true,
289
297
  autoInstall: false,
290
298
  checkIntervalMs: 24 * 60 * 60 * 1e3
299
+ },
300
+ orchestration: {
301
+ phase: "phase_1_coo",
302
+ phaseSetBy: "default"
291
303
  }
292
304
  };
293
305
  CONFIG_MIGRATIONS = [
@@ -7651,6 +7663,12 @@ var init_platform_procedures = __esm({
7651
7663
  priority: "p0",
7652
7664
  content: "Founder -> coordinator (the executive agent, internally routed as 'COO') -> CTO/CMO. CTO -> engineers. CMO -> content production. Never skip levels: the coordinator does not bypass managers for specialist work. Specialists report to their manager. If you need cross-team info, use ask_team_memory \u2014 don't read other agents' task folders. Each level owns dispatch downward and review upward."
7653
7665
  },
7666
+ {
7667
+ title: "Customer orchestration maturity \u2014 recommend, never trap",
7668
+ domain: "workflow",
7669
+ priority: "p1",
7670
+ content: "New customers start best in Phase 1: founder \u2194 coordinator/Chief of Staff, building company context. Suggest Phase 2 executives when domain work repeats; suggest Phase 3 parallel execution only when review/permission gates are ready. This is guidance, not a blocker: users may jump phases anytime. Never overwrite their phase, role titles, identities, or custom org design."
7671
+ },
7654
7672
  {
7655
7673
  title: "Single dispatch path \u2014 create_task only",
7656
7674
  domain: "workflow",
@@ -7709,6 +7727,12 @@ var init_platform_procedures = __esm({
7709
7727
  priority: "p0",
7710
7728
  content: "exe-build-adv is MANDATORY for ALL work touching 3+ files. Run /exe-build-adv --auto BEFORE implementation. Pipeline: Spec \u2192 AC \u2192 Tests \u2192 Evaluate \u2192 Fix. No multi-file feature ships without pipeline artifacts. No exceptions \u2014 managers reject work without them."
7711
7729
  },
7730
+ {
7731
+ title: "Commit discipline \u2014 never leave verified work floating",
7732
+ domain: "workflow",
7733
+ priority: "p1",
7734
+ content: "After any code-change batch passes typecheck/tests/build, run git status, summarize changed files, and commit with a clear message before ending the session. If work must remain uncommitted for review/dogfood, explicitly say so, list the files, and state the blocker. Never imply work is complete while verified changes are still floating locally."
7735
+ },
7712
7736
  {
7713
7737
  title: "Desktop and TUI are the same product",
7714
7738
  domain: "architecture",
package/dist/tui/App.js CHANGED
@@ -500,6 +500,11 @@ function normalizeAutoUpdate(raw) {
500
500
  const userAU = raw.autoUpdate ?? {};
501
501
  raw.autoUpdate = { ...defaultAU, ...userAU };
502
502
  }
503
+ function normalizeOrchestration(raw) {
504
+ const defaultOrg = DEFAULT_CONFIG.orchestration;
505
+ const userOrg = raw.orchestration ?? {};
506
+ raw.orchestration = { ...defaultOrg, ...userOrg };
507
+ }
503
508
  async function loadConfig() {
504
509
  const dir = process.env.EXE_OS_DIR ?? process.env.EXE_MEM_DIR ?? EXE_AI_DIR;
505
510
  await ensurePrivateDir(dir);
@@ -524,6 +529,7 @@ async function loadConfig() {
524
529
  normalizeScalingRoadmap(migratedCfg);
525
530
  normalizeSessionLifecycle(migratedCfg);
526
531
  normalizeAutoUpdate(migratedCfg);
532
+ normalizeOrchestration(migratedCfg);
527
533
  const config = { ...DEFAULT_CONFIG, dbPath: path2.join(dir, "memories.db"), ...migratedCfg };
528
534
  if (config.dbPath.startsWith("~")) {
529
535
  config.dbPath = config.dbPath.replace(/^~/, os2.homedir());
@@ -547,6 +553,7 @@ function loadConfigSync() {
547
553
  normalizeScalingRoadmap(migratedCfg);
548
554
  normalizeSessionLifecycle(migratedCfg);
549
555
  normalizeAutoUpdate(migratedCfg);
556
+ normalizeOrchestration(migratedCfg);
550
557
  return { ...DEFAULT_CONFIG, dbPath: path2.join(dir, "memories.db"), ...migratedCfg };
551
558
  } catch {
552
559
  return { ...DEFAULT_CONFIG, dbPath: path2.join(dir, "memories.db") };
@@ -568,6 +575,7 @@ async function loadConfigFrom(configPath) {
568
575
  normalizeScalingRoadmap(migratedCfg);
569
576
  normalizeSessionLifecycle(migratedCfg);
570
577
  normalizeAutoUpdate(migratedCfg);
578
+ normalizeOrchestration(migratedCfg);
571
579
  return { ...DEFAULT_CONFIG, ...migratedCfg };
572
580
  } catch {
573
581
  return { ...DEFAULT_CONFIG };
@@ -639,6 +647,10 @@ var init_config = __esm({
639
647
  checkOnBoot: true,
640
648
  autoInstall: false,
641
649
  checkIntervalMs: 24 * 60 * 60 * 1e3
650
+ },
651
+ orchestration: {
652
+ phase: "phase_1_coo",
653
+ phaseSetBy: "default"
642
654
  }
643
655
  };
644
656
  CONFIG_MIGRATIONS = [
@@ -8707,6 +8719,12 @@ var init_platform_procedures = __esm({
8707
8719
  priority: "p0",
8708
8720
  content: "Founder -> coordinator (the executive agent, internally routed as 'COO') -> CTO/CMO. CTO -> engineers. CMO -> content production. Never skip levels: the coordinator does not bypass managers for specialist work. Specialists report to their manager. If you need cross-team info, use ask_team_memory \u2014 don't read other agents' task folders. Each level owns dispatch downward and review upward."
8709
8721
  },
8722
+ {
8723
+ title: "Customer orchestration maturity \u2014 recommend, never trap",
8724
+ domain: "workflow",
8725
+ priority: "p1",
8726
+ content: "New customers start best in Phase 1: founder \u2194 coordinator/Chief of Staff, building company context. Suggest Phase 2 executives when domain work repeats; suggest Phase 3 parallel execution only when review/permission gates are ready. This is guidance, not a blocker: users may jump phases anytime. Never overwrite their phase, role titles, identities, or custom org design."
8727
+ },
8710
8728
  {
8711
8729
  title: "Single dispatch path \u2014 create_task only",
8712
8730
  domain: "workflow",
@@ -8765,6 +8783,12 @@ var init_platform_procedures = __esm({
8765
8783
  priority: "p0",
8766
8784
  content: "exe-build-adv is MANDATORY for ALL work touching 3+ files. Run /exe-build-adv --auto BEFORE implementation. Pipeline: Spec \u2192 AC \u2192 Tests \u2192 Evaluate \u2192 Fix. No multi-file feature ships without pipeline artifacts. No exceptions \u2014 managers reject work without them."
8767
8785
  },
8786
+ {
8787
+ title: "Commit discipline \u2014 never leave verified work floating",
8788
+ domain: "workflow",
8789
+ priority: "p1",
8790
+ content: "After any code-change batch passes typecheck/tests/build, run git status, summarize changed files, and commit with a clear message before ending the session. If work must remain uncommitted for review/dogfood, explicitly say so, list the files, and state the blocker. Never imply work is complete while verified changes are still floating locally."
8791
+ },
8768
8792
  {
8769
8793
  title: "Desktop and TUI are the same product",
8770
8794
  domain: "architecture",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@askexenow/exe-os",
3
- "version": "0.9.64",
3
+ "version": "0.9.66",
4
4
  "description": "AI employee operating system — persistent memory, task management, and multi-agent coordination for Claude Code.",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "type": "module",
@@ -45,7 +45,8 @@
45
45
  "customer-readiness": "./dist/bin/customer-readiness.js",
46
46
  "exe-healthcheck": "./dist/bin/exe-healthcheck.js",
47
47
  "exe-doctor": "./dist/bin/exe-doctor.js",
48
- "exe-stack-update": "./dist/bin/stack-update.js"
48
+ "exe-stack-update": "./dist/bin/stack-update.js",
49
+ "exe-cloud": "./dist/bin/exe-cloud.js"
49
50
  },
50
51
  "files": [
51
52
  "dist",
@@ -1,17 +1,24 @@
1
1
  ---
2
- description: Set up cloud sync link device encryption key and configure Exe Cloud
2
+ description: Set up cloud sync, link a device, or run Exe Cloud sync
3
3
  allowed-tools: Bash
4
- argument-hint: [sync|status]
4
+ argument-hint: [link|status|sync|relink]
5
5
  ---
6
6
 
7
- One command to link a device and enable cloud sync.
7
+ One customer-facing command family for Exe Cloud.
8
8
 
9
- - `/exe-cloud` — full interactive setup (import encryption key + configure cloud API)
10
- - `/exe-cloud sync` — export mnemonic + cloud config for pasting on a new device
11
- - `/exe-cloud status` — show current sync status and key fingerprint
9
+ - `/exe-cloud` — full interactive setup: import/create key if needed, configure cloud API, register device, and start syncing.
10
+ - `/exe-cloud status` — read-only check of key/cloud status and endpoint.
11
+ - `/exe-cloud link` — link another device: show recovery phrase + cloud info; linked devices should sync automatically after setup.
12
+ - `/exe-cloud sync` — manual “sync now”: pull + push memories, tasks, roster, behaviors, docs, and graph data.
13
+ - `/exe-cloud relink` — guided post-key-rotation cloud repair: confirm phrase backup and reupload local DB as source of truth.
14
+ - `/exe-cloud relink --dry-run` — show the relink checklist without changing anything.
12
15
 
13
16
  ```bash
14
- node "$(npm root -g)/@askexenow/exe-os/dist/bin/exe-cloud.js" $ARGUMENTS
17
+ if [ "$ARGUMENTS" = "sync" ]; then
18
+ exe-os cloud sync
19
+ else
20
+ node "$(npm root -g)/@askexenow/exe-os/dist/bin/exe-cloud.js" $ARGUMENTS
21
+ fi
15
22
  ```
16
23
 
17
- **Note:** `/exe-link` is deprecated. Use `/exe-cloud` instead.
24
+ **Note:** `/exe-link` is deprecated. Use `/exe-cloud link` for recovery phrase export/import flow.
@@ -1,14 +1,15 @@
1
1
  ---
2
- description: Link another device by exporting or importing your encryption key
2
+ description: Deprecated legacy recovery-key command
3
3
  allowed-tools: Bash
4
- argument-hint: [export|import]
4
+ argument-hint: [status|export|import]
5
5
  ---
6
6
 
7
- **Deprecated:** Use `/exe-cloud` instead — it handles key import AND cloud sync in one step.
7
+ **Deprecated:** Use `/exe-cloud` instead.
8
8
 
9
- - `/exe-cloud` — full setup (key + cloud)
10
- - `/exe-cloud sync` — export everything for a new device
11
- - `/exe-cloud status` — check sync status
9
+ - `/exe-cloud` — full setup: key + cloud + device registration.
10
+ - `/exe-cloud status` — read-only check of sync/key/cloud status.
11
+ - `/exe-cloud link` — link another device: recovery phrase + cloud config; linked devices sync automatically after setup.
12
+ - `/exe-cloud sync` — manual “sync now” for cloud data.
12
13
 
13
14
  Legacy command still works:
14
15
 
@@ -4,8 +4,8 @@
4
4
  "repo": "AskExe/exe-os",
5
5
  "service": "exed",
6
6
  "packageName": "@askexenow/exe-os",
7
- "version": "0.9.61",
8
- "image": "ghcr.io/askexe/exed:v0.9.61",
7
+ "version": "0.9.65",
8
+ "image": "ghcr.io/askexe/exed:v0.9.65",
9
9
  "imageEnv": "EXED_IMAGE_TAG",
10
10
  "stackParticipation": {
11
11
  "required": true,