@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
@@ -127,6 +127,10 @@ var init_config = __esm({
127
127
  checkOnBoot: true,
128
128
  autoInstall: false,
129
129
  checkIntervalMs: 24 * 60 * 60 * 1e3
130
+ },
131
+ orchestration: {
132
+ phase: "phase_1_coo",
133
+ phaseSetBy: "default"
130
134
  }
131
135
  };
132
136
  }
@@ -1264,7 +1268,7 @@ function commandHasAnyMarker(command, markers) {
1264
1268
  function isLegacySplitPostToolCommand(command) {
1265
1269
  return commandHasAnyMarker(command, LEGACY_SPLIT_POST_TOOL_HOOK_MARKERS);
1266
1270
  }
1267
- var EXE_HOOKS, LEGACY_SPLIT_POST_TOOL_HOOK_MARKERS;
1271
+ var EXE_HOOKS, EXE_HOOK_MANIFEST, LEGACY_SPLIT_POST_TOOL_HOOK_MARKERS;
1268
1272
  var init_runtime_hook_manifest = __esm({
1269
1273
  "src/adapters/runtime-hook-manifest.ts"() {
1270
1274
  "use strict";
@@ -1282,6 +1286,116 @@ var init_runtime_hook_manifest = __esm({
1282
1286
  notification: "dist/hooks/notification.js",
1283
1287
  instructionsLoaded: "dist/hooks/instructions-loaded.js"
1284
1288
  };
1289
+ EXE_HOOK_MANIFEST = [
1290
+ {
1291
+ key: "postToolCombined",
1292
+ event: "PostToolUse",
1293
+ commandMarker: EXE_HOOKS.postToolCombined,
1294
+ owner: "exe-os",
1295
+ purpose: "Single PostToolUse entrypoint for ingestion, error recall, summaries, and bug detection.",
1296
+ runtimes: ["claude", "codex", "opencode"],
1297
+ checkpointRole: "none"
1298
+ },
1299
+ {
1300
+ key: "sessionStart",
1301
+ event: "SessionStart",
1302
+ commandMarker: EXE_HOOKS.sessionStart,
1303
+ owner: "exe-os",
1304
+ purpose: "Loads agent identity, procedures, and boot context.",
1305
+ runtimes: ["claude", "codex", "opencode"],
1306
+ checkpointRole: "none"
1307
+ },
1308
+ {
1309
+ key: "promptSubmit",
1310
+ event: "UserPromptSubmit",
1311
+ commandMarker: EXE_HOOKS.promptSubmit,
1312
+ owner: "exe-os",
1313
+ purpose: "Injects current tasks, pending reviews, and local context before each prompt.",
1314
+ runtimes: ["claude", "codex", "opencode"],
1315
+ checkpointRole: "none"
1316
+ },
1317
+ {
1318
+ key: "heartbeat",
1319
+ event: "UserPromptSubmit",
1320
+ commandMarker: EXE_HOOKS.heartbeat,
1321
+ owner: "exe-os",
1322
+ purpose: "Lightweight heartbeat/status sidecar for Claude Code sessions.",
1323
+ runtimes: ["claude"],
1324
+ checkpointRole: "none"
1325
+ },
1326
+ {
1327
+ key: "stop",
1328
+ event: "Stop",
1329
+ commandMarker: EXE_HOOKS.stop,
1330
+ owner: "exe-os",
1331
+ purpose: "Finalizes task state, capacity signals, and emergency checkpointing.",
1332
+ runtimes: ["claude", "codex", "opencode"],
1333
+ checkpointRole: "capacity_checkpoint"
1334
+ },
1335
+ {
1336
+ key: "preToolUse",
1337
+ event: "PreToolUse",
1338
+ commandMarker: EXE_HOOKS.preToolUse,
1339
+ owner: "exe-os",
1340
+ purpose: "Preflight guardrails before shell/tool execution.",
1341
+ runtimes: ["claude", "codex", "opencode"],
1342
+ checkpointRole: "none"
1343
+ },
1344
+ {
1345
+ key: "subagentStop",
1346
+ event: "SubagentStop",
1347
+ commandMarker: EXE_HOOKS.subagentStop,
1348
+ owner: "exe-os",
1349
+ purpose: "Captures subagent completion context.",
1350
+ runtimes: ["claude"],
1351
+ checkpointRole: "none"
1352
+ },
1353
+ {
1354
+ key: "preCompact",
1355
+ event: "PreCompact",
1356
+ commandMarker: EXE_HOOKS.preCompact,
1357
+ owner: "exe-os",
1358
+ purpose: "Writes active-task snapshot and compaction recovery context.",
1359
+ runtimes: ["claude"],
1360
+ checkpointRole: "recovery_context"
1361
+ },
1362
+ {
1363
+ key: "postCompact",
1364
+ event: "PostCompact",
1365
+ commandMarker: EXE_HOOKS.postCompact,
1366
+ owner: "exe-os",
1367
+ purpose: "Rehydrates recovery context after compaction.",
1368
+ runtimes: ["claude"],
1369
+ checkpointRole: "recovery_context"
1370
+ },
1371
+ {
1372
+ key: "sessionEnd",
1373
+ event: "SessionEnd",
1374
+ commandMarker: EXE_HOOKS.sessionEnd,
1375
+ owner: "exe-os",
1376
+ purpose: "Stores session-end checkpoint and triages orphaned in-progress tasks.",
1377
+ runtimes: ["claude"],
1378
+ checkpointRole: "session_summary"
1379
+ },
1380
+ {
1381
+ key: "notification",
1382
+ event: "Notification",
1383
+ commandMarker: EXE_HOOKS.notification,
1384
+ owner: "exe-os",
1385
+ purpose: "Captures runtime notifications and nudges.",
1386
+ runtimes: ["claude"],
1387
+ checkpointRole: "none"
1388
+ },
1389
+ {
1390
+ key: "instructionsLoaded",
1391
+ event: "InstructionsLoaded",
1392
+ commandMarker: EXE_HOOKS.instructionsLoaded,
1393
+ owner: "exe-os",
1394
+ purpose: "Applies runtime instruction post-processing.",
1395
+ runtimes: ["claude"],
1396
+ checkpointRole: "none"
1397
+ }
1398
+ ];
1285
1399
  LEGACY_SPLIT_POST_TOOL_HOOK_MARKERS = [
1286
1400
  "dist/hooks/ingest.js",
1287
1401
  "dist/hooks/error-recall.js",
@@ -2428,6 +2542,12 @@ var PLATFORM_PROCEDURES = [
2428
2542
  priority: "p0",
2429
2543
  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."
2430
2544
  },
2545
+ {
2546
+ title: "Customer orchestration maturity \u2014 recommend, never trap",
2547
+ domain: "workflow",
2548
+ priority: "p1",
2549
+ 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."
2550
+ },
2431
2551
  {
2432
2552
  title: "Single dispatch path \u2014 create_task only",
2433
2553
  domain: "workflow",
@@ -2486,6 +2606,12 @@ var PLATFORM_PROCEDURES = [
2486
2606
  priority: "p0",
2487
2607
  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."
2488
2608
  },
2609
+ {
2610
+ title: "Commit discipline \u2014 never leave verified work floating",
2611
+ domain: "workflow",
2612
+ priority: "p1",
2613
+ 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."
2614
+ },
2489
2615
  {
2490
2616
  title: "Desktop and TUI are the same product",
2491
2617
  domain: "architecture",
@@ -189,6 +189,11 @@ function normalizeAutoUpdate(raw) {
189
189
  const userAU = raw.autoUpdate ?? {};
190
190
  raw.autoUpdate = { ...defaultAU, ...userAU };
191
191
  }
192
+ function normalizeOrchestration(raw) {
193
+ const defaultOrg = DEFAULT_CONFIG.orchestration;
194
+ const userOrg = raw.orchestration ?? {};
195
+ raw.orchestration = { ...defaultOrg, ...userOrg };
196
+ }
192
197
  async function loadConfig() {
193
198
  const dir = process.env.EXE_OS_DIR ?? process.env.EXE_MEM_DIR ?? EXE_AI_DIR;
194
199
  await ensurePrivateDir(dir);
@@ -213,6 +218,7 @@ async function loadConfig() {
213
218
  normalizeScalingRoadmap(migratedCfg);
214
219
  normalizeSessionLifecycle(migratedCfg);
215
220
  normalizeAutoUpdate(migratedCfg);
221
+ normalizeOrchestration(migratedCfg);
216
222
  const config = { ...DEFAULT_CONFIG, dbPath: path.join(dir, "memories.db"), ...migratedCfg };
217
223
  if (config.dbPath.startsWith("~")) {
218
224
  config.dbPath = config.dbPath.replace(/^~/, os.homedir());
@@ -288,6 +294,10 @@ var init_config = __esm({
288
294
  checkOnBoot: true,
289
295
  autoInstall: false,
290
296
  checkIntervalMs: 24 * 60 * 60 * 1e3
297
+ },
298
+ orchestration: {
299
+ phase: "phase_1_coo",
300
+ phaseSetBy: "default"
291
301
  }
292
302
  };
293
303
  CONFIG_MIGRATIONS = [
@@ -4275,6 +4285,12 @@ var init_platform_procedures = __esm({
4275
4285
  priority: "p0",
4276
4286
  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."
4277
4287
  },
4288
+ {
4289
+ title: "Customer orchestration maturity \u2014 recommend, never trap",
4290
+ domain: "workflow",
4291
+ priority: "p1",
4292
+ 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."
4293
+ },
4278
4294
  {
4279
4295
  title: "Single dispatch path \u2014 create_task only",
4280
4296
  domain: "workflow",
@@ -4333,6 +4349,12 @@ var init_platform_procedures = __esm({
4333
4349
  priority: "p0",
4334
4350
  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."
4335
4351
  },
4352
+ {
4353
+ title: "Commit discipline \u2014 never leave verified work floating",
4354
+ domain: "workflow",
4355
+ priority: "p1",
4356
+ 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."
4357
+ },
4336
4358
  {
4337
4359
  title: "Desktop and TUI are the same product",
4338
4360
  domain: "architecture",
@@ -190,6 +190,11 @@ function normalizeAutoUpdate(raw) {
190
190
  const userAU = raw.autoUpdate ?? {};
191
191
  raw.autoUpdate = { ...defaultAU, ...userAU };
192
192
  }
193
+ function normalizeOrchestration(raw) {
194
+ const defaultOrg = DEFAULT_CONFIG.orchestration;
195
+ const userOrg = raw.orchestration ?? {};
196
+ raw.orchestration = { ...defaultOrg, ...userOrg };
197
+ }
193
198
  async function loadConfig() {
194
199
  const dir = process.env.EXE_OS_DIR ?? process.env.EXE_MEM_DIR ?? EXE_AI_DIR;
195
200
  await ensurePrivateDir(dir);
@@ -214,6 +219,7 @@ async function loadConfig() {
214
219
  normalizeScalingRoadmap(migratedCfg);
215
220
  normalizeSessionLifecycle(migratedCfg);
216
221
  normalizeAutoUpdate(migratedCfg);
222
+ normalizeOrchestration(migratedCfg);
217
223
  const config = { ...DEFAULT_CONFIG, dbPath: path.join(dir, "memories.db"), ...migratedCfg };
218
224
  if (config.dbPath.startsWith("~")) {
219
225
  config.dbPath = config.dbPath.replace(/^~/, os.homedir());
@@ -289,6 +295,10 @@ var init_config = __esm({
289
295
  checkOnBoot: true,
290
296
  autoInstall: false,
291
297
  checkIntervalMs: 24 * 60 * 60 * 1e3
298
+ },
299
+ orchestration: {
300
+ phase: "phase_1_coo",
301
+ phaseSetBy: "default"
292
302
  }
293
303
  };
294
304
  CONFIG_MIGRATIONS = [
@@ -4341,6 +4351,12 @@ var init_platform_procedures = __esm({
4341
4351
  priority: "p0",
4342
4352
  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."
4343
4353
  },
4354
+ {
4355
+ title: "Customer orchestration maturity \u2014 recommend, never trap",
4356
+ domain: "workflow",
4357
+ priority: "p1",
4358
+ 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."
4359
+ },
4344
4360
  {
4345
4361
  title: "Single dispatch path \u2014 create_task only",
4346
4362
  domain: "workflow",
@@ -4399,6 +4415,12 @@ var init_platform_procedures = __esm({
4399
4415
  priority: "p0",
4400
4416
  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."
4401
4417
  },
4418
+ {
4419
+ title: "Commit discipline \u2014 never leave verified work floating",
4420
+ domain: "workflow",
4421
+ priority: "p1",
4422
+ 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."
4423
+ },
4402
4424
  {
4403
4425
  title: "Desktop and TUI are the same product",
4404
4426
  domain: "architecture",
@@ -190,6 +190,11 @@ function normalizeAutoUpdate(raw) {
190
190
  const userAU = raw.autoUpdate ?? {};
191
191
  raw.autoUpdate = { ...defaultAU, ...userAU };
192
192
  }
193
+ function normalizeOrchestration(raw) {
194
+ const defaultOrg = DEFAULT_CONFIG.orchestration;
195
+ const userOrg = raw.orchestration ?? {};
196
+ raw.orchestration = { ...defaultOrg, ...userOrg };
197
+ }
193
198
  async function loadConfig() {
194
199
  const dir = process.env.EXE_OS_DIR ?? process.env.EXE_MEM_DIR ?? EXE_AI_DIR;
195
200
  await ensurePrivateDir(dir);
@@ -214,6 +219,7 @@ async function loadConfig() {
214
219
  normalizeScalingRoadmap(migratedCfg);
215
220
  normalizeSessionLifecycle(migratedCfg);
216
221
  normalizeAutoUpdate(migratedCfg);
222
+ normalizeOrchestration(migratedCfg);
217
223
  const config = { ...DEFAULT_CONFIG, dbPath: path.join(dir, "memories.db"), ...migratedCfg };
218
224
  if (config.dbPath.startsWith("~")) {
219
225
  config.dbPath = config.dbPath.replace(/^~/, os.homedir());
@@ -289,6 +295,10 @@ var init_config = __esm({
289
295
  checkOnBoot: true,
290
296
  autoInstall: false,
291
297
  checkIntervalMs: 24 * 60 * 60 * 1e3
298
+ },
299
+ orchestration: {
300
+ phase: "phase_1_coo",
301
+ phaseSetBy: "default"
292
302
  }
293
303
  };
294
304
  CONFIG_MIGRATIONS = [
@@ -4380,6 +4390,12 @@ var init_platform_procedures = __esm({
4380
4390
  priority: "p0",
4381
4391
  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."
4382
4392
  },
4393
+ {
4394
+ title: "Customer orchestration maturity \u2014 recommend, never trap",
4395
+ domain: "workflow",
4396
+ priority: "p1",
4397
+ 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."
4398
+ },
4383
4399
  {
4384
4400
  title: "Single dispatch path \u2014 create_task only",
4385
4401
  domain: "workflow",
@@ -4438,6 +4454,12 @@ var init_platform_procedures = __esm({
4438
4454
  priority: "p0",
4439
4455
  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."
4440
4456
  },
4457
+ {
4458
+ title: "Commit discipline \u2014 never leave verified work floating",
4459
+ domain: "workflow",
4460
+ priority: "p1",
4461
+ 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."
4462
+ },
4441
4463
  {
4442
4464
  title: "Desktop and TUI are the same product",
4443
4465
  domain: "architecture",
@@ -124,6 +124,11 @@ function normalizeAutoUpdate(raw) {
124
124
  const userAU = raw.autoUpdate ?? {};
125
125
  raw.autoUpdate = { ...defaultAU, ...userAU };
126
126
  }
127
+ function normalizeOrchestration(raw) {
128
+ const defaultOrg = DEFAULT_CONFIG.orchestration;
129
+ const userOrg = raw.orchestration ?? {};
130
+ raw.orchestration = { ...defaultOrg, ...userOrg };
131
+ }
127
132
  async function loadConfig() {
128
133
  const dir = process.env.EXE_OS_DIR ?? process.env.EXE_MEM_DIR ?? EXE_AI_DIR;
129
134
  await ensurePrivateDir(dir);
@@ -148,6 +153,7 @@ async function loadConfig() {
148
153
  normalizeScalingRoadmap(migratedCfg);
149
154
  normalizeSessionLifecycle(migratedCfg);
150
155
  normalizeAutoUpdate(migratedCfg);
156
+ normalizeOrchestration(migratedCfg);
151
157
  const config = { ...DEFAULT_CONFIG, dbPath: path.join(dir, "memories.db"), ...migratedCfg };
152
158
  if (config.dbPath.startsWith("~")) {
153
159
  config.dbPath = config.dbPath.replace(/^~/, os.homedir());
@@ -223,6 +229,10 @@ var init_config = __esm({
223
229
  checkOnBoot: true,
224
230
  autoInstall: false,
225
231
  checkIntervalMs: 24 * 60 * 60 * 1e3
232
+ },
233
+ orchestration: {
234
+ phase: "phase_1_coo",
235
+ phaseSetBy: "default"
226
236
  }
227
237
  };
228
238
  CONFIG_MIGRATIONS = [
@@ -2806,6 +2816,12 @@ var init_platform_procedures = __esm({
2806
2816
  priority: "p0",
2807
2817
  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."
2808
2818
  },
2819
+ {
2820
+ title: "Customer orchestration maturity \u2014 recommend, never trap",
2821
+ domain: "workflow",
2822
+ priority: "p1",
2823
+ 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."
2824
+ },
2809
2825
  {
2810
2826
  title: "Single dispatch path \u2014 create_task only",
2811
2827
  domain: "workflow",
@@ -2864,6 +2880,12 @@ var init_platform_procedures = __esm({
2864
2880
  priority: "p0",
2865
2881
  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."
2866
2882
  },
2883
+ {
2884
+ title: "Commit discipline \u2014 never leave verified work floating",
2885
+ domain: "workflow",
2886
+ priority: "p1",
2887
+ 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."
2888
+ },
2867
2889
  {
2868
2890
  title: "Desktop and TUI are the same product",
2869
2891
  domain: "architecture",
@@ -124,6 +124,11 @@ function normalizeAutoUpdate(raw) {
124
124
  const userAU = raw.autoUpdate ?? {};
125
125
  raw.autoUpdate = { ...defaultAU, ...userAU };
126
126
  }
127
+ function normalizeOrchestration(raw) {
128
+ const defaultOrg = DEFAULT_CONFIG.orchestration;
129
+ const userOrg = raw.orchestration ?? {};
130
+ raw.orchestration = { ...defaultOrg, ...userOrg };
131
+ }
127
132
  async function loadConfig() {
128
133
  const dir = process.env.EXE_OS_DIR ?? process.env.EXE_MEM_DIR ?? EXE_AI_DIR;
129
134
  await ensurePrivateDir(dir);
@@ -148,6 +153,7 @@ async function loadConfig() {
148
153
  normalizeScalingRoadmap(migratedCfg);
149
154
  normalizeSessionLifecycle(migratedCfg);
150
155
  normalizeAutoUpdate(migratedCfg);
156
+ normalizeOrchestration(migratedCfg);
151
157
  const config = { ...DEFAULT_CONFIG, dbPath: path.join(dir, "memories.db"), ...migratedCfg };
152
158
  if (config.dbPath.startsWith("~")) {
153
159
  config.dbPath = config.dbPath.replace(/^~/, os.homedir());
@@ -223,6 +229,10 @@ var init_config = __esm({
223
229
  checkOnBoot: true,
224
230
  autoInstall: false,
225
231
  checkIntervalMs: 24 * 60 * 60 * 1e3
232
+ },
233
+ orchestration: {
234
+ phase: "phase_1_coo",
235
+ phaseSetBy: "default"
226
236
  }
227
237
  };
228
238
  CONFIG_MIGRATIONS = [
@@ -3852,6 +3862,12 @@ var init_platform_procedures = __esm({
3852
3862
  priority: "p0",
3853
3863
  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."
3854
3864
  },
3865
+ {
3866
+ title: "Customer orchestration maturity \u2014 recommend, never trap",
3867
+ domain: "workflow",
3868
+ priority: "p1",
3869
+ 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."
3870
+ },
3855
3871
  {
3856
3872
  title: "Single dispatch path \u2014 create_task only",
3857
3873
  domain: "workflow",
@@ -3910,6 +3926,12 @@ var init_platform_procedures = __esm({
3910
3926
  priority: "p0",
3911
3927
  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."
3912
3928
  },
3929
+ {
3930
+ title: "Commit discipline \u2014 never leave verified work floating",
3931
+ domain: "workflow",
3932
+ priority: "p1",
3933
+ 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."
3934
+ },
3913
3935
  {
3914
3936
  title: "Desktop and TUI are the same product",
3915
3937
  domain: "architecture",
@@ -203,6 +203,11 @@ function normalizeAutoUpdate(raw) {
203
203
  const userAU = raw.autoUpdate ?? {};
204
204
  raw.autoUpdate = { ...defaultAU, ...userAU };
205
205
  }
206
+ function normalizeOrchestration(raw) {
207
+ const defaultOrg = DEFAULT_CONFIG.orchestration;
208
+ const userOrg = raw.orchestration ?? {};
209
+ raw.orchestration = { ...defaultOrg, ...userOrg };
210
+ }
206
211
  async function loadConfig() {
207
212
  const dir = process.env.EXE_OS_DIR ?? process.env.EXE_MEM_DIR ?? EXE_AI_DIR;
208
213
  await ensurePrivateDir(dir);
@@ -227,6 +232,7 @@ async function loadConfig() {
227
232
  normalizeScalingRoadmap(migratedCfg);
228
233
  normalizeSessionLifecycle(migratedCfg);
229
234
  normalizeAutoUpdate(migratedCfg);
235
+ normalizeOrchestration(migratedCfg);
230
236
  const config = { ...DEFAULT_CONFIG, dbPath: path.join(dir, "memories.db"), ...migratedCfg };
231
237
  if (config.dbPath.startsWith("~")) {
232
238
  config.dbPath = config.dbPath.replace(/^~/, os.homedir());
@@ -250,6 +256,7 @@ function loadConfigSync() {
250
256
  normalizeScalingRoadmap(migratedCfg);
251
257
  normalizeSessionLifecycle(migratedCfg);
252
258
  normalizeAutoUpdate(migratedCfg);
259
+ normalizeOrchestration(migratedCfg);
253
260
  return { ...DEFAULT_CONFIG, dbPath: path.join(dir, "memories.db"), ...migratedCfg };
254
261
  } catch {
255
262
  return { ...DEFAULT_CONFIG, dbPath: path.join(dir, "memories.db") };
@@ -271,6 +278,7 @@ async function loadConfigFrom(configPath) {
271
278
  normalizeScalingRoadmap(migratedCfg);
272
279
  normalizeSessionLifecycle(migratedCfg);
273
280
  normalizeAutoUpdate(migratedCfg);
281
+ normalizeOrchestration(migratedCfg);
274
282
  return { ...DEFAULT_CONFIG, ...migratedCfg };
275
283
  } catch {
276
284
  return { ...DEFAULT_CONFIG };
@@ -342,6 +350,10 @@ var init_config = __esm({
342
350
  checkOnBoot: true,
343
351
  autoInstall: false,
344
352
  checkIntervalMs: 24 * 60 * 60 * 1e3
353
+ },
354
+ orchestration: {
355
+ phase: "phase_1_coo",
356
+ phaseSetBy: "default"
345
357
  }
346
358
  };
347
359
  CONFIG_MIGRATIONS = [
@@ -3827,6 +3839,12 @@ var init_platform_procedures = __esm({
3827
3839
  priority: "p0",
3828
3840
  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."
3829
3841
  },
3842
+ {
3843
+ title: "Customer orchestration maturity \u2014 recommend, never trap",
3844
+ domain: "workflow",
3845
+ priority: "p1",
3846
+ 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."
3847
+ },
3830
3848
  {
3831
3849
  title: "Single dispatch path \u2014 create_task only",
3832
3850
  domain: "workflow",
@@ -3885,6 +3903,12 @@ var init_platform_procedures = __esm({
3885
3903
  priority: "p0",
3886
3904
  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."
3887
3905
  },
3906
+ {
3907
+ title: "Commit discipline \u2014 never leave verified work floating",
3908
+ domain: "workflow",
3909
+ priority: "p1",
3910
+ 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."
3911
+ },
3888
3912
  {
3889
3913
  title: "Desktop and TUI are the same product",
3890
3914
  domain: "architecture",
@@ -214,6 +214,11 @@ function normalizeAutoUpdate(raw) {
214
214
  const userAU = raw.autoUpdate ?? {};
215
215
  raw.autoUpdate = { ...defaultAU, ...userAU };
216
216
  }
217
+ function normalizeOrchestration(raw) {
218
+ const defaultOrg = DEFAULT_CONFIG.orchestration;
219
+ const userOrg = raw.orchestration ?? {};
220
+ raw.orchestration = { ...defaultOrg, ...userOrg };
221
+ }
217
222
  async function loadConfig() {
218
223
  const dir = process.env.EXE_OS_DIR ?? process.env.EXE_MEM_DIR ?? EXE_AI_DIR;
219
224
  await ensurePrivateDir(dir);
@@ -238,6 +243,7 @@ async function loadConfig() {
238
243
  normalizeScalingRoadmap(migratedCfg);
239
244
  normalizeSessionLifecycle(migratedCfg);
240
245
  normalizeAutoUpdate(migratedCfg);
246
+ normalizeOrchestration(migratedCfg);
241
247
  const config = { ...DEFAULT_CONFIG, dbPath: path.join(dir, "memories.db"), ...migratedCfg };
242
248
  if (config.dbPath.startsWith("~")) {
243
249
  config.dbPath = config.dbPath.replace(/^~/, os.homedir());
@@ -261,6 +267,7 @@ function loadConfigSync() {
261
267
  normalizeScalingRoadmap(migratedCfg);
262
268
  normalizeSessionLifecycle(migratedCfg);
263
269
  normalizeAutoUpdate(migratedCfg);
270
+ normalizeOrchestration(migratedCfg);
264
271
  return { ...DEFAULT_CONFIG, dbPath: path.join(dir, "memories.db"), ...migratedCfg };
265
272
  } catch {
266
273
  return { ...DEFAULT_CONFIG, dbPath: path.join(dir, "memories.db") };
@@ -282,6 +289,7 @@ async function loadConfigFrom(configPath) {
282
289
  normalizeScalingRoadmap(migratedCfg);
283
290
  normalizeSessionLifecycle(migratedCfg);
284
291
  normalizeAutoUpdate(migratedCfg);
292
+ normalizeOrchestration(migratedCfg);
285
293
  return { ...DEFAULT_CONFIG, ...migratedCfg };
286
294
  } catch {
287
295
  return { ...DEFAULT_CONFIG };
@@ -353,6 +361,10 @@ var init_config = __esm({
353
361
  checkOnBoot: true,
354
362
  autoInstall: false,
355
363
  checkIntervalMs: 24 * 60 * 60 * 1e3
364
+ },
365
+ orchestration: {
366
+ phase: "phase_1_coo",
367
+ phaseSetBy: "default"
356
368
  }
357
369
  };
358
370
  CONFIG_MIGRATIONS = [
@@ -3871,6 +3883,12 @@ var init_platform_procedures = __esm({
3871
3883
  priority: "p0",
3872
3884
  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."
3873
3885
  },
3886
+ {
3887
+ title: "Customer orchestration maturity \u2014 recommend, never trap",
3888
+ domain: "workflow",
3889
+ priority: "p1",
3890
+ 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."
3891
+ },
3874
3892
  {
3875
3893
  title: "Single dispatch path \u2014 create_task only",
3876
3894
  domain: "workflow",
@@ -3929,6 +3947,12 @@ var init_platform_procedures = __esm({
3929
3947
  priority: "p0",
3930
3948
  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."
3931
3949
  },
3950
+ {
3951
+ title: "Commit discipline \u2014 never leave verified work floating",
3952
+ domain: "workflow",
3953
+ priority: "p1",
3954
+ 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."
3955
+ },
3932
3956
  {
3933
3957
  title: "Desktop and TUI are the same product",
3934
3958
  domain: "architecture",
@@ -112,6 +112,11 @@ function normalizeAutoUpdate(raw) {
112
112
  const userAU = raw.autoUpdate ?? {};
113
113
  raw.autoUpdate = { ...defaultAU, ...userAU };
114
114
  }
115
+ function normalizeOrchestration(raw) {
116
+ const defaultOrg = DEFAULT_CONFIG.orchestration;
117
+ const userOrg = raw.orchestration ?? {};
118
+ raw.orchestration = { ...defaultOrg, ...userOrg };
119
+ }
115
120
  async function loadConfig() {
116
121
  const dir = process.env.EXE_OS_DIR ?? process.env.EXE_MEM_DIR ?? EXE_AI_DIR;
117
122
  await ensurePrivateDir(dir);
@@ -136,6 +141,7 @@ async function loadConfig() {
136
141
  normalizeScalingRoadmap(migratedCfg);
137
142
  normalizeSessionLifecycle(migratedCfg);
138
143
  normalizeAutoUpdate(migratedCfg);
144
+ normalizeOrchestration(migratedCfg);
139
145
  const config = { ...DEFAULT_CONFIG, dbPath: path.join(dir, "memories.db"), ...migratedCfg };
140
146
  if (config.dbPath.startsWith("~")) {
141
147
  config.dbPath = config.dbPath.replace(/^~/, os.homedir());
@@ -218,6 +224,10 @@ var init_config = __esm({
218
224
  checkOnBoot: true,
219
225
  autoInstall: false,
220
226
  checkIntervalMs: 24 * 60 * 60 * 1e3
227
+ },
228
+ orchestration: {
229
+ phase: "phase_1_coo",
230
+ phaseSetBy: "default"
221
231
  }
222
232
  };
223
233
  CONFIG_MIGRATIONS = [