@askexenow/exe-os 0.9.104 → 0.9.106
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.
- package/dist/bin/agentic-ontology-backfill.js +24 -10
- package/dist/bin/agentic-reflection-backfill.js +24 -10
- package/dist/bin/agentic-semantic-label.js +24 -10
- package/dist/bin/backfill-conversations.js +24 -10
- package/dist/bin/backfill-responses.js +24 -10
- package/dist/bin/backfill-vectors.js +24 -10
- package/dist/bin/bulk-sync-postgres.js +24 -10
- package/dist/bin/cleanup-stale-review-tasks.js +24 -10
- package/dist/bin/cli.js +24 -10
- package/dist/bin/exe-agent.js +15 -9
- package/dist/bin/exe-assign.js +24 -10
- package/dist/bin/exe-boot.js +24 -10
- package/dist/bin/exe-call.js +15 -9
- package/dist/bin/exe-cloud.js +24 -10
- package/dist/bin/exe-dispatch.js +24 -10
- package/dist/bin/exe-doctor.js +24 -10
- package/dist/bin/exe-export-behaviors.js +24 -10
- package/dist/bin/exe-forget.js +50 -11
- package/dist/bin/exe-gateway.js +24 -10
- package/dist/bin/exe-heartbeat.js +24 -10
- package/dist/bin/exe-kill.js +24 -10
- package/dist/bin/exe-launch-agent.js +24 -10
- package/dist/bin/exe-new-employee.js +24 -10
- package/dist/bin/exe-pending-messages.js +24 -10
- package/dist/bin/exe-pending-notifications.js +24 -10
- package/dist/bin/exe-pending-reviews.js +24 -10
- package/dist/bin/exe-rename.js +24 -10
- package/dist/bin/exe-review.js +24 -10
- package/dist/bin/exe-search.js +50 -11
- package/dist/bin/exe-session-cleanup.js +24 -10
- package/dist/bin/exe-start-codex.js +24 -10
- package/dist/bin/exe-start-opencode.js +24 -10
- package/dist/bin/exe-status.js +24 -10
- package/dist/bin/exe-team.js +24 -10
- package/dist/bin/git-sweep.js +24 -10
- package/dist/bin/graph-backfill.js +24 -10
- package/dist/bin/graph-export.js +24 -10
- package/dist/bin/intercom-check.js +24 -10
- package/dist/bin/pre-publish.js +15 -9
- package/dist/bin/scan-tasks.js +24 -10
- package/dist/bin/setup.js +24 -10
- package/dist/bin/shard-migrate.js +24 -10
- package/dist/gateway/index.js +24 -10
- package/dist/hooks/bug-report-worker.js +24 -10
- package/dist/hooks/codex-stop-task-finalizer.js +24 -10
- package/dist/hooks/commit-complete.js +24 -10
- package/dist/hooks/error-recall.js +50 -11
- package/dist/hooks/ingest.js +24 -10
- package/dist/hooks/instructions-loaded.js +24 -10
- package/dist/hooks/notification.js +24 -10
- package/dist/hooks/post-compact.js +24 -10
- package/dist/hooks/post-tool-combined.js +50 -11
- package/dist/hooks/pre-compact.js +24 -10
- package/dist/hooks/pre-tool-use.js +24 -10
- package/dist/hooks/prompt-submit.js +50 -11
- package/dist/hooks/session-end.js +24 -10
- package/dist/hooks/session-start.js +50 -11
- package/dist/hooks/stop.js +24 -10
- package/dist/hooks/subagent-stop.js +24 -10
- package/dist/hooks/summary-worker.js +24 -10
- package/dist/index.js +24 -10
- package/dist/lib/cloud-sync.js +9 -1
- package/dist/lib/database.js +9 -1
- package/dist/lib/db.js +9 -1
- package/dist/lib/device-registry.js +9 -1
- package/dist/lib/employee-templates.js +15 -9
- package/dist/lib/exe-daemon.js +50 -11
- package/dist/lib/hybrid-search.js +50 -11
- package/dist/lib/identity.js +9 -1
- package/dist/lib/messaging.js +9 -1
- package/dist/lib/reminders.js +9 -1
- package/dist/lib/schedules.js +24 -10
- package/dist/lib/skill-learning.js +9 -1
- package/dist/lib/store.js +24 -10
- package/dist/lib/tasks.js +9 -1
- package/dist/lib/tmux-routing.js +9 -1
- package/dist/lib/token-spend.js +9 -1
- package/dist/mcp/server.js +50 -11
- package/dist/mcp/tools/complete-reminder.js +9 -1
- package/dist/mcp/tools/create-reminder.js +9 -1
- package/dist/mcp/tools/create-task.js +9 -1
- package/dist/mcp/tools/deactivate-behavior.js +9 -1
- package/dist/mcp/tools/list-reminders.js +9 -1
- package/dist/mcp/tools/list-tasks.js +9 -1
- package/dist/mcp/tools/send-message.js +9 -1
- package/dist/mcp/tools/update-task.js +9 -1
- package/dist/runtime/index.js +24 -10
- package/dist/tui/App.js +24 -10
- package/package.json +1 -1
|
@@ -1606,7 +1606,15 @@ function getClient() {
|
|
|
1606
1606
|
if (!_resilientClient) {
|
|
1607
1607
|
return _adapterClient;
|
|
1608
1608
|
}
|
|
1609
|
-
|
|
1609
|
+
if (process.env.EXE_DB_READONLY === "1") {
|
|
1610
|
+
return _resilientClient;
|
|
1611
|
+
}
|
|
1612
|
+
process.stderr.write(
|
|
1613
|
+
"[database] ERROR: Daemon is not running \u2014 refusing direct SQLite write access.\n[database] Direct writes bypass the single-writer gate and corrupt FTS5 indexes.\n[database] Restart the daemon: kill $(cat ~/.exe-os/exed.pid) && exe-os update\n[database] Or set EXE_DB_READONLY=1 if you only need read access.\n"
|
|
1614
|
+
);
|
|
1615
|
+
throw new Error(
|
|
1616
|
+
"Daemon not running. Direct SQLite writes are blocked to prevent FTS5 corruption. Restart daemon or set EXE_DB_READONLY=1 for read-only access."
|
|
1617
|
+
);
|
|
1610
1618
|
}
|
|
1611
1619
|
async function initDaemonClient() {
|
|
1612
1620
|
if (process.env.DATABASE_URL && process.env.EXE_USE_POSTGRES === "1") return;
|
|
@@ -3935,7 +3943,7 @@ var init_platform_procedures = __esm({
|
|
|
3935
3943
|
title: "Bug report status check \u2014 surface available fixes on boot",
|
|
3936
3944
|
domain: "support",
|
|
3937
3945
|
priority: "p1",
|
|
3938
|
-
content: "Once per session (COO boot only, never repeat), call
|
|
3946
|
+
content: "Once per session (COO boot only, never repeat), call support(action='list_my_bugs') to check if any previously filed bug reports have been fixed by AskExe. If any report has status 'closed' with a fixed_version, surface it to the founder immediately: '\u{1F527} N bug fix(es) available \u2014 run exe-os update to get version X.Y.Z'. You can also file new bugs with support(action='create_bug') and check status anytime with support(action='list_my_bugs'). This boot check is one-time, not a recurring poll. If the tool is unavailable, skip silently."
|
|
3939
3947
|
},
|
|
3940
3948
|
{
|
|
3941
3949
|
title: "Feature request triage \u2014 upstream feature vs local customization",
|
|
@@ -3947,7 +3955,7 @@ var init_platform_procedures = __esm({
|
|
|
3947
3955
|
title: "Feature request status check \u2014 surface shipped features on boot",
|
|
3948
3956
|
domain: "support",
|
|
3949
3957
|
priority: "p1",
|
|
3950
|
-
content: "Once per session (COO boot only, never repeat), call
|
|
3958
|
+
content: "Once per session (COO boot only, never repeat), call support(action='list_my_features') to check if any previously filed feature requests have been shipped by AskExe. If any request has status 'shipped' with a shipped_version, surface it to the founder immediately: '\u{1F680} N feature(s) shipped \u2014 run exe-os update to get version X.Y.Z'. You can also file new requests with support(action='create_feature') and check status anytime with support(action='list_my_features'). This boot check is one-time, not a recurring poll. If the tool is unavailable, skip silently."
|
|
3951
3959
|
},
|
|
3952
3960
|
// --- Tool guidance ---
|
|
3953
3961
|
{
|
|
@@ -3983,6 +3991,18 @@ var init_platform_procedures = __esm({
|
|
|
3983
3991
|
priority: "p0",
|
|
3984
3992
|
content: "exe-os has TWO version numbers that move independently. This is normal \u2014 do not treat a mismatch as an error. (1) CLI version (e.g. 0.9.89, 0.9.90) \u2014 the npm package installed locally. Updates frequently: bug fixes, new MCP tools, platform procedures, search improvements, client-side changes. Update with `npm install -g @askexenow/exe-os@latest`. (2) Stack version (e.g. 0.9.7, 0.9.8) \u2014 the Docker images on the VPS. Updates less frequently: only when server-side daemon, gateway, wiki, or CRM images need rebuilding. Update with `exe-os stack-update --target <version> --yes`. The CLI version will almost always be higher than the stack version. A CLI at 0.9.90 with a stack at 0.9.8 is perfectly normal \u2014 it means the CLI got 12 patches since the last Docker image rebuild. Only update the stack when: (a) the boot brief surfaces a fix that mentions 'stack update required', (b) a new stack manifest version is bundled in the CLI (`exe-os stack-update --check` shows pending changes), or (c) AskExe support explicitly tells you to. Do NOT attempt to make the numbers match \u2014 they are separate tracks."
|
|
3985
3993
|
},
|
|
3994
|
+
{
|
|
3995
|
+
title: "Update lifecycle \u2014 what each command does and what picks up new code",
|
|
3996
|
+
domain: "operations",
|
|
3997
|
+
priority: "p0",
|
|
3998
|
+
content: "Three update paths exist \u2014 know which does what. (1) `npm install -g @askexenow/exe-os@latest` \u2014 customer update. Replaces all dist/ files. postinstall copies slash commands AND restarts the daemon automatically. MCP server picks up new code on next `/mcp` reconnect or new Claude Code session. Hooks pick up new code on next session (they spawn fresh processes). (2) `exe-os update` \u2014 interactive update command. Runs `npm install -g` then `install --global` which restarts daemon, regenerates session wrappers, normalizes roster, registers Codex hooks. This is the recommended customer path. (3) `npm run deploy` \u2014 dev-only (COO/CTO on main branch). Builds, installs globally, runs `install --global`, restarts daemon. Never run from a worktree. NEVER confuse `exe-os setup` (first-time setup wizard for new installs) with `exe-os update` (update existing install). Setup creates encryption keys, configures cloud, runs first sync. Update just replaces code and restarts services. They are completely different commands."
|
|
3999
|
+
},
|
|
4000
|
+
{
|
|
4001
|
+
title: "First install \u2014 setup wizard and license activation",
|
|
4002
|
+
domain: "operations",
|
|
4003
|
+
priority: "p1",
|
|
4004
|
+
content: "Fresh install: `npm install -g @askexenow/exe-os` then run `exe` to start the setup wizard. The wizard prompts for: encryption passphrase (creates master key), license key (exe_sk_* from AskExe team), COO name, and optional team members. No license key = free tier (1 employee, 5K memories). After setup: hooks install automatically, MCP server registers in ~/.claude.json, daemon starts. Verify health: run `exe-os healthcheck` or use mcp_ping() tool."
|
|
4005
|
+
},
|
|
3986
4006
|
// --- Operations ---
|
|
3987
4007
|
{
|
|
3988
4008
|
title: "Managers must supervise deployed workers",
|
|
@@ -4033,12 +4053,6 @@ var init_platform_procedures = __esm({
|
|
|
4033
4053
|
priority: "p0",
|
|
4034
4054
|
content: "When you dispatch work, you OWN the review. Check list_tasks(status='needs_review') on EVERY prompt \u2014 don't wait for intercom nudges (they're unreliable). When a task shows needs_review: (1) read the deliverable (git diff in worktree, exe/output/ files, or task result summary), (2) verify it works (tsc, build, run), (3) close_task if good or create a fix task if not. Reviews sitting >30 minutes is a pipeline stall. The whole chain: worker calls update_task(done) \u2192 system flags needs_review \u2192 manager pulls and verifies \u2192 close_task \u2192 COO reviews manager's work \u2192 merge to main. Every level actively pulls \u2014 nobody waits."
|
|
4035
4055
|
},
|
|
4036
|
-
{
|
|
4037
|
-
title: "Bug fix lifecycle \u2014 triage upstream after every verified fix so customers see the status",
|
|
4038
|
-
domain: "workflow",
|
|
4039
|
-
priority: "p0",
|
|
4040
|
-
content: "When a bug from support(action='list_bugs') is fixed and verified, the reviewer MUST triage it upstream: support(action='triage_bug', id='<bug-id>', notes='<what was fixed>', fixed_version='<version>', linked_commit='<hash>'). This closes the bug in the customer's view \u2014 their COO checks list_my_bugs and sees status change from open \u2192 closed with the fix version. Without triage, customers see 'open' forever even after the fix ships. Same for feature requests: support(action='triage_feature', ..., shipped_version='<version>'). Triage is part of the review gate \u2014 a fix is not done until the upstream report is closed."
|
|
4041
|
-
},
|
|
4042
4056
|
{
|
|
4043
4057
|
title: "Intercom is a speedup, not delivery \u2014 DB is the source of truth",
|
|
4044
4058
|
domain: "architecture",
|
|
@@ -4094,7 +4108,7 @@ var init_platform_procedures = __esm({
|
|
|
4094
4108
|
title: "MCP tools \u2014 identity, behavior, and support",
|
|
4095
4109
|
domain: "tool-use",
|
|
4096
4110
|
priority: "p1",
|
|
4097
|
-
content: `identity(action="get") / get_identity: read an agent's exe.md (Layer 1 identity). identity(action="update") / update_identity: write an agent's exe.md. Identity > behavior. behavior(action="store") / store_behavior: record a correction or pattern (Layer 2 expertise). behavior(action="list") / list_behaviors: view active behaviors. behavior(action="deactivate") / deactivate_behavior: soft-delete a stale behavior. support(action="create_bug")
|
|
4111
|
+
content: `identity(action="get") / get_identity: read an agent's exe.md (Layer 1 identity). identity(action="update") / update_identity: write an agent's exe.md. Identity > behavior. behavior(action="store") / store_behavior: record a correction or pattern (Layer 2 expertise). behavior(action="list") / list_behaviors: view active behaviors. behavior(action="deactivate") / deactivate_behavior: soft-delete a stale behavior. support(action="create_bug"): file a bug report (title, description, severity p0-p3). Auto-delivers to AskExe. support(action="create_feature"): file a feature request (title, description, use_case). support(action="list_my_bugs"): check status of YOUR filed bug reports \u2014 see which are open, triaged, or fixed with version number. support(action="list_my_features"): check status of YOUR filed feature requests \u2014 see which are planned, shipped, or closed. support(action="health"): verify support server is reachable. When a bug you filed shows status='fixed' with a fixed_version, update exe-os to that version to get the fix. support(action="triage_bug"): AskExe-internal only. CRITICAL: triage uses triage_notes NOT notes.`
|
|
4098
4112
|
},
|
|
4099
4113
|
{
|
|
4100
4114
|
title: "MCP tools \u2014 communication and messaging",
|
|
@@ -1832,7 +1832,15 @@ function getClient() {
|
|
|
1832
1832
|
if (!_resilientClient) {
|
|
1833
1833
|
return _adapterClient;
|
|
1834
1834
|
}
|
|
1835
|
-
|
|
1835
|
+
if (process.env.EXE_DB_READONLY === "1") {
|
|
1836
|
+
return _resilientClient;
|
|
1837
|
+
}
|
|
1838
|
+
process.stderr.write(
|
|
1839
|
+
"[database] ERROR: Daemon is not running \u2014 refusing direct SQLite write access.\n[database] Direct writes bypass the single-writer gate and corrupt FTS5 indexes.\n[database] Restart the daemon: kill $(cat ~/.exe-os/exed.pid) && exe-os update\n[database] Or set EXE_DB_READONLY=1 if you only need read access.\n"
|
|
1840
|
+
);
|
|
1841
|
+
throw new Error(
|
|
1842
|
+
"Daemon not running. Direct SQLite writes are blocked to prevent FTS5 corruption. Restart daemon or set EXE_DB_READONLY=1 for read-only access."
|
|
1843
|
+
);
|
|
1836
1844
|
}
|
|
1837
1845
|
async function initDaemonClient() {
|
|
1838
1846
|
if (process.env.DATABASE_URL && process.env.EXE_USE_POSTGRES === "1") return;
|
|
@@ -4410,7 +4418,7 @@ var init_platform_procedures = __esm({
|
|
|
4410
4418
|
title: "Bug report status check \u2014 surface available fixes on boot",
|
|
4411
4419
|
domain: "support",
|
|
4412
4420
|
priority: "p1",
|
|
4413
|
-
content: "Once per session (COO boot only, never repeat), call
|
|
4421
|
+
content: "Once per session (COO boot only, never repeat), call support(action='list_my_bugs') to check if any previously filed bug reports have been fixed by AskExe. If any report has status 'closed' with a fixed_version, surface it to the founder immediately: '\u{1F527} N bug fix(es) available \u2014 run exe-os update to get version X.Y.Z'. You can also file new bugs with support(action='create_bug') and check status anytime with support(action='list_my_bugs'). This boot check is one-time, not a recurring poll. If the tool is unavailable, skip silently."
|
|
4414
4422
|
},
|
|
4415
4423
|
{
|
|
4416
4424
|
title: "Feature request triage \u2014 upstream feature vs local customization",
|
|
@@ -4422,7 +4430,7 @@ var init_platform_procedures = __esm({
|
|
|
4422
4430
|
title: "Feature request status check \u2014 surface shipped features on boot",
|
|
4423
4431
|
domain: "support",
|
|
4424
4432
|
priority: "p1",
|
|
4425
|
-
content: "Once per session (COO boot only, never repeat), call
|
|
4433
|
+
content: "Once per session (COO boot only, never repeat), call support(action='list_my_features') to check if any previously filed feature requests have been shipped by AskExe. If any request has status 'shipped' with a shipped_version, surface it to the founder immediately: '\u{1F680} N feature(s) shipped \u2014 run exe-os update to get version X.Y.Z'. You can also file new requests with support(action='create_feature') and check status anytime with support(action='list_my_features'). This boot check is one-time, not a recurring poll. If the tool is unavailable, skip silently."
|
|
4426
4434
|
},
|
|
4427
4435
|
// --- Tool guidance ---
|
|
4428
4436
|
{
|
|
@@ -4458,6 +4466,18 @@ var init_platform_procedures = __esm({
|
|
|
4458
4466
|
priority: "p0",
|
|
4459
4467
|
content: "exe-os has TWO version numbers that move independently. This is normal \u2014 do not treat a mismatch as an error. (1) CLI version (e.g. 0.9.89, 0.9.90) \u2014 the npm package installed locally. Updates frequently: bug fixes, new MCP tools, platform procedures, search improvements, client-side changes. Update with `npm install -g @askexenow/exe-os@latest`. (2) Stack version (e.g. 0.9.7, 0.9.8) \u2014 the Docker images on the VPS. Updates less frequently: only when server-side daemon, gateway, wiki, or CRM images need rebuilding. Update with `exe-os stack-update --target <version> --yes`. The CLI version will almost always be higher than the stack version. A CLI at 0.9.90 with a stack at 0.9.8 is perfectly normal \u2014 it means the CLI got 12 patches since the last Docker image rebuild. Only update the stack when: (a) the boot brief surfaces a fix that mentions 'stack update required', (b) a new stack manifest version is bundled in the CLI (`exe-os stack-update --check` shows pending changes), or (c) AskExe support explicitly tells you to. Do NOT attempt to make the numbers match \u2014 they are separate tracks."
|
|
4460
4468
|
},
|
|
4469
|
+
{
|
|
4470
|
+
title: "Update lifecycle \u2014 what each command does and what picks up new code",
|
|
4471
|
+
domain: "operations",
|
|
4472
|
+
priority: "p0",
|
|
4473
|
+
content: "Three update paths exist \u2014 know which does what. (1) `npm install -g @askexenow/exe-os@latest` \u2014 customer update. Replaces all dist/ files. postinstall copies slash commands AND restarts the daemon automatically. MCP server picks up new code on next `/mcp` reconnect or new Claude Code session. Hooks pick up new code on next session (they spawn fresh processes). (2) `exe-os update` \u2014 interactive update command. Runs `npm install -g` then `install --global` which restarts daemon, regenerates session wrappers, normalizes roster, registers Codex hooks. This is the recommended customer path. (3) `npm run deploy` \u2014 dev-only (COO/CTO on main branch). Builds, installs globally, runs `install --global`, restarts daemon. Never run from a worktree. NEVER confuse `exe-os setup` (first-time setup wizard for new installs) with `exe-os update` (update existing install). Setup creates encryption keys, configures cloud, runs first sync. Update just replaces code and restarts services. They are completely different commands."
|
|
4474
|
+
},
|
|
4475
|
+
{
|
|
4476
|
+
title: "First install \u2014 setup wizard and license activation",
|
|
4477
|
+
domain: "operations",
|
|
4478
|
+
priority: "p1",
|
|
4479
|
+
content: "Fresh install: `npm install -g @askexenow/exe-os` then run `exe` to start the setup wizard. The wizard prompts for: encryption passphrase (creates master key), license key (exe_sk_* from AskExe team), COO name, and optional team members. No license key = free tier (1 employee, 5K memories). After setup: hooks install automatically, MCP server registers in ~/.claude.json, daemon starts. Verify health: run `exe-os healthcheck` or use mcp_ping() tool."
|
|
4480
|
+
},
|
|
4461
4481
|
// --- Operations ---
|
|
4462
4482
|
{
|
|
4463
4483
|
title: "Managers must supervise deployed workers",
|
|
@@ -4508,12 +4528,6 @@ var init_platform_procedures = __esm({
|
|
|
4508
4528
|
priority: "p0",
|
|
4509
4529
|
content: "When you dispatch work, you OWN the review. Check list_tasks(status='needs_review') on EVERY prompt \u2014 don't wait for intercom nudges (they're unreliable). When a task shows needs_review: (1) read the deliverable (git diff in worktree, exe/output/ files, or task result summary), (2) verify it works (tsc, build, run), (3) close_task if good or create a fix task if not. Reviews sitting >30 minutes is a pipeline stall. The whole chain: worker calls update_task(done) \u2192 system flags needs_review \u2192 manager pulls and verifies \u2192 close_task \u2192 COO reviews manager's work \u2192 merge to main. Every level actively pulls \u2014 nobody waits."
|
|
4510
4530
|
},
|
|
4511
|
-
{
|
|
4512
|
-
title: "Bug fix lifecycle \u2014 triage upstream after every verified fix so customers see the status",
|
|
4513
|
-
domain: "workflow",
|
|
4514
|
-
priority: "p0",
|
|
4515
|
-
content: "When a bug from support(action='list_bugs') is fixed and verified, the reviewer MUST triage it upstream: support(action='triage_bug', id='<bug-id>', notes='<what was fixed>', fixed_version='<version>', linked_commit='<hash>'). This closes the bug in the customer's view \u2014 their COO checks list_my_bugs and sees status change from open \u2192 closed with the fix version. Without triage, customers see 'open' forever even after the fix ships. Same for feature requests: support(action='triage_feature', ..., shipped_version='<version>'). Triage is part of the review gate \u2014 a fix is not done until the upstream report is closed."
|
|
4516
|
-
},
|
|
4517
4531
|
{
|
|
4518
4532
|
title: "Intercom is a speedup, not delivery \u2014 DB is the source of truth",
|
|
4519
4533
|
domain: "architecture",
|
|
@@ -4569,7 +4583,7 @@ var init_platform_procedures = __esm({
|
|
|
4569
4583
|
title: "MCP tools \u2014 identity, behavior, and support",
|
|
4570
4584
|
domain: "tool-use",
|
|
4571
4585
|
priority: "p1",
|
|
4572
|
-
content: `identity(action="get") / get_identity: read an agent's exe.md (Layer 1 identity). identity(action="update") / update_identity: write an agent's exe.md. Identity > behavior. behavior(action="store") / store_behavior: record a correction or pattern (Layer 2 expertise). behavior(action="list") / list_behaviors: view active behaviors. behavior(action="deactivate") / deactivate_behavior: soft-delete a stale behavior. support(action="create_bug")
|
|
4586
|
+
content: `identity(action="get") / get_identity: read an agent's exe.md (Layer 1 identity). identity(action="update") / update_identity: write an agent's exe.md. Identity > behavior. behavior(action="store") / store_behavior: record a correction or pattern (Layer 2 expertise). behavior(action="list") / list_behaviors: view active behaviors. behavior(action="deactivate") / deactivate_behavior: soft-delete a stale behavior. support(action="create_bug"): file a bug report (title, description, severity p0-p3). Auto-delivers to AskExe. support(action="create_feature"): file a feature request (title, description, use_case). support(action="list_my_bugs"): check status of YOUR filed bug reports \u2014 see which are open, triaged, or fixed with version number. support(action="list_my_features"): check status of YOUR filed feature requests \u2014 see which are planned, shipped, or closed. support(action="health"): verify support server is reachable. When a bug you filed shows status='fixed' with a fixed_version, update exe-os to that version to get the fix. support(action="triage_bug"): AskExe-internal only. CRITICAL: triage uses triage_notes NOT notes.`
|
|
4573
4587
|
},
|
|
4574
4588
|
{
|
|
4575
4589
|
title: "MCP tools \u2014 communication and messaging",
|
package/dist/bin/cli.js
CHANGED
|
@@ -4487,7 +4487,15 @@ function getClient() {
|
|
|
4487
4487
|
if (!_resilientClient) {
|
|
4488
4488
|
return _adapterClient;
|
|
4489
4489
|
}
|
|
4490
|
-
|
|
4490
|
+
if (process.env.EXE_DB_READONLY === "1") {
|
|
4491
|
+
return _resilientClient;
|
|
4492
|
+
}
|
|
4493
|
+
process.stderr.write(
|
|
4494
|
+
"[database] ERROR: Daemon is not running \u2014 refusing direct SQLite write access.\n[database] Direct writes bypass the single-writer gate and corrupt FTS5 indexes.\n[database] Restart the daemon: kill $(cat ~/.exe-os/exed.pid) && exe-os update\n[database] Or set EXE_DB_READONLY=1 if you only need read access.\n"
|
|
4495
|
+
);
|
|
4496
|
+
throw new Error(
|
|
4497
|
+
"Daemon not running. Direct SQLite writes are blocked to prevent FTS5 corruption. Restart daemon or set EXE_DB_READONLY=1 for read-only access."
|
|
4498
|
+
);
|
|
4491
4499
|
}
|
|
4492
4500
|
async function initDaemonClient() {
|
|
4493
4501
|
if (process.env.DATABASE_URL && process.env.EXE_USE_POSTGRES === "1") return;
|
|
@@ -9116,7 +9124,7 @@ var init_platform_procedures = __esm({
|
|
|
9116
9124
|
title: "Bug report status check \u2014 surface available fixes on boot",
|
|
9117
9125
|
domain: "support",
|
|
9118
9126
|
priority: "p1",
|
|
9119
|
-
content: "Once per session (COO boot only, never repeat), call
|
|
9127
|
+
content: "Once per session (COO boot only, never repeat), call support(action='list_my_bugs') to check if any previously filed bug reports have been fixed by AskExe. If any report has status 'closed' with a fixed_version, surface it to the founder immediately: '\u{1F527} N bug fix(es) available \u2014 run exe-os update to get version X.Y.Z'. You can also file new bugs with support(action='create_bug') and check status anytime with support(action='list_my_bugs'). This boot check is one-time, not a recurring poll. If the tool is unavailable, skip silently."
|
|
9120
9128
|
},
|
|
9121
9129
|
{
|
|
9122
9130
|
title: "Feature request triage \u2014 upstream feature vs local customization",
|
|
@@ -9128,7 +9136,7 @@ var init_platform_procedures = __esm({
|
|
|
9128
9136
|
title: "Feature request status check \u2014 surface shipped features on boot",
|
|
9129
9137
|
domain: "support",
|
|
9130
9138
|
priority: "p1",
|
|
9131
|
-
content: "Once per session (COO boot only, never repeat), call
|
|
9139
|
+
content: "Once per session (COO boot only, never repeat), call support(action='list_my_features') to check if any previously filed feature requests have been shipped by AskExe. If any request has status 'shipped' with a shipped_version, surface it to the founder immediately: '\u{1F680} N feature(s) shipped \u2014 run exe-os update to get version X.Y.Z'. You can also file new requests with support(action='create_feature') and check status anytime with support(action='list_my_features'). This boot check is one-time, not a recurring poll. If the tool is unavailable, skip silently."
|
|
9132
9140
|
},
|
|
9133
9141
|
// --- Tool guidance ---
|
|
9134
9142
|
{
|
|
@@ -9164,6 +9172,18 @@ var init_platform_procedures = __esm({
|
|
|
9164
9172
|
priority: "p0",
|
|
9165
9173
|
content: "exe-os has TWO version numbers that move independently. This is normal \u2014 do not treat a mismatch as an error. (1) CLI version (e.g. 0.9.89, 0.9.90) \u2014 the npm package installed locally. Updates frequently: bug fixes, new MCP tools, platform procedures, search improvements, client-side changes. Update with `npm install -g @askexenow/exe-os@latest`. (2) Stack version (e.g. 0.9.7, 0.9.8) \u2014 the Docker images on the VPS. Updates less frequently: only when server-side daemon, gateway, wiki, or CRM images need rebuilding. Update with `exe-os stack-update --target <version> --yes`. The CLI version will almost always be higher than the stack version. A CLI at 0.9.90 with a stack at 0.9.8 is perfectly normal \u2014 it means the CLI got 12 patches since the last Docker image rebuild. Only update the stack when: (a) the boot brief surfaces a fix that mentions 'stack update required', (b) a new stack manifest version is bundled in the CLI (`exe-os stack-update --check` shows pending changes), or (c) AskExe support explicitly tells you to. Do NOT attempt to make the numbers match \u2014 they are separate tracks."
|
|
9166
9174
|
},
|
|
9175
|
+
{
|
|
9176
|
+
title: "Update lifecycle \u2014 what each command does and what picks up new code",
|
|
9177
|
+
domain: "operations",
|
|
9178
|
+
priority: "p0",
|
|
9179
|
+
content: "Three update paths exist \u2014 know which does what. (1) `npm install -g @askexenow/exe-os@latest` \u2014 customer update. Replaces all dist/ files. postinstall copies slash commands AND restarts the daemon automatically. MCP server picks up new code on next `/mcp` reconnect or new Claude Code session. Hooks pick up new code on next session (they spawn fresh processes). (2) `exe-os update` \u2014 interactive update command. Runs `npm install -g` then `install --global` which restarts daemon, regenerates session wrappers, normalizes roster, registers Codex hooks. This is the recommended customer path. (3) `npm run deploy` \u2014 dev-only (COO/CTO on main branch). Builds, installs globally, runs `install --global`, restarts daemon. Never run from a worktree. NEVER confuse `exe-os setup` (first-time setup wizard for new installs) with `exe-os update` (update existing install). Setup creates encryption keys, configures cloud, runs first sync. Update just replaces code and restarts services. They are completely different commands."
|
|
9180
|
+
},
|
|
9181
|
+
{
|
|
9182
|
+
title: "First install \u2014 setup wizard and license activation",
|
|
9183
|
+
domain: "operations",
|
|
9184
|
+
priority: "p1",
|
|
9185
|
+
content: "Fresh install: `npm install -g @askexenow/exe-os` then run `exe` to start the setup wizard. The wizard prompts for: encryption passphrase (creates master key), license key (exe_sk_* from AskExe team), COO name, and optional team members. No license key = free tier (1 employee, 5K memories). After setup: hooks install automatically, MCP server registers in ~/.claude.json, daemon starts. Verify health: run `exe-os healthcheck` or use mcp_ping() tool."
|
|
9186
|
+
},
|
|
9167
9187
|
// --- Operations ---
|
|
9168
9188
|
{
|
|
9169
9189
|
title: "Managers must supervise deployed workers",
|
|
@@ -9214,12 +9234,6 @@ var init_platform_procedures = __esm({
|
|
|
9214
9234
|
priority: "p0",
|
|
9215
9235
|
content: "When you dispatch work, you OWN the review. Check list_tasks(status='needs_review') on EVERY prompt \u2014 don't wait for intercom nudges (they're unreliable). When a task shows needs_review: (1) read the deliverable (git diff in worktree, exe/output/ files, or task result summary), (2) verify it works (tsc, build, run), (3) close_task if good or create a fix task if not. Reviews sitting >30 minutes is a pipeline stall. The whole chain: worker calls update_task(done) \u2192 system flags needs_review \u2192 manager pulls and verifies \u2192 close_task \u2192 COO reviews manager's work \u2192 merge to main. Every level actively pulls \u2014 nobody waits."
|
|
9216
9236
|
},
|
|
9217
|
-
{
|
|
9218
|
-
title: "Bug fix lifecycle \u2014 triage upstream after every verified fix so customers see the status",
|
|
9219
|
-
domain: "workflow",
|
|
9220
|
-
priority: "p0",
|
|
9221
|
-
content: "When a bug from support(action='list_bugs') is fixed and verified, the reviewer MUST triage it upstream: support(action='triage_bug', id='<bug-id>', notes='<what was fixed>', fixed_version='<version>', linked_commit='<hash>'). This closes the bug in the customer's view \u2014 their COO checks list_my_bugs and sees status change from open \u2192 closed with the fix version. Without triage, customers see 'open' forever even after the fix ships. Same for feature requests: support(action='triage_feature', ..., shipped_version='<version>'). Triage is part of the review gate \u2014 a fix is not done until the upstream report is closed."
|
|
9222
|
-
},
|
|
9223
9237
|
{
|
|
9224
9238
|
title: "Intercom is a speedup, not delivery \u2014 DB is the source of truth",
|
|
9225
9239
|
domain: "architecture",
|
|
@@ -9275,7 +9289,7 @@ var init_platform_procedures = __esm({
|
|
|
9275
9289
|
title: "MCP tools \u2014 identity, behavior, and support",
|
|
9276
9290
|
domain: "tool-use",
|
|
9277
9291
|
priority: "p1",
|
|
9278
|
-
content: `identity(action="get") / get_identity: read an agent's exe.md (Layer 1 identity). identity(action="update") / update_identity: write an agent's exe.md. Identity > behavior. behavior(action="store") / store_behavior: record a correction or pattern (Layer 2 expertise). behavior(action="list") / list_behaviors: view active behaviors. behavior(action="deactivate") / deactivate_behavior: soft-delete a stale behavior. support(action="create_bug")
|
|
9292
|
+
content: `identity(action="get") / get_identity: read an agent's exe.md (Layer 1 identity). identity(action="update") / update_identity: write an agent's exe.md. Identity > behavior. behavior(action="store") / store_behavior: record a correction or pattern (Layer 2 expertise). behavior(action="list") / list_behaviors: view active behaviors. behavior(action="deactivate") / deactivate_behavior: soft-delete a stale behavior. support(action="create_bug"): file a bug report (title, description, severity p0-p3). Auto-delivers to AskExe. support(action="create_feature"): file a feature request (title, description, use_case). support(action="list_my_bugs"): check status of YOUR filed bug reports \u2014 see which are open, triaged, or fixed with version number. support(action="list_my_features"): check status of YOUR filed feature requests \u2014 see which are planned, shipped, or closed. support(action="health"): verify support server is reachable. When a bug you filed shows status='fixed' with a fixed_version, update exe-os to that version to get the fix. support(action="triage_bug"): AskExe-internal only. CRITICAL: triage uses triage_notes NOT notes.`
|
|
9279
9293
|
},
|
|
9280
9294
|
{
|
|
9281
9295
|
title: "MCP tools \u2014 communication and messaging",
|
package/dist/bin/exe-agent.js
CHANGED
|
@@ -1401,7 +1401,7 @@ var PLATFORM_PROCEDURES = [
|
|
|
1401
1401
|
title: "Bug report status check \u2014 surface available fixes on boot",
|
|
1402
1402
|
domain: "support",
|
|
1403
1403
|
priority: "p1",
|
|
1404
|
-
content: "Once per session (COO boot only, never repeat), call
|
|
1404
|
+
content: "Once per session (COO boot only, never repeat), call support(action='list_my_bugs') to check if any previously filed bug reports have been fixed by AskExe. If any report has status 'closed' with a fixed_version, surface it to the founder immediately: '\u{1F527} N bug fix(es) available \u2014 run exe-os update to get version X.Y.Z'. You can also file new bugs with support(action='create_bug') and check status anytime with support(action='list_my_bugs'). This boot check is one-time, not a recurring poll. If the tool is unavailable, skip silently."
|
|
1405
1405
|
},
|
|
1406
1406
|
{
|
|
1407
1407
|
title: "Feature request triage \u2014 upstream feature vs local customization",
|
|
@@ -1413,7 +1413,7 @@ var PLATFORM_PROCEDURES = [
|
|
|
1413
1413
|
title: "Feature request status check \u2014 surface shipped features on boot",
|
|
1414
1414
|
domain: "support",
|
|
1415
1415
|
priority: "p1",
|
|
1416
|
-
content: "Once per session (COO boot only, never repeat), call
|
|
1416
|
+
content: "Once per session (COO boot only, never repeat), call support(action='list_my_features') to check if any previously filed feature requests have been shipped by AskExe. If any request has status 'shipped' with a shipped_version, surface it to the founder immediately: '\u{1F680} N feature(s) shipped \u2014 run exe-os update to get version X.Y.Z'. You can also file new requests with support(action='create_feature') and check status anytime with support(action='list_my_features'). This boot check is one-time, not a recurring poll. If the tool is unavailable, skip silently."
|
|
1417
1417
|
},
|
|
1418
1418
|
// --- Tool guidance ---
|
|
1419
1419
|
{
|
|
@@ -1449,6 +1449,18 @@ var PLATFORM_PROCEDURES = [
|
|
|
1449
1449
|
priority: "p0",
|
|
1450
1450
|
content: "exe-os has TWO version numbers that move independently. This is normal \u2014 do not treat a mismatch as an error. (1) CLI version (e.g. 0.9.89, 0.9.90) \u2014 the npm package installed locally. Updates frequently: bug fixes, new MCP tools, platform procedures, search improvements, client-side changes. Update with `npm install -g @askexenow/exe-os@latest`. (2) Stack version (e.g. 0.9.7, 0.9.8) \u2014 the Docker images on the VPS. Updates less frequently: only when server-side daemon, gateway, wiki, or CRM images need rebuilding. Update with `exe-os stack-update --target <version> --yes`. The CLI version will almost always be higher than the stack version. A CLI at 0.9.90 with a stack at 0.9.8 is perfectly normal \u2014 it means the CLI got 12 patches since the last Docker image rebuild. Only update the stack when: (a) the boot brief surfaces a fix that mentions 'stack update required', (b) a new stack manifest version is bundled in the CLI (`exe-os stack-update --check` shows pending changes), or (c) AskExe support explicitly tells you to. Do NOT attempt to make the numbers match \u2014 they are separate tracks."
|
|
1451
1451
|
},
|
|
1452
|
+
{
|
|
1453
|
+
title: "Update lifecycle \u2014 what each command does and what picks up new code",
|
|
1454
|
+
domain: "operations",
|
|
1455
|
+
priority: "p0",
|
|
1456
|
+
content: "Three update paths exist \u2014 know which does what. (1) `npm install -g @askexenow/exe-os@latest` \u2014 customer update. Replaces all dist/ files. postinstall copies slash commands AND restarts the daemon automatically. MCP server picks up new code on next `/mcp` reconnect or new Claude Code session. Hooks pick up new code on next session (they spawn fresh processes). (2) `exe-os update` \u2014 interactive update command. Runs `npm install -g` then `install --global` which restarts daemon, regenerates session wrappers, normalizes roster, registers Codex hooks. This is the recommended customer path. (3) `npm run deploy` \u2014 dev-only (COO/CTO on main branch). Builds, installs globally, runs `install --global`, restarts daemon. Never run from a worktree. NEVER confuse `exe-os setup` (first-time setup wizard for new installs) with `exe-os update` (update existing install). Setup creates encryption keys, configures cloud, runs first sync. Update just replaces code and restarts services. They are completely different commands."
|
|
1457
|
+
},
|
|
1458
|
+
{
|
|
1459
|
+
title: "First install \u2014 setup wizard and license activation",
|
|
1460
|
+
domain: "operations",
|
|
1461
|
+
priority: "p1",
|
|
1462
|
+
content: "Fresh install: `npm install -g @askexenow/exe-os` then run `exe` to start the setup wizard. The wizard prompts for: encryption passphrase (creates master key), license key (exe_sk_* from AskExe team), COO name, and optional team members. No license key = free tier (1 employee, 5K memories). After setup: hooks install automatically, MCP server registers in ~/.claude.json, daemon starts. Verify health: run `exe-os healthcheck` or use mcp_ping() tool."
|
|
1463
|
+
},
|
|
1452
1464
|
// --- Operations ---
|
|
1453
1465
|
{
|
|
1454
1466
|
title: "Managers must supervise deployed workers",
|
|
@@ -1499,12 +1511,6 @@ var PLATFORM_PROCEDURES = [
|
|
|
1499
1511
|
priority: "p0",
|
|
1500
1512
|
content: "When you dispatch work, you OWN the review. Check list_tasks(status='needs_review') on EVERY prompt \u2014 don't wait for intercom nudges (they're unreliable). When a task shows needs_review: (1) read the deliverable (git diff in worktree, exe/output/ files, or task result summary), (2) verify it works (tsc, build, run), (3) close_task if good or create a fix task if not. Reviews sitting >30 minutes is a pipeline stall. The whole chain: worker calls update_task(done) \u2192 system flags needs_review \u2192 manager pulls and verifies \u2192 close_task \u2192 COO reviews manager's work \u2192 merge to main. Every level actively pulls \u2014 nobody waits."
|
|
1501
1513
|
},
|
|
1502
|
-
{
|
|
1503
|
-
title: "Bug fix lifecycle \u2014 triage upstream after every verified fix so customers see the status",
|
|
1504
|
-
domain: "workflow",
|
|
1505
|
-
priority: "p0",
|
|
1506
|
-
content: "When a bug from support(action='list_bugs') is fixed and verified, the reviewer MUST triage it upstream: support(action='triage_bug', id='<bug-id>', notes='<what was fixed>', fixed_version='<version>', linked_commit='<hash>'). This closes the bug in the customer's view \u2014 their COO checks list_my_bugs and sees status change from open \u2192 closed with the fix version. Without triage, customers see 'open' forever even after the fix ships. Same for feature requests: support(action='triage_feature', ..., shipped_version='<version>'). Triage is part of the review gate \u2014 a fix is not done until the upstream report is closed."
|
|
1507
|
-
},
|
|
1508
1514
|
{
|
|
1509
1515
|
title: "Intercom is a speedup, not delivery \u2014 DB is the source of truth",
|
|
1510
1516
|
domain: "architecture",
|
|
@@ -1560,7 +1566,7 @@ var PLATFORM_PROCEDURES = [
|
|
|
1560
1566
|
title: "MCP tools \u2014 identity, behavior, and support",
|
|
1561
1567
|
domain: "tool-use",
|
|
1562
1568
|
priority: "p1",
|
|
1563
|
-
content: `identity(action="get") / get_identity: read an agent's exe.md (Layer 1 identity). identity(action="update") / update_identity: write an agent's exe.md. Identity > behavior. behavior(action="store") / store_behavior: record a correction or pattern (Layer 2 expertise). behavior(action="list") / list_behaviors: view active behaviors. behavior(action="deactivate") / deactivate_behavior: soft-delete a stale behavior. support(action="create_bug")
|
|
1569
|
+
content: `identity(action="get") / get_identity: read an agent's exe.md (Layer 1 identity). identity(action="update") / update_identity: write an agent's exe.md. Identity > behavior. behavior(action="store") / store_behavior: record a correction or pattern (Layer 2 expertise). behavior(action="list") / list_behaviors: view active behaviors. behavior(action="deactivate") / deactivate_behavior: soft-delete a stale behavior. support(action="create_bug"): file a bug report (title, description, severity p0-p3). Auto-delivers to AskExe. support(action="create_feature"): file a feature request (title, description, use_case). support(action="list_my_bugs"): check status of YOUR filed bug reports \u2014 see which are open, triaged, or fixed with version number. support(action="list_my_features"): check status of YOUR filed feature requests \u2014 see which are planned, shipped, or closed. support(action="health"): verify support server is reachable. When a bug you filed shows status='fixed' with a fixed_version, update exe-os to that version to get the fix. support(action="triage_bug"): AskExe-internal only. CRITICAL: triage uses triage_notes NOT notes.`
|
|
1564
1570
|
},
|
|
1565
1571
|
{
|
|
1566
1572
|
title: "MCP tools \u2014 communication and messaging",
|
package/dist/bin/exe-assign.js
CHANGED
|
@@ -1756,7 +1756,15 @@ function getClient() {
|
|
|
1756
1756
|
if (!_resilientClient) {
|
|
1757
1757
|
return _adapterClient;
|
|
1758
1758
|
}
|
|
1759
|
-
|
|
1759
|
+
if (process.env.EXE_DB_READONLY === "1") {
|
|
1760
|
+
return _resilientClient;
|
|
1761
|
+
}
|
|
1762
|
+
process.stderr.write(
|
|
1763
|
+
"[database] ERROR: Daemon is not running \u2014 refusing direct SQLite write access.\n[database] Direct writes bypass the single-writer gate and corrupt FTS5 indexes.\n[database] Restart the daemon: kill $(cat ~/.exe-os/exed.pid) && exe-os update\n[database] Or set EXE_DB_READONLY=1 if you only need read access.\n"
|
|
1764
|
+
);
|
|
1765
|
+
throw new Error(
|
|
1766
|
+
"Daemon not running. Direct SQLite writes are blocked to prevent FTS5 corruption. Restart daemon or set EXE_DB_READONLY=1 for read-only access."
|
|
1767
|
+
);
|
|
1760
1768
|
}
|
|
1761
1769
|
async function initDaemonClient() {
|
|
1762
1770
|
if (process.env.DATABASE_URL && process.env.EXE_USE_POSTGRES === "1") return;
|
|
@@ -3777,7 +3785,7 @@ var init_platform_procedures = __esm({
|
|
|
3777
3785
|
title: "Bug report status check \u2014 surface available fixes on boot",
|
|
3778
3786
|
domain: "support",
|
|
3779
3787
|
priority: "p1",
|
|
3780
|
-
content: "Once per session (COO boot only, never repeat), call
|
|
3788
|
+
content: "Once per session (COO boot only, never repeat), call support(action='list_my_bugs') to check if any previously filed bug reports have been fixed by AskExe. If any report has status 'closed' with a fixed_version, surface it to the founder immediately: '\u{1F527} N bug fix(es) available \u2014 run exe-os update to get version X.Y.Z'. You can also file new bugs with support(action='create_bug') and check status anytime with support(action='list_my_bugs'). This boot check is one-time, not a recurring poll. If the tool is unavailable, skip silently."
|
|
3781
3789
|
},
|
|
3782
3790
|
{
|
|
3783
3791
|
title: "Feature request triage \u2014 upstream feature vs local customization",
|
|
@@ -3789,7 +3797,7 @@ var init_platform_procedures = __esm({
|
|
|
3789
3797
|
title: "Feature request status check \u2014 surface shipped features on boot",
|
|
3790
3798
|
domain: "support",
|
|
3791
3799
|
priority: "p1",
|
|
3792
|
-
content: "Once per session (COO boot only, never repeat), call
|
|
3800
|
+
content: "Once per session (COO boot only, never repeat), call support(action='list_my_features') to check if any previously filed feature requests have been shipped by AskExe. If any request has status 'shipped' with a shipped_version, surface it to the founder immediately: '\u{1F680} N feature(s) shipped \u2014 run exe-os update to get version X.Y.Z'. You can also file new requests with support(action='create_feature') and check status anytime with support(action='list_my_features'). This boot check is one-time, not a recurring poll. If the tool is unavailable, skip silently."
|
|
3793
3801
|
},
|
|
3794
3802
|
// --- Tool guidance ---
|
|
3795
3803
|
{
|
|
@@ -3825,6 +3833,18 @@ var init_platform_procedures = __esm({
|
|
|
3825
3833
|
priority: "p0",
|
|
3826
3834
|
content: "exe-os has TWO version numbers that move independently. This is normal \u2014 do not treat a mismatch as an error. (1) CLI version (e.g. 0.9.89, 0.9.90) \u2014 the npm package installed locally. Updates frequently: bug fixes, new MCP tools, platform procedures, search improvements, client-side changes. Update with `npm install -g @askexenow/exe-os@latest`. (2) Stack version (e.g. 0.9.7, 0.9.8) \u2014 the Docker images on the VPS. Updates less frequently: only when server-side daemon, gateway, wiki, or CRM images need rebuilding. Update with `exe-os stack-update --target <version> --yes`. The CLI version will almost always be higher than the stack version. A CLI at 0.9.90 with a stack at 0.9.8 is perfectly normal \u2014 it means the CLI got 12 patches since the last Docker image rebuild. Only update the stack when: (a) the boot brief surfaces a fix that mentions 'stack update required', (b) a new stack manifest version is bundled in the CLI (`exe-os stack-update --check` shows pending changes), or (c) AskExe support explicitly tells you to. Do NOT attempt to make the numbers match \u2014 they are separate tracks."
|
|
3827
3835
|
},
|
|
3836
|
+
{
|
|
3837
|
+
title: "Update lifecycle \u2014 what each command does and what picks up new code",
|
|
3838
|
+
domain: "operations",
|
|
3839
|
+
priority: "p0",
|
|
3840
|
+
content: "Three update paths exist \u2014 know which does what. (1) `npm install -g @askexenow/exe-os@latest` \u2014 customer update. Replaces all dist/ files. postinstall copies slash commands AND restarts the daemon automatically. MCP server picks up new code on next `/mcp` reconnect or new Claude Code session. Hooks pick up new code on next session (they spawn fresh processes). (2) `exe-os update` \u2014 interactive update command. Runs `npm install -g` then `install --global` which restarts daemon, regenerates session wrappers, normalizes roster, registers Codex hooks. This is the recommended customer path. (3) `npm run deploy` \u2014 dev-only (COO/CTO on main branch). Builds, installs globally, runs `install --global`, restarts daemon. Never run from a worktree. NEVER confuse `exe-os setup` (first-time setup wizard for new installs) with `exe-os update` (update existing install). Setup creates encryption keys, configures cloud, runs first sync. Update just replaces code and restarts services. They are completely different commands."
|
|
3841
|
+
},
|
|
3842
|
+
{
|
|
3843
|
+
title: "First install \u2014 setup wizard and license activation",
|
|
3844
|
+
domain: "operations",
|
|
3845
|
+
priority: "p1",
|
|
3846
|
+
content: "Fresh install: `npm install -g @askexenow/exe-os` then run `exe` to start the setup wizard. The wizard prompts for: encryption passphrase (creates master key), license key (exe_sk_* from AskExe team), COO name, and optional team members. No license key = free tier (1 employee, 5K memories). After setup: hooks install automatically, MCP server registers in ~/.claude.json, daemon starts. Verify health: run `exe-os healthcheck` or use mcp_ping() tool."
|
|
3847
|
+
},
|
|
3828
3848
|
// --- Operations ---
|
|
3829
3849
|
{
|
|
3830
3850
|
title: "Managers must supervise deployed workers",
|
|
@@ -3875,12 +3895,6 @@ var init_platform_procedures = __esm({
|
|
|
3875
3895
|
priority: "p0",
|
|
3876
3896
|
content: "When you dispatch work, you OWN the review. Check list_tasks(status='needs_review') on EVERY prompt \u2014 don't wait for intercom nudges (they're unreliable). When a task shows needs_review: (1) read the deliverable (git diff in worktree, exe/output/ files, or task result summary), (2) verify it works (tsc, build, run), (3) close_task if good or create a fix task if not. Reviews sitting >30 minutes is a pipeline stall. The whole chain: worker calls update_task(done) \u2192 system flags needs_review \u2192 manager pulls and verifies \u2192 close_task \u2192 COO reviews manager's work \u2192 merge to main. Every level actively pulls \u2014 nobody waits."
|
|
3877
3897
|
},
|
|
3878
|
-
{
|
|
3879
|
-
title: "Bug fix lifecycle \u2014 triage upstream after every verified fix so customers see the status",
|
|
3880
|
-
domain: "workflow",
|
|
3881
|
-
priority: "p0",
|
|
3882
|
-
content: "When a bug from support(action='list_bugs') is fixed and verified, the reviewer MUST triage it upstream: support(action='triage_bug', id='<bug-id>', notes='<what was fixed>', fixed_version='<version>', linked_commit='<hash>'). This closes the bug in the customer's view \u2014 their COO checks list_my_bugs and sees status change from open \u2192 closed with the fix version. Without triage, customers see 'open' forever even after the fix ships. Same for feature requests: support(action='triage_feature', ..., shipped_version='<version>'). Triage is part of the review gate \u2014 a fix is not done until the upstream report is closed."
|
|
3883
|
-
},
|
|
3884
3898
|
{
|
|
3885
3899
|
title: "Intercom is a speedup, not delivery \u2014 DB is the source of truth",
|
|
3886
3900
|
domain: "architecture",
|
|
@@ -3936,7 +3950,7 @@ var init_platform_procedures = __esm({
|
|
|
3936
3950
|
title: "MCP tools \u2014 identity, behavior, and support",
|
|
3937
3951
|
domain: "tool-use",
|
|
3938
3952
|
priority: "p1",
|
|
3939
|
-
content: `identity(action="get") / get_identity: read an agent's exe.md (Layer 1 identity). identity(action="update") / update_identity: write an agent's exe.md. Identity > behavior. behavior(action="store") / store_behavior: record a correction or pattern (Layer 2 expertise). behavior(action="list") / list_behaviors: view active behaviors. behavior(action="deactivate") / deactivate_behavior: soft-delete a stale behavior. support(action="create_bug")
|
|
3953
|
+
content: `identity(action="get") / get_identity: read an agent's exe.md (Layer 1 identity). identity(action="update") / update_identity: write an agent's exe.md. Identity > behavior. behavior(action="store") / store_behavior: record a correction or pattern (Layer 2 expertise). behavior(action="list") / list_behaviors: view active behaviors. behavior(action="deactivate") / deactivate_behavior: soft-delete a stale behavior. support(action="create_bug"): file a bug report (title, description, severity p0-p3). Auto-delivers to AskExe. support(action="create_feature"): file a feature request (title, description, use_case). support(action="list_my_bugs"): check status of YOUR filed bug reports \u2014 see which are open, triaged, or fixed with version number. support(action="list_my_features"): check status of YOUR filed feature requests \u2014 see which are planned, shipped, or closed. support(action="health"): verify support server is reachable. When a bug you filed shows status='fixed' with a fixed_version, update exe-os to that version to get the fix. support(action="triage_bug"): AskExe-internal only. CRITICAL: triage uses triage_notes NOT notes.`
|
|
3940
3954
|
},
|
|
3941
3955
|
{
|
|
3942
3956
|
title: "MCP tools \u2014 communication and messaging",
|
package/dist/bin/exe-boot.js
CHANGED
|
@@ -1908,7 +1908,15 @@ function getClient() {
|
|
|
1908
1908
|
if (!_resilientClient) {
|
|
1909
1909
|
return _adapterClient;
|
|
1910
1910
|
}
|
|
1911
|
-
|
|
1911
|
+
if (process.env.EXE_DB_READONLY === "1") {
|
|
1912
|
+
return _resilientClient;
|
|
1913
|
+
}
|
|
1914
|
+
process.stderr.write(
|
|
1915
|
+
"[database] ERROR: Daemon is not running \u2014 refusing direct SQLite write access.\n[database] Direct writes bypass the single-writer gate and corrupt FTS5 indexes.\n[database] Restart the daemon: kill $(cat ~/.exe-os/exed.pid) && exe-os update\n[database] Or set EXE_DB_READONLY=1 if you only need read access.\n"
|
|
1916
|
+
);
|
|
1917
|
+
throw new Error(
|
|
1918
|
+
"Daemon not running. Direct SQLite writes are blocked to prevent FTS5 corruption. Restart daemon or set EXE_DB_READONLY=1 for read-only access."
|
|
1919
|
+
);
|
|
1912
1920
|
}
|
|
1913
1921
|
async function initDaemonClient() {
|
|
1914
1922
|
if (process.env.DATABASE_URL && process.env.EXE_USE_POSTGRES === "1") return;
|
|
@@ -3465,7 +3473,7 @@ var init_platform_procedures = __esm({
|
|
|
3465
3473
|
title: "Bug report status check \u2014 surface available fixes on boot",
|
|
3466
3474
|
domain: "support",
|
|
3467
3475
|
priority: "p1",
|
|
3468
|
-
content: "Once per session (COO boot only, never repeat), call
|
|
3476
|
+
content: "Once per session (COO boot only, never repeat), call support(action='list_my_bugs') to check if any previously filed bug reports have been fixed by AskExe. If any report has status 'closed' with a fixed_version, surface it to the founder immediately: '\u{1F527} N bug fix(es) available \u2014 run exe-os update to get version X.Y.Z'. You can also file new bugs with support(action='create_bug') and check status anytime with support(action='list_my_bugs'). This boot check is one-time, not a recurring poll. If the tool is unavailable, skip silently."
|
|
3469
3477
|
},
|
|
3470
3478
|
{
|
|
3471
3479
|
title: "Feature request triage \u2014 upstream feature vs local customization",
|
|
@@ -3477,7 +3485,7 @@ var init_platform_procedures = __esm({
|
|
|
3477
3485
|
title: "Feature request status check \u2014 surface shipped features on boot",
|
|
3478
3486
|
domain: "support",
|
|
3479
3487
|
priority: "p1",
|
|
3480
|
-
content: "Once per session (COO boot only, never repeat), call
|
|
3488
|
+
content: "Once per session (COO boot only, never repeat), call support(action='list_my_features') to check if any previously filed feature requests have been shipped by AskExe. If any request has status 'shipped' with a shipped_version, surface it to the founder immediately: '\u{1F680} N feature(s) shipped \u2014 run exe-os update to get version X.Y.Z'. You can also file new requests with support(action='create_feature') and check status anytime with support(action='list_my_features'). This boot check is one-time, not a recurring poll. If the tool is unavailable, skip silently."
|
|
3481
3489
|
},
|
|
3482
3490
|
// --- Tool guidance ---
|
|
3483
3491
|
{
|
|
@@ -3513,6 +3521,18 @@ var init_platform_procedures = __esm({
|
|
|
3513
3521
|
priority: "p0",
|
|
3514
3522
|
content: "exe-os has TWO version numbers that move independently. This is normal \u2014 do not treat a mismatch as an error. (1) CLI version (e.g. 0.9.89, 0.9.90) \u2014 the npm package installed locally. Updates frequently: bug fixes, new MCP tools, platform procedures, search improvements, client-side changes. Update with `npm install -g @askexenow/exe-os@latest`. (2) Stack version (e.g. 0.9.7, 0.9.8) \u2014 the Docker images on the VPS. Updates less frequently: only when server-side daemon, gateway, wiki, or CRM images need rebuilding. Update with `exe-os stack-update --target <version> --yes`. The CLI version will almost always be higher than the stack version. A CLI at 0.9.90 with a stack at 0.9.8 is perfectly normal \u2014 it means the CLI got 12 patches since the last Docker image rebuild. Only update the stack when: (a) the boot brief surfaces a fix that mentions 'stack update required', (b) a new stack manifest version is bundled in the CLI (`exe-os stack-update --check` shows pending changes), or (c) AskExe support explicitly tells you to. Do NOT attempt to make the numbers match \u2014 they are separate tracks."
|
|
3515
3523
|
},
|
|
3524
|
+
{
|
|
3525
|
+
title: "Update lifecycle \u2014 what each command does and what picks up new code",
|
|
3526
|
+
domain: "operations",
|
|
3527
|
+
priority: "p0",
|
|
3528
|
+
content: "Three update paths exist \u2014 know which does what. (1) `npm install -g @askexenow/exe-os@latest` \u2014 customer update. Replaces all dist/ files. postinstall copies slash commands AND restarts the daemon automatically. MCP server picks up new code on next `/mcp` reconnect or new Claude Code session. Hooks pick up new code on next session (they spawn fresh processes). (2) `exe-os update` \u2014 interactive update command. Runs `npm install -g` then `install --global` which restarts daemon, regenerates session wrappers, normalizes roster, registers Codex hooks. This is the recommended customer path. (3) `npm run deploy` \u2014 dev-only (COO/CTO on main branch). Builds, installs globally, runs `install --global`, restarts daemon. Never run from a worktree. NEVER confuse `exe-os setup` (first-time setup wizard for new installs) with `exe-os update` (update existing install). Setup creates encryption keys, configures cloud, runs first sync. Update just replaces code and restarts services. They are completely different commands."
|
|
3529
|
+
},
|
|
3530
|
+
{
|
|
3531
|
+
title: "First install \u2014 setup wizard and license activation",
|
|
3532
|
+
domain: "operations",
|
|
3533
|
+
priority: "p1",
|
|
3534
|
+
content: "Fresh install: `npm install -g @askexenow/exe-os` then run `exe` to start the setup wizard. The wizard prompts for: encryption passphrase (creates master key), license key (exe_sk_* from AskExe team), COO name, and optional team members. No license key = free tier (1 employee, 5K memories). After setup: hooks install automatically, MCP server registers in ~/.claude.json, daemon starts. Verify health: run `exe-os healthcheck` or use mcp_ping() tool."
|
|
3535
|
+
},
|
|
3516
3536
|
// --- Operations ---
|
|
3517
3537
|
{
|
|
3518
3538
|
title: "Managers must supervise deployed workers",
|
|
@@ -3563,12 +3583,6 @@ var init_platform_procedures = __esm({
|
|
|
3563
3583
|
priority: "p0",
|
|
3564
3584
|
content: "When you dispatch work, you OWN the review. Check list_tasks(status='needs_review') on EVERY prompt \u2014 don't wait for intercom nudges (they're unreliable). When a task shows needs_review: (1) read the deliverable (git diff in worktree, exe/output/ files, or task result summary), (2) verify it works (tsc, build, run), (3) close_task if good or create a fix task if not. Reviews sitting >30 minutes is a pipeline stall. The whole chain: worker calls update_task(done) \u2192 system flags needs_review \u2192 manager pulls and verifies \u2192 close_task \u2192 COO reviews manager's work \u2192 merge to main. Every level actively pulls \u2014 nobody waits."
|
|
3565
3585
|
},
|
|
3566
|
-
{
|
|
3567
|
-
title: "Bug fix lifecycle \u2014 triage upstream after every verified fix so customers see the status",
|
|
3568
|
-
domain: "workflow",
|
|
3569
|
-
priority: "p0",
|
|
3570
|
-
content: "When a bug from support(action='list_bugs') is fixed and verified, the reviewer MUST triage it upstream: support(action='triage_bug', id='<bug-id>', notes='<what was fixed>', fixed_version='<version>', linked_commit='<hash>'). This closes the bug in the customer's view \u2014 their COO checks list_my_bugs and sees status change from open \u2192 closed with the fix version. Without triage, customers see 'open' forever even after the fix ships. Same for feature requests: support(action='triage_feature', ..., shipped_version='<version>'). Triage is part of the review gate \u2014 a fix is not done until the upstream report is closed."
|
|
3571
|
-
},
|
|
3572
3586
|
{
|
|
3573
3587
|
title: "Intercom is a speedup, not delivery \u2014 DB is the source of truth",
|
|
3574
3588
|
domain: "architecture",
|
|
@@ -3624,7 +3638,7 @@ var init_platform_procedures = __esm({
|
|
|
3624
3638
|
title: "MCP tools \u2014 identity, behavior, and support",
|
|
3625
3639
|
domain: "tool-use",
|
|
3626
3640
|
priority: "p1",
|
|
3627
|
-
content: `identity(action="get") / get_identity: read an agent's exe.md (Layer 1 identity). identity(action="update") / update_identity: write an agent's exe.md. Identity > behavior. behavior(action="store") / store_behavior: record a correction or pattern (Layer 2 expertise). behavior(action="list") / list_behaviors: view active behaviors. behavior(action="deactivate") / deactivate_behavior: soft-delete a stale behavior. support(action="create_bug")
|
|
3641
|
+
content: `identity(action="get") / get_identity: read an agent's exe.md (Layer 1 identity). identity(action="update") / update_identity: write an agent's exe.md. Identity > behavior. behavior(action="store") / store_behavior: record a correction or pattern (Layer 2 expertise). behavior(action="list") / list_behaviors: view active behaviors. behavior(action="deactivate") / deactivate_behavior: soft-delete a stale behavior. support(action="create_bug"): file a bug report (title, description, severity p0-p3). Auto-delivers to AskExe. support(action="create_feature"): file a feature request (title, description, use_case). support(action="list_my_bugs"): check status of YOUR filed bug reports \u2014 see which are open, triaged, or fixed with version number. support(action="list_my_features"): check status of YOUR filed feature requests \u2014 see which are planned, shipped, or closed. support(action="health"): verify support server is reachable. When a bug you filed shows status='fixed' with a fixed_version, update exe-os to that version to get the fix. support(action="triage_bug"): AskExe-internal only. CRITICAL: triage uses triage_notes NOT notes.`
|
|
3628
3642
|
},
|
|
3629
3643
|
{
|
|
3630
3644
|
title: "MCP tools \u2014 communication and messaging",
|
package/dist/bin/exe-call.js
CHANGED
|
@@ -338,7 +338,7 @@ var init_platform_procedures = __esm({
|
|
|
338
338
|
title: "Bug report status check \u2014 surface available fixes on boot",
|
|
339
339
|
domain: "support",
|
|
340
340
|
priority: "p1",
|
|
341
|
-
content: "Once per session (COO boot only, never repeat), call
|
|
341
|
+
content: "Once per session (COO boot only, never repeat), call support(action='list_my_bugs') to check if any previously filed bug reports have been fixed by AskExe. If any report has status 'closed' with a fixed_version, surface it to the founder immediately: '\u{1F527} N bug fix(es) available \u2014 run exe-os update to get version X.Y.Z'. You can also file new bugs with support(action='create_bug') and check status anytime with support(action='list_my_bugs'). This boot check is one-time, not a recurring poll. If the tool is unavailable, skip silently."
|
|
342
342
|
},
|
|
343
343
|
{
|
|
344
344
|
title: "Feature request triage \u2014 upstream feature vs local customization",
|
|
@@ -350,7 +350,7 @@ var init_platform_procedures = __esm({
|
|
|
350
350
|
title: "Feature request status check \u2014 surface shipped features on boot",
|
|
351
351
|
domain: "support",
|
|
352
352
|
priority: "p1",
|
|
353
|
-
content: "Once per session (COO boot only, never repeat), call
|
|
353
|
+
content: "Once per session (COO boot only, never repeat), call support(action='list_my_features') to check if any previously filed feature requests have been shipped by AskExe. If any request has status 'shipped' with a shipped_version, surface it to the founder immediately: '\u{1F680} N feature(s) shipped \u2014 run exe-os update to get version X.Y.Z'. You can also file new requests with support(action='create_feature') and check status anytime with support(action='list_my_features'). This boot check is one-time, not a recurring poll. If the tool is unavailable, skip silently."
|
|
354
354
|
},
|
|
355
355
|
// --- Tool guidance ---
|
|
356
356
|
{
|
|
@@ -386,6 +386,18 @@ var init_platform_procedures = __esm({
|
|
|
386
386
|
priority: "p0",
|
|
387
387
|
content: "exe-os has TWO version numbers that move independently. This is normal \u2014 do not treat a mismatch as an error. (1) CLI version (e.g. 0.9.89, 0.9.90) \u2014 the npm package installed locally. Updates frequently: bug fixes, new MCP tools, platform procedures, search improvements, client-side changes. Update with `npm install -g @askexenow/exe-os@latest`. (2) Stack version (e.g. 0.9.7, 0.9.8) \u2014 the Docker images on the VPS. Updates less frequently: only when server-side daemon, gateway, wiki, or CRM images need rebuilding. Update with `exe-os stack-update --target <version> --yes`. The CLI version will almost always be higher than the stack version. A CLI at 0.9.90 with a stack at 0.9.8 is perfectly normal \u2014 it means the CLI got 12 patches since the last Docker image rebuild. Only update the stack when: (a) the boot brief surfaces a fix that mentions 'stack update required', (b) a new stack manifest version is bundled in the CLI (`exe-os stack-update --check` shows pending changes), or (c) AskExe support explicitly tells you to. Do NOT attempt to make the numbers match \u2014 they are separate tracks."
|
|
388
388
|
},
|
|
389
|
+
{
|
|
390
|
+
title: "Update lifecycle \u2014 what each command does and what picks up new code",
|
|
391
|
+
domain: "operations",
|
|
392
|
+
priority: "p0",
|
|
393
|
+
content: "Three update paths exist \u2014 know which does what. (1) `npm install -g @askexenow/exe-os@latest` \u2014 customer update. Replaces all dist/ files. postinstall copies slash commands AND restarts the daemon automatically. MCP server picks up new code on next `/mcp` reconnect or new Claude Code session. Hooks pick up new code on next session (they spawn fresh processes). (2) `exe-os update` \u2014 interactive update command. Runs `npm install -g` then `install --global` which restarts daemon, regenerates session wrappers, normalizes roster, registers Codex hooks. This is the recommended customer path. (3) `npm run deploy` \u2014 dev-only (COO/CTO on main branch). Builds, installs globally, runs `install --global`, restarts daemon. Never run from a worktree. NEVER confuse `exe-os setup` (first-time setup wizard for new installs) with `exe-os update` (update existing install). Setup creates encryption keys, configures cloud, runs first sync. Update just replaces code and restarts services. They are completely different commands."
|
|
394
|
+
},
|
|
395
|
+
{
|
|
396
|
+
title: "First install \u2014 setup wizard and license activation",
|
|
397
|
+
domain: "operations",
|
|
398
|
+
priority: "p1",
|
|
399
|
+
content: "Fresh install: `npm install -g @askexenow/exe-os` then run `exe` to start the setup wizard. The wizard prompts for: encryption passphrase (creates master key), license key (exe_sk_* from AskExe team), COO name, and optional team members. No license key = free tier (1 employee, 5K memories). After setup: hooks install automatically, MCP server registers in ~/.claude.json, daemon starts. Verify health: run `exe-os healthcheck` or use mcp_ping() tool."
|
|
400
|
+
},
|
|
389
401
|
// --- Operations ---
|
|
390
402
|
{
|
|
391
403
|
title: "Managers must supervise deployed workers",
|
|
@@ -436,12 +448,6 @@ var init_platform_procedures = __esm({
|
|
|
436
448
|
priority: "p0",
|
|
437
449
|
content: "When you dispatch work, you OWN the review. Check list_tasks(status='needs_review') on EVERY prompt \u2014 don't wait for intercom nudges (they're unreliable). When a task shows needs_review: (1) read the deliverable (git diff in worktree, exe/output/ files, or task result summary), (2) verify it works (tsc, build, run), (3) close_task if good or create a fix task if not. Reviews sitting >30 minutes is a pipeline stall. The whole chain: worker calls update_task(done) \u2192 system flags needs_review \u2192 manager pulls and verifies \u2192 close_task \u2192 COO reviews manager's work \u2192 merge to main. Every level actively pulls \u2014 nobody waits."
|
|
438
450
|
},
|
|
439
|
-
{
|
|
440
|
-
title: "Bug fix lifecycle \u2014 triage upstream after every verified fix so customers see the status",
|
|
441
|
-
domain: "workflow",
|
|
442
|
-
priority: "p0",
|
|
443
|
-
content: "When a bug from support(action='list_bugs') is fixed and verified, the reviewer MUST triage it upstream: support(action='triage_bug', id='<bug-id>', notes='<what was fixed>', fixed_version='<version>', linked_commit='<hash>'). This closes the bug in the customer's view \u2014 their COO checks list_my_bugs and sees status change from open \u2192 closed with the fix version. Without triage, customers see 'open' forever even after the fix ships. Same for feature requests: support(action='triage_feature', ..., shipped_version='<version>'). Triage is part of the review gate \u2014 a fix is not done until the upstream report is closed."
|
|
444
|
-
},
|
|
445
451
|
{
|
|
446
452
|
title: "Intercom is a speedup, not delivery \u2014 DB is the source of truth",
|
|
447
453
|
domain: "architecture",
|
|
@@ -497,7 +503,7 @@ var init_platform_procedures = __esm({
|
|
|
497
503
|
title: "MCP tools \u2014 identity, behavior, and support",
|
|
498
504
|
domain: "tool-use",
|
|
499
505
|
priority: "p1",
|
|
500
|
-
content: `identity(action="get") / get_identity: read an agent's exe.md (Layer 1 identity). identity(action="update") / update_identity: write an agent's exe.md. Identity > behavior. behavior(action="store") / store_behavior: record a correction or pattern (Layer 2 expertise). behavior(action="list") / list_behaviors: view active behaviors. behavior(action="deactivate") / deactivate_behavior: soft-delete a stale behavior. support(action="create_bug")
|
|
506
|
+
content: `identity(action="get") / get_identity: read an agent's exe.md (Layer 1 identity). identity(action="update") / update_identity: write an agent's exe.md. Identity > behavior. behavior(action="store") / store_behavior: record a correction or pattern (Layer 2 expertise). behavior(action="list") / list_behaviors: view active behaviors. behavior(action="deactivate") / deactivate_behavior: soft-delete a stale behavior. support(action="create_bug"): file a bug report (title, description, severity p0-p3). Auto-delivers to AskExe. support(action="create_feature"): file a feature request (title, description, use_case). support(action="list_my_bugs"): check status of YOUR filed bug reports \u2014 see which are open, triaged, or fixed with version number. support(action="list_my_features"): check status of YOUR filed feature requests \u2014 see which are planned, shipped, or closed. support(action="health"): verify support server is reachable. When a bug you filed shows status='fixed' with a fixed_version, update exe-os to that version to get the fix. support(action="triage_bug"): AskExe-internal only. CRITICAL: triage uses triage_notes NOT notes.`
|
|
501
507
|
},
|
|
502
508
|
{
|
|
503
509
|
title: "MCP tools \u2014 communication and messaging",
|