@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
@@ -1,4 +1,4 @@
1
- import { ALLOW_ALL_TOOLS, CONFIG_ENV_KEYS, EFFORT_LEVELS, MEMORY_BACKENDS, MEMORY_EMBEDDINGS_PROVIDERS, MEMORY_LLM_PROVIDERS, MEMORY_MODES, MEMORY_WRITE_MODES, MonoAgentConfigError, ROUTE_SAFETY_MODES, } from "@mono-agent/config";
1
+ import { ALLOW_ALL_TOOLS, CONFIG_ENV_KEYS, EFFORT_LEVELS, MEMORY_BACKENDS, MEMORY_EMBEDDINGS_PROVIDERS, MEMORY_LLM_PROVIDERS, MEMORY_MODES, MEMORY_WRITE_MODES, MonoAgentConfigError, } from "@mono-agent/config";
2
2
  import { PI_TRANSPORTS, SANDBOX_FALLBACKS, SANDBOX_MODES, SANDBOX_NETWORK_MODES, } from "@mono-agent/runtime-adapter";
3
3
  import { CRON_CONFIG_FIELDS } from "@mono-agent/cron-adapter";
4
4
  import { OPENAI_API_CONFIG_FIELDS } from "@mono-agent/openai-api-adapter";
@@ -88,7 +88,7 @@ const APP_FIELDS = [
88
88
  {
89
89
  jsonPath: "processJobs.maxChainDepth", env: "--", type: "integer",
90
90
  defaultLabel: "4", defaultValue: 4, example: 4,
91
- description: "Maximum host-owned background wake chain depth (compiled cap 8).",
91
+ description: "Maximum host-owned background wake chain depth (compiled cap 64).",
92
92
  },
93
93
  {
94
94
  jsonPath: "processJobs.retention.maxRecords", env: "--", type: "integer",
@@ -105,6 +105,76 @@ const APP_FIELDS = [
105
105
  defaultLabel: "268435456", defaultValue: 268_435_456, example: 268_435_456,
106
106
  description: "Aggregate retained terminal output artifact budget (compiled cap 1 GiB).",
107
107
  },
108
+ {
109
+ jsonPath: "monitors.enabled", env: "--", type: "boolean",
110
+ defaultLabel: "false", defaultValue: false, example: true,
111
+ description: "Opt in to the Pi-native Monitor/MonitorStop tools. Monitors are a streaming class of the process-job substrate and additionally require processJobs.enabled; wake delivery supports Telegram, Slack, and existing web conversations.",
112
+ },
113
+ {
114
+ jsonPath: "monitors.maxActive", env: "--", type: "integer",
115
+ defaultLabel: "8", defaultValue: 8, example: 8,
116
+ description: "Maximum simultaneously running monitors across every conversation, counted independently of processJobs.maxConcurrent (compiled cap 32).",
117
+ },
118
+ {
119
+ jsonPath: "monitors.maxActivePerConversation", env: "--", type: "integer",
120
+ defaultLabel: "2", defaultValue: 2, example: 3,
121
+ description: "Maximum simultaneously running monitors for one conversation (compiled cap 8).",
122
+ },
123
+ {
124
+ jsonPath: "monitors.maxRuntimeMs", env: "--", type: "integer",
125
+ defaultLabel: "3600000", defaultValue: 3_600_000, example: 3_600_000,
126
+ description: "Ceiling for a timed monitor; Monitor.timeout_ms may lower it, never raise it (compiled cap 1 hour).",
127
+ },
128
+ {
129
+ jsonPath: "monitors.persistentMaxRuntimeMs", env: "--", type: "integer",
130
+ defaultLabel: "86400000", defaultValue: 86_400_000, example: 43_200_000,
131
+ description: "Ceiling for a persistent monitor, which ignores timeout_ms (compiled cap 24 hours).",
132
+ },
133
+ {
134
+ jsonPath: "monitors.coalesceMs", env: "--", type: "integer",
135
+ defaultLabel: "200", defaultValue: 200, example: 200,
136
+ description: "Window over which stdout lines are batched into one event wake (compiled cap 5000).",
137
+ },
138
+ {
139
+ jsonPath: "monitors.maxWakeIntervalMs", env: "--", type: "integer",
140
+ defaultLabel: "300000", defaultValue: 300_000, example: 60_000,
141
+ description: "Ceiling for Monitor.min_wake_interval_ms; the receipt reports the clamped effective interval (compiled cap 300000).",
142
+ },
143
+ {
144
+ jsonPath: "monitors.maxBatchLines", env: "--", type: "integer",
145
+ defaultLabel: "200", defaultValue: 200, example: 200,
146
+ description: "Maximum lines carried by one event batch; older lines are dropped and counted (compiled cap 2000).",
147
+ },
148
+ {
149
+ jsonPath: "monitors.maxBatchBytes", env: "--", type: "integer",
150
+ defaultLabel: "65536", defaultValue: 65_536, example: 65_536,
151
+ description: "Maximum bytes carried by one event batch; older lines are dropped and counted (compiled cap 1 MiB).",
152
+ },
153
+ {
154
+ jsonPath: "monitors.maxLineBytes", env: "--", type: "integer",
155
+ defaultLabel: "4096", defaultValue: 4_096, example: 4_096,
156
+ description: "Per-event line clamp applied after redaction (compiled cap 64 KiB).",
157
+ },
158
+ {
159
+ jsonPath: "monitors.maxChainDepth", env: "--", type: "integer",
160
+ defaultLabel: "4", defaultValue: 4, example: 4,
161
+ description: "Maximum host-owned monitor wake chain depth (compiled cap 64).",
162
+ },
163
+ {
164
+ jsonPath: "monitors.rateLimit.windowMs", env: "--", type: "integer",
165
+ defaultLabel: "1000", defaultValue: 1_000, example: 1_000,
166
+ description: "Length of one rate-limit accounting window (compiled cap 60000).",
167
+ },
168
+ {
169
+ jsonPath: "monitors.rateLimit.maxLinesPerWindow", env: "--", type: "integer",
170
+ defaultLabel: "200", defaultValue: 200, example: 200,
171
+ description: "Lines per window above which a window counts as over budget (compiled cap 20000).",
172
+ },
173
+ {
174
+ jsonPath: "monitors.rateLimit.sustainedWindows", env: "--", type: "integer",
175
+ defaultLabel: "5", defaultValue: 5, example: 5,
176
+ description: "Consecutive over-budget windows that stop a monitor with rate_limited and one terminal wake (compiled cap 60).",
177
+ },
108
178
  {
109
179
  jsonPath: "interaction.bridge.host",
110
180
  env: "MONO_AGENT_INTERACTION_BRIDGE_HOST",
@@ -130,7 +200,8 @@ const APP_FIELDS = [
130
200
  defaultLabel: "600000",
131
201
  defaultValue: 600_000,
132
202
  example: 600_000,
133
- description: "Maximum wait for one AskUser interaction (one to five questions).",
203
+ nullable: true,
204
+ description: "Maximum wait for one AskUser interaction (one to five questions); set null to disable automatic expiry.",
134
205
  },
135
206
  {
136
207
  jsonPath: "interaction.progress.enabled",
@@ -383,6 +454,7 @@ function referenceField(input) {
383
454
  defaultLabel: input.defaultLabel,
384
455
  example: input.example,
385
456
  description: input.description,
457
+ ...(input.nullable === true ? { nullable: true } : {}),
386
458
  ...(input.defaultValue === undefined ? {} : { defaultValue: input.defaultValue }),
387
459
  ...(input.secret === true ? { secret: true } : {}),
388
460
  };
@@ -402,6 +474,7 @@ export function buildMonoAgentConfigSchema() {
402
474
  setRequired(root, ["context"], ["identityPath"]);
403
475
  setMemoryTierSchema(root);
404
476
  setProcessJobsSchema(root);
477
+ setMonitorsSchema(root);
405
478
  setContinuationSchema(root);
406
479
  setStructuredAppSchemas(root);
407
480
  setRemovedConfigSchemas(root);
@@ -448,7 +521,7 @@ function setProcessJobsSchema(root) {
448
521
  maxQueueAgeMs: { type: "integer", minimum: 1, maximum: 3_600_000, default: 300_000 },
449
522
  maxOutputBytes: { type: "integer", minimum: 1, maximum: 8_388_608, default: 1_048_576 },
450
523
  previewChars: { type: "integer", minimum: 1, maximum: 8_000, default: 2_000 },
451
- maxChainDepth: { type: "integer", minimum: 1, maximum: 8, default: 4 },
524
+ maxChainDepth: { type: "integer", minimum: 1, maximum: 64, default: 4 },
452
525
  retention: {
453
526
  type: "object",
454
527
  additionalProperties: false,
@@ -461,6 +534,34 @@ function setProcessJobsSchema(root) {
461
534
  },
462
535
  };
463
536
  }
537
+ function setMonitorsSchema(root) {
538
+ root.monitors = {
539
+ type: "object",
540
+ additionalProperties: false,
541
+ properties: {
542
+ enabled: { type: "boolean", default: false },
543
+ maxActive: { type: "integer", minimum: 1, maximum: 32, default: 8 },
544
+ maxActivePerConversation: { type: "integer", minimum: 1, maximum: 8, default: 2 },
545
+ maxRuntimeMs: { type: "integer", minimum: 1, maximum: 3_600_000, default: 3_600_000 },
546
+ persistentMaxRuntimeMs: { type: "integer", minimum: 1, maximum: 86_400_000, default: 86_400_000 },
547
+ coalesceMs: { type: "integer", minimum: 1, maximum: 5_000, default: 200 },
548
+ maxBatchLines: { type: "integer", minimum: 1, maximum: 2_000, default: 200 },
549
+ maxBatchBytes: { type: "integer", minimum: 1, maximum: 1_048_576, default: 65_536 },
550
+ maxLineBytes: { type: "integer", minimum: 1, maximum: 65_536, default: 4_096 },
551
+ maxWakeIntervalMs: { type: "integer", minimum: 1, maximum: 300_000, default: 300_000 },
552
+ maxChainDepth: { type: "integer", minimum: 1, maximum: 64, default: 4 },
553
+ rateLimit: {
554
+ type: "object",
555
+ additionalProperties: false,
556
+ properties: {
557
+ windowMs: { type: "integer", minimum: 1, maximum: 60_000, default: 1_000 },
558
+ maxLinesPerWindow: { type: "integer", minimum: 1, maximum: 20_000, default: 200 },
559
+ sustainedWindows: { type: "integer", minimum: 1, maximum: 60, default: 5 },
560
+ },
561
+ },
562
+ },
563
+ };
564
+ }
464
565
  /**
465
566
  * Complex app-owned config is modeled here instead of left as an open object.
466
567
  * This keeps editor completion, generated docs, and the runtime unknown-key
@@ -487,37 +588,15 @@ function setStructuredAppSchemas(root) {
487
588
  });
488
589
  setSchemaPath(root, ["providers", "local"], {
489
590
  type: "array",
490
- items: {
491
- type: "object",
492
- additionalProperties: false,
493
- required: ["id", "type"],
494
- properties: {
495
- id: { type: "string", minLength: 1 },
496
- type: { enum: ["ollama", "lmstudio", "openai_compat"] },
497
- baseUrl: { type: "string" },
498
- enabled: { type: "boolean" },
499
- trustPublicUrl: { type: "boolean" },
500
- apiKey: { type: "string" },
501
- apiKeyEnv: { type: "string" },
502
- models: {
503
- type: "array",
504
- items: {
505
- type: "object",
506
- additionalProperties: false,
507
- required: ["name"],
508
- properties: {
509
- name: { type: "string", minLength: 1 },
510
- alias: { type: "string", minLength: 1 },
511
- displayName: { type: "string", minLength: 1 },
512
- enabled: { type: "boolean" },
513
- capabilities: { type: "object", additionalProperties: true },
514
- pricing: { type: "object", additionalProperties: true },
515
- },
516
- },
517
- },
518
- },
519
- },
591
+ items: providerEntrySchema(true),
520
592
  });
593
+ const providersSchema = schemaAt(root, ["providers"]);
594
+ if (providersSchema !== undefined) {
595
+ // Provider ids are intentionally open because pi-ai and self-hosted
596
+ // endpoints own that namespace. The entry itself remains typed and closed,
597
+ // unlike plugin payloads whose complete nested shape is package-owned.
598
+ providersSchema.additionalProperties = providerEntrySchema(false);
599
+ }
521
600
  setSchemaPath(root, ["cron", "jobs"], {
522
601
  type: "array",
523
602
  items: cronJobSchema(),
@@ -580,6 +659,39 @@ function setStructuredAppSchemas(root) {
580
659
  },
581
660
  });
582
661
  }
662
+ function providerEntrySchema(includeId) {
663
+ return {
664
+ type: "object",
665
+ additionalProperties: false,
666
+ ...(includeId ? { required: ["id", "type"] } : {}),
667
+ properties: {
668
+ ...(includeId ? { id: { type: "string", minLength: 1 } } : {}),
669
+ type: { enum: ["ollama", "lmstudio", "openai_compat"] },
670
+ baseUrl: { type: "string" },
671
+ enabled: { type: "boolean" },
672
+ trustPublicUrl: { type: "boolean" },
673
+ apiKey: { type: "string" },
674
+ apiKeyEnv: { type: "string" },
675
+ maxAdvertisedModels: { type: "integer", minimum: 1, maximum: 200, default: 100 },
676
+ models: {
677
+ type: "array",
678
+ items: {
679
+ type: "object",
680
+ additionalProperties: false,
681
+ required: ["name"],
682
+ properties: {
683
+ name: { type: "string", minLength: 1 },
684
+ alias: { type: "string", minLength: 1 },
685
+ displayName: { type: "string", minLength: 1 },
686
+ enabled: { type: "boolean" },
687
+ capabilities: { type: "object", additionalProperties: true },
688
+ pricing: { type: "object", additionalProperties: true },
689
+ },
690
+ },
691
+ },
692
+ },
693
+ };
694
+ }
583
695
  function cronJobSchema() {
584
696
  return {
585
697
  type: "object",
@@ -1028,6 +1140,9 @@ export function schemaForField(field) {
1028
1140
  schema.type = "string";
1029
1141
  break;
1030
1142
  }
1143
+ if (field.nullable === true) {
1144
+ schema.type = [schema.type, "null"];
1145
+ }
1031
1146
  if (field.defaultValue !== undefined) {
1032
1147
  schema.default = field.defaultValue;
1033
1148
  }
@@ -1039,9 +1154,6 @@ export function schemaForField(field) {
1039
1154
  else if (field.jsonPath === "runtime.effort") {
1040
1155
  schema.enum = EFFORT_LEVELS;
1041
1156
  }
1042
- else if (field.jsonPath === "runtime.routeSafety") {
1043
- schema.enum = ROUTE_SAFETY_MODES;
1044
- }
1045
1157
  else if (field.jsonPath === "memory.backend") {
1046
1158
  schema.enum = MEMORY_BACKENDS;
1047
1159
  }
@@ -1071,8 +1183,11 @@ export function schemaForField(field) {
1071
1183
  else if (field.jsonPath === "providers.piNative.transport") {
1072
1184
  schema.enum = PI_TRANSPORTS;
1073
1185
  }
1186
+ else if (field.jsonPath === "tools.web.coordination") {
1187
+ schema.enum = ["process", "host"];
1188
+ }
1074
1189
  else if (field.jsonPath === "tools.web.search.backend") {
1075
- schema.enum = ["auto", "searxng", "codex", "keyless"];
1190
+ schema.enum = ["auto", "searxng", "ollama", "codex", "keyless"];
1076
1191
  }
1077
1192
  else if (field.jsonPath === "tools.web.fetch.render") {
1078
1193
  schema.enum = ["never", "auto"];
@@ -1095,6 +1210,7 @@ export function schemaForField(field) {
1095
1210
  "runtime.retry.primaryAttempts": { minimum: 1, maximum: 10 },
1096
1211
  "runtime.retry.backoffMs": { minimum: 0, maximum: 60_000 },
1097
1212
  "runtime.retry.maxBackoffMs": { minimum: 0, maximum: 300_000 },
1213
+ "tools.web.search.maxRequestsPerRun": { minimum: 1, maximum: 20 },
1098
1214
  };
1099
1215
  const bounds = numericBounds[field.jsonPath];
1100
1216
  if (bounds !== undefined) {
@@ -1181,6 +1297,9 @@ function inferType(id) {
1181
1297
  if (id === "subagents") {
1182
1298
  return "object";
1183
1299
  }
1300
+ if (id === "providers") {
1301
+ return "object";
1302
+ }
1184
1303
  if (id === "providers.piNative.transport") {
1185
1304
  return "string";
1186
1305
  }
@@ -1195,19 +1314,23 @@ function inferType(id) {
1195
1314
  ].includes(id)) {
1196
1315
  return "integer";
1197
1316
  }
1317
+ if (id === "providers.piNative.promptCacheDiagnostics")
1318
+ return "boolean";
1198
1319
  if (id === "runtime.compaction.fixedOverheadEnabled") {
1199
1320
  return "boolean";
1200
1321
  }
1322
+ if (id === "tools.web.search.maxRequestsPerRun")
1323
+ return "integer";
1201
1324
  if (id.endsWith("Models") || id.endsWith("Tools") || id.endsWith("Servers") || id.endsWith("Roots") || id.endsWith("allowlist") || id.endsWith("denyWrite") || id.endsWith("selectedSkills") || id.endsWith("Ids") || id.endsWith("Aliases")) {
1202
1325
  return "string[]";
1203
1326
  }
1204
- if (id.endsWith("enabled") || id.endsWith("allowAllChats") || id.endsWith("allowAllChannels") || id.endsWith("allowNonLoopback") || id.endsWith("dryRun") || id.endsWith("globalDiscovery") || id.endsWith("rolloverNotice") || id.endsWith("isolateProactive") || id.endsWith("unsafeAllowHostProcess") || id.endsWith("trace") || id.endsWith("exposeMcpServer")) {
1327
+ if (id.endsWith("enabled") || id.endsWith("allowAllChats") || id.endsWith("allowAllChannels") || id.endsWith("allowNonLoopback") || id.endsWith("trustPublicUrl") || id.endsWith("dryRun") || id.endsWith("globalDiscovery") || id.endsWith("rolloverNotice") || id.endsWith("isolateProactive") || id.endsWith("unsafeAllowHostProcess") || id.endsWith("trace") || id.endsWith("exposeMcpServer")) {
1205
1328
  return "boolean";
1206
1329
  }
1207
1330
  if (/(Ms|Bytes|Count|Days|Turns|Retries|Attempts|Delay|port|dim|threshold|Hours|Runs)$/iu.test(id) || id.endsWith(".port")) {
1208
1331
  return "integer";
1209
1332
  }
1210
- if (id === "providers.local" || id === "observability.exporters") {
1333
+ if (id === "observability.exporters") {
1211
1334
  return "array";
1212
1335
  }
1213
1336
  return "string";
@@ -1237,9 +1360,7 @@ function defaultLabelFor(id) {
1237
1360
  }
1238
1361
  function defaultValueFor(id) {
1239
1362
  const defaults = {
1240
- "runtime.fallbackModels": [],
1241
1363
  "runtime.fallbacks": [],
1242
- "runtime.routeSafety": "uniform",
1243
1364
  subagents: { enabled: false },
1244
1365
  "slack.resolveUserNames": true,
1245
1366
  "slack.resolveChannelNames": true,
@@ -1254,7 +1375,6 @@ function defaultValueFor(id) {
1254
1375
  "runtime.compaction.enabled": true,
1255
1376
  "runtime.compaction.triggerRatio": 0.70,
1256
1377
  "runtime.compaction.fixedOverheadEnabled": true,
1257
- "runtime.executionMode": "inferred",
1258
1378
  "runtime.workspace": ".",
1259
1379
  "runtime.session.mode": "continuous",
1260
1380
  "runtime.session.idleTimeoutMs": 1_800_000,
@@ -1276,6 +1396,7 @@ function defaultValueFor(id) {
1276
1396
  "memory.llm.trace": true,
1277
1397
  "memory.llm.timeoutMs": 60_000,
1278
1398
  "memory.recallTool.enabled": true,
1399
+ "memory.rememberTool.enabled": true,
1279
1400
  "memory.consolidation.enabled": true,
1280
1401
  "memory.consolidation.cron": "0 */2 * * *",
1281
1402
  "tools.allowedTools": [ALLOW_ALL_TOOLS],
@@ -1283,7 +1404,11 @@ function defaultValueFor(id) {
1283
1404
  "tools.mcpRequestContextServers": [],
1284
1405
  "tools.mcpCallTimeoutMs": 120_000,
1285
1406
  "tools.mcpCallMaxTotalTimeoutMs": 2_700_000,
1407
+ "tools.web.coordination": "process",
1286
1408
  "tools.web.search.backend": "auto",
1409
+ "tools.web.search.maxRequestsPerRun": 4,
1410
+ "tools.web.search.ollama.baseUrl": "http://127.0.0.1:11434",
1411
+ "tools.web.search.ollama.trustPublicUrl": false,
1287
1412
  "tools.web.search.codex.model": "gpt-5.6-luna",
1288
1413
  "tools.web.fetch.render": "never",
1289
1414
  "tools.web.fetch.browserCommand": "agent-browser",
@@ -1301,6 +1426,7 @@ function defaultValueFor(id) {
1301
1426
  "traceability.heartbeatMs": 10_000,
1302
1427
  "traceability.staleAfterMs": 30_000,
1303
1428
  "traceability.globalDiscovery": true,
1429
+ "providers.piNative.promptCacheDiagnostics": false,
1304
1430
  "providers.piNative.piMaxRetries": 2,
1305
1431
  "providers.piNative.maxRetryDelayMs": 60_000,
1306
1432
  "providers.piNative.transport": "auto",
@@ -1343,13 +1469,11 @@ function defaultValueFor(id) {
1343
1469
  function exampleFor(id) {
1344
1470
  const examples = {
1345
1471
  "agent.name": "Research Partner",
1346
- "runtime.model": "codex:gpt-5.6-terra",
1347
- "runtime.fallbackModels": ["pi:ollama:gemma4:31b"],
1472
+ "runtime.model": "openai-codex:gpt-5.6-terra",
1348
1473
  "runtime.fallbacks": [
1349
- { model: "codex:gpt-5.6-sol" },
1350
- { model: "pi:openai-codex:gpt-5.6-terra", effort: "high" },
1474
+ { model: "openai-codex:gpt-5.6-sol" },
1475
+ { model: "anthropic:claude-sonnet-4-6", effort: "high" },
1351
1476
  ],
1352
- "runtime.routeSafety": "per-route-native",
1353
1477
  subagents: {
1354
1478
  enabled: true,
1355
1479
  maxConcurrent: 5,
@@ -1376,12 +1500,20 @@ function exampleFor(id) {
1376
1500
  "memory.embeddings.provider": "ollama",
1377
1501
  "memory.embeddings.model": "nomic-embed-text:v1.5",
1378
1502
  "memory.llm.provider": "agent-host",
1379
- "memory.llm.model": "pi:openai-codex:gpt-5.6-terra",
1503
+ "memory.llm.model": "openai-codex:gpt-5.6-terra",
1380
1504
  "sandbox.mode": "native",
1381
1505
  "traceability.sourceId": "my-agent",
1382
1506
  "traceability.sourceLabel": "My Agent",
1383
1507
  "tools.mcpRequestContextServers": ["transcribe"],
1384
- "tools.web.search.endpoint": "http://127.0.0.1:8088",
1508
+ "tools.filesystem.readableRoots": ["/srv/shared/reference"],
1509
+ "tools.filesystem.writableRoots": ["/srv/shared/output"],
1510
+ "tools.web.search.searxng.endpoint": "http://127.0.0.1:8088",
1511
+ "tools.web.search.ollama.baseUrl": "https://ollama.com",
1512
+ "tools.web.search.ollama.apiKeyEnv": "OLLAMA_API_KEY",
1513
+ providers: {
1514
+ "openai-codex": {},
1515
+ ollama: { baseUrl: "http://localhost:11434" },
1516
+ },
1385
1517
  "providers.piAuthPath": "~/.pi/agent/auth.json",
1386
1518
  "providers.piNative.transport": "sse",
1387
1519
  "telegram.botToken": "env:MONO_AGENT_TELEGRAM_BOT_TOKEN",
@@ -1423,14 +1555,25 @@ function exampleFor(id) {
1423
1555
  return String(defaultValueFor(id) ?? "example");
1424
1556
  }
1425
1557
  function descriptionFor(id) {
1558
+ if (id === "providers.piNative.promptCacheDiagnostics")
1559
+ return "Emit metadata-only prompt-cache request fingerprints into run artifacts; never prompt text, tool arguments, cache keys, endpoints or credentials.";
1426
1560
  const section = id.split(".")[0] ?? "config";
1427
1561
  const name = id.split(".").slice(1).join(".");
1562
+ if (id === "providers") {
1563
+ return "Provider-id map that widens or narrows the selectable Pi model catalog; MONO_AGENT_PROVIDERS_JSON projects the whole object because provider ids are dynamic.";
1564
+ }
1428
1565
  if (id === "tui.requestToolEnvironment.allowedKeys") {
1429
1566
  return "Explicit environment-variable names an ACP request may pass to Bash, Exec, and nested subagents for one turn. Disabled when empty; dangerous process-loader, shell-startup, home, temp, and PATH keys are rejected.";
1430
1567
  }
1431
1568
  if (id === "tui.requestToolEnvironment.allowPathPrepend") {
1432
1569
  return "Allows an ACP request to prepend up to four absolute directories to process-tool PATH for one turn. The caller cannot replace PATH.";
1433
1570
  }
1571
+ if (id === "tools.filesystem.readableRoots") {
1572
+ return "Extra roots for managed Read, Glob, and Grep while sandbox.mode is off. Access requires lexical and realpath containment; native sandbox roots remain authoritative when sandboxing is enabled.";
1573
+ }
1574
+ if (id === "tools.filesystem.writableRoots") {
1575
+ return "Extra roots for managed Write and Edit while sandbox.mode is off; writable roots are also readable. Access requires lexical and realpath containment; native sandbox roots remain authoritative when sandboxing is enabled.";
1576
+ }
1434
1577
  if (id === "cron.operatorActions.enabled") {
1435
1578
  return "Allows API-key-authenticated, explicitly confirmed run-now and runtime enable/disable actions. Defaults off and never rewrites cron config sources.";
1436
1579
  }
@@ -1486,6 +1629,12 @@ function descriptionFor(id) {
1486
1629
  if (id === "memory.embeddings.apiKeyEnv") {
1487
1630
  return "Environment-variable name containing an optional provider bearer token; an explicitly declared name must resolve before memory starts.";
1488
1631
  }
1632
+ if (id === "memory.recallTool.enabled") {
1633
+ return "Enables explicit memory reads: targeted MemoryRecall for every backend and chronological MemoryJournal when a local store supports it. Automatic recall is unchanged.";
1634
+ }
1635
+ if (id === "tools.web.search.ollama.apiKeyEnv") {
1636
+ return "Environment variable containing the hosted Ollama API key. Required only for exact https://ollama.com and rejected for every other origin; the key value is never stored in JSON.";
1637
+ }
1489
1638
  if (id.includes("apiKey") || id.includes("Token")) {
1490
1639
  return `Secret value for ${id}; prefer the env override.`;
1491
1640
  }
@@ -1498,11 +1647,8 @@ function descriptionFor(id) {
1498
1647
  if (id === "runtime.fallbacks") {
1499
1648
  return "Canonical ordered fallback routes. Omitted per-route effort means that provider's default.";
1500
1649
  }
1501
- if (id === "runtime.fallbackModels") {
1502
- return "Legacy fallback list whose routes inherit runtime.effort. Prefer runtime.fallbacks for new configs.";
1503
- }
1504
1650
  if (id === "subagents") {
1505
- return "Subagent profiles the Agent tool can deploy, plus its caps. Disabled unless enabled is true, in which case Agent must also appear in tools.allowedTools. Each definition needs exactly one of prompt or promptPath; omitted allowedTools means a read-only default set, and the \"*\" wildcard is rejected. The agent may also author a specialized subagent at call time unless inline.enabled is false; inline.allowedTools caps what an authored subagent may request, defaulting to the parent agent's own built-ins.";
1651
+ return "Subagent profiles the Agent tool can deploy, plus its caps. Disabled unless enabled is true, in which case Agent must also appear in tools.allowedTools. Each definition needs exactly one of prompt or promptPath; omitted allowedTools means a read-only default set, and the \"*\" wildcard is rejected. The agent may also author a specialized subagent at call time unless inline.enabled is false; inline.allowedTools caps what an authored subagent may request, defaulting to the parent agent's own built-ins. maxConcurrent is a ceiling, not a scheduling guarantee: Pi 0.85 serializes all tool calls when any stateful/mutating or MCP tool is offered.";
1506
1652
  }
1507
1653
  if (id === "runtime.retry.primaryAttempts") {
1508
1654
  return "Total attempts on runtime.model including the first, before the chain advances. Retries fire only for transient provider failures (overloaded, rate-limited, timeout, network, 5xx); context overflow and bad credentials advance immediately. Set 1 to disable.";
@@ -1513,21 +1659,32 @@ function descriptionFor(id) {
1513
1659
  if (id === "runtime.retry.maxBackoffMs") {
1514
1660
  return "Ceiling for the doubling same-model retry delay.";
1515
1661
  }
1516
- if (id === "runtime.routeSafety") {
1517
- return "Uniform preserves one shared safety contract; per-route-native uses and reports each provider's explicit contract.";
1518
- }
1519
1662
  if (id === "runtime.effort") {
1520
- return "Route-specific effort. Reasoning-capable pi:* maps ultra to LOW; Pi without reasoning uses OFF. Direct codex:* forwards ultra unchanged. Mono-agent rejects ultra on its Claude SDK route because the pinned SDK public contract ends at max (the SDK JavaScript itself forwards the value). The Claude CLI route passes --effort ultra, but both tested Claude Code binaries (SDK-bundled 2.1.206 and local 2.1.210) warn that it is unknown, ignore it, and use default effort. Direct OpenCode rejects explicit effort. Ranking above max only prevents keyword downgrade.";
1663
+ return "Route-specific effort forwarded through Pi to the selected provider. Doctor warns when a configured value falls outside the model's advertised ladder but keeps turn-time handling permissive. Ranking above max only prevents keyword downgrade.";
1521
1664
  }
1522
1665
  if (id === "tools.mcpRequestContextServers") {
1523
1666
  return "Configured stdio MCP server names that receive trusted per-request conversation, run, output-directory, and scoped progress context.";
1524
1667
  }
1668
+ if (id === "tools.web.coordination")
1669
+ return "Host mode shares web request budgets and cooldowns across participating local mono-agent processes; process preserves isolated coordination.";
1525
1670
  if (id === "tools.web.search.backend") {
1526
- return "WebSearch backend: auto tries configured local SearXNG, then ChatGPT-subscription Codex search, then keyless fallbacks; searxng, codex, and keyless are strict.";
1671
+ return "WebSearch backend: auto uses explicitly configured Ollama, configured local SearXNG, ChatGPT-subscription Codex search, then keyless fallbacks. searxng, ollama, codex, and keyless are strict.";
1527
1672
  }
1528
- if (id === "tools.web.search.endpoint") {
1673
+ if (id === "tools.web.search.maxRequestsPerRun") {
1674
+ return "Hard ceiling from 1 to 20 on actual provider search requests in one logical runtime run; cache hits, coalesced followers, cooldown skips, and quota skips consume no request. Default 4.";
1675
+ }
1676
+ if (id === "tools.web.search.searxng.endpoint") {
1529
1677
  return "Optional unauthenticated loopback HTTP SearXNG base URL. Remote HTTPS, credentials, query strings, and fragments are rejected.";
1530
1678
  }
1679
+ if (id === "tools.web.search.ollama.baseUrl") {
1680
+ return "Ollama origin. Defaults to local http://127.0.0.1:11434 in strict Ollama mode. Hosted search is exactly https://ollama.com; custom public origins require HTTPS and trustPublicUrl=true.";
1681
+ }
1682
+ if (id === "tools.web.search.ollama.trustPublicUrl") {
1683
+ return "Explicit acknowledgement for an HTTPS custom public Ollama origin. It never permits sending hosted credentials to that origin.";
1684
+ }
1685
+ if (id === "tools.web.search.endpoint") {
1686
+ return "Compatibility alias for tools.web.search.searxng.endpoint and MONO_AGENT_WEB_SEARCH_SEARXNG_ENDPOINT. Existing configurations remain valid; new configurations should use the provider-specific block.";
1687
+ }
1531
1688
  if (id === "tools.web.search.codex.model") {
1532
1689
  return "Codex app-server model used for ChatGPT-subscription web search. The signed-in account must expose both this model and web search; default gpt-5.6-luna.";
1533
1690
  }