claude-dev-env 8.85.1 → 8.85.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/.agents/skills/efficient-review/SKILL.md +79 -0
  2. package/.agents/skills/efficient-review/defaults.json +12 -0
  3. package/.agents/skills/efficient-review/reference/cloud-session.md +13 -0
  4. package/bin/codex-trimmed-sol.test.mjs +1 -0
  5. package/bin/ever-shipped-skills.mjs +1 -0
  6. package/bin/install-deepstack-plugin.mjs +300 -0
  7. package/bin/install-deepstack-plugin.test.mjs +98 -0
  8. package/bin/install-pstack-plugin.mjs +3 -5
  9. package/bin/install-pstack-plugin.test.mjs +28 -0
  10. package/bin/install.agents-home.test.mjs +1 -0
  11. package/bin/install.codex-rules.test.mjs +2 -0
  12. package/bin/install.cursor-rules.test.mjs +1 -0
  13. package/bin/install.mjs +24 -0
  14. package/bin/install.profile-settings.test.mjs +1 -0
  15. package/bin/install.prune.test.mjs +20 -0
  16. package/bin/install.question-presentation.test.mjs +4 -0
  17. package/bin/install.settings-defaults.test.mjs +1 -0
  18. package/bin/install.shared-settings.test.mjs +1 -0
  19. package/bin/install.test.mjs +51 -1
  20. package/bin/install.transaction.test.mjs +8 -0
  21. package/bin/install.uninstall-transaction.test.mjs +2 -0
  22. package/bin/install.update-keeps-hooks.test.mjs +1 -0
  23. package/docs/decisions/deepstack-install.md +9 -0
  24. package/docs/rule-guides/deepstack-wording.md +23 -0
  25. package/package.json +1 -1
  26. package/rules/deepstack-wording.md +15 -0
  27. package/scripts/deepstack_inventory.py +348 -0
  28. package/scripts/dev_env_scripts_constants/deepstack_inventory_constants.py +42 -0
  29. package/scripts/test_deepstack_inventory.py +137 -0
  30. package/scripts/test_deepstack_wording_rule.py +20 -0
package/bin/install.mjs CHANGED
@@ -60,6 +60,10 @@ import {
60
60
  installMarketplacePlugins,
61
61
  shouldInstallMarketplacePlugin,
62
62
  } from './install-pstack-plugin.mjs';
63
+ import {
64
+ DEEPSTACK_PLUGIN_SPEC,
65
+ installDeepStackForHosts,
66
+ } from './install-deepstack-plugin.mjs';
63
67
  import { seedCodexPstackModels } from './seed-codex-pstack-models.mjs';
64
68
  import {
65
69
  codexSolSettingSnapshotPaths,
@@ -227,6 +231,7 @@ export const CORE_SKILLS = [
227
231
  'task-build',
228
232
  'eli5',
229
233
  'deepen',
234
+ 'efficient-review',
230
235
  ];
231
236
 
232
237
  export function collectPackageSourceConflicts(packageDirectory) {
@@ -2938,6 +2943,24 @@ function executeInstallPlanMutations(plan, transactionHelpers) {
2938
2943
  }
2939
2944
  printPluginHostOutcomes([PSTACK_PLUGIN_SPEC], pstackPlugin);
2940
2945
  }
2946
+ if (!selectedGroups && shouldInstallMarketplacePlugin(DEEPSTACK_PLUGIN_SPEC)) {
2947
+ const deepStackPlugin = installDeepStackForHosts({
2948
+ claudeRoot: CLAUDE_HOME,
2949
+ codexHome: INSTALL_ROOT_RESOLUTION.codexHomeDirectory,
2950
+ cursorDirectory: INSTALL_ROOT_RESOLUTION.cursorInstallDirectory,
2951
+ firstTaskHookPath: join(
2952
+ INSTALL_ROOT_RESOLUTION.hooksInstallDirectory,
2953
+ 'session',
2954
+ 'deepen_first_prompt.py',
2955
+ ),
2956
+ });
2957
+ summary.deepStackPlugin = deepStackPlugin;
2958
+ printPluginHostOutcomes([DEEPSTACK_PLUGIN_SPEC], deepStackPlugin);
2959
+ const cursorOutcome = deepStackPlugin.cursor;
2960
+ console.log(cursorOutcome.warning
2961
+ ? ` DeepStack (cursor): ${cursorOutcome.status} — ${cursorOutcome.warning}`
2962
+ : ` DeepStack (cursor): ${cursorOutcome.status}`);
2963
+ }
2941
2964
  const allRepositoryPluginSpecs = [
2942
2965
  USAGE_WRAPUP_PLUGIN_SPEC,
2943
2966
  SUBAGENT_MODELS_PLUGIN_SPEC,
@@ -3484,6 +3507,7 @@ Usage:
3484
3507
  npx ${PACKAGE_NAME} --profile ID Install into one named profile root (under the profiles root)
3485
3508
  npx ${PACKAGE_NAME} --profiles A,B Install into each selected profile (one ownership manifest per target)
3486
3509
  npx ${PACKAGE_NAME} --no-pstack Full install without the pstack plugin (also CDE_INSTALL_PSTACK=0)
3510
+ npx ${PACKAGE_NAME} --no-deepstack Full install without the DeepStack plugin (also CDE_INSTALL_DEEPSTACK=0)
3487
3511
  npx ${PACKAGE_NAME} --no-usage-wrapup Full install without the usage-wrapup plugin (also CDE_INSTALL_USAGE_WRAPUP=0)
3488
3512
  npx ${PACKAGE_NAME} --no-subagent-models Full install without the subagent-models plugin (also CDE_INSTALL_SUBAGENT_MODELS=0)
3489
3513
  npx ${PACKAGE_NAME} --no-deepen-first-prompt Full install without the deepen-first-prompt plugin (also CDE_INSTALL_DEEPEN_FIRST_PROMPT=0)
@@ -31,6 +31,7 @@ function installEnvironment(homeDirectory) {
31
31
  GIT_CONFIG_GLOBAL: join(homeDirectory, '.gitconfig'),
32
32
  CODEX_HOME: join(homeDirectory, '.codex'),
33
33
  CDE_INSTALL_PSTACK: '0',
34
+ CDE_INSTALL_DEEPSTACK: '0',
34
35
  CDE_INSTALL_USAGE_WRAPUP: '0',
35
36
  };
36
37
  }
@@ -64,6 +64,7 @@ const CORE_SKILL_DIRECTORIES = [
64
64
  'issue-tracker',
65
65
  'task-build',
66
66
  'eli5',
67
+ 'efficient-review',
67
68
  ];
68
69
  const PRIOR_RUN_BACKUP_DIRECTORY_NAMES = [
69
70
  '2020-01-01T00-00-00-000Z',
@@ -262,6 +263,7 @@ function resolveInstallerInvocation(homeDirectory) {
262
263
  CLAUDE_CONFIG_DIR: undefined,
263
264
  LLM_SETTINGS_PROFILES_ROOT: undefined,
264
265
  CDE_INSTALL_PSTACK: '0',
266
+ CDE_INSTALL_DEEPSTACK: '0',
265
267
  CDE_INSTALL_USAGE_WRAPUP: '0',
266
268
  CDE_INSTALL_SUBAGENT_MODELS: '0',
267
269
  CDE_INSTALL_DEEPEN_FIRST_PROMPT: '0',
@@ -802,6 +804,24 @@ test('a scoped --only install records the skill names it installed', () => {
802
804
  }
803
805
  });
804
806
 
807
+ test('a fresh scoped core install includes efficient-review', () => {
808
+ const sandbox = createSandbox();
809
+ try {
810
+ runInstaller(sandbox.homeDirectory, ['--only', 'core']);
811
+ const skillPath = join(sandbox.skillsDirectory, 'efficient-review', 'SKILL.md');
812
+ const skillText = readFileSync(skillPath, 'utf8');
813
+ assert.match(skillText, /^name: efficient-review$/m);
814
+ assert.match(skillText, /\/efficient-review/);
815
+ assert.equal(readManifest(sandbox.manifestPath).skills.includes('efficient-review'), true);
816
+ assert.equal(
817
+ existsSync(join(sandbox.skillsDirectory, 'efficient-review', 'defaults.json')),
818
+ true,
819
+ );
820
+ } finally {
821
+ rmSync(sandbox.homeDirectory, { recursive: true, force: true });
822
+ }
823
+ });
824
+
805
825
  test('a fresh scoped core install ships active skills and omits retired skills', () => {
806
826
  const sandbox = createSandbox();
807
827
  try {
@@ -25,6 +25,7 @@ function installInScratchHome(homeDirectory, argumentsList = [], extraEnvironmen
25
25
  CLAUDE_CONFIG_DIR: undefined,
26
26
  LLM_SETTINGS_PROFILES_ROOT: undefined,
27
27
  CDE_INSTALL_PSTACK: '0',
28
+ CDE_INSTALL_DEEPSTACK: '0',
28
29
  CDE_INSTALL_USAGE_WRAPUP: '0',
29
30
  CDE_INSTALL_SUBAGENT_MODELS: '0',
30
31
  CDE_INSTALL_DEEPEN_FIRST_PROMPT: '0',
@@ -182,6 +183,7 @@ test('a successful pstack install omits the retired skill block and gains the qu
182
183
 
183
184
  const installation = installInScratchHome(homeDirectory, [], {
184
185
  CDE_INSTALL_PSTACK: '1',
186
+ CDE_INSTALL_DEEPSTACK: '0',
185
187
  CDE_INSTALL_USAGE_WRAPUP: '0',
186
188
  CDE_INSTALL_SUBAGENT_MODELS: '0',
187
189
  CDE_INSTALL_DEEPEN_FIRST_PROMPT: '0',
@@ -211,6 +213,7 @@ test('enabling pstack after a pstack-off install preserves question guidance', (
211
213
 
212
214
  const secondInstallation = installInScratchHome(homeDirectory, [], {
213
215
  CDE_INSTALL_PSTACK: '1',
216
+ CDE_INSTALL_DEEPSTACK: '0',
214
217
  CDE_INSTALL_USAGE_WRAPUP: '0',
215
218
  CDE_INSTALL_SUBAGENT_MODELS: '0',
216
219
  CDE_INSTALL_DEEPEN_FIRST_PROMPT: '0',
@@ -241,6 +244,7 @@ test('a failed pstack transition restores question-only guidance and removes its
241
244
 
242
245
  const failedInstallation = installInScratchHome(homeDirectory, [], {
243
246
  CDE_INSTALL_PSTACK: '1',
247
+ CDE_INSTALL_DEEPSTACK: '0',
244
248
  CDE_INSTALL_USAGE_WRAPUP: '0',
245
249
  CDE_INSTALL_SUBAGENT_MODELS: '0',
246
250
  CDE_INSTALL_DEEPEN_FIRST_PROMPT: '0',
@@ -63,6 +63,7 @@ function runInstallerInSandbox(sandboxHome, installerArguments = []) {
63
63
  CLAUDE_CONFIG_DIR: undefined,
64
64
  LLM_SETTINGS_PROFILES_ROOT: undefined,
65
65
  CDE_INSTALL_PSTACK: '0',
66
+ CDE_INSTALL_DEEPSTACK: '0',
66
67
  CDE_INSTALL_USAGE_WRAPUP: '0',
67
68
  CDE_INSTALL_SUBAGENT_MODELS: '0',
68
69
  CDE_INSTALL_DEEPEN_FIRST_PROMPT: '0',
@@ -31,6 +31,7 @@ function installEnvironment(homeDirectory) {
31
31
  CLAUDE_CONFIG_DIR: '',
32
32
  GIT_CONFIG_GLOBAL: join(homeDirectory, '.gitconfig'),
33
33
  CDE_INSTALL_PSTACK: '0',
34
+ CDE_INSTALL_DEEPSTACK: '0',
34
35
  CDE_INSTALL_USAGE_WRAPUP: '0',
35
36
  CDE_INSTALL_SUBAGENT_MODELS: '0',
36
37
  CDE_INSTALL_DEEPEN_FIRST_PROMPT: '0',
@@ -262,6 +262,11 @@ test('CORE_SKILLS ships deepen so the first-task skill installs with core', () =
262
262
  assert.equal(INSTALL_GROUPS.core.skills.includes('deepen'), true);
263
263
  });
264
264
 
265
+ test('CORE_SKILLS ships efficient-review so a core install includes the skill', () => {
266
+ assert.ok(CORE_SKILLS.includes('efficient-review'), 'efficient-review must be in CORE_SKILLS');
267
+ assert.equal(INSTALL_GROUPS.core.skills.includes('efficient-review'), true);
268
+ });
269
+
265
270
  test('CORE_SKILLS ships test-runner for explicit Django and Playwright readiness checks', () => {
266
271
  assert.ok(CORE_SKILLS.includes('test-runner'));
267
272
  assert.equal(INSTALL_GROUPS.core.skills.includes('test-runner'), true);
@@ -3040,6 +3045,7 @@ test('a failed update preserves an existing skills lookup pointer', () => {
3040
3045
  CLAUDE_CONFIG_DIR: '',
3041
3046
  GIT_CONFIG_GLOBAL: join(homeDirectory, '.gitconfig'),
3042
3047
  CDE_INSTALL_PSTACK: '0',
3048
+ CDE_INSTALL_DEEPSTACK: '0',
3043
3049
  CDE_INSTALL_USAGE_WRAPUP: '0',
3044
3050
  CDE_INSTALL_SUBAGENT_MODELS: '0',
3045
3051
  CDE_INSTALL_DEEPEN_FIRST_PROMPT: '0',
@@ -3094,6 +3100,7 @@ function runPstackInstaller(homeDirectory, extraArguments, environmentOverrides
3094
3100
  CLAUDE_CONFIG_DIR: join(homeDirectory, '.claude'),
3095
3101
  GIT_CONFIG_GLOBAL: join(homeDirectory, '.gitconfig'),
3096
3102
  CDE_INSTALL_PSTACK: '1',
3103
+ CDE_INSTALL_DEEPSTACK: '0',
3097
3104
  CDE_INSTALL_USAGE_WRAPUP: '0',
3098
3105
  CDE_INSTALL_SUBAGENT_MODELS: '0',
3099
3106
  CDE_INSTALL_DEEPEN_FIRST_PROMPT: '0',
@@ -3167,6 +3174,49 @@ test('a full install adds the pstack marketplace and plugin on both hosts', t =>
3167
3174
  assert.equal(manifest.files.includes(join(codexHome, 'AGENTS.md')), false);
3168
3175
  });
3169
3176
 
3177
+ test('a full install adds DeepStack for Claude, Codex, and Cursor', t => {
3178
+ const sandbox = pstackPluginSandbox(t);
3179
+ const sourceDirectory = join(sandbox.homeDirectory, 'deepstack-source');
3180
+ mkdirSync(join(sourceDirectory, 'skills', 'deepstack-mode'), { recursive: true });
3181
+ mkdirSync(join(sourceDirectory, 'hooks'), { recursive: true });
3182
+ writeFileSync(join(sourceDirectory, 'skills', 'deepstack-mode', 'SKILL.md'), 'DeepStack intake\n');
3183
+ writeFileSync(join(sourceDirectory, 'hooks', 'session-start.sh'), '#!/bin/sh\n', { mode: 0o755 });
3184
+
3185
+ const installerOutput = runPstackInstaller(sandbox.homeDirectory, [], {
3186
+ ...sandbox.environment,
3187
+ CDE_INSTALL_PSTACK: '0',
3188
+ CDE_INSTALL_DEEPSTACK: '1',
3189
+ CDE_DEEPSTACK_SOURCE: sourceDirectory,
3190
+ });
3191
+
3192
+ assert.deepEqual(sandbox.recordedCommands(), [
3193
+ 'claude plugin uninstall deepstack@DeepStack',
3194
+ 'claude plugin marketplace remove DeepStack',
3195
+ 'claude plugin marketplace add jl-cmd-projects/DeepStack',
3196
+ 'claude plugin install deepstack@DeepStack',
3197
+ 'codex plugin remove deepstack@DeepStack',
3198
+ 'codex plugin marketplace remove DeepStack',
3199
+ 'codex plugin marketplace add jl-cmd-projects/DeepStack',
3200
+ 'codex plugin add deepstack@DeepStack',
3201
+ ]);
3202
+ assert.match(installerOutput, /DeepStack \(claude\): installed/);
3203
+ assert.match(installerOutput, /DeepStack \(codex\): installed/);
3204
+ assert.match(installerOutput, /DeepStack \(cursor\): installed/);
3205
+ const cursorPlugin = join(sandbox.homeDirectory, '.cursor', 'plugins', 'deepstack');
3206
+ assert.equal(
3207
+ readFileSync(join(cursorPlugin, 'skills', 'deepstack-mode', 'SKILL.md'), 'utf8'),
3208
+ 'DeepStack intake\n',
3209
+ );
3210
+ const hooks = JSON.parse(readFileSync(join(sandbox.homeDirectory, '.cursor', 'hooks.json'), 'utf8'));
3211
+ const hookText = JSON.stringify(hooks);
3212
+ assert.match(hookText, /session-start\.sh/);
3213
+ assert.match(hookText, /SessionStart/);
3214
+ assert.match(hookText, /deepen_first_prompt\.py/);
3215
+ assert.match(hookText, /UserPromptSubmit/);
3216
+ const sheet = readFileSync(join(sandbox.homeDirectory, '.codex', 'deepstack-models.md'), 'utf8');
3217
+ assert.match(sheet, /^session hook: on$/m);
3218
+ });
3219
+
3170
3220
  test('a repeat install preserves Codex pstack configuration', t => {
3171
3221
  const sandbox = pstackPluginSandbox(t);
3172
3222
  const codexHome = join(sandbox.homeDirectory, '.codex');
@@ -3427,7 +3477,7 @@ test('the help output names the usage-wrapup opt-out beside the pstack one', ()
3427
3477
  });
3428
3478
 
3429
3479
  assert.equal(helpRun.status, 0, helpRun.stderr);
3430
- assert.match(helpRun.stdout, /--no-pstack .*\n.*--no-usage-wrapup .*CDE_INSTALL_USAGE_WRAPUP=0/);
3480
+ assert.match(helpRun.stdout, /--no-pstack .*\n.*--no-deepstack .*CDE_INSTALL_DEEPSTACK=0.*\n.*--no-usage-wrapup .*CDE_INSTALL_USAGE_WRAPUP=0/);
3431
3481
  assert.match(helpRun.stdout, /--no-deepen-first-prompt .*CDE_INSTALL_DEEPEN_FIRST_PROMPT=0/);
3432
3482
  });
3433
3483
 
@@ -88,6 +88,7 @@ test('capture and restore recover settings, manifest, files, and hooksPath', ()
88
88
  CLAUDE_CONFIG_DIR: undefined,
89
89
  LLM_SETTINGS_PROFILES_ROOT: undefined,
90
90
  CDE_INSTALL_PSTACK: '0',
91
+ CDE_INSTALL_DEEPSTACK: '0',
91
92
  CDE_INSTALL_USAGE_WRAPUP: '0',
92
93
  CDE_INSTALL_SUBAGENT_MODELS: '0',
93
94
  CDE_INSTALL_DEEPEN_FIRST_PROMPT: '0',
@@ -154,6 +155,7 @@ test('capture and restore recover an additional host settings file', () => {
154
155
  CLAUDE_CONFIG_DIR: undefined,
155
156
  LLM_SETTINGS_PROFILES_ROOT: undefined,
156
157
  CDE_INSTALL_PSTACK: '0',
158
+ CDE_INSTALL_DEEPSTACK: '0',
157
159
  CDE_INSTALL_USAGE_WRAPUP: '0',
158
160
  CDE_INSTALL_SUBAGENT_MODELS: '0',
159
161
  CDE_INSTALL_DEEPEN_FIRST_PROMPT: '0',
@@ -193,6 +195,7 @@ test('runWithInstallTransaction restores prior state on injected fault', () => {
193
195
  CLAUDE_CONFIG_DIR: undefined,
194
196
  LLM_SETTINGS_PROFILES_ROOT: undefined,
195
197
  CDE_INSTALL_PSTACK: '0',
198
+ CDE_INSTALL_DEEPSTACK: '0',
196
199
  CDE_INSTALL_USAGE_WRAPUP: '0',
197
200
  CDE_INSTALL_SUBAGENT_MODELS: '0',
198
201
  CDE_INSTALL_DEEPEN_FIRST_PROMPT: '0',
@@ -251,6 +254,7 @@ test('runWithInstallTransaction commits and discards journal on success', () =>
251
254
  CLAUDE_CONFIG_DIR: undefined,
252
255
  LLM_SETTINGS_PROFILES_ROOT: undefined,
253
256
  CDE_INSTALL_PSTACK: '0',
257
+ CDE_INSTALL_DEEPSTACK: '0',
254
258
  CDE_INSTALL_USAGE_WRAPUP: '0',
255
259
  CDE_INSTALL_SUBAGENT_MODELS: '0',
256
260
  CDE_INSTALL_DEEPEN_FIRST_PROMPT: '0',
@@ -298,6 +302,7 @@ function runInstaller(homeDirectory, extraArguments, options = {}) {
298
302
  CLAUDE_CONFIG_DIR: undefined,
299
303
  LLM_SETTINGS_PROFILES_ROOT: undefined,
300
304
  CDE_INSTALL_PSTACK: '0',
305
+ CDE_INSTALL_DEEPSTACK: '0',
301
306
  CDE_INSTALL_USAGE_WRAPUP: '0',
302
307
  CDE_INSTALL_SUBAGENT_MODELS: '0',
303
308
  CDE_INSTALL_DEEPEN_FIRST_PROMPT: '0',
@@ -335,6 +340,7 @@ test('a later install fault removes newly seeded Codex pstack files', () => {
335
340
  faultPhase: FAULT_PHASES.AFTER_MANIFEST_WRITE,
336
341
  environment: {
337
342
  CDE_INSTALL_PSTACK: '1',
343
+ CDE_INSTALL_DEEPSTACK: '0',
338
344
  CDE_INSTALL_USAGE_WRAPUP: '0',
339
345
  CDE_INSTALL_SUBAGENT_MODELS: '0',
340
346
  CDE_INSTALL_DEEPEN_FIRST_PROMPT: '0',
@@ -482,6 +488,7 @@ test('installer fault after_git_config restores prior core.hooksPath', () => {
482
488
  CLAUDE_CONFIG_DIR: undefined,
483
489
  LLM_SETTINGS_PROFILES_ROOT: undefined,
484
490
  CDE_INSTALL_PSTACK: '0',
491
+ CDE_INSTALL_DEEPSTACK: '0',
485
492
  CDE_INSTALL_USAGE_WRAPUP: '0',
486
493
  CDE_INSTALL_SUBAGENT_MODELS: '0',
487
494
  CDE_INSTALL_DEEPEN_FIRST_PROMPT: '0',
@@ -503,6 +510,7 @@ test('installer fault after_git_config restores prior core.hooksPath', () => {
503
510
  CLAUDE_CONFIG_DIR: undefined,
504
511
  LLM_SETTINGS_PROFILES_ROOT: undefined,
505
512
  CDE_INSTALL_PSTACK: '0',
513
+ CDE_INSTALL_DEEPSTACK: '0',
506
514
  CDE_INSTALL_USAGE_WRAPUP: '0',
507
515
  CDE_INSTALL_SUBAGENT_MODELS: '0',
508
516
  CDE_INSTALL_DEEPEN_FIRST_PROMPT: '0',
@@ -74,6 +74,7 @@ function runInstaller(homeDirectory, extraArguments, options = {}) {
74
74
  CLAUDE_CONFIG_DIR: undefined,
75
75
  LLM_SETTINGS_PROFILES_ROOT: undefined,
76
76
  CDE_INSTALL_PSTACK: '0',
77
+ CDE_INSTALL_DEEPSTACK: '0',
77
78
  CDE_INSTALL_USAGE_WRAPUP: '0',
78
79
  CDE_INSTALL_SUBAGENT_MODELS: '0',
79
80
  CDE_INSTALL_DEEPEN_FIRST_PROMPT: '0',
@@ -312,6 +313,7 @@ test('uninstall fault after_git_config restores prior core.hooksPath', () => {
312
313
  CLAUDE_CONFIG_DIR: undefined,
313
314
  LLM_SETTINGS_PROFILES_ROOT: undefined,
314
315
  CDE_INSTALL_PSTACK: '0',
316
+ CDE_INSTALL_DEEPSTACK: '0',
315
317
  CDE_INSTALL_USAGE_WRAPUP: '0',
316
318
  CDE_INSTALL_SUBAGENT_MODELS: '0',
317
319
  CDE_INSTALL_DEEPEN_FIRST_PROMPT: '0',
@@ -25,6 +25,7 @@ function installerEnvironment(homeDirectory) {
25
25
  CLAUDE_CONFIG_DIR: undefined,
26
26
  LLM_SETTINGS_PROFILES_ROOT: undefined,
27
27
  CDE_INSTALL_PSTACK: '0',
28
+ CDE_INSTALL_DEEPSTACK: '0',
28
29
  CDE_INSTALL_USAGE_WRAPUP: '0',
29
30
  CDE_INSTALL_SUBAGENT_MODELS: '0',
30
31
  CDE_INSTALL_DEEPEN_FIRST_PROMPT: '0',
@@ -0,0 +1,9 @@
1
+ # DeepStack install
2
+
3
+ The plugin lives in `jl-cmd-projects/DeepStack`. `npx claude-dev-env` installs plugin id `deepstack@DeepStack` for Claude Code and Codex, and copies it to `~/.cursor/plugins/deepstack` with the SessionStart hook and the first-task gate.
4
+
5
+ The entry skill in that repository names these triggers:
6
+
7
+ - DeepStack intake
8
+ - DeepStack search leaf
9
+ - DeepStack reproducible-check leaf
@@ -0,0 +1,23 @@
1
+ Back to the [rules index](../../rules/index.md).
2
+
3
+ # DeepStack wording
4
+
5
+ ## In brief
6
+
7
+ A deepened task uses the three DeepStack labels and puts `CDE_DEEPEN:v1` on line 1. The gate in `hooks/session/deepen_first_prompt.py` is the check. This guide cites that gate.
8
+
9
+ **When this applies:** Writing a deepened task, a worker prompt, or a sentence that names the three DeepStack lines.
10
+
11
+ ## Labels
12
+
13
+ - `SCOPE (role):` names the standing job in one sentence.
14
+ - `EXAMPLES (illustration only):` lists each example, or `none`.
15
+ - `ZOOM-IN BLOCKER:` names why the standing job cannot proceed, or `none`.
16
+
17
+ Say "the user" in public text.
18
+
19
+ ## Where it is enforced
20
+
21
+ | Surface | What runs |
22
+ |---|---|
23
+ | A first-task rewrite | `hooks/session/deepen_first_prompt.py` |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-dev-env",
3
- "version": "8.85.1",
3
+ "version": "8.85.2",
4
4
  "description": "Claude Code development standards — rules, hooks, agents, commands, and skills",
5
5
  "type": "module",
6
6
  "bin": {
@@ -0,0 +1,15 @@
1
+ ---
2
+ paths:
3
+ - "**/*.md"
4
+ - "**/commands/**"
5
+ ---
6
+
7
+ # DeepStack wording
8
+
9
+ **When:** Writing a deepened task, a worker prompt, or a line that names the three DeepStack lines.
10
+
11
+ Use these labels: `SCOPE (role):`, `EXAMPLES (illustration only):`, and `ZOOM-IN BLOCKER:`. Put `CDE_DEEPEN:v1` on line 1. Say "the user".
12
+
13
+ **Enforcement:** `hooks/session/deepen_first_prompt.py` is the gate. This rule cites that gate.
14
+
15
+ **Full text:** [guide](../docs/rule-guides/deepstack-wording.md). Read it when you write the three lines.