@mono-agent/agent-app 0.8.0 → 0.9.0

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 (186) hide show
  1. package/README.md +71 -22
  2. package/dist/account-home.d.ts +6 -0
  3. package/dist/account-home.d.ts.map +1 -0
  4. package/dist/account-home.js +9 -0
  5. package/dist/account-home.js.map +1 -0
  6. package/dist/app-config.d.ts +3 -1
  7. package/dist/app-config.d.ts.map +1 -1
  8. package/dist/app-config.js +8 -5
  9. package/dist/app-config.js.map +1 -1
  10. package/dist/app.d.ts +25 -0
  11. package/dist/app.d.ts.map +1 -1
  12. package/dist/app.js +237 -16
  13. package/dist/app.js.map +1 -1
  14. package/dist/background-environment.d.ts +16 -0
  15. package/dist/background-environment.d.ts.map +1 -0
  16. package/dist/background-environment.js +68 -0
  17. package/dist/background-environment.js.map +1 -0
  18. package/dist/background-runtime.d.ts +62 -0
  19. package/dist/background-runtime.d.ts.map +1 -0
  20. package/dist/background-runtime.js +1115 -0
  21. package/dist/background-runtime.js.map +1 -0
  22. package/dist/background-snapshot-key.d.ts +13 -0
  23. package/dist/background-snapshot-key.d.ts.map +1 -0
  24. package/dist/background-snapshot-key.js +194 -0
  25. package/dist/background-snapshot-key.js.map +1 -0
  26. package/dist/background-snapshot.d.ts +96 -0
  27. package/dist/background-snapshot.d.ts.map +1 -0
  28. package/dist/background-snapshot.js +450 -0
  29. package/dist/background-snapshot.js.map +1 -0
  30. package/dist/background-worker-lease.d.ts +39 -0
  31. package/dist/background-worker-lease.d.ts.map +1 -0
  32. package/dist/background-worker-lease.js +356 -0
  33. package/dist/background-worker-lease.js.map +1 -0
  34. package/dist/background.d.ts +74 -2
  35. package/dist/background.d.ts.map +1 -1
  36. package/dist/background.js +815 -73
  37. package/dist/background.js.map +1 -1
  38. package/dist/channel-plugins.d.ts +2 -0
  39. package/dist/channel-plugins.d.ts.map +1 -1
  40. package/dist/channel-plugins.js +8 -0
  41. package/dist/channel-plugins.js.map +1 -1
  42. package/dist/channels.d.ts +10 -0
  43. package/dist/channels.d.ts.map +1 -1
  44. package/dist/channels.js +71 -3
  45. package/dist/channels.js.map +1 -1
  46. package/dist/cli.d.ts +12 -2
  47. package/dist/cli.d.ts.map +1 -1
  48. package/dist/cli.js +341 -63
  49. package/dist/cli.js.map +1 -1
  50. package/dist/config-reference.d.ts.map +1 -1
  51. package/dist/config-reference.js +253 -0
  52. package/dist/config-reference.js.map +1 -1
  53. package/dist/configuration-proposal-tool.d.ts +7 -0
  54. package/dist/configuration-proposal-tool.d.ts.map +1 -1
  55. package/dist/configuration-proposal-tool.js +55 -6
  56. package/dist/configuration-proposal-tool.js.map +1 -1
  57. package/dist/configured-agent.d.ts +4 -0
  58. package/dist/configured-agent.d.ts.map +1 -1
  59. package/dist/configured-agent.js +15 -0
  60. package/dist/configured-agent.js.map +1 -1
  61. package/dist/continuation-command.d.ts +15 -0
  62. package/dist/continuation-command.d.ts.map +1 -0
  63. package/dist/continuation-command.js +170 -0
  64. package/dist/continuation-command.js.map +1 -0
  65. package/dist/continuation-config.d.ts +25 -0
  66. package/dist/continuation-config.d.ts.map +1 -0
  67. package/dist/continuation-config.js +236 -0
  68. package/dist/continuation-config.js.map +1 -0
  69. package/dist/continuation-service.d.ts +99 -0
  70. package/dist/continuation-service.d.ts.map +1 -0
  71. package/dist/continuation-service.js +1313 -0
  72. package/dist/continuation-service.js.map +1 -0
  73. package/dist/continuation-store.d.ts +104 -0
  74. package/dist/continuation-store.d.ts.map +1 -0
  75. package/dist/continuation-store.js +688 -0
  76. package/dist/continuation-store.js.map +1 -0
  77. package/dist/continuations.d.ts +167 -0
  78. package/dist/continuations.d.ts.map +1 -0
  79. package/dist/continuations.js +71 -0
  80. package/dist/continuations.js.map +1 -0
  81. package/dist/doctor.d.ts +2 -0
  82. package/dist/doctor.d.ts.map +1 -1
  83. package/dist/doctor.js +426 -27
  84. package/dist/doctor.js.map +1 -1
  85. package/dist/first-run-managed-memory.d.ts.map +1 -1
  86. package/dist/first-run-managed-memory.js +66 -3
  87. package/dist/first-run-managed-memory.js.map +1 -1
  88. package/dist/first-run-readiness.d.ts.map +1 -1
  89. package/dist/first-run-readiness.js +2 -31
  90. package/dist/first-run-readiness.js.map +1 -1
  91. package/dist/index.d.ts +9 -0
  92. package/dist/index.d.ts.map +1 -1
  93. package/dist/index.js +4 -0
  94. package/dist/index.js.map +1 -1
  95. package/dist/init.d.ts +7 -0
  96. package/dist/init.d.ts.map +1 -1
  97. package/dist/init.js +7 -2
  98. package/dist/init.js.map +1 -1
  99. package/dist/launchd.d.ts +16 -6
  100. package/dist/launchd.d.ts.map +1 -1
  101. package/dist/launchd.js +30 -15
  102. package/dist/launchd.js.map +1 -1
  103. package/dist/local-configuration.d.ts +61 -18
  104. package/dist/local-configuration.d.ts.map +1 -1
  105. package/dist/local-configuration.js +530 -145
  106. package/dist/local-configuration.js.map +1 -1
  107. package/dist/managed-runtime-packages.d.ts +9 -0
  108. package/dist/managed-runtime-packages.d.ts.map +1 -0
  109. package/dist/managed-runtime-packages.js +56 -0
  110. package/dist/managed-runtime-packages.js.map +1 -0
  111. package/dist/memory-embedding-service.d.ts +33 -0
  112. package/dist/memory-embedding-service.d.ts.map +1 -0
  113. package/dist/memory-embedding-service.js +207 -0
  114. package/dist/memory-embedding-service.js.map +1 -0
  115. package/dist/memory-recall.d.ts +5 -4
  116. package/dist/memory-recall.d.ts.map +1 -1
  117. package/dist/memory-recall.js +21 -8
  118. package/dist/memory-recall.js.map +1 -1
  119. package/dist/modules/catalog.d.ts.map +1 -1
  120. package/dist/modules/catalog.js +91 -9
  121. package/dist/modules/catalog.js.map +1 -1
  122. package/dist/notify-runtime.d.ts +26 -0
  123. package/dist/notify-runtime.d.ts.map +1 -0
  124. package/dist/notify-runtime.js +27 -0
  125. package/dist/notify-runtime.js.map +1 -0
  126. package/dist/notify-tool.d.ts +51 -0
  127. package/dist/notify-tool.d.ts.map +1 -0
  128. package/dist/notify-tool.js +182 -0
  129. package/dist/notify-tool.js.map +1 -0
  130. package/dist/proactive-notify.d.ts +2 -0
  131. package/dist/proactive-notify.d.ts.map +1 -1
  132. package/dist/proactive-notify.js +1 -0
  133. package/dist/proactive-notify.js.map +1 -1
  134. package/dist/process-incarnation.d.ts +23 -0
  135. package/dist/process-incarnation.d.ts.map +1 -0
  136. package/dist/process-incarnation.js +208 -0
  137. package/dist/process-incarnation.js.map +1 -0
  138. package/dist/project-skills.d.ts +1 -1
  139. package/dist/project-skills.js +6 -6
  140. package/dist/recipes/base.d.ts +15 -0
  141. package/dist/recipes/base.d.ts.map +1 -0
  142. package/dist/recipes/base.js +51 -0
  143. package/dist/recipes/base.js.map +1 -0
  144. package/dist/recipes/catalog.d.ts +4 -0
  145. package/dist/recipes/catalog.d.ts.map +1 -0
  146. package/dist/recipes/catalog.js +525 -0
  147. package/dist/recipes/catalog.js.map +1 -0
  148. package/dist/recipes/index.d.ts +11 -0
  149. package/dist/recipes/index.d.ts.map +1 -0
  150. package/dist/recipes/index.js +14 -0
  151. package/dist/recipes/index.js.map +1 -0
  152. package/dist/recipes/types.d.ts +70 -0
  153. package/dist/recipes/types.d.ts.map +1 -0
  154. package/dist/recipes/types.js +15 -0
  155. package/dist/recipes/types.js.map +1 -0
  156. package/dist/sandbox-manager.d.ts +17 -0
  157. package/dist/sandbox-manager.d.ts.map +1 -1
  158. package/dist/sandbox-manager.js +673 -127
  159. package/dist/sandbox-manager.js.map +1 -1
  160. package/dist/setup.d.ts +29 -0
  161. package/dist/setup.d.ts.map +1 -0
  162. package/dist/setup.js +97 -0
  163. package/dist/setup.js.map +1 -0
  164. package/dist/supermemory-plugin.d.ts +5 -3
  165. package/dist/supermemory-plugin.d.ts.map +1 -1
  166. package/dist/supermemory-plugin.js +11 -5
  167. package/dist/supermemory-plugin.js.map +1 -1
  168. package/dist/tui-command.d.ts +43 -2
  169. package/dist/tui-command.d.ts.map +1 -1
  170. package/dist/tui-command.js +261 -27
  171. package/dist/tui-command.js.map +1 -1
  172. package/dist/wizard/answers.d.ts +4 -4
  173. package/dist/wizard/answers.d.ts.map +1 -1
  174. package/dist/wizard/answers.js +4 -21
  175. package/dist/wizard/answers.js.map +1 -1
  176. package/dist/wizard/run.d.ts.map +1 -1
  177. package/dist/wizard/run.js +162 -5
  178. package/dist/wizard/run.js.map +1 -1
  179. package/package.json +15 -15
  180. package/schema/mono-agent.config.schema.json +206 -3
  181. package/skills/mono-agent-composer/SKILL.md +4 -4
  182. package/skills/mono-agent-composer/references/config-blueprint.md +6 -6
  183. package/skills/mono-agent-composer/references/discovery-questions.md +25 -10
  184. package/skills/mono-agent-composer/references/feature-coverage.md +7 -7
  185. package/skills/mono-agent-composer/references/package-map.md +1 -1
  186. package/skills/mono-agent-composer/references/validation.md +2 -2
@@ -402,13 +402,14 @@
402
402
  "additionalProperties": false,
403
403
  "properties": {
404
404
  "provider": {
405
- "description": "Configures embeddings.provider for the memory section.",
405
+ "description": "Embedding service used by Journal/BuJo memory: ollama, lmstudio, or openai.",
406
406
  "examples": [
407
407
  "ollama"
408
408
  ],
409
409
  "type": "string",
410
410
  "enum": [
411
411
  "ollama",
412
+ "lmstudio",
412
413
  "openai"
413
414
  ]
414
415
  },
@@ -420,7 +421,7 @@
420
421
  "type": "string"
421
422
  },
422
423
  "endpoint": {
423
- "description": "Configures embeddings.endpoint for the memory section.",
424
+ "description": "Provider service root. LM Studio uses <root>/v1/embeddings and defaults to http://localhost:1234.",
424
425
  "examples": [
425
426
  "example"
426
427
  ],
@@ -434,7 +435,7 @@
434
435
  "type": "string"
435
436
  },
436
437
  "apiKeyEnv": {
437
- "description": "Secret value for memory.embeddings.apiKeyEnv; prefer the env override.",
438
+ "description": "Environment-variable name containing an optional provider bearer token; an explicitly declared name must resolve before memory starts.",
438
439
  "examples": [
439
440
  "example"
440
441
  ],
@@ -798,6 +799,18 @@
798
799
  "default": [],
799
800
  "uniqueItems": true
800
801
  },
802
+ "continuationServers": {
803
+ "description": "Configures continuationServers for the tools section.",
804
+ "examples": [
805
+ [
806
+ "example"
807
+ ]
808
+ ],
809
+ "type": "array",
810
+ "items": {
811
+ "type": "string"
812
+ }
813
+ },
801
814
  "mcpCallTimeoutMs": {
802
815
  "description": "Configures mcpCallTimeoutMs for the tools section.",
803
816
  "examples": [
@@ -1172,6 +1185,196 @@
1172
1185
  }
1173
1186
  }
1174
1187
  },
1188
+ "continuations": {
1189
+ "type": "object",
1190
+ "additionalProperties": false,
1191
+ "properties": {
1192
+ "enabled": {
1193
+ "type": "boolean",
1194
+ "default": true,
1195
+ "description": "Enable the durable continuation service when continuation functionality is configured."
1196
+ },
1197
+ "host": {
1198
+ "type": "string",
1199
+ "enum": [
1200
+ "127.0.0.1",
1201
+ "::1",
1202
+ "localhost"
1203
+ ],
1204
+ "default": "127.0.0.1",
1205
+ "description": "Loopback-only continuation service host."
1206
+ },
1207
+ "port": {
1208
+ "type": "integer",
1209
+ "minimum": 1,
1210
+ "maximum": 65535,
1211
+ "default": 4319,
1212
+ "description": "Fixed continuation service port; 0 is intentionally invalid."
1213
+ },
1214
+ "stateDir": {
1215
+ "type": "string",
1216
+ "minLength": 1,
1217
+ "default": ".mono-agent/continuations",
1218
+ "description": "Owner-only durable continuation state directory."
1219
+ },
1220
+ "namedRoutes": {
1221
+ "type": "object",
1222
+ "default": {},
1223
+ "propertyNames": {
1224
+ "minLength": 1,
1225
+ "maxLength": 128
1226
+ },
1227
+ "additionalProperties": {
1228
+ "oneOf": [
1229
+ {
1230
+ "type": "object",
1231
+ "additionalProperties": false,
1232
+ "required": [
1233
+ "mode",
1234
+ "conversationId"
1235
+ ],
1236
+ "properties": {
1237
+ "mode": {
1238
+ "const": "notify_if_actionable"
1239
+ },
1240
+ "conversationId": {
1241
+ "type": "string",
1242
+ "minLength": 1
1243
+ }
1244
+ }
1245
+ },
1246
+ {
1247
+ "type": "object",
1248
+ "additionalProperties": false,
1249
+ "required": [
1250
+ "mode",
1251
+ "conversationId"
1252
+ ],
1253
+ "properties": {
1254
+ "mode": {
1255
+ "const": "capture"
1256
+ },
1257
+ "conversationId": {
1258
+ "type": "string",
1259
+ "minLength": 1
1260
+ }
1261
+ }
1262
+ },
1263
+ {
1264
+ "type": "object",
1265
+ "additionalProperties": false,
1266
+ "required": [
1267
+ "mode"
1268
+ ],
1269
+ "properties": {
1270
+ "mode": {
1271
+ "const": "silent"
1272
+ }
1273
+ }
1274
+ }
1275
+ ]
1276
+ }
1277
+ },
1278
+ "detachedServices": {
1279
+ "type": "array",
1280
+ "default": [],
1281
+ "uniqueItems": true,
1282
+ "items": {
1283
+ "type": "object",
1284
+ "additionalProperties": false,
1285
+ "required": [
1286
+ "name",
1287
+ "tokenEnv"
1288
+ ],
1289
+ "properties": {
1290
+ "name": {
1291
+ "type": "string",
1292
+ "minLength": 1,
1293
+ "maxLength": 128
1294
+ },
1295
+ "tokenEnv": {
1296
+ "type": "string",
1297
+ "pattern": "^[A-Z_][A-Z0-9_]*$"
1298
+ }
1299
+ }
1300
+ }
1301
+ },
1302
+ "limits": {
1303
+ "type": "object",
1304
+ "additionalProperties": false,
1305
+ "default": {},
1306
+ "properties": {
1307
+ "maxActiveRecords": {
1308
+ "type": "integer",
1309
+ "minimum": 1,
1310
+ "maximum": 1000000,
1311
+ "default": 10000
1312
+ },
1313
+ "maxActivePerOrigin": {
1314
+ "type": "integer",
1315
+ "minimum": 1,
1316
+ "maximum": 1000000,
1317
+ "default": 500
1318
+ },
1319
+ "maxConcurrent": {
1320
+ "type": "integer",
1321
+ "minimum": 1,
1322
+ "maximum": 256,
1323
+ "default": 16
1324
+ },
1325
+ "synthesisTimeoutMs": {
1326
+ "type": "integer",
1327
+ "minimum": 1,
1328
+ "maximum": 86400000,
1329
+ "default": 600000
1330
+ },
1331
+ "deliveryTimeoutMs": {
1332
+ "type": "integer",
1333
+ "minimum": 1,
1334
+ "maximum": 86400000,
1335
+ "default": 120000
1336
+ },
1337
+ "operatorPageSize": {
1338
+ "type": "integer",
1339
+ "minimum": 1,
1340
+ "maximum": 500,
1341
+ "default": 100
1342
+ }
1343
+ }
1344
+ },
1345
+ "retention": {
1346
+ "type": "object",
1347
+ "additionalProperties": false,
1348
+ "default": {},
1349
+ "properties": {
1350
+ "terminalMaxRecords": {
1351
+ "type": "integer",
1352
+ "minimum": 0,
1353
+ "maximum": 9007199254740991,
1354
+ "default": 50000
1355
+ },
1356
+ "terminalMaxAgeMs": {
1357
+ "type": "integer",
1358
+ "minimum": 0,
1359
+ "maximum": 9007199254740991,
1360
+ "default": 31536000000
1361
+ },
1362
+ "capturedTextMaxRecords": {
1363
+ "type": "integer",
1364
+ "minimum": 0,
1365
+ "maximum": 9007199254740991,
1366
+ "default": 1000
1367
+ },
1368
+ "capturedTextMaxAgeMs": {
1369
+ "type": "integer",
1370
+ "minimum": 0,
1371
+ "maximum": 9007199254740991,
1372
+ "default": 2592000000
1373
+ }
1374
+ }
1375
+ }
1376
+ }
1377
+ },
1175
1378
  "channels": {
1176
1379
  "type": "object",
1177
1380
  "additionalProperties": false,
@@ -33,7 +33,7 @@ Do **not** read or grep the `@mono-agent` TypeScript/package source — `package
33
33
  - The deliverable is a folder that works: `mono-agent.config.json` + `IDENTITY.md` (+ optional `skills/`, `mcp.json`), validated and started — not a tutorial.
34
34
  - Start by discovering the intended agent product, not by naming packages.
35
35
  - Ask one question at a time; skip anything the user already answered.
36
- - Respect existing knowledge: if the folder has `AGENTS.md`, `CLAUDE.md`, `README.md`, or an existing `IDENTITY.md`, reference it from the identity instead of replacing it. Never overwrite existing files.
36
+ - Respect existing knowledge: if the folder has `AGENTS.md`, `CLAUDE.md`, `README.md`, or `SOUL.md`, reference it from the identity instead of copying it. `IDENTITY.md` → `## Role` is the single canonical guided-init Role location. Never overwrite an existing identity; say explicitly that a newly entered Role was not written and tell the user to add or edit that heading manually.
37
37
  - Fail closed: no allowed tools, no memory writes, loopback-only network until the user opts in.
38
38
  - Do not fake runtime success, silently broaden tool access, or hide provider/MCP failures. Backup models are configured failover (`runtime.fallbackModels`), never silent substitution.
39
39
  - Secrets stay in env vars or the untracked config file; never commit tokens or `.env*` files.
@@ -67,8 +67,8 @@ Everything below runs in the user's agent folder, not the workspace.
67
67
  mono-agent init --model <ref> [--fallback-models <csv>] [--effort <level>] [--auth] [--memory lite|journal|bujo] # bare scaffold
68
68
  ```
69
69
 
70
- Either writes a `mono-agent.config.json` (with `tools.allowedTools` pre-filled from the selected capabilities' recommended tools), an `IDENTITY.md` that references any knowledge files already present, the managed project-local `mono-agent-configure` and `mono-agent-memory` skills, and `.mono-agent/` working directories (presets also emit a `.env.example` and any extra files). `--effort` writes `runtime.effort` on supporting providers (do not use it with direct `opencode:*` SDK 1.x); `--auth` opts in to provider setup before writing files; `--dry-run` previews without writing or launching auth/preflight commands. Existing scaffold/config files are never overwritten; reviewed secret setup is the deliberate exception that can transactionally replace `.env` and update `.gitignore`.
71
- 3. **Configure.** Edit `mono-agent.config.json` to match the discovery answers. Preserve the generated `mono-agent-configure` and `mono-agent-memory` selections when appending other skills, and do not auto-select this full authoring-oriented composer inside the generated agent. Read `references/config-blueprint.md` for the full annotated config shape: every channel section, skills, MCP, memory, sandbox, and fallback models. Run `mono-agent config` to see the resolved configuration field-by-field with each value tagged `env` / `json` / `default` — the fastest way to confirm a value came from where you intended.
70
+ Either writes a `mono-agent.config.json` (with `tools.allowedTools` pre-filled from the selected capabilities' recommended tools), an `IDENTITY.md` whose `## Role` body is the one Role destination and which references any knowledge files already present, the managed project-local `mono-agent-configure` and `mono-agent-memory` skills, and `.mono-agent/` working directories (presets also emit a `.env.example` and any extra files). `--effort` writes `runtime.effort` on supporting providers (do not use it with direct `opencode:*` SDK 1.x); `--auth` opts in to provider setup before writing files; `--dry-run` previews without writing or launching auth/preflight commands. Existing scaffold/config files are never overwritten; reviewed secret setup is the deliberate exception that can transactionally replace `.env` and update `.gitignore`.
71
+ 3. **Configure.** Edit `mono-agent.config.json` to match the discovery answers. For a newly created identity, put the agreed text under `IDENTITY.md` → `## Role`; if it existed before init, preserve it and report that the new answer was not stored. Preserve the generated `mono-agent-configure` and `mono-agent-memory` selections when appending other skills, and do not auto-select this full authoring-oriented composer inside the generated agent. Read `references/config-blueprint.md` for the full annotated config shape: every channel section, skills, MCP, memory, sandbox, and fallback models. Run `mono-agent config` to see the resolved configuration field-by-field with each value tagged `env` / `json` / `default` — the fastest way to confirm a value came from where you intended.
72
72
  4. **Validate.**
73
73
 
74
74
  ```bash
@@ -82,7 +82,7 @@ Everything below runs in the user's agent folder, not the workspace.
82
82
  mono-agent start
83
83
  ```
84
84
 
85
- Then run the acceptance smoke test matching the chosen channel (see `references/validation.md`). To change anything, edit `mono-agent.config.json` directly and run `mono-agent restart`; there is no live browser re-apply.
85
+ Then run the acceptance smoke test matching the chosen channel (see `references/validation.md`). To change anything, edit `mono-agent.config.json` or `IDENTITY.md` directly and run `mono-agent restart`; there is no live browser re-apply. On macOS, `mono-agent tui --configure` can open a temporary proposal-only configuration conversation against the already-running background agent. It is separate from ordinary chat, never accepts secrets, requires an out-of-band approval, and restarts or rolls back through the managed lifecycle. Off macOS, use manual edits plus `validate`, foreground `start`, and ordinary `tui`; conversational configuration is unavailable.
86
86
 
87
87
  ## When Config Is Not Enough
88
88
 
@@ -12,7 +12,7 @@ One `mono-agent.config.json` declares the whole agent. Paths are relative to the
12
12
  ```text
13
13
  my-agent/
14
14
  mono-agent.config.json # the single declaration below
15
- IDENTITY.md # role, boundaries, references to existing knowledge
15
+ IDENTITY.md # canonical ## Role body, boundaries, references to existing knowledge
16
16
  skills/ # optional: <skill-name>/SKILL.md per selected skill
17
17
  cron/ # optional: <job-id>.md scheduled prompts
18
18
  mcp.json # optional: MCP server definitions
@@ -85,10 +85,10 @@ my-agent/
85
85
  "writeMode": "capture", // disabled | append-host-summary | capture (bujo only)
86
86
  "maxBytes": 64000,
87
87
  "embeddings": { // required for journal and bujo
88
- "provider": "ollama", // ollama | openai
88
+ "provider": "ollama", // ollama | lmstudio | openai; exclusive, no fallback
89
89
  "model": "nomic-embed-text:v1.5", // use exact :v1.5 tag (pull first with ollama pull)
90
- "endpoint": "http://localhost:11434",
91
- "apiKeyEnv": "OPENAI_API_KEY", // or inline "apiKey"; required for openai
90
+ "endpoint": "http://localhost:11434", // service root; LM Studio default http://localhost:1234
91
+ // "apiKeyEnv": "LM_STUDIO_API_KEY", // optional authenticated LM Studio; required for openai
92
92
  "dim": 768 // nomic-embed-text:v1.5 output dimension
93
93
  },
94
94
  "llm": { // enables bujo capture and the effective bujo tier; omit for lite/journal
@@ -292,9 +292,9 @@ mono-agent restart --force # restart AND purge persisted pi sessions (fresh sta
292
292
 
293
293
  A `.env` file in the folder is loaded automatically (exported shell variables win); use `--env-file <path>` for an alternate file. `validate --consumer <path>` loads the consumer folder's `.env` by default and resolves relative `--config` / `--env-file` paths there. `start` prints the traceability source (Phoenix when an `observability.exporters` Phoenix entry is configured, otherwise the local JSONL artifacts) and one status line per channel: `running` with its endpoint facts, `waiting_for_config` with the exact missing setting, `disabled`, or `failed` with the reason. Config is JSON-first: edit `mono-agent.config.json` directly (agents can edit it) and run `mono-agent restart` to apply — there is no live browser re-apply.
294
294
 
295
- For BuJo capture and the effective `bujo` tier that runs scheduled consolidation, configure `memory.llm`. Use `provider: "ollama"` with a local Ollama chat model string and optional `endpoint`, or `provider: "agent-host"` with `model` as a normal SDK runtime model reference such as `pi:openai-codex:gpt-5.5` and `executionMode: "sdk"`. `endpoint` is Ollama-only, and CLI-backed refs such as `codex:gpt-5.5` are rejected for memory LLMs until runtimes can enforce no external actions. The same values can be supplied via `MONO_AGENT_MEMORY_LLM_PROVIDER`, `MONO_AGENT_MEMORY_LLM_MODEL`, `MONO_AGENT_MEMORY_LLM_EXECUTION_MODE`, and `MONO_AGENT_MEMORY_LLM_ENDPOINT`. The standalone `memory-bujo` maintenance CLI remains Ollama-only; `agent-host` LLM capture is an in-app composition path that injects the `LlmComplete` implementation into the BuJo store.
295
+ For BuJo capture and the effective `bujo` tier that runs scheduled consolidation, configure `memory.llm`. Use `provider: "ollama"` with a local Ollama chat model string and optional `endpoint`, or `provider: "agent-host"` with `model` as a normal SDK runtime model reference such as `pi:openai-codex:gpt-5.5` and `executionMode: "sdk"`. `endpoint` is Ollama-only, and CLI-backed refs such as `codex:gpt-5.5` are rejected for memory LLMs until runtimes can enforce no external actions. The same values can be supplied via `MONO_AGENT_MEMORY_LLM_PROVIDER`, `MONO_AGENT_MEMORY_LLM_MODEL`, `MONO_AGENT_MEMORY_LLM_EXECUTION_MODE`, and `MONO_AGENT_MEMORY_LLM_ENDPOINT`. The standalone `memory-bujo migrate` command remains Ollama-only; other maintenance commands use the configured embeddings provider. `agent-host` LLM capture is an in-app composition path that injects the `LlmComplete` implementation into the BuJo store.
296
296
 
297
- For operator views, run `mono-agent tui` or `mono-agent web` from any directory once the agent is started. Both discover running agents via the trace-source registry. The TUI chats over the default-on `tui` stream endpoint (`"tui": {"enabled": false}` opts out); the web PWA reads artifacts and live updates from the default-on `live` relay (`"live": {"enabled": false}` opts out). Web history/live views show agent runs by default; add `mono-agent web --include-memory` to inspect memory-maintenance runs. Both bind loopback by default. The low-level `mono-agent-tui` bin also supports `--responder <file>` (embedded, an ESM module default-exporting an `AgentResponderLike` or exporting `createResponder(env, cwd, configJson)`) and `--url <baseUrl>` (direct connect).
297
+ For operator views, run `mono-agent tui` or `mono-agent web` from any directory once the agent is started. Both discover running agents via the trace-source registry. The TUI chats over the default-on `tui` stream endpoint (`"tui": {"enabled": false}` opts out); on macOS, `mono-agent tui --configure` opens a separate temporary proposal-only conversation against the managed background agent and must not be combined with `--local`. The web PWA reads artifacts and live updates from the default-on `live` relay (`"live": {"enabled": false}` opts out). Web history/live views show agent runs by default; add `mono-agent web --include-memory` to inspect memory-maintenance runs. Both bind loopback by default. The low-level `mono-agent-tui` bin also supports `--responder <file>` (embedded, an ESM module default-exporting an `AgentResponderLike` or exporting `createResponder(env, cwd, configJson)`) and `--url <baseUrl>` (direct connect).
298
298
 
299
299
  ## Programmatic Escape Hatch
300
300
 
@@ -43,10 +43,10 @@ Fills one config section per choice: built-in channels use `webhook`, `openaiApi
43
43
  Question:
44
44
 
45
45
  ```text
46
- What is this agent's role, and does this folder already contain knowledge it must respect?
46
+ What exact text belongs in IDENTITY.md → ## Role, and does this folder already contain knowledge it must respect?
47
47
  ```
48
48
 
49
- Fills: `context.identityPath` (default `./IDENTITY.md`), optional `context.soulPath`, `runtime.workspace`. `mono-agent init` detects `AGENTS.md`, `CLAUDE.md`, `README.md`, and `SOUL.md` and references them from the generated identity — keep those references rather than copying content.
49
+ Fills: the `## Role` body in the one canonical identity file, `context.identityPath` (default `./IDENTITY.md`), optional `context.soulPath`, and `runtime.workspace`. `mono-agent init` detects `AGENTS.md`, `CLAUDE.md`, `README.md`, and `SOUL.md` and references them from a generated identity — keep those references rather than copying content. If `IDENTITY.md` already exists, preserve it unchanged, say the newly entered Role was not written, and tell the user to add or edit its `## Role` heading manually. Do not assume the heading already exists or store the unused answer elsewhere.
50
50
 
51
51
  ## 4. Skills
52
52
 
@@ -113,11 +113,17 @@ No prerequisites. No Ollama. SQLite is bundled.
113
113
 
114
114
  **Tier 3 — journal (embeddings required):**
115
115
 
116
- - Ask: which embeddings provider/model?
117
- - Ollama default: `provider: "ollama"`, model `nomic-embed-text:v1.5`, dim `768`
118
- (use the exact `:v1.5` tag; pull first with `ollama pull nomic-embed-text:v1.5`).
119
- - OpenAI option: `provider: "openai"`, model `text-embedding-3-small`, API key via
120
- `apiKeyEnv`, dim matching the model.
116
+ - Guided init asks for Ollama or LM Studio, service root, exact model, actual dimension,
117
+ and optional auth-env name. Treat this as separate from runtime chat-model discovery.
118
+ - Ollama default root `http://localhost:11434`: enumerate `/api/tags`, retain only
119
+ `/api/show` capabilities containing `embedding`, then prove `/api/embed`.
120
+ - LM Studio default root `http://localhost:1234`: retain exact `type: "embedding"`
121
+ entries from `/api/v1/models`, use their `key`, then prove `/v1/embeddings`.
122
+ - Hand-authored OpenAI remains supported but is not a guided local-memory choice.
123
+ - If typed discovery is inconclusive, ask for exact model + positive dimension, while
124
+ explaining that real readiness still must pass. Never substitute another provider.
125
+ - LM Studio is keyless when `apiKeyEnv` is omitted. If named, the variable must already
126
+ contain the token in the owner-only agent environment; missing declared auth is `waiting`.
121
127
 
122
128
  Write:
123
129
 
@@ -129,13 +135,16 @@ Write:
129
135
  "embeddings": {
130
136
  "provider": "ollama",
131
137
  "model": "nomic-embed-text:v1.5",
138
+ "endpoint": "http://localhost:11434",
132
139
  "dim": 768
133
140
  }
134
141
  }
135
142
  ```
136
143
 
137
- After writing, remind the user to run `mono-agent validate` (checks root writability and
138
- provider-specific liveness; Ollama model pulls are checked only when using Ollama).
144
+ After writing, remind the user to run `mono-agent validate` (checks root writability,
145
+ managed provider/model/dimension identity, provider-native model typing, real finite-vector
146
+ response, and dimension). Changing any semantic identity field on an existing root requires
147
+ stopping the agent and running config-aware `mono-agent memory rebuild --json`.
139
148
 
140
149
  **Tier 4 — bujo (embeddings + chat model + consolidation):**
141
150
 
@@ -144,7 +153,8 @@ hybrid BM25+vector recall, entity graph, scheduled consolidation (decay + duplic
144
153
  superseding), living `index.md`, and an empty retired `future-log.md` stub. Consolidation
145
154
  is **auto-scheduled in-app** — no external cron or launchd setup needed.
146
155
 
147
- - Ask: which embeddings provider/model? Use the same choices as journal.
156
+ - Ask: which embeddings provider/service-root/model/dimension/auth-env? Use the same
157
+ exclusive choices and real-probe contract as journal.
148
158
  - Ask: which chat LLM provider/model for LLM pipelines?
149
159
  - Ollama: local model string such as `qwen3.6:latest`; pull it first with
150
160
  `ollama pull qwen3.6:latest`.
@@ -156,6 +166,11 @@ is **auto-scheduled in-app** — no external cron or launchd setup needed.
156
166
  - Ask: should we keep the default consolidation schedule (`0 */2 * * *`), customise the
157
167
  cron expression, or disable scheduled consolidation?
158
168
 
169
+ The embeddings service and capture LLM are independent. Choosing LM Studio embeddings does
170
+ not move capture there; guided config keeps an explicit `agent-host` LLM, while an authored
171
+ Ollama `memory.llm` remains valid. Standalone advanced `memory-bujo migrate` is still
172
+ Ollama-only and outside guided init.
173
+
159
174
  Write (embeddings + chat model):
160
175
 
161
176
  ```jsonc
@@ -23,18 +23,18 @@ Every framework capability and how a composed agent reaches it. This table is th
23
23
 
24
24
  | Capability | Coverage | Where |
25
25
  | --- | --- | --- |
26
- | Identity + optional soul documents | config | `context.identityPath`, `context.soulPath` |
26
+ | Identity + optional soul documents; wizard Role has one explicit destination and created/preserved outcome | config + cli | `context.identityPath`, `context.soulPath`; guided Role is `IDENTITY.md` → `## Role`, and an existing identity is never overwritten |
27
27
  | Selected skills from a skills root | config | `context.skillsRoot`, `context.selectedSkills` |
28
28
  | Generated project configuration skills with progressive disclosure | config + cli | init selects `mono-agent-configure` + `mono-agent-memory` under `./skills` with `context.skillDisclosure: "index"`; drift: `mono-agent install-skill --project --check\|--update` |
29
29
  | Per-skill byte cap | config | `context.skillMaxBytes` |
30
30
  | Conversation history (bounded in-memory) | auto | 12 messages by default; twice a positive `runtime.maxTurns`; custom store via code |
31
31
  | Lite memory (FTS keyword recall + rapid-log capture; no external deps) | config | `memory.mode: "lite"`, `path`, `maxBytes`, `writeMode` |
32
- | Journal memory (hybrid recall BM25+vector + salience decay; needs configured embeddings) | config | `memory.mode: "journal"`, `path`, `memory.embeddings.{provider,model,dim}` (`provider: "ollama" | "openai"`) |
33
- | BuJo memory (journal + LLM capture/reconcile ADD/UPDATE/SUPERSEDE/NOOP + entity graph + auto-scheduled consolidation; needs embeddings + an app-level `memory.llm`) | config | `memory.mode: "bujo"`, `path`, `memory.embeddings.{provider,model,dim}`, `memory.llm` with `provider: "ollama"` (`model`, optional `endpoint`) or `provider: "agent-host"` (`model` is an SDK runtime model ref, e.g. `pi:openai-codex:gpt-5.5`, optional `executionMode: "sdk"`) — see `docs/memory/index.md` |
32
+ | Journal memory (hybrid recall BM25+vector + salience decay; needs configured embeddings) | config | `memory.mode: "journal"`, `path`, `memory.embeddings.{provider,endpoint,model,dim,apiKeyEnv}` (`provider: "ollama" | "lmstudio" | "openai"`; exclusive, no cross-provider fallback) |
33
+ | BuJo memory (journal + LLM capture/reconcile ADD/UPDATE/SUPERSEDE/NOOP + entity graph + auto-scheduled consolidation; needs embeddings + an app-level `memory.llm`) | config | `memory.mode: "bujo"`, `path`; selected Ollama/LM Studio/OpenAI embeddings are independent from explicit `memory.llm` with `provider: "ollama"` (`model`, optional `endpoint`) or `provider: "agent-host"` (`model` is an SDK runtime model ref, optional `executionMode: "sdk"`) — see `docs/memory/index.md` |
34
34
  | BuJo consolidation auto-scheduler (lightweight decay + duplicate superseding; in-app, no external cron needed) | config | `memory.consolidation.{enabled,cron}` (default `0 */2 * * *`); env `MONO_AGENT_MEMORY_CONSOLIDATION_CRON`, `MONO_AGENT_MEMORY_CONSOLIDATION_ENABLED` |
35
- | Memory out-of-band maintenance CLI (rebuild/recall/index/legacy reflect/migrate) | cli | `memory-bujo <subcommand> <root>`; opt-in `MONO_AGENT_MEMORY_EMBEDDINGS_PROVIDER`/`_MODEL`/`_DIM` for semantic recall; legacy reflect/migrate are Ollama-only and require `MONO_AGENT_MEMORY_LLM_MODEL` (optional `MONO_AGENT_MEMORY_LLM_ENDPOINT`) |
35
+ | Memory out-of-band maintenance CLI (rebuild/recall/index/legacy reflect/migrate) | cli | `memory-bujo <subcommand> <root>`; opt-in `MONO_AGENT_MEMORY_EMBEDDINGS_PROVIDER` (`ollama`/`lmstudio`/`openai`), `_MODEL`, and `_DIM` for semantic recall; advanced `migrate` remains Ollama-only, outside guided init, and requires `MONO_AGENT_MEMORY_LLM_MODEL` (optional `_ENDPOINT`) |
36
36
  | Config-aware memory preview CLI (stats/today/show/search/top plus metadata-only audit; local search warns and falls back to FTS-only when embeddings are down) | cli | `mono-agent memory stats\|today\|show <date>\|search <query>\|top\|audit [--limit <n>] [--json]` |
37
- | Memory liveness check (root writable; provider-specific Ollama checks only when embeddings/chat use Ollama; BuJo LLM config + consolidation cadence — loud warn, no silent fallback) | cli | `mono-agent validate` |
37
+ | Memory liveness check (managed tier/provider/model/dimension identity; provider-native typed discovery plus real finite-vector/dimension probe for Ollama or LM Studio; declared auth env; BuJo LLM config + consolidation cadence; no cross-provider fallback) | cli | `mono-agent validate` |
38
38
  | Host summaries appended after runs | config | `memory.writeMode: "append-host-summary"` |
39
39
  | Auto-provisioned read-only `MemoryRecall` tool exposed for every configured memory tier; no chat LLM | config | `config.memory.recallTool.enabled` (`MONO_AGENT_MEMORY_RECALL_TOOL_ENABLED`, default on; explicit false opts out) |
40
40
 
@@ -78,10 +78,10 @@ Every framework capability and how a composed agent reaches it. This table is th
78
78
  | Trace-source registry (heartbeat manifests `mono-agent status` reads) | config | `traceability.{registryDir,sourceId,sourceLabel,heartbeatMs,staleAfterMs,globalDiscovery}` |
79
79
  | Phoenix trace viewer (OTLP exporter; local JSONL artifacts are the fallback) | config | `observability.exporters` (phoenix entry) |
80
80
  | Operator console (live chat with thinking/tool/telemetry insight, run replay, config view) | cli | `mono-agent tui [--agent <label>]`; agents serve the `tui` stream endpoint by default (`tui.enabled`, loopback) |
81
- | Current-folder local conversation and proposal-only configuration | cli + tool | `mono-agent tui --local [--configure]`; `/configure`; host-gated `ProposeAgentConfiguration` exists only for one marked local configuration turn |
81
+ | Managed proposal-only configuration conversation | cli + tool | macOS `mono-agent tui --configure` attaches to the authoritative background agent; `/configure`; separate configuration/ordinary conversation ids; host-gated `ProposeAgentConfiguration`; approval restarts and waits for readiness, failed start rolls files/agent back. `--local` is ordinary chat only; off macOS configuration is manual |
82
82
  | Session Recorder web PWA (read-only run browser) | cli | `mono-agent web [--host] [--port] [--no-open] [--allow-non-loopback] [--include-memory]`; consumes the default-on `live` relay and local artifacts; memory runs are opt-in |
83
83
  | Setup presets (saved answer-sets: generate config + `.env.example` + checklist) | cli | `mono-agent presets list\|show <id>`, `mono-agent init --preset <id> --yes` (`recipes`/`--recipe` deprecated aliases) |
84
- | Interactive setup wizard (preset/custom; walks model→channels→memory→tools→sandbox→observability) | cli | `mono-agent init` (no flags, on a TTY; `setup` alias) |
84
+ | Interactive setup wizard (preset/custom; exact `IDENTITY.md` → `## Role` prompt/outcome; walks model→channels→memory→tools→sandbox→observability; Journal/BuJo explicitly choose Ollama or LM Studio service root/model/dimension/optional auth env using typed discovery and a real probe; macOS starts the background agent before temporary configuration) | cli | `mono-agent init` (no flags, on a TTY; `setup` alias); manual embedding entry still requires readiness probe; flags/non-TTY stay scaffold-only; unsupported platforms use manual configuration/foreground start/ordinary TUI |
85
85
  | Tools reporting + no-tools guardrail (allow-all → `All tools allowed`; explicit empty `allowedTools: []` → `waiting`; unknown-tool "did you mean"; send-tool/channel cross-checks) | cli | part of `mono-agent validate`/`doctor`; the wizard's tools step |
86
86
  | Resolved config view (every field tagged env/json/default) | cli | `mono-agent config` |
87
87
  | Scaffold / validate / start / install-skill | cli | `mono-agent init [--model <ref>] [--fallback-models <csv>] [--effort <level>] [--auth]\|validate [--consumer <path>]\|config\|presets\|start\|install-skill` |
@@ -50,7 +50,7 @@ Use this path when the agent needs identity, selected skills, history, and optio
50
50
  | Selected skill bodies | `@mono-agent/agent-harness` | Load only configured skills from `<skillsRoot>/<name>/SKILL.md` |
51
51
  | Memory substrate (schema, migrations, FTS+vector db, RRF) | `@mono-agent/memory/store` | SQLite storage, BM25 FTS, optional vector index, hybrid recall; re-exports `MemoryStore`/`MemoryBlock`/`MemoryWriteResult` from `@mono-agent/agent-contracts` |
52
52
  | Memory engine (all tiers: lite/journal/bujo) | `@mono-agent/memory/bujo` | `BujoMemoryStore` — tier-aware: FTS recall (lite), hybrid recall + decay (journal), LLM capture/reconcile + entity graph + scheduled consolidation (bujo) |
53
- | Embedding providers | `@mono-agent/memory/search` | Ollama/OpenAI embedding providers used by the store subpath for vector recall |
53
+ | Embedding providers | `@mono-agent/memory/search` | Exclusive Ollama/LM Studio/OpenAI embedding providers used by the store subpath for vector recall; `agent-app` owns guided typed discovery and the real readiness probe |
54
54
  | Recall tool surface | `@mono-agent/agent-app` (bundled) | Auto-provisions read-only `MemoryRecall` for every configured tier and direct configured responder; automatic/tool recall share the same store and per-turn query cache |
55
55
 
56
56
  Mono-agent selected skills are not auto-selected by description. The host chooses `context.selectedSkills`, and the harness loads those exact bodies.
@@ -80,7 +80,7 @@ pnpm run test:demo
80
80
 
81
81
  | Surface | Smoke |
82
82
  | --- | --- |
83
- | TUI | Start the host and complete one local prompt. |
83
+ | TUI | Start the host, connect with ordinary `mono-agent tui`, and complete one real prompt against the running responder. |
84
84
  | Telegram | Send one allowed chat message and verify the reply. |
85
85
  | Slack | Send one allowed DM or channel message and verify formatting. |
86
86
  | Adapter send tools | When `SlackSendMessage` / `TelegramSendMessage` are available (allow-all, or an explicit `tools.allowedTools` entry) with the channel enabled, call them from a non-Slack/Telegram surface such as TUI, cron, or OpenAI API to an allowed destination and verify delivery. |
@@ -91,7 +91,7 @@ pnpm run test:demo
91
91
  | Cron | Run a one-off scheduled invocation or wait for one tick. |
92
92
  | Observability | Confirm a run writes a redacted JSONL artifact; if an `observability.exporters` Phoenix entry is set, confirm the trace appears in Phoenix. |
93
93
  | Memory recall tool | With any memory tier configured (`memory.recallTool.enabled` defaults on), ask the agent to recall an old note and confirm `MemoryRecall` appears separately from action-tool allowlists and returns it. |
94
- | Semantic memory search | With `memory.embeddings` set (Ollama: `ollama pull nomic-embed-text:v1.5` first), ask a paraphrased question about an old note and confirm `MemoryRecall` (hybrid keyword + semantic) returns it. |
94
+ | Semantic memory search | With `memory.embeddings` set, first prove the configured provider only: Ollama model advertises `embedding` through `/api/show` and answers `/api/embed`, or LM Studio model has exact `type: "embedding"` in `/api/v1/models` and answers `/v1/embeddings`. Verify the finite vector dimension matches config, then ask a paraphrased question about an old note and confirm `MemoryRecall` returns it. Never accept a cross-provider fallback as proof. |
95
95
 
96
96
  ## Failure Handling
97
97