@mono-agent/agent-app 0.20.11 → 0.21.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 (369) hide show
  1. package/README.md +260 -98
  2. package/dist/adapter-send-tools.d.ts +3 -2
  3. package/dist/adapter-send-tools.d.ts.map +1 -1
  4. package/dist/adapter-send-tools.js +15 -5
  5. package/dist/adapter-send-tools.js.map +1 -1
  6. package/dist/app-controller-channels.d.ts +6 -0
  7. package/dist/app-controller-channels.d.ts.map +1 -1
  8. package/dist/app-controller-channels.js +29 -2
  9. package/dist/app-controller-channels.js.map +1 -1
  10. package/dist/app-controller-continuation.d.ts.map +1 -1
  11. package/dist/app-controller-continuation.js +2 -3
  12. package/dist/app-controller-continuation.js.map +1 -1
  13. package/dist/app-controller-lifecycle.d.ts +4 -0
  14. package/dist/app-controller-lifecycle.d.ts.map +1 -1
  15. package/dist/app-controller-lifecycle.js +7 -0
  16. package/dist/app-controller-lifecycle.js.map +1 -1
  17. package/dist/app-controller-maintenance.d.ts +3 -1
  18. package/dist/app-controller-maintenance.d.ts.map +1 -1
  19. package/dist/app-controller-maintenance.js +3 -0
  20. package/dist/app-controller-maintenance.js.map +1 -1
  21. package/dist/app-controller-monitors.d.ts +26 -0
  22. package/dist/app-controller-monitors.d.ts.map +1 -0
  23. package/dist/app-controller-monitors.js +127 -0
  24. package/dist/app-controller-monitors.js.map +1 -0
  25. package/dist/app-controller-responder.d.ts +9 -17
  26. package/dist/app-controller-responder.d.ts.map +1 -1
  27. package/dist/app-controller-responder.js +54 -86
  28. package/dist/app-controller-responder.js.map +1 -1
  29. package/dist/app-controller-traceability.d.ts.map +1 -1
  30. package/dist/app-controller-traceability.js +3 -0
  31. package/dist/app-controller-traceability.js.map +1 -1
  32. package/dist/app-controller-types.d.ts +1 -0
  33. package/dist/app-controller-types.d.ts.map +1 -1
  34. package/dist/app-controller-utils.d.ts +1 -5
  35. package/dist/app-controller-utils.d.ts.map +1 -1
  36. package/dist/app-controller-utils.js +4 -21
  37. package/dist/app-controller-utils.js.map +1 -1
  38. package/dist/app-controller.d.ts +26 -10
  39. package/dist/app-controller.d.ts.map +1 -1
  40. package/dist/app-controller.js +39 -1
  41. package/dist/app-controller.js.map +1 -1
  42. package/dist/artifact-retention.js +11 -0
  43. package/dist/artifact-retention.js.map +1 -1
  44. package/dist/background.d.ts +0 -6
  45. package/dist/background.d.ts.map +1 -1
  46. package/dist/background.js +5 -58
  47. package/dist/background.js.map +1 -1
  48. package/dist/channel-drivers/slack.d.ts.map +1 -1
  49. package/dist/channel-drivers/slack.js +18 -0
  50. package/dist/channel-drivers/slack.js.map +1 -1
  51. package/dist/channel-drivers/telegram.d.ts.map +1 -1
  52. package/dist/channel-drivers/telegram.js +26 -0
  53. package/dist/channel-drivers/telegram.js.map +1 -1
  54. package/dist/channel-drivers/tui.d.ts +68 -8
  55. package/dist/channel-drivers/tui.d.ts.map +1 -1
  56. package/dist/channel-drivers/tui.js +407 -89
  57. package/dist/channel-drivers/tui.js.map +1 -1
  58. package/dist/channel-runtime-controls.d.ts +2 -1
  59. package/dist/channel-runtime-controls.d.ts.map +1 -1
  60. package/dist/channel-runtime-controls.js +79 -22
  61. package/dist/channel-runtime-controls.js.map +1 -1
  62. package/dist/cli-args.d.ts +5 -8
  63. package/dist/cli-args.d.ts.map +1 -1
  64. package/dist/cli-args.js +33 -52
  65. package/dist/cli-args.js.map +1 -1
  66. package/dist/cli-background-command.d.ts.map +1 -1
  67. package/dist/cli-background-command.js +4 -0
  68. package/dist/cli-background-command.js.map +1 -1
  69. package/dist/cli-commands.d.ts.map +1 -1
  70. package/dist/cli-commands.js +24 -2
  71. package/dist/cli-commands.js.map +1 -1
  72. package/dist/cli-help.d.ts +26 -0
  73. package/dist/cli-help.d.ts.map +1 -1
  74. package/dist/cli-help.js +58 -53
  75. package/dist/cli-help.js.map +1 -1
  76. package/dist/cli-init-command.d.ts +1 -2
  77. package/dist/cli-init-command.d.ts.map +1 -1
  78. package/dist/cli-init-command.js +31 -71
  79. package/dist/cli-init-command.js.map +1 -1
  80. package/dist/cli-install-skill-command.d.ts.map +1 -1
  81. package/dist/cli-install-skill-command.js +12 -3
  82. package/dist/cli-install-skill-command.js.map +1 -1
  83. package/dist/config-reference.d.ts +1 -0
  84. package/dist/config-reference.d.ts.map +1 -1
  85. package/dist/config-reference.js +217 -60
  86. package/dist/config-reference.js.map +1 -1
  87. package/dist/configured-agent.d.ts +27 -4
  88. package/dist/configured-agent.d.ts.map +1 -1
  89. package/dist/configured-agent.js +159 -112
  90. package/dist/configured-agent.js.map +1 -1
  91. package/dist/conversation-title.d.ts.map +1 -1
  92. package/dist/conversation-title.js +9 -2
  93. package/dist/conversation-title.js.map +1 -1
  94. package/dist/cron-control-store.d.ts.map +1 -1
  95. package/dist/cron-control-store.js +4 -2
  96. package/dist/cron-control-store.js.map +1 -1
  97. package/dist/doctor.d.ts +7 -13
  98. package/dist/doctor.d.ts.map +1 -1
  99. package/dist/doctor.js +406 -770
  100. package/dist/doctor.js.map +1 -1
  101. package/dist/first-run-readiness.d.ts.map +1 -1
  102. package/dist/first-run-readiness.js +0 -6
  103. package/dist/first-run-readiness.js.map +1 -1
  104. package/dist/index.d.ts +2 -0
  105. package/dist/index.d.ts.map +1 -1
  106. package/dist/index.js +1 -0
  107. package/dist/index.js.map +1 -1
  108. package/dist/interaction-bridge.d.ts +3 -3
  109. package/dist/interaction-bridge.d.ts.map +1 -1
  110. package/dist/interaction-bridge.js +27 -10
  111. package/dist/interaction-bridge.js.map +1 -1
  112. package/dist/launchd.d.ts +2 -0
  113. package/dist/launchd.d.ts.map +1 -1
  114. package/dist/launchd.js +3 -0
  115. package/dist/launchd.js.map +1 -1
  116. package/dist/local-tui-session.d.ts +14 -0
  117. package/dist/local-tui-session.d.ts.map +1 -0
  118. package/dist/local-tui-session.js +100 -0
  119. package/dist/local-tui-session.js.map +1 -0
  120. package/dist/mcp-apps.d.ts.map +1 -1
  121. package/dist/mcp-apps.js +3 -0
  122. package/dist/mcp-apps.js.map +1 -1
  123. package/dist/memory-journal.d.ts +53 -0
  124. package/dist/memory-journal.d.ts.map +1 -0
  125. package/dist/memory-journal.js +586 -0
  126. package/dist/memory-journal.js.map +1 -0
  127. package/dist/memory-recall.d.ts.map +1 -1
  128. package/dist/memory-recall.js +16 -2
  129. package/dist/memory-recall.js.map +1 -1
  130. package/dist/memory-remember.d.ts +49 -0
  131. package/dist/memory-remember.d.ts.map +1 -0
  132. package/dist/memory-remember.js +190 -0
  133. package/dist/memory-remember.js.map +1 -0
  134. package/dist/memory-retrieval.d.ts +33 -0
  135. package/dist/memory-retrieval.d.ts.map +1 -1
  136. package/dist/memory-retrieval.js +43 -0
  137. package/dist/memory-retrieval.js.map +1 -1
  138. package/dist/model-effort-capabilities.d.ts +8 -9
  139. package/dist/model-effort-capabilities.d.ts.map +1 -1
  140. package/dist/model-effort-capabilities.js +17 -35
  141. package/dist/model-effort-capabilities.js.map +1 -1
  142. package/dist/modules/base.d.ts +3 -4
  143. package/dist/modules/base.d.ts.map +1 -1
  144. package/dist/modules/base.js +4 -6
  145. package/dist/modules/base.js.map +1 -1
  146. package/dist/modules/catalog.d.ts.map +1 -1
  147. package/dist/modules/catalog.js +11 -9
  148. package/dist/modules/catalog.js.map +1 -1
  149. package/dist/modules/known-tools.d.ts +2 -2
  150. package/dist/modules/known-tools.d.ts.map +1 -1
  151. package/dist/modules/known-tools.js +7 -0
  152. package/dist/modules/known-tools.js.map +1 -1
  153. package/dist/monitor-channel-routing.d.ts +20 -0
  154. package/dist/monitor-channel-routing.d.ts.map +1 -0
  155. package/dist/monitor-channel-routing.js +73 -0
  156. package/dist/monitor-channel-routing.js.map +1 -0
  157. package/dist/monitors-command.d.ts +23 -0
  158. package/dist/monitors-command.d.ts.map +1 -0
  159. package/dist/monitors-command.js +217 -0
  160. package/dist/monitors-command.js.map +1 -0
  161. package/dist/monitors-config.d.ts +77 -0
  162. package/dist/monitors-config.d.ts.map +1 -0
  163. package/dist/monitors-config.js +150 -0
  164. package/dist/monitors-config.js.map +1 -0
  165. package/dist/monitors-context.d.ts +58 -0
  166. package/dist/monitors-context.d.ts.map +1 -0
  167. package/dist/monitors-context.js +194 -0
  168. package/dist/monitors-context.js.map +1 -0
  169. package/dist/monitors-runtime.d.ts +36 -0
  170. package/dist/monitors-runtime.d.ts.map +1 -0
  171. package/dist/monitors-runtime.js +103 -0
  172. package/dist/monitors-runtime.js.map +1 -0
  173. package/dist/monitors-service.d.ts +71 -0
  174. package/dist/monitors-service.d.ts.map +1 -0
  175. package/dist/monitors-service.js +1796 -0
  176. package/dist/monitors-service.js.map +1 -0
  177. package/dist/monitors-store.d.ts +93 -0
  178. package/dist/monitors-store.d.ts.map +1 -0
  179. package/dist/monitors-store.js +313 -0
  180. package/dist/monitors-store.js.map +1 -0
  181. package/dist/notify-destinations.d.ts +3 -2
  182. package/dist/notify-destinations.d.ts.map +1 -1
  183. package/dist/notify-destinations.js +6 -7
  184. package/dist/notify-destinations.js.map +1 -1
  185. package/dist/posted-reply-history.d.ts.map +1 -1
  186. package/dist/posted-reply-history.js +40 -3
  187. package/dist/posted-reply-history.js.map +1 -1
  188. package/dist/proactive-notify.d.ts +20 -1
  189. package/dist/proactive-notify.d.ts.map +1 -1
  190. package/dist/proactive-notify.js +56 -3
  191. package/dist/proactive-notify.js.map +1 -1
  192. package/dist/process-job-channel-routing.js +2 -1
  193. package/dist/process-job-channel-routing.js.map +1 -1
  194. package/dist/process-job-output-tail.d.ts +53 -0
  195. package/dist/process-job-output-tail.d.ts.map +1 -0
  196. package/dist/process-job-output-tail.js +257 -0
  197. package/dist/process-job-output-tail.js.map +1 -0
  198. package/dist/process-jobs-config.d.ts +1 -1
  199. package/dist/process-jobs-config.js +1 -1
  200. package/dist/process-jobs-config.js.map +1 -1
  201. package/dist/process-jobs-context.d.ts +11 -1
  202. package/dist/process-jobs-context.d.ts.map +1 -1
  203. package/dist/process-jobs-context.js +55 -11
  204. package/dist/process-jobs-context.js.map +1 -1
  205. package/dist/process-jobs-protection.js +1 -1
  206. package/dist/process-jobs-protection.js.map +1 -1
  207. package/dist/process-jobs-runtime.d.ts.map +1 -1
  208. package/dist/process-jobs-runtime.js +15 -12
  209. package/dist/process-jobs-runtime.js.map +1 -1
  210. package/dist/process-jobs-service.d.ts.map +1 -1
  211. package/dist/process-jobs-service.js +118 -172
  212. package/dist/process-jobs-service.js.map +1 -1
  213. package/dist/process-jobs-store.d.ts +3 -1
  214. package/dist/process-jobs-store.d.ts.map +1 -1
  215. package/dist/process-jobs-store.js +4 -1
  216. package/dist/process-jobs-store.js.map +1 -1
  217. package/dist/process-output-redaction.d.ts +58 -0
  218. package/dist/process-output-redaction.d.ts.map +1 -0
  219. package/dist/process-output-redaction.js +311 -0
  220. package/dist/process-output-redaction.js.map +1 -0
  221. package/dist/project-skills.d.ts +11 -5
  222. package/dist/project-skills.d.ts.map +1 -1
  223. package/dist/project-skills.js +88 -39
  224. package/dist/project-skills.js.map +1 -1
  225. package/dist/provider-auth-checks.d.ts +27 -0
  226. package/dist/provider-auth-checks.d.ts.map +1 -0
  227. package/dist/provider-auth-checks.js +349 -0
  228. package/dist/provider-auth-checks.js.map +1 -0
  229. package/dist/provider-auth-observations.d.ts +22 -0
  230. package/dist/provider-auth-observations.d.ts.map +1 -0
  231. package/dist/provider-auth-observations.js +139 -0
  232. package/dist/provider-auth-observations.js.map +1 -0
  233. package/dist/provider-auth-operator.d.ts +19 -0
  234. package/dist/provider-auth-operator.d.ts.map +1 -0
  235. package/dist/provider-auth-operator.js +560 -0
  236. package/dist/provider-auth-operator.js.map +1 -0
  237. package/dist/provider-auth-status.d.ts +20 -0
  238. package/dist/provider-auth-status.d.ts.map +1 -0
  239. package/dist/provider-auth-status.js +235 -0
  240. package/dist/provider-auth-status.js.map +1 -0
  241. package/dist/provider-model-catalog.d.ts +95 -0
  242. package/dist/provider-model-catalog.d.ts.map +1 -0
  243. package/dist/provider-model-catalog.js +550 -0
  244. package/dist/provider-model-catalog.js.map +1 -0
  245. package/dist/provider-setup.d.ts +26 -13
  246. package/dist/provider-setup.d.ts.map +1 -1
  247. package/dist/provider-setup.js +106 -130
  248. package/dist/provider-setup.js.map +1 -1
  249. package/dist/readiness-probe-worker.d.ts +1 -2
  250. package/dist/readiness-probe-worker.d.ts.map +1 -1
  251. package/dist/readiness-probe-worker.js +3 -8
  252. package/dist/readiness-probe-worker.js.map +1 -1
  253. package/dist/readiness-probe.d.ts +1 -1
  254. package/dist/readiness-probe.d.ts.map +1 -1
  255. package/dist/readiness-probe.js +3 -33
  256. package/dist/readiness-probe.js.map +1 -1
  257. package/dist/reply-artifacts.d.ts +3 -1
  258. package/dist/reply-artifacts.d.ts.map +1 -1
  259. package/dist/reply-artifacts.js +45 -10
  260. package/dist/reply-artifacts.js.map +1 -1
  261. package/dist/request-model-override.d.ts +14 -37
  262. package/dist/request-model-override.d.ts.map +1 -1
  263. package/dist/request-model-override.js +105 -143
  264. package/dist/request-model-override.js.map +1 -1
  265. package/dist/request-scoped-mcp.d.ts +3 -0
  266. package/dist/request-scoped-mcp.d.ts.map +1 -1
  267. package/dist/request-scoped-mcp.js +1 -1
  268. package/dist/request-scoped-mcp.js.map +1 -1
  269. package/dist/run-history.d.ts.map +1 -1
  270. package/dist/run-history.js +56 -13
  271. package/dist/run-history.js.map +1 -1
  272. package/dist/runtime-option-extensions.d.ts +2 -4
  273. package/dist/runtime-option-extensions.d.ts.map +1 -1
  274. package/dist/runtime-option-extensions.js +4 -8
  275. package/dist/runtime-option-extensions.js.map +1 -1
  276. package/dist/runtime-routes.d.ts +5 -5
  277. package/dist/runtime-routes.d.ts.map +1 -1
  278. package/dist/runtime-routes.js +29 -18
  279. package/dist/runtime-routes.js.map +1 -1
  280. package/dist/sandbox-settings-cleanup.d.ts +15 -0
  281. package/dist/sandbox-settings-cleanup.d.ts.map +1 -0
  282. package/dist/sandbox-settings-cleanup.js +88 -0
  283. package/dist/sandbox-settings-cleanup.js.map +1 -0
  284. package/dist/seen-conversations.d.ts +4 -3
  285. package/dist/seen-conversations.d.ts.map +1 -1
  286. package/dist/seen-conversations.js +6 -5
  287. package/dist/seen-conversations.js.map +1 -1
  288. package/dist/session-history.d.ts +14 -0
  289. package/dist/session-history.d.ts.map +1 -1
  290. package/dist/session-history.js +120 -5
  291. package/dist/session-history.js.map +1 -1
  292. package/dist/systemd-command.d.ts +8 -0
  293. package/dist/systemd-command.d.ts.map +1 -0
  294. package/dist/systemd-command.js +206 -0
  295. package/dist/systemd-command.js.map +1 -0
  296. package/dist/systemd.d.ts +51 -0
  297. package/dist/systemd.d.ts.map +1 -0
  298. package/dist/systemd.js +299 -0
  299. package/dist/systemd.js.map +1 -0
  300. package/dist/tool-output-artifacts.d.ts +4 -0
  301. package/dist/tool-output-artifacts.d.ts.map +1 -0
  302. package/dist/tool-output-artifacts.js +17 -0
  303. package/dist/tool-output-artifacts.js.map +1 -0
  304. package/dist/trigger-overrides.d.ts +6 -0
  305. package/dist/trigger-overrides.d.ts.map +1 -1
  306. package/dist/trigger-overrides.js +36 -4
  307. package/dist/trigger-overrides.js.map +1 -1
  308. package/dist/tui-command.d.ts +0 -45
  309. package/dist/tui-command.d.ts.map +1 -1
  310. package/dist/tui-command.js +27 -264
  311. package/dist/tui-command.js.map +1 -1
  312. package/dist/untrusted-text.d.ts +36 -0
  313. package/dist/untrusted-text.d.ts.map +1 -0
  314. package/dist/untrusted-text.js +150 -0
  315. package/dist/untrusted-text.js.map +1 -0
  316. package/dist/web-command.d.ts +3 -0
  317. package/dist/web-command.d.ts.map +1 -1
  318. package/dist/web-command.js +112 -7
  319. package/dist/web-command.js.map +1 -1
  320. package/dist/web-request-coordinator.d.ts +19 -0
  321. package/dist/web-request-coordinator.d.ts.map +1 -0
  322. package/dist/web-request-coordinator.js +242 -0
  323. package/dist/web-request-coordinator.js.map +1 -0
  324. package/dist/wizard/answers.d.ts +3 -9
  325. package/dist/wizard/answers.d.ts.map +1 -1
  326. package/dist/wizard/answers.js +11 -36
  327. package/dist/wizard/answers.js.map +1 -1
  328. package/dist/wizard/from-flags.d.ts +1 -2
  329. package/dist/wizard/from-flags.d.ts.map +1 -1
  330. package/dist/wizard/from-flags.js +8 -3
  331. package/dist/wizard/from-flags.js.map +1 -1
  332. package/dist/wizard/model-discovery.d.ts +7 -8
  333. package/dist/wizard/model-discovery.d.ts.map +1 -1
  334. package/dist/wizard/model-discovery.js +58 -431
  335. package/dist/wizard/model-discovery.js.map +1 -1
  336. package/dist/wizard/presets.js +2 -2
  337. package/dist/wizard/presets.js.map +1 -1
  338. package/dist/wizard/prompts.d.ts +13 -12
  339. package/dist/wizard/prompts.d.ts.map +1 -1
  340. package/dist/wizard/prompts.js +25 -45
  341. package/dist/wizard/prompts.js.map +1 -1
  342. package/dist/wizard/run.d.ts.map +1 -1
  343. package/dist/wizard/run.js +30 -153
  344. package/dist/wizard/run.js.map +1 -1
  345. package/package.json +18 -18
  346. package/schema/mono-agent.config.schema.json +301 -53
  347. package/skills/mono-agent-composer/SKILL.md +5 -5
  348. package/skills/mono-agent-composer/references/config-blueprint.md +61 -47
  349. package/skills/mono-agent-composer/references/discovery-questions.md +18 -18
  350. package/skills/mono-agent-composer/references/feature-coverage.md +39 -21
  351. package/skills/mono-agent-composer/references/package-map.md +26 -17
  352. package/skills/mono-agent-composer/references/playbooks.md +39 -28
  353. package/skills/mono-agent-composer/references/validation.md +4 -3
  354. package/dist/codex-model-catalog.d.ts +0 -15
  355. package/dist/codex-model-catalog.d.ts.map +0 -1
  356. package/dist/codex-model-catalog.js +0 -220
  357. package/dist/codex-model-catalog.js.map +0 -1
  358. package/dist/configuration-proposal-main.d.ts +0 -3
  359. package/dist/configuration-proposal-main.d.ts.map +0 -1
  360. package/dist/configuration-proposal-main.js +0 -13
  361. package/dist/configuration-proposal-main.js.map +0 -1
  362. package/dist/configuration-proposal-tool.d.ts +0 -33
  363. package/dist/configuration-proposal-tool.d.ts.map +0 -1
  364. package/dist/configuration-proposal-tool.js +0 -188
  365. package/dist/configuration-proposal-tool.js.map +0 -1
  366. package/dist/local-configuration.d.ts +0 -99
  367. package/dist/local-configuration.d.ts.map +0 -1
  368. package/dist/local-configuration.js +0 -1330
  369. package/dist/local-configuration.js.map +0 -1
package/README.md CHANGED
@@ -28,13 +28,21 @@ Turn a folder's `mono-agent.config.json` into a running agent host:
28
28
  external channel plugins from `channels.plugins[]`.
29
29
  - Build the shared runtime/responder/memory stack through app-owned configured
30
30
  composition
31
- (including canonical `runtime.fallbacks` routes and legacy
32
- `runtime.fallbackModels` compatibility).
31
+ (canonical `runtime.fallbacks` routes).
33
32
  - Preserve bounded answered/expired `AskUser` evidence in the assistant history
34
33
  copy so cold/stateless provider replay does not lose the out-of-band exchange;
35
34
  cancelled asks are not journaled.
35
+ - Publish the harness's bounded, redacted continuity account for every admitted
36
+ non-isolated turn that settles as cancelled or failed before its success
37
+ commit. Cancellation preserves operator, shutdown, stale-session, signal,
38
+ timeout, generic, and unrecorded-reason provenance; failure records a trusted
39
+ host settlement category while bounding/redacting runtime/provider code and
40
+ detail as untrusted evidence. Eligible durable Pi recovery retains native context
41
+ without appending the account to Pi; cold reseed includes the account. The
42
+ on-disk history shape is unchanged by recovery;
43
+ `RunHistory` and `SessionHistory` remain the deeper evidence paths.
36
44
  - Expose the request-scoped read-only `RunHistory` tool for safe normalized
37
- search and paged evidence from completed prior runs in the logical
45
+ recovery, search, and paged evidence from settled prior runs in the logical
38
46
  conversation, independent of daily rollover buckets.
39
47
  - Expose the sibling request-scoped read-only `SessionHistory` tool over the
40
48
  harness's canonical retained managed-tool lifecycle sidecar.
@@ -46,7 +54,8 @@ Turn a folder's `mono-agent.config.json` into a running agent host:
46
54
  Slack/Telegram/web/WhatsApp wake routing with exact active-run steering and a
47
55
  reserved visible normal-turn fallback,
48
56
  wake with age-bounded busy deferrals, bounded pending/store materialization,
49
- stable secret-free safety errors, native same-message lifecycle surfaces,
57
+ stable secret-free safety errors, a memory-only redacted live output tail,
58
+ native same-message lifecycle surfaces,
50
59
  fail-closed live store health, a bounded monotonic registry that seals every
51
60
  retained state root even after disable or reconfiguration, bounded locked
52
61
  recovery through a fixed-name owner-private sibling directory while request
@@ -60,6 +69,15 @@ Turn a folder's `mono-agent.config.json` into a running agent host:
60
69
  routes, and `mono-agent jobs` CLI at the app boundary. This
61
70
  local contract does not resist a hostile same-UID provider; use OS privilege
62
71
  separation when that is in the threat model.
72
+ - Opt in to Pi-native host-owned watches through `monitors.*`. Telegram, Slack,
73
+ and existing web conversations receive coalesced event batches as exact-origin
74
+ tool-capable wake turns; web uses ordinary assistant turns rather than a
75
+ Monitor card, and shares one per-thread serialization lane with ProcessJobs
76
+ wakes and queued user follow-ups.
77
+ Optional batch deduplication and wake intervals suppress unnecessary inference;
78
+ exit-only watches deliver one terminal wake. The host clamps intervals through
79
+ `monitors.maxWakeIntervalMs` (default/cap 300000) and exposes durable suppression
80
+ and delivery-disposition counters. `maxChainDepth` defaults to 4, with cap 64.
63
81
  - Drive each channel through a uniform driver contract with per-channel
64
82
  `disabled` / `waiting_for_config` / `running` / `degraded` / `failed` status.
65
83
  `degraded` means a temporarily unavailable transport owns its recovery while
@@ -73,8 +91,8 @@ Turn a folder's `mono-agent.config.json` into a running agent host:
73
91
  actions are config-opt-in, API-key-protected, and explicitly confirmed; they
74
92
  never rewrite config, environment, or Markdown job sources.
75
93
  - Register the host as a traceability source. Config edits are made directly in
76
- `mono-agent.config.json`, or proposed through the OS-owner-managed macOS
77
- configuration TUI; direct edits take effect on the next `mono-agent restart`.
94
+ `mono-agent.config.json` or `IDENTITY.md` and take effect after validation and
95
+ `mono-agent restart`.
78
96
  - Check managed launchd logs with bounded metadata reads every five minutes,
79
97
  reconcile installed macOS LaunchAgents at login and hourly, and make `status`
80
98
  require agreement between the cached trace and launchd's live PID.
@@ -88,16 +106,25 @@ Turn a folder's `mono-agent.config.json` into a running agent host:
88
106
  - Scaffold (`mono-agent init`) and validate (`mono-agent validate`) agent
89
107
  folders non-destructively.
90
108
  - Resolve local-first WebSearch/WebFetch settings into every runtime run and
91
- report a separate bounded readiness section for loopback SearXNG plus the
92
- optional `agent-browser` renderer; the app never owns either companion's
93
- lifecycle.
109
+ report the four-request default WebSearch budget plus separate bounded
110
+ readiness for explicit Ollama or loopback
111
+ SearXNG plus the optional `agent-browser` renderer; the app never owns any
112
+ companion's lifecycle. Opt-in `tools.web.coordination: "host"` injects the same private
113
+ admission and cooldown store into parent and subagent runs;
114
+ `mono-agent web-control status|reset` inspects or clears idle operational state.
115
+ - Bind oversized tool-block persistence to the harness's authoritative run id,
116
+ writing owner-private raw payloads under `artifacts.dir/tool-output/<runId>/`.
117
+ The sink is not injected into out-of-harness child callbacks. The hourly
118
+ artifact sweep bounds run directories with the existing `artifacts.retention`
119
+ policy while conservatively retaining active, uncertain, or recently modified runs.
94
120
  - Operate the machine-wide `@mono-agent/web` assistant-ui console through
95
- `mono-agent web`, including persisted curated host themes and hostname
96
- identity; on macOS pair its worker with one helper-only, stopped-writer log
97
- controller while the worker remains wake-only; publish a bounded, refreshable
98
- skill registry through each running operator endpoint so the web composer can
99
- discover valid `$skill-name` references; use `mono-agent tui` for bounded
100
- recorded-run replay.
121
+ `mono-agent web`, including persisted curated host themes and a console label
122
+ that defaults to the hostname and can be restored with `--name -`; on macOS
123
+ pair its worker with one helper-only,
124
+ stopped-writer log controller while the worker remains wake-only; publish a
125
+ bounded, refreshable skill registry through each running operator endpoint so
126
+ the web composer can discover valid `$skill-name` references; use
127
+ `mono-agent tui` for bounded recorded-run replay.
101
128
  - Discover and expose one exact running agent through the ACP core-session
102
129
  profile with `mono-agent bridge acp`, including durable session resume, while
103
130
  preserving agent-owned configuration, workspace, sandbox, tools, MCP servers,
@@ -105,6 +132,14 @@ Turn a folder's `mono-agent.config.json` into a running agent host:
105
132
 
106
133
  ## Install / Usage
107
134
 
135
+ Process-job chains keep the default depth budget of 4 and allow a configured
136
+ ceiling of 64. Request diagnostics remain visible when the budget is exhausted.
137
+ Background Exec/Bash accepts `wake_on_completion: false` for helpers that only
138
+ need terminal card updates. Exact sentinel-only wakes suppress delivery; a
139
+ receipt timeout before the destination confirms steering or durable follow-up
140
+ admission settles as unknown and never automatically replays. A confirmed web
141
+ follow-up receipt does not wait for that turn's later model outcome.
142
+
108
143
  ```bash
109
144
  # Install the scoped CLI host directly:
110
145
  npm install --global @mono-agent/agent-app
@@ -122,6 +157,10 @@ same CLI.
122
157
 
123
158
  ### Guided initialization and readiness
124
159
 
160
+ Linux lifecycle commands use systemd user services with journald logs and
161
+ `dev (unmanaged)` runtime provenance. See [Linux background services](../../docs/observability/linux-services.md)
162
+ for linger, external HTTPS, migration, and the initial operator-command scope.
163
+
125
164
  On an interactive terminal, bare `mono-agent init` (no flags) runs a colourful,
126
165
  step-by-step wizard — powered by `@clack/prompts` — that asks for the public
127
166
  agent name plus exact Role text for `IDENTITY.md` → `## Role` and composes the capability selection before writing anything. An existing `IDENTITY.md` is preserved and the review says the entered Role will not be written. Escape
@@ -151,9 +190,12 @@ primary/fallback pickers combine every bundled model
151
190
  for the guided Pi providers (Anthropic, GitHub Copilot, OpenAI Codex, and
152
191
  OpenCode-Go), Codex's live account catalog, the Claude SDK catalog, and local
153
192
  discovery. The live Codex provider default leads when available; offline setup
154
- falls back to curated `codex:gpt-5.6-terra` without guessing effort metadata, so
155
- only **Provider default** is offered until live `model/list` succeeds. GPT-5.6 Sol is selectable as
156
- `codex:gpt-5.6-sol` or `pi:openai-codex:gpt-5.6-sol`.
193
+ falls back to curated `openai-codex:gpt-5.6-terra` without guessing effort metadata, so
194
+ only **Provider default** is offered until live `model/list` succeeds. GPT-6
195
+ Astra is selectable as `openai-codex:gpt-6-astra` for Codex subscriptions;
196
+ `openai:gpt-6-astra` is also runtime-compatible for OpenAI API keys through the
197
+ existing hand-authored provider path, without adding direct OpenAI to guided
198
+ setup. GPT-5.6 Sol remains selectable as `openai-codex:gpt-5.6-sol`.
157
199
  OpenCode-Go Pi refs can save `OPENCODE_API_KEY` into
158
200
  the Pi auth store or remain environment-provided, and any number of fallback
159
201
  models are selected from the same discovered choices one at a time. Each route
@@ -184,21 +226,39 @@ action fails the check.
184
226
  Escape or Ctrl-C interrupts preflight; recovery can resume verified routes when
185
227
  the non-secret plan fingerprint still matches, restart all checks, edit choices,
186
228
  or cancel. Authentication repair clears every prior route proof because it can
187
- replace credential bytes. Guided commit atomically creates the config and rechecks its exact snapshot after validation. On macOS it then creates or refreshes the canonical per-config launchd service and waits up to 60 seconds for a fresh trace whose durable `metadata.lifecycle.startupCompleted` proof is true. The worker publishes that proof only after channels, memory rituals, and final memory-health work complete; later trace refreshes change the diagnostic `metadata.reason` without revoking readiness. The controller also re-proves the live launchd PID, exact snapshot, current channel/memory health, and reachable TUI before it opens `mono-agent tui --configure` against that background responder. A readiness timeout or trace/TUI-probe error preserves the committed files and skips chat, then unloads the worker plus scheduled maintenance and removes their definitions only when stopped state is proven. If cleanup cannot be proven, the command says that a process may still be running and prints exact `start`, `status`, and `logs --follow` recovery commands plus log paths. Workers from an older release that have no durable lifecycle marker must restart once before configuration can attach. Off macOS, conversational configuration is unavailable: the wizard preserves the files and gives manual edit/validate, foreground-start, and ordinary-TUI guidance without claiming readiness. Any flag or non-TTY invocation remains scaffold-only and never starts a process.
229
+ replace credential bytes. Guided commit atomically creates the config and
230
+ rechecks its exact snapshot after validation. On macOS it then creates or
231
+ refreshes the canonical per-config launchd service and waits up to 60 seconds
232
+ for a fresh trace whose durable `metadata.lifecycle.startupCompleted` proof is
233
+ true. The worker publishes that proof only after channels, memory rituals, and
234
+ final memory-health work complete; later trace refreshes change the diagnostic
235
+ `metadata.reason` without revoking readiness. Once ready, init prints the manual
236
+ continuation: edit `mono-agent.config.json` or `IDENTITY.md`, run
237
+ `mono-agent validate`, restart, and open the ordinary TUI. A readiness timeout
238
+ preserves the committed files, then unloads the worker plus scheduled
239
+ maintenance and removes their definitions only when stopped state is proven. If
240
+ cleanup cannot be proven, the command says that a process may still be running
241
+ and prints exact `start`, `status`, and `logs --follow` recovery commands plus
242
+ log paths. On Linux the next steps use the systemd background service and
243
+ ordinary TUI; platforms without a background backend use foreground start. Any
244
+ flag or non-TTY invocation remains scaffold-only and never starts a process.
188
245
 
189
246
  ### Managed skills and documentation companion
190
247
 
191
- Every scaffold selects versioned `mono-agent-configure` and `mono-agent-memory`
192
- skills from `./skills` with index disclosure. `ReadSkill` remains separate from
193
- action-tool policy. `mono-agent install-skill --project --check|--update` reports
194
- version/hash drift and refreshes only unchanged managed copies with backups; a
195
- canonical owner-only non-symlink parent chain, per-project owner lock, and
196
- compare-and-swap activation prevent outside or concurrent
197
- operator edits from being overwritten, and a partial activation restores only
198
- files that still equal the managed bytes it wrote.
199
- The persistent SELF-CONFIG workflow guidance is managed-skill version `1.2.0`.
200
- Existing unchanged copies are reported as stale and are never rewritten on TUI
201
- startup; run `mono-agent install-skill --project --update` explicitly to refresh them.
248
+ Every scaffold selects the versioned `mono-agent-memory` skill from `./skills`
249
+ with index disclosure. `ReadSkill` remains separate from action-tool policy.
250
+ `mono-agent install-skill --project --check|--update` reports version/hash drift
251
+ and refreshes only unchanged managed copies with backups; a canonical owner-only
252
+ non-symlink parent chain, per-project owner lock, and compare-and-swap activation
253
+ prevent outside or concurrent operator edits from being overwritten, and a
254
+ partial activation restores only files that still equal the managed bytes it
255
+ wrote. Bundle version `2.0.0` retires `mono-agent-configure`: runtime loading
256
+ ignores that exact selected name and validation reports it as non-fatal waiting,
257
+ while any other missing selected skill remains an error. Project check reports
258
+ four retirement states. Project update removes a retired manifest entry and
259
+ deletes its file only when the entry proves ownership and its bytes still match;
260
+ modified and colliding copies fail closed, and retirement participates in the
261
+ same lock, backup, and rollback transaction as the memory update.
202
262
 
203
263
  Harness-mode `mono-agent install-skill` also pairs the exact matching
204
264
  `@mono-agent/docs-mcp` version with available selected Codex and Claude Code
@@ -209,43 +269,6 @@ transactional; an unrelated entry named `mono-agent-docs` is never overwritten,
209
269
  including with `--force`. Project `--check` / `--update` mode does not touch
210
270
  harness MCP configuration.
211
271
 
212
- ### Conversational self-configuration
213
-
214
- In the separate, visibly marked **SELF-CONFIG** session only, the background app injects proposal-only
215
- `ProposeAgentConfiguration`. The opening message shows a user-led map of identity/knowledge,
216
- runtime/models, skills/tools/MCP/plugins, memory, channels/APIs/A2A, automation,
217
- security, observability/operations, and acceptance criteria, then builds the chosen
218
- workflow conversationally. It says never to enter secrets and to expect a separate
219
- host approval before anything changes. Approval, rejection, a proposal-free turn,
220
- `done`, and `no changes` all keep SELF-CONFIG active; only `/quit`, `/exit`, or
221
- double `ctrl+c` exits the session, and quitting leaves the background agent running.
222
- The host accepts only a fail-closed low-risk
223
- allowlist: public name; effort, turn/session UX; selected project skills and
224
- disclosure; memory size or MemoryRecall enablement; semantic tool-policy
225
- tightening; and the separately validated Role body. Every path, memory-tier or
226
- capture-cost change, runtime/provider route, channel/proactive/plugin, MCP,
227
- exporter, embeddings/LLM endpoint, sandbox/network field, secret, and unknown
228
- future field is handed to the explicit guided flow. It canonicalizes
229
- config/Identity/state paths without following symlink parents, stages and
230
- fsyncs replacements, then performs the final source comparison and rename as
231
- one non-yielding commit step under an owner-only transaction lock. Separate TUI
232
- confirmation, failure-atomic config/Role rollback compensation, rollback
233
- evidence, a successful managed restart, and a fresh ready trace source remain mandatory. Configuration turns replace
234
- the ordinary tool/MCP policy with `ReadSkill`, `MemoryRecall`, and the proposal
235
- tool only. Pure direct-Codex chains use its native read-only plan posture;
236
- mixed chains keep the finite proposal surface so a route that cannot represent
237
- it cannot widen authority. Direct OpenCode cannot receive the host-owned MCP
238
- proposal capability: a direct-OpenCode primary is routed through a configured
239
- proposal-capable fallback, while a direct-OpenCode fallback makes self-configuration
240
- unavailable with explicit remediation. The approval card shows
241
- every full, untruncated JSON patch value and pages through the exact Role body
242
- while keeping Reject/Approve reachable, and rejects
243
- terminal-control or bidi-control review text before displaying it. The configuration
244
- conversation id stays stable across incremental checkpoints and verified restarts;
245
- each settled turn receives a fresh opaque proposal capability plus a safe host-outcome
246
- summary. Fast follow-up text remains in the editor until settlement and is never sent
247
- as ordinary chat or to a stale endpoint. Remote/proactive channels never receive this tool.
248
-
249
272
  ### Managed background runtime
250
273
 
251
274
  Before the first macOS background launch, the CLI copies the exact package and
@@ -285,8 +308,8 @@ login or reboot. A loaded v1 proof is treated as one-time drift and republished
285
308
  by the recovery controller.
286
309
  A managed worker freezes the proven config, Identity, optional Soul, and MCP authority
287
310
  file into private read-only copies before app/channel loading, while trace metadata continues to
288
- name the canonical config. Readiness requires one live launchd-owned trace PID,
289
- the exact durable snapshot, and, for configuration, a reachable TUI endpoint.
311
+ name the canonical config. Readiness requires one live launchd-owned trace PID and
312
+ the exact durable snapshot.
290
313
  Stop succeeds only after both launchd unload and worker death are proven.
291
314
 
292
315
  ### Validation, recovery, and managed logs
@@ -298,10 +321,11 @@ names its full closure id plus sanitized install metadata; other executions repo
298
321
  `dev (unmanaged)`. With `--consumer`, this remains the validator CLI's provenance,
299
322
  not an attestation of a separately running daemon.
300
323
 
301
- Its **Web search & fetch** section reports the resolved SearXNG backend and
324
+ Its **Web search & fetch** section reports the resolved search backend and
302
325
  static/browser extraction mode. With liveness enabled it performs one bounded
303
- JSON query against a configured loopback SearXNG endpoint and checks that an
304
- enabled browser renderer reports `agent-browser` 0.33.1 or newer. Start
326
+ JSON query against the selected SearXNG or Ollama endpoint and checks that an
327
+ enabled browser renderer reports `agent-browser` 0.33.1 or newer. Hosted Ollama
328
+ authentication is sent only to the exact official origin. Start
305
329
  preflight (`liveness: false`) skips both probes without changing structural
306
330
  validation.
307
331
 
@@ -434,26 +458,42 @@ verified turn. Missing Codex setup points to the official instructions at
434
458
  <https://developers.openai.com/codex/cli/>; the app never auto-installs it. The
435
459
  wizard offers browser callback and headless device-code login. Detected credentials
436
460
  skip redundant authentication but remain unverified until the exact route call
437
- successfully runs. Guided Pi setup covers Anthropic, GitHub Copilot, OpenAI Codex,
438
- and OpenCode-Go; other hand-authored Pi and local-provider configs remain compatible
461
+ successfully runs. Passive status treats refreshable OAuth expiry as present but
462
+ unverified and fails closed on unusable material or unsafe stores. The optional
463
+ provider-auth check operator runs one explicit target-only, bounded request per
464
+ displayed provider, records only fixed sanitized outcomes, and never probes from
465
+ a status read. Ordinary run evidence is generation-fenced before provider
466
+ execution: a target-store mutation invalidates already-running summaries and
467
+ their failover attempts, including when the surrounding persistence finishes
468
+ after logical cancellation or reports a post-install cleanup failure. Guided Pi
469
+ setup covers Anthropic, GitHub Copilot, OpenAI Codex, and OpenCode-Go; other
470
+ hand-authored Pi and local-provider configs remain compatible
439
471
  without being advertised as guided cloud integrations. Supported OAuth methods and
440
472
  the OpenCode-Go key flow come from the bundled upstream catalog;
441
473
  stale auth locks are repaired only when the recorded process is securely proven
442
474
  gone. The
443
- wizard keeps **Allow all tools** as its default. Pi/Claude flows disclose
444
- shell/file/web/channel effects and reconfirm an unsandboxed choice. Direct Codex
445
- fixes policy to effective allow-all (an omitted or wildcard-containing
446
- allowlist with no denied tools), uses its native network-off workspace sandbox,
447
- denies unattended escalations, and fails unexpected server requests promptly.
448
- Mixed chains are unrestricted only under explicit `runtime.routeSafety:
449
- "per-route-native"`, which isolates provider runtimes and applies a documented
450
- route-local contract. The default `uniform` mode keeps one common monotonic
451
- contract and rejects/skips routes that cannot represent it. Pi keeps mono-agent
452
- tool policy and optional SRT; Claude uses representable provider-native controls;
453
- direct Codex/OpenCode use provider-native safety plus effective allow-all. No route
454
- silently drops a required capability. Pi `pi:opencode-go:*` remains a Pi route.
455
- Direct OpenCode has the same omitted-or-wildcard/empty-deny requirement; restrictive static policies fail
456
- validation/runtime and an incompatible dynamic override is warned and ignored.
475
+ wizard keeps **Allow all tools** as its default, disclosing shell/file/web/channel
476
+ effects and reconfirming an unsandboxed choice. Every route is Pi-native, so one
477
+ common monotonic contract covers the whole chain and rejects or skips a route
478
+ that cannot represent it. Pi keeps mono-agent tool policy and optional SRT. No
479
+ route silently drops a required capability.
480
+
481
+ Every app-owned TUI/operator endpoint owns an in-memory provider-auth service
482
+ for the web console's Agent settings, with no additional configuration. Its
483
+ routes are keyless when the endpoint has no normal API key and otherwise require
484
+ that bearer. It reports only providers used by effective configured routes and
485
+ keeps credential detection distinct from a successful live request. GitHub
486
+ Copilot and OpenAI Codex use Pi's native device-code flow; Anthropic uses the
487
+ existing manual-code redirect callback; API-key providers use masked
488
+ provider-owned prompts. Returned credentials pass through the same owner-private,
489
+ cross-process-locked, sibling-preserving, no-clobber Pi-store transaction as
490
+ the CLI API-key flow. A valid repeated login replaces the current session only
491
+ after validation. Late provider work is discarded before promotion; a mutation
492
+ already in atomic promotion or cleanup drains before another writer starts. If
493
+ that drain exceeds two seconds, the fresh session fails closed with
494
+ `replacement_timeout`. Sessions, submitted values, URLs, and codes are never
495
+ written to agent history. The service covers `providers.piAuthPath` only, not
496
+ Codex CLI credentials.
457
497
 
458
498
  ### Run history
459
499
 
@@ -461,7 +501,7 @@ validation/runtime and an incompatible dynamic override is warned and ignored.
461
501
  allow-all on MCP-capable routes; a restrictive `tools.allowedTools` must name
462
502
  `RunHistory` explicitly (`run_history` remains a deprecated policy alias), and
463
503
  `disallowedTools` can remove it. Direct OpenCode and other MCP-incompatible
464
- routes suppress it. The agent-facing shorthand is `{}` to list recent runs,
504
+ routes suppress it. The agent-facing shorthand is `{}` to list recent settled runs,
465
505
  `{ "query": "topic terms" }` to search safe trigger and summary metadata,
466
506
  `{ "runId": "..." }` for a compact overview, and
467
507
  `{ "runId": "...", "cursor": "..." }` for the next timeline page. The
@@ -469,7 +509,11 @@ routes suppress it. The agent-facing shorthand is `{}` to list recent runs,
469
509
  compatible. List/search defaults to 5 results (maximum 10); timeline pages hold
470
510
  at most 10 entries and about 16 KiB. Each result includes tool-authored
471
511
  `navigation.guidance` and exact `navigation.nextActions[].arguments` for
472
- continuing exploration.
512
+ continuing exploration. For an unhinted request to pick up, continue, or
513
+ recover incomplete work, start with `{}`, select a `failed`, `cancelled`, or
514
+ `interrupted` candidate, and inspect its `runId`. That overview marks output as
515
+ incomplete evidence and returns a conditional exact `navigation.relatedTools`
516
+ handoff to follow only when `SessionHistory` is available.
473
517
  List and search read retained summaries once; search never reads event JSONL
474
518
  and matches all normalized terms only against sanitized trigger/user input,
475
519
  run id, dates, status/failure kind, source/detail, model, and effort. Daily
@@ -519,6 +563,14 @@ successful-turn commit. A lifecycle record may therefore exist without a
519
563
  canonical message-history entry. Stable conversation/run/tool-call keys and
520
564
  writer-assigned per-run start/end sequences make retries idempotent; process
521
565
  recovery closes dangling starts as `interrupted` without rerunning a tool.
566
+ Each client event waits at most 250 ms for foreground confirmation. If an
567
+ accepted write is still queued or syncing, the event records immutable
568
+ `persistence: "deferred"` metadata without an error code while the worker keeps
569
+ the real request alive. The harness drains those accepted writes before bounded
570
+ run finalization. `persisted` means the row committed before publication;
571
+ `failed` is reserved for a definitive writer rejection. A deferred run artifact
572
+ is not final storage evidence: after the run, `SessionHistory` is authoritative
573
+ for committed rows. All three event states keep `untrusted: true`.
522
574
  Arguments/results are securely pre-bounded, redacted, and byte-bounded, with truncation metadata and
523
575
  opaque artifact ids. Filesystem-shaped spans in object keys and string values use an opaque host-root token plus
524
576
  at most two non-sensitive trailing components, so commands and results remain
@@ -528,6 +580,33 @@ root, or private run path. Only regular files beneath the configured run-specifi
528
580
  outside or symlinked paths are dropped. Isolated/proactive
529
581
  runs persist but search excludes them unless explicitly requested.
530
582
 
583
+ Configured harness runs install the run-bound tool-output sink. When a tool
584
+ lifecycle record persists too, `SessionHistory` exposes only its opaque id and
585
+ current availability, never the host path or contents. The immediate truncation
586
+ summary still names a successfully saved path. These files contain raw,
587
+ untrusted data. The hourly artifact sweep removes eligible run directories by
588
+ the existing `artifacts.retention` age/count policy, with dry-run parity; it
589
+ protects directories projected from running or uncertain summaries and can
590
+ clean an aged orphan without a tool-history row. Recently modified directories
591
+ are held through the next hourly interval, even under count pressure, and are
592
+ revalidated before removal. Tool-history retention itself
593
+ still owns only its database records and tombstones. After file pruning,
594
+ `SessionHistory` recomputes the opaque reference as unavailable.
595
+
596
+ For tool evidence from a failed, cancelled, or interrupted `RunHistory` candidate, use
597
+ `{ "action": "search", "runIds": ["..."], "includeIsolated": true }` without
598
+ a `states` filter. If it returns no records, do not broaden into another run or
599
+ conversation. Each search result distinguishes the invocation `recordId` from
600
+ the terminal `resultRecordId`; follow its trusted navigation to inspect the
601
+ result first when present and the invocation when its arguments are needed.
602
+ The exact navigation retains `includeIsolated: true`, uses `chunkBytes: 8192`,
603
+ and gives the next exact `get` arguments for every cursor. A bounded search
604
+ preview is not the full record and cannot replace record-level inspection when
605
+ recovering interrupted work. This is read-only evidence recovery: it does not
606
+ resume provider state, replay tools, rerun work, or guarantee continuation from
607
+ the interrupted point. Continue as fresh work in the current run with currently
608
+ available tools and fresh verification.
609
+
531
610
  `{ "action": "search" }` returns at most 10 bounded previews with text,
532
611
  tool/state/run/time filters and a query-bound opaque cursor.
533
612
  `{ "action": "get", "recordId": "..." }` (or `toolCallId`) returns bounded
@@ -542,6 +621,7 @@ projection capped at 64 KiB including its truncation marker; warm provider resum
542
621
  continues natively and receives no replay. A zero-byte fresh sidecar is absent
543
622
  for automatic projection; another corrupt/unsafe projection emits a structured
544
623
  warning and continues the turn, while explicit SessionHistory reads fail closed.
624
+ Neither history tool resumes provider state or replays/reruns retained work.
545
625
  Lazy writer acquisition keeps one at-most-10-second restart-handoff attempt.
546
626
  After failure, writes from every already-created turn reuse that rejection and
547
627
  new turns fail immediately during an initial 30-second backoff. Each failed
@@ -577,13 +657,53 @@ terminal record in place. A newer tool-history schema hard-fails downgrade until
577
657
  persisted conversation state is purged; an older compatible version is reported
578
658
  as upgrade-pending for the next writer.
579
659
 
660
+ ### Memory evidence routing and chronological browsing
661
+
662
+ The configured host keeps four evidence sources distinct: the active
663
+ conversation for what was just said, `MemoryRecall` for a targeted durable fact
664
+ or decision, `MemoryJournal` for a broad retrospective over explicit local
665
+ calendar dates, and `RunHistory`/`SessionHistory` for exact execution evidence.
666
+ Unhinted interrupted-work recovery still begins with `RunHistory {}`.
667
+
668
+ `MemoryJournal` is request-scoped and read-only. It is offered only for a local
669
+ Lite, Journal, or BuJo store when `memory.recallTool.enabled` is on and normal
670
+ tool policy allows it. Supermemory has search but no chronological capability.
671
+ A first call requires `fromDate`, `throughDate`, and an IANA `timeZone`; the
672
+ inclusive range is capped at 31 calendar days. Pages default to 10 and cap at
673
+ 25 entries, 8 KiB projected data, and 2 KiB per entry text. The frozen snapshot
674
+ caps at 1,000 entries/2 MiB and continues only with its request-private authenticated,
675
+ run-bound cursor at the exact issued offset.
676
+ It returns curated daily-source provenance and lifecycle state, excludes raw
677
+ audit observations and dropped records, and labels content untrusted. A clean
678
+ empty range, unsupported composition, and backend failure remain distinct.
679
+
680
+ ### Durable memory writes
681
+
682
+ `Remember` gives the agent an explicit way to persist one stated fact, closing
683
+ the loop left by read-only `MemoryRecall`. It is request-scoped, deterministic,
684
+ and append-only, and it writes through the shared memory retrieval service so no
685
+ second store is opened.
686
+
687
+ Availability is deliberately narrow: a configured memory block with
688
+ `memory.rememberTool.enabled` left on, a store that affirms `supportsRemember()`
689
+ (read-only stores and external backends never do), and tool policy that allows
690
+ `Remember` — unlike `MemoryRecall`, this tool is allowlist-gated so writes can be
691
+ withheld without disabling recall.
692
+
693
+ Before anything is stored the host normalizes the text to exactly what will be
694
+ written and checks that against configured credential values, known token shapes,
695
+ credential assignments, and terminal/bidi controls. A match is rejected rather
696
+ than redacted, so a mangled value is never persisted behind a success result.
697
+
580
698
  ### Web conversation titles
581
699
 
582
700
  `SetConversationTitle` requires no config key. For an ordinary interactive web
583
701
  turn whose title is still automatic, the app supplies a request-scoped MCP tool
584
702
  that accepts one normalized title of at most 80 characters. Its model-facing
585
- guidance asks for a concise semantic title after the topic becomes clear and a
586
- new title only when the conversation materially changes direction. The web
703
+ guidance asks it to name the conversation as a whole and to keep refining that
704
+ name whenever a better whole-thread name emerges, never to use the title as a
705
+ status line for the step in progress. The tool result stays a proposal: the
706
+ console applies it out of band and may decline it. The web
587
707
  console applies successful tool results quietly while retaining the tool call in
588
708
  the collapsed Activity disclosure.
589
709
 
@@ -597,10 +717,19 @@ title remains the fallback.
597
717
 
598
718
  ### Channel interactions and conversation history
599
719
 
720
+ The configured agent preserves the harness's positive `importContext`
721
+ capability through root-ownership, monitor, process-job, posted-reply, reply-file,
722
+ and MCP-App decorators. The default durable store exposes it only when complete
723
+ batch retention and provider-state retirement or absence are provable. Slack's
724
+ posted-reply wrapper overlays destination history only on the leased Send view;
725
+ the canonical import itself stays scope-free.
726
+
600
727
  For missing context, the agent should use active conversation history first,
601
- `MemoryRecall` for intentionally captured durable facts, `RunHistory` for exact
602
- prior-run evidence, and `SessionHistory` for retained managed-tool calls and
603
- results. Answered or expired blocking `AskUser` exchanges
728
+ `MemoryRecall` for a targeted intentionally captured durable fact,
729
+ `MemoryJournal` for a broad explicit-period curated retrospective, `RunHistory`
730
+ for exact settled prior-run evidence (including failed/cancelled/interrupted
731
+ work), and `SessionHistory` for retained managed-tool calls and results.
732
+ Answered or expired blocking `AskUser` exchanges
604
733
  are written into the assistant history copy before the final response;
605
734
  cancelled asks are not journaled. The copy is explicitly labelled as untrusted
606
735
  historical data and bounded by newest whole interactions. If the newest valid
@@ -730,8 +859,8 @@ staging, current-run, or authorized in-flight content. Retried identities are
730
859
  deduplicated. A manifest
731
860
  that cannot accept its delivery-conversation binding becomes one bounded failed
732
861
  part while answer text and other valid parts survive. Terminal failure,
733
- cancellation, or missing run metadata removes uncommitted state. The sealed
734
- local self-configuration override excludes this publisher.
862
+ cancellation, or missing run metadata removes uncommitted state. An authenticated
863
+ authoritative request-tool override can exclude this publisher.
735
864
 
736
865
  Audit storage performs one root inventory for a process/root lifecycle, then
737
866
  maintains exact owner byte counts under a global append gate. Reclamation uses
@@ -764,8 +893,16 @@ ten-minute idle timeout. See
764
893
  [Reply files and MCP Apps](https://mono-agent-docs.vercel.app/tools/rich-replies/)
765
894
  for native channel behavior, fallbacks, browser security, and limits.
766
895
 
896
+ Successful cron answers suppressed by the shared notification classifier project
897
+ `NOTHING_TO_REPORT` as operator summary and detail text. Classification uses the
898
+ full stored answer before either byte limit, including a sentinel on the final
899
+ line of long narration. Agent SQLite and retained activity keep the original
900
+ text; failures and non-suppressed output retain their existing truncation rules.
901
+
767
902
  ## Architecture
768
903
 
904
+ Configured continuous sessions persist the requested primary model with their durable epoch. Per-model runtime factories are cached for the harness lifetime, and history retirement resolves the owning runtime. A model switch cold-seeds one new epoch; repeated overrides stay warm. Existing fallback and proactive-isolation policies continue to apply. See [session boundaries](../../docs/runtime/sessions-concurrency.md).
905
+
769
906
  ### Data flow
770
907
 
771
908
  `@mono-agent/agent-app` is the composition root. A running host follows this
@@ -803,7 +940,7 @@ path:
803
940
  | Channel integration | `channels.ts`, `channel-drivers/` | Built-in drivers plus config-loaded plugin resolution. |
804
941
  | Interaction and send tools | `interaction-bridge.ts`, `adapter-send-tools*.ts` | Structured `AskUser` state, channel sinks, progress, adapter-send tools, and bounded interaction-history projection. |
805
942
  | Operator CLI | `cli*.ts`, `jobs-command.ts`, `init.ts`, `doctor.ts`, `doctor-observability.ts`, `background*.ts`, `launchd*.ts`, `managed-web-logs.ts`, `web-*.ts` | Setup, focused validation sections, paired managed service/log lifecycle, process-job operation, and diagnostics. |
806
- | Host services | `run-history.ts`, `session-history.ts`, `conversation-title.ts`, `request-scoped-mcp.ts`, `process-jobs*.ts`, `continuation*.ts`, `memory-*.ts` | Shared request-scoped guards, bounded prior-run/tool-lifecycle evidence, automatic web conversation titles, local process-job ownership/wake/recovery, durable continuations, and memory operations. |
943
+ | Host services | `run-history.ts`, `session-history.ts`, `conversation-title.ts`, `request-scoped-mcp.ts`, `process-jobs*.ts`, `continuation*.ts`, `memory-*.ts` | Shared request-scoped guards, bounded prior-run/tool-lifecycle evidence, bounded local memory chronology, automatic web conversation titles, local process-job ownership/wake/recovery, durable continuations, and memory operations. |
807
944
 
808
945
  ## Public API
809
946
 
@@ -817,6 +954,7 @@ path:
817
954
  | Scaffold or validate an agent folder | `initMonoAgentFolder`, `validateMonoAgentFolder` |
818
955
  | Add bounded prior-run inspection | `createRunHistoryRuntimeExtension`, `isRunHistoryToolAllowed` |
819
956
  | Add bounded retained-tool inspection | `createSessionHistoryRuntimeExtension`, `isSessionHistoryToolAllowed` |
957
+ | Add bounded local memory chronology | `createMemoryJournalRuntimeExtension`, `isMemoryJournalToolAllowed`, `resolveMemoryJournalRange` |
820
958
  | Operate the CLI programmatically, including process jobs and the managed web lifecycle | `runCli`, `runJobsCommand`, `parseCliArgs`, `renderHelp` |
821
959
 
822
960
  The web maintenance controller and publication helpers remain private CLI
@@ -894,8 +1032,20 @@ IssueContinuationCapabilityInput
894
1032
  MANAGED_SRT_LOCK_SHA256
895
1033
  MANAGED_SRT_PACKAGE
896
1034
  MANAGED_SRT_VERSION
1035
+ MEMORY_JOURNAL_DEFAULT_PAGE_SIZE
1036
+ MEMORY_JOURNAL_ENTRY_TEXT_MAX_BYTES
1037
+ MEMORY_JOURNAL_MAX_PAGE_SIZE
1038
+ MEMORY_JOURNAL_MAX_RANGE_DAYS
1039
+ MEMORY_JOURNAL_MAX_SNAPSHOTS
1040
+ MEMORY_JOURNAL_MCP_SERVER_NAME
1041
+ MEMORY_JOURNAL_PAGE_MAX_BYTES
1042
+ MEMORY_JOURNAL_TOOL_NAME
897
1043
  ManagedSrtSetupOptions
898
1044
  ManagedSrtSetupResult
1045
+ MemoryJournalBinding
1046
+ MemoryJournalCapableStore
1047
+ MemoryJournalErrorCode
1048
+ MemoryJournalRuntimeExtensionOptions
899
1049
  MemoryRitualSchedule
900
1050
  MonoAgentApp
901
1051
  MonoAgentAppConfigInput
@@ -907,6 +1057,7 @@ PreflightResult
907
1057
  RUN_HISTORY_MCP_SERVER_NAME
908
1058
  RUN_HISTORY_TOOL_NAME
909
1059
  ResolvedExporter
1060
+ ResolvedMemoryJournalRange
910
1061
  RunContinuationCommandOptions
911
1062
  RunHistoryBinding
912
1063
  RunHistoryRuntimeExtension
@@ -952,6 +1103,8 @@ createConfiguredAgentResponder
952
1103
  createConfiguredAgentRuntime
953
1104
  createConfiguredMemory
954
1105
  createCronChannelDriver
1106
+ createMemoryJournalRuntimeExtension
1107
+ createMemoryJournalServer
955
1108
  createOpenAIApiChannelDriver
956
1109
  createRunHistoryRuntimeExtension
957
1110
  createRunHistoryServer
@@ -970,6 +1123,9 @@ isAppCoreConfigError
970
1123
  isColorEnabled
971
1124
  isContinuationMode
972
1125
  isContinuationState
1126
+ isMemoryJournalCapableStore
1127
+ isMemoryJournalToolAllowed
1128
+ isMemoryJournalToolPolicyName
973
1129
  isRunHistoryToolAllowed
974
1130
  isSessionHistoryToolAllowed
975
1131
  keyValue
@@ -990,6 +1146,7 @@ resolveAppTraceSourceId
990
1146
  resolveAppTraceSourceLabel
991
1147
  resolveAppTraceStaleAfterMs
992
1148
  resolveChannelDrivers
1149
+ resolveMemoryJournalRange
993
1150
  rule
994
1151
  runCli
995
1152
  runContinuationCommand
@@ -1023,6 +1180,11 @@ compose communication adapters; adapters never depend on it.
1023
1180
  `@mono-agent/agent-harness` and `@mono-agent/runtime-adapter`).
1024
1181
  - Multi-agent orchestration (owned by `@mono-agent/agent-orchestrator`).
1025
1182
 
1183
+ Opt in to metadata-only prompt-cache request fingerprints with
1184
+ `providers.piNative.promptCacheDiagnostics` (default `false`) or
1185
+ `MONO_AGENT_PI_PROMPT_CACHE_DIAGNOSTICS`. The offline reader is documented in
1186
+ [Prompt-cache measurement](https://mono-agent-docs.vercel.app/runtime/prompt-cache-measurement/).
1187
+
1026
1188
  ## Related Documentation
1027
1189
 
1028
1190
  - [Quickstart](https://mono-agent-docs.vercel.app/getting-started/quickstart/)
@@ -53,7 +53,7 @@ export interface TelegramSendToolSettings {
53
53
  export interface AskUserToolSettings {
54
54
  readonly bridgeUrl: string;
55
55
  readonly bridgeToken: string;
56
- readonly timeoutMs: number;
56
+ readonly timeoutMs: number | null;
57
57
  readonly producerConversationId?: string;
58
58
  readonly interactionConversationId?: string;
59
59
  readonly runId?: string;
@@ -89,6 +89,7 @@ export interface AdapterSendToolsDeliveryHistoryCapabilityIssuer {
89
89
  export interface AdapterSendToolsRuntimeExtension {
90
90
  readonly runtimeOptions: {
91
91
  readonly mcpServers: Record<string, unknown>;
92
+ readonly mcpCallNoTotalTimeoutTools?: readonly string[];
92
93
  };
93
94
  readonly cleanup: () => Promise<void>;
94
95
  readonly settleCleanup?: () => Promise<void>;
@@ -151,7 +152,7 @@ export interface AdapterSendToolsChildContext {
151
152
  export interface AdapterSendToolsInteractionEnv {
152
153
  readonly bridgeUrl: string;
153
154
  readonly bridgeToken: string;
154
- readonly timeoutMs: number;
155
+ readonly timeoutMs: number | null;
155
156
  }
156
157
  export declare function adapterSendToolsMcpEnv(configPath: string, allowedTools: readonly string[], context?: AdapterSendToolsChildContext, interaction?: AdapterSendToolsInteractionEnv): Record<string, string>;
157
158
  export interface AdapterSendToolsChildConfig {