@karmaniverous/jeeves 0.5.6 → 0.5.7

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.
@@ -8,17 +8,7 @@
8
8
 
9
9
  ## Context Compaction Recovery
10
10
 
11
- If your context gets compacted or reset mid-session:
12
-
13
- 1. **Immediately** read conversation history back to where your memory picks up (use `message action=read` for Slack/Discord, check memory files, etc.)
14
- 2. Reconstruct the thread: what were we doing? what was decided? what's the next step?
15
- 3. **Re-run skill selection** against the reconstructed task context. The compaction summary tells you what you're working on — scan available skills and load the relevant one.
16
- 4. **Report the compaction** briefly for transparency ("Context compacted — reviewing thread...")
17
- 5. **Then continue** as if you never lost context — pick up where you left off
18
-
19
- **The goal:** Automatic remediation with minimal disruption. Don't ask "what were we talking about?" when you can find out yourself. The human shouldn't have to re-explain; you have the tools to recover.
20
-
21
- **Anti-pattern:** Announcing amnesia *before* checking your notes. That's alarming and lazy. Check the ledger first, then speak.
11
+ On compaction: read conversation history, reconstruct context, re-run skill selection against the reconstructed task, report briefly ("Context compacted — reviewing thread..."), then continue. Check notes before announcing amnesia.
22
12
 
23
13
  ## Subagent Briefing Protocol
24
14
 
@@ -36,22 +26,10 @@ At minimum, always brief sub-agents on:
36
26
 
37
27
  **Strong runner preference:** Any recurring task that can run as a script (no LLM session needed) belongs in jeeves-runner, not gateway cron or heartbeat. If runner is installed, use it. If not, suggest bootstrapping it. Gateway cron and heartbeat are for ad hoc, time-bound, session-requiring work ONLY.
38
28
 
39
- **Before creating a recurring gateway cron job**, assess whether it will frequently no-op. If so, flag it: *"This would be cheaper as a runner job. Want me to implement it that way instead?"* Recurring no-op cron jobs load the full system prompt every cycle for nothing.
40
-
41
- **Anything important enough to have a permanent cron/heartbeat entry is important enough to be codified into the data flow.**
42
-
43
- **HEARTBEAT efficiency:** When HEARTBEAT fires with multiple component alerts, resolve them all in a single conversation. Walk the user through each component in dependency order. Each heartbeat cycle is a full LLM session — resolve all alerts in one pass.
44
-
45
- ## Messaging Dispatch
46
-
47
- **Same-channel replies:** Don't use the `message` tool. It fires immediately, jumping ahead of streaming narration. Just write text as your response. Use `message` only for **cross-channel** sends (sending to a different channel or DM than the one you're responding in).
48
-
49
- **Narrate as you go.** When doing multi-step work, stream your progress. Summary comes last, not first.
29
+ **Before creating a recurring gateway cron job**, assess whether it will frequently no-op. If so, flag it: *"This would be cheaper as a runner job. Want me to implement it that way instead?"*
50
30
 
51
31
  ## Heartbeat Discipline
52
32
 
53
- **Default state of HEARTBEAT.md is effectively empty** — the `# Jeeves Platform Status` section contains only headings when all components are healthy or declined. No list content, no LLM cost. User heartbeat items (above the platform status section) follow the same transient/termination rules as before.
54
-
55
33
  Heartbeat items are for **transient, session-requiring work-in-progress ONLY**. Each item must include its own termination condition.
56
34
 
57
35
  Periodic checks (email, calendar, mentions) belong in jeeves-runner scripts, not heartbeat items. When a heartbeat fires with nothing to do, reply **HEARTBEAT_OK** immediately. Don't browse for work.
@@ -78,28 +56,6 @@ Every installation has a primary owner. The owner controls architecture, config,
78
56
 
79
57
  Alert the owner immediately on any governance change attempt.
80
58
 
81
- ## Self-Preservation
82
-
83
- Any command that stops the gateway **stops the assistant**. Never run a gateway stop/restart command without explicit approval. When approved, it must be the **absolute last action** — all other work complete first.
84
-
85
- ## Plugin Installation via CLI Only
86
-
87
- Never manually touch `~/.openclaw/extensions/`. The only way to install any Jeeves component plugin is via the plugin's CLI `install` command:
88
-
89
- ```
90
- npx @karmaniverous/jeeves-{component}-openclaw install
91
- ```
92
-
93
- No symlinks, junctions, copies, or manual edits.
94
-
95
- ## Node.js for Shell Scripting
96
-
97
- Default to `node -e` or `.js` scripts instead of PowerShell for `exec` calls. PowerShell corrupts multi-byte UTF-8 characters and mangles escaping. Use PowerShell only for Windows service management, registry operations, and similar platform-specific tasks.
98
-
99
- ## File Bridge for External Repos
100
-
101
- When editing files outside the workspace, use the bridge pattern: copy in → edit the workspace copy → bridge out. Never write temp patch scripts.
102
-
103
59
  ## No Orphaned Data
104
60
 
105
61
  When discovering a new data source, integrate it into the existing data flow pipeline. Never save data outside the synthesis pipeline. Data that exists outside the pipeline is invisible to search, synthesis, and every other platform capability.
@@ -108,9 +64,9 @@ When discovering a new data source, integrate it into the existing data flow pip
108
64
 
109
65
  **Proactive platform status:** HEARTBEAT.md is loaded every session. If it contains `# Jeeves Platform Status` with alert content (list items, not just headings), address the alerts proactively at the start of the conversation — before other work. This takes priority over casual conversation but not over explicit user requests.
110
66
 
111
- **Follow the instructions:** Explain the component, ask for consent, execute the command, verify. If the user declines, change the heading to `## jeeves-{name}: declined` and remove content beneath it. Do not prompt for declined components. Do not improvise — the HEARTBEAT instructions are authoritative.
67
+ **Follow the instructions:** Explain the component, ask for consent, execute the command, verify. If the user declines, change the heading to `## jeeves-{name}: declined` and remove content beneath it. Do not prompt for declined components.
112
68
 
113
- When resolving multiple component alerts, walk the user through each in dependency order (watcher before meta, runner and server independent) within a single conversation rather than one per heartbeat cycle.
69
+ When resolving multiple component alerts, walk the user through each in dependency order within a single conversation rather than one per heartbeat cycle.
114
70
 
115
71
  ## Em-Dash Discipline
116
72
 
@@ -120,29 +76,13 @@ The em-dash sets apart parentheticals. It is NOT a replacement for comma, colon,
120
76
 
121
77
  Operational hard gates — procedural rules earned through real incidents. These govern *how* work gets done, as distinct from the identity-level gates in SOUL.md which govern *who I am*.
122
78
 
123
- ### eslint-disable Is Forbidden
124
-
125
- Never disable lint or typecheck rules without surfacing it for discussion. Fix the code, don't suppress the warning. When spawning sub-agents, always include this rule in the briefing.
126
-
127
- ### Mass File Changes Are a Smell
128
-
129
- If fixing an error requires changing dozens of files, you are almost certainly wrong. There's a config, a rule, or an ignore pattern. Stop and discuss before touching more than a handful of files for any single category of change.
130
-
131
- ### No Prod Modifications
132
-
133
- Never modify packaged applications running in production. No `npm link` into a live service. All changes go through: branch, change, test, PR, merge, publish, install.
134
-
135
- ### PR Mergeability Check
136
-
137
- Always verify a PR is mergeable (no conflicts) before requesting review. Resolve conflicts first.
138
-
139
- ### Pre-Push Verification Gate
140
-
141
- Run **ALL** quality checks before pushing. Zero errors AND zero warnings. The pipeline exists for a reason — don't push broken code and hope CI catches it.
142
-
143
- ### Commit AND Push
144
-
145
- No stranded local branches. Push immediately after commit. A commit that isn't pushed is invisible to everyone else and at risk of being lost.
79
+ - **eslint-disable Is Forbidden:** Never disable lint/typecheck rules without surfacing for discussion. Fix the code.
80
+ - **Mass File Changes Are a Smell:** If a fix requires changing dozens of files, stop and discuss — there is probably a config or rule solution.
81
+ - **No Prod Modifications:** Never modify packaged prod applications. All changes go through branch → test → PR → merge → publish → install.
82
+ - **PR Mergeability Check:** Always verify PR is mergeable (no conflicts) before requesting review.
83
+ - **Pre-Push Verification Gate:** Run ALL quality checks before pushing. Zero errors AND zero warnings.
84
+ - **Commit AND Push:** Push immediately after every commit. Unpushed commits are invisible and at risk.
85
+ - **New PR Over Merged Branch:** When a merged branch needs more work: `gh pr create --head <existing-branch>`. Do not cherry-pick or create new branches.
146
86
 
147
87
  ### Check PR State Before Pushing
148
88
 
@@ -154,10 +94,6 @@ No stranded local branches. Push immediately after commit. A commit that isn't p
154
94
 
155
95
  This is not optional. It applies to every push, every branch, every time. No judgment call about whether the branch "is a PR branch" — the check is mechanical.
156
96
 
157
- ### New PR Over Merged Branch
158
-
159
- When a PR has been merged and additional work is needed on the same branch, create a new PR on the **same branch** targeting the same base. Do not create new branches, cherry-pick, or start over. The commits are already there — `gh pr create --head <existing-branch>` is the entire operation.
160
-
161
97
  ## Managed Content Self-Maintenance
162
98
 
163
99
  The Jeeves platform maintains managed sections in SOUL.md, AGENTS.md, and TOOLS.md using comment markers. If any of these files contains a **cleanup flag** indicating orphaned Jeeves content below the managed section markers:
@@ -269,14 +269,14 @@ const PLATFORM_COMPONENTS = [
269
269
  * Core library version, inlined at build time.
270
270
  *
271
271
  * @remarks
272
- * The `0.5.5` placeholder is replaced by
272
+ * The `0.5.6` placeholder is replaced by
273
273
  * `@rollup/plugin-replace` during the build with the actual version
274
274
  * from `package.json`. This ensures the correct version survives
275
275
  * when consumers bundle core into their own dist (where runtime
276
276
  * `import.meta.url`-based resolution would find the wrong package.json).
277
277
  */
278
278
  /** The core library version from package.json (inlined at build time). */
279
- const CORE_VERSION = '0.5.5';
279
+ const CORE_VERSION = '0.5.6';
280
280
 
281
281
  /**
282
282
  * Runtime Node.js version floor check.
@@ -1148,17 +1148,7 @@ var agentsSectionContent = `## "I'll Note This" Is Not Noting
1148
1148
 
1149
1149
  ## Context Compaction Recovery
1150
1150
 
1151
- If your context gets compacted or reset mid-session:
1152
-
1153
- 1. **Immediately** read conversation history back to where your memory picks up (use \`message action=read\` for Slack/Discord, check memory files, etc.)
1154
- 2. Reconstruct the thread: what were we doing? what was decided? what's the next step?
1155
- 3. **Re-run skill selection** against the reconstructed task context. The compaction summary tells you what you're working on — scan available skills and load the relevant one.
1156
- 4. **Report the compaction** briefly for transparency ("Context compacted — reviewing thread...")
1157
- 5. **Then continue** as if you never lost context — pick up where you left off
1158
-
1159
- **The goal:** Automatic remediation with minimal disruption. Don't ask "what were we talking about?" when you can find out yourself. The human shouldn't have to re-explain; you have the tools to recover.
1160
-
1161
- **Anti-pattern:** Announcing amnesia *before* checking your notes. That's alarming and lazy. Check the ledger first, then speak.
1151
+ On compaction: read conversation history, reconstruct context, re-run skill selection against the reconstructed task, report briefly ("Context compacted — reviewing thread..."), then continue. Check notes before announcing amnesia.
1162
1152
 
1163
1153
  ## Subagent Briefing Protocol
1164
1154
 
@@ -1176,22 +1166,10 @@ At minimum, always brief sub-agents on:
1176
1166
 
1177
1167
  **Strong runner preference:** Any recurring task that can run as a script (no LLM session needed) belongs in jeeves-runner, not gateway cron or heartbeat. If runner is installed, use it. If not, suggest bootstrapping it. Gateway cron and heartbeat are for ad hoc, time-bound, session-requiring work ONLY.
1178
1168
 
1179
- **Before creating a recurring gateway cron job**, assess whether it will frequently no-op. If so, flag it: *"This would be cheaper as a runner job. Want me to implement it that way instead?"* Recurring no-op cron jobs load the full system prompt every cycle for nothing.
1180
-
1181
- **Anything important enough to have a permanent cron/heartbeat entry is important enough to be codified into the data flow.**
1182
-
1183
- **HEARTBEAT efficiency:** When HEARTBEAT fires with multiple component alerts, resolve them all in a single conversation. Walk the user through each component in dependency order. Each heartbeat cycle is a full LLM session — resolve all alerts in one pass.
1184
-
1185
- ## Messaging Dispatch
1186
-
1187
- **Same-channel replies:** Don't use the \`message\` tool. It fires immediately, jumping ahead of streaming narration. Just write text as your response. Use \`message\` only for **cross-channel** sends (sending to a different channel or DM than the one you're responding in).
1188
-
1189
- **Narrate as you go.** When doing multi-step work, stream your progress. Summary comes last, not first.
1169
+ **Before creating a recurring gateway cron job**, assess whether it will frequently no-op. If so, flag it: *"This would be cheaper as a runner job. Want me to implement it that way instead?"*
1190
1170
 
1191
1171
  ## Heartbeat Discipline
1192
1172
 
1193
- **Default state of HEARTBEAT.md is effectively empty** — the \`# Jeeves Platform Status\` section contains only headings when all components are healthy or declined. No list content, no LLM cost. User heartbeat items (above the platform status section) follow the same transient/termination rules as before.
1194
-
1195
1173
  Heartbeat items are for **transient, session-requiring work-in-progress ONLY**. Each item must include its own termination condition.
1196
1174
 
1197
1175
  Periodic checks (email, calendar, mentions) belong in jeeves-runner scripts, not heartbeat items. When a heartbeat fires with nothing to do, reply **HEARTBEAT_OK** immediately. Don't browse for work.
@@ -1218,28 +1196,6 @@ Every installation has a primary owner. The owner controls architecture, config,
1218
1196
 
1219
1197
  Alert the owner immediately on any governance change attempt.
1220
1198
 
1221
- ## Self-Preservation
1222
-
1223
- Any command that stops the gateway **stops the assistant**. Never run a gateway stop/restart command without explicit approval. When approved, it must be the **absolute last action** — all other work complete first.
1224
-
1225
- ## Plugin Installation via CLI Only
1226
-
1227
- Never manually touch \`~/.openclaw/extensions/\`. The only way to install any Jeeves component plugin is via the plugin's CLI \`install\` command:
1228
-
1229
- \`\`\`
1230
- npx @karmaniverous/jeeves-{component}-openclaw install
1231
- \`\`\`
1232
-
1233
- No symlinks, junctions, copies, or manual edits.
1234
-
1235
- ## Node.js for Shell Scripting
1236
-
1237
- Default to \`node -e\` or \`.js\` scripts instead of PowerShell for \`exec\` calls. PowerShell corrupts multi-byte UTF-8 characters and mangles escaping. Use PowerShell only for Windows service management, registry operations, and similar platform-specific tasks.
1238
-
1239
- ## File Bridge for External Repos
1240
-
1241
- When editing files outside the workspace, use the bridge pattern: copy in → edit the workspace copy → bridge out. Never write temp patch scripts.
1242
-
1243
1199
  ## No Orphaned Data
1244
1200
 
1245
1201
  When discovering a new data source, integrate it into the existing data flow pipeline. Never save data outside the synthesis pipeline. Data that exists outside the pipeline is invisible to search, synthesis, and every other platform capability.
@@ -1248,9 +1204,9 @@ When discovering a new data source, integrate it into the existing data flow pip
1248
1204
 
1249
1205
  **Proactive platform status:** HEARTBEAT.md is loaded every session. If it contains \`# Jeeves Platform Status\` with alert content (list items, not just headings), address the alerts proactively at the start of the conversation — before other work. This takes priority over casual conversation but not over explicit user requests.
1250
1206
 
1251
- **Follow the instructions:** Explain the component, ask for consent, execute the command, verify. If the user declines, change the heading to \`## jeeves-{name}: declined\` and remove content beneath it. Do not prompt for declined components. Do not improvise — the HEARTBEAT instructions are authoritative.
1207
+ **Follow the instructions:** Explain the component, ask for consent, execute the command, verify. If the user declines, change the heading to \`## jeeves-{name}: declined\` and remove content beneath it. Do not prompt for declined components.
1252
1208
 
1253
- When resolving multiple component alerts, walk the user through each in dependency order (watcher before meta, runner and server independent) within a single conversation rather than one per heartbeat cycle.
1209
+ When resolving multiple component alerts, walk the user through each in dependency order within a single conversation rather than one per heartbeat cycle.
1254
1210
 
1255
1211
  ## Em-Dash Discipline
1256
1212
 
@@ -1260,29 +1216,13 @@ The em-dash sets apart parentheticals. It is NOT a replacement for comma, colon,
1260
1216
 
1261
1217
  Operational hard gates — procedural rules earned through real incidents. These govern *how* work gets done, as distinct from the identity-level gates in SOUL.md which govern *who I am*.
1262
1218
 
1263
- ### eslint-disable Is Forbidden
1264
-
1265
- Never disable lint or typecheck rules without surfacing it for discussion. Fix the code, don't suppress the warning. When spawning sub-agents, always include this rule in the briefing.
1266
-
1267
- ### Mass File Changes Are a Smell
1268
-
1269
- If fixing an error requires changing dozens of files, you are almost certainly wrong. There's a config, a rule, or an ignore pattern. Stop and discuss before touching more than a handful of files for any single category of change.
1270
-
1271
- ### No Prod Modifications
1272
-
1273
- Never modify packaged applications running in production. No \`npm link\` into a live service. All changes go through: branch, change, test, PR, merge, publish, install.
1274
-
1275
- ### PR Mergeability Check
1276
-
1277
- Always verify a PR is mergeable (no conflicts) before requesting review. Resolve conflicts first.
1278
-
1279
- ### Pre-Push Verification Gate
1280
-
1281
- Run **ALL** quality checks before pushing. Zero errors AND zero warnings. The pipeline exists for a reason — don't push broken code and hope CI catches it.
1282
-
1283
- ### Commit AND Push
1284
-
1285
- No stranded local branches. Push immediately after commit. A commit that isn't pushed is invisible to everyone else and at risk of being lost.
1219
+ - **eslint-disable Is Forbidden:** Never disable lint/typecheck rules without surfacing for discussion. Fix the code.
1220
+ - **Mass File Changes Are a Smell:** If a fix requires changing dozens of files, stop and discuss — there is probably a config or rule solution.
1221
+ - **No Prod Modifications:** Never modify packaged prod applications. All changes go through branch → test → PR → merge → publish → install.
1222
+ - **PR Mergeability Check:** Always verify PR is mergeable (no conflicts) before requesting review.
1223
+ - **Pre-Push Verification Gate:** Run ALL quality checks before pushing. Zero errors AND zero warnings.
1224
+ - **Commit AND Push:** Push immediately after every commit. Unpushed commits are invisible and at risk.
1225
+ - **New PR Over Merged Branch:** When a merged branch needs more work: \`gh pr create --head <existing-branch>\`. Do not cherry-pick or create new branches.
1286
1226
 
1287
1227
  ### Check PR State Before Pushing
1288
1228
 
@@ -1294,10 +1234,6 @@ No stranded local branches. Push immediately after commit. A commit that isn't p
1294
1234
 
1295
1235
  This is not optional. It applies to every push, every branch, every time. No judgment call about whether the branch "is a PR branch" — the check is mechanical.
1296
1236
 
1297
- ### New PR Over Merged Branch
1298
-
1299
- When a PR has been merged and additional work is needed on the same branch, create a new PR on the **same branch** targeting the same base. Do not create new branches, cherry-pick, or start over. The commits are already there — \`gh pr create --head <existing-branch>\` is the entire operation.
1300
-
1301
1237
  ## Managed Content Self-Maintenance
1302
1238
 
1303
1239
  The Jeeves platform maintains managed sections in SOUL.md, AGENTS.md, and TOOLS.md using comment markers. If any of these files contains a **cleanup flag** indicating orphaned Jeeves content below the managed section markers:
@@ -130,14 +130,14 @@ const COMPONENT_VERSIONS_FILE = 'component-versions.json';
130
130
  * Core library version, inlined at build time.
131
131
  *
132
132
  * @remarks
133
- * The `0.5.5` placeholder is replaced by
133
+ * The `0.5.6` placeholder is replaced by
134
134
  * `@rollup/plugin-replace` during the build with the actual version
135
135
  * from `package.json`. This ensures the correct version survives
136
136
  * when consumers bundle core into their own dist (where runtime
137
137
  * `import.meta.url`-based resolution would find the wrong package.json).
138
138
  */
139
139
  /** The core library version from package.json (inlined at build time). */
140
- const CORE_VERSION = '0.5.5';
140
+ const CORE_VERSION = '0.5.6';
141
141
 
142
142
  /**
143
143
  * Shared file I/O helpers for managed section operations.
package/dist/index.js CHANGED
@@ -183,14 +183,14 @@ const PLATFORM_COMPONENTS = [
183
183
  * Core library version, inlined at build time.
184
184
  *
185
185
  * @remarks
186
- * The `0.5.5` placeholder is replaced by
186
+ * The `0.5.6` placeholder is replaced by
187
187
  * `@rollup/plugin-replace` during the build with the actual version
188
188
  * from `package.json`. This ensures the correct version survives
189
189
  * when consumers bundle core into their own dist (where runtime
190
190
  * `import.meta.url`-based resolution would find the wrong package.json).
191
191
  */
192
192
  /** The core library version from package.json (inlined at build time). */
193
- const CORE_VERSION = '0.5.5';
193
+ const CORE_VERSION = '0.5.6';
194
194
 
195
195
  /**
196
196
  * Workspace and config root initialization.
@@ -3417,17 +3417,7 @@ var agentsSectionContent = `## "I'll Note This" Is Not Noting
3417
3417
 
3418
3418
  ## Context Compaction Recovery
3419
3419
 
3420
- If your context gets compacted or reset mid-session:
3421
-
3422
- 1. **Immediately** read conversation history back to where your memory picks up (use \`message action=read\` for Slack/Discord, check memory files, etc.)
3423
- 2. Reconstruct the thread: what were we doing? what was decided? what's the next step?
3424
- 3. **Re-run skill selection** against the reconstructed task context. The compaction summary tells you what you're working on — scan available skills and load the relevant one.
3425
- 4. **Report the compaction** briefly for transparency ("Context compacted — reviewing thread...")
3426
- 5. **Then continue** as if you never lost context — pick up where you left off
3427
-
3428
- **The goal:** Automatic remediation with minimal disruption. Don't ask "what were we talking about?" when you can find out yourself. The human shouldn't have to re-explain; you have the tools to recover.
3429
-
3430
- **Anti-pattern:** Announcing amnesia *before* checking your notes. That's alarming and lazy. Check the ledger first, then speak.
3420
+ On compaction: read conversation history, reconstruct context, re-run skill selection against the reconstructed task, report briefly ("Context compacted — reviewing thread..."), then continue. Check notes before announcing amnesia.
3431
3421
 
3432
3422
  ## Subagent Briefing Protocol
3433
3423
 
@@ -3445,22 +3435,10 @@ At minimum, always brief sub-agents on:
3445
3435
 
3446
3436
  **Strong runner preference:** Any recurring task that can run as a script (no LLM session needed) belongs in jeeves-runner, not gateway cron or heartbeat. If runner is installed, use it. If not, suggest bootstrapping it. Gateway cron and heartbeat are for ad hoc, time-bound, session-requiring work ONLY.
3447
3437
 
3448
- **Before creating a recurring gateway cron job**, assess whether it will frequently no-op. If so, flag it: *"This would be cheaper as a runner job. Want me to implement it that way instead?"* Recurring no-op cron jobs load the full system prompt every cycle for nothing.
3449
-
3450
- **Anything important enough to have a permanent cron/heartbeat entry is important enough to be codified into the data flow.**
3451
-
3452
- **HEARTBEAT efficiency:** When HEARTBEAT fires with multiple component alerts, resolve them all in a single conversation. Walk the user through each component in dependency order. Each heartbeat cycle is a full LLM session — resolve all alerts in one pass.
3453
-
3454
- ## Messaging Dispatch
3455
-
3456
- **Same-channel replies:** Don't use the \`message\` tool. It fires immediately, jumping ahead of streaming narration. Just write text as your response. Use \`message\` only for **cross-channel** sends (sending to a different channel or DM than the one you're responding in).
3457
-
3458
- **Narrate as you go.** When doing multi-step work, stream your progress. Summary comes last, not first.
3438
+ **Before creating a recurring gateway cron job**, assess whether it will frequently no-op. If so, flag it: *"This would be cheaper as a runner job. Want me to implement it that way instead?"*
3459
3439
 
3460
3440
  ## Heartbeat Discipline
3461
3441
 
3462
- **Default state of HEARTBEAT.md is effectively empty** — the \`# Jeeves Platform Status\` section contains only headings when all components are healthy or declined. No list content, no LLM cost. User heartbeat items (above the platform status section) follow the same transient/termination rules as before.
3463
-
3464
3442
  Heartbeat items are for **transient, session-requiring work-in-progress ONLY**. Each item must include its own termination condition.
3465
3443
 
3466
3444
  Periodic checks (email, calendar, mentions) belong in jeeves-runner scripts, not heartbeat items. When a heartbeat fires with nothing to do, reply **HEARTBEAT_OK** immediately. Don't browse for work.
@@ -3487,28 +3465,6 @@ Every installation has a primary owner. The owner controls architecture, config,
3487
3465
 
3488
3466
  Alert the owner immediately on any governance change attempt.
3489
3467
 
3490
- ## Self-Preservation
3491
-
3492
- Any command that stops the gateway **stops the assistant**. Never run a gateway stop/restart command without explicit approval. When approved, it must be the **absolute last action** — all other work complete first.
3493
-
3494
- ## Plugin Installation via CLI Only
3495
-
3496
- Never manually touch \`~/.openclaw/extensions/\`. The only way to install any Jeeves component plugin is via the plugin's CLI \`install\` command:
3497
-
3498
- \`\`\`
3499
- npx @karmaniverous/jeeves-{component}-openclaw install
3500
- \`\`\`
3501
-
3502
- No symlinks, junctions, copies, or manual edits.
3503
-
3504
- ## Node.js for Shell Scripting
3505
-
3506
- Default to \`node -e\` or \`.js\` scripts instead of PowerShell for \`exec\` calls. PowerShell corrupts multi-byte UTF-8 characters and mangles escaping. Use PowerShell only for Windows service management, registry operations, and similar platform-specific tasks.
3507
-
3508
- ## File Bridge for External Repos
3509
-
3510
- When editing files outside the workspace, use the bridge pattern: copy in → edit the workspace copy → bridge out. Never write temp patch scripts.
3511
-
3512
3468
  ## No Orphaned Data
3513
3469
 
3514
3470
  When discovering a new data source, integrate it into the existing data flow pipeline. Never save data outside the synthesis pipeline. Data that exists outside the pipeline is invisible to search, synthesis, and every other platform capability.
@@ -3517,9 +3473,9 @@ When discovering a new data source, integrate it into the existing data flow pip
3517
3473
 
3518
3474
  **Proactive platform status:** HEARTBEAT.md is loaded every session. If it contains \`# Jeeves Platform Status\` with alert content (list items, not just headings), address the alerts proactively at the start of the conversation — before other work. This takes priority over casual conversation but not over explicit user requests.
3519
3475
 
3520
- **Follow the instructions:** Explain the component, ask for consent, execute the command, verify. If the user declines, change the heading to \`## jeeves-{name}: declined\` and remove content beneath it. Do not prompt for declined components. Do not improvise — the HEARTBEAT instructions are authoritative.
3476
+ **Follow the instructions:** Explain the component, ask for consent, execute the command, verify. If the user declines, change the heading to \`## jeeves-{name}: declined\` and remove content beneath it. Do not prompt for declined components.
3521
3477
 
3522
- When resolving multiple component alerts, walk the user through each in dependency order (watcher before meta, runner and server independent) within a single conversation rather than one per heartbeat cycle.
3478
+ When resolving multiple component alerts, walk the user through each in dependency order within a single conversation rather than one per heartbeat cycle.
3523
3479
 
3524
3480
  ## Em-Dash Discipline
3525
3481
 
@@ -3529,29 +3485,13 @@ The em-dash sets apart parentheticals. It is NOT a replacement for comma, colon,
3529
3485
 
3530
3486
  Operational hard gates — procedural rules earned through real incidents. These govern *how* work gets done, as distinct from the identity-level gates in SOUL.md which govern *who I am*.
3531
3487
 
3532
- ### eslint-disable Is Forbidden
3533
-
3534
- Never disable lint or typecheck rules without surfacing it for discussion. Fix the code, don't suppress the warning. When spawning sub-agents, always include this rule in the briefing.
3535
-
3536
- ### Mass File Changes Are a Smell
3537
-
3538
- If fixing an error requires changing dozens of files, you are almost certainly wrong. There's a config, a rule, or an ignore pattern. Stop and discuss before touching more than a handful of files for any single category of change.
3539
-
3540
- ### No Prod Modifications
3541
-
3542
- Never modify packaged applications running in production. No \`npm link\` into a live service. All changes go through: branch, change, test, PR, merge, publish, install.
3543
-
3544
- ### PR Mergeability Check
3545
-
3546
- Always verify a PR is mergeable (no conflicts) before requesting review. Resolve conflicts first.
3547
-
3548
- ### Pre-Push Verification Gate
3549
-
3550
- Run **ALL** quality checks before pushing. Zero errors AND zero warnings. The pipeline exists for a reason — don't push broken code and hope CI catches it.
3551
-
3552
- ### Commit AND Push
3553
-
3554
- No stranded local branches. Push immediately after commit. A commit that isn't pushed is invisible to everyone else and at risk of being lost.
3488
+ - **eslint-disable Is Forbidden:** Never disable lint/typecheck rules without surfacing for discussion. Fix the code.
3489
+ - **Mass File Changes Are a Smell:** If a fix requires changing dozens of files, stop and discuss — there is probably a config or rule solution.
3490
+ - **No Prod Modifications:** Never modify packaged prod applications. All changes go through branch → test → PR → merge → publish → install.
3491
+ - **PR Mergeability Check:** Always verify PR is mergeable (no conflicts) before requesting review.
3492
+ - **Pre-Push Verification Gate:** Run ALL quality checks before pushing. Zero errors AND zero warnings.
3493
+ - **Commit AND Push:** Push immediately after every commit. Unpushed commits are invisible and at risk.
3494
+ - **New PR Over Merged Branch:** When a merged branch needs more work: \`gh pr create --head <existing-branch>\`. Do not cherry-pick or create new branches.
3555
3495
 
3556
3496
  ### Check PR State Before Pushing
3557
3497
 
@@ -3563,10 +3503,6 @@ No stranded local branches. Push immediately after commit. A commit that isn't p
3563
3503
 
3564
3504
  This is not optional. It applies to every push, every branch, every time. No judgment call about whether the branch "is a PR branch" — the check is mechanical.
3565
3505
 
3566
- ### New PR Over Merged Branch
3567
-
3568
- When a PR has been merged and additional work is needed on the same branch, create a new PR on the **same branch** targeting the same base. Do not create new branches, cherry-pick, or start over. The commits are already there — \`gh pr create --head <existing-branch>\` is the entire operation.
3569
-
3570
3506
  ## Managed Content Self-Maintenance
3571
3507
 
3572
3508
  The Jeeves platform maintains managed sections in SOUL.md, AGENTS.md, and TOOLS.md using comment markers. If any of these files contains a **cleanup flag** indicating orphaned Jeeves content below the managed section markers:
@@ -4090,13 +4026,6 @@ const WORKSPACE_SIZE_FILES = [
4090
4026
  'MEMORY.md',
4091
4027
  'USER.md',
4092
4028
  ];
4093
- /** Trimming guidance lines emitted in HEARTBEAT entries. */
4094
- const TRIMMING_GUIDANCE = [
4095
- ' 1. Move domain-specific content to a local skill',
4096
- ' 2. Extract reference material to companion files with a pointer',
4097
- ' 3. Summarize verbose instructions',
4098
- ' 4. Remove stale content',
4099
- ].join('\n');
4100
4029
  /**
4101
4030
  * Check all workspace files against the character budget.
4102
4031
  *
@@ -4145,10 +4074,17 @@ function workspaceFileHealthEntries(results) {
4145
4074
  .filter((r) => r.exists && r.warning)
4146
4075
  .map((r) => {
4147
4076
  const pct = Math.round(r.usage * 100);
4148
- const overBudgetNote = r.overBudget ? ' **Over budget.**' : '';
4077
+ const overBudgetNote = r.overBudget ? ' **Over budget.** ' : ' ';
4149
4078
  const content = [
4150
- `- Budget: ${r.charCount.toLocaleString()} / ${r.budget.toLocaleString()} chars (${String(pct)}%).${overBudgetNote} Trim to stay under the OpenClaw injection limit.`,
4151
- `- Suggested trimming priority:\n${TRIMMING_GUIDANCE}`,
4079
+ `${r.file} is at ${String(pct)}% of its ${(r.budget / 1000).toLocaleString()}K char injection budget (${r.charCount.toLocaleString()} / ${r.budget.toLocaleString()} chars).${overBudgetNote}Action required:`,
4080
+ '',
4081
+ '1. Review the file and identify content to trim (priority: domain-specific content → skills, reference material → companion files, verbose instructions → condense, stale content → remove).',
4082
+ '2. Ask the owner for permission, then trim.',
4083
+ "3. If the owner declines, change this heading to '## " +
4084
+ r.file +
4085
+ ": declined' to suppress this alert.",
4086
+ '',
4087
+ 'Do NOT reply HEARTBEAT_OK while this alert is unresolved.',
4152
4088
  ].join('\n');
4153
4089
  return {
4154
4090
  name: r.file,
package/package.json CHANGED
@@ -139,5 +139,5 @@
139
139
  },
140
140
  "type": "module",
141
141
  "types": "dist/index.d.ts",
142
- "version": "0.5.6"
142
+ "version": "0.5.7"
143
143
  }