@thedecipherist/mdd 1.0.1 → 1.1.1

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/README.md CHANGED
@@ -55,6 +55,7 @@ Then in Claude Code:
55
55
  - [MDD Versioning](#mdd-versioning)
56
56
  - [Real Results: Self-Audit](#real-results-self-audit)
57
57
  - [History: From Starter Kit to Standalone Package](#history-from-starter-kit-to-standalone-package)
58
+ - [Dashboards](#dashboards)
58
59
  - [Companion Tools](#companion-tools)
59
60
  - [License](#license)
60
61
 
@@ -107,9 +108,12 @@ mdd install # copies Claude commands to ~/.claude/commands/
107
108
 
108
109
  After installation, `/mdd` is available in every Claude Code session globally - no per-project setup needed.
109
110
 
111
+ `mdd install` also injects a guidance block into `~/.claude/CLAUDE.md` so Claude automatically suggests the right MDD workflow whenever you make an implementation request without the `/mdd` flag.
112
+
110
113
  ```bash
111
- mdd update # update to latest installed version
112
- mdd install --dir /custom/path # install to a custom directory
114
+ mdd update # update to latest installed version
115
+ mdd install --dir /custom/path # install to a custom directory (skips CLAUDE.md injection)
116
+ mdd install --install-local # install to .claude/commands/ + injects into ./CLAUDE.md
113
117
  ```
114
118
 
115
119
  **Version safety:** `mdd install` compares `mdd_version` between the installed and available versions before overwriting. If you have a newer version installed, it won't silently downgrade.
@@ -137,7 +141,7 @@ npm install -g @thedecipherist/mdd && mdd install
137
141
 
138
142
  ---
139
143
 
140
- ## All 21 Modes at a Glance
144
+ ## All 22 Modes at a Glance
141
145
 
142
146
  ```
143
147
  /mdd <feature description> Build Mode - Document, plan, and implement
@@ -145,6 +149,7 @@ npm install -g @thedecipherist/mdd && mdd install
145
149
  /mdd status Overview: docs, tests, audit state, initiatives
146
150
  /mdd scan Detect features whose source files changed
147
151
  /mdd update <feature-id> Re-sync a feature doc after code changes
152
+ /mdd rebuild-tags [--force] Generate tags for all docs and rebuild .startup.md
148
153
  /mdd note "text" Append a timestamped note to .mdd/.startup.md
149
154
  /mdd note list Print the Notes section
150
155
  /mdd note clear Wipe all notes (asks for confirmation)
@@ -691,6 +696,7 @@ Every `.mdd/docs/<NN>-<feature-name>.md` file uses this YAML frontmatter:
691
696
  | `status` | `draft` → `in_progress` → `complete` → `deprecated` |
692
697
  | `phase` | Last completed phase name |
693
698
  | `mdd_version` | Version of MDD that created/last updated this doc |
699
+ | `tags` | 4–8 domain-concept keywords surfaced in `.startup.md` so Claude can detect when a prompt relates to this feature (e.g. `[auth, jwt, login, sessions]`) |
694
700
  | `known_issues` | Issues discovered during audits or implementation |
695
701
 
696
702
  **`depends_on` rules:**
@@ -824,9 +830,58 @@ Within the starter kit, the entire MDD workflow lived in a single `mdd.md` file
824
830
 
825
831
  ---
826
832
 
833
+ ## Dashboards
834
+
835
+ MDD ships with two companion dashboards for exploring your `.mdd/` workspace — one terminal-native, one browser-based. Both are available as standalone packages today and **will soon be merged directly into the `mdd` package**, so they'll be launchable via the `mdd` command without a separate install.
836
+
837
+ ### mdd-tui — Terminal Dashboard
838
+
839
+ A live terminal UI for navigating your MDD workspace without leaving the command line. Shows feature doc health, drift status, audit reports, initiative/wave progress, and full markdown content in a split-pane view.
840
+
841
+ ```bash
842
+ npm install -g mdd-tui
843
+ mdd-tui
844
+ ```
845
+
846
+ **Key features:**
847
+ - Split-pane: scrollable file list (left) + full markdown render (right)
848
+ - Initiative tree with collapsible waves and feature-level progress counters
849
+ - Drift status icons — see which docs are in sync vs. changed at a glance
850
+ - Ops runbook browser and audit report viewer
851
+ - Keyboard-driven navigation (`j`/`k` to move, `h`/`l` to switch panes, `r` to refresh, `q` to quit)
852
+
853
+ [npm: mdd-tui](https://www.npmjs.com/package/mdd-tui) · [GitHub](https://github.com/TheDecipherist/mdd-tui)
854
+
855
+ ### mdd-dashboard — Browser Dashboard *(in active development)*
856
+
857
+ A visual, browser-based dashboard for MDD projects. Renders your feature dependency graph as an interactive D3 diagram with live reload on file changes.
858
+
859
+ > **Status:** mdd-dashboard is in active development and not yet fully operational. Early adopters are welcome — expect rough edges while it catches up to the full MDD feature set.
860
+
861
+ ```bash
862
+ npm install -g mdd-dashboard
863
+ mdd-dashboard
864
+ # MDD Dashboard running at http://localhost:7321
865
+ ```
866
+
867
+ **Key features:**
868
+ - Interactive D3 graph — force simulation or strict hierarchy (initiative → wave → feature) layout
869
+ - Three-tier filter system: live search, type chips, status dropdown, advanced field filters, and git-aware filters
870
+ - Live reload via SSE — graph updates the moment you save a `.mdd/` file, no page refresh needed
871
+ - Click any node to open a detail panel: full doc body, git history, source files, depends-on navigation
872
+ - Mini-map overlay for large graphs (100+ docs)
873
+
874
+ [npm: mdd-dashboard](https://www.npmjs.com/package/mdd-dashboard) · [GitHub](https://github.com/TheDecipherist/mdd-dashboard)
875
+
876
+ ---
877
+
878
+ > **Coming soon:** Both dashboards will be merged into the `mdd` package so you can launch either directly from the `mdd` CLI — no separate install needed.
879
+
880
+ ---
881
+
827
882
  ## Companion Tools
828
883
 
829
- - **[mdd-tui](https://github.com/TheDecipherist/mdd-tui)** - Terminal dashboard for browsing your `.mdd/` workspace (docs, audits, graph, ops runbooks) in a live TUI. `npm install -g @thedecipherist/mdd-tui`
884
+ - **[mdd-tui](https://github.com/TheDecipherist/mdd-tui)** - Terminal dashboard for browsing your `.mdd/` workspace (docs, audits, graph, ops runbooks) in a live TUI. `npm install -g mdd-tui`
830
885
  - **[Claude Code Mastery Starter Kit](https://github.com/TheDecipherist/claude-code-mastery-project-starter-kit)** - Full project scaffolding: hooks, CLAUDE.md templates, TypeScript rules, agents, skills, StrictDB. MDD originated here.
831
886
  - **[strictdb](https://www.npmjs.com/package/strictdb)** - Database wrapper with guardrails used across starter kit projects
832
887
 
@@ -214,7 +214,7 @@ Estimated fix time: <N> hours (traditional) → <N> minutes (MDD)
214
214
  Fix all now? (yes / review report first / fix only P1+P2)
215
215
  ```
216
216
 
217
- **After the report is written**, trigger the `.mdd/.startup.md` rebuild (same logic as in Status Mode — rebuild auto-generated zone, preserve Notes zone) so the Last Audit block reflects the new findings regardless of whether the user proceeds with fixes.
217
+ **After the report is written**, run a tag pass before the startup rebuild: for any `.mdd/docs/*.md` or `.mdd/ops/*.md` file missing a `tags:` field, generate and write tags now (same logic as Phase RT2 in REBUILD-TAGS MODE). Docs that already have `tags:` are untouched. Then trigger the `.mdd/.startup.md` rebuild (same logic as in Status Mode — rebuild auto-generated zone, preserve Notes zone) so the Last Audit block and tag-enriched feature list are both current.
218
218
 
219
219
  If user says yes (or selects a subset):
220
220
 
@@ -226,7 +226,7 @@ If user says yes (or selects a subset):
226
226
 
227
227
  Report progress per finding. Update documentation `known_issues` to remove fixed items. Update `mdd_version` to current on every `.mdd/docs/*.md` file that is edited during fixes.
228
228
 
229
- **After fixes are complete and results are written to `.mdd/audits/results-<date>.md`**, trigger the `.mdd/.startup.md` rebuild so the Last Audit block reflects the new numbers.
229
+ **After fixes are complete and results are written to `.mdd/audits/results-<date>.md`**, run the same tag pass (generate missing tags for any doc still lacking them), then trigger the `.mdd/.startup.md` rebuild so the Last Audit block and tag list both reflect the final state.
230
230
 
231
231
  ---
232
232
 
@@ -191,6 +191,7 @@ last_synced: <YYYY-MM-DD>
191
191
  status: draft
192
192
  phase: <last completed phase name, or "all" when fully built>
193
193
  mdd_version: <read from mdd.md frontmatter mdd_version field>
194
+ tags: [<4-8 domain-concept keywords — systems touched, technology, feature names. NOT file paths>]
194
195
  known_issues: []
195
196
  ---
196
197
 
@@ -61,6 +61,7 @@ Draft a complete feature doc following the Phase 3 template. Set:
61
61
  - `last_synced: <today>`
62
62
  - `status: draft` (since business intent may be incomplete)
63
63
  - `phase: reverse-engineered`
64
+ - `tags: [...]` — infer 4–8 domain-concept keywords from the inferred purpose, routes, models, and source file names. NOT raw file paths — use the concept (e.g. `auth`, `api`, `stripe` not `src/handlers/stripe.ts`)
64
65
 
65
66
  **In regenerate mode:** Show the existing doc alongside the new draft:
66
67
  ```
@@ -195,11 +196,11 @@ Batch-patches missing frontmatter fields (`last_synced`, `status`, `phase`) acro
195
196
  ```
196
197
  📋 Upgrade Inventory
197
198
 
198
- Doc | last_synced | status | phase
199
- ─────────────────────────────────|─────────────|────────|──────────────
200
- 01-project-scaffolding | ❌ missing | ❌ | ❌
201
- 02-profile-system | ❌ missing | ✅ | ❌
202
- 03-database-layer | ✅ present | ✅ | ✅
199
+ Doc | last_synced | status | phase | tags
200
+ ─────────────────────────────────|─────────────|────────|───────|──────
201
+ 01-project-scaffolding | ❌ missing | ❌ | ❌ | ❌
202
+ 02-profile-system | ❌ missing | ✅ | ❌ | ✅
203
+ 03-database-layer | ✅ present | ✅ | ✅ | ❌
203
204
  ...
204
205
 
205
206
  Docs needing upgrade: <N> of <total>
@@ -207,6 +208,7 @@ Fields to add:
207
208
  last_synced — <N> docs
208
209
  status — <N> docs
209
210
  phase — <N> docs
211
+ tags — <N> docs (run /mdd rebuild-tags after upgrade to populate)
210
212
  ```
211
213
 
212
214
  4. If 0 docs need upgrade → report "All docs are up to date. Nothing to patch." and stop.
@@ -307,11 +309,13 @@ data_flow: ...
307
309
  last_synced: <new> ← insert here if missing
308
310
  status: <new> ← insert here if missing
309
311
  phase: <new> ← insert here if missing
312
+ mdd_version: <new> ← insert here if missing
313
+ tags: <new> ← insert here if missing (do not generate tags in upgrade — run /mdd rebuild-tags after)
310
314
  known_issues: []
311
315
  ---
312
316
  ```
313
317
 
314
- Insert new fields **before** `known_issues` to keep the canonical order.
318
+ Insert new fields **before** `known_issues` to keep the canonical order. **Do not attempt to generate tag values during upgrade** — tags require reading doc content to produce meaningful keywords. After running upgrade, run `/mdd rebuild-tags` to populate tags on any docs that need them.
315
319
 
316
320
  Report progress as you go:
317
321
  ```
@@ -7,7 +7,7 @@ Quick overview of MDD state for the project:
7
7
  3. **Scan `.mdd/jobs/`** — detect any active audit job (see below)
8
8
  4. **Count tests** — `pnpm test:unit --reporter=json 2>/dev/null | jq '.numTotalTests'`
9
9
  5. **Count known issues** — grep `known_issues` across all docs
10
- 6. **Read current mdd_version** — from `mdd.md` frontmatter (or `~/.claude/commands/mdd.md` if not local)
10
+ 6. **Read current mdd_version** — from `mdd.md` frontmatter. Check `.claude/commands/mdd.md` first (local install), then `~/.claude/commands/mdd.md` (global install). Use whichever exists.
11
11
  7. **Scan all `.mdd/` files** — grep `mdd_version` from each, group by version number
12
12
  8. **Scan `.mdd/initiatives/`** — count initiative files, group by status
13
13
  9. **Scan `.mdd/waves/`** — count wave files, group by status; for each active wave count complete vs total features
@@ -63,8 +63,8 @@ After collecting status, rebuild the auto-generated zone of `.mdd/.startup.md`:
63
63
  - `Generated: <YYYY-MM-DD>` (date only, no time)
64
64
  - `Branch:` from `git branch --show-current`
65
65
  - `Stack:` from `CLAUDE.md` or `claude-mastery-project.conf` if detectable, otherwise `(unknown)`
66
- - `Features Documented:` sorted list of `.mdd/docs/*.md` filenames with status if detectable from frontmatter
67
- - `Ops Runbooks:` sorted list of `.mdd/ops/*.md` filenames with statusomit section entirely if `.mdd/ops/` is empty
66
+ - `Features Documented:` sorted list of `.mdd/docs/*.md` filenames with status and tags — format: `- <id> (<status>) [tag1, tag2, ...]`. If `tags:` is missing from a doc, omit the bracket section for that entry.
67
+ - `Ops Runbooks:` sorted list of `.mdd/ops/*.md` filenames with tagsformat: `- <slug> [tag1, tag2, ...]`. Omit section entirely if `.mdd/ops/` is empty.
68
68
  - `Last Audit:` from the most recent `.mdd/audits/report-*.md` — extract findings/fixed/open counts
69
69
  - `Rules Summary:` static block (does not change)
70
70
  3. Write the rebuilt auto-generated section + `---` divider + preserved Notes section back to `.mdd/.startup.md`. Update `mdd_version` in the file's frontmatter to current.
@@ -338,3 +338,69 @@ Test files: <kept/deleted per user choice>
338
338
  ```
339
339
 
340
340
  ---
341
+
342
+ ## REBUILD-TAGS MODE — `/mdd rebuild-tags [--force]`
343
+
344
+ Triggered when arguments start with `rebuild-tags`. Scans all feature docs and ops runbooks, generates `tags:` for any doc missing the field, then rebuilds `.startup.md`.
345
+
346
+ **Use case:** Migrating existing projects to the tag system. Safe to run multiple times — docs that already have `tags:` are skipped unless `--force` is passed.
347
+
348
+ ### Phase RT1 — Inventory
349
+
350
+ 1. Glob `.mdd/docs/*.md` (excluding `archive/`) and `.mdd/ops/*.md` (excluding `archive/`).
351
+ 2. For each doc, check frontmatter for a `tags:` field.
352
+ 3. Build an inventory table:
353
+
354
+ ```
355
+ 🏷️ Rebuild Tags — Inventory
356
+
357
+ Doc | Has tags?
358
+ ─────────────────────────────────|──────────
359
+ 01-docs-site | ❌ missing
360
+ 02-dashboards-showcase | ❌ missing
361
+ 03-install-local-flag | ✅ present
362
+ swarmk-dokploy (ops) | ❌ missing
363
+
364
+ Docs needing tags: <N> of <total>
365
+ ```
366
+
367
+ If 0 docs need tags (and `--force` not passed) → report "All docs already have tags. `.startup.md` will be rebuilt." and jump to Phase RT3.
368
+
369
+ ### Phase RT2 — Generate Tags
370
+
371
+ For each doc missing `tags:` (or all docs if `--force`):
372
+
373
+ 1. Read the doc's frontmatter and `## Purpose` section (first paragraph only).
374
+ 2. Generate 4–8 domain-concept keywords that identify what the doc is about:
375
+ - Use: title words, purpose concepts, platform/technology names, key system names, operation types
376
+ - Do NOT use: raw file paths, generic words like "feature" or "system", version numbers
377
+ - For ops docs: emphasise platform, services, environments, operation type (e.g. `deploy`, `dokploy`, `docker`, `canary`)
378
+ - For feature docs: emphasise domain concepts, technology, feature names (e.g. `auth`, `cli`, `install`, `flags`)
379
+ 3. Write `tags:` to the doc frontmatter, inserting it **before** `known_issues:`.
380
+ 4. Report one line per doc: `✅ 01-docs-site — tags: [github-pages, documentation, landing-page, user-guide]`
381
+
382
+ **`--force` behaviour:** Regenerate and overwrite `tags:` even on docs that already have them. Show old → new for each.
383
+
384
+ ### Phase RT3 — Rebuild Startup
385
+
386
+ Trigger the `.mdd/.startup.md` rebuild (same logic as Status Mode — rebuild auto-generated zone, preserve Notes zone). The rebuilt startup now reflects tags on every feature and ops line.
387
+
388
+ ### Phase RT4 — Report
389
+
390
+ ```
391
+ ✅ Rebuild Tags Complete
392
+
393
+ Feature docs processed: <N>
394
+ Ops runbooks processed: <N>
395
+ Tags generated: <N> docs
396
+ Tags skipped (present): <N> docs
397
+
398
+ .startup.md rebuilt with tag format:
399
+ - 01-docs-site (complete) [github-pages, documentation, landing-page, user-guide]
400
+ - 03-install-local-flag (complete) [cli, install, local-install, flags]
401
+ ...
402
+
403
+ Run /mdd status to see the full updated startup snapshot.
404
+ ```
405
+
406
+ ---
@@ -85,6 +85,7 @@ services:
85
85
  status: draft
86
86
  last_synced: <YYYY-MM-DD>
87
87
  mdd_version: <current>
88
+ tags: [<4-8 keywords — platform, services, environments, operation type. e.g. deploy, dokploy, docker, eu-west, canary>]
88
89
  known_issues: []
89
90
  ---
90
91
 
package/commands/mdd.md CHANGED
@@ -53,6 +53,11 @@ Framework: (unknown) | DB: (unknown) | Host: (unknown)
53
53
 
54
54
  ## Features Documented
55
55
  (none yet — run /mdd <feature> to create your first doc)
56
+ Format once populated: - <id> (<status>) [tag1, tag2, ...]
57
+
58
+ ## Ops Runbooks
59
+ (none yet — run /mdd ops <description> to create one)
60
+ Format once populated: - <slug> [tag1, tag2, ...]
56
61
 
57
62
  ## Last Audit
58
63
  (no audit run yet — run /mdd audit to generate findings)
@@ -99,26 +104,30 @@ The user's full arguments are: **$ARGUMENTS**
99
104
 
100
105
  Parse these arguments to determine the mode. **Before doing anything else, read the appropriate mode file listed below.** The mode file contains the complete instructions for that mode. When mode file instructions reference `$ARGUMENTS`, treat it as the arguments stated above.
101
106
 
102
- Find the MDD commands directory by checking `~/.claude/commands/` (global install via `npm install -g mdd`).
107
+ Find the MDD commands directory by checking in this order:
108
+ 1. `.claude/commands/` in the current project (local install via `mdd install --install-local`)
109
+ 2. `~/.claude/commands/` (global install via `npm install -g @thedecipherist/mdd && mdd install`)
110
+
111
+ Use whichever path contains `mdd-audit.md`. Store it as `$MDD_DIR` and use it for all mode file reads below.
103
112
 
104
113
  - If arguments start with `audit` →
105
- **Read `~/.claude/commands/mdd-audit.md` then follow its AUDIT MODE instructions.**
114
+ **Read `$MDD_DIR/mdd-audit.md` then follow its AUDIT MODE instructions.**
106
115
 
107
- - If arguments start with `status`, `note`, `scan`, `update`, or `deprecate` →
108
- **Read `~/.claude/commands/mdd-manage.md` then follow the relevant mode instructions.**
116
+ - If arguments start with `status`, `note`, `scan`, `update`, `deprecate`, or `rebuild-tags` →
117
+ **Read `$MDD_DIR/mdd-manage.md` then follow the relevant mode instructions.**
109
118
 
110
119
  - If arguments start with `reverse-engineer`, `reverse`, `graph`, or `upgrade` →
111
- **Read `~/.claude/commands/mdd-lifecycle.md` then follow the relevant mode instructions.**
120
+ **Read `$MDD_DIR/mdd-lifecycle.md` then follow the relevant mode instructions.**
112
121
 
113
122
  - If arguments start with `plan-` →
114
- **Read `~/.claude/commands/mdd-plan.md` then follow the relevant PLAN mode instructions.**
123
+ **Read `$MDD_DIR/mdd-plan.md` then follow the relevant PLAN mode instructions.**
115
124
 
116
125
  - If arguments start with `ops`, `runop`, `update-op`, or `commands` →
117
- **Read `~/.claude/commands/mdd-ops.md` then follow the relevant OPS/COMMANDS mode instructions.**
126
+ **Read `$MDD_DIR/mdd-ops.md` then follow the relevant OPS/COMMANDS mode instructions.**
118
127
 
119
128
  - If arguments are empty → ask the user what they want to do (build a feature, run an audit, check status, etc.)
120
129
 
121
- - Otherwise → **Read `~/.claude/commands/mdd-build.md` then follow BUILD MODE instructions.**
130
+ - Otherwise → **Read `$MDD_DIR/mdd-build.md` then follow BUILD MODE instructions.**
122
131
 
123
132
  ---
124
133
 
package/dist/cli.js CHANGED
@@ -4,6 +4,8 @@ import { install } from './install.js';
4
4
  import { readFileSync } from 'fs';
5
5
  import { fileURLToPath } from 'url';
6
6
  import { join, dirname } from 'path';
7
+ import { cwd } from 'process';
8
+ import { homedir } from 'os';
7
9
  const __filename = fileURLToPath(import.meta.url);
8
10
  const __dirname = dirname(__filename);
9
11
  const pkg = JSON.parse(readFileSync(join(__dirname, '../package.json'), 'utf-8'));
@@ -16,12 +18,30 @@ program
16
18
  .command('install')
17
19
  .description('Install MDD Claude commands to ~/.claude/commands/')
18
20
  .option('--dir <path>', 'Custom install directory (default: ~/.claude/commands)', '~/.claude/commands')
21
+ .option('--install-local', 'Install to .claude/commands/ in the current project directory', false)
19
22
  .option('--force', 'Overwrite existing files even if already up to date', false)
20
- .action(install);
23
+ .action(function (options) {
24
+ const dirExplicit = this.getOptionValueSource('dir') === 'cli';
25
+ const local = options.installLocal && !dirExplicit;
26
+ const effectiveDir = local ? join(cwd(), '.claude/commands') : options.dir;
27
+ const claudeMdPath = dirExplicit ? undefined
28
+ : local ? join(cwd(), 'CLAUDE.md')
29
+ : join(homedir(), '.claude', 'CLAUDE.md');
30
+ install({ dir: effectiveDir, force: options.force, local, claudeMdPath });
31
+ });
21
32
  program
22
33
  .command('update')
23
34
  .description('Update MDD commands to latest version (alias for install --force)')
24
35
  .option('--dir <path>', 'Custom install directory', '~/.claude/commands')
25
- .action((options) => install({ ...options, force: true }));
36
+ .option('--install-local', 'Update the local project install instead of global', false)
37
+ .action(function (options) {
38
+ const dirExplicit = this.getOptionValueSource('dir') === 'cli';
39
+ const local = options.installLocal && !dirExplicit;
40
+ const effectiveDir = local ? join(cwd(), '.claude/commands') : options.dir;
41
+ const claudeMdPath = dirExplicit ? undefined
42
+ : local ? join(cwd(), 'CLAUDE.md')
43
+ : join(homedir(), '.claude', 'CLAUDE.md');
44
+ install({ dir: effectiveDir, force: true, local, claudeMdPath });
45
+ });
26
46
  program.parse();
27
47
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAErC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAAwB,CAAC;AAEzG,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,KAAK,CAAC;KACX,WAAW,CAAC,0DAA0D,CAAC;KACvE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAExB,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,oDAAoD,CAAC;KACjE,MAAM,CAAC,cAAc,EAAE,wDAAwD,EAAE,oBAAoB,CAAC;KACtG,MAAM,CAAC,SAAS,EAAE,qDAAqD,EAAE,KAAK,CAAC;KAC/E,MAAM,CAAC,OAAO,CAAC,CAAC;AAEnB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,mEAAmE,CAAC;KAChF,MAAM,CAAC,cAAc,EAAE,0BAA0B,EAAE,oBAAoB,CAAC;KACxE,MAAM,CAAC,CAAC,OAAwB,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAE9E,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/dist/install.d.ts CHANGED
@@ -1,6 +1,8 @@
1
1
  interface InstallOptions {
2
2
  dir: string;
3
3
  force?: boolean;
4
+ local?: boolean;
5
+ claudeMdPath?: string;
4
6
  }
5
7
  export declare function install(options: InstallOptions): void;
6
8
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"AASA,UAAU,cAAc;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAUD,wBAAgB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAwErD"}
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"AASA,UAAU,cAAc;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAUD,wBAAgB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAmFrD"}
package/dist/install.js CHANGED
@@ -1,4 +1,4 @@
1
- import { copyFileSync, mkdirSync, existsSync, readdirSync, readFileSync } from 'fs';
1
+ import { copyFileSync, mkdirSync, existsSync, readdirSync, readFileSync, writeFileSync, appendFileSync } from 'fs';
2
2
  import { join, resolve } from 'path';
3
3
  import { homedir } from 'os';
4
4
  import { fileURLToPath } from 'url';
@@ -73,7 +73,16 @@ export function install(options) {
73
73
  else {
74
74
  console.log(` ${installed} file(s) installed/updated${skipped > 0 ? `, ${skipped} skipped` : ''}`);
75
75
  }
76
- console.log('\nOpen Claude Code and run /mdd to get started.\n');
76
+ if (options.local) {
77
+ console.log(' Tip: add .claude/commands/ to your .gitignore to keep these files out of git.\n');
78
+ }
79
+ if (options.claudeMdPath) {
80
+ const claudeResult = injectClaudeGuidance(resolve(options.claudeMdPath.replace('~', homedir())));
81
+ const icon = claudeResult.status === 'error' ? '✗' : claudeResult.status === 'skipped' ? '·' : '✓';
82
+ console.log(` ${icon} CLAUDE.md — ${claudeResult.message}`);
83
+ console.log('');
84
+ }
85
+ console.log('Open Claude Code and run /mdd to get started.\n');
77
86
  }
78
87
  function getMddVersion(content) {
79
88
  const match = content.match(/^mdd_version:\s*(\d+)/m);
@@ -88,4 +97,56 @@ function getPackageVersion() {
88
97
  return 'unknown';
89
98
  }
90
99
  }
100
+ const CLAUDE_GUIDANCE_MARKER = '## MDD — Manual-First Development';
101
+ const CLAUDE_GUIDANCE_BLOCK = `
102
+ ## MDD — Manual-First Development
103
+
104
+ If a \`.mdd/\` directory exists in the current project, apply this logic whenever
105
+ the user asks you to implement, build, modify, deploy, or automate something —
106
+ and they have NOT used \`/mdd\` to initiate the request:
107
+
108
+ **Step 1 — Does it already exist?**
109
+ Scan \`.mdd/.startup.md\` (Features AND Ops Runbooks sections). Do any tags or
110
+ names match what the user is asking about?
111
+ → Feature match: "This looks related to \`<NN>-<feature-name>\`. Want to use
112
+ \`/mdd update <NN>\` to modify it, or \`/mdd audit <NN>\` to review it first?"
113
+ → Ops match: "You already have a \`<slug>\` runbook for this. Want to run it
114
+ with \`/mdd runop <slug>\` or update it with \`/mdd update-op <slug>\`?"
115
+
116
+ **Step 2 — What kind of request is it?**
117
+
118
+ Infrastructure or ops? (deploy, CI/CD, Docker, commit hooks, pipelines,
119
+ cron jobs, webhooks, DNS, SSL, rollback, health checks, server config)
120
+ → "This sounds like an ops procedure. Want to document it as a repeatable
121
+ runbook with \`/mdd ops <description>\`?"
122
+
123
+ Feature work touching 3+ independent concerns?
124
+ → "This looks initiative-scale. Want to plan it with \`/mdd plan-initiative\`?"
125
+
126
+ Single feature or bounded change?
127
+ → "Want me to use \`/mdd <description>\` to build this with docs and tests first?"
128
+
129
+ Always ask — never auto-invoke. If the user says no, proceed as normal.
130
+
131
+ Skip entirely for: bug fixes, typos, config tweaks, single-line changes,
132
+ one-off shell commands.
133
+ `;
134
+ function injectClaudeGuidance(claudeMdPath) {
135
+ try {
136
+ if (existsSync(claudeMdPath)) {
137
+ const existing = readFileSync(claudeMdPath, 'utf-8');
138
+ if (existing.includes(CLAUDE_GUIDANCE_MARKER)) {
139
+ return { status: 'skipped', message: 'guidance already present' };
140
+ }
141
+ appendFileSync(claudeMdPath, CLAUDE_GUIDANCE_BLOCK, 'utf-8');
142
+ }
143
+ else {
144
+ writeFileSync(claudeMdPath, CLAUDE_GUIDANCE_BLOCK.trimStart(), 'utf-8');
145
+ }
146
+ return { status: 'injected', message: 'guidance injected' };
147
+ }
148
+ catch (err) {
149
+ return { status: 'error', message: String(err) };
150
+ }
151
+ }
91
152
  //# sourceMappingURL=install.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thedecipherist/mdd",
3
- "version": "1.0.1",
3
+ "version": "1.1.1",
4
4
  "description": "MDD — Manual-Driven Development workflow for Claude Code",
5
5
  "type": "module",
6
6
  "bin": {