mdrules 0.1.1 → 0.2.3
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 +211 -55
- package/dist/cli.js +1001 -220
- package/dist/web/assets/{abnfDiagram-WEYOIA3C-DKgk2hIQ.js → abnfDiagram-WEYOIA3C-DMRcmCIC.js} +1 -1
- package/dist/web/assets/{arc-CCAU-51h.js → arc-DZzWcSCk.js} +1 -1
- package/dist/web/assets/{architecture-WOLXFQ4H-BcNYkHmW.js → architecture-WOLXFQ4H-DMFg8Ew3.js} +1 -1
- package/dist/web/assets/{architectureDiagram-ZHVYKT53-DgRlfGj2.js → architectureDiagram-ZHVYKT53-DWkP0LWv.js} +1 -1
- package/dist/web/assets/{blockDiagram-RJAE7QA3-DoBplOhb.js → blockDiagram-RJAE7QA3-DrKNefYo.js} +1 -1
- package/dist/web/assets/{c4Diagram-XDPPPE54-CGKzgX6O.js → c4Diagram-XDPPPE54-wzxeN4C2.js} +1 -1
- package/dist/web/assets/channel-De1Bo4WJ.js +1 -0
- package/dist/web/assets/{chunk-2E7WHVMD-DhQx5a0n.js → chunk-2E7WHVMD-D_HCdfuS.js} +1 -1
- package/dist/web/assets/{chunk-4EMNKR2T-vHF11V5m.js → chunk-4EMNKR2T-dRBMJ4_-.js} +1 -1
- package/dist/web/assets/{chunk-55XCU76K-DgZ0btzr.js → chunk-55XCU76K-BfDf2f5L.js} +1 -1
- package/dist/web/assets/{chunk-7S6XSTFO-DoKaEIP0.js → chunk-7S6XSTFO-DQBRPMDG.js} +1 -1
- package/dist/web/assets/{chunk-AQDTSKZB-DktDdZ_o.js → chunk-AQDTSKZB-ClWiKzeu.js} +1 -1
- package/dist/web/assets/{chunk-DSNLSHJZ-C_3sVqJn.js → chunk-DSNLSHJZ-Ct9Lfuzm.js} +1 -1
- package/dist/web/assets/{chunk-HAGFOTED-DhCQIE99.js → chunk-HAGFOTED-Cno1MSCP.js} +1 -1
- package/dist/web/assets/{chunk-HNE4Q36P-D_sbl6UM.js → chunk-HNE4Q36P-CDmp78x5.js} +1 -1
- package/dist/web/assets/{chunk-NQOKRVIF-UuKYBp6F.js → chunk-NQOKRVIF-CqWTXOUR.js} +1 -1
- package/dist/web/assets/{chunk-UHW7PFBP-BkreF8rs.js → chunk-UHW7PFBP-psZpZtfm.js} +1 -1
- package/dist/web/assets/{chunk-VQ5W62QI-Cb7PeOKH.js → chunk-VQ5W62QI-CCDvsLND.js} +1 -1
- package/dist/web/assets/{chunk-WQQL4CDK-GsIKInJ-.js → chunk-WQQL4CDK-Cu2Aopzy.js} +1 -1
- package/dist/web/assets/{chunk-XXDRQBXY-Bbz14gys.js → chunk-XXDRQBXY-BWwvAa43.js} +1 -1
- package/dist/web/assets/{chunk-YZO67HFG--IdJYNXK.js → chunk-YZO67HFG-QHKY9fqM.js} +1 -1
- package/dist/web/assets/{chunk-ZAUX2LTX-DmenwPIM.js → chunk-ZAUX2LTX-DOdmfo9d.js} +1 -1
- package/dist/web/assets/{chunk-ZCHMQSOR-BZ2XP8BW.js → chunk-ZCHMQSOR-BNE_AYuB.js} +1 -1
- package/dist/web/assets/{classDiagram-v2-4MYWR3UA-B_FJCXgY.js → classDiagram-v2-4MYWR3UA-QVfxHH62.js} +1 -1
- package/dist/web/assets/{cose-bilkent-JH36ORCC-DMBdq3mq.js → cose-bilkent-JH36ORCC-1dupt6EA.js} +1 -1
- package/dist/web/assets/{cynefin-EF2NZ3EQ-BthcZtsD.js → cynefin-EF2NZ3EQ-CAB7KRcw.js} +1 -1
- package/dist/web/assets/{cynefinDiagram-WF24UDRP-Bva6JySb.js → cynefinDiagram-WF24UDRP-D2M2_xSW.js} +1 -1
- package/dist/web/assets/{dagre-NK4GIZVX-BE6DKQYs.js → dagre-NK4GIZVX-CY4Eoama.js} +1 -1
- package/dist/web/assets/{diagram-CBK3MWTC-DuDzgplS.js → diagram-CBK3MWTC-Ct0zNHAV.js} +1 -1
- package/dist/web/assets/{diagram-I5XIIV2D-DU3jaZXW.js → diagram-I5XIIV2D-gmcSomD3.js} +1 -1
- package/dist/web/assets/{diagram-ODIL2UCW-DYI3Rj6j.js → diagram-ODIL2UCW-Z01ngjlG.js} +1 -1
- package/dist/web/assets/{diagram-PFBEJUXE-FD1CYRbT.js → diagram-PFBEJUXE-By7lIQit.js} +1 -1
- package/dist/web/assets/{diagram-RJA3I4VV-BsbAupu0.js → diagram-RJA3I4VV-BbTc0lUo.js} +1 -1
- package/dist/web/assets/{diagram-TYUNFSNR-BMB0kMWv.js → diagram-TYUNFSNR-BZNmF7dF.js} +1 -1
- package/dist/web/assets/{dist-CIDoXcx0.js → dist-B4Zd6qux.js} +1 -1
- package/dist/web/assets/{dist-D6VkQ_7h.js → dist-BLO1tZtl.js} +1 -1
- package/dist/web/assets/{dist-ABZ0bfMR.js → dist-Bag2LZ55.js} +1 -1
- package/dist/web/assets/{dist-CugnsBBM.js → dist-CW4Hp5az.js} +1 -1
- package/dist/web/assets/{dist-BFFH-h4L.js → dist-DFZHgUoB.js} +1 -1
- package/dist/web/assets/{dist-1HFNA2Sd.js → dist-DHO-aIOo.js} +1 -1
- package/dist/web/assets/{dist-Be0WQzsz.js → dist-DY18ueDO.js} +1 -1
- package/dist/web/assets/{dist-B5RhPiDb.js → dist-FrDFGy8k.js} +1 -1
- package/dist/web/assets/{dist-EDnzgrlE.js → dist-luL4D3CY.js} +1 -1
- package/dist/web/assets/{dist-BoeMvgh-.js → dist-oMwphMn-.js} +1 -1
- package/dist/web/assets/{dist-CFaMxIWT.js → dist-roXUU37l.js} +1 -1
- package/dist/web/assets/{ebnfDiagram-V4P3TTPT-C5zEPRhM.js → ebnfDiagram-V4P3TTPT-JoyE0F88.js} +1 -1
- package/dist/web/assets/{elk-QONTBCTQ-BR5YBYTe.js → elk-QONTBCTQ-BNYZwxj2.js} +1 -1
- package/dist/web/assets/{erDiagram-KYQIGQAA-B-5pcNVz.js → erDiagram-KYQIGQAA-BQCuW6RJ.js} +1 -1
- package/dist/web/assets/{eventmodeling-K75KTNOO-DkMnS-Cz.js → eventmodeling-K75KTNOO-DcSjO4xn.js} +1 -1
- package/dist/web/assets/flowDiagram-IUGLLWBU-C2mAXQNT.js +1 -0
- package/dist/web/assets/{ganttDiagram-R7GPNTJY-B21dBS-O.js → ganttDiagram-R7GPNTJY-BofMym7I.js} +1 -1
- package/dist/web/assets/{gitGraph-VSP46ZUC-DalD3PH5.js → gitGraph-VSP46ZUC-D5CJVdju.js} +1 -1
- package/dist/web/assets/{gitGraphDiagram-PDYL7XHY-CWi1FEeW.js → gitGraphDiagram-PDYL7XHY-BSH5YBss.js} +1 -1
- package/dist/web/assets/index-BUr29cVy.js +63 -0
- package/dist/web/assets/index-B_El5oZL.css +1 -0
- package/dist/web/assets/{info-OHQRW6UA-CByswqH6.js → info-OHQRW6UA-LJbVE13c.js} +1 -1
- package/dist/web/assets/{infoDiagram-MVDRKAX5-DizZ8XVo.js → infoDiagram-MVDRKAX5-CcDzYgLq.js} +1 -1
- package/dist/web/assets/{ishikawaDiagram-HPEHV2GE-DQoKMoDQ.js → ishikawaDiagram-HPEHV2GE-BTAZWgme.js} +1 -1
- package/dist/web/assets/{journeyDiagram-BOSHW7O7-DKj7UdLQ.js → journeyDiagram-BOSHW7O7-D_lt8C1z.js} +1 -1
- package/dist/web/assets/{kanban-definition-FNSA4HC5-bTblh8-S.js → kanban-definition-FNSA4HC5-BnOn_93I.js} +1 -1
- package/dist/web/assets/{line-DWkG8aZQ.js → line-D86czQCw.js} +1 -1
- package/dist/web/assets/{linear-aVPxw88X.js → linear-DX5Fyu8p.js} +1 -1
- package/dist/web/assets/{mermaid-parser.core-C-J7_HBm.js → mermaid-parser.core-BActkHhD.js} +3 -3
- package/dist/web/assets/{mermaid.core-DpHqjC1s.js → mermaid.core-Ce5oFJHI.js} +4 -4
- package/dist/web/assets/{mindmap-definition-6OY57UG3-DnifqP1p.js → mindmap-definition-6OY57UG3-D7CwuLeJ.js} +1 -1
- package/dist/web/assets/{packet-JDAUHWVQ-_ADKLP5T.js → packet-JDAUHWVQ-DBB-zZek.js} +1 -1
- package/dist/web/assets/{pegDiagram-ECIUJNBX-_SU4-PwS.js → pegDiagram-ECIUJNBX-CK1750zt.js} +1 -1
- package/dist/web/assets/{pie-XZMESJXO-BfbJN8hk.js → pie-XZMESJXO-DOtQfX6V.js} +1 -1
- package/dist/web/assets/{pieDiagram-GNMPY74T-DQQKmEIp.js → pieDiagram-GNMPY74T-Cu5hilM3.js} +1 -1
- package/dist/web/assets/{quadrantDiagram-D57K4MC3-BLtF0lyY.js → quadrantDiagram-D57K4MC3-C6llE2gk.js} +1 -1
- package/dist/web/assets/{radar-ABXABTNO-D7Tlesuz.js → radar-ABXABTNO-BqYteODl.js} +1 -1
- package/dist/web/assets/{railroad-I3PHUGI6-CA4jSH3I.js → railroad-I3PHUGI6-QkKJVgJ_.js} +1 -1
- package/dist/web/assets/{railroad-abnf-LNEFI6M7-CumrL10E.js → railroad-abnf-LNEFI6M7-BOVXdtiq.js} +1 -1
- package/dist/web/assets/{railroad-ebnf-DWYD2UWJ-2GeHQm3G.js → railroad-ebnf-DWYD2UWJ-Dciqx8FR.js} +1 -1
- package/dist/web/assets/{railroad-peg-JR7BVNR7-CGbW9a0w.js → railroad-peg-JR7BVNR7-BJRps0kv.js} +1 -1
- package/dist/web/assets/{railroadDiagram-Y72NRBL7-BQKP5iZM.js → railroadDiagram-Y72NRBL7-BEp_79kB.js} +1 -1
- package/dist/web/assets/{requirementDiagram-EQYSW5RA-Cn_K53gc.js → requirementDiagram-EQYSW5RA-Bi1usS1S.js} +1 -1
- package/dist/web/assets/{sankeyDiagram-SY24JHO5-BouDevNW.js → sankeyDiagram-SY24JHO5-cBLrx4TR.js} +1 -1
- package/dist/web/assets/{sequenceDiagram-BLEHNHQU-C0rguio1.js → sequenceDiagram-BLEHNHQU-CwY8WSOO.js} +1 -1
- package/dist/web/assets/{src-BJB85M8z.js → src-BxxO9_wA.js} +1 -1
- package/dist/web/assets/{stateDiagram-v2-A6IESKWZ-BzgsnDJf.js → stateDiagram-v2-A6IESKWZ-CZAkkIQQ.js} +1 -1
- package/dist/web/assets/{swimlanes-B3ENRKFQ-BAnQnO43.js → swimlanes-B3ENRKFQ-B06LEs1H.js} +1 -1
- package/dist/web/assets/swimlanesDiagram-AYQRV4AK-Cx4IBQfH.js +8 -0
- package/dist/web/assets/{timeline-definition-JXYKGLGB-i_V2SDud.js → timeline-definition-JXYKGLGB-pBL_HcoZ.js} +1 -1
- package/dist/web/assets/{treeView-D4JQ5SDB-blg1ho_V.js → treeView-D4JQ5SDB-B3NYhcq3.js} +1 -1
- package/dist/web/assets/{treemap-SAJKECNS-GWe0sLdw.js → treemap-SAJKECNS-jUBClquT.js} +1 -1
- package/dist/web/assets/{usecaseDiagram-WPOLBNNX-C2epnXsY.js → usecaseDiagram-WPOLBNNX-BEy-FZyr.js} +1 -1
- package/dist/web/assets/{vennDiagram-Q3Y3IDCW-CYguUs2o.js → vennDiagram-Q3Y3IDCW-CU_ZQagp.js} +1 -1
- package/dist/web/assets/{wardley-7MLQ67FV-CA1BMgJ-.js → wardley-7MLQ67FV-DLfevnf3.js} +1 -1
- package/dist/web/assets/{wardleyDiagram-IVAIDKWA-COJi2fLq.js → wardleyDiagram-IVAIDKWA-BnuVbP4c.js} +1 -1
- package/dist/web/assets/{xychartDiagram-4URNHDU4-BxweoZn5.js → xychartDiagram-4URNHDU4-pikAwF42.js} +1 -1
- package/dist/web/index.html +2 -2
- package/package.json +1 -1
- package/templates/main.md +1 -11
- package/templates/method/area/docs/ARCHITECTURE.md +14 -0
- package/templates/method/area/docs/TASKS.md +18 -0
- package/templates/method/area/docs/tasks/.gitkeep +0 -0
- package/templates/method/area-main.md +9 -0
- package/templates/method/root/docs/README.md +69 -0
- package/templates/method/root/docs/TASKS.md +18 -0
- package/templates/method/root/docs/architecture/README.md +10 -0
- package/templates/method/root/docs/architecture/stack.md +28 -0
- package/templates/method/root/docs/phases/01-foundations.md +23 -0
- package/templates/method/root/docs/tasks/_TEMPLATE.md +28 -0
- package/templates/method/root/docs/tasks/{{prefix}}-001-set-up-the-project.md +30 -0
- package/templates/method/root/docs/vision.md +22 -0
- package/templates/method/skills/mdrules-close-session/SKILL.md +20 -0
- package/templates/method/skills/mdrules-new-task/SKILL.md +22 -0
- package/templates/proposals/SKILL.md +114 -0
- package/templates/sdd/openspec/openspec/README.md +89 -0
- package/templates/sdd/openspec/openspec/changes/archive/.gitkeep +0 -0
- package/templates/sdd/openspec/openspec/config.yaml +12 -0
- package/templates/sdd/openspec/openspec/specs/.gitkeep +0 -0
- package/templates/sdd/speckit/.specify/memory/constitution.md +30 -0
- package/templates/sdd/speckit/specs/README.md +82 -0
- package/templates/skill/SKILL.md +9 -10
- package/dist/web/assets/channel-BWmWik05.js +0 -1
- package/dist/web/assets/flowDiagram-IUGLLWBU-Dq34jEaq.js +0 -1
- package/dist/web/assets/index-DBrCTV1V.js +0 -58
- package/dist/web/assets/index-DxpaDO0r.css +0 -1
- package/dist/web/assets/swimlanesDiagram-AYQRV4AK-BLBJ1_iu.js +0 -8
- package/templates/docs/architecture.md +0 -21
- package/templates/docs/decisions.md +0 -11
- package/templates/docs/phases/README.md +0 -25
- package/templates/docs/rules.md +0 -11
- package/templates/docs/tasks.md +0 -15
package/README.md
CHANGED
|
@@ -3,85 +3,231 @@
|
|
|
3
3
|
[](https://github.com/rafiqui1987/mdrules/actions/workflows/ci.yml)
|
|
4
4
|
[](LICENSE)
|
|
5
5
|
|
|
6
|
-
**
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
6
|
+
**See and edit every Markdown file in your project in one place: no split screen, no raw syntax in the
|
|
7
|
+
way.**
|
|
8
|
+
|
|
9
|
+
Run `mdrules` in any repository and it opens all its `.md` files (`README.md`, `CLAUDE.md`, `AGENTS.md`,
|
|
10
|
+
`docs/`…) in a single editor that is also the preview. Tables, Mermaid diagrams, checklists and math
|
|
11
|
+
render as you type, and change in place. Files are saved exactly as written, never reformatted, so Git
|
|
12
|
+
diffs stay clean and AI agents keep reading plain Markdown.
|
|
12
13
|
|
|
13
14
|
<picture>
|
|
14
15
|
<source media="(prefers-color-scheme: dark)" srcset="docs/assets/screenshot-dark.png">
|
|
15
|
-
<img alt="mdrules editor: file tree
|
|
16
|
+
<img alt="mdrules editor: file tree of a project using the mdrules method, a phase with its tasks, a comment thread like in Word and a Mermaid diagram" src="docs/assets/screenshot-light.png">
|
|
16
17
|
</picture>
|
|
17
18
|
|
|
18
19
|
## Quick start
|
|
19
20
|
|
|
20
|
-
Requires Node.js 20 or newer.
|
|
21
|
+
Requires Node.js 20 or newer. From the root of any project (monorepos included):
|
|
21
22
|
|
|
22
23
|
```bash
|
|
23
|
-
|
|
24
|
-
npx mdrules # first run asks: main doc, docs/ structure, rules, languages
|
|
24
|
+
npx mdrules
|
|
25
25
|
```
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
The very first time, mdrules asks how you want your projects set up:
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
mdrules
|
|
35
|
-
|
|
29
|
+
- **With your answers** (default): answer once (main doc, how to plan the work, the language you
|
|
30
|
+
work in, rules…). They are saved in `~/.mdrules/defaults.json` and every new project is set up
|
|
31
|
+
with them, without questions. For a project that needs something else: `mdrules init --custom`.
|
|
32
|
+
- **Ask in each project**: run `mdrules -D` the first time. Each project asks its own questions.
|
|
33
|
+
|
|
34
|
+
Change your choice any time with `mdrules setup`. Then the editor opens at `http://localhost:4319`;
|
|
35
|
+
it only listens on `127.0.0.1`.
|
|
36
|
+
|
|
37
|
+
## What it does
|
|
36
38
|
|
|
37
|
-
|
|
39
|
+
### 1. Every Markdown file of the project, in one place
|
|
38
40
|
|
|
39
|
-
|
|
41
|
+
A file tree with every `.md` in the folder where you run it, folders first. Search, expand or collapse
|
|
42
|
+
all, create files and folders inline, hide what you don't need (`.mdrulesignore`) and delete from the
|
|
43
|
+
right-click menu. Resize the sidebar by dragging its edge, or hide it for more room.
|
|
40
44
|
|
|
41
|
-
###
|
|
45
|
+
### 2. Edit and view at the same time
|
|
42
46
|
|
|
43
|
-
|
|
47
|
+
There is no "editor | preview" split. Markdown syntax is hidden everywhere except the line you are
|
|
48
|
+
editing, as in Obsidian, so you read the document as it looks and still write plain Markdown.
|
|
49
|
+
Undo, redo and **discard** (back to how the file was when you opened it) sit next to the breadcrumb.
|
|
44
50
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
- **Math and footnotes**: `$inline$` and `$$display$$` math with KaTeX (prices like `$5` stay text),
|
|
51
|
-
`[^1]` footnotes as numbered superscripts with the note on hover.
|
|
52
|
-
- **Images**: local paths resolve from the document's folder, as on GitHub, and remote URLs load directly.
|
|
53
|
-
- **Code blocks**: fences are hidden and only the language label is shown; copying still gives the full
|
|
54
|
-
Markdown.
|
|
55
|
-
- **Selection toolbar**: select text to copy it and turn it into bold, italic, strikethrough, code or a
|
|
51
|
+
### 3. Formatting without remembering syntax
|
|
52
|
+
|
|
53
|
+
- **`/` commands**: type `/` at the start of a line (or `Ctrl+Space` anywhere) for a menu of headings,
|
|
54
|
+
lists, checklists, tables, code blocks, diagrams, quotes, links and frontmatter.
|
|
55
|
+
- **Selection toolbar**: select text to copy it or turn it into bold, italic, strikethrough, code or a
|
|
56
56
|
link. Hover a button for its variants (`**`/`__`, `*`/`_`, `***`).
|
|
57
|
-
- **Checklists**: click to tick. After `Enter` on a task, `Ctrl+Enter` checks the new one.
|
|
58
|
-
- **Insert menu**: `/` at the start of a line opens a numbered, grouped menu with headings, lists,
|
|
59
|
-
tables, code, diagrams and frontmatter.
|
|
60
57
|
|
|
61
|
-
###
|
|
58
|
+
### 4. Diagrams, tables and lists that are easy to work with
|
|
59
|
+
|
|
60
|
+
- **Mermaid diagrams** (flowcharts, sequences…) render in place and follow the light or dark theme.
|
|
61
|
+
` ```tree ` blocks draw folder structures.
|
|
62
|
+
- **Tables**: edit cells directly. Right-click to insert or delete rows and columns; drag borders to
|
|
63
|
+
resize columns (view only, the file is not changed).
|
|
64
|
+
- **Tables from Excel or Google Sheets**: paste a range of cells and it becomes a Markdown table.
|
|
65
|
+
`Alt+H` toggles whether the first row is a header.
|
|
66
|
+
- **Checklists**: click to tick. After `Enter` on a task, `Ctrl+Enter` ticks the new one.
|
|
67
|
+
- And more: KaTeX math (`$x^2$`, `$$…$$`), footnotes on hover, local and remote images, code blocks with
|
|
68
|
+
only their language label showing.
|
|
69
|
+
|
|
70
|
+
### 5. Work in your language
|
|
71
|
+
|
|
72
|
+
Most AI agents, and most teams, work best with docs in English. If English isn't easy for you, you
|
|
73
|
+
don't have to choose:
|
|
74
|
+
|
|
75
|
+
- Run `mdrules translate` and pick a language to review the docs in: Spanish, French, Portuguese,
|
|
76
|
+
German or Italian, or **type any other** (Japanese, Dutch…). mdrules then shows **every doc in that
|
|
77
|
+
language**.
|
|
78
|
+
- The menus are in English by default and don't depend on the docs' language: pick English, Spanish,
|
|
79
|
+
French, Portuguese, German or Italian in **Settings → General**.
|
|
80
|
+
Read the architecture, tick tasks, write notes and fix a rule, all in your language.
|
|
81
|
+
- The files in the repository **stay in one source language** (English by default), so the agent and
|
|
82
|
+
the rest of the team keep reading one consistent version.
|
|
83
|
+
- Your edits are kept as a translation until you ask the agent for `/mdrules sync`: it applies them
|
|
84
|
+
to the source file and refreshes every translation. The sidebar marks which docs are pending.
|
|
85
|
+
|
|
86
|
+
Example: you open `docs/tasks/T-004-login.md` in Spanish, add an acceptance criterion and tick two
|
|
87
|
+
others. After `/mdrules sync`, the English file has the new criterion and the ticks, and the agent
|
|
88
|
+
works from it.
|
|
62
89
|
|
|
63
|
-
|
|
64
|
-
(`.mdrulesignore`) and delete from the right-click menu.
|
|
65
|
-
- **Undo and redo** buttons appear in the sidebar once there is something to undo.
|
|
66
|
-
- **Dashboard** of phases and docs from frontmatter (`type`, `status`, `phase`, `updated`) with task
|
|
67
|
-
progress.
|
|
68
|
-
- **Changes**: git diff of your Markdown, grouped by folder.
|
|
69
|
-
- **Rules**: reusable rule presets written into your main doc.
|
|
70
|
-
- **Settings**: font, size, line spacing, side margin, line width, and line wrapping (wrap, or scroll
|
|
71
|
-
horizontally). Light and dark themes, following the system until you pick one.
|
|
90
|
+
### 6. A method to plan and follow the work
|
|
72
91
|
|
|
73
|
-
|
|
92
|
+
`mdrules init` offers the **mdrules method**, a way of organizing the project so that you and the
|
|
93
|
+
agent always know what is being built, how, and what comes next:
|
|
74
94
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
95
|
+
```tree
|
|
96
|
+
CLAUDE.md # short: map, commands, how to start and close a session
|
|
97
|
+
docs/
|
|
98
|
+
README.md # how the method works
|
|
99
|
+
vision.md # what the project is, for whom, what is out of scope
|
|
100
|
+
architecture/ # technology and design decisions, one file per topic
|
|
101
|
+
phases/01-foundations.md # a construction phase: goal, its tasks, definition of done
|
|
102
|
+
TASKS.md # index: in progress, blocked, pending, done
|
|
103
|
+
tasks/T-001-....md # one file per task: goal, acceptance checklist, next step, log
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
```mermaid
|
|
107
|
+
flowchart LR
|
|
108
|
+
V[Vision] --> A[Architecture] --> P[Phase] --> T[Tasks] --> W[Work] --> C[Close the session]
|
|
109
|
+
C -->|next step| W
|
|
110
|
+
C -->|phase done| P
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
- **The main doc stays short** and points to `docs/`. If `CLAUDE.md` or `AGENTS.md` already exist,
|
|
114
|
+
they are not rewritten: mdrules adds a "Workflow" section with the map and the session routine.
|
|
115
|
+
- **Each fact lives in one place**: decisions in `architecture/`, progress in the task files.
|
|
116
|
+
- **Sessions pick up where they stopped**: the agent looks for tasks `in-progress`, reads their "Next
|
|
117
|
+
step" and tells you where you left off. `/mdrules-new-task` creates a task in the right place, and
|
|
118
|
+
`/mdrules-close-session` logs what was done, the next step and the status.
|
|
119
|
+
- **Monorepos**: each area (`apps/`, `services/`…) gets its own short `CLAUDE.md`, `docs/ARCHITECTURE.md`
|
|
120
|
+
and tasks with its own prefix (`APP-001`, `SVC-001`); the root `docs/` holds vision, phases and
|
|
121
|
+
cross-area tasks (`CORE-001`). The agent reads only the area it is working on.
|
|
122
|
+
- **The Dashboard** shows each phase with its progress and tasks, and a board of what is in progress,
|
|
123
|
+
blocked and pending.
|
|
124
|
+
|
|
125
|
+
**Prefer spec-driven development?** Pick one of these instead, and the Dashboard follows it too:
|
|
126
|
+
|
|
127
|
+
| Option | What you get |
|
|
128
|
+
|---|---|
|
|
129
|
+
| **[OpenSpec](https://github.com/Fission-AI/OpenSpec)** | `openspec/` with specs and proposed changes; the dashboard shows each change and its tasks |
|
|
130
|
+
| **[GitHub Spec Kit](https://github.com/github/spec-kit)** | a constitution and one folder per feature (spec → plan → tasks); the dashboard shows what each has |
|
|
131
|
+
|
|
132
|
+
mdrules runs their official installer, which also adds their commands to your agent (`/opsx:*`,
|
|
133
|
+
`/speckit-*`). If it can't (Spec Kit needs [uv](https://docs.astral.sh/uv/)), it creates a compatible
|
|
134
|
+
structure with a guide on how to add them later. Projects that already use either are detected and
|
|
135
|
+
shown as they are. Choose **None** and mdrules adds no structure or workflow at all.
|
|
136
|
+
|
|
137
|
+
### 7. Proposals and comments: answer the AI with clicks
|
|
138
|
+
|
|
139
|
+
When an answer would be long or has options to choose from (or when you ask for one), the agent writes
|
|
140
|
+
a **proposal** instead of a long chat message: options with small ASCII or Mermaid diagrams, choices to
|
|
141
|
+
tick, open questions, and the docs the decision will change. You answer in mdrules:
|
|
142
|
+
|
|
143
|
+
```text
|
|
144
|
+
┌ Proposal: Authentication ─────────────────────────────┐
|
|
145
|
+
│ Option A (recommended) │
|
|
146
|
+
│ Browser ──REST──▶ Gateway ──gRPC──▶ Users ──▶ (DB) │
|
|
147
|
+
│ │
|
|
148
|
+
│ Your choice │
|
|
149
|
+
│ (•) A: gateway validates │
|
|
150
|
+
│ ( ) B: each service validates │
|
|
151
|
+
│ │
|
|
152
|
+
│ [ Done, send my answer ] │
|
|
153
|
+
└───────────────────────────────────────────────────────┘
|
|
154
|
+
```
|
|
79
155
|
|
|
80
|
-
|
|
156
|
+
- **Tick options**: a list marked `<!-- choose: one -->` behaves like radio buttons; any other
|
|
157
|
+
checklist allows several.
|
|
158
|
+
- **Comment like in Word**: select text and press 💬. The text is highlighted and the thread shows next
|
|
159
|
+
to it, with replies and a button to resolve it. In the file, a comment is an HTML comment, invisible
|
|
160
|
+
on GitHub and readable by the agent:
|
|
81
161
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
162
|
+
```md
|
|
163
|
+
- [x] A: gateway validates
|
|
164
|
+
<!-- comment by Ana, 2026-10-22, on "gateway validates": What if it goes down? -->
|
|
165
|
+
<!-- reply by AI, 2026-10-22: Two instances minimum; added to the architecture. -->
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
- **Send your answer**: the button marks the proposal as answered and copies a message to paste in your
|
|
169
|
+
AI chat. The agent replies to your comments and updates every doc that depends on the decision
|
|
170
|
+
(tasks, phases, architecture…). A proposal is temporary: once applied, it is deleted and the decision
|
|
171
|
+
lives in those docs.
|
|
172
|
+
- In big projects, proposals can be organized **by topic and area** (`docs/proposals/auth/…`,
|
|
173
|
+
`services/docs/proposals/…`) instead of one folder.
|
|
174
|
+
|
|
175
|
+
It comes with the mdrules method, and can be turned on or off for any project in **Settings**.
|
|
176
|
+
|
|
177
|
+
### 8. Your AI agent's skills
|
|
178
|
+
|
|
179
|
+
The **Skills** tab lists every global skill you have for Claude Code, Codex, Gemini, Copilot or Cursor
|
|
180
|
+
([Agent Skills](https://agentskills.io) format). Tag them to group them, expand one to read or edit its
|
|
181
|
+
`SKILL.md`, see problems that would stop an agent from loading it, and **add it to the current project**
|
|
182
|
+
(`.claude/skills/` and/or `.agents/skills/`). Tags are stored in `~/.mdrules/skills.json`, never in the
|
|
183
|
+
skill.
|
|
184
|
+
|
|
185
|
+
### 9. Also included
|
|
186
|
+
|
|
187
|
+
- **Changes**: Git diff of your Markdown, grouped by folder and section.
|
|
188
|
+
- **Rules**: reusable rule presets (e.g. "ask before committing") written into `CLAUDE.md` or `AGENTS.md`.
|
|
189
|
+
- **Settings**, by section: General (interface language, theme), Editor (font, size, line spacing,
|
|
190
|
+
margins, line width, wrapping), Document languages and Proposals.
|
|
191
|
+
|
|
192
|
+
## Keyboard shortcuts
|
|
193
|
+
|
|
194
|
+
| Keys | Action |
|
|
195
|
+
|---|---|
|
|
196
|
+
| `/` at the start of a line, `Ctrl+Space` | Insert menu |
|
|
197
|
+
| `Ctrl+Enter` | Tick or untick the task on the current line |
|
|
198
|
+
| `Alt+H` | After pasting a table from a spreadsheet: toggle the header row |
|
|
199
|
+
| `Ctrl+Z` / `Ctrl+Y` | Undo / redo |
|
|
200
|
+
| `Ctrl+F` / `Ctrl+H` | Find / find and replace (box at the top right) |
|
|
201
|
+
| `Enter` / `Shift+Enter` | Next / previous match |
|
|
202
|
+
| `Alt+C` / `Alt+W` / `Alt+R` | Match case / whole word / regular expression |
|
|
203
|
+
| `Escape` | Close a menu or the selection toolbar |
|
|
204
|
+
|
|
205
|
+
## Commands
|
|
206
|
+
|
|
207
|
+
```bash
|
|
208
|
+
mdrules # set up the project if needed, then open the editor
|
|
209
|
+
mdrules init # run the setup again (with your defaults, if you saved them)
|
|
210
|
+
mdrules init --custom # set up this project with its own answers
|
|
211
|
+
mdrules setup # change your defaults, or switch to asking in each project
|
|
212
|
+
mdrules -D # first run: don't save defaults, ask in each project
|
|
213
|
+
mdrules serve # open the editor without the setup
|
|
214
|
+
mdrules serve --port 5000 --no-open
|
|
215
|
+
mdrules translate # choose languages to review the docs in (also: mdrules --translate)
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
To keep it installed: `npm install -g mdrules` (or `pnpm add -g mdrules`).
|
|
219
|
+
|
|
220
|
+
## For AI agents
|
|
221
|
+
|
|
222
|
+
`mdrules init` installs `.claude/skills/mdrules/SKILL.md`, which tells the agent how to write Markdown
|
|
223
|
+
that mdrules presents well and how to keep translations in sync. It also writes into the main doc:
|
|
224
|
+
|
|
225
|
+
- the working rules you picked, between `<!-- mdrules:rules:start -->` and `<!-- mdrules:rules:end -->`;
|
|
226
|
+
- how the project plans its work (the mdrules method, OpenSpec or Spec Kit), between
|
|
227
|
+
`<!-- mdrules:workflow:start -->` and `<!-- mdrules:workflow:end -->`. With the mdrules method it
|
|
228
|
+
also installs the `mdrules-new-task` and `mdrules-close-session` skills.
|
|
229
|
+
- with proposals on, how the agent writes proposals and answers comments (skill
|
|
230
|
+
`mdrules-proposals`), between `<!-- mdrules:proposals:start -->` and `<!-- mdrules:proposals:end -->`.
|
|
85
231
|
|
|
86
232
|
```bash
|
|
87
233
|
mdrules sync --status [--json] # translations + files not in the source language
|
|
@@ -89,6 +235,16 @@ mdrules sync --mark [--lang xx] <path...>|--all # record translations as in syn
|
|
|
89
235
|
mdrules sync --keep <path...> # keep files in their current language
|
|
90
236
|
```
|
|
91
237
|
|
|
238
|
+
## Uninstall
|
|
239
|
+
|
|
240
|
+
```bash
|
|
241
|
+
npm uninstall -g mdrules # or: pnpm remove -g mdrules (use the one you installed it with)
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
To remove it from a project, delete `.mdrules/` and `.claude/skills/mdrules*/`, the `.mdrules/` line in
|
|
245
|
+
`.gitignore`, and the `mdrules:rules`, `mdrules:workflow` and `mdrules:proposals` blocks in your main doc (keep the text
|
|
246
|
+
inside if you still want it). Editor settings, rule presets and skill tags live in `~/.mdrules`.
|
|
247
|
+
|
|
92
248
|
## Development
|
|
93
249
|
|
|
94
250
|
```bash
|