@rafiqui987/markode 0.2.7 → 0.3.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.
Files changed (110) hide show
  1. package/README.md +240 -109
  2. package/dist/cli.js +1289 -639
  3. package/dist/web/assets/{abnfDiagram-WEYOIA3C-DpbJC7Xp.js → abnfDiagram-WEYOIA3C-C-xz1zhH.js} +1 -1
  4. package/dist/web/assets/{arc-DC4i8MWg.js → arc-0NKn9s7n.js} +1 -1
  5. package/dist/web/assets/{architecture-WOLXFQ4H-eBViYpWx.js → architecture-WOLXFQ4H-yvNPw04L.js} +1 -1
  6. package/dist/web/assets/{architectureDiagram-ZHVYKT53-BUdoz7It.js → architectureDiagram-ZHVYKT53-DiNkPsUS.js} +1 -1
  7. package/dist/web/assets/{blockDiagram-RJAE7QA3-g9DAd_oM.js → blockDiagram-RJAE7QA3-Bm5an-ZR.js} +1 -1
  8. package/dist/web/assets/{c4Diagram-XDPPPE54-DRNtmahu.js → c4Diagram-XDPPPE54-DCIkW1i3.js} +1 -1
  9. package/dist/web/assets/channel-BkrEjK89.js +1 -0
  10. package/dist/web/assets/{chunk-2E7WHVMD-pLVU_fk3.js → chunk-2E7WHVMD-w-cvaztJ.js} +1 -1
  11. package/dist/web/assets/{chunk-4EMNKR2T-CILPvkQp.js → chunk-4EMNKR2T-Dz1c4ddf.js} +1 -1
  12. package/dist/web/assets/{chunk-55XCU76K-D3MGCCrv.js → chunk-55XCU76K-BkW2QTCZ.js} +1 -1
  13. package/dist/web/assets/{chunk-7S6XSTFO-CN1GsbIT.js → chunk-7S6XSTFO-SqLAsU6N.js} +1 -1
  14. package/dist/web/assets/{chunk-AQDTSKZB-CUWKsFsd.js → chunk-AQDTSKZB-DwIPdMmQ.js} +1 -1
  15. package/dist/web/assets/{chunk-DSNLSHJZ-CwfiRg01.js → chunk-DSNLSHJZ-BNEo5raG.js} +1 -1
  16. package/dist/web/assets/{chunk-HAGFOTED-Do-8YoBu.js → chunk-HAGFOTED-BokAjJjC.js} +1 -1
  17. package/dist/web/assets/{chunk-HNE4Q36P-1-JjBgqP.js → chunk-HNE4Q36P-BlJCzrNG.js} +1 -1
  18. package/dist/web/assets/{chunk-NQOKRVIF-BEHeLMtz.js → chunk-NQOKRVIF-CK1D9VKN.js} +1 -1
  19. package/dist/web/assets/{chunk-UHW7PFBP-CC1DKtp5.js → chunk-UHW7PFBP-ycMkWOji.js} +1 -1
  20. package/dist/web/assets/{chunk-VQ5W62QI-CWY0eXsE.js → chunk-VQ5W62QI-CNI8j3BI.js} +1 -1
  21. package/dist/web/assets/{chunk-WQQL4CDK-BJl_ufDd.js → chunk-WQQL4CDK-DvQQgYrd.js} +1 -1
  22. package/dist/web/assets/{chunk-XXDRQBXY-DKVbKHOf.js → chunk-XXDRQBXY-cFqAbOh1.js} +1 -1
  23. package/dist/web/assets/{chunk-YZO67HFG-dhkHuKWt.js → chunk-YZO67HFG-CkfGL1zX.js} +1 -1
  24. package/dist/web/assets/{chunk-ZAUX2LTX-CA6m357j.js → chunk-ZAUX2LTX-BwdZydyj.js} +1 -1
  25. package/dist/web/assets/{chunk-ZCHMQSOR-DUBbqrP7.js → chunk-ZCHMQSOR-CXDXBIC6.js} +1 -1
  26. package/dist/web/assets/{classDiagram-v2-4MYWR3UA-PXy4ulRK.js → classDiagram-v2-4MYWR3UA-B95ypqg8.js} +1 -1
  27. package/dist/web/assets/{cose-bilkent-JH36ORCC-BDYEjy3u.js → cose-bilkent-JH36ORCC-C8-ToTGn.js} +1 -1
  28. package/dist/web/assets/{cynefin-EF2NZ3EQ-BOMUQs4F.js → cynefin-EF2NZ3EQ-CHth0Nt9.js} +1 -1
  29. package/dist/web/assets/{cynefinDiagram-WF24UDRP-cX0NpQ7L.js → cynefinDiagram-WF24UDRP-CMcwwxC8.js} +1 -1
  30. package/dist/web/assets/{dagre-NK4GIZVX-BAP6Gj-L.js → dagre-NK4GIZVX-BZzAgRpg.js} +1 -1
  31. package/dist/web/assets/{diagram-CBK3MWTC-B5AONjPA.js → diagram-CBK3MWTC-DGwxJbVy.js} +1 -1
  32. package/dist/web/assets/{diagram-I5XIIV2D-BkwhoH5d.js → diagram-I5XIIV2D-B17CYdAP.js} +1 -1
  33. package/dist/web/assets/{diagram-ODIL2UCW-DUFps_5l.js → diagram-ODIL2UCW-CYPFYS2M.js} +1 -1
  34. package/dist/web/assets/{diagram-PFBEJUXE-Dj94WcA4.js → diagram-PFBEJUXE-BQMumROl.js} +1 -1
  35. package/dist/web/assets/{diagram-RJA3I4VV-BRhr049b.js → diagram-RJA3I4VV-vHTuDO1-.js} +1 -1
  36. package/dist/web/assets/{diagram-TYUNFSNR-C9EtKuKD.js → diagram-TYUNFSNR-C_WYz7qL.js} +1 -1
  37. package/dist/web/assets/{dist-DTXSqpYP.js → dist-8bzcdWlP.js} +1 -1
  38. package/dist/web/assets/{dist-B91b1nu8.js → dist-8k6FSdRu.js} +1 -1
  39. package/dist/web/assets/{dist-BOIkyUDE.js → dist-B1oQ1VTT.js} +1 -1
  40. package/dist/web/assets/{dist-CMFTG-Cz.js → dist-B5uXb_Wi.js} +1 -1
  41. package/dist/web/assets/{dist-6_cnylgs.js → dist-BOCA4kQq.js} +1 -1
  42. package/dist/web/assets/{dist-DMEslBFn.js → dist-BT3nK1GA.js} +1 -1
  43. package/dist/web/assets/{dist-uYDRxuA0.js → dist-BruzXrfs.js} +1 -1
  44. package/dist/web/assets/{dist-CXAToOJL.js → dist-BwF8pAVO.js} +1 -1
  45. package/dist/web/assets/{dist-B-4tAY5T.js → dist-CFUj2tCy.js} +2 -2
  46. package/dist/web/assets/{dist-C6oRdq_x.js → dist-CM1-Tp30.js} +1 -1
  47. package/dist/web/assets/{dist-D5_2d6Ki.js → dist-CubY9gnU.js} +1 -1
  48. package/dist/web/assets/{dist-CUajnf5G.js → dist-D5EOvBuF.js} +1 -1
  49. package/dist/web/assets/{dist-CRKS1wXG.js → dist-DFcDEdTm.js} +1 -1
  50. package/dist/web/assets/{dist-CxtEXJtW.js → dist-DV0HO3Fe.js} +1 -1
  51. package/dist/web/assets/{dist-DfKlgEia.js → dist-DZQ_bwip.js} +1 -1
  52. package/dist/web/assets/{dist-SlIdOLRu.js → dist-PwT2nxki.js} +1 -1
  53. package/dist/web/assets/{dist-C7gsSbg8.js → dist-QI7QavRs.js} +1 -1
  54. package/dist/web/assets/{dist-BhvCwF6v.js → dist-cSM0Lli0.js} +1 -1
  55. package/dist/web/assets/{dist-hiB1k3yb.js → dist-ga2OvaLo.js} +1 -1
  56. package/dist/web/assets/{ebnfDiagram-V4P3TTPT-hUPVHW_L.js → ebnfDiagram-V4P3TTPT-DLMwyX-U.js} +1 -1
  57. package/dist/web/assets/{elk-QONTBCTQ-CK3_-qCI.js → elk-QONTBCTQ-DVvxbtF4.js} +1 -1
  58. package/dist/web/assets/{erDiagram-KYQIGQAA-BnzshuRd.js → erDiagram-KYQIGQAA-DPXicJ1t.js} +1 -1
  59. package/dist/web/assets/{eventmodeling-K75KTNOO-YpRkYpNJ.js → eventmodeling-K75KTNOO-DpHVZP_6.js} +1 -1
  60. package/dist/web/assets/flowDiagram-IUGLLWBU-DrcHkm4d.js +1 -0
  61. package/dist/web/assets/{ganttDiagram-R7GPNTJY-Cof-TrXj.js → ganttDiagram-R7GPNTJY-Ch6NDX5Q.js} +1 -1
  62. package/dist/web/assets/{gitGraph-VSP46ZUC-ClyrQrUV.js → gitGraph-VSP46ZUC-CIhLB663.js} +1 -1
  63. package/dist/web/assets/{gitGraphDiagram-PDYL7XHY-DcHBmgeW.js → gitGraphDiagram-PDYL7XHY-Ci_MIbqs.js} +1 -1
  64. package/dist/web/assets/index-CQGURl2V.css +1 -0
  65. package/dist/web/assets/index-CxwfaWVo.js +132 -0
  66. package/dist/web/assets/{info-OHQRW6UA-DJuVnR49.js → info-OHQRW6UA-Dau8xD88.js} +1 -1
  67. package/dist/web/assets/{infoDiagram-MVDRKAX5-SPivATVi.js → infoDiagram-MVDRKAX5-4spgggd7.js} +1 -1
  68. package/dist/web/assets/{ishikawaDiagram-HPEHV2GE-luEQCi0p.js → ishikawaDiagram-HPEHV2GE-DgFczAdB.js} +1 -1
  69. package/dist/web/assets/{journeyDiagram-BOSHW7O7-CDWNQ0FV.js → journeyDiagram-BOSHW7O7-CJKwCuyG.js} +1 -1
  70. package/dist/web/assets/{kanban-definition-FNSA4HC5-kCg2Ntni.js → kanban-definition-FNSA4HC5-B_HPa_Q8.js} +1 -1
  71. package/dist/web/assets/{line-Cs-2UOsh.js → line-Bil8yI0B.js} +1 -1
  72. package/dist/web/assets/{linear-Dn78ogyi.js → linear-DJSxHb3I.js} +1 -1
  73. package/dist/web/assets/{mermaid-parser.core-XUq3kRg7.js → mermaid-parser.core-ByEdgqAb.js} +3 -3
  74. package/dist/web/assets/{mermaid.core-KP0iScKW.js → mermaid.core-CXUI3iYT.js} +4 -4
  75. package/dist/web/assets/{mindmap-definition-6OY57UG3-DYfhBOEV.js → mindmap-definition-6OY57UG3-w7xG6UiS.js} +1 -1
  76. package/dist/web/assets/{packet-JDAUHWVQ-m_mxaPh2.js → packet-JDAUHWVQ-YvTb_dXP.js} +1 -1
  77. package/dist/web/assets/{pegDiagram-ECIUJNBX-C57XlI0z.js → pegDiagram-ECIUJNBX-D5FI1bVJ.js} +1 -1
  78. package/dist/web/assets/{pie-XZMESJXO-COU-cPpy.js → pie-XZMESJXO-BH2bih-K.js} +1 -1
  79. package/dist/web/assets/{pieDiagram-GNMPY74T-Cgv_MwBq.js → pieDiagram-GNMPY74T-DUR82NlG.js} +1 -1
  80. package/dist/web/assets/{quadrantDiagram-D57K4MC3-DLP-IJBg.js → quadrantDiagram-D57K4MC3-DauAEIyL.js} +1 -1
  81. package/dist/web/assets/{radar-ABXABTNO-DVnhW8Tu.js → radar-ABXABTNO-CdUXfEdf.js} +1 -1
  82. package/dist/web/assets/{railroad-I3PHUGI6-CbNbR4f3.js → railroad-I3PHUGI6-Djt90nhE.js} +1 -1
  83. package/dist/web/assets/{railroad-abnf-LNEFI6M7-QapD3MRY.js → railroad-abnf-LNEFI6M7-XqY0pGCO.js} +1 -1
  84. package/dist/web/assets/{railroad-ebnf-DWYD2UWJ-CSlvjrRs.js → railroad-ebnf-DWYD2UWJ-BNSOgId4.js} +1 -1
  85. package/dist/web/assets/{railroad-peg-JR7BVNR7-CabNa_kN.js → railroad-peg-JR7BVNR7-DW2TRqOr.js} +1 -1
  86. package/dist/web/assets/{railroadDiagram-Y72NRBL7-DnlOXd0I.js → railroadDiagram-Y72NRBL7-CTDNRHBf.js} +1 -1
  87. package/dist/web/assets/{requirementDiagram-EQYSW5RA-Dq1MJEdy.js → requirementDiagram-EQYSW5RA-DJ5H8uqE.js} +1 -1
  88. package/dist/web/assets/{sankeyDiagram-SY24JHO5--LVb7hhV.js → sankeyDiagram-SY24JHO5-Xa_3Bd4U.js} +1 -1
  89. package/dist/web/assets/{sequenceDiagram-BLEHNHQU-Cg8W2Kc8.js → sequenceDiagram-BLEHNHQU-2jNpfI3_.js} +1 -1
  90. package/dist/web/assets/{src-w1h_Rr-8.js → src-DgNmQVK4.js} +1 -1
  91. package/dist/web/assets/{stateDiagram-v2-A6IESKWZ-ck5PGLTp.js → stateDiagram-v2-A6IESKWZ-DtxzihUG.js} +1 -1
  92. package/dist/web/assets/{swimlanes-B3ENRKFQ--RxIRIY6.js → swimlanes-B3ENRKFQ-DJBCOj2u.js} +1 -1
  93. package/dist/web/assets/swimlanesDiagram-AYQRV4AK-_cBuwUIk.js +8 -0
  94. package/dist/web/assets/{timeline-definition-JXYKGLGB-Cgtckb20.js → timeline-definition-JXYKGLGB-C-ixUm6b.js} +1 -1
  95. package/dist/web/assets/{treeView-D4JQ5SDB-Byi5cU2l.js → treeView-D4JQ5SDB-yWRFH4mR.js} +1 -1
  96. package/dist/web/assets/{treemap-SAJKECNS-DJ7_3_F8.js → treemap-SAJKECNS-q3FZ9UjJ.js} +1 -1
  97. package/dist/web/assets/{usecaseDiagram-WPOLBNNX-DkTE13SV.js → usecaseDiagram-WPOLBNNX-Ch9QG7L1.js} +1 -1
  98. package/dist/web/assets/{vennDiagram-Q3Y3IDCW-C5G521q2.js → vennDiagram-Q3Y3IDCW-85m0XMhF.js} +1 -1
  99. package/dist/web/assets/{wardley-7MLQ67FV-PChC3W6T.js → wardley-7MLQ67FV-S2NRiIdM.js} +1 -1
  100. package/dist/web/assets/{wardleyDiagram-IVAIDKWA-B9sJfj7x.js → wardleyDiagram-IVAIDKWA-q8ZLrvVG.js} +1 -1
  101. package/dist/web/assets/{xychartDiagram-4URNHDU4-CmuAuTkp.js → xychartDiagram-4URNHDU4-eSUy1iT7.js} +1 -1
  102. package/dist/web/index.html +4 -4
  103. package/package.json +4 -2
  104. package/templates/proposals/SKILL.md +14 -6
  105. package/templates/skill/SKILL.md +18 -0
  106. package/dist/web/assets/channel-B4Lj3Yy_.js +0 -1
  107. package/dist/web/assets/flowDiagram-IUGLLWBU-DA73lQLy.js +0 -1
  108. package/dist/web/assets/index-CFg9w5Ih.js +0 -63
  109. package/dist/web/assets/index-CT9Wzb6W.css +0 -1
  110. package/dist/web/assets/swimlanesDiagram-AYQRV4AK-CeoYxgix.js +0 -8
package/README.md CHANGED
@@ -1,58 +1,56 @@
1
- # markode
1
+ # <img src="docs/assets/logo.svg" alt="" width="32" height="32" align="top"> markode
2
2
 
3
3
  [![CI](https://github.com/rafiqui1987/markode/actions/workflows/ci.yml/badge.svg)](https://github.com/rafiqui1987/markode/actions/workflows/ci.yml)
4
4
  [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
5
5
 
6
- **See and edit every Markdown file in your project in one place: no split screen, no raw syntax in the
7
- way.**
6
+ **Your project's Markdown, made for two readers: you and your AI agent.**
8
7
 
9
- Run `markode` 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.
8
+ Run `markode` in any repository and every `.md` file (`README.md`, `CLAUDE.md`, `AGENTS.md`, `docs/`…)
9
+ opens in one editor that is also the preview. You read and edit documents, not syntax. The files stay
10
+ plain Markdown, saved exactly as written, so Git diffs stay clean and any agent reads them as they are.
13
11
 
14
- **Why it exists:** [write less, point better](#the-markode-philosophy).
12
+ On top of the viewer, and only if you want it, markode helps you and your agent work from the same
13
+ docs: short instructions that point instead of repeat, tasks that remember where you stopped, and
14
+ decisions you answer with a click instead of a wall of chat.
15
15
 
16
16
  <picture>
17
17
  <source media="(prefers-color-scheme: dark)" srcset="docs/assets/screenshot-dark.png">
18
18
  <img alt="markode editor: a repository with a front end and a back end, each with its own tasks; a phase listing tasks from both, a comment thread like in Word and a Mermaid diagram" src="docs/assets/screenshot-light.png">
19
19
  </picture>
20
20
 
21
- ## Quick start
22
-
23
- Requires Node.js 20 or newer. From the root of any project (monorepos included):
21
+ ## The markode philosophy
24
22
 
25
- ```bash
26
- npx @rafiqui987/markode
27
- ```
23
+ AI agents made project docs important again, and they made them worse. `CLAUDE.md` files grow into
24
+ hundreds of lines of generic advice, folder listings the agent can read by itself, and the same
25
+ decision copied in three places. They cost tokens on every message, the agent still searches the whole
26
+ repository, and nobody keeps them up to date. Meanwhile the human, who has to review all of it, reads
27
+ raw Markdown in a split screen or not at all.
28
28
 
29
- The very first time, markode asks how you want your projects set up:
29
+ markode is built on five ideas:
30
30
 
31
- - **With your answers** (default): answer once (main doc, how to plan the work, the language you
32
- work in, rules…). They are saved in `~/.markode/defaults.json` and every new project is set up
33
- with them, without questions. For a project that needs something else: `markode init --custom`.
34
- - **Ask in each project**: run `markode -D` the first time. Each project asks its own questions.
31
+ **1. Write less, point better.** The docs are a **map**, not an encyclopedia. Write only what the code
32
+ can't tell: decisions and why, hidden conventions, the state of the work. Each fact lives in one place
33
+ and everything else links to it. A doc is created when there is something real to put in it, never as
34
+ an empty template.
35
35
 
36
- Change your choice any time with `markode setup`. Then the editor opens at `http://localhost:4319`;
37
- it only listens on `127.0.0.1`.
36
+ **2. The docs are the memory, not the chat.** Work lives in task files with a status and a next step.
37
+ Decisions live in the architecture docs. Tomorrow, a new session (or a teammate, or another agent) reads
38
+ the map, finds what is in progress and picks up where you stopped, without you explaining it again.
38
39
 
39
- ## The markode philosophy
40
+ **3. One plain file, two ways to read it.** You see rendered tables, diagrams and checklists, and you
41
+ comment like in Word. The agent sees plain Markdown and HTML comments, invisible on GitHub. Nothing is
42
+ converted, nothing is locked in a database: delete markode tomorrow and every file still works.
40
43
 
41
- **Write less, point better.**
44
+ **4. Talk through the docs.** When a question has options, the agent writes a proposal with diagrams
45
+ and you answer by ticking and commenting. Your comments and edits reach the agent while it works. The
46
+ decision ends up in the docs it changes, not lost in a conversation.
42
47
 
43
- Most `CLAUDE.md` files grow into hundreds of lines: generic advice the agent already follows, folder
44
- listings it can read by itself, the same decision copied in three places. It costs tokens, the agent
45
- still searches the whole repository, and nobody keeps it up to date. markode turns the docs into a
46
- **map** and a **memory**:
48
+ **5. Only what you ask for, for any agent.** The viewer writes nothing to your project. Everything
49
+ else is a module you turn on or off, and turning it off removes exactly what markode added. It works
50
+ with Claude Code, Codex, Cursor, Gemini, Copilot and any agent that reads `CLAUDE.md`, `AGENTS.md` or
51
+ skills.
47
52
 
48
- - **No filler.** Write only what the code can't tell: decisions and why, hidden conventions, the state
49
- of the work. A doc is created when there is something real to put in it.
50
- - **A map, not an encyclopedia.** The main doc says where things are, not what they say. Each fact
51
- lives in one place; everything else links to it.
52
- - **Memory between sessions.** The work lives in task files with a status and a next step, not in a
53
- chat history. Tomorrow, a new session (or a teammate) picks up where you stopped.
54
- - **Shaped like your repository.** A single app, a monorepo or a folder of repositories each get the
55
- structure they need, and the setup asks only what matters for yours.
53
+ What it looks like in a repository with a front end and a back end:
56
54
 
57
55
  ```tree
58
56
  CLAUDE.md # the map: projects, where their docs live, how to start a session
@@ -72,26 +70,82 @@ explaining it all again.
72
70
 
73
71
  markode can't force an agent to follow the map, but it makes the right path the shortest one.
74
72
 
73
+ ## Quick start
74
+
75
+ Requires Node.js 20 or newer. From the root of any project (monorepos included):
76
+
77
+ ```bash
78
+ npx @rafiqui987/markode
79
+ ```
80
+
81
+ The editor opens at `http://localhost:4319` (it only listens on `127.0.0.1`). The very first time,
82
+ markode asks a single question: what to install besides the viewer.
83
+
84
+ | Choice | What you get |
85
+ |---|---|
86
+ | **Viewer only** | See and edit every `.md` file. Nothing is written to the project. |
87
+ | **Viewer + AI agent** (recommended) | The viewer, plus everything your agent needs to work with these docs: its skill, working rules, proposals, comments, live changes and translations. |
88
+ | **Complete** | All of the above, plus the dashboard and a docs structure for vision, architecture, phases and tasks. |
89
+ | **Choose the modules** | Pick each module from the list below. |
90
+
91
+ Your answer becomes the default for new projects (`~/.markode/defaults.json`), so they don't ask again;
92
+ change it with `markode setup`. Everything else is detected: the main doc (`CLAUDE.md`, `AGENTS.md`
93
+ or both), the agents the project uses, the language its docs are written in, the projects of a
94
+ monorepo, and an existing OpenSpec or Spec Kit setup.
95
+
96
+ ### Modules
97
+
98
+ Turn any of them on or off later in **Settings → Features** (or `markode features <module> on|off`).
99
+ Turning one off removes only what markode added; your docs, tasks, proposals and comments stay.
100
+
101
+ | Module | What it does | What it writes |
102
+ |---|---|---|
103
+ | **AI agent** | Teaches your agent how to work with these docs, and lets you comment on any text for it. | The `markode` skill in `.claude/skills/` and/or `.agents/skills/`, a "Working rules" section in the main doc with the source language |
104
+ | **Working rules** | Rules the agent follows in this project, chosen in the Rules tab. Needs the AI agent. | Inside the "Working rules" section |
105
+ | **Proposals** | The agent answers big questions with a doc you answer by ticking options and commenting. Needs the AI agent. | The `markode-proposals` skill, a "Proposals" section in the main doc |
106
+ | **Live changes** | Claude Code hears about your edits and comments while it works. Needs the AI agent. | Personal hooks in `.claude/settings.local.json` |
107
+ | **Translations** | Read and edit the docs in your language; the agent translates them. Needs the AI agent. | Only `.markode/` (personal) |
108
+ | **Dashboard and tasks** | A Dashboard tab with docs, proposals, phases and tasks; with the AI agent, also the structure for them (the markode method). | `docs/`, the `markode-*` method skills, a "Workflow" section in the main doc |
109
+ | **Skills** | A tab to browse and edit your agents' skills and add them to the project. | Nothing |
110
+ | **Hide in VS Code** | Hides `.markode/` from the VS Code explorer. | `.vscode/settings.json` |
111
+
112
+ markode keeps its own state in `.markode/`, which ignores itself in git (`.markode/.gitignore`), so
113
+ your `.gitignore` is never touched. Sections it writes in your main doc sit between markers like
114
+ `<!-- markode:rules:start -->` and `<!-- markode:rules:end -->`; the rest of the file is yours.
115
+
75
116
  ## What it does
76
117
 
118
+ ![markode in action: a task is added to a checklist, the / menu inserts a Mermaid diagram, the file switches to the Markdown view and back, and Settings shows the modules](docs/assets/demo.gif)
119
+
77
120
  ### 1. Every Markdown file of the project, in one place
78
121
 
79
122
  A file tree with every `.md` in the folder where you run it, folders first. Search, expand or collapse
80
123
  all, create files and folders inline, hide what you don't need (`.markodeignore`) and delete from the
81
- right-click menu. Resize the sidebar by dragging its edge, or hide it for more room.
124
+ right-click menu. Resize the sidebar by dragging its edge, or hide it for more room. Links between docs
125
+ work: click a relative `.md` link and it opens in markode.
126
+
127
+ ### 2. Read the document, not the syntax
82
128
 
83
- ### 2. Edit and view at the same time
129
+ There is no "editor | preview" split. The **markode view** renders the document as it looks and lets
130
+ you write in it directly: headings, lists and quotes keep their marks out of the way, and the cursor
131
+ never lands inside them. Code blocks, tables, math and images show their Markdown only when you click
132
+ to edit them. One button switches the open file to the **Markdown view** (plain source) and back,
133
+ keeping your place; every file opens in the markode view.
84
134
 
85
- There is no "editor | preview" split. Markdown syntax is hidden everywhere except the line you are
86
- editing, as in Obsidian, so you read the document as it looks and still write plain Markdown.
87
- Undo, redo and **discard** (back to how the file was when you opened it) sit next to the breadcrumb.
135
+ The toolbar next to the breadcrumb has undo, redo, **discard** (back to how the file was when you
136
+ opened it), **find and replace** (`Ctrl+F`, `Ctrl+H`) and **copy** as Markdown or as formatted text
137
+ for an email or a chat.
88
138
 
89
139
  ### 3. Formatting without remembering syntax
90
140
 
91
141
  - **`/` commands**: type `/` at the start of a line (or `Ctrl+Space` anywhere) for a menu of headings,
92
- lists, checklists, tables, code blocks, diagrams, quotes, links and frontmatter.
142
+ lists, checklists, single-choice lists, tables, code blocks, diagrams, quotes, links, frontmatter,
143
+ and comments and markers. Each option applies to the current line or to every selected line
144
+ (numbered lists count up). Pick with the number or the arrows; `0`, `←` or `Backspace` goes back.
93
145
  - **Selection toolbar**: select text to copy it or turn it into bold, italic, strikethrough, code or a
94
- link. Hover a button for its variants (`**`/`__`, `*`/`_`, `***`).
146
+ link. Hover a button for its variants (`**`/`__`, `*`/`_`, `***`). Formatting inside a link's text
147
+ keeps the link.
148
+ - **Links**: hover one to see its URL, copy it or edit its text and target; click to follow it.
95
149
 
96
150
  ### 4. Diagrams, tables and lists that are easy to work with
97
151
 
@@ -105,7 +159,19 @@ Undo, redo and **discard** (back to how the file was when you opened it) sit nex
105
159
  - And more: KaTeX math (`$x^2$`, `$$…$$`), footnotes on hover, local and remote images, code blocks with
106
160
  only their language label showing.
107
161
 
108
- ### 5. Work in your language
162
+ ### 5. Notes for the agent, invisible on GitHub
163
+
164
+ HTML comments are how a Markdown file talks to an agent without showing up for readers. markode makes
165
+ them visible and editable without the clutter (from the `/` menu, "Comments and markers"):
166
+
167
+ | You write | markode shows | Use it for |
168
+ |---|---|---|
169
+ | `<!-- any text -->` | a small icon; the text on hover | a hidden note for the agent or your future self |
170
+ | `<!-- region:auth:start -->` … `<!-- region:auth:end -->` | a bracket with the region's name | a section the agent should treat as one unit (renaming the start renames the end) |
171
+ | `<!-- tag:draft -->` | a tag chip | a marker the agent or a script can look for |
172
+ | `<!-- comment by Ana, …: … -->` | a comment thread, like in Word | a discussion on a piece of text (with the AI agent module) |
173
+
174
+ ### 6. Work in your language
109
175
 
110
176
  Most AI agents, and most teams, work best with docs in English. If English isn't easy for you, you
111
177
  don't have to choose:
@@ -115,23 +181,23 @@ don't have to choose:
115
181
  Dutch…). Then ask your agent for **`/markode translate`** (markode has a button to copy it), and
116
182
  markode shows **every doc in that language**. Read the architecture, tick tasks, write notes and fix
117
183
  a rule, all in your language.
118
- - The files in the repository **stay in one source language** (English by default), so the agent and
119
- the rest of the team keep reading one consistent version.
184
+ - The files in the repository **stay in one source language**, detected from your docs on setup, so
185
+ the agent and the rest of the team keep reading one consistent version.
120
186
  - Your edits are kept as a translation until you ask for `/markode translate` again. Before changing
121
187
  a source file, the agent lists what would change and applies only what you approve. The top bar
122
188
  shows how many docs are behind, and copies the command when clicked.
123
189
  - Translating is always on purpose: it never happens as a side effect of other work.
124
- - The menus are in English by default and don't depend on the docs' language: pick English, Spanish,
125
- French, Portuguese, German or Italian in **Settings → General**.
190
+ - The menus don't depend on the docs' language: pick English, Spanish, French, Portuguese, German or
191
+ Italian in **Settings → General**.
126
192
 
127
193
  Example: you open `docs/tasks/T-004-login.md` in Spanish, add an acceptance criterion and tick two
128
194
  others. After `/markode translate` and your OK, the English file has the new criterion and the ticks,
129
195
  and the agent works from it.
130
196
 
131
- ### 6. A method to plan and follow the work
197
+ ### 7. A method to plan and follow the work
132
198
 
133
- `markode init` offers the **markode method**, a way of organizing the project so that you and the
134
- agent always know what is being built, how, and what comes next:
199
+ The **Dashboard and tasks** module sets up the **markode method**, a way of organizing the project so
200
+ that you and the agent always know what is being built, how, and what comes next:
135
201
 
136
202
  ```tree
137
203
  CLAUDE.md # short: map, commands, how to start and close a session
@@ -152,24 +218,23 @@ flowchart LR
152
218
  - **It starts small**: the setup creates only the task folder and its template. The agent creates the
153
219
  vision, architecture and phase docs from templates (skill `markode-method`) when there is something
154
220
  to write. A task's status lives only in its file: there is no index to keep in sync.
155
- - **It knows what kind of project it is**, and asks only what that kind needs. When the files don't
156
- make it clear, it asks:
157
-
158
- | Kind | Detected by | Asks | Its docs |
159
- |---|---|---|---|
160
- | App | framework, `bin`, `Dockerfile`, `main.go`… | nothing | vision, architecture, phases |
161
- | Library | `main`/`exports` in a public package, Cargo `[lib]` | is it published? | public API and versioning, changelog |
162
- | Mobile | React Native, Flutter, `android/` + `ios/` | target platforms | releases and stores |
163
- | Data / ML | notebooks, `dvc.yaml`, `MLproject` | where the data lives, how experiments are tracked | datasets, experiment log |
164
- | Infrastructure | Terraform, Pulumi, Helm, Kustomize | environments | runbooks |
165
- | Microservices | several services + proto/OpenAPI or compose | where the contracts live | contracts as shared architecture |
221
+ - **It knows what kind of project it is**, detected from its files, and writes only the guidance that
222
+ kind needs (`markode init --custom` asks instead):
223
+
224
+ | Kind | Detected by | Its docs |
225
+ |---|---|---|
226
+ | App | framework, `bin`, `Dockerfile`, `main.go`… | vision, architecture, phases |
227
+ | Library | `main`/`exports` in a public package, Cargo `[lib]` | public API and versioning, changelog |
228
+ | Mobile | React Native, Flutter, `android/` + `ios/` | releases and stores |
229
+ | Data / ML | notebooks, `dvc.yaml`, `MLproject` | datasets, experiment log |
230
+ | Infrastructure | Terraform, Pulumi, Helm, Kustomize | runbooks |
231
+ | Microservices | several services + proto/OpenAPI or compose | contracts as shared architecture |
166
232
 
167
233
  It also recognizes monorepos with workspaces, a front end and a back end without workspaces, and
168
- folders of repositories; and if the project already has docs, it asks which are the official ones
169
- and points the agent to them instead of creating new ones.
234
+ folders of repositories; and if the project already has docs, it points the agent to them instead
235
+ of creating new ones.
170
236
  - **The main doc stays short** and points to `docs/`. If `CLAUDE.md` or `AGENTS.md` already exist,
171
237
  they are not rewritten: markode adds a "Workflow" section with the map and the session routine.
172
- - **Each fact lives in one place**: decisions in `architecture/`, progress in the task files.
173
238
  - **Sessions pick up where they stopped**: the agent looks for tasks `in-progress`, reads their "Next
174
239
  step" and tells you where you left off. `/markode-status` sums up what is in progress, blocked and
175
240
  pending, per project; `/markode-new-task` creates a task in the right place; and
@@ -179,17 +244,16 @@ flowchart LR
179
244
  proposals and, with its first decision, a `docs/ARCHITECTURE.md`. The root main doc is the
180
245
  overview: a table of the projects, what each one is and where its docs live. The root `docs/` holds
181
246
  vision, phases and work across projects (`CORE-001`). The agent reads only the project it is
182
- working on. A project's existing `CLAUDE.md`/`AGENTS.md` is kept as is: markode only adds a short
183
- block pointing to its docs.
247
+ working on.
184
248
  - **Every agent finds the instructions**: Claude Code reads `CLAUDE.md`; Codex, Cursor, Gemini and
185
249
  others read `AGENTS.md`. Where a folder has only one, markode offers the other, pointing to it (a
186
- one-line `CLAUDE.md` with `@AGENTS.md`, or an `AGENTS.md` that sends agents to `CLAUDE.md`) in the
187
- Dashboard and from the agent at the start of a session (`markode link`); the setup offers the
188
- `CLAUDE.md` one. Nothing is copied; `markode link --skip` stops the offer.
250
+ one-line `CLAUDE.md` with `@AGENTS.md`, or an `AGENTS.md` that sends agents to `CLAUDE.md`), in the
251
+ Dashboard and with `markode link`. Nothing is copied; `markode link --skip` stops the offer.
189
252
  - **The Dashboard** shows each phase with its progress and tasks, and a board of what is in progress,
190
253
  blocked and pending.
191
254
 
192
- **Prefer spec-driven development?** Pick one of these instead, and the Dashboard follows it too:
255
+ **Prefer spec-driven development?** Projects that already use one of these are detected, and the
256
+ Dashboard follows them; `markode init --custom` can install them for you:
193
257
 
194
258
  | Option | What you get |
195
259
  |---|---|
@@ -198,10 +262,9 @@ flowchart LR
198
262
 
199
263
  markode runs their official installer, which also adds their commands to your agent (`/opsx:*`,
200
264
  `/speckit-*`). If it can't (Spec Kit needs [uv](https://docs.astral.sh/uv/)), it creates a compatible
201
- structure with a guide on how to add them later. Projects that already use either are detected and
202
- shown as they are. Choose **None** and markode adds no structure or workflow at all.
265
+ structure with a guide on how to add them later.
203
266
 
204
- ### 7. Proposals and comments: answer the AI with clicks
267
+ ### 8. Proposals and comments: answer the agent with clicks
205
268
 
206
269
  When an answer would be long or has options to choose from (or when you ask for one), the agent writes
207
270
  a **proposal** instead of a long chat message: options with small ASCII or Mermaid diagrams, choices to
@@ -232,38 +295,66 @@ tick, open questions, and the docs the decision will change. You answer in marko
232
295
  <!-- reply by AI, 2026-10-22: Two instances minimum; added to the architecture. -->
233
296
  ```
234
297
 
235
- - **Send your answer**: the button marks the proposal as answered and copies a message to paste in your
236
- AI chat. The agent replies to your comments and updates every doc that depends on the decision
237
- (tasks, phases, architecture…). A proposal is temporary: once applied, it is deleted and the decision
238
- lives in those docs.
298
+ - **Send your answer**: the agent is waiting on it in the background (`markode wait`) and continues by
299
+ itself; without an open session, the button copies a message to paste in your chat. The agent
300
+ replies to your comments and updates every doc that depends on the decision (tasks, phases,
301
+ architecture…).
302
+ - **Then it is archived**: the decision lives in those docs, and the proposal moves to an `applied/`
303
+ folder next to it, hidden in markode (shown with "show ignored"), left out of the dashboard, checks
304
+ and translations, and never read by the agent unless you ask about it.
239
305
  - In a monorepo, proposals are organized **by project and topic** (`apps/web/docs/proposals/auth/…`);
240
306
  in a big single project they can be organized by topic instead of one folder.
241
307
 
242
- It comes with the markode method, and can be turned on or off for any project in **Settings**.
308
+ ### 9. Your comments reach the agent while it works
309
+
310
+ You don't have to stop the agent to tell it something. Keep editing and commenting in markode: the
311
+ agent learns what changed (the **Live changes** module does it after every step in Claude Code; other
312
+ agents check as their skill tells them):
313
+
314
+ - a doc you edited, and which section: the agent re-reads it before working on that part;
315
+ - a comment on what it is working on: it replies below it and applies it;
316
+ - a comment on anything else: it asks you in one line whether to take it now.
243
317
 
244
- ### 8. Your AI agent's skills
318
+ ### 10. Your AI agent's skills, and which ones this project really has
245
319
 
246
- The **Skills** tab lists every global skill you have for Claude Code, Codex, Gemini, Copilot or Cursor
247
- ([Agent Skills](https://agentskills.io) format). Tag them to group them, expand one to read or edit its
248
- `SKILL.md`, see problems that would stop an agent from loading it, and **add it to the current project**
249
- (`.claude/skills/` and/or `.agents/skills/`). Tags are stored in `~/.markode/skills.json`, never in the
250
- skill.
320
+ Skills teach an agent how to do a job: deploy, review a pull request, write a changelog. They pile up
321
+ in many places: your own for Claude Code (`~/.claude/skills`), for Codex, Gemini, Copilot or Cursor,
322
+ the shared `~/.agents/skills`, and each project's `.claude/skills/` or `.agents/skills/`. It is hard to
323
+ know what an agent can actually use in a given project, and copying skills around "just in case"
324
+ duplicates them, lets copies go stale, and costs context in every session.
325
+
326
+ The **Skills** tab lists every global skill you have ([Agent Skills](https://agentskills.io) format)
327
+ and tells you, for the agents this project uses, where each one stands:
328
+
329
+ | Status | What it means | What to do |
330
+ |---|---|---|
331
+ | **Active for Claude (global)** | Claude Code already uses it in every project. | Nothing. **Share with the team** copies it into the repository only if your teammates (or CI) need it too. |
332
+ | **Not visible to Claude** | It belongs to another agent (e.g. a Codex skill): Claude can't use it here. | **Use with Claude** copies it into `.claude/skills/`. Review it after: it may mention that agent's commands. |
333
+ | **In the project** | Copied into this project: every clone has it. | Nothing. |
334
+ | **Global and in the project** | Two copies. On your machine Claude Code runs your global one (a personal skill wins over a project skill with the same name); the team gets the project one. | Keep the project copy only to share it. |
335
+ | **Project copy differs** | The project's `SKILL.md` is not the same as your global one. | Click to update it from the global one, or keep the project's version on purpose. |
251
336
 
252
- ### 9. Also included
337
+ You can also tag skills to group them (tags live in `~/.markode/skills.json`, never in the skill),
338
+ read and edit a `SKILL.md` in place, and see problems that would stop an agent from loading it (a
339
+ missing description, a name that doesn't match its folder…).
340
+
341
+ ### 11. Also included
253
342
 
254
343
  - **Changes**: Git diff of your Markdown, grouped by folder and section.
255
344
  - **Rules**: your library of reusable rules, written into `CLAUDE.md` or `AGENTS.md` where you apply
256
345
  them. It starts with common ones for AI agents (ask before committing, verify before saying it's done,
257
- minimal changes, protect secrets…); edit them and add your own. The setup applies none unless you
258
- choose them. The library lives in `~/.markode/rules/`.
259
- - **Settings**, by section: General (interface language, theme), Editor (font, size, line spacing,
260
- margins, line width, wrapping), Document languages and Proposals.
346
+ minimal changes, protect secrets…); edit them and add your own. None is applied unless you choose
347
+ it. The library lives in `~/.markode/rules/`.
348
+ - **Settings**, by section: General (interface language, theme), Features (the modules, with what each
349
+ one does and writes), Editor (font, size, line spacing, margins, line width, wrapping) and Document
350
+ languages.
261
351
 
262
352
  ## Keyboard shortcuts
263
353
 
264
354
  | Keys | Action |
265
355
  |---|---|
266
356
  | `/` at the start of a line, `Ctrl+Space` | Insert menu |
357
+ | `0`, `←`, `Backspace` in the menu | Back to the previous level |
267
358
  | `Ctrl+Enter` | Tick or untick the task on the current line |
268
359
  | `Alt+H` | After pasting a table from a spreadsheet: toggle the header row |
269
360
  | `Ctrl+Z` / `Ctrl+Y` | Undo / redo |
@@ -276,46 +367,69 @@ skill.
276
367
 
277
368
  ```bash
278
369
  markode # set up the project if needed, then open the editor
279
- markode init # run the setup again (with your defaults, if you saved them)
280
- markode init --custom # set up this project with its own answers
281
- markode setup # change your defaults, or switch to asking in each project
282
- markode -D # first run: don't save defaults, ask in each project
283
370
  markode serve # open the editor without the setup
284
371
  markode serve --port 5000 --no-open
372
+ markode init # run the setup again: only adds modules (your defaults, if saved)
373
+ markode init --profile full # no questions: viewer, agent or full
374
+ markode init --yes # no questions: your defaults, or viewer + AI agent
375
+ markode init --custom # choose each module and answer every question for this project
376
+ markode setup # change your defaults, or switch to asking in each project
377
+ markode setup --custom # also choose the main doc, language, rules and monorepo layout
378
+ markode -D # first run: don't save your choice as the default
379
+ markode features # which modules are on, with what each one does
380
+ markode features live off # turn a module on or off (same as Settings → Features)
285
381
  markode translate # choose languages to review the docs in (also: markode --translate)
286
382
  markode link # only CLAUDE.md or only AGENTS.md? add the other one, pointing to it
287
383
  markode -v # version
288
384
  ```
289
385
 
290
386
  To keep it installed: `npm install -g @rafiqui987/markode` (or `pnpm add -g @rafiqui987/markode`).
387
+ Installing it also makes the Claude Code hooks faster than running through `npx`.
291
388
 
292
389
  ## For AI agents
293
390
 
294
- `markode init` installs `.claude/skills/markode/SKILL.md`, which tells the agent how to write Markdown
295
- that markode presents well, and gives it two commands:
391
+ The AI agent module installs the `markode` skill where the project's agents read skills
392
+ (`.claude/skills/` for Claude Code, `.agents/skills/` for Codex, Copilot, Gemini and others). It tells
393
+ the agent how to write Markdown that markode presents well, and gives it two commands:
296
394
 
297
395
  | Command | What the agent does | When |
298
396
  |---|---|---|
299
397
  | `/markode sync` | Keeps the docs consistent: applies answered proposals, ticks phases from their tasks, checks the projects table and broken links (`markode check`) | Start and end of a session, after editing docs |
300
398
  | `/markode translate` | Translates what is behind; asks before changing any source file | Only when you ask |
301
399
 
302
- It also writes into the main doc:
400
+ markode refreshes every skill and section it installed when the editor starts, so updating markode is
401
+ enough. In the main doc it writes only between its markers:
303
402
 
304
- - the working rules you picked, between `<!-- markode:rules:start -->` and `<!-- markode:rules:end -->`;
305
- - how the project plans its work (the markode method, OpenSpec or Spec Kit), between
306
- `<!-- markode:workflow:start -->` and `<!-- markode:workflow:end -->`. With the markode method it
307
- also installs the `markode-new-task` and `markode-close-session` skills.
308
- - with proposals on, how the agent writes proposals and answers comments (skill
309
- `markode-proposals`), between `<!-- markode:proposals:start -->` and `<!-- markode:proposals:end -->`.
403
+ - `markode:rules`: the source language and the working rules you picked;
404
+ - `markode:workflow`: how the project plans its work (the markode method, OpenSpec or Spec Kit);
405
+ - `markode:proposals`: how the agent writes proposals and answers comments.
310
406
 
311
407
  When the agent writes a proposal, it runs `markode wait <proposal>` in the background: it waits
312
- without using tokens until you press "Done, send my answer" in markode, then hands the agent your
313
- choices, open questions and comments, and the agent continues by itself. If no session was open, the
314
- next one applies the answer first.
408
+ without using tokens until you press "Done, send my answer", then hands the agent your choices, open
409
+ questions and comments. If no session was open, the next one applies the answer first.
410
+
411
+ **Live changes.** markode logs what you save (the agent's own edits go straight to disk, so they never
412
+ count), and `markode changes` tells the agent what is new since it was last told. With the Live changes
413
+ module, in projects that use Claude Code, markode adds three hooks to `.claude/settings.local.json`
414
+ (personal: each teammate decides), silent while nothing changes:
415
+
416
+ ```json
417
+ {
418
+ "hooks": {
419
+ "SessionStart": [{ "hooks": [{ "type": "command", "command": "markode changes --start" }] }],
420
+ "UserPromptSubmit": [{ "hooks": [{ "type": "command", "command": "markode changes --hook UserPromptSubmit" }] }],
421
+ "PostToolUse": [{ "hooks": [{ "type": "command", "command": "markode changes --hook PostToolUse" }] }]
422
+ }
423
+ }
424
+ ```
425
+
426
+ Without a global install the command is `npx -y --prefer-offline @rafiqui987/markode`.
315
427
 
316
428
  ```bash
317
429
  markode check [--json] # what /markode sync fixes
318
430
  markode wait <proposal.md> # wait for the user's answer, then print it
431
+ markode changes [--json] # the user's edits and comments since last told
432
+ markode changes --start # a new session: what happened before is old news
319
433
  markode translate --status [--json] # translations + files not in the source language
320
434
  markode translate --mark [--lang xx] <path...>|--all # record translations as in sync
321
435
  markode translate --keep <path...> # keep files in their current language
@@ -323,13 +437,18 @@ markode translate --keep <path...> # keep files in their curr
323
437
 
324
438
  ## Uninstall
325
439
 
440
+ From a project: turn the modules off (`markode features agent off`, `markode features dashboard off`,
441
+ `markode features vscode off`) and delete `.markode/`. That removes the skills, hooks and `markode:*`
442
+ sections it added; your docs stay. Projects set up before 0.3 may also have a `.markode/` line in
443
+ `.gitignore`.
444
+
445
+ The global install:
446
+
326
447
  ```bash
327
- npm uninstall -g markode # or: pnpm remove -g markode (use the one you installed it with)
448
+ npm uninstall -g @rafiqui987/markode # or: pnpm remove -g @rafiqui987/markode
328
449
  ```
329
450
 
330
- To remove it from a project, delete `.markode/` and `.claude/skills/markode*/`, the `.markode/` line in
331
- `.gitignore`, and the `markode:rules`, `markode:workflow` and `markode:proposals` blocks in your main doc (keep the text
332
- inside if you still want it). Editor settings, rule presets and skill tags live in `~/.markode`.
451
+ Editor settings, your defaults, rule presets and skill tags live in `~/.markode`.
333
452
 
334
453
  ## Development
335
454
 
@@ -340,6 +459,18 @@ pnpm build # web → dist/web, CLI → dist/cli.js
340
459
  pnpm typecheck
341
460
  ```
342
461
 
462
+ **Try the setup as a new user** with `pnpm sandbox` (after `pnpm build`): it copies a sample project
463
+ to a temporary folder, runs markode there with an empty `~/.markode` (so you see the first-run
464
+ question), and when it exits lists every file markode created or changed.
465
+
466
+ ```bash
467
+ pnpm sandbox # sample "single": ask, install and open the editor
468
+ pnpm sandbox monorepo init # only the setup, then the list of files
469
+ pnpm sandbox agents init --profile full # a project with only AGENTS.md, no questions
470
+ pnpm sandbox es --keep-home init # share one sandbox ~/.markode: the second project doesn't ask
471
+ pnpm sandbox list # samples: empty, single, es, agents, claude, monorepo, openspec
472
+ ```
473
+
343
474
  To try your local build in other projects, run `pnpm build && pnpm add -g "link:$PWD"`.
344
475
 
345
476
  See [docs/SPEC.md](docs/SPEC.md) for the specification and [CONTRIBUTING.md](CONTRIBUTING.md) to