@askexenow/exe-os 0.9.98 → 0.9.100
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 +7 -0
- package/dist/bin/agentic-reflection-backfill.js +7 -0
- package/dist/bin/agentic-semantic-label.js +7 -0
- package/dist/bin/backfill-conversations.js +7 -0
- package/dist/bin/backfill-responses.js +7 -0
- package/dist/bin/backfill-vectors.js +7 -0
- package/dist/bin/bulk-sync-postgres.js +7 -0
- package/dist/bin/cleanup-stale-review-tasks.js +7 -0
- package/dist/bin/cli.js +36 -10
- package/dist/bin/exe-agent.js +7 -0
- package/dist/bin/exe-assign.js +7 -0
- package/dist/bin/exe-boot.js +36 -10
- package/dist/bin/exe-call.js +7 -0
- package/dist/bin/exe-cloud.js +36 -10
- package/dist/bin/exe-dispatch.js +7 -0
- package/dist/bin/exe-doctor.js +36 -10
- package/dist/bin/exe-export-behaviors.js +7 -0
- package/dist/bin/exe-forget.js +7 -0
- package/dist/bin/exe-gateway.js +7 -0
- package/dist/bin/exe-heartbeat.js +7 -0
- package/dist/bin/exe-kill.js +7 -0
- package/dist/bin/exe-launch-agent.js +7 -0
- package/dist/bin/exe-new-employee.js +7 -0
- package/dist/bin/exe-pending-messages.js +7 -0
- package/dist/bin/exe-pending-notifications.js +7 -0
- package/dist/bin/exe-pending-reviews.js +7 -0
- package/dist/bin/exe-rename.js +7 -0
- package/dist/bin/exe-review.js +7 -0
- package/dist/bin/exe-search.js +7 -0
- package/dist/bin/exe-session-cleanup.js +7 -0
- package/dist/bin/exe-start-codex.js +7 -0
- package/dist/bin/exe-start-opencode.js +7 -0
- package/dist/bin/exe-status.js +7 -0
- package/dist/bin/exe-team.js +7 -0
- package/dist/bin/git-sweep.js +7 -0
- package/dist/bin/graph-backfill.js +7 -0
- package/dist/bin/graph-export.js +7 -0
- package/dist/bin/intercom-check.js +7 -0
- package/dist/bin/scan-tasks.js +7 -0
- package/dist/bin/setup.js +36 -10
- package/dist/bin/shard-migrate.js +7 -0
- package/dist/gateway/index.js +7 -0
- package/dist/hooks/bug-report-worker.js +7 -0
- package/dist/hooks/codex-stop-task-finalizer.js +7 -0
- package/dist/hooks/commit-complete.js +7 -0
- package/dist/hooks/error-recall.js +7 -0
- package/dist/hooks/ingest.js +7 -0
- package/dist/hooks/instructions-loaded.js +7 -0
- package/dist/hooks/notification.js +7 -0
- package/dist/hooks/post-compact.js +7 -0
- package/dist/hooks/post-tool-combined.js +7 -0
- package/dist/hooks/pre-compact.js +7 -0
- package/dist/hooks/pre-tool-use.js +7 -0
- package/dist/hooks/prompt-submit.js +7 -0
- package/dist/hooks/session-end.js +7 -0
- package/dist/hooks/session-start.js +7 -0
- package/dist/hooks/stop.js +7 -0
- package/dist/hooks/subagent-stop.js +7 -0
- package/dist/hooks/summary-worker.js +36 -10
- package/dist/index.js +7 -0
- package/dist/lib/cloud-sync.js +29 -10
- package/dist/lib/employee-templates.js +7 -0
- package/dist/lib/exe-daemon.js +36 -10
- package/dist/lib/hybrid-search.js +7 -0
- package/dist/lib/keychain.js +29 -10
- package/dist/lib/schedules.js +7 -0
- package/dist/lib/store.js +7 -0
- package/dist/mcp/server.js +36 -10
- package/dist/runtime/index.js +7 -0
- package/dist/tui/App.js +36 -10
- package/package.json +1 -1
- package/src/commands/exe/setup.md +1 -1
|
@@ -3516,6 +3516,13 @@ var init_platform_procedures = __esm({
|
|
|
3516
3516
|
priority: "p0",
|
|
3517
3517
|
content: "Tasks live in the DB. Intercom (tmux send-keys) is fire-and-forget \u2014 it may fail, get garbled, or arrive mid-work. Never rely on intercom for task delivery. The UserPromptSubmit hook checks the DB for new tasks on every prompt. Your operating procedures step 7 says check for next work. The daemon nudges idle agents as a speedup. If you have no tasks, you found them all."
|
|
3518
3518
|
},
|
|
3519
|
+
// --- Encryption key + cloud sync ---
|
|
3520
|
+
{
|
|
3521
|
+
title: "Encryption key lives in Keychain, not on disk \u2014 never expose the recovery phrase",
|
|
3522
|
+
domain: "security",
|
|
3523
|
+
priority: "p0",
|
|
3524
|
+
content: "The master encryption key is stored in macOS Keychain (Secure Enclave) or Linux secret-tool \u2014 NOT as a file. There is no ~/.exe-os/master.key on modern installs. If an older install had one, it was auto-migrated to Keychain and the file deleted. Device linking uses a 24-word BIP39 recovery phrase: Device 1 runs `exe-os cloud link --show-full` in their local Terminal to reveal it, Device 2 runs `exe-os cloud` and pastes the phrase to import the key into its own Keychain, then cloud sync pulls encrypted memories. NEVER display, log, or return the recovery phrase in agent output. MCP tools are hardened \u2014 they cannot reveal it. If the user needs the phrase, tell them: 'Run exe-os cloud link --show-full in your Terminal.' If searching for master.key returns nothing, that is CORRECT \u2014 the key is in Keychain."
|
|
3525
|
+
},
|
|
3519
3526
|
// --- MCP is the ONLY data interface ---
|
|
3520
3527
|
{
|
|
3521
3528
|
title: "MCP disconnect \u2014 ask the user, never work around it",
|
|
@@ -3516,6 +3516,13 @@ var init_platform_procedures = __esm({
|
|
|
3516
3516
|
priority: "p0",
|
|
3517
3517
|
content: "Tasks live in the DB. Intercom (tmux send-keys) is fire-and-forget \u2014 it may fail, get garbled, or arrive mid-work. Never rely on intercom for task delivery. The UserPromptSubmit hook checks the DB for new tasks on every prompt. Your operating procedures step 7 says check for next work. The daemon nudges idle agents as a speedup. If you have no tasks, you found them all."
|
|
3518
3518
|
},
|
|
3519
|
+
// --- Encryption key + cloud sync ---
|
|
3520
|
+
{
|
|
3521
|
+
title: "Encryption key lives in Keychain, not on disk \u2014 never expose the recovery phrase",
|
|
3522
|
+
domain: "security",
|
|
3523
|
+
priority: "p0",
|
|
3524
|
+
content: "The master encryption key is stored in macOS Keychain (Secure Enclave) or Linux secret-tool \u2014 NOT as a file. There is no ~/.exe-os/master.key on modern installs. If an older install had one, it was auto-migrated to Keychain and the file deleted. Device linking uses a 24-word BIP39 recovery phrase: Device 1 runs `exe-os cloud link --show-full` in their local Terminal to reveal it, Device 2 runs `exe-os cloud` and pastes the phrase to import the key into its own Keychain, then cloud sync pulls encrypted memories. NEVER display, log, or return the recovery phrase in agent output. MCP tools are hardened \u2014 they cannot reveal it. If the user needs the phrase, tell them: 'Run exe-os cloud link --show-full in your Terminal.' If searching for master.key returns nothing, that is CORRECT \u2014 the key is in Keychain."
|
|
3525
|
+
},
|
|
3519
3526
|
// --- MCP is the ONLY data interface ---
|
|
3520
3527
|
{
|
|
3521
3528
|
title: "MCP disconnect \u2014 ask the user, never work around it",
|
|
@@ -3516,6 +3516,13 @@ var init_platform_procedures = __esm({
|
|
|
3516
3516
|
priority: "p0",
|
|
3517
3517
|
content: "Tasks live in the DB. Intercom (tmux send-keys) is fire-and-forget \u2014 it may fail, get garbled, or arrive mid-work. Never rely on intercom for task delivery. The UserPromptSubmit hook checks the DB for new tasks on every prompt. Your operating procedures step 7 says check for next work. The daemon nudges idle agents as a speedup. If you have no tasks, you found them all."
|
|
3518
3518
|
},
|
|
3519
|
+
// --- Encryption key + cloud sync ---
|
|
3520
|
+
{
|
|
3521
|
+
title: "Encryption key lives in Keychain, not on disk \u2014 never expose the recovery phrase",
|
|
3522
|
+
domain: "security",
|
|
3523
|
+
priority: "p0",
|
|
3524
|
+
content: "The master encryption key is stored in macOS Keychain (Secure Enclave) or Linux secret-tool \u2014 NOT as a file. There is no ~/.exe-os/master.key on modern installs. If an older install had one, it was auto-migrated to Keychain and the file deleted. Device linking uses a 24-word BIP39 recovery phrase: Device 1 runs `exe-os cloud link --show-full` in their local Terminal to reveal it, Device 2 runs `exe-os cloud` and pastes the phrase to import the key into its own Keychain, then cloud sync pulls encrypted memories. NEVER display, log, or return the recovery phrase in agent output. MCP tools are hardened \u2014 they cannot reveal it. If the user needs the phrase, tell them: 'Run exe-os cloud link --show-full in your Terminal.' If searching for master.key returns nothing, that is CORRECT \u2014 the key is in Keychain."
|
|
3525
|
+
},
|
|
3519
3526
|
// --- MCP is the ONLY data interface ---
|
|
3520
3527
|
{
|
|
3521
3528
|
title: "MCP disconnect \u2014 ask the user, never work around it",
|
|
@@ -3656,6 +3656,13 @@ var init_platform_procedures = __esm({
|
|
|
3656
3656
|
priority: "p0",
|
|
3657
3657
|
content: "Tasks live in the DB. Intercom (tmux send-keys) is fire-and-forget \u2014 it may fail, get garbled, or arrive mid-work. Never rely on intercom for task delivery. The UserPromptSubmit hook checks the DB for new tasks on every prompt. Your operating procedures step 7 says check for next work. The daemon nudges idle agents as a speedup. If you have no tasks, you found them all."
|
|
3658
3658
|
},
|
|
3659
|
+
// --- Encryption key + cloud sync ---
|
|
3660
|
+
{
|
|
3661
|
+
title: "Encryption key lives in Keychain, not on disk \u2014 never expose the recovery phrase",
|
|
3662
|
+
domain: "security",
|
|
3663
|
+
priority: "p0",
|
|
3664
|
+
content: "The master encryption key is stored in macOS Keychain (Secure Enclave) or Linux secret-tool \u2014 NOT as a file. There is no ~/.exe-os/master.key on modern installs. If an older install had one, it was auto-migrated to Keychain and the file deleted. Device linking uses a 24-word BIP39 recovery phrase: Device 1 runs `exe-os cloud link --show-full` in their local Terminal to reveal it, Device 2 runs `exe-os cloud` and pastes the phrase to import the key into its own Keychain, then cloud sync pulls encrypted memories. NEVER display, log, or return the recovery phrase in agent output. MCP tools are hardened \u2014 they cannot reveal it. If the user needs the phrase, tell them: 'Run exe-os cloud link --show-full in your Terminal.' If searching for master.key returns nothing, that is CORRECT \u2014 the key is in Keychain."
|
|
3665
|
+
},
|
|
3659
3666
|
// --- MCP is the ONLY data interface ---
|
|
3660
3667
|
{
|
|
3661
3668
|
title: "MCP disconnect \u2014 ask the user, never work around it",
|
|
@@ -3656,6 +3656,13 @@ var init_platform_procedures = __esm({
|
|
|
3656
3656
|
priority: "p0",
|
|
3657
3657
|
content: "Tasks live in the DB. Intercom (tmux send-keys) is fire-and-forget \u2014 it may fail, get garbled, or arrive mid-work. Never rely on intercom for task delivery. The UserPromptSubmit hook checks the DB for new tasks on every prompt. Your operating procedures step 7 says check for next work. The daemon nudges idle agents as a speedup. If you have no tasks, you found them all."
|
|
3658
3658
|
},
|
|
3659
|
+
// --- Encryption key + cloud sync ---
|
|
3660
|
+
{
|
|
3661
|
+
title: "Encryption key lives in Keychain, not on disk \u2014 never expose the recovery phrase",
|
|
3662
|
+
domain: "security",
|
|
3663
|
+
priority: "p0",
|
|
3664
|
+
content: "The master encryption key is stored in macOS Keychain (Secure Enclave) or Linux secret-tool \u2014 NOT as a file. There is no ~/.exe-os/master.key on modern installs. If an older install had one, it was auto-migrated to Keychain and the file deleted. Device linking uses a 24-word BIP39 recovery phrase: Device 1 runs `exe-os cloud link --show-full` in their local Terminal to reveal it, Device 2 runs `exe-os cloud` and pastes the phrase to import the key into its own Keychain, then cloud sync pulls encrypted memories. NEVER display, log, or return the recovery phrase in agent output. MCP tools are hardened \u2014 they cannot reveal it. If the user needs the phrase, tell them: 'Run exe-os cloud link --show-full in your Terminal.' If searching for master.key returns nothing, that is CORRECT \u2014 the key is in Keychain."
|
|
3665
|
+
},
|
|
3659
3666
|
// --- MCP is the ONLY data interface ---
|
|
3660
3667
|
{
|
|
3661
3668
|
title: "MCP disconnect \u2014 ask the user, never work around it",
|
|
@@ -3652,6 +3652,13 @@ var init_platform_procedures = __esm({
|
|
|
3652
3652
|
priority: "p0",
|
|
3653
3653
|
content: "Tasks live in the DB. Intercom (tmux send-keys) is fire-and-forget \u2014 it may fail, get garbled, or arrive mid-work. Never rely on intercom for task delivery. The UserPromptSubmit hook checks the DB for new tasks on every prompt. Your operating procedures step 7 says check for next work. The daemon nudges idle agents as a speedup. If you have no tasks, you found them all."
|
|
3654
3654
|
},
|
|
3655
|
+
// --- Encryption key + cloud sync ---
|
|
3656
|
+
{
|
|
3657
|
+
title: "Encryption key lives in Keychain, not on disk \u2014 never expose the recovery phrase",
|
|
3658
|
+
domain: "security",
|
|
3659
|
+
priority: "p0",
|
|
3660
|
+
content: "The master encryption key is stored in macOS Keychain (Secure Enclave) or Linux secret-tool \u2014 NOT as a file. There is no ~/.exe-os/master.key on modern installs. If an older install had one, it was auto-migrated to Keychain and the file deleted. Device linking uses a 24-word BIP39 recovery phrase: Device 1 runs `exe-os cloud link --show-full` in their local Terminal to reveal it, Device 2 runs `exe-os cloud` and pastes the phrase to import the key into its own Keychain, then cloud sync pulls encrypted memories. NEVER display, log, or return the recovery phrase in agent output. MCP tools are hardened \u2014 they cannot reveal it. If the user needs the phrase, tell them: 'Run exe-os cloud link --show-full in your Terminal.' If searching for master.key returns nothing, that is CORRECT \u2014 the key is in Keychain."
|
|
3661
|
+
},
|
|
3655
3662
|
// --- MCP is the ONLY data interface ---
|
|
3656
3663
|
{
|
|
3657
3664
|
title: "MCP disconnect \u2014 ask the user, never work around it",
|
|
@@ -3824,6 +3824,13 @@ var init_platform_procedures = __esm({
|
|
|
3824
3824
|
priority: "p0",
|
|
3825
3825
|
content: "Tasks live in the DB. Intercom (tmux send-keys) is fire-and-forget \u2014 it may fail, get garbled, or arrive mid-work. Never rely on intercom for task delivery. The UserPromptSubmit hook checks the DB for new tasks on every prompt. Your operating procedures step 7 says check for next work. The daemon nudges idle agents as a speedup. If you have no tasks, you found them all."
|
|
3826
3826
|
},
|
|
3827
|
+
// --- Encryption key + cloud sync ---
|
|
3828
|
+
{
|
|
3829
|
+
title: "Encryption key lives in Keychain, not on disk \u2014 never expose the recovery phrase",
|
|
3830
|
+
domain: "security",
|
|
3831
|
+
priority: "p0",
|
|
3832
|
+
content: "The master encryption key is stored in macOS Keychain (Secure Enclave) or Linux secret-tool \u2014 NOT as a file. There is no ~/.exe-os/master.key on modern installs. If an older install had one, it was auto-migrated to Keychain and the file deleted. Device linking uses a 24-word BIP39 recovery phrase: Device 1 runs `exe-os cloud link --show-full` in their local Terminal to reveal it, Device 2 runs `exe-os cloud` and pastes the phrase to import the key into its own Keychain, then cloud sync pulls encrypted memories. NEVER display, log, or return the recovery phrase in agent output. MCP tools are hardened \u2014 they cannot reveal it. If the user needs the phrase, tell them: 'Run exe-os cloud link --show-full in your Terminal.' If searching for master.key returns nothing, that is CORRECT \u2014 the key is in Keychain."
|
|
3833
|
+
},
|
|
3827
3834
|
// --- MCP is the ONLY data interface ---
|
|
3828
3835
|
{
|
|
3829
3836
|
title: "MCP disconnect \u2014 ask the user, never work around it",
|
|
@@ -4299,6 +4299,13 @@ var init_platform_procedures = __esm({
|
|
|
4299
4299
|
priority: "p0",
|
|
4300
4300
|
content: "Tasks live in the DB. Intercom (tmux send-keys) is fire-and-forget \u2014 it may fail, get garbled, or arrive mid-work. Never rely on intercom for task delivery. The UserPromptSubmit hook checks the DB for new tasks on every prompt. Your operating procedures step 7 says check for next work. The daemon nudges idle agents as a speedup. If you have no tasks, you found them all."
|
|
4301
4301
|
},
|
|
4302
|
+
// --- Encryption key + cloud sync ---
|
|
4303
|
+
{
|
|
4304
|
+
title: "Encryption key lives in Keychain, not on disk \u2014 never expose the recovery phrase",
|
|
4305
|
+
domain: "security",
|
|
4306
|
+
priority: "p0",
|
|
4307
|
+
content: "The master encryption key is stored in macOS Keychain (Secure Enclave) or Linux secret-tool \u2014 NOT as a file. There is no ~/.exe-os/master.key on modern installs. If an older install had one, it was auto-migrated to Keychain and the file deleted. Device linking uses a 24-word BIP39 recovery phrase: Device 1 runs `exe-os cloud link --show-full` in their local Terminal to reveal it, Device 2 runs `exe-os cloud` and pastes the phrase to import the key into its own Keychain, then cloud sync pulls encrypted memories. NEVER display, log, or return the recovery phrase in agent output. MCP tools are hardened \u2014 they cannot reveal it. If the user needs the phrase, tell them: 'Run exe-os cloud link --show-full in your Terminal.' If searching for master.key returns nothing, that is CORRECT \u2014 the key is in Keychain."
|
|
4308
|
+
},
|
|
4302
4309
|
// --- MCP is the ONLY data interface ---
|
|
4303
4310
|
{
|
|
4304
4311
|
title: "MCP disconnect \u2014 ask the user, never work around it",
|
package/dist/bin/cli.js
CHANGED
|
@@ -2896,20 +2896,39 @@ async function getKeyStorageInfo() {
|
|
|
2896
2896
|
}
|
|
2897
2897
|
async function setMasterKey(key) {
|
|
2898
2898
|
const b64 = key.toString("base64");
|
|
2899
|
-
|
|
2900
|
-
|
|
2899
|
+
let keychainOk = false;
|
|
2900
|
+
if (macKeychainSet(b64)) {
|
|
2901
|
+
const readBack = macKeychainGet();
|
|
2902
|
+
if (readBack === b64) {
|
|
2903
|
+
keychainOk = true;
|
|
2904
|
+
} else {
|
|
2905
|
+
process.stderr.write(
|
|
2906
|
+
"[keychain] macOS Keychain write appeared to succeed but read-back failed.\n This can happen on macOS Tahoe with new permission patterns.\n"
|
|
2907
|
+
);
|
|
2908
|
+
}
|
|
2909
|
+
} else if (linuxSecretSet(b64)) {
|
|
2910
|
+
const readBack = linuxSecretGet();
|
|
2911
|
+
if (readBack === b64) {
|
|
2912
|
+
keychainOk = true;
|
|
2913
|
+
} else {
|
|
2914
|
+
process.stderr.write("[keychain] Linux secret-tool write appeared to succeed but read-back failed.\n");
|
|
2915
|
+
}
|
|
2901
2916
|
}
|
|
2902
|
-
|
|
2903
|
-
|
|
2904
|
-
|
|
2905
|
-
|
|
2906
|
-
|
|
2907
|
-
|
|
2917
|
+
if (!keychainOk) {
|
|
2918
|
+
const keytar = await tryKeytar();
|
|
2919
|
+
if (keytar) {
|
|
2920
|
+
try {
|
|
2921
|
+
await keytar.setPassword(SERVICE, ACCOUNT, b64);
|
|
2922
|
+
keychainOk = true;
|
|
2923
|
+
} catch {
|
|
2924
|
+
}
|
|
2908
2925
|
}
|
|
2909
2926
|
}
|
|
2910
2927
|
const fallback = await writeMachineBoundFileFallback(b64);
|
|
2911
|
-
if (
|
|
2912
|
-
process.stderr.write("[keychain] Key stored
|
|
2928
|
+
if (keychainOk) {
|
|
2929
|
+
process.stderr.write("[keychain] Key stored in OS keychain (file backup also written).\n");
|
|
2930
|
+
} else if (fallback === "encrypted") {
|
|
2931
|
+
process.stderr.write("[keychain] Key stored encrypted (machine-bound file fallback).\n");
|
|
2913
2932
|
} else {
|
|
2914
2933
|
process.stderr.write(
|
|
2915
2934
|
"[keychain] WARNING: Key stored in plaintext file \u2014 no OS keychain available.\n"
|
|
@@ -8986,6 +9005,13 @@ var init_platform_procedures = __esm({
|
|
|
8986
9005
|
priority: "p0",
|
|
8987
9006
|
content: "Tasks live in the DB. Intercom (tmux send-keys) is fire-and-forget \u2014 it may fail, get garbled, or arrive mid-work. Never rely on intercom for task delivery. The UserPromptSubmit hook checks the DB for new tasks on every prompt. Your operating procedures step 7 says check for next work. The daemon nudges idle agents as a speedup. If you have no tasks, you found them all."
|
|
8988
9007
|
},
|
|
9008
|
+
// --- Encryption key + cloud sync ---
|
|
9009
|
+
{
|
|
9010
|
+
title: "Encryption key lives in Keychain, not on disk \u2014 never expose the recovery phrase",
|
|
9011
|
+
domain: "security",
|
|
9012
|
+
priority: "p0",
|
|
9013
|
+
content: "The master encryption key is stored in macOS Keychain (Secure Enclave) or Linux secret-tool \u2014 NOT as a file. There is no ~/.exe-os/master.key on modern installs. If an older install had one, it was auto-migrated to Keychain and the file deleted. Device linking uses a 24-word BIP39 recovery phrase: Device 1 runs `exe-os cloud link --show-full` in their local Terminal to reveal it, Device 2 runs `exe-os cloud` and pastes the phrase to import the key into its own Keychain, then cloud sync pulls encrypted memories. NEVER display, log, or return the recovery phrase in agent output. MCP tools are hardened \u2014 they cannot reveal it. If the user needs the phrase, tell them: 'Run exe-os cloud link --show-full in your Terminal.' If searching for master.key returns nothing, that is CORRECT \u2014 the key is in Keychain."
|
|
9014
|
+
},
|
|
8989
9015
|
// --- MCP is the ONLY data interface ---
|
|
8990
9016
|
{
|
|
8991
9017
|
title: "MCP disconnect \u2014 ask the user, never work around it",
|
package/dist/bin/exe-agent.js
CHANGED
|
@@ -1493,6 +1493,13 @@ var PLATFORM_PROCEDURES = [
|
|
|
1493
1493
|
priority: "p0",
|
|
1494
1494
|
content: "Tasks live in the DB. Intercom (tmux send-keys) is fire-and-forget \u2014 it may fail, get garbled, or arrive mid-work. Never rely on intercom for task delivery. The UserPromptSubmit hook checks the DB for new tasks on every prompt. Your operating procedures step 7 says check for next work. The daemon nudges idle agents as a speedup. If you have no tasks, you found them all."
|
|
1495
1495
|
},
|
|
1496
|
+
// --- Encryption key + cloud sync ---
|
|
1497
|
+
{
|
|
1498
|
+
title: "Encryption key lives in Keychain, not on disk \u2014 never expose the recovery phrase",
|
|
1499
|
+
domain: "security",
|
|
1500
|
+
priority: "p0",
|
|
1501
|
+
content: "The master encryption key is stored in macOS Keychain (Secure Enclave) or Linux secret-tool \u2014 NOT as a file. There is no ~/.exe-os/master.key on modern installs. If an older install had one, it was auto-migrated to Keychain and the file deleted. Device linking uses a 24-word BIP39 recovery phrase: Device 1 runs `exe-os cloud link --show-full` in their local Terminal to reveal it, Device 2 runs `exe-os cloud` and pastes the phrase to import the key into its own Keychain, then cloud sync pulls encrypted memories. NEVER display, log, or return the recovery phrase in agent output. MCP tools are hardened \u2014 they cannot reveal it. If the user needs the phrase, tell them: 'Run exe-os cloud link --show-full in your Terminal.' If searching for master.key returns nothing, that is CORRECT \u2014 the key is in Keychain."
|
|
1502
|
+
},
|
|
1496
1503
|
// --- MCP is the ONLY data interface ---
|
|
1497
1504
|
{
|
|
1498
1505
|
title: "MCP disconnect \u2014 ask the user, never work around it",
|
package/dist/bin/exe-assign.js
CHANGED
|
@@ -3666,6 +3666,13 @@ var init_platform_procedures = __esm({
|
|
|
3666
3666
|
priority: "p0",
|
|
3667
3667
|
content: "Tasks live in the DB. Intercom (tmux send-keys) is fire-and-forget \u2014 it may fail, get garbled, or arrive mid-work. Never rely on intercom for task delivery. The UserPromptSubmit hook checks the DB for new tasks on every prompt. Your operating procedures step 7 says check for next work. The daemon nudges idle agents as a speedup. If you have no tasks, you found them all."
|
|
3668
3668
|
},
|
|
3669
|
+
// --- Encryption key + cloud sync ---
|
|
3670
|
+
{
|
|
3671
|
+
title: "Encryption key lives in Keychain, not on disk \u2014 never expose the recovery phrase",
|
|
3672
|
+
domain: "security",
|
|
3673
|
+
priority: "p0",
|
|
3674
|
+
content: "The master encryption key is stored in macOS Keychain (Secure Enclave) or Linux secret-tool \u2014 NOT as a file. There is no ~/.exe-os/master.key on modern installs. If an older install had one, it was auto-migrated to Keychain and the file deleted. Device linking uses a 24-word BIP39 recovery phrase: Device 1 runs `exe-os cloud link --show-full` in their local Terminal to reveal it, Device 2 runs `exe-os cloud` and pastes the phrase to import the key into its own Keychain, then cloud sync pulls encrypted memories. NEVER display, log, or return the recovery phrase in agent output. MCP tools are hardened \u2014 they cannot reveal it. If the user needs the phrase, tell them: 'Run exe-os cloud link --show-full in your Terminal.' If searching for master.key returns nothing, that is CORRECT \u2014 the key is in Keychain."
|
|
3675
|
+
},
|
|
3669
3676
|
// --- MCP is the ONLY data interface ---
|
|
3670
3677
|
{
|
|
3671
3678
|
title: "MCP disconnect \u2014 ask the user, never work around it",
|
package/dist/bin/exe-boot.js
CHANGED
|
@@ -3403,6 +3403,13 @@ var init_platform_procedures = __esm({
|
|
|
3403
3403
|
priority: "p0",
|
|
3404
3404
|
content: "Tasks live in the DB. Intercom (tmux send-keys) is fire-and-forget \u2014 it may fail, get garbled, or arrive mid-work. Never rely on intercom for task delivery. The UserPromptSubmit hook checks the DB for new tasks on every prompt. Your operating procedures step 7 says check for next work. The daemon nudges idle agents as a speedup. If you have no tasks, you found them all."
|
|
3405
3405
|
},
|
|
3406
|
+
// --- Encryption key + cloud sync ---
|
|
3407
|
+
{
|
|
3408
|
+
title: "Encryption key lives in Keychain, not on disk \u2014 never expose the recovery phrase",
|
|
3409
|
+
domain: "security",
|
|
3410
|
+
priority: "p0",
|
|
3411
|
+
content: "The master encryption key is stored in macOS Keychain (Secure Enclave) or Linux secret-tool \u2014 NOT as a file. There is no ~/.exe-os/master.key on modern installs. If an older install had one, it was auto-migrated to Keychain and the file deleted. Device linking uses a 24-word BIP39 recovery phrase: Device 1 runs `exe-os cloud link --show-full` in their local Terminal to reveal it, Device 2 runs `exe-os cloud` and pastes the phrase to import the key into its own Keychain, then cloud sync pulls encrypted memories. NEVER display, log, or return the recovery phrase in agent output. MCP tools are hardened \u2014 they cannot reveal it. If the user needs the phrase, tell them: 'Run exe-os cloud link --show-full in your Terminal.' If searching for master.key returns nothing, that is CORRECT \u2014 the key is in Keychain."
|
|
3412
|
+
},
|
|
3406
3413
|
// --- MCP is the ONLY data interface ---
|
|
3407
3414
|
{
|
|
3408
3415
|
title: "MCP disconnect \u2014 ask the user, never work around it",
|
|
@@ -3935,20 +3942,39 @@ async function getKeyStorageInfo() {
|
|
|
3935
3942
|
}
|
|
3936
3943
|
async function setMasterKey(key) {
|
|
3937
3944
|
const b64 = key.toString("base64");
|
|
3938
|
-
|
|
3939
|
-
|
|
3945
|
+
let keychainOk = false;
|
|
3946
|
+
if (macKeychainSet(b64)) {
|
|
3947
|
+
const readBack = macKeychainGet();
|
|
3948
|
+
if (readBack === b64) {
|
|
3949
|
+
keychainOk = true;
|
|
3950
|
+
} else {
|
|
3951
|
+
process.stderr.write(
|
|
3952
|
+
"[keychain] macOS Keychain write appeared to succeed but read-back failed.\n This can happen on macOS Tahoe with new permission patterns.\n"
|
|
3953
|
+
);
|
|
3954
|
+
}
|
|
3955
|
+
} else if (linuxSecretSet(b64)) {
|
|
3956
|
+
const readBack = linuxSecretGet();
|
|
3957
|
+
if (readBack === b64) {
|
|
3958
|
+
keychainOk = true;
|
|
3959
|
+
} else {
|
|
3960
|
+
process.stderr.write("[keychain] Linux secret-tool write appeared to succeed but read-back failed.\n");
|
|
3961
|
+
}
|
|
3940
3962
|
}
|
|
3941
|
-
|
|
3942
|
-
|
|
3943
|
-
|
|
3944
|
-
|
|
3945
|
-
|
|
3946
|
-
|
|
3963
|
+
if (!keychainOk) {
|
|
3964
|
+
const keytar = await tryKeytar();
|
|
3965
|
+
if (keytar) {
|
|
3966
|
+
try {
|
|
3967
|
+
await keytar.setPassword(SERVICE, ACCOUNT, b64);
|
|
3968
|
+
keychainOk = true;
|
|
3969
|
+
} catch {
|
|
3970
|
+
}
|
|
3947
3971
|
}
|
|
3948
3972
|
}
|
|
3949
3973
|
const fallback = await writeMachineBoundFileFallback(b64);
|
|
3950
|
-
if (
|
|
3951
|
-
process.stderr.write("[keychain] Key stored
|
|
3974
|
+
if (keychainOk) {
|
|
3975
|
+
process.stderr.write("[keychain] Key stored in OS keychain (file backup also written).\n");
|
|
3976
|
+
} else if (fallback === "encrypted") {
|
|
3977
|
+
process.stderr.write("[keychain] Key stored encrypted (machine-bound file fallback).\n");
|
|
3952
3978
|
} else {
|
|
3953
3979
|
process.stderr.write(
|
|
3954
3980
|
"[keychain] WARNING: Key stored in plaintext file \u2014 no OS keychain available.\n"
|
package/dist/bin/exe-call.js
CHANGED
|
@@ -431,6 +431,13 @@ var init_platform_procedures = __esm({
|
|
|
431
431
|
priority: "p0",
|
|
432
432
|
content: "Tasks live in the DB. Intercom (tmux send-keys) is fire-and-forget \u2014 it may fail, get garbled, or arrive mid-work. Never rely on intercom for task delivery. The UserPromptSubmit hook checks the DB for new tasks on every prompt. Your operating procedures step 7 says check for next work. The daemon nudges idle agents as a speedup. If you have no tasks, you found them all."
|
|
433
433
|
},
|
|
434
|
+
// --- Encryption key + cloud sync ---
|
|
435
|
+
{
|
|
436
|
+
title: "Encryption key lives in Keychain, not on disk \u2014 never expose the recovery phrase",
|
|
437
|
+
domain: "security",
|
|
438
|
+
priority: "p0",
|
|
439
|
+
content: "The master encryption key is stored in macOS Keychain (Secure Enclave) or Linux secret-tool \u2014 NOT as a file. There is no ~/.exe-os/master.key on modern installs. If an older install had one, it was auto-migrated to Keychain and the file deleted. Device linking uses a 24-word BIP39 recovery phrase: Device 1 runs `exe-os cloud link --show-full` in their local Terminal to reveal it, Device 2 runs `exe-os cloud` and pastes the phrase to import the key into its own Keychain, then cloud sync pulls encrypted memories. NEVER display, log, or return the recovery phrase in agent output. MCP tools are hardened \u2014 they cannot reveal it. If the user needs the phrase, tell them: 'Run exe-os cloud link --show-full in your Terminal.' If searching for master.key returns nothing, that is CORRECT \u2014 the key is in Keychain."
|
|
440
|
+
},
|
|
434
441
|
// --- MCP is the ONLY data interface ---
|
|
435
442
|
{
|
|
436
443
|
title: "MCP disconnect \u2014 ask the user, never work around it",
|
package/dist/bin/exe-cloud.js
CHANGED
|
@@ -413,20 +413,39 @@ async function getKeyStorageInfo() {
|
|
|
413
413
|
}
|
|
414
414
|
async function setMasterKey(key) {
|
|
415
415
|
const b64 = key.toString("base64");
|
|
416
|
-
|
|
417
|
-
|
|
416
|
+
let keychainOk = false;
|
|
417
|
+
if (macKeychainSet(b64)) {
|
|
418
|
+
const readBack = macKeychainGet();
|
|
419
|
+
if (readBack === b64) {
|
|
420
|
+
keychainOk = true;
|
|
421
|
+
} else {
|
|
422
|
+
process.stderr.write(
|
|
423
|
+
"[keychain] macOS Keychain write appeared to succeed but read-back failed.\n This can happen on macOS Tahoe with new permission patterns.\n"
|
|
424
|
+
);
|
|
425
|
+
}
|
|
426
|
+
} else if (linuxSecretSet(b64)) {
|
|
427
|
+
const readBack = linuxSecretGet();
|
|
428
|
+
if (readBack === b64) {
|
|
429
|
+
keychainOk = true;
|
|
430
|
+
} else {
|
|
431
|
+
process.stderr.write("[keychain] Linux secret-tool write appeared to succeed but read-back failed.\n");
|
|
432
|
+
}
|
|
418
433
|
}
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
434
|
+
if (!keychainOk) {
|
|
435
|
+
const keytar = await tryKeytar();
|
|
436
|
+
if (keytar) {
|
|
437
|
+
try {
|
|
438
|
+
await keytar.setPassword(SERVICE, ACCOUNT, b64);
|
|
439
|
+
keychainOk = true;
|
|
440
|
+
} catch {
|
|
441
|
+
}
|
|
425
442
|
}
|
|
426
443
|
}
|
|
427
444
|
const fallback = await writeMachineBoundFileFallback(b64);
|
|
428
|
-
if (
|
|
429
|
-
process.stderr.write("[keychain] Key stored
|
|
445
|
+
if (keychainOk) {
|
|
446
|
+
process.stderr.write("[keychain] Key stored in OS keychain (file backup also written).\n");
|
|
447
|
+
} else if (fallback === "encrypted") {
|
|
448
|
+
process.stderr.write("[keychain] Key stored encrypted (machine-bound file fallback).\n");
|
|
430
449
|
} else {
|
|
431
450
|
process.stderr.write(
|
|
432
451
|
"[keychain] WARNING: Key stored in plaintext file \u2014 no OS keychain available.\n"
|
|
@@ -6795,6 +6814,13 @@ var init_platform_procedures = __esm({
|
|
|
6795
6814
|
priority: "p0",
|
|
6796
6815
|
content: "Tasks live in the DB. Intercom (tmux send-keys) is fire-and-forget \u2014 it may fail, get garbled, or arrive mid-work. Never rely on intercom for task delivery. The UserPromptSubmit hook checks the DB for new tasks on every prompt. Your operating procedures step 7 says check for next work. The daemon nudges idle agents as a speedup. If you have no tasks, you found them all."
|
|
6797
6816
|
},
|
|
6817
|
+
// --- Encryption key + cloud sync ---
|
|
6818
|
+
{
|
|
6819
|
+
title: "Encryption key lives in Keychain, not on disk \u2014 never expose the recovery phrase",
|
|
6820
|
+
domain: "security",
|
|
6821
|
+
priority: "p0",
|
|
6822
|
+
content: "The master encryption key is stored in macOS Keychain (Secure Enclave) or Linux secret-tool \u2014 NOT as a file. There is no ~/.exe-os/master.key on modern installs. If an older install had one, it was auto-migrated to Keychain and the file deleted. Device linking uses a 24-word BIP39 recovery phrase: Device 1 runs `exe-os cloud link --show-full` in their local Terminal to reveal it, Device 2 runs `exe-os cloud` and pastes the phrase to import the key into its own Keychain, then cloud sync pulls encrypted memories. NEVER display, log, or return the recovery phrase in agent output. MCP tools are hardened \u2014 they cannot reveal it. If the user needs the phrase, tell them: 'Run exe-os cloud link --show-full in your Terminal.' If searching for master.key returns nothing, that is CORRECT \u2014 the key is in Keychain."
|
|
6823
|
+
},
|
|
6798
6824
|
// --- MCP is the ONLY data interface ---
|
|
6799
6825
|
{
|
|
6800
6826
|
title: "MCP disconnect \u2014 ask the user, never work around it",
|
package/dist/bin/exe-dispatch.js
CHANGED
|
@@ -8106,6 +8106,13 @@ var init_platform_procedures = __esm({
|
|
|
8106
8106
|
priority: "p0",
|
|
8107
8107
|
content: "Tasks live in the DB. Intercom (tmux send-keys) is fire-and-forget \u2014 it may fail, get garbled, or arrive mid-work. Never rely on intercom for task delivery. The UserPromptSubmit hook checks the DB for new tasks on every prompt. Your operating procedures step 7 says check for next work. The daemon nudges idle agents as a speedup. If you have no tasks, you found them all."
|
|
8108
8108
|
},
|
|
8109
|
+
// --- Encryption key + cloud sync ---
|
|
8110
|
+
{
|
|
8111
|
+
title: "Encryption key lives in Keychain, not on disk \u2014 never expose the recovery phrase",
|
|
8112
|
+
domain: "security",
|
|
8113
|
+
priority: "p0",
|
|
8114
|
+
content: "The master encryption key is stored in macOS Keychain (Secure Enclave) or Linux secret-tool \u2014 NOT as a file. There is no ~/.exe-os/master.key on modern installs. If an older install had one, it was auto-migrated to Keychain and the file deleted. Device linking uses a 24-word BIP39 recovery phrase: Device 1 runs `exe-os cloud link --show-full` in their local Terminal to reveal it, Device 2 runs `exe-os cloud` and pastes the phrase to import the key into its own Keychain, then cloud sync pulls encrypted memories. NEVER display, log, or return the recovery phrase in agent output. MCP tools are hardened \u2014 they cannot reveal it. If the user needs the phrase, tell them: 'Run exe-os cloud link --show-full in your Terminal.' If searching for master.key returns nothing, that is CORRECT \u2014 the key is in Keychain."
|
|
8115
|
+
},
|
|
8109
8116
|
// --- MCP is the ONLY data interface ---
|
|
8110
8117
|
{
|
|
8111
8118
|
title: "MCP disconnect \u2014 ask the user, never work around it",
|
package/dist/bin/exe-doctor.js
CHANGED
|
@@ -1068,20 +1068,39 @@ async function getKeyStorageInfo() {
|
|
|
1068
1068
|
}
|
|
1069
1069
|
async function setMasterKey(key) {
|
|
1070
1070
|
const b64 = key.toString("base64");
|
|
1071
|
-
|
|
1072
|
-
|
|
1071
|
+
let keychainOk = false;
|
|
1072
|
+
if (macKeychainSet(b64)) {
|
|
1073
|
+
const readBack = macKeychainGet();
|
|
1074
|
+
if (readBack === b64) {
|
|
1075
|
+
keychainOk = true;
|
|
1076
|
+
} else {
|
|
1077
|
+
process.stderr.write(
|
|
1078
|
+
"[keychain] macOS Keychain write appeared to succeed but read-back failed.\n This can happen on macOS Tahoe with new permission patterns.\n"
|
|
1079
|
+
);
|
|
1080
|
+
}
|
|
1081
|
+
} else if (linuxSecretSet(b64)) {
|
|
1082
|
+
const readBack = linuxSecretGet();
|
|
1083
|
+
if (readBack === b64) {
|
|
1084
|
+
keychainOk = true;
|
|
1085
|
+
} else {
|
|
1086
|
+
process.stderr.write("[keychain] Linux secret-tool write appeared to succeed but read-back failed.\n");
|
|
1087
|
+
}
|
|
1073
1088
|
}
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1089
|
+
if (!keychainOk) {
|
|
1090
|
+
const keytar = await tryKeytar();
|
|
1091
|
+
if (keytar) {
|
|
1092
|
+
try {
|
|
1093
|
+
await keytar.setPassword(SERVICE, ACCOUNT, b64);
|
|
1094
|
+
keychainOk = true;
|
|
1095
|
+
} catch {
|
|
1096
|
+
}
|
|
1080
1097
|
}
|
|
1081
1098
|
}
|
|
1082
1099
|
const fallback = await writeMachineBoundFileFallback(b64);
|
|
1083
|
-
if (
|
|
1084
|
-
process.stderr.write("[keychain] Key stored
|
|
1100
|
+
if (keychainOk) {
|
|
1101
|
+
process.stderr.write("[keychain] Key stored in OS keychain (file backup also written).\n");
|
|
1102
|
+
} else if (fallback === "encrypted") {
|
|
1103
|
+
process.stderr.write("[keychain] Key stored encrypted (machine-bound file fallback).\n");
|
|
1085
1104
|
} else {
|
|
1086
1105
|
process.stderr.write(
|
|
1087
1106
|
"[keychain] WARNING: Key stored in plaintext file \u2014 no OS keychain available.\n"
|
|
@@ -4608,6 +4627,13 @@ var init_platform_procedures = __esm({
|
|
|
4608
4627
|
priority: "p0",
|
|
4609
4628
|
content: "Tasks live in the DB. Intercom (tmux send-keys) is fire-and-forget \u2014 it may fail, get garbled, or arrive mid-work. Never rely on intercom for task delivery. The UserPromptSubmit hook checks the DB for new tasks on every prompt. Your operating procedures step 7 says check for next work. The daemon nudges idle agents as a speedup. If you have no tasks, you found them all."
|
|
4610
4629
|
},
|
|
4630
|
+
// --- Encryption key + cloud sync ---
|
|
4631
|
+
{
|
|
4632
|
+
title: "Encryption key lives in Keychain, not on disk \u2014 never expose the recovery phrase",
|
|
4633
|
+
domain: "security",
|
|
4634
|
+
priority: "p0",
|
|
4635
|
+
content: "The master encryption key is stored in macOS Keychain (Secure Enclave) or Linux secret-tool \u2014 NOT as a file. There is no ~/.exe-os/master.key on modern installs. If an older install had one, it was auto-migrated to Keychain and the file deleted. Device linking uses a 24-word BIP39 recovery phrase: Device 1 runs `exe-os cloud link --show-full` in their local Terminal to reveal it, Device 2 runs `exe-os cloud` and pastes the phrase to import the key into its own Keychain, then cloud sync pulls encrypted memories. NEVER display, log, or return the recovery phrase in agent output. MCP tools are hardened \u2014 they cannot reveal it. If the user needs the phrase, tell them: 'Run exe-os cloud link --show-full in your Terminal.' If searching for master.key returns nothing, that is CORRECT \u2014 the key is in Keychain."
|
|
4636
|
+
},
|
|
4611
4637
|
// --- MCP is the ONLY data interface ---
|
|
4612
4638
|
{
|
|
4613
4639
|
title: "MCP disconnect \u2014 ask the user, never work around it",
|
|
@@ -4364,6 +4364,13 @@ var init_platform_procedures = __esm({
|
|
|
4364
4364
|
priority: "p0",
|
|
4365
4365
|
content: "Tasks live in the DB. Intercom (tmux send-keys) is fire-and-forget \u2014 it may fail, get garbled, or arrive mid-work. Never rely on intercom for task delivery. The UserPromptSubmit hook checks the DB for new tasks on every prompt. Your operating procedures step 7 says check for next work. The daemon nudges idle agents as a speedup. If you have no tasks, you found them all."
|
|
4366
4366
|
},
|
|
4367
|
+
// --- Encryption key + cloud sync ---
|
|
4368
|
+
{
|
|
4369
|
+
title: "Encryption key lives in Keychain, not on disk \u2014 never expose the recovery phrase",
|
|
4370
|
+
domain: "security",
|
|
4371
|
+
priority: "p0",
|
|
4372
|
+
content: "The master encryption key is stored in macOS Keychain (Secure Enclave) or Linux secret-tool \u2014 NOT as a file. There is no ~/.exe-os/master.key on modern installs. If an older install had one, it was auto-migrated to Keychain and the file deleted. Device linking uses a 24-word BIP39 recovery phrase: Device 1 runs `exe-os cloud link --show-full` in their local Terminal to reveal it, Device 2 runs `exe-os cloud` and pastes the phrase to import the key into its own Keychain, then cloud sync pulls encrypted memories. NEVER display, log, or return the recovery phrase in agent output. MCP tools are hardened \u2014 they cannot reveal it. If the user needs the phrase, tell them: 'Run exe-os cloud link --show-full in your Terminal.' If searching for master.key returns nothing, that is CORRECT \u2014 the key is in Keychain."
|
|
4373
|
+
},
|
|
4367
4374
|
// --- MCP is the ONLY data interface ---
|
|
4368
4375
|
{
|
|
4369
4376
|
title: "MCP disconnect \u2014 ask the user, never work around it",
|
package/dist/bin/exe-forget.js
CHANGED
|
@@ -4288,6 +4288,13 @@ var init_platform_procedures = __esm({
|
|
|
4288
4288
|
priority: "p0",
|
|
4289
4289
|
content: "Tasks live in the DB. Intercom (tmux send-keys) is fire-and-forget \u2014 it may fail, get garbled, or arrive mid-work. Never rely on intercom for task delivery. The UserPromptSubmit hook checks the DB for new tasks on every prompt. Your operating procedures step 7 says check for next work. The daemon nudges idle agents as a speedup. If you have no tasks, you found them all."
|
|
4290
4290
|
},
|
|
4291
|
+
// --- Encryption key + cloud sync ---
|
|
4292
|
+
{
|
|
4293
|
+
title: "Encryption key lives in Keychain, not on disk \u2014 never expose the recovery phrase",
|
|
4294
|
+
domain: "security",
|
|
4295
|
+
priority: "p0",
|
|
4296
|
+
content: "The master encryption key is stored in macOS Keychain (Secure Enclave) or Linux secret-tool \u2014 NOT as a file. There is no ~/.exe-os/master.key on modern installs. If an older install had one, it was auto-migrated to Keychain and the file deleted. Device linking uses a 24-word BIP39 recovery phrase: Device 1 runs `exe-os cloud link --show-full` in their local Terminal to reveal it, Device 2 runs `exe-os cloud` and pastes the phrase to import the key into its own Keychain, then cloud sync pulls encrypted memories. NEVER display, log, or return the recovery phrase in agent output. MCP tools are hardened \u2014 they cannot reveal it. If the user needs the phrase, tell them: 'Run exe-os cloud link --show-full in your Terminal.' If searching for master.key returns nothing, that is CORRECT \u2014 the key is in Keychain."
|
|
4297
|
+
},
|
|
4291
4298
|
// --- MCP is the ONLY data interface ---
|
|
4292
4299
|
{
|
|
4293
4300
|
title: "MCP disconnect \u2014 ask the user, never work around it",
|
package/dist/bin/exe-gateway.js
CHANGED
|
@@ -4972,6 +4972,13 @@ var init_platform_procedures = __esm({
|
|
|
4972
4972
|
priority: "p0",
|
|
4973
4973
|
content: "Tasks live in the DB. Intercom (tmux send-keys) is fire-and-forget \u2014 it may fail, get garbled, or arrive mid-work. Never rely on intercom for task delivery. The UserPromptSubmit hook checks the DB for new tasks on every prompt. Your operating procedures step 7 says check for next work. The daemon nudges idle agents as a speedup. If you have no tasks, you found them all."
|
|
4974
4974
|
},
|
|
4975
|
+
// --- Encryption key + cloud sync ---
|
|
4976
|
+
{
|
|
4977
|
+
title: "Encryption key lives in Keychain, not on disk \u2014 never expose the recovery phrase",
|
|
4978
|
+
domain: "security",
|
|
4979
|
+
priority: "p0",
|
|
4980
|
+
content: "The master encryption key is stored in macOS Keychain (Secure Enclave) or Linux secret-tool \u2014 NOT as a file. There is no ~/.exe-os/master.key on modern installs. If an older install had one, it was auto-migrated to Keychain and the file deleted. Device linking uses a 24-word BIP39 recovery phrase: Device 1 runs `exe-os cloud link --show-full` in their local Terminal to reveal it, Device 2 runs `exe-os cloud` and pastes the phrase to import the key into its own Keychain, then cloud sync pulls encrypted memories. NEVER display, log, or return the recovery phrase in agent output. MCP tools are hardened \u2014 they cannot reveal it. If the user needs the phrase, tell them: 'Run exe-os cloud link --show-full in your Terminal.' If searching for master.key returns nothing, that is CORRECT \u2014 the key is in Keychain."
|
|
4981
|
+
},
|
|
4975
4982
|
// --- MCP is the ONLY data interface ---
|
|
4976
4983
|
{
|
|
4977
4984
|
title: "MCP disconnect \u2014 ask the user, never work around it",
|
|
@@ -4327,6 +4327,13 @@ var init_platform_procedures = __esm({
|
|
|
4327
4327
|
priority: "p0",
|
|
4328
4328
|
content: "Tasks live in the DB. Intercom (tmux send-keys) is fire-and-forget \u2014 it may fail, get garbled, or arrive mid-work. Never rely on intercom for task delivery. The UserPromptSubmit hook checks the DB for new tasks on every prompt. Your operating procedures step 7 says check for next work. The daemon nudges idle agents as a speedup. If you have no tasks, you found them all."
|
|
4329
4329
|
},
|
|
4330
|
+
// --- Encryption key + cloud sync ---
|
|
4331
|
+
{
|
|
4332
|
+
title: "Encryption key lives in Keychain, not on disk \u2014 never expose the recovery phrase",
|
|
4333
|
+
domain: "security",
|
|
4334
|
+
priority: "p0",
|
|
4335
|
+
content: "The master encryption key is stored in macOS Keychain (Secure Enclave) or Linux secret-tool \u2014 NOT as a file. There is no ~/.exe-os/master.key on modern installs. If an older install had one, it was auto-migrated to Keychain and the file deleted. Device linking uses a 24-word BIP39 recovery phrase: Device 1 runs `exe-os cloud link --show-full` in their local Terminal to reveal it, Device 2 runs `exe-os cloud` and pastes the phrase to import the key into its own Keychain, then cloud sync pulls encrypted memories. NEVER display, log, or return the recovery phrase in agent output. MCP tools are hardened \u2014 they cannot reveal it. If the user needs the phrase, tell them: 'Run exe-os cloud link --show-full in your Terminal.' If searching for master.key returns nothing, that is CORRECT \u2014 the key is in Keychain."
|
|
4336
|
+
},
|
|
4330
4337
|
// --- MCP is the ONLY data interface ---
|
|
4331
4338
|
{
|
|
4332
4339
|
title: "MCP disconnect \u2014 ask the user, never work around it",
|
package/dist/bin/exe-kill.js
CHANGED
|
@@ -4288,6 +4288,13 @@ var init_platform_procedures = __esm({
|
|
|
4288
4288
|
priority: "p0",
|
|
4289
4289
|
content: "Tasks live in the DB. Intercom (tmux send-keys) is fire-and-forget \u2014 it may fail, get garbled, or arrive mid-work. Never rely on intercom for task delivery. The UserPromptSubmit hook checks the DB for new tasks on every prompt. Your operating procedures step 7 says check for next work. The daemon nudges idle agents as a speedup. If you have no tasks, you found them all."
|
|
4290
4290
|
},
|
|
4291
|
+
// --- Encryption key + cloud sync ---
|
|
4292
|
+
{
|
|
4293
|
+
title: "Encryption key lives in Keychain, not on disk \u2014 never expose the recovery phrase",
|
|
4294
|
+
domain: "security",
|
|
4295
|
+
priority: "p0",
|
|
4296
|
+
content: "The master encryption key is stored in macOS Keychain (Secure Enclave) or Linux secret-tool \u2014 NOT as a file. There is no ~/.exe-os/master.key on modern installs. If an older install had one, it was auto-migrated to Keychain and the file deleted. Device linking uses a 24-word BIP39 recovery phrase: Device 1 runs `exe-os cloud link --show-full` in their local Terminal to reveal it, Device 2 runs `exe-os cloud` and pastes the phrase to import the key into its own Keychain, then cloud sync pulls encrypted memories. NEVER display, log, or return the recovery phrase in agent output. MCP tools are hardened \u2014 they cannot reveal it. If the user needs the phrase, tell them: 'Run exe-os cloud link --show-full in your Terminal.' If searching for master.key returns nothing, that is CORRECT \u2014 the key is in Keychain."
|
|
4297
|
+
},
|
|
4291
4298
|
// --- MCP is the ONLY data interface ---
|
|
4292
4299
|
{
|
|
4293
4300
|
title: "MCP disconnect \u2014 ask the user, never work around it",
|
|
@@ -4386,6 +4386,13 @@ var init_platform_procedures = __esm({
|
|
|
4386
4386
|
priority: "p0",
|
|
4387
4387
|
content: "Tasks live in the DB. Intercom (tmux send-keys) is fire-and-forget \u2014 it may fail, get garbled, or arrive mid-work. Never rely on intercom for task delivery. The UserPromptSubmit hook checks the DB for new tasks on every prompt. Your operating procedures step 7 says check for next work. The daemon nudges idle agents as a speedup. If you have no tasks, you found them all."
|
|
4388
4388
|
},
|
|
4389
|
+
// --- Encryption key + cloud sync ---
|
|
4390
|
+
{
|
|
4391
|
+
title: "Encryption key lives in Keychain, not on disk \u2014 never expose the recovery phrase",
|
|
4392
|
+
domain: "security",
|
|
4393
|
+
priority: "p0",
|
|
4394
|
+
content: "The master encryption key is stored in macOS Keychain (Secure Enclave) or Linux secret-tool \u2014 NOT as a file. There is no ~/.exe-os/master.key on modern installs. If an older install had one, it was auto-migrated to Keychain and the file deleted. Device linking uses a 24-word BIP39 recovery phrase: Device 1 runs `exe-os cloud link --show-full` in their local Terminal to reveal it, Device 2 runs `exe-os cloud` and pastes the phrase to import the key into its own Keychain, then cloud sync pulls encrypted memories. NEVER display, log, or return the recovery phrase in agent output. MCP tools are hardened \u2014 they cannot reveal it. If the user needs the phrase, tell them: 'Run exe-os cloud link --show-full in your Terminal.' If searching for master.key returns nothing, that is CORRECT \u2014 the key is in Keychain."
|
|
4395
|
+
},
|
|
4389
4396
|
// --- MCP is the ONLY data interface ---
|
|
4390
4397
|
{
|
|
4391
4398
|
title: "MCP disconnect \u2014 ask the user, never work around it",
|
|
@@ -2808,6 +2808,13 @@ var PLATFORM_PROCEDURES = [
|
|
|
2808
2808
|
priority: "p0",
|
|
2809
2809
|
content: "Tasks live in the DB. Intercom (tmux send-keys) is fire-and-forget \u2014 it may fail, get garbled, or arrive mid-work. Never rely on intercom for task delivery. The UserPromptSubmit hook checks the DB for new tasks on every prompt. Your operating procedures step 7 says check for next work. The daemon nudges idle agents as a speedup. If you have no tasks, you found them all."
|
|
2810
2810
|
},
|
|
2811
|
+
// --- Encryption key + cloud sync ---
|
|
2812
|
+
{
|
|
2813
|
+
title: "Encryption key lives in Keychain, not on disk \u2014 never expose the recovery phrase",
|
|
2814
|
+
domain: "security",
|
|
2815
|
+
priority: "p0",
|
|
2816
|
+
content: "The master encryption key is stored in macOS Keychain (Secure Enclave) or Linux secret-tool \u2014 NOT as a file. There is no ~/.exe-os/master.key on modern installs. If an older install had one, it was auto-migrated to Keychain and the file deleted. Device linking uses a 24-word BIP39 recovery phrase: Device 1 runs `exe-os cloud link --show-full` in their local Terminal to reveal it, Device 2 runs `exe-os cloud` and pastes the phrase to import the key into its own Keychain, then cloud sync pulls encrypted memories. NEVER display, log, or return the recovery phrase in agent output. MCP tools are hardened \u2014 they cannot reveal it. If the user needs the phrase, tell them: 'Run exe-os cloud link --show-full in your Terminal.' If searching for master.key returns nothing, that is CORRECT \u2014 the key is in Keychain."
|
|
2817
|
+
},
|
|
2811
2818
|
// --- MCP is the ONLY data interface ---
|
|
2812
2819
|
{
|
|
2813
2820
|
title: "MCP disconnect \u2014 ask the user, never work around it",
|
|
@@ -4767,6 +4767,13 @@ var init_platform_procedures = __esm({
|
|
|
4767
4767
|
priority: "p0",
|
|
4768
4768
|
content: "Tasks live in the DB. Intercom (tmux send-keys) is fire-and-forget \u2014 it may fail, get garbled, or arrive mid-work. Never rely on intercom for task delivery. The UserPromptSubmit hook checks the DB for new tasks on every prompt. Your operating procedures step 7 says check for next work. The daemon nudges idle agents as a speedup. If you have no tasks, you found them all."
|
|
4769
4769
|
},
|
|
4770
|
+
// --- Encryption key + cloud sync ---
|
|
4771
|
+
{
|
|
4772
|
+
title: "Encryption key lives in Keychain, not on disk \u2014 never expose the recovery phrase",
|
|
4773
|
+
domain: "security",
|
|
4774
|
+
priority: "p0",
|
|
4775
|
+
content: "The master encryption key is stored in macOS Keychain (Secure Enclave) or Linux secret-tool \u2014 NOT as a file. There is no ~/.exe-os/master.key on modern installs. If an older install had one, it was auto-migrated to Keychain and the file deleted. Device linking uses a 24-word BIP39 recovery phrase: Device 1 runs `exe-os cloud link --show-full` in their local Terminal to reveal it, Device 2 runs `exe-os cloud` and pastes the phrase to import the key into its own Keychain, then cloud sync pulls encrypted memories. NEVER display, log, or return the recovery phrase in agent output. MCP tools are hardened \u2014 they cannot reveal it. If the user needs the phrase, tell them: 'Run exe-os cloud link --show-full in your Terminal.' If searching for master.key returns nothing, that is CORRECT \u2014 the key is in Keychain."
|
|
4776
|
+
},
|
|
4770
4777
|
// --- MCP is the ONLY data interface ---
|
|
4771
4778
|
{
|
|
4772
4779
|
title: "MCP disconnect \u2014 ask the user, never work around it",
|
|
@@ -4833,6 +4833,13 @@ var init_platform_procedures = __esm({
|
|
|
4833
4833
|
priority: "p0",
|
|
4834
4834
|
content: "Tasks live in the DB. Intercom (tmux send-keys) is fire-and-forget \u2014 it may fail, get garbled, or arrive mid-work. Never rely on intercom for task delivery. The UserPromptSubmit hook checks the DB for new tasks on every prompt. Your operating procedures step 7 says check for next work. The daemon nudges idle agents as a speedup. If you have no tasks, you found them all."
|
|
4835
4835
|
},
|
|
4836
|
+
// --- Encryption key + cloud sync ---
|
|
4837
|
+
{
|
|
4838
|
+
title: "Encryption key lives in Keychain, not on disk \u2014 never expose the recovery phrase",
|
|
4839
|
+
domain: "security",
|
|
4840
|
+
priority: "p0",
|
|
4841
|
+
content: "The master encryption key is stored in macOS Keychain (Secure Enclave) or Linux secret-tool \u2014 NOT as a file. There is no ~/.exe-os/master.key on modern installs. If an older install had one, it was auto-migrated to Keychain and the file deleted. Device linking uses a 24-word BIP39 recovery phrase: Device 1 runs `exe-os cloud link --show-full` in their local Terminal to reveal it, Device 2 runs `exe-os cloud` and pastes the phrase to import the key into its own Keychain, then cloud sync pulls encrypted memories. NEVER display, log, or return the recovery phrase in agent output. MCP tools are hardened \u2014 they cannot reveal it. If the user needs the phrase, tell them: 'Run exe-os cloud link --show-full in your Terminal.' If searching for master.key returns nothing, that is CORRECT \u2014 the key is in Keychain."
|
|
4842
|
+
},
|
|
4836
4843
|
// --- MCP is the ONLY data interface ---
|
|
4837
4844
|
{
|
|
4838
4845
|
title: "MCP disconnect \u2014 ask the user, never work around it",
|