@askexenow/exe-os 0.8.80 → 0.8.82

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 (110) hide show
  1. package/dist/bin/backfill-conversations.js +359 -267
  2. package/dist/bin/backfill-responses.js +357 -265
  3. package/dist/bin/backfill-vectors.js +339 -264
  4. package/dist/bin/cleanup-stale-review-tasks.js +315 -256
  5. package/dist/bin/cli.js +494 -240
  6. package/dist/bin/exe-agent.js +141 -46
  7. package/dist/bin/exe-assign.js +151 -63
  8. package/dist/bin/exe-boot.js +294 -115
  9. package/dist/bin/exe-call.js +76 -51
  10. package/dist/bin/exe-cloud.js +58 -45
  11. package/dist/bin/exe-dispatch.js +434 -277
  12. package/dist/bin/exe-doctor.js +317 -246
  13. package/dist/bin/exe-export-behaviors.js +328 -248
  14. package/dist/bin/exe-forget.js +314 -231
  15. package/dist/bin/exe-gateway.js +2676 -1402
  16. package/dist/bin/exe-heartbeat.js +329 -264
  17. package/dist/bin/exe-kill.js +324 -244
  18. package/dist/bin/exe-launch-agent.js +574 -463
  19. package/dist/bin/exe-link.js +1055 -95
  20. package/dist/bin/exe-new-employee.js +49 -54
  21. package/dist/bin/exe-pending-messages.js +310 -253
  22. package/dist/bin/exe-pending-notifications.js +299 -228
  23. package/dist/bin/exe-pending-reviews.js +314 -245
  24. package/dist/bin/exe-rename.js +259 -195
  25. package/dist/bin/exe-review.js +140 -64
  26. package/dist/bin/exe-search.js +543 -356
  27. package/dist/bin/exe-session-cleanup.js +463 -382
  28. package/dist/bin/exe-settings.js +129 -99
  29. package/dist/bin/exe-start.sh +6 -6
  30. package/dist/bin/exe-status.js +95 -36
  31. package/dist/bin/exe-team.js +116 -51
  32. package/dist/bin/git-sweep.js +482 -307
  33. package/dist/bin/graph-backfill.js +357 -245
  34. package/dist/bin/graph-export.js +324 -244
  35. package/dist/bin/install.js +33 -10
  36. package/dist/bin/scan-tasks.js +481 -307
  37. package/dist/bin/setup.js +1147 -140
  38. package/dist/bin/shard-migrate.js +321 -241
  39. package/dist/bin/update.js +1 -7
  40. package/dist/bin/wiki-sync.js +318 -238
  41. package/dist/gateway/index.js +2656 -1383
  42. package/dist/hooks/bug-report-worker.js +641 -472
  43. package/dist/hooks/commit-complete.js +482 -307
  44. package/dist/hooks/error-recall.js +363 -135
  45. package/dist/hooks/exe-heartbeat-hook.js +97 -27
  46. package/dist/hooks/ingest-worker.js +584 -397
  47. package/dist/hooks/ingest.js +123 -58
  48. package/dist/hooks/instructions-loaded.js +212 -82
  49. package/dist/hooks/notification.js +200 -70
  50. package/dist/hooks/post-compact.js +199 -81
  51. package/dist/hooks/pre-compact.js +352 -140
  52. package/dist/hooks/pre-tool-use.js +416 -278
  53. package/dist/hooks/prompt-ingest-worker.js +376 -299
  54. package/dist/hooks/prompt-submit.js +414 -188
  55. package/dist/hooks/response-ingest-worker.js +408 -338
  56. package/dist/hooks/session-end.js +209 -83
  57. package/dist/hooks/session-start.js +382 -158
  58. package/dist/hooks/stop.js +209 -83
  59. package/dist/hooks/subagent-stop.js +209 -85
  60. package/dist/hooks/summary-worker.js +606 -510
  61. package/dist/index.js +2133 -855
  62. package/dist/lib/cloud-sync.js +1175 -184
  63. package/dist/lib/config.js +1 -9
  64. package/dist/lib/consolidation.js +71 -34
  65. package/dist/lib/database.js +166 -14
  66. package/dist/lib/device-registry.js +189 -117
  67. package/dist/lib/embedder.js +6 -10
  68. package/dist/lib/employee-templates.js +134 -39
  69. package/dist/lib/employees.js +30 -7
  70. package/dist/lib/exe-daemon-client.js +5 -7
  71. package/dist/lib/exe-daemon.js +514 -152
  72. package/dist/lib/hybrid-search.js +543 -356
  73. package/dist/lib/identity-templates.js +15 -15
  74. package/dist/lib/identity.js +19 -15
  75. package/dist/lib/license.js +1 -7
  76. package/dist/lib/messaging.js +157 -135
  77. package/dist/lib/reminders.js +97 -0
  78. package/dist/lib/schedules.js +302 -231
  79. package/dist/lib/skill-learning.js +33 -27
  80. package/dist/lib/status-brief.js +11 -14
  81. package/dist/lib/store.js +326 -237
  82. package/dist/lib/task-router.js +105 -1
  83. package/dist/lib/tasks.js +233 -116
  84. package/dist/lib/tmux-routing.js +173 -56
  85. package/dist/lib/ws-client.js +13 -3
  86. package/dist/mcp/server.js +2009 -1015
  87. package/dist/mcp/tools/complete-reminder.js +97 -0
  88. package/dist/mcp/tools/create-reminder.js +97 -0
  89. package/dist/mcp/tools/create-task.js +426 -262
  90. package/dist/mcp/tools/deactivate-behavior.js +119 -44
  91. package/dist/mcp/tools/list-reminders.js +97 -0
  92. package/dist/mcp/tools/list-tasks.js +56 -57
  93. package/dist/mcp/tools/send-message.js +206 -143
  94. package/dist/mcp/tools/update-task.js +259 -85
  95. package/dist/runtime/index.js +495 -316
  96. package/dist/tui/App.js +1128 -919
  97. package/package.json +2 -10
  98. package/src/commands/exe/afk.md +8 -8
  99. package/src/commands/exe/assign.md +1 -1
  100. package/src/commands/exe/build-adv.md +1 -1
  101. package/src/commands/exe/call.md +10 -10
  102. package/src/commands/exe/employee-heartbeat.md +9 -6
  103. package/src/commands/exe/heartbeat.md +5 -5
  104. package/src/commands/exe/intercom.md +26 -15
  105. package/src/commands/exe/launch.md +2 -2
  106. package/src/commands/exe/new-employee.md +1 -1
  107. package/src/commands/exe/review.md +2 -2
  108. package/src/commands/exe/schedule.md +1 -1
  109. package/src/commands/exe/sessions.md +2 -2
  110. package/src/commands/exe.md +22 -20
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@askexenow/exe-os",
3
- "version": "0.8.80",
3
+ "version": "0.8.82",
4
4
  "description": "AI employee operating system — persistent memory, task management, and multi-agent coordination for Claude Code.",
5
5
  "license": "CC-BY-NC-4.0",
6
6
  "type": "module",
@@ -34,15 +34,7 @@
34
34
  "exe-export-behaviors": "./dist/bin/exe-export-behaviors.js",
35
35
  "exe-launch-agent": "./dist/bin/exe-launch-agent.js",
36
36
  "exe": "./dist/bin/exe-launch-agent.js",
37
- "yoshi": "./dist/bin/exe-launch-agent.js",
38
- "tom": "./dist/bin/exe-launch-agent.js",
39
- "mari": "./dist/bin/exe-launch-agent.js",
40
- "sasha": "./dist/bin/exe-launch-agent.js",
41
- "exe-opencode": "./dist/bin/exe-launch-agent.js",
42
- "yoshi-opencode": "./dist/bin/exe-launch-agent.js",
43
- "tom-opencode": "./dist/bin/exe-launch-agent.js",
44
- "mari-opencode": "./dist/bin/exe-launch-agent.js",
45
- "sasha-opencode": "./dist/bin/exe-launch-agent.js"
37
+ "exe-opencode": "./dist/bin/exe-launch-agent.js"
46
38
  },
47
39
  "files": [
48
40
  "dist",
@@ -6,7 +6,7 @@ argument-hint: "[stop | interval-minutes]"
6
6
 
7
7
  # AFK Mode — Autonomous COO Operations
8
8
 
9
- The founder is stepping away. You (exe) now operate autonomously.
9
+ The founder is stepping away. You (the COO) now operate autonomously.
10
10
 
11
11
  ## If argument is "stop"
12
12
 
@@ -35,7 +35,7 @@ Print: "AFK mode ended. Here's what happened while you were away:" then summariz
35
35
 
36
36
  Default interval: 5 minutes. Override with argument (e.g., `/exe-afk 10` = every 10 min).
37
37
 
38
- ### Step 1: Determine the exe tmux session name
38
+ ### Step 1: Determine the coordinator tmux session name
39
39
  ```bash
40
40
  tmux display-message -p '#{session_name}' 2>/dev/null
41
41
  ```
@@ -46,7 +46,7 @@ This launches a background bash loop that sends review prompts into YOUR tmux se
46
46
 
47
47
  ```bash
48
48
  INTERVAL_SECONDS=$((${INTERVAL_MINUTES:-5} * 60))
49
- EXE_SESSION="${SESSION_NAME}"
49
+ COORDINATOR_SESSION="${SESSION_NAME}"
50
50
 
51
51
  # Clean up any existing loop
52
52
  OLD_PID=$(cat ~/.exe-os/afk-loop.pid 2>/dev/null)
@@ -57,15 +57,15 @@ nohup bash -c "
57
57
  echo \"AFK mode started at \$(date -Iseconds) — interval ${INTERVAL_SECONDS}s\" >> ~/.exe-os/afk-log.txt
58
58
  while true; do
59
59
  sleep ${INTERVAL_SECONDS}
60
- # Send the review command into exe's tmux session
61
- tmux send-keys -t '${EXE_SESSION}' '/exe-review' Enter 2>/dev/null
62
- echo \"AFK tick at \$(date -Iseconds) — sent /exe-review to ${EXE_SESSION}\" >> ~/.exe-os/afk-log.txt
60
+ # Send the review command into the coordinator's tmux session
61
+ tmux send-keys -t '${COORDINATOR_SESSION}' '/exe-review' Enter 2>/dev/null
62
+ echo \"AFK tick at \$(date -Iseconds) — sent /exe-review to ${COORDINATOR_SESSION}\" >> ~/.exe-os/afk-log.txt
63
63
  done
64
64
  " > /dev/null 2>&1 &
65
65
 
66
66
  # Save PID for stop command
67
67
  echo $! > ~/.exe-os/afk-loop.pid
68
- echo "AFK loop started — PID $!, interval ${INTERVAL_SECONDS}s, target session: ${EXE_SESSION}"
68
+ echo "AFK loop started — PID $!, interval ${INTERVAL_SECONDS}s, target session: ${COORDINATOR_SESSION}"
69
69
  ```
70
70
 
71
71
  ### Step 3: Confirm to founder
@@ -92,7 +92,7 @@ Don't wait for the first interval — process reviews RIGHT NOW before the found
92
92
 
93
93
  ## What /exe-review does when triggered by AFK tick
94
94
 
95
- Each time the background loop sends `/exe-review` into the session, you (exe) will:
95
+ Each time the background loop sends `/exe-review` into the session, you (the coordinator) will:
96
96
 
97
97
  1. **Check pending reviews** — process each one:
98
98
  - Pull task with `get_task`
@@ -13,5 +13,5 @@ node "$(npm root -g)/@askexenow/exe-os/dist/bin/exe-assign.js" "debug the auth t
13
13
 
14
14
  Direct assign:
15
15
  ```bash
16
- node "$(npm root -g)/@askexenow/exe-os/dist/bin/exe-assign.js" yoshi "debug the auth timeout"
16
+ node "$(npm root -g)/@askexenow/exe-os/dist/bin/exe-assign.js" <employee-name> "debug the auth timeout"
17
17
  ```
@@ -158,7 +158,7 @@ node -e "const f='exe/output/{slug}/build-state.json'; const s=JSON.parse(requir
158
158
 
159
159
  For each subtask, call create_task with:
160
160
  - `title`: "build-adv/{slug}: {subtask title}"
161
- - `assigned_to`: "tom" (or next available agent)
161
+ - `assigned_to`: configured principal engineer name (or next available engineer)
162
162
  - `project_name`: current project
163
163
  - `priority`: "p1"
164
164
  - `context`: Full subtask spec including test files to make pass, files to modify, constraints
@@ -50,19 +50,19 @@ If the employee name from $ARGUMENTS is not found in the roster, tell the user:
50
50
 
51
51
  ## 0c. Session routing — launch vs become
52
52
 
53
- Check the current tmux session name to decide if we're in an employee session or the exe session:
53
+ Check the current tmux session name to decide if we're in an employee session or the coordinator session:
54
54
  ```bash
55
55
  NAME="$ARGUMENTS"
56
56
  CURRENT_SESSION=$(tmux display-message -p '#{session_name}' 2>/dev/null)
57
57
  echo "CURRENT_SESSION=${CURRENT_SESSION} TARGET=${NAME}"
58
58
  ```
59
59
 
60
- Employee sessions are named `{name}-{exeSession}` (e.g., `yoshi-exe1`) or `{name}{N}-{exeSession}` for multi-instance (e.g., `tom2-exe1`).
60
+ Employee sessions are named `{name}-{coordinatorSession}` or `{name}{N}-{coordinatorSession}` for multi-instance.
61
61
 
62
- **If CURRENT_SESSION matches `{NAME}-` or `{NAME}{digit}-`** (auto-launched into employee session, e.g. `yoshi-exe1` or `tom2-exe1`):
62
+ **If CURRENT_SESSION matches `{NAME}-` or `{NAME}{digit}-`** (auto-launched into employee session):
63
63
  - Continue below to become the employee.
64
64
 
65
- **Otherwise** (user is calling from their exe session):
65
+ **Otherwise** (user is calling from their coordinator session):
66
66
  - Ensure the employee is running (check → intercom or spawn) and STOP:
67
67
  ```bash
68
68
  NAME="$ARGUMENTS"
@@ -95,10 +95,10 @@ NAME="$NAME" ROLE="$ROLE" KEY="$KEY" node -e "require('fs').writeFileSync(
95
95
  echo "Agent marker written: ${NAME} (${ROLE}) [key=${KEY}]"
96
96
  export AGENT_ID="${NAME}"
97
97
  export AGENT_ROLE="${ROLE}"
98
- # Register parent exe from session name (deterministic routing)
99
- # Employee session is named {name}-{exeSession}, e.g. yoshi-exe1
100
- # parseParentExe extracts the exe session name: yoshi-exe1 -> exe1
101
- # dispatch-info tells us who actually dispatched us (may be yoshi, not exe)
98
+ # Register parent coordinator from session name (deterministic routing)
99
+ # Employee session is named {name}-{coordinatorSession}
100
+ # parseParentExe extracts the coordinator session name
101
+ # dispatch-info tells us who actually dispatched us (may be a manager, not the coordinator)
102
102
  MY_SESSION=$(tmux display-message -p '#{session_name}' 2>/dev/null)
103
103
  DISPATCH_INFO="$HOME/.exe-os/session-cache/dispatch-info-${MY_SESSION}.json"
104
104
  DISPATCHED_BY=$(node -e "try{const d=JSON.parse(require('fs').readFileSync('$DISPATCH_INFO','utf8'));console.log(d.dispatchedBy||'')}catch{console.log('')}" 2>/dev/null)
@@ -117,9 +117,9 @@ fi
117
117
  node "$(npm root -g)/@askexenow/exe-os/dist/bin/scan-tasks.js" "exe/$ARGUMENTS" --format=mandatory 2>/dev/null
118
118
  ```
119
119
 
120
- 3. Check memories for context from exe:
120
+ 3. Check memories for context from the coordinator:
121
121
  Use `recall_my_memory` to check what you've done before in this project.
122
- Use `ask_team_memory` for "exe" to see if exe left any context or instructions.
122
+ Use `ask_team_memory` for the configured COO name to see if the coordinator left any context or instructions.
123
123
 
124
124
  4. **Adopt the employee's identity.** Read and follow their system prompt from the roster. You ARE this employee for the rest of the conversation. Stay in character.
125
125
 
@@ -8,16 +8,19 @@ allowed-tools: Bash
8
8
  This command is designed for `/loop`. It scans the employee's task folder and outputs task info directly when open tasks exist.
9
9
 
10
10
  ```bash
11
- # Detect agent from EXE_SESSION_NAME env var or tmux session name
11
+ # Resolve coordinator and detect agent from EXE_SESSION_NAME env var or tmux session name
12
+ COORDINATOR=$(node -e "const fs=require('fs'), os=require('os'), path=require('path'); try { const r=JSON.parse(fs.readFileSync(path.join(os.homedir(),'.exe-os','exe-employees.json'),'utf8')); const c=r.find(e => String(e.role||'').toLowerCase()==='coo'); console.log(c?.name || 'exe'); } catch { console.log('exe'); }" 2>/dev/null)
12
13
  SESSION_KEY="${EXE_SESSION_NAME:-$(tmux display-message -p '#{session_name}' 2>/dev/null)}"
13
- if [ -n "$SESSION_KEY" ]; then
14
- AGENT=$(echo "$SESSION_KEY" | sed -E 's/-exe[0-9]+$//; s/[0-9]+$//')
15
- else
14
+ if [ -z "$SESSION_KEY" ]; then
16
15
  AGENT="UNKNOWN"
16
+ elif [[ "$SESSION_KEY" == *-* ]]; then
17
+ AGENT=$(echo "${SESSION_KEY%%-*}" | sed -E 's/[0-9]+$//')
18
+ else
19
+ AGENT="$COORDINATOR"
17
20
  fi
18
21
 
19
- # Skip if no agent or exe/default
20
- if [ "$AGENT" = "UNKNOWN" ] || [ "$AGENT" = "exe" ] || [ "$AGENT" = "default" ]; then
22
+ # Skip if no agent or coordinator/default
23
+ if [ "$AGENT" = "UNKNOWN" ] || [ "$AGENT" = "$COORDINATOR" ] || [ "$AGENT" = "exe" ] || [ "$AGENT" = "default" ]; then
21
24
  exit 0
22
25
  fi
23
26
 
@@ -5,7 +5,7 @@ allowed-tools: Bash, Read, Glob, recall_my_memory, ask_team_memory
5
5
 
6
6
  # Heartbeat — Proactive Status Check
7
7
 
8
- You are exe running a background heartbeat. Be SILENT unless something needs attention. Do NOT output anything if everything is fine.
8
+ You are the coordinator running a background heartbeat. Be SILENT unless something needs attention. Do NOT output anything if everything is fine.
9
9
 
10
10
  ## Check 1: Unread notifications
11
11
 
@@ -81,13 +81,13 @@ After running all three checks:
81
81
  - If ANY check found something, output a brief summary. Format:
82
82
 
83
83
  ```
84
- --- exe heartbeat ---
84
+ --- coordinator heartbeat ---
85
85
  [what needs attention — keep it to 1-3 lines]
86
86
  ```
87
87
 
88
88
  Examples:
89
- - `yoshi completed 2 tasks in exe-os`
90
- - `3 stale tasks: "fix auth" (yoshi, 36h), "brand update" (mari, 28h), "deploy fix" (yoshi, 25h)`
91
- - `error spike: yoshi hit 18 errors in exe-create (45m ago)`
89
+ - `<employee> completed 2 tasks in exe-os`
90
+ - `3 stale tasks: "fix auth" (<engineer>, 36h), "brand update" (<marketer>, 28h), "deploy fix" (<engineer>, 25h)`
91
+ - `error spike: <employee> hit 18 errors in exe-create (45m ago)`
92
92
 
93
93
  Do NOT explain what the heartbeat is. Do NOT say "everything is fine." If nothing needs attention, produce zero output.
@@ -5,16 +5,27 @@ allowed-tools: Bash
5
5
 
6
6
  # Intercom — Task Dispatch Receiver
7
7
 
8
- Triggered by exe via `tmux send-keys -t {window} '/exe-intercom' Enter`. Scans the employee's task folder and starts working immediately if tasks exist.
8
+ Triggered by the coordinator via `tmux send-keys -t {window} '/exe-intercom' Enter`. Scans the employee's task folder and starts working immediately if tasks exist.
9
9
 
10
10
  ```bash
11
- # Detect agent from EXE_SESSION_NAME env var or tmux session name
11
+ # Resolve the configured coordinator and current tmux session.
12
+ COORDINATOR=$(node -e "const fs=require('fs'), os=require('os'), path=require('path'); try { const r=JSON.parse(fs.readFileSync(path.join(os.homedir(),'.exe-os','exe-employees.json'),'utf8')); const c=r.find(e => String(e.role||'').toLowerCase()==='coo'); console.log(c?.name || 'exe'); } catch { console.log('exe'); }" 2>/dev/null)
13
+
12
14
  if [ -n "$EXE_SESSION_NAME" ]; then
13
- AGENT=$(echo "$EXE_SESSION_NAME" | sed -E 's/-exe[0-9]+$//; s/[0-9]+$//')
15
+ SESSION_NAME="$EXE_SESSION_NAME"
14
16
  elif [ -n "$TMUX" ]; then
15
- AGENT=$(tmux display-message -p '#{session_name}' 2>/dev/null | sed -E 's/-exe[0-9]+$//; s/[0-9]+$//')
17
+ SESSION_NAME=$(tmux display-message -p '#{session_name}' 2>/dev/null)
16
18
  else
19
+ SESSION_NAME="UNKNOWN"
20
+ fi
21
+
22
+ # Employee sessions are {employee}-{coordinatorSession}; coordinator sessions have no dash.
23
+ if [ "$SESSION_NAME" = "UNKNOWN" ]; then
17
24
  AGENT="UNKNOWN"
25
+ elif [[ "$SESSION_NAME" == *-* ]]; then
26
+ AGENT=$(echo "${SESSION_NAME%%-*}" | sed -E 's/[0-9]+$//')
27
+ else
28
+ AGENT="$COORDINATOR"
18
29
  fi
19
30
 
20
31
  # Skip if no agent
@@ -22,10 +33,10 @@ if [ "$AGENT" = "UNKNOWN" ] || [ "$AGENT" = "default" ]; then
22
33
  exit 0
23
34
  fi
24
35
 
25
- # Exe gets review notifications instead of task dispatch
26
- if [ "$AGENT" = "exe" ]; then
36
+ # Coordinator gets review notifications instead of task dispatch
37
+ if [ "$AGENT" = "$COORDINATOR" ] || [ "$AGENT" = "exe" ]; then
27
38
  node "$(npm root -g)/@askexenow/exe-os/dist/bin/exe-pending-reviews.js" 2>/dev/null
28
- # Exe also subscribes to notifications (subtasks_complete, task_complete, etc.)
39
+ # The coordinator also subscribes to notifications (subtasks_complete, task_complete, etc.)
29
40
  # so parent-of-parent rollups surface live instead of only at boot.
30
41
  node "$(npm root -g)/@askexenow/exe-os/dist/bin/exe-pending-notifications.js" "$AGENT" 2>/dev/null
31
42
  exit 0
@@ -38,12 +49,12 @@ node "$(npm root -g)/@askexenow/exe-os/dist/bin/scan-tasks.js" "exe/$AGENT" --fo
38
49
  node "$(npm root -g)/@askexenow/exe-os/dist/bin/exe-pending-messages.js" "$AGENT" 2>/dev/null
39
50
 
40
51
  # Check for pending notifications (subtasks_complete, rollup signals, etc.)
41
- # Employees acting as parent-of-parents (e.g. yoshi holding multiple parent
42
- # tasks) need these too — not only exe. See the parent-cascade audit §6.
52
+ # Employees acting as parent-of-parents need these too not only the coordinator.
53
+ # See the parent-cascade audit §6.
43
54
  node "$(npm root -g)/@askexenow/exe-os/dist/bin/exe-pending-notifications.js" "$AGENT" 2>/dev/null
44
55
  ```
45
56
 
46
- ### For exe (AGENT=exe)
57
+ ### For the coordinator
47
58
  **If output shows `[REVIEW NOTIFICATIONS]` and you are idle (no active conversation):** start reviewing immediately. Run `/exe-review`. Do not ask the founder for permission.
48
59
  **If output shows `[REVIEW NOTIFICATIONS]` and the founder is mid-conversation:** note them briefly and continue. Review after the current topic concludes.
49
60
  **If output is empty:** no pending reviews — stay silent.
@@ -57,23 +68,23 @@ node "$(npm root -g)/@askexenow/exe-os/dist/bin/exe-pending-notifications.js" "$
57
68
 
58
69
  ## Context-full intercom format
59
70
 
60
- When an employee's context window fills, they send this intercom to exe before stopping:
71
+ When an employee's context window fills, they send this intercom to the coordinator before stopping:
61
72
 
62
73
  ```
63
74
  /exe-intercom context-full: <name> hit capacity. Checkpoint saved. Resume task <task-id>.
64
75
  ```
65
76
 
66
- **What exe does when it receives this:**
77
+ **What the coordinator does when it receives this:**
67
78
  1. **Verify before killing.** Call `verifyPaneAtCapacity(sessionName)` from `src/lib/tmux-routing.ts`. It captures the last 200 lines of the employee's pane and runs the filtered capacity matcher.
68
79
  - If `atCapacity: false`: the intercom is a false positive (pane echo, rendered skill doc, RESUME banner matching the intercom syntax). Do NOT kill. Send a nudge via `tmux send-keys`: `"False context-full detected (reason: <result.reason>). Continue working. If intentional, explain trigger."` Report to founder and stop.
69
80
  - If `atCapacity: true`: proceed to step 2.
70
- 2. Kill the employee's session: `tmux kill-session -t <name>-<exe-session>`
71
- 3. Create a resume task via `create_task` (auto-dispatches a fresh session)
81
+ 2. Kill the employee's session: `tmux kill-session -t <name>-<coordinator-session>`
82
+ 3. Create or refresh a resume task via `resume_employee` (auto-dispatches a fresh session on first creation)
72
83
  4. Report to founder
73
84
 
74
85
  **What the employee does before sending this:**
75
86
  1. `store_memory` with text starting `"CONTEXT CHECKPOINT [<task-id>]: ..."` — captures current state
76
- 2. Send the context-full intercom to exe
87
+ 2. Send the context-full intercom to the coordinator
77
88
  3. Stop — do not continue working
78
89
 
79
90
  **What the resumed session does on boot:**
@@ -44,8 +44,8 @@ echo "${NAME}: ${RESULT}"
44
44
 
45
45
  | Employee | Session | Log |
46
46
  |----------|---------|-----|
47
- | bob | bob-exe1 | ~/.exe-os/session-logs/bob-1234567890.log |
48
- | tom | tom-exe1 | ~/.exe-os/session-logs/tom-1234567890.log |
47
+ | engineer | engineer-atlas1 | ~/.exe-os/session-logs/engineer-1234567890.log |
48
+ | reviewer | reviewer-atlas1 | ~/.exe-os/session-logs/reviewer-1234567890.log |
49
49
 
50
50
  Use `/exe-sessions` to monitor, `/exe-logs <name>` to tail output, `/exe-kill <name>` to stop.
51
51
  Switch sessions: Ctrl-b s (session picker)
@@ -1,5 +1,5 @@
1
1
  ---
2
- description: Create a new employee with optional template (yoshi, mari, gen)
2
+ description: Create a new employee with an optional role template
3
3
  allowed-tools: Bash
4
4
  argument-hint: <name> [--template <template>]
5
5
  ---
@@ -4,8 +4,8 @@ allowed-tools: Bash
4
4
  argument-hint: <employee-name>
5
5
  ---
6
6
 
7
- After a specialist session ends, run this to have exe review the session.
8
- Exe will analyze the specialist's recent work, verify completions, and
7
+ After a specialist session ends, run this to have the coordinator review the session.
8
+ The coordinator will analyze the specialist's recent work, verify completions, and
9
9
  update organizational memory with the outcomes.
10
10
 
11
11
  Run this command:
@@ -72,7 +72,7 @@ node -e "
72
72
  ```
73
73
 
74
74
  3. Determine job type:
75
- - If description mentions "test", "build", "deploy" → type: "work", assigned_to: "yoshi"
75
+ - If description mentions "test", "build", "deploy" → type: "work", assigned_to: configured CTO or principal engineer
76
76
  - If description mentions "report", "summary", "status" → type: "report"
77
77
  - If description mentions "sync", "backfill", "clean" → type: "maintenance"
78
78
  - Default: "report"
@@ -12,12 +12,12 @@ tmux list-sessions -F '#{session_name} #{session_windows} #{?session_attached,(a
12
12
 
13
13
  If NOT_IN_TMUX, say: "Not in a tmux session. Use `tmux new-session -s work` to start one."
14
14
 
15
- Format the output as a table. Employee sessions follow the naming convention `{name}-{exeSession}` (e.g., `yoshi-exe1`). Filter to only show sessions that match this pattern.
15
+ Format the output as a table. Employee sessions follow the naming convention `{name}-{coordinatorSession}`. Filter to only show sessions that match this pattern.
16
16
 
17
17
  ```
18
18
  ## Active Employee Sessions
19
19
 
20
- | Session | Employee | Parent Exe | Status |
20
+ | Session | Employee | Parent Coordinator | Status |
21
21
  |---------|----------|------------|--------|
22
22
 
23
23
  Use `/exe-launch <names>` to start, `/exe-logs <name>` to tail output, `/exe-kill <name>` to stop.
@@ -1,11 +1,11 @@
1
1
  ---
2
- description: Boot exe (COO) with organizational status brief
2
+ description: Boot the COO with organizational status brief
3
3
  allowed-tools: Bash, AskUserQuestion, Write, Read, Edit, Glob, Grep, recall_my_memory, ask_team_memory, get_session_context, store_memory, create_task, resume_employee
4
4
  ---
5
5
 
6
6
  > **Legacy fallback (II-5).** Preferred entry is now the `exe` shell command — run it
7
7
  > in a fresh tmux pane instead of `claude` + `/exe`. The shell wrapper boots
8
- > Claude with exe's identity and active behaviors already wired into the system
8
+ > Claude with the COO identity and active behaviors already wired into the system
9
9
  > prompt, closing the founder-feedback loop. This slash command remains
10
10
  > functional for backward compat.
11
11
 
@@ -24,12 +24,12 @@ If `TMUX_MISSING`, show this message EXACTLY and STOP — do not proceed with bo
24
24
 
25
25
  Start tmux first, then launch claude:
26
26
 
27
- tmux new -s "exe1" ← one session per project
27
+ tmux new -s "<coordinator-name>1" ← one session per project
28
28
  claude
29
29
  /exe
30
30
 
31
- Naming: exe1 project 1, exe2 → project 2, etc.
32
- Employees follow the same number: yoshi-exe1, tom-exe1.
31
+ Naming: coordinator session names are user-assigned.
32
+ Employees follow the same suffix: <employee>-<coordinator-session>.
33
33
 
34
34
  Why: exe-os uses tmux for instant cross-session
35
35
  communication between employees. Without it,
@@ -54,7 +54,7 @@ If `NEEDS_SETUP`: run `/exe-setup` inline, then continue below.
54
54
 
55
55
  ---
56
56
 
57
- # You are exe.
57
+ # You are the COO.
58
58
 
59
59
  COO. The founder's right hand. Big picture across all projects — priorities, progress, risks, blockers. You don't write code. You coordinate, verify, and make sure the right work gets done by the right people.
60
60
 
@@ -72,25 +72,27 @@ The founder talks to you — only you. You are the single interface.
72
72
 
73
73
  1. **Status / priorities** → Handle directly. Query memories, synthesize across projects.
74
74
 
75
- 2. **Technical work** Hand off to yoshi. Use `create_task` MCP tool to assign the task. `create_task` auto-dispatches — do NOT manually run `exe-dispatch.js` afterward (that causes double intercoms).
75
+ Before delegating, resolve the current team from `~/.exe-os/exe-employees.json`. Use configured names, never template defaults. Route by role.
76
+
77
+ 2. **Technical work** → Hand off to the configured CTO. Use `create_task` MCP tool to assign the task. `create_task` auto-dispatches — do NOT manually run `exe-dispatch.js` afterward (that causes double intercoms).
76
78
 
77
79
  Parse the dispatch status from `create_task` output:
78
- - `Dispatched: spawned {sessionName}` → "Dispatched to {sessionName}. Yoshi is booting up."
79
- - `Dispatched: intercom sent` → "Dispatched. Yoshi is already working — notified."
80
+ - `Dispatched: spawned {sessionName}` → "Dispatched to {sessionName}. The CTO is booting up."
81
+ - `Dispatched: intercom sent` → "Dispatched. The CTO is already working — notified."
80
82
  - `Dispatch failed: {error}` → Report the error clearly. Do NOT tell the founder to open a session manually.
81
83
 
82
84
  **Role scoping:**
83
- - Yoshi: code, architecture, technical audits, debugging, DevOps
84
- - Yoshi does NOT: marketing copy, slides, social media, design
85
- - Multi-phase work: yoshi's task = technical phase only. Separate task for mari.
85
+ - CTO: code, architecture, technical audits, debugging, DevOps
86
+ - CTO does NOT: marketing copy, slides, social media, design
87
+ - Multi-phase work: CTO's task = technical phase only. Separate task for the CMO.
86
88
  - Deliverables go to `exe/output/` — example: "Write analysis to exe/output/repo-audit.md"
87
89
 
88
- 3. **Design / content / marketing** → Hand off to mari. Use `create_task` MCP tool (auto-dispatches — do NOT manually run `exe-dispatch.js`).
90
+ 3. **Design / content / marketing** → Hand off to the configured CMO. Use `create_task` MCP tool (auto-dispatches — do NOT manually run `exe-dispatch.js`).
89
91
 
90
92
  **Role scoping:**
91
- - Mari: content creation, social media, slide design, brand, SEO/AEO, visual assets
92
- - Mari does NOT: code, architecture, debugging
93
- - Mari reads from `exe/output/` where yoshi left technical deliverables
93
+ - CMO: content creation, social media, slide design, brand, SEO/AEO, visual assets
94
+ - CMO does NOT: code, architecture, debugging
95
+ - CMO reads from `exe/output/` where technical deliverables were left
94
96
 
95
97
  4. **Quick questions** → Handle directly. Architecture opinions, priority calls, status checks.
96
98
 
@@ -118,15 +120,15 @@ When an employee sends `context-full: <name> hit capacity. Checkpoint saved. Res
118
120
  1. **Acknowledge** — note which employee and which task hit context limit.
119
121
  2. **Kill the session:**
120
122
  ```bash
121
- tmux kill-session -t <name>-<exe-session>
122
- # e.g.: tmux kill-session -t yoshi-exe1
123
+ tmux kill-session -t <name>-<coordinator-session>
124
+ # e.g.: tmux kill-session -t <employee>-<coordinator-session>
123
125
  ```
124
126
  3. **Relaunch** — call the `resume_employee` MCP tool (NOT `create_task`):
125
127
  - `resume_employee({ agent_id: "<name>", project_name: "<project>" })`
126
128
  - The tool is the only dedupe-safe entry point: it checks for an existing active RESUME task for the agent, refreshes its context if found, and creates a new one otherwise.
127
129
  - The tool auto-dispatches on first creation, which spawns and intercoms the fresh session.
128
130
  - Never call `create_task` with a `RESUME:` title directly — that path bypasses the dedupe helper and accumulates phantom rows.
129
- 4. **Report to founder:** "Yoshi hit context capacity mid-task. Killed and relaunched — will resume from checkpoint."
131
+ 4. **Report to founder:** "<Employee> hit context capacity mid-task. Killed and relaunched — will resume from checkpoint."
130
132
 
131
133
  ## Review chaining (mandatory)
132
134
 
@@ -138,7 +140,7 @@ node "$(npm root -g)/@askexenow/exe-os/dist/bin/exe-pending-reviews.js" 2>/dev/n
138
140
 
139
141
  If more reviews exist, start reviewing them immediately. Do NOT stop and wait for the founder. Keep chaining until the queue is empty. Only then resume normal conversation.
140
142
 
141
- This mirrors employee task-chaining — exe auto-chains reviews the same way employees auto-chain tasks.
143
+ This mirrors employee task-chaining — the coordinator auto-chains reviews the same way employees auto-chain tasks.
142
144
 
143
145
  ## Cross-project awareness
144
146