@maincode-ai/matilda-code 0.21.11 → 0.21.13

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 (174) hide show
  1. package/bundled/mainy/docs/configuration/model-providers.md +0 -82
  2. package/bundled/mainy/docs/configuration/settings.md +46 -7
  3. package/bundled/mainy/docs/configuration/trusted-folders.md +12 -6
  4. package/bundled/mainy/docs/features/auto-mode.md +1 -1
  5. package/bundled/mainy/docs/features/channels/_meta.ts +0 -3
  6. package/bundled/mainy/docs/features/channels/overview.md +8 -16
  7. package/bundled/mainy/docs/features/commands.md +4 -4
  8. package/bundled/mainy/docs/features/hooks.md +9 -7
  9. package/bundled/mainy/docs/features/language.md +2 -29
  10. package/bundled/mainy/docs/features/worktree.md +0 -2
  11. package/bundled/mainy/docs/integration-github-action.md +3 -3
  12. package/bundled/mainy/docs/quickstart.md +2 -2
  13. package/bundled/mainy/docs/support/troubleshooting.md +1 -1
  14. package/chunks/agent-SRAIVZEE.js +3 -0
  15. package/chunks/agent-headless-XRDOZESG.js +3 -0
  16. package/chunks/{anthropicContentGenerator-IYZILRDW.js → anthropicContentGenerator-LLDIKDMQ.js} +3 -3
  17. package/chunks/{askUserQuestion-XWHJY3DM.js → askUserQuestion-BNSWGD26.js} +1 -1
  18. package/chunks/{ca-EUJBUYX5.js → ca-NPYL24ME.js} +2 -2
  19. package/chunks/{chunk-4YVN5HXG.js → chunk-27HUYW23.js} +2 -2
  20. package/chunks/{chunk-MH2P4YXC.js → chunk-27Q5KW3A.js} +2 -2
  21. package/chunks/{chunk-NYEWHSBL.js → chunk-2HTPVSGT.js} +1 -1
  22. package/chunks/{chunk-EQGA7LH7.js → chunk-3B2HABK7.js} +1 -1
  23. package/chunks/chunk-3MTZTNAU.js +101 -0
  24. package/chunks/{chunk-WHG6N5X2.js → chunk-5OHGYMKP.js} +1 -1
  25. package/chunks/{chunk-QH7736R5.js → chunk-6EQMZNIY.js} +1 -1
  26. package/chunks/chunk-6I6VGTKD.js +8 -0
  27. package/chunks/{chunk-5427BPR2.js → chunk-6M5G5FBH.js} +1 -1
  28. package/chunks/{chunk-4FVBPNTZ.js → chunk-6T2GIM76.js} +1 -1
  29. package/chunks/chunk-7ZODGQO6.js +4 -0
  30. package/chunks/chunk-AOOZREGV.js +9 -0
  31. package/chunks/{chunk-JXUDKX6D.js → chunk-DE3HKC2W.js} +1 -1
  32. package/chunks/chunk-DHDD5YJC.js +207 -0
  33. package/chunks/{chunk-SPW5DXX4.js → chunk-EZDV7A76.js} +1 -1
  34. package/chunks/{chunk-ODZOYHIC.js → chunk-GOJCMVJJ.js} +1 -1
  35. package/chunks/{chunk-FFFZ2QMG.js → chunk-GTVCJCHR.js} +1 -1
  36. package/chunks/{chunk-Q55AVE2N.js → chunk-IJEGHQ7Z.js} +11 -11
  37. package/chunks/{chunk-SUH3UUWZ.js → chunk-JCE3JAVC.js} +1 -1
  38. package/chunks/chunk-KHHJYBR5.js +9 -0
  39. package/chunks/{chunk-GO2GA2GY.js → chunk-LUNDTQ3G.js} +1 -1
  40. package/chunks/{chunk-NIQK6NX3.js → chunk-LWARA7JY.js} +1 -1
  41. package/chunks/{chunk-YMIF2DMT.js → chunk-MEV5XQI2.js} +1 -1
  42. package/chunks/{chunk-4CSSDBOS.js → chunk-P5TG5CON.js} +10 -10
  43. package/chunks/chunk-PEKAUGYV.js +2621 -0
  44. package/chunks/chunk-PGUG43HG.js +24 -0
  45. package/chunks/{chunk-ELH4YHJR.js → chunk-PGXQZVLX.js} +1 -1
  46. package/chunks/{chunk-SNLH42QJ.js → chunk-QZI2ZGZY.js} +1 -1
  47. package/chunks/chunk-RI54U73U.js +56 -0
  48. package/chunks/chunk-RPFSFS7Z.js +39 -0
  49. package/chunks/chunk-SOEIVSM5.js +113 -0
  50. package/chunks/{chunk-4J6DC24J.js → chunk-SVSY6AWS.js} +1 -1
  51. package/chunks/{chunk-T4P4KEDW.js → chunk-TWJLOEAI.js} +2 -2
  52. package/chunks/{chunk-HYVP4472.js → chunk-V6UPUMP3.js} +1 -1
  53. package/chunks/chunk-W4QSMIWO.js +9 -0
  54. package/chunks/chunk-WC2VTVCE.js +27 -0
  55. package/chunks/{chunk-GUFIMKF5.js → chunk-YV3PUOBU.js} +1 -1
  56. package/chunks/chunk-ZX34M2GF.js +14 -0
  57. package/chunks/{computer-use-SXP25RZQ.js → computer-use-J4GAM4M6.js} +1 -1
  58. package/chunks/contextCommand-5F5M7NA4.js +3 -0
  59. package/chunks/{cron-create-2UI4AT4Q.js → cron-create-IDWSZENI.js} +1 -1
  60. package/chunks/{cron-delete-ZB6BOTFF.js → cron-delete-NQCDZDUI.js} +1 -1
  61. package/chunks/{cron-list-YYAXNHB6.js → cron-list-Z4XMC3TO.js} +1 -1
  62. package/chunks/{de-DNEPG7S7.js → de-34YZHGC6.js} +3 -3
  63. package/chunks/{devtools-5JRKK3E7.js → devtools-XRQ4YJ5S.js} +1 -1
  64. package/chunks/{dist-P6SLWL5V.js → dist-PH6JW7XD.js} +1 -1
  65. package/chunks/edit-X2S2ZXRN.js +43 -0
  66. package/chunks/{en-NOD6KQNM.js → en-QLGMD6OS.js} +3 -3
  67. package/chunks/{enter-worktree-X47BSJLE.js → enter-worktree-TUCGNCLO.js} +1 -1
  68. package/chunks/{enterPlanMode-F22ZNTYJ.js → enterPlanMode-SQEZAAIR.js} +1 -1
  69. package/chunks/{exit-worktree-XY5UMDHX.js → exit-worktree-7FLITFZI.js} +1 -1
  70. package/chunks/exitPlanMode-O5UUJ3GM.js +120 -0
  71. package/chunks/{fr-2OE5WLJ4.js → fr-EDNBQACJ.js} +3 -3
  72. package/chunks/geminiContentGenerator-FIZFLPU3.js +8 -0
  73. package/chunks/glob-GSFTYAS2.js +22 -0
  74. package/chunks/{goal-tools-6QTC3UI7.js → goal-tools-YQOA6OKU.js} +1 -1
  75. package/chunks/{grep-6TTPZ524.js → grep-VAB2VSXM.js} +1 -1
  76. package/chunks/{ja-3B6V5KS7.js → ja-LV4RLM3M.js} +3 -3
  77. package/chunks/{keychain-token-storage-54BNK6VH.js → keychain-token-storage-KQK6MNOJ.js} +1 -1
  78. package/chunks/{ls-YWZU3FYL.js → ls-IZJ3CKZY.js} +1 -1
  79. package/chunks/{lsp-4CJDKEEC.js → lsp-NGLDRHZU.js} +1 -1
  80. package/chunks/matildaAgentContentGenerator-QQHPCFJ5.js +8 -0
  81. package/chunks/matildaContentGenerator-W7Z33ONU.js +8 -0
  82. package/chunks/{matildaOAuth2-WOY7ZS43.js → matildaOAuth2-7COTQQR2.js} +1 -1
  83. package/chunks/mcp-client-DXUNIEIB.js +3 -0
  84. package/chunks/monitor-4PFIGAGG.js +32 -0
  85. package/chunks/notebook-edit-MWJYAATJ.js +17 -0
  86. package/chunks/{openaiContentGenerator-MGASUFQL.js → openaiContentGenerator-NDVJL6QL.js} +1 -1
  87. package/chunks/{pt-KP2JCPUY.js → pt-5SQ4DGL7.js} +3 -3
  88. package/chunks/read-file-WPZKPXWA.js +3 -0
  89. package/chunks/ripGrep-7LZDZFTX.js +3 -0
  90. package/chunks/{ru-K7IQQKHC.js → ru-7K24S53N.js} +3 -3
  91. package/chunks/scheduler-DK2MVKXX.js +8 -0
  92. package/chunks/{send-message-OO2HAKCC.js → send-message-TCPX5UDU.js} +1 -1
  93. package/chunks/{serve-ZQX2WBLF.js → serve-GSZPJI2O.js} +59 -48
  94. package/chunks/shell-PRS47PDP.js +3 -0
  95. package/chunks/{skill-KDM3UUML.js → skill-ETQM5NI3.js} +1 -1
  96. package/chunks/src-UB7DZRYK.js +3 -0
  97. package/chunks/{symbol-search-ALYOX5JN.js → symbol-search-HARHZ5AH.js} +1 -1
  98. package/chunks/{syntheticOutput-UASKABJH.js → syntheticOutput-WZDPECYS.js} +1 -1
  99. package/chunks/task-create-XRNIDT4T.js +3 -0
  100. package/chunks/{task-detach-I67ZE5MX.js → task-detach-TBAVUOTC.js} +1 -1
  101. package/chunks/task-list-Z6BDZZID.js +9 -0
  102. package/chunks/{task-stop-ERI5X4AO.js → task-stop-HDSARSJ6.js} +1 -1
  103. package/chunks/{task-update-CD3W556L.js → task-update-MW2VT2XV.js} +1 -1
  104. package/chunks/{team-create-F4KQRGMB.js → team-create-VMYNLZCC.js} +1 -1
  105. package/chunks/team-delete-F7QDC2TE.js +8 -0
  106. package/chunks/todoWrite-SCF5M24M.js +3 -0
  107. package/chunks/{tool-search-JFCD5W5M.js → tool-search-WX6FOE35.js} +1 -1
  108. package/chunks/tree-sitter-bash-2SWKO5B7.js +3 -0
  109. package/chunks/{web-fetch-REWGIRWQ.js → web-fetch-CKYBHGLF.js} +13 -13
  110. package/chunks/{web-search-OX2DPEVN.js → web-search-67DFNS5V.js} +1 -1
  111. package/chunks/{workflow-SEFYGBED.js → workflow-WBSRQG3N.js} +2 -2
  112. package/chunks/write-file-S5FAX4JJ.js +15 -0
  113. package/cli.js +462 -455
  114. package/locales/ca.js +1 -3
  115. package/locales/de.js +1 -3
  116. package/locales/en.js +1 -3
  117. package/locales/fr.js +1 -3
  118. package/locales/ja.js +1 -3
  119. package/locales/pt.js +1 -3
  120. package/locales/ru.js +1 -3
  121. package/package.json +2 -2
  122. package/sandbox-macos-permissive-closed.sb +0 -1
  123. package/sandbox-macos-permissive-open.sb +0 -1
  124. package/sandbox-macos-permissive-proxied.sb +0 -1
  125. package/sandbox-macos-restrictive-closed.sb +3 -1
  126. package/sandbox-macos-restrictive-open.sb +3 -1
  127. package/sandbox-macos-restrictive-proxied.sb +3 -1
  128. package/bundled/mainy/docs/features/channels/dingtalk.md +0 -134
  129. package/bundled/mainy/docs/features/channels/feishu.md +0 -186
  130. package/bundled/mainy/docs/features/channels/weixin.md +0 -106
  131. package/chunks/agent-ZFZ4HJQC.js +0 -3
  132. package/chunks/agent-headless-KH2BKLP7.js +0 -3
  133. package/chunks/chunk-25NCTG5H.js +0 -184
  134. package/chunks/chunk-2HQMJ2IU.js +0 -8
  135. package/chunks/chunk-6GBNB5Z2.js +0 -3
  136. package/chunks/chunk-GHBKFIHC.js +0 -35
  137. package/chunks/chunk-HWOQNYAO.js +0 -27
  138. package/chunks/chunk-LJR4RZZ2.js +0 -3
  139. package/chunks/chunk-NVM7W7TG.js +0 -101
  140. package/chunks/chunk-PA6532AY.js +0 -6
  141. package/chunks/chunk-QFNFLE2I.js +0 -2625
  142. package/chunks/chunk-QN6WSWMM.js +0 -9
  143. package/chunks/chunk-RK2AKQAX.js +0 -39
  144. package/chunks/chunk-U347OO7S.js +0 -9
  145. package/chunks/chunk-UIRBHC5X.js +0 -3
  146. package/chunks/chunk-W5CGKUM4.js +0 -15
  147. package/chunks/chunk-WRQLIPXW.js +0 -113
  148. package/chunks/chunk-WVY2P6WH.js +0 -26
  149. package/chunks/chunk-WZ75OGYY.js +0 -14
  150. package/chunks/chunk-XCFLI3OC.js +0 -9
  151. package/chunks/chunk-XMZIY7XX.js +0 -13
  152. package/chunks/contextCommand-3GN5CAOK.js +0 -3
  153. package/chunks/dist-ME6647DQ.js +0 -195
  154. package/chunks/dist-VG3ZDJ2A.js +0 -28
  155. package/chunks/dist-YTCHM57U.js +0 -23
  156. package/chunks/edit-KX6V4PH3.js +0 -39
  157. package/chunks/exitPlanMode-G3QLIWJ4.js +0 -90
  158. package/chunks/geminiContentGenerator-EQEGOXOV.js +0 -8
  159. package/chunks/glob-KSBEWI3E.js +0 -22
  160. package/chunks/matildaAgentContentGenerator-OV4U6DJD.js +0 -8
  161. package/chunks/matildaContentGenerator-ETIAWE22.js +0 -8
  162. package/chunks/monitor-F4K5HOZX.js +0 -32
  163. package/chunks/notebook-edit-TL7CI5EA.js +0 -17
  164. package/chunks/read-file-6EAPS2KG.js +0 -3
  165. package/chunks/ripGrep-K6SFFUIE.js +0 -3
  166. package/chunks/scheduler-TKWPD4LP.js +0 -8
  167. package/chunks/shell-AZRK5GIO.js +0 -3
  168. package/chunks/src-SGI6VLOS.js +0 -3
  169. package/chunks/task-create-EBJD55TB.js +0 -3
  170. package/chunks/task-list-5BGX4G5N.js +0 -9
  171. package/chunks/team-delete-5U3GBFKJ.js +0 -8
  172. package/chunks/todoWrite-YGG6AZ3A.js +0 -3
  173. package/chunks/tree-sitter-bash-XNCMPQBK.js +0 -3
  174. package/chunks/write-file-UAGVBZMC.js +0 -15
@@ -289,88 +289,6 @@ export VLLM_API_KEY="not-needed"
289
289
  >
290
290
  > Each provider example includes an `env` field to illustrate how the API key should be configured.
291
291
 
292
- ### Overview
293
-
294
- | Model ID | Name | Description |
295
- | ------------------------- | ----------------------- | --------------------------------------------------------- |
296
- | `matilda3.5-plus` | matilda3.5-plus | Advanced model with thinking enabled |
297
- | `matilda3.6-plus` | matilda3.6-plus | Latest model with thinking enabled (Pro subscribers only) |
298
- | `matilda3.7-plus` | matilda3.7-plus | Advanced model with thinking enabled |
299
- | `matilda3-coder-plus` | matilda3-coder-plus | Optimized for coding tasks |
300
- | `matilda3-coder-next` | matilda3-coder-next | Experimental coding model |
301
- | `matilda3-max-2026-01-23` | matilda3-max-2026-01-23 | Latest max model with thinking enabled |
302
- | `glm-5` | glm-5 | GLM model with thinking enabled |
303
- | `glm-4.7` | glm-4.7 | GLM model with thinking enabled |
304
- | `kimi-k2.5` | kimi-k2.5 | Kimi model with thinking and vision/video support |
305
- | `MiniMax-M2.5` | MiniMax-M2.5 | MiniMax model with thinking enabled |
306
-
307
- ### Setup
308
-
309
- 2. Run the `/auth` command in Matilda Code
310
- 3. Select your region
311
- 4. Enter your API key when prompted
312
-
313
- The models will be automatically configured and added to your `/model` picker.
314
-
315
- ### Regions
316
-
317
- | Region | Endpoint | Description |
318
- | ------ | -------- | ----------- |
319
-
320
- The region is selected during authentication and stored in `settings.json` under the `modelProviders` configuration. To switch regions, re-run the `/auth` command and select a different region.
321
-
322
- ### API Key Storage
323
-
324
- > [!warning]
325
- >
326
- > **Security Recommendation**: For better security, it is recommended to move the API key from `settings.json` to a separate `.env` file and load it as an environment variable. For example:
327
- >
328
- > ```bash
329
- > # ~/.matilda/.env
330
- > ```
331
- >
332
- > Then ensure this file is added to your `.gitignore` if you're using project-level settings.
333
-
334
- ### Automatic Updates
335
-
336
- Coding Plan model configurations are versioned. When Matilda Code detects a newer version of the model template, you will be prompted to update. Accepting the update will:
337
-
338
- - Replace the existing Coding Plan model configurations with the latest versions
339
- - Preserve any custom model configurations you've added manually
340
- - Automatically switch to the first model in the updated configuration
341
-
342
- The update process ensures you always have access to the latest model configurations and features without manual intervention.
343
-
344
- ### Manual Configuration (Advanced)
345
-
346
- If you prefer to manually configure Coding Plan models, you can add them to your `settings.json` like any OpenAI-compatible provider:
347
-
348
- ```json
349
- {
350
- "modelProviders": {
351
- "openai": [
352
- {
353
- "id": "matilda3-coder-plus",
354
- "name": "matilda3-coder-plus",
355
- "envKey": "YOUR_CUSTOM_ENV_KEY"
356
- }
357
- ]
358
- }
359
- }
360
- ```
361
-
362
- > [!note]
363
- >
364
- > When using manual configuration:
365
- >
366
- > - You can use any environment variable name for `envKey`
367
- > - You do not need to configure `codingPlan.*`
368
- > - **Automatic updates will not apply** to manually configured Coding Plan models
369
-
370
- > [!warning]
371
- >
372
- > If you also use automatic Coding Plan configuration, automatic updates may overwrite your manual configurations if they use the same `envKey` and `baseUrl` as the automatic configuration. To avoid this, ensure your manual configuration uses a different `envKey` if possible.
373
-
374
292
  ## Resolution Layers and Atomicity
375
293
 
376
294
  The effective auth/model/credential values are chosen per field using the following precedence (first present wins). You can combine `--auth-type` with `--model` to point directly at a provider entry; these CLI flags run before other layers.
@@ -2,7 +2,7 @@
2
2
 
3
3
  > [!tip]
4
4
  >
5
- > **Authentication / API keys:** Authentication (API Key, Matilda Coding Plan) and auth-related environment variables (like `OPENAI_API_KEY`) are documented in **[Authentication](../configuration/auth)**.
5
+ > **Authentication / API keys:** Authentication (Matilda account, API token) and auth-related environment variables (like `OPENAI_API_KEY`) are documented in **[Authentication](../configuration/auth)**.
6
6
 
7
7
  > [!note]
8
8
  >
@@ -23,6 +23,34 @@ Configuration is applied in the following order of precedence (lower numbers are
23
23
  | 6 | Environment variables | System-wide or session-specific variables, potentially loaded from `.env` files |
24
24
  | 7 | Command-line arguments | Values passed when launching the CLI |
25
25
 
26
+ ## Organization usage
27
+
28
+ Pass `--organization-id <uuid>` to use an organization for this invocation's
29
+ Matilda Core Code requests. Without this option, requests keep their personal
30
+ scope. The selection is not saved to your settings or inferred from a previous
31
+ session. Pass it again when resuming a session that should use the organization.
32
+
33
+ The server checks your current membership, product access and applicable
34
+ allowance. Selecting an organization does not grant access or authorize wallet
35
+ spending. If the organization is unavailable, resolve the server error instead
36
+ of removing the option to silently change who pays.
37
+
38
+ The option requires the first-party Matilda Core Code endpoint. Third-party
39
+ providers, direct model endpoints and legacy routes reject it. Organization
40
+ and credit-spending headers cannot be supplied through `customHeaders`.
41
+
42
+ ## Optional Code credits
43
+
44
+ Pass `--code-credit-limit-minor 100` to allow up to 100 USD cents for each primary model generation when Core confirms that your included allowance is exhausted. The amount is per generation, not a conversation or session budget. Each tool follow-up may start another generation with the same cap. Core still enforces your account and organization limits.
45
+
46
+ The option is off by default and is never saved to settings. It requires the first-party Matilda Core Code endpoint and a Matilda OAuth session. Credit-enabled requests currently support text and tools with an output limit of at most 32,768 tokens; configured lower limits are preserved.
47
+
48
+ Code records request IDs and non-secret recovery metadata before sending an included or paid request when credit consent is enabled. This journal is retained even with chat recording disabled; prompts, tokens and spending capabilities are not written to it. An interrupted generation retains its original intent, and financial recovery does not recover missing output.
49
+
50
+ After a restart, inspect requests with `matilda credits list --session <session-id>` and use `matilda credits recover <intent-id> --session <session-id>` for the current financial state. Add `--json` for structured output. These commands require the original Matilda account and endpoint and cannot start a generation. Forks retain references to their original sessions rather than copying spending authority.
51
+
52
+ Resumed sessions require a new user prompt before model work; automatic retries, continuations and pending tool follow-ups cannot replay the old generation, even when the credit option is omitted. A new prompt uses only the new invocation's settings, so pass the credit cap again to authorize new paid work. Production availability also depends on the server's paid Code rollout.
53
+
26
54
  ## Settings files
27
55
 
28
56
  Matilda Code uses JSON settings files for persistent configuration. There are four locations for these files:
@@ -118,6 +146,7 @@ Settings are organized into categories. Most settings should be placed within th
118
146
  | `ui.showThinkingTrace` | boolean | Show the full reasoning trace in thinking blocks instead of the collapsed one-line summary. Toggle with `Ctrl+Q` during a session or via the Settings dialog. The setting persists across sessions. | `false` |
119
147
  | `ui.shellOutputMaxLines` | number | Max number of shell output lines shown inline. Set to `0` to disable the cap and show full output. Hidden lines are surfaced via the `+N lines` indicator. Errors, `!`-prefix user-initiated commands, confirming tools, and focused embedded shells always show full output. | `5` |
120
148
  | `ui.maxFps` | number | Cap on terminal render rate (frames per second). Higher values (e.g. `144`) reduce input-to-render latency on high-refresh displays at the cost of more CPU. Values `<= 0` are ignored (treated as the default). Requires restart. | `60` |
149
+ | `ui.maxHistoryItems` | number | Max number of messages kept in the on-screen history of a session; once exceeded, the oldest messages are dropped from view and a trim notice marks the cut. Set to `0` (or a negative value) for unlimited. Bounds memory use and per-message render cost on long sessions. The full transcript always remains on disk (see `/export`) and is unaffected. Only applies with fullscreen rendering (`ui.useTerminalBuffer`) enabled. | `2000` |
121
150
  | `ui.enableWelcomeBack` | boolean | Show welcome back dialog when returning to a project with conversation history. When enabled, Matilda Code will automatically detect if you're returning to a project with a previously generated project summary (`.matilda/PROJECT_SUMMARY.md`) and show a dialog allowing you to continue your previous conversation or start fresh. If you choose **Start new chat session**, that choice is remembered for the current project until the project summary changes. This feature integrates with the `/summary` command and quit confirmation dialog. | `true` |
122
151
  | `ui.accessibility.enableLoadingPhrases` | boolean | Enable loading phrases (disable for accessibility). | `true` |
123
152
  | `ui.accessibility.screenReader` | boolean | Enables screen reader mode, which adjusts the TUI for better compatibility with screen readers. | `false` |
@@ -149,8 +178,8 @@ Settings are organized into categories. Most settings should be placed within th
149
178
  | `model.maxWallTimeSeconds` | number | Wall-clock budget for headless / unattended runs, in seconds. `-1` means unlimited. Overridable per-invocation via `--max-wall-time`, which requires a positive duration (`90`, `30s`, `5m`, `1h`, `1.5h`); the minimum is 1 second — sub-second values (`500ms`, `0.5`) are rejected as typos. Omit the flag to fall back to this setting. Aborts with exit code 55 when exceeded. | `-1` |
150
179
  | `model.maxToolCalls` | number | Cumulative tool-call budget for a run (counts every executed tool, success or failure; `structured_output` under `--json-schema` is exempt). `-1` means unlimited; `0` means "no tool calls allowed". Capped at 1,000,000 to catch typos. Overridable via `--max-tool-calls`. Aborts with exit code 55 when exceeded. | `-1` |
151
180
  | `model.generationConfig` | object | Advanced overrides passed to the underlying content generator. Supports request controls such as `timeout`, `maxRetries`, `enableCacheControl`, `splitToolMedia` (default `true`; splits tool-returned media — including images read by the built-in read_file — into a follow-up user message instead of the spec-violating `role: "tool"` message, so strict OpenAI-compatible servers like doubao / new-api / LM Studio can see it; set `false` to restore the legacy embed-in-tool behavior), `contextWindowSize` (override model's context window size), `modalities` (override auto-detected input modalities), `customHeaders` (custom HTTP headers for API requests), and `extra_body` (additional body parameters for OpenAI-compatible API requests only), along with fine-tuning knobs under `samplingParams` (for example `temperature`, `top_p`, `max_tokens`). Leave unset to rely on provider defaults. | `undefined` |
152
- | `model.chatCompression.contextPercentageThreshold` | number | **REMOVED.** Auto-compaction now uses a three-tier threshold ladder (warn / auto / hard) computed internally from the model's context window via the `computeThresholds()` function — no longer user-configurable. Setting this field in `settings.json` is silently ignored (no startup warning). There is currently no replacement for "disable compression entirely" — reactive overflow recovery remains the safety net at the API layer if compression itself fails. (See PR #4345 / `docs/design/auto-compaction-threshold-redesign.md` for the redesign rationale.) | `N/A` |
153
- | `model.chatCompression.maxRecentFilesToRetain` | number | Number of most-recently-touched files whose current content is restored (embedded if small, otherwise referenced by path) into history after auto-compaction. `0` restores none. Env override: `MATILDA_COMPACT_MAX_RECENT_FILES`. | `5` |
181
+ | `model.chatCompression.contextPercentageThreshold` | number | **REMOVED.** Auto-compaction now uses a three-tier threshold ladder (warn / auto / hard) computed internally from the model's context window via the `computeThresholds()` function — no longer user-configurable. Setting this field in `settings.json` is silently ignored (no startup warning). There is currently no replacement for "disable compression entirely" — reactive overflow recovery remains the safety net at the API layer if compression itself fails. | `N/A` |
182
+ | `model.chatCompression.maxRecentFilesToRetain` | number | **REMOVED.** Compaction no longer restores file contents; it lists the files the session read and changed by path, and the model reads what it needs. Setting this field in `settings.json` or `MATILDA_COMPACT_MAX_RECENT_FILES` is silently ignored. | `N/A` |
154
183
  | `model.chatCompression.maxRecentImagesToRetain` | number | Number of most-recent images (tool screenshots / user pastes) restored into history after auto-compaction. `0` restores none. Env override: `MATILDA_COMPACT_MAX_RECENT_IMAGES`. | `3` |
155
184
  | `model.chatCompression.enableScreenshotTrigger` | boolean | When `true`, auto-compaction also fires once the number of tool-returned images accumulated in history reaches `screenshotTriggerThreshold`, independent of token usage — aimed at computer-use sessions where frequent screenshots dilute model attention. Counts only images returned inside tool results, not user-pasted images. Env override: `MATILDA_COMPACT_SCREENSHOT_TRIGGER` (`1`/`true`/`0`/`false`). | `true` |
156
185
  | `model.chatCompression.screenshotTriggerThreshold` | number | Tool-returned image count at or above which the screenshot trigger fires (only when `enableScreenshotTrigger`). Compaction resets the count — surviving images are re-embedded as top-level parts, which the trigger doesn't count — so it won't immediately re-fire. Env override: `MATILDA_COMPACT_SCREENSHOT_THRESHOLD`. | `50` |
@@ -442,7 +471,7 @@ LSP server configuration is done through `.lsp.json` files in your project root
442
471
 
443
472
  | Setting | Type | Description | Default |
444
473
  | ------------------------------ | ------- | ------------------------------------------------- | ----------- |
445
- | `security.folderTrust.enabled` | boolean | Setting to track whether Folder trust is enabled. | `false` |
474
+ | `security.folderTrust.enabled` | boolean | Setting to track whether Folder trust is enabled. | `true` |
446
475
  | `security.auth.selectedType` | string | The currently selected authentication type. | `undefined` |
447
476
  | `security.auth.enforcedType` | string | The required auth type (useful for enterprises). | `undefined` |
448
477
  | `security.auth.useExternal` | boolean | Whether to use an external authentication flow. | `undefined` |
@@ -453,7 +482,7 @@ LSP server configuration is done through `.lsp.json` files in your project root
453
482
  | ------------------------------ | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------ |
454
483
  | `advanced.autoConfigureMemory` | boolean | Automatically configure Node.js memory limits. | `false` |
455
484
  | `advanced.dnsResolutionOrder` | string | The DNS resolution order. | `undefined` |
456
- | `advanced.excludedEnvVars` | array of strings | Environment variables to exclude from project context. Specifies environment variables that should be excluded from being loaded from project `.env` files. This prevents project-specific environment variables (like `DEBUG=true`) from interfering with the CLI behavior. Variables from `.matilda/.env` files are never excluded. | `["DEBUG","DEBUG_MODE"]` |
485
+ | `advanced.excludedEnvVars` | array of strings | Environment variables to exclude from project `.env` files. Configurable exclusions do not apply to `.matilda/.env` files; bootstrap and policy variables remain protected across all project environment sources. | `["DEBUG","DEBUG_MODE"]` |
457
486
  | `advanced.bugCommand` | object | Configuration for the bug report command. Overrides the default URL for the `/bug` command. Properties: `urlTemplate` (string): A URL that can contain `{title}` and `{info}` placeholders. Example: `"bugCommand": { "urlTemplate": "https://bug.example.com/new?title={title}&info={info}" }` | `undefined` |
458
487
  | `plansDirectory` | string | Custom directory for approved Plan Mode files. Relative paths are resolved from the project root, and the resolved path must stay within the project root. If unset, plan files are stored in `~/.matilda/plans`. **Requires restart.** If the directory is inside the project root, add it to `.gitignore` to avoid committing plan files. | `undefined` |
459
488
 
@@ -466,6 +495,14 @@ How much a Goal may do on its own after you create it, or resume one whose budge
466
495
  | `goal.tokenBudget` | number | Tokens a Goal may spend on its own. `-1` means unlimited. | `30000000` |
467
496
  | `goal.turnBudget` | number | Goal turns that may finish before the Goal stops and asks. `-1` means unlimited. | `50` |
468
497
 
498
+ #### planGate
499
+
500
+ Settings for the plan approval gate that reviews plans before autonomous execution (leaving plan mode under an autonomous approval mode). Optional and advanced.
501
+
502
+ | Setting | Type | Description | Default |
503
+ | -------------------------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- |
504
+ | `planGate.systemOneTriage` | boolean | Screen plans with the System One evaluation endpoint (`matilda-jev`, `POST /api/systemone` on the session's Matilda Core origin) before the full gate review. An approve verdict skips the full review; an approve-with-comments verdict runs the review as advisory notes and approves; a reject verdict — or any evaluation failure — falls back to the full reviewer agent. Auth reuses the session credential: a signed-in Matilda account works as-is, while a raw `MATILDA_API_KEY` (`mc_live_…`) requires the `api:systemone` scope. Set `false` for the single-agent gate. | `true` |
505
+
469
506
  #### mcpServers
470
507
 
471
508
  Configures connections to one or more Model-Context Protocol (MCP) servers for discovering and using custom tools. Matilda Code attempts to connect to each configured MCP server to discover available tools. If multiple MCP servers expose a tool with the same name, the tool names will be prefixed with the server alias you defined in the configuration (e.g., `serverAlias__actualToolName`) to avoid conflicts. Note that the system might strip certain schema properties from MCP tool definitions for compatibility. At least one of `command`, `url`, or `httpUrl` must be provided. If multiple are specified, the order of precedence is `httpUrl`, then `url`, then `command`.
@@ -583,7 +620,9 @@ For authentication-related variables (like `OPENAI_*`) and the recommended `.mat
583
620
 
584
621
  > [!tip]
585
622
  >
586
- > **Environment Variable Exclusion:** Some environment variables (like `DEBUG` and `DEBUG_MODE`) are automatically excluded from project `.env` files by default to prevent interference with the CLI behavior. Variables from `.matilda/.env` files are never excluded. You can customize this behavior using the `advanced.excludedEnvVars`setting in your `settings.json` file.
623
+ > **Environment Variable Exclusion:** Some environment variables (like `DEBUG` and `DEBUG_MODE`) are automatically excluded from project `.env` files by default to prevent interference with the CLI behavior. The configurable exclusions do not apply to `.matilda/.env` files. Bootstrap and policy variables remain protected in all project environment sources. You can customize this behavior using the `advanced.excludedEnvVars`setting in your `settings.json` file.
624
+
625
+ Project `.env`, project `.matilda/.env` and workspace `settings.env` cannot configure sandbox startup, IDE helper connections, simple mode, interpreter startup, global state paths or workspace consent. Configure these inputs in the launch environment or user settings instead. User-level initial environment values are preserved; hot reload leaves bootstrap values fixed. Ordinary project provider and gateway variables continue to load in trusted workspaces.
587
626
 
588
627
  ### Environment Variables Table
589
628
 
@@ -601,7 +640,7 @@ For authentication-related variables (like `OPENAI_*`) and the recommended `.mat
601
640
  | `MATILDA_SANDBOX` | Alternative to the `sandbox` setting in `settings.json`. | Accepts `true`, `false`, `docker`, `podman`, or a custom command string. |
602
641
  | `MATILDA_SANDBOX_IMAGE` | Overrides sandbox image selection for Docker/Podman. | Takes precedence over `tools.sandboxImage`. |
603
642
  | `SEATBELT_PROFILE` | (macOS specific) Switches the Seatbelt (`sandbox-exec`) profile on macOS. | `permissive-open`: (Default) Restricts writes to the project folder (and a few other folders, see `packages/cli/src/utils/sandbox-macos-permissive-open.sb`) but allows other operations. `strict`: Uses a strict profile that declines operations by default. `<profile_name>`: Uses a custom profile. To define a custom profile, create a file named `sandbox-macos-<profile_name>.sb` in your project's `.matilda/` directory (e.g., `my-project/.matilda/sandbox-macos-custom.sb`). |
604
- | `DEBUG` or `DEBUG_MODE` | (often used by underlying libraries or the CLI itself) Set to `true` or `1` to enable verbose debug logging, which can be helpful for troubleshooting. | **Note:** These variables are automatically excluded from project `.env` files by default to prevent interference with the CLI behavior. Use `.matilda/.env` files if you need to set these for Matilda Code specifically. |
643
+ | `DEBUG` or `DEBUG_MODE` | (often used by underlying libraries or the CLI itself) Set to `true` or `1` to enable verbose debug logging, which can be helpful for troubleshooting. | **Note:** These variables are excluded from project environment sources. Set them in the launch environment or user-level `.matilda/.env` to configure Matilda Code. |
605
644
  | `NO_COLOR` | Set to any value to disable all color output in the CLI. | |
606
645
  | `FORCE_HYPERLINK` | Override the OSC 8 clickable-link detection in the markdown renderer. Set to `1` (or any non-zero value, or empty string) to force-enable, `0` to force-disable. Honors `NO_COLOR` / `MATILDA_DISABLE_HYPERLINKS` opt-outs above it. | Use this to opt into OSC 8 inside `tmux` / GNU `screen` (auto-detection refuses by default because the host terminal's capabilities are hidden behind the multiplexer). Requires `set -g allow-passthrough on` on tmux 3.3+. Also enables Hyper, which isn't auto-detected. |
607
646
  | `MATILDA_DISABLE_HYPERLINKS` | Set to `1` to hard-disable OSC 8 clickable hyperlinks in the markdown renderer even on terminals that auto-detect as capable. | Useful when a terminal advertises support but breaks on long URLs, or when piping output through an intermediary that mangles escape sequences. The renderer falls back to plain `label (url)` rendering. |
@@ -1,18 +1,18 @@
1
1
  # Trusted Folders
2
2
 
3
- The Trusted Folders feature is a security setting that gives you control over which projects can use the full capabilities of the Matilda Code. It prevents potentially malicious code from running by asking you to approve a folder before the CLI loads any project-specific configurations from it.
3
+ The Trusted Folders feature is a security setting that gives you control over which projects can use the full capabilities of the Matilda Code. It asks you to approve a folder before the CLI admits its workspace settings and project hooks.
4
4
 
5
- ## Enabling the Feature
5
+ ## Default Policy
6
6
 
7
- The Trusted Folders feature is **disabled by default**. To use it, you must first enable it in your settings.
7
+ Folder trust is **enabled by default** for interactive CLI sessions. An unknown folder uses the existing trust dialog before its workspace settings and project hooks are admitted.
8
8
 
9
- Add the following to your user `settings.json` file:
9
+ To disable folder trust explicitly, add the following to your user `settings.json` file:
10
10
 
11
11
  ```json
12
12
  {
13
13
  "security": {
14
14
  "folderTrust": {
15
- "enabled": true
15
+ "enabled": false
16
16
  }
17
17
  }
18
18
  }
@@ -28,13 +28,15 @@ Once the feature is enabled, the first time you run the Matilda Code from a fold
28
28
 
29
29
  Your choice is saved in a central file (`~/.matilda/trustedFolders.json`), so you will only be asked once per folder.
30
30
 
31
+ Explicit headless requests, including `-p` and piped input, retain implicit consent for unknown folders. Desktop uses its approved workspace and additional-directory manifest. These runtime decisions do not rewrite saved trust rules, and explicit rejections still apply. Generic ACP requests do not receive blanket consent.
32
+
31
33
  ## Why Trust Matters: The Impact of an Untrusted Workspace
32
34
 
33
35
  When a folder is **untrusted**, the Matilda Code runs in a restricted "safe mode" to protect you. In this mode, the following features are disabled:
34
36
 
35
37
  1. **Workspace Settings are Ignored**: The CLI will **not** load the `.matilda/settings.json` file from the project. This prevents the loading of custom tools and other potentially dangerous configurations.
36
38
 
37
- 2. **Environment Variables are Ignored**: The CLI will **not** load any `.env` files from the project.
39
+ 2. **Project Environment Files Need Trust**: Unknown and rejected folders do not load project `.env` files. User-level environment files remain available.
38
40
 
39
41
  3. **Extension Management is Restricted**: You **cannot install, update, or uninstall** extensions.
40
42
 
@@ -44,6 +46,8 @@ When a folder is **untrusted**, the Matilda Code runs in a restricted "safe mode
44
46
 
45
47
  Granting trust to a folder unlocks the full functionality of the Matilda Code for that workspace.
46
48
 
49
+ Even in trusted folders, project `.env`, `.matilda/.env` and workspace `settings.env` cannot change process bootstrap or policy variables, including `NODE_OPTIONS`, `NODE_PATH`, `BASH_ENV`, `LD_PRELOAD`, `PATH`, storage locations, trust-file locations and Desktop directory consent. Ordinary variables, including gateway `*_BASE_URL` values, remain available. User-level files keep their initial loading behavior.
50
+
47
51
  ## Managing Your Trust Settings
48
52
 
49
53
  If you need to change a decision or see all your settings, you have a couple of options:
@@ -59,3 +63,5 @@ For advanced users, it's helpful to know the exact order of operations for how t
59
63
  1. **IDE Trust Signal**: If you are using the [IDE Integration](../ide-integration/ide-integration), the CLI first asks the IDE if the workspace is trusted. The IDE's response takes highest priority.
60
64
 
61
65
  2. **Local Trust File**: If the IDE is not connected, the CLI checks the central `~/.matilda/trustedFolders.json` file.
66
+
67
+ 3. **Runtime Consent**: If no saved decision exists, explicit headless use or Desktop's approved-directory manifest can grant trust for that runtime. Other unknown folders remain unresolved until the interactive choice.
@@ -173,7 +173,7 @@ ask you for explicit approval rather than route around the denial.
173
173
 
174
174
  Classifier reasons are produced by the LLM and are not translated. If you
175
175
  want non-English reasons, add a hint like
176
- `Respond reasons in Chinese` to `permissions.autoMode.environment`.
176
+ `Respond reasons in Japanese` to `permissions.autoMode.environment`.
177
177
 
178
178
  ## Fallback to manual approval
179
179
 
@@ -1,8 +1,5 @@
1
1
  export default {
2
2
  overview: 'Overview',
3
3
  telegram: 'Telegram',
4
- weixin: 'WeChat',
5
- dingtalk: 'DingTalk',
6
- feishu: 'Feishu',
7
4
  plugins: 'Plugins',
8
5
  };
@@ -1,6 +1,6 @@
1
1
  # Channels
2
2
 
3
- Channels let you interact with a Matilda Code agent from messaging platforms like Telegram, WeChat, or DingTalk, instead of the terminal. You send messages from your phone or desktop chat app, and the agent responds just like it would in the CLI.
3
+ Channels let you interact with a Matilda Code agent from messaging platforms like Telegram, instead of the terminal. You send messages from your phone or desktop chat app, and the agent responds just like it would in the CLI.
4
4
 
5
5
  ## How It Works
6
6
 
@@ -15,7 +15,7 @@ All channels share one agent process with isolated sessions per user. Each chann
15
15
 
16
16
  ## Quick Start
17
17
 
18
- 1. Set up a bot on your messaging platform (see channel-specific guides: [Telegram](./telegram), [WeChat](./weixin), [DingTalk](./dingtalk))
18
+ 1. Set up a bot on your messaging platform (see the [Telegram](./telegram) guide)
19
19
  2. Add the channel configuration to `~/.matilda/settings.json`
20
20
  3. Run `matilda channel start` to start all channels, or `matilda channel start <name>` for a single channel
21
21
 
@@ -49,10 +49,10 @@ Channels are configured under the `channels` key in `settings.json`. Each channe
49
49
 
50
50
  | Option | Required | Description |
51
51
  | ------------------------ | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
52
- | `type` | Yes | Channel type: `telegram`, `weixin`, `dingtalk`, or a custom type from an extension (see [Plugins](./plugins)) |
53
- | `token` | Telegram | Bot token. Supports `$ENV_VAR` syntax to read from environment variables. Not needed for WeChat or DingTalk |
54
- | `clientId` | DingTalk | DingTalk AppKey. Supports `$ENV_VAR` syntax |
55
- | `clientSecret` | DingTalk | DingTalk AppSecret. Supports `$ENV_VAR` syntax |
52
+ | `type` | Yes | Channel type: `telegram`, or a custom type from an extension (see [Plugins](./plugins)) |
53
+ | `token` | Telegram | Bot token. Supports `$ENV_VAR` syntax to read from environment variables |
54
+ | `clientId` | No | Client ID, for extension channels that need one. Supports `$ENV_VAR` syntax |
55
+ | `clientSecret` | No | Client secret, for extension channels that need one. Supports `$ENV_VAR` syntax |
56
56
  | `model` | No | Model to use for this channel (e.g., `matilda3.5-plus`). Overrides the default model. Useful for multimodal models that support image input |
57
57
  | `senderPolicy` | No | Who can talk to the bot: `allowlist` (default), `open`, or `pairing` |
58
58
  | `allowedUsers` | No | List of user IDs allowed to use the bot (used by `allowlist` and `pairing` policies) |
@@ -215,14 +215,6 @@ Send a document (PDF, code file, text file, etc.) to the bot. The file is downlo
215
215
 
216
216
  Files work with any model — no multimodal support required.
217
217
 
218
- ### Platform differences
219
-
220
- | Feature | Telegram | WeChat | DingTalk |
221
- | -------- | -------------------------------------------- | -------------------------------- | --------------------------------------------- |
222
- | Images | Direct download via Bot API | CDN download with AES decryption | downloadCode API (two-step) |
223
- | Files | Direct download via Bot API (20MB limit) | CDN download with AES decryption | downloadCode API (two-step) |
224
- | Captions | Photo/file captions included as message text | Not applicable | Rich text: mixed text + images in one message |
225
-
226
218
  ## Dispatch Modes
227
219
 
228
220
  Controls what happens when you send a new message while the bot is still processing a previous one.
@@ -292,7 +284,7 @@ Channels support slash commands. These are handled locally (no agent round-trip)
292
284
 
293
285
  All other slash commands (e.g., `/compress`, `/summary`) are forwarded to the agent.
294
286
 
295
- These commands work on all channel types (Telegram, WeChat, DingTalk).
287
+ These commands work on all channel types.
296
288
 
297
289
  ## Running
298
290
 
@@ -314,7 +306,7 @@ The bot runs in the foreground. Press `Ctrl+C` to stop, or use `matilda channel
314
306
 
315
307
  ### Multi-Channel Mode
316
308
 
317
- When you run `matilda channel start` without a name, all channels defined in `settings.json` start together sharing a single agent process. Each channel maintains its own sessions — a Telegram user and a WeChat user get separate conversations, even though they share the same agent.
309
+ When you run `matilda channel start` without a name, all channels defined in `settings.json` start together sharing a single agent process. Each channel maintains its own sessions, so users on different channels get separate conversations, even though they share the same agent.
318
310
 
319
311
  Each channel uses its own `cwd` from its config, so different channels can work on different projects simultaneously.
320
312
 
@@ -59,11 +59,11 @@ Commands specifically for controlling interface and output language.
59
59
  | Command | Description | Usage Examples |
60
60
  | --------------------- | -------------------------------- | -------------------------- |
61
61
  | `/language` | View or change language settings | `/language` |
62
- | → `ui [language]` | Set UI interface language | `/language ui zh-CN` |
63
- | → `output [language]` | Set LLM output language | `/language output Chinese` |
62
+ | → `ui [language]` | Set UI interface language | `/language ui de-DE` |
63
+ | → `output [language]` | Set LLM output language | `/language output English` |
64
64
 
65
- - Available built-in UI languages: `zh-CN` (Simplified Chinese), `en-US` (English), `ru-RU` (Russian), `de-DE` (German), `ja-JP` (Japanese), `pt-BR` (Portuguese - Brazil), `fr-FR` (French), `ca-ES` (Catalan)
66
- - Output language examples: `Chinese`, `English`, `Japanese`, etc.
65
+ - Available built-in UI languages: `en-US` (English), `ru-RU` (Russian), `de-DE` (German), `ja-JP` (Japanese), `pt-BR` (Portuguese - Brazil), `fr-FR` (French), `ca-ES` (Catalan)
66
+ - Output language examples: `English`, `Japanese`, `German`, etc.
67
67
 
68
68
  ### 1.4 Tool and Model Management
69
69
 
@@ -51,12 +51,14 @@ Command hooks execute commands via child processes. Input JSON is passed through
51
51
  | `command` | `string` | Yes | Command to execute |
52
52
  | `name` | `string` | No | Hook name (for logging) |
53
53
  | `description` | `string` | No | Hook description |
54
- | `timeout` | `number` | No | Timeout in milliseconds, default 60000 |
54
+ | `timeout` | `number` | No | Timeout in seconds, default 60 |
55
55
  | `async` | `boolean` | No | Whether to run asynchronously in background |
56
56
  | `env` | `Record<string, string>` | No | Environment variables |
57
57
  | `shell` | `"bash" \| "powershell"` | No | Shell to use |
58
58
  | `statusMessage` | `string` | No | Status message displayed during execution |
59
59
 
60
+ `timeout` is in seconds for command, HTTP and prompt hooks, as in Claude Code; SDK-registered function hooks keep milliseconds. Earlier versions read command hook timeouts as milliseconds, so rewrite any such value in seconds, for example `10000` as `10`; otherwise it is read as 10000 seconds. A command hook `timeout` that is not a positive number, such as `"30s"`, is ignored and the 60 second default applies, and one longer than about 24.8 days, the longest a timer supports, is capped there.
61
+
60
62
  **Example:**
61
63
 
62
64
  ```json
@@ -70,7 +72,7 @@ Command hooks execute commands via child processes. Input JSON is passed through
70
72
  "type": "command",
71
73
  "command": "$MATILDA_PROJECT_DIR/.matilda/hooks/security-check.sh",
72
74
  "name": "security-check",
73
- "timeout": 10000
75
+ "timeout": 10
74
76
  }
75
77
  ]
76
78
  }
@@ -942,7 +944,7 @@ exit 0
942
944
  "type": "command",
943
945
  "command": "$HOME/.matilda/hooks/todo-validator.sh",
944
946
  "name": "todo-validator",
945
- "timeout": 5000
947
+ "timeout": 5
946
948
  }
947
949
  ]
948
950
  }
@@ -1036,7 +1038,7 @@ exit 0
1036
1038
  "type": "command",
1037
1039
  "command": "$HOME/.matilda/hooks/todo-completion-validator.sh",
1038
1040
  "name": "completion-validator",
1039
- "timeout": 5000
1041
+ "timeout": 5
1040
1042
  }
1041
1043
  ]
1042
1044
  }
@@ -1069,7 +1071,7 @@ Hooks are configured in Matilda Code settings, typically in `.matilda/settings.j
1069
1071
  "command": "/path/to/security-check.sh",
1070
1072
  "name": "security-check",
1071
1073
  "description": "Run security checks before tool execution",
1072
- "timeout": 30000
1074
+ "timeout": 30
1073
1075
  }
1074
1076
  ]
1075
1077
  }
@@ -1120,7 +1122,7 @@ Only `command` type supports asynchronous execution. Setting `"async": true` run
1120
1122
  "type": "command",
1121
1123
  "command": "$MATILDA_PROJECT_DIR/.matilda/hooks/run-tests-async.sh",
1122
1124
  "async": true,
1123
- "timeout": 300000
1125
+ "timeout": 300
1124
1126
  }
1125
1127
  ]
1126
1128
  }
@@ -1206,7 +1208,7 @@ Configure in `.matilda/settings.json`:
1206
1208
  "command": "${SECURITY_CHECK_SCRIPT}",
1207
1209
  "name": "security-checker",
1208
1210
  "description": "Security validation for bash commands",
1209
- "timeout": 10000
1211
+ "timeout": 10
1210
1212
  }
1211
1213
  ]
1212
1214
  }
@@ -21,7 +21,6 @@ This is the CLI’s UI localization layer (i18n/l10n): it controls the language
21
21
  Use the `/language ui` command:
22
22
 
23
23
  ```bash
24
- /language ui zh-CN # Chinese
25
24
  /language ui en-US # English
26
25
  /language ui ru-RU # Russian
27
26
  /language ui de-DE # German
@@ -34,7 +33,6 @@ Use the `/language ui` command:
34
33
  Aliases are also supported:
35
34
 
36
35
  ```bash
37
- /language ui zh # Chinese
38
36
  /language ui en # English
39
37
  /language ui ru # Russian
40
38
  /language ui de # German
@@ -67,7 +65,6 @@ The LLM output language is controlled by a rule file at `~/.matilda/output-langu
67
65
 
68
66
  On first startup, if no `output-language.md` file exists, Matilda Code automatically creates one based on your system locale. For example:
69
67
 
70
- - System locale `zh` creates a rule for Chinese responses
71
68
  - System locale `en` creates a rule for English responses
72
69
  - System locale `ru` creates a rule for Russian responses
73
70
  - System locale `de` creates a rule for German responses
@@ -81,13 +78,12 @@ On first startup, if no `output-language.md` file exists, Matilda Code automatic
81
78
  Use `/language output <language>` to change:
82
79
 
83
80
  ```bash
84
- /language output Chinese
85
81
  /language output English
86
82
  /language output Japanese
87
83
  /language output German
88
84
  ```
89
85
 
90
- Any language name works. The LLM will be instructed to respond in that language.
86
+ The LLM will be instructed to respond in that language.
91
87
 
92
88
  > [!note]
93
89
  >
@@ -110,7 +106,7 @@ Any language name works. The LLM will be instructed to respond in that language.
110
106
  ### Via Environment Variable
111
107
 
112
108
  ```bash
113
- export MATILDA_CODE_LANG=zh
109
+ export MATILDA_CODE_LANG=de
114
110
  ```
115
111
 
116
112
  This influences auto-detection on first startup (if you haven’t set a UI language and no `output-language.md` file exists yet).
@@ -129,29 +125,6 @@ User directory takes precedence over built-in translations.
129
125
  > Contributions are welcome! If you’d like to improve built-in translations or add new languages.
130
126
  > For a concrete example, see [PR #1238: feat(i18n): add Russian language support](https://github.com/MaincodeHQ/matilda-code/pull/1238).
131
127
 
132
- ### Maintaining `zh-TW` (Traditional Chinese for Taiwan)
133
-
134
- `zh-TW` is **not** an automatic OpenCC s2t conversion of `zh.js` — it is a hand-maintained Taiwan-vocabulary translation. When adding or updating keys, please follow the conventions below.
135
-
136
- The "CI enforced?" column indicates whether `npm run check-i18n` will fail the build on a violation. Rows marked **No** are style guidance enforced by review only — typically because the offending form has a legitimate non-UI meaning (`文件` can mean "document", `打開` is colloquially fine in Taiwan).
137
-
138
- | Avoid | Use instead | CI enforced? | Reason |
139
- | --------------------- | --------------------- | ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
140
- | 文件 (file) | 檔案 | No | Taiwan term for filesystem files (but `文件` can legitimately mean "document") |
141
- | 服務器 / 服务器 | 伺服器 | Yes | Taiwan term for "server" |
142
- | 菜單 / 菜单 | 選單 | Yes | Taiwan term for "menu" |
143
- | 鏈接 / 链接 | 連結 | Yes | Taiwan term for "link" (bare `鏈` is fine — e.g. 區塊鏈) |
144
- | 打開 | 開啟 | No | Taiwan-preferred verb for "open" (UI); `打開` is colloquially common |
145
- | 爲 / 啓 / 曆史 / 鏈接 | 為 / 啟 / 歷史 / 連結 | Yes | Variant Traditional forms from raw OpenCC s2t. Note: `曆` is context-dependent and correct in calendar terms (日曆, 農曆, 西曆); CI only flags the bigram `曆史`, not bare `曆`. |
146
-
147
- If you are not a Traditional Chinese speaker and need to bootstrap a value, **do not paste raw OpenCC `s2t` output**: the default s2t profile emits variant Traditional characters (e.g. 爲, 啓) that Taiwan does not use, and never rewrites Mainland-Chinese vocabulary (服務器, 菜單). Prefer `s2twp.json` (Simplified → Taiwan with phrase mapping) as a starting point and then ask a Taiwan-Chinese speaker to review.
148
-
149
- The `check-i18n` script (run in CI via `npm run check-i18n`) will fail the build if any of the CI-enforced substrings above end up in a `zh-TW` value. See `scripts/check-i18n.ts → ZH_TW_FORBIDDEN_PATTERNS` for the full list. If a translation legitimately needs to contain a CI-forbidden substring, add its key to `ZH_TW_ALLOWED_EXCEPTIONS` in the same file with a brief justification.
150
-
151
- > [!note]
152
- >
153
- > The check uses plain substring matching, which does not understand Chinese word boundaries. A bigram pattern can therefore false-positive across compound-word boundaries — for example, `區塊鏈接口` (= `區塊鏈` + `接口`) contains the substring `鏈接` even though neither word is incorrect. If you hit a surprising CI failure of this kind, add the translation key to `ZH_TW_ALLOWED_EXCEPTIONS` rather than removing the pattern.
154
-
155
128
  ### Language Pack Format
156
129
 
157
130
  ```javascript
@@ -328,8 +328,6 @@ The following items are intentionally not implemented in the current phase:
328
328
  - **Mid-session `enter_worktree` does NOT switch `process.cwd()` or `Config.targetDir`.** That tool uses the model-context-only convention (see [Sub-Agents](./sub-agents.md)). Only the startup `--worktree` flag actually switches the process working directory.
329
329
  - **Relative paths in other arg fields are resolved BEFORE the worktree chdir.** Path-taking flags (`--mcp-config`, `--openai-logging-dir`, `--json-file`, `--input-file`, `--telemetry-outfile`, `--include-directories`) are normalized to absolute paths against the launch cwd when `--worktree` is set. Other path-shaped argv fields not in this list still resolve against the worktree cwd — use absolute paths to be safe.
330
330
 
331
- Track the roadmap in `docs/design/worktree.md`.
332
-
333
331
  ## Troubleshooting
334
332
 
335
333
  **The Footer shows no worktree indicator even though I just created one.**
@@ -21,7 +21,7 @@ Get started with Matilda Code CLI in your repository in just a few minutes:
21
21
 
22
22
  ### 1. Get a Matilda API Key
23
23
 
24
- Obtain your API key from [Matilda-compatible](https://help.matilda.com/zh/model-studio/matilda-code) (Matilda's AI platform)
24
+ Get a Matilda API token from the [Matilda external API guide][Matilda external API].
25
25
 
26
26
  ### 2. Add it as a GitHub Secret
27
27
 
@@ -175,7 +175,7 @@ You can set the following secrets in your repository:
175
175
 
176
176
  | Name | Description | Required | When Required |
177
177
  | ----------------- | --------------------------------------------- | -------- | --------------------------------------------- |
178
- | `MATILDA_API_KEY` | Your Matilda API key from Matilda-compatible. | Yes | Required for all workflows that call Matilda. |
178
+ | `MATILDA_API_KEY` | Your Matilda API token. | Yes | Required for all workflows that call Matilda. |
179
179
  | `APP_PRIVATE_KEY` | Private key for your GitHub App (PEM format). | No | Using a custom GitHub App. |
180
180
 
181
181
  To add a secret:
@@ -234,7 +234,7 @@ Contributions are welcome! Check out the Matilda Code CLI **Contributing Guide**
234
234
 
235
235
  [secrets]: https://docs.github.com/en/actions/security-guides/using-secrets-in-github-actions
236
236
  [Matilda Code]: https://github.com/MaincodeHQ/matilda-code
237
- [Matilda-compatible]: https://matilda.maincode.help/welcome/external-api
237
+ [Matilda external API]: https://matilda.maincode.help/welcome/external-api
238
238
  [Matilda Code CLI]: https://github.com/MaincodeHQ/matilda-code-action/
239
239
  [variables]: https://docs.github.com/en/actions/how-tos/write-workflows/choose-what-workflows-do/use-variables#creating-configuration-variables-for-a-repository
240
240
  [GitHub CLI]: https://docs.github.com/en/github-cli/github-cli
@@ -185,8 +185,8 @@ Here are the most important commands for daily use:
185
185
  | `/clear` | Clear terminal screen content | `/clear` (shortcut: `Ctrl+L`) |
186
186
  | `/theme` | Change Matilda Code visual theme | `/theme` |
187
187
  | `/language` | View or change language settings | `/language` |
188
- | → `ui [language]` | Set UI interface language | `/language ui zh-CN` |
189
- | → `output [language]` | Set LLM output language | `/language output Chinese` |
188
+ | → `ui [language]` | Set UI interface language | `/language ui de-DE` |
189
+ | → `output [language]` | Set LLM output language | `/language output German` |
190
190
  | `/quit` | Exit Matilda Code immediately | `/quit` or `/exit` |
191
191
 
192
192
  See the [CLI reference](./features/commands) for a complete list of commands.