@mono-agent/agent-app 0.20.14 → 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.
- package/README.md +227 -80
- package/dist/adapter-send-tools.d.ts +3 -2
- package/dist/adapter-send-tools.d.ts.map +1 -1
- package/dist/adapter-send-tools.js +15 -5
- package/dist/adapter-send-tools.js.map +1 -1
- package/dist/app-controller-channels.d.ts +2 -0
- package/dist/app-controller-channels.d.ts.map +1 -1
- package/dist/app-controller-channels.js +10 -1
- package/dist/app-controller-channels.js.map +1 -1
- package/dist/app-controller-maintenance.d.ts +3 -1
- package/dist/app-controller-maintenance.d.ts.map +1 -1
- package/dist/app-controller-maintenance.js +3 -0
- package/dist/app-controller-maintenance.js.map +1 -1
- package/dist/app-controller-responder.d.ts +2 -0
- package/dist/app-controller-responder.d.ts.map +1 -1
- package/dist/app-controller-responder.js +21 -17
- package/dist/app-controller-responder.js.map +1 -1
- package/dist/app-controller-traceability.d.ts.map +1 -1
- package/dist/app-controller-traceability.js +3 -0
- package/dist/app-controller-traceability.js.map +1 -1
- package/dist/app-controller-types.d.ts +1 -0
- package/dist/app-controller-types.d.ts.map +1 -1
- package/dist/app-controller.d.ts +2 -0
- package/dist/app-controller.d.ts.map +1 -1
- package/dist/app-controller.js +3 -0
- package/dist/app-controller.js.map +1 -1
- package/dist/artifact-retention.js +11 -0
- package/dist/artifact-retention.js.map +1 -1
- package/dist/background.d.ts +0 -6
- package/dist/background.d.ts.map +1 -1
- package/dist/background.js +5 -58
- package/dist/background.js.map +1 -1
- package/dist/channel-drivers/tui.d.ts +2 -2
- package/dist/channel-drivers/tui.d.ts.map +1 -1
- package/dist/channel-drivers/tui.js +27 -8
- package/dist/channel-drivers/tui.js.map +1 -1
- package/dist/cli-args.d.ts +4 -5
- package/dist/cli-args.d.ts.map +1 -1
- package/dist/cli-args.js +20 -19
- package/dist/cli-args.js.map +1 -1
- package/dist/cli-background-command.d.ts.map +1 -1
- package/dist/cli-background-command.js +4 -0
- package/dist/cli-background-command.js.map +1 -1
- package/dist/cli-commands.d.ts.map +1 -1
- package/dist/cli-commands.js +13 -2
- package/dist/cli-commands.js.map +1 -1
- package/dist/cli-help.d.ts.map +1 -1
- package/dist/cli-help.js +33 -19
- package/dist/cli-help.js.map +1 -1
- package/dist/cli-init-command.d.ts.map +1 -1
- package/dist/cli-init-command.js +26 -22
- package/dist/cli-init-command.js.map +1 -1
- package/dist/cli-install-skill-command.d.ts.map +1 -1
- package/dist/cli-install-skill-command.js +12 -3
- package/dist/cli-install-skill-command.js.map +1 -1
- package/dist/config-reference.d.ts +1 -0
- package/dist/config-reference.d.ts.map +1 -1
- package/dist/config-reference.js +66 -10
- package/dist/config-reference.js.map +1 -1
- package/dist/configured-agent.d.ts +9 -1
- package/dist/configured-agent.d.ts.map +1 -1
- package/dist/configured-agent.js +95 -29
- package/dist/configured-agent.js.map +1 -1
- package/dist/cron-control-store.d.ts.map +1 -1
- package/dist/cron-control-store.js +4 -2
- package/dist/cron-control-store.js.map +1 -1
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +215 -45
- package/dist/doctor.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/interaction-bridge.d.ts +3 -3
- package/dist/interaction-bridge.d.ts.map +1 -1
- package/dist/interaction-bridge.js +27 -10
- package/dist/interaction-bridge.js.map +1 -1
- package/dist/launchd.d.ts +2 -0
- package/dist/launchd.d.ts.map +1 -1
- package/dist/launchd.js +3 -0
- package/dist/launchd.js.map +1 -1
- package/dist/local-tui-session.d.ts +14 -0
- package/dist/local-tui-session.d.ts.map +1 -0
- package/dist/local-tui-session.js +100 -0
- package/dist/local-tui-session.js.map +1 -0
- package/dist/mcp-apps.d.ts.map +1 -1
- package/dist/mcp-apps.js +3 -0
- package/dist/mcp-apps.js.map +1 -1
- package/dist/memory-journal.d.ts +53 -0
- package/dist/memory-journal.d.ts.map +1 -0
- package/dist/memory-journal.js +586 -0
- package/dist/memory-journal.js.map +1 -0
- package/dist/memory-recall.d.ts.map +1 -1
- package/dist/memory-recall.js +16 -2
- package/dist/memory-recall.js.map +1 -1
- package/dist/memory-retrieval.d.ts +9 -0
- package/dist/memory-retrieval.d.ts.map +1 -1
- package/dist/memory-retrieval.js +20 -0
- package/dist/memory-retrieval.js.map +1 -1
- package/dist/modules/base.js +1 -1
- package/dist/modules/base.js.map +1 -1
- package/dist/modules/known-tools.d.ts +1 -1
- package/dist/modules/known-tools.d.ts.map +1 -1
- package/dist/modules/known-tools.js +1 -0
- package/dist/modules/known-tools.js.map +1 -1
- package/dist/monitors-command.js +12 -2
- package/dist/monitors-command.js.map +1 -1
- package/dist/monitors-config.d.ts +4 -1
- package/dist/monitors-config.d.ts.map +1 -1
- package/dist/monitors-config.js +5 -1
- package/dist/monitors-config.js.map +1 -1
- package/dist/monitors-context.d.ts.map +1 -1
- package/dist/monitors-context.js +14 -2
- package/dist/monitors-context.js.map +1 -1
- package/dist/monitors-service.d.ts +2 -2
- package/dist/monitors-service.d.ts.map +1 -1
- package/dist/monitors-service.js +227 -96
- package/dist/monitors-service.js.map +1 -1
- package/dist/monitors-store.d.ts +11 -1
- package/dist/monitors-store.d.ts.map +1 -1
- package/dist/monitors-store.js +36 -6
- package/dist/monitors-store.js.map +1 -1
- package/dist/notify-destinations.d.ts +3 -2
- package/dist/notify-destinations.d.ts.map +1 -1
- package/dist/notify-destinations.js +6 -7
- package/dist/notify-destinations.js.map +1 -1
- package/dist/posted-reply-history.d.ts.map +1 -1
- package/dist/posted-reply-history.js +40 -3
- package/dist/posted-reply-history.js.map +1 -1
- package/dist/proactive-notify.d.ts +20 -1
- package/dist/proactive-notify.d.ts.map +1 -1
- package/dist/proactive-notify.js +56 -3
- package/dist/proactive-notify.js.map +1 -1
- package/dist/process-job-channel-routing.js +2 -1
- package/dist/process-job-channel-routing.js.map +1 -1
- package/dist/process-job-output-tail.d.ts +53 -0
- package/dist/process-job-output-tail.d.ts.map +1 -0
- package/dist/process-job-output-tail.js +257 -0
- package/dist/process-job-output-tail.js.map +1 -0
- package/dist/process-jobs-config.d.ts +1 -1
- package/dist/process-jobs-config.js +1 -1
- package/dist/process-jobs-config.js.map +1 -1
- package/dist/process-jobs-context.d.ts +3 -1
- package/dist/process-jobs-context.d.ts.map +1 -1
- package/dist/process-jobs-context.js +44 -11
- package/dist/process-jobs-context.js.map +1 -1
- package/dist/process-jobs-runtime.d.ts.map +1 -1
- package/dist/process-jobs-runtime.js +14 -0
- package/dist/process-jobs-runtime.js.map +1 -1
- package/dist/process-jobs-service.d.ts.map +1 -1
- package/dist/process-jobs-service.js +115 -23
- package/dist/process-jobs-service.js.map +1 -1
- package/dist/process-jobs-store.d.ts +3 -1
- package/dist/process-jobs-store.d.ts.map +1 -1
- package/dist/process-jobs-store.js +4 -1
- package/dist/process-jobs-store.js.map +1 -1
- package/dist/process-output-redaction.d.ts +26 -1
- package/dist/process-output-redaction.d.ts.map +1 -1
- package/dist/process-output-redaction.js +164 -2
- package/dist/process-output-redaction.js.map +1 -1
- package/dist/project-skills.d.ts +11 -5
- package/dist/project-skills.d.ts.map +1 -1
- package/dist/project-skills.js +88 -39
- package/dist/project-skills.js.map +1 -1
- package/dist/provider-auth-checks.d.ts +27 -0
- package/dist/provider-auth-checks.d.ts.map +1 -0
- package/dist/provider-auth-checks.js +349 -0
- package/dist/provider-auth-checks.js.map +1 -0
- package/dist/provider-auth-observations.d.ts +22 -0
- package/dist/provider-auth-observations.d.ts.map +1 -0
- package/dist/provider-auth-observations.js +139 -0
- package/dist/provider-auth-observations.js.map +1 -0
- package/dist/provider-auth-operator.d.ts +19 -0
- package/dist/provider-auth-operator.d.ts.map +1 -0
- package/dist/provider-auth-operator.js +560 -0
- package/dist/provider-auth-operator.js.map +1 -0
- package/dist/provider-auth-status.d.ts +20 -0
- package/dist/provider-auth-status.d.ts.map +1 -0
- package/dist/provider-auth-status.js +235 -0
- package/dist/provider-auth-status.js.map +1 -0
- package/dist/provider-model-catalog.d.ts +17 -0
- package/dist/provider-model-catalog.d.ts.map +1 -1
- package/dist/provider-model-catalog.js +113 -2
- package/dist/provider-model-catalog.js.map +1 -1
- package/dist/provider-setup.d.ts +22 -0
- package/dist/provider-setup.d.ts.map +1 -1
- package/dist/provider-setup.js +101 -15
- package/dist/provider-setup.js.map +1 -1
- package/dist/reply-artifacts.d.ts +3 -1
- package/dist/reply-artifacts.d.ts.map +1 -1
- package/dist/reply-artifacts.js +45 -10
- package/dist/reply-artifacts.js.map +1 -1
- package/dist/request-model-override.d.ts +11 -2
- package/dist/request-model-override.d.ts.map +1 -1
- package/dist/request-model-override.js +51 -1
- package/dist/request-model-override.js.map +1 -1
- package/dist/request-scoped-mcp.d.ts +3 -0
- package/dist/request-scoped-mcp.d.ts.map +1 -1
- package/dist/request-scoped-mcp.js +1 -1
- package/dist/request-scoped-mcp.js.map +1 -1
- package/dist/run-history.d.ts.map +1 -1
- package/dist/run-history.js +56 -13
- package/dist/run-history.js.map +1 -1
- package/dist/seen-conversations.d.ts +4 -3
- package/dist/seen-conversations.d.ts.map +1 -1
- package/dist/seen-conversations.js +6 -5
- package/dist/seen-conversations.js.map +1 -1
- package/dist/session-history.d.ts +14 -0
- package/dist/session-history.d.ts.map +1 -1
- package/dist/session-history.js +120 -5
- package/dist/session-history.js.map +1 -1
- package/dist/systemd-command.d.ts +8 -0
- package/dist/systemd-command.d.ts.map +1 -0
- package/dist/systemd-command.js +206 -0
- package/dist/systemd-command.js.map +1 -0
- package/dist/systemd.d.ts +51 -0
- package/dist/systemd.d.ts.map +1 -0
- package/dist/systemd.js +299 -0
- package/dist/systemd.js.map +1 -0
- package/dist/tool-output-artifacts.d.ts +4 -0
- package/dist/tool-output-artifacts.d.ts.map +1 -0
- package/dist/tool-output-artifacts.js +17 -0
- package/dist/tool-output-artifacts.js.map +1 -0
- package/dist/tui-command.d.ts +0 -45
- package/dist/tui-command.d.ts.map +1 -1
- package/dist/tui-command.js +27 -264
- package/dist/tui-command.js.map +1 -1
- package/dist/untrusted-text.js +2 -2
- package/dist/web-command.d.ts +3 -0
- package/dist/web-command.d.ts.map +1 -1
- package/dist/web-command.js +112 -7
- package/dist/web-command.js.map +1 -1
- package/dist/web-request-coordinator.d.ts +19 -0
- package/dist/web-request-coordinator.d.ts.map +1 -0
- package/dist/web-request-coordinator.js +242 -0
- package/dist/web-request-coordinator.js.map +1 -0
- package/dist/wizard/prompts.d.ts.map +1 -1
- package/dist/wizard/prompts.js +1 -0
- package/dist/wizard/prompts.js.map +1 -1
- package/dist/wizard/run.js +1 -1
- package/dist/wizard/run.js.map +1 -1
- package/package.json +18 -18
- package/schema/mono-agent.config.schema.json +120 -8
- package/skills/mono-agent-composer/SKILL.md +4 -4
- package/skills/mono-agent-composer/references/config-blueprint.md +18 -7
- package/skills/mono-agent-composer/references/discovery-questions.md +10 -5
- package/skills/mono-agent-composer/references/feature-coverage.md +30 -14
- package/skills/mono-agent-composer/references/package-map.md +6 -3
- package/skills/mono-agent-composer/references/playbooks.md +20 -5
- package/skills/mono-agent-composer/references/validation.md +4 -3
- package/dist/configuration-proposal-main.d.ts +0 -3
- package/dist/configuration-proposal-main.d.ts.map +0 -1
- package/dist/configuration-proposal-main.js +0 -13
- package/dist/configuration-proposal-main.js.map +0 -1
- package/dist/configuration-proposal-tool.d.ts +0 -33
- package/dist/configuration-proposal-tool.d.ts.map +0 -1
- package/dist/configuration-proposal-tool.js +0 -180
- package/dist/configuration-proposal-tool.js.map +0 -1
- package/dist/local-configuration.d.ts +0 -99
- package/dist/local-configuration.d.ts.map +0 -1
- package/dist/local-configuration.js +0 -1302
- package/dist/local-configuration.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mono-agent/agent-app",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.21.0",
|
|
4
4
|
"description": "Config-first mono-agent host: builds a responder and starts every configured communication channel and traceability from one mono-agent.config.json.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "GPL-3.0-only",
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
},
|
|
12
12
|
"private": false,
|
|
13
13
|
"engines": {
|
|
14
|
-
"node": ">=
|
|
14
|
+
"node": ">=24.15.0"
|
|
15
15
|
},
|
|
16
16
|
"main": "./dist/index.js",
|
|
17
17
|
"types": "./dist/index.d.ts",
|
|
@@ -36,23 +36,23 @@
|
|
|
36
36
|
"dependencies": {
|
|
37
37
|
"@agentclientprotocol/sdk": "1.3.0",
|
|
38
38
|
"@clack/prompts": "^1.7.0",
|
|
39
|
-
"@earendil-works/pi-ai": "0.85.
|
|
39
|
+
"@earendil-works/pi-ai": "0.85.1",
|
|
40
40
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
41
|
-
"@mono-agent/agent-contracts": "0.
|
|
42
|
-
"@mono-agent/agent-harness": "0.
|
|
43
|
-
"@mono-agent/agent-runtime": "0.
|
|
44
|
-
"@mono-agent/config": "0.
|
|
45
|
-
"@mono-agent/cron-adapter": "0.
|
|
46
|
-
"@mono-agent/operator-adapter": "0.
|
|
47
|
-
"@mono-agent/memory": "0.
|
|
48
|
-
"@mono-agent/observability": "0.
|
|
49
|
-
"@mono-agent/openai-api-adapter": "0.
|
|
50
|
-
"@mono-agent/runtime-adapter": "0.
|
|
51
|
-
"@mono-agent/slack-adapter": "0.
|
|
52
|
-
"@mono-agent/telegram-adapter": "0.
|
|
53
|
-
"@mono-agent/tui": "0.
|
|
54
|
-
"@mono-agent/web": "0.
|
|
55
|
-
"@mono-agent/webhook-adapter": "0.
|
|
41
|
+
"@mono-agent/agent-contracts": "0.21.0",
|
|
42
|
+
"@mono-agent/agent-harness": "0.21.0",
|
|
43
|
+
"@mono-agent/agent-runtime": "0.21.0",
|
|
44
|
+
"@mono-agent/config": "0.21.0",
|
|
45
|
+
"@mono-agent/cron-adapter": "0.21.0",
|
|
46
|
+
"@mono-agent/operator-adapter": "0.21.0",
|
|
47
|
+
"@mono-agent/memory": "0.21.0",
|
|
48
|
+
"@mono-agent/observability": "0.21.0",
|
|
49
|
+
"@mono-agent/openai-api-adapter": "0.21.0",
|
|
50
|
+
"@mono-agent/runtime-adapter": "0.21.0",
|
|
51
|
+
"@mono-agent/slack-adapter": "0.21.0",
|
|
52
|
+
"@mono-agent/telegram-adapter": "0.21.0",
|
|
53
|
+
"@mono-agent/tui": "0.21.0",
|
|
54
|
+
"@mono-agent/web": "0.21.0",
|
|
55
|
+
"@mono-agent/webhook-adapter": "0.21.0",
|
|
56
56
|
"undici": "8.9.0",
|
|
57
57
|
"zod": "^4.4.3"
|
|
58
58
|
},
|
|
@@ -752,7 +752,7 @@
|
|
|
752
752
|
"additionalProperties": false,
|
|
753
753
|
"properties": {
|
|
754
754
|
"enabled": {
|
|
755
|
-
"description": "Enables
|
|
755
|
+
"description": "Enables explicit memory reads: targeted MemoryRecall for every backend and chronological MemoryJournal when a local store supports it. Automatic recall is unchanged.",
|
|
756
756
|
"examples": [
|
|
757
757
|
true
|
|
758
758
|
],
|
|
@@ -1016,6 +1016,36 @@
|
|
|
1016
1016
|
},
|
|
1017
1017
|
"default": []
|
|
1018
1018
|
},
|
|
1019
|
+
"filesystem": {
|
|
1020
|
+
"type": "object",
|
|
1021
|
+
"additionalProperties": false,
|
|
1022
|
+
"properties": {
|
|
1023
|
+
"readableRoots": {
|
|
1024
|
+
"description": "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.",
|
|
1025
|
+
"examples": [
|
|
1026
|
+
[
|
|
1027
|
+
"/srv/shared/reference"
|
|
1028
|
+
]
|
|
1029
|
+
],
|
|
1030
|
+
"type": "array",
|
|
1031
|
+
"items": {
|
|
1032
|
+
"type": "string"
|
|
1033
|
+
}
|
|
1034
|
+
},
|
|
1035
|
+
"writableRoots": {
|
|
1036
|
+
"description": "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.",
|
|
1037
|
+
"examples": [
|
|
1038
|
+
[
|
|
1039
|
+
"/srv/shared/output"
|
|
1040
|
+
]
|
|
1041
|
+
],
|
|
1042
|
+
"type": "array",
|
|
1043
|
+
"items": {
|
|
1044
|
+
"type": "string"
|
|
1045
|
+
}
|
|
1046
|
+
}
|
|
1047
|
+
}
|
|
1048
|
+
},
|
|
1019
1049
|
"mcpConfigPath": {
|
|
1020
1050
|
"description": "Configures mcpConfigPath for the tools section.",
|
|
1021
1051
|
"examples": [
|
|
@@ -1070,12 +1100,24 @@
|
|
|
1070
1100
|
"type": "object",
|
|
1071
1101
|
"additionalProperties": false,
|
|
1072
1102
|
"properties": {
|
|
1103
|
+
"coordination": {
|
|
1104
|
+
"description": "Host mode shares web request budgets and cooldowns across participating local mono-agent processes; process preserves isolated coordination.",
|
|
1105
|
+
"examples": [
|
|
1106
|
+
"process"
|
|
1107
|
+
],
|
|
1108
|
+
"type": "string",
|
|
1109
|
+
"default": "process",
|
|
1110
|
+
"enum": [
|
|
1111
|
+
"process",
|
|
1112
|
+
"host"
|
|
1113
|
+
]
|
|
1114
|
+
},
|
|
1073
1115
|
"search": {
|
|
1074
1116
|
"type": "object",
|
|
1075
1117
|
"additionalProperties": false,
|
|
1076
1118
|
"properties": {
|
|
1077
1119
|
"backend": {
|
|
1078
|
-
"description": "WebSearch backend: auto
|
|
1120
|
+
"description": "WebSearch backend: auto uses explicitly configured Ollama, configured local SearXNG, ChatGPT-subscription Codex search, then keyless fallbacks. searxng, ollama, codex, and keyless are strict.",
|
|
1079
1121
|
"examples": [
|
|
1080
1122
|
"auto"
|
|
1081
1123
|
],
|
|
@@ -1084,17 +1126,70 @@
|
|
|
1084
1126
|
"enum": [
|
|
1085
1127
|
"auto",
|
|
1086
1128
|
"searxng",
|
|
1129
|
+
"ollama",
|
|
1087
1130
|
"codex",
|
|
1088
1131
|
"keyless"
|
|
1089
1132
|
]
|
|
1090
1133
|
},
|
|
1134
|
+
"maxRequestsPerRun": {
|
|
1135
|
+
"description": "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.",
|
|
1136
|
+
"examples": [
|
|
1137
|
+
4
|
|
1138
|
+
],
|
|
1139
|
+
"type": "integer",
|
|
1140
|
+
"default": 4,
|
|
1141
|
+
"minimum": 1,
|
|
1142
|
+
"maximum": 20
|
|
1143
|
+
},
|
|
1091
1144
|
"endpoint": {
|
|
1092
|
-
"description": "
|
|
1145
|
+
"description": "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.",
|
|
1093
1146
|
"examples": [
|
|
1094
|
-
"
|
|
1147
|
+
"example"
|
|
1095
1148
|
],
|
|
1096
1149
|
"type": "string"
|
|
1097
1150
|
},
|
|
1151
|
+
"searxng": {
|
|
1152
|
+
"type": "object",
|
|
1153
|
+
"additionalProperties": false,
|
|
1154
|
+
"properties": {
|
|
1155
|
+
"endpoint": {
|
|
1156
|
+
"description": "Optional unauthenticated loopback HTTP SearXNG base URL. Remote HTTPS, credentials, query strings, and fragments are rejected.",
|
|
1157
|
+
"examples": [
|
|
1158
|
+
"http://127.0.0.1:8088"
|
|
1159
|
+
],
|
|
1160
|
+
"type": "string"
|
|
1161
|
+
}
|
|
1162
|
+
}
|
|
1163
|
+
},
|
|
1164
|
+
"ollama": {
|
|
1165
|
+
"type": "object",
|
|
1166
|
+
"additionalProperties": false,
|
|
1167
|
+
"properties": {
|
|
1168
|
+
"baseUrl": {
|
|
1169
|
+
"description": "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.",
|
|
1170
|
+
"examples": [
|
|
1171
|
+
"https://ollama.com"
|
|
1172
|
+
],
|
|
1173
|
+
"type": "string",
|
|
1174
|
+
"default": "http://127.0.0.1:11434"
|
|
1175
|
+
},
|
|
1176
|
+
"apiKeyEnv": {
|
|
1177
|
+
"description": "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.",
|
|
1178
|
+
"examples": [
|
|
1179
|
+
"OLLAMA_API_KEY"
|
|
1180
|
+
],
|
|
1181
|
+
"type": "string"
|
|
1182
|
+
},
|
|
1183
|
+
"trustPublicUrl": {
|
|
1184
|
+
"description": "Explicit acknowledgement for an HTTPS custom public Ollama origin. It never permits sending hosted credentials to that origin.",
|
|
1185
|
+
"examples": [
|
|
1186
|
+
true
|
|
1187
|
+
],
|
|
1188
|
+
"type": "boolean",
|
|
1189
|
+
"default": false
|
|
1190
|
+
}
|
|
1191
|
+
}
|
|
1192
|
+
},
|
|
1098
1193
|
"codex": {
|
|
1099
1194
|
"type": "object",
|
|
1100
1195
|
"additionalProperties": false,
|
|
@@ -1512,6 +1607,14 @@
|
|
|
1512
1607
|
"websocket-cached"
|
|
1513
1608
|
]
|
|
1514
1609
|
},
|
|
1610
|
+
"promptCacheDiagnostics": {
|
|
1611
|
+
"description": "Emit metadata-only prompt-cache request fingerprints into run artifacts; never prompt text, tool arguments, cache keys, endpoints or credentials.",
|
|
1612
|
+
"examples": [
|
|
1613
|
+
true
|
|
1614
|
+
],
|
|
1615
|
+
"type": "boolean",
|
|
1616
|
+
"default": false
|
|
1617
|
+
},
|
|
1515
1618
|
"piMaxRetries": {
|
|
1516
1619
|
"description": "Configures piNative.piMaxRetries for the providers section.",
|
|
1517
1620
|
"examples": [
|
|
@@ -1681,7 +1784,7 @@
|
|
|
1681
1784
|
"maxChainDepth": {
|
|
1682
1785
|
"type": "integer",
|
|
1683
1786
|
"minimum": 1,
|
|
1684
|
-
"maximum":
|
|
1787
|
+
"maximum": 64,
|
|
1685
1788
|
"default": 4
|
|
1686
1789
|
},
|
|
1687
1790
|
"retention": {
|
|
@@ -1766,10 +1869,16 @@
|
|
|
1766
1869
|
"maximum": 65536,
|
|
1767
1870
|
"default": 4096
|
|
1768
1871
|
},
|
|
1872
|
+
"maxWakeIntervalMs": {
|
|
1873
|
+
"type": "integer",
|
|
1874
|
+
"minimum": 1,
|
|
1875
|
+
"maximum": 300000,
|
|
1876
|
+
"default": 300000
|
|
1877
|
+
},
|
|
1769
1878
|
"maxChainDepth": {
|
|
1770
1879
|
"type": "integer",
|
|
1771
1880
|
"minimum": 1,
|
|
1772
|
-
"maximum":
|
|
1881
|
+
"maximum": 64,
|
|
1773
1882
|
"default": 4
|
|
1774
1883
|
},
|
|
1775
1884
|
"rateLimit": {
|
|
@@ -1829,11 +1938,14 @@
|
|
|
1829
1938
|
"additionalProperties": false,
|
|
1830
1939
|
"properties": {
|
|
1831
1940
|
"timeoutMs": {
|
|
1832
|
-
"description": "Maximum wait for one AskUser interaction (one to five questions).",
|
|
1941
|
+
"description": "Maximum wait for one AskUser interaction (one to five questions); set null to disable automatic expiry.",
|
|
1833
1942
|
"examples": [
|
|
1834
1943
|
600000
|
|
1835
1944
|
],
|
|
1836
|
-
"type":
|
|
1945
|
+
"type": [
|
|
1946
|
+
"integer",
|
|
1947
|
+
"null"
|
|
1948
|
+
],
|
|
1837
1949
|
"default": 600000
|
|
1838
1950
|
}
|
|
1839
1951
|
}
|
|
@@ -54,7 +54,7 @@ The install command pairs every available Codex/Claude target by default and
|
|
|
54
54
|
prints an exact later command for a missing target. Use `--no-docs-mcp` only
|
|
55
55
|
when a file-only skill install is intentional.
|
|
56
56
|
|
|
57
|
-
To run an unreleased build instead, use a clone of the mono-agent workspace with Node
|
|
57
|
+
To run an unreleased build instead, use a clone of the mono-agent workspace with Node 24.15.0+ and pnpm 10 or newer already installed:
|
|
58
58
|
|
|
59
59
|
```bash
|
|
60
60
|
git clone <mono-agent-repo> ~/mono-agent && cd ~/mono-agent
|
|
@@ -75,8 +75,8 @@ Everything below runs in the user's agent folder, not the workspace.
|
|
|
75
75
|
mono-agent init --model <ref> [--fallback <ref> [--fallback-effort <provider-default|level>]]... [--effort <level>] [--auth] [--memory lite|journal|bujo] # bare scaffold
|
|
76
76
|
```
|
|
77
77
|
|
|
78
|
-
Either writes a `mono-agent.config.json` (with `tools.allowedTools` pre-filled from the selected capabilities' recommended tools), an `IDENTITY.md` whose `## Role` body is the one Role destination and which references any knowledge files already present, the managed project-local `mono-agent-
|
|
79
|
-
3. **Configure.** Edit `mono-agent.config.json` to match the discovery answers. For a newly created identity, put the agreed text under `IDENTITY.md` → `## Role`; if it existed before init, preserve it and report that the new answer was not stored. Preserve the generated `mono-agent-
|
|
78
|
+
Either writes a `mono-agent.config.json` (with `tools.allowedTools` pre-filled from the selected capabilities' recommended tools), an `IDENTITY.md` whose `## Role` body is the one Role destination and which references any knowledge files already present, the managed project-local `mono-agent-memory` skill, and `.mono-agent/` working directories (presets also emit a `.env.example` and any extra files). `--effort` writes `runtime.effort`, which is narrowed per model for display and still accepted at turn time; `--auth` opts in to provider setup before writing files; `--dry-run` previews without writing or launching auth/preflight commands. Existing scaffold/config files are never overwritten; reviewed secret setup is the deliberate exception that can transactionally replace `.env` and update `.gitignore`.
|
|
79
|
+
3. **Configure.** Edit `mono-agent.config.json` to match the discovery answers. For a newly created identity, put the agreed text under `IDENTITY.md` → `## Role`; if it existed before init, preserve it and report that the new answer was not stored. Preserve the generated `mono-agent-memory` selection when appending other skills, and do not auto-select this full authoring-oriented composer inside the generated agent. Read `references/config-blueprint.md` for the full annotated config shape: every channel section, skills, MCP, memory, sandbox, and fallback models. Run `mono-agent config` to see the resolved configuration field-by-field with each value tagged `env` / `json` / `default` — the fastest way to confirm a value came from where you intended.
|
|
80
80
|
4. **Validate.**
|
|
81
81
|
|
|
82
82
|
```bash
|
|
@@ -90,7 +90,7 @@ Everything below runs in the user's agent folder, not the workspace.
|
|
|
90
90
|
mono-agent start
|
|
91
91
|
```
|
|
92
92
|
|
|
93
|
-
Then run the acceptance smoke test matching the chosen channel (see `references/validation.md`). To change anything, edit `mono-agent.config.json` or `IDENTITY.md` directly and run `mono-agent restart`; there is no live browser re-apply.
|
|
93
|
+
Then run the acceptance smoke test matching the chosen channel (see `references/validation.md`). To change anything, edit `mono-agent.config.json` or `IDENTITY.md` directly, run `mono-agent validate`, and run `mono-agent restart`; there is no live browser or conversational re-apply. Open ordinary `mono-agent tui` after the restarted agent is ready.
|
|
94
94
|
|
|
95
95
|
## When Config Is Not Enough
|
|
96
96
|
|
|
@@ -75,6 +75,7 @@ effort. `runtime.fallbackModels` and `MONO_AGENT_FALLBACK_MODELS` were retired i
|
|
|
75
75
|
// Pi-native bridge tuning (all optional).
|
|
76
76
|
"piNative": {
|
|
77
77
|
"transport": "auto", // auto | sse | websocket | websocket-cached
|
|
78
|
+
"promptCacheDiagnostics": false, // metadata-only request fingerprints in run artifacts
|
|
78
79
|
"piMaxRetries": 2, // 0-8; transient provider-transport retries
|
|
79
80
|
"maxRetryDelayMs": 60000, // backoff cap between retries (ms)
|
|
80
81
|
"piSessionsRoot": ".mono-agent/sessions" // durable JSONL sessions → resume across restarts (unset = in-memory)
|
|
@@ -159,12 +160,13 @@ effort. `runtime.fallbackModels` and `MONO_AGENT_FALLBACK_MODELS` were retired i
|
|
|
159
160
|
"mcpConfigPath": "./mcp.json", // stdio/sse/http servers; inlined for SDK runtimes
|
|
160
161
|
"web": {
|
|
161
162
|
"search": {
|
|
162
|
-
"backend": "auto", // auto | searxng | codex | keyless
|
|
163
|
+
"backend": "auto", // auto | searxng | ollama | codex | keyless
|
|
163
164
|
"codex": { "model": "gpt-5.6-luna" },
|
|
164
|
-
"endpoint": "http://127.0.0.1:8088" // optional unauthenticated loopback HTTP
|
|
165
|
+
"searxng": { "endpoint": "http://127.0.0.1:8088" }, // optional unauthenticated loopback HTTP
|
|
166
|
+
"ollama": { "baseUrl": "http://127.0.0.1:11434" } // used only when backend is ollama
|
|
165
167
|
},
|
|
166
168
|
"fetch": {
|
|
167
|
-
"render": "never", // never disables browser capability; auto is static-first
|
|
169
|
+
"render": "never", // never disables browser capability; auto is static-first; always permits browser-first calls
|
|
168
170
|
"browserCommand": "agent-browser" // direct executable name/path
|
|
169
171
|
}
|
|
170
172
|
}
|
|
@@ -188,7 +190,7 @@ effort. `runtime.fallbackModels` and `MONO_AGENT_FALLBACK_MODELS` were retired i
|
|
|
188
190
|
"maxQueueAgeMs": 300000, // 5 min; cap 1 h
|
|
189
191
|
"maxOutputBytes": 1048576, // 1 MiB; cap 8 MiB
|
|
190
192
|
"previewChars": 2000, // cap 8000
|
|
191
|
-
"maxChainDepth": 4, // host-owned; cap
|
|
193
|
+
"maxChainDepth": 4, // host-owned; cap 64
|
|
192
194
|
"retention": {
|
|
193
195
|
"maxRecords": 1000, // cap 10000
|
|
194
196
|
"maxAgeMs": 604800000, // 7 d; cap 30 d
|
|
@@ -196,6 +198,15 @@ effort. `runtime.fallbackModels` and `MONO_AGENT_FALLBACK_MODELS` were retired i
|
|
|
196
198
|
}
|
|
197
199
|
},
|
|
198
200
|
|
|
201
|
+
// Monitor watches reuse processJobs state and require processJobs.enabled.
|
|
202
|
+
// Tool policy defaults: wake_on batch, dedupe none, min_wake_interval_ms 0.
|
|
203
|
+
// Exit-only rejects nondefault dedupe/interval; terminal wakes always bypass both.
|
|
204
|
+
"monitors": {
|
|
205
|
+
"enabled": false,
|
|
206
|
+
"maxWakeIntervalMs": 300000, // host interval ceiling; cap 300000
|
|
207
|
+
"maxChainDepth": 4 // host-owned; cap 64
|
|
208
|
+
},
|
|
209
|
+
|
|
199
210
|
// Human-in-the-loop bridge: structured blocking AskUser plus
|
|
200
211
|
// run-scoped project-MCP progress. It auto-starts when either ask tool is
|
|
201
212
|
// allowed, this block or an interaction env override is configured, or
|
|
@@ -203,7 +214,7 @@ effort. `runtime.fallbackModels` and `MONO_AGENT_FALLBACK_MODELS` were retired i
|
|
|
203
214
|
// tools.mcpRequestContextServers names at least one opted project MCP server.
|
|
204
215
|
"interaction": {
|
|
205
216
|
"bridge": { "host": "127.0.0.1", "port": 0 },
|
|
206
|
-
"askUser": { "timeoutMs": 600000 },
|
|
217
|
+
"askUser": { "timeoutMs": 600000 }, // set null to disable automatic expiry
|
|
207
218
|
"progress": { "enabled": true }
|
|
208
219
|
},
|
|
209
220
|
|
|
@@ -408,7 +419,7 @@ effort. `runtime.fallbackModels` and `MONO_AGENT_FALLBACK_MODELS` were retired i
|
|
|
408
419
|
|
|
409
420
|
"cron": {
|
|
410
421
|
"dir": "cron", // optional: folder of *.md jobs (frontmatter + prompt body), default "cron"
|
|
411
|
-
"operatorActions": { "enabled": false }, // opt-in
|
|
422
|
+
"operatorActions": { "enabled": false }, // opt-in operator API run-now/runtime enable controls; requires tui.apiKey
|
|
412
423
|
"jobs": [
|
|
413
424
|
{
|
|
414
425
|
"id": "daily",
|
|
@@ -452,7 +463,7 @@ A `.env` file in the folder is loaded automatically (exported shell variables wi
|
|
|
452
463
|
|
|
453
464
|
For BuJo capture and the effective `bujo` tier that runs scheduled consolidation, configure `memory.llm`. Use `provider: "ollama"` with a local Ollama chat model string and optional `endpoint`, or `provider: "agent-host"` with `model` as a canonical `<provider>:<model>` runtime reference such as `openai-codex:gpt-5.6-sol`. Every route is Pi-native, so there is no SDK-versus-CLI distinction and no reference family is singled out for rejection: any reference the runtime accepts is valid here, including `openai-codex:*`. `endpoint` is Ollama-only and invalid for `agent-host`; `agent-host` additionally accepts `trace` (record each `complete()` as a `mem-*` run; default `true`) and `timeoutMs` (per-`complete()` abort, default 60000, range 1000-600000). The same values can be supplied via `MONO_AGENT_MEMORY_LLM_PROVIDER`, `MONO_AGENT_MEMORY_LLM_MODEL`, `MONO_AGENT_MEMORY_LLM_ENDPOINT`, `MONO_AGENT_MEMORY_LLM_TRACE`, and `MONO_AGENT_MEMORY_LLM_TIMEOUT_MS`. `memory.llm.executionMode` and `MONO_AGENT_MEMORY_LLM_EXECUTION_MODE` were retired in 0.21.0 and now fail config load — delete them, never emit them. Routine BuJo consolidation runs via the in-app scheduler; the standalone `memory-bujo` maintenance CLI was removed (use `mono-agent memory <subcommand>` from the agent folder). `agent-host` LLM capture is an in-app composition path that injects the `LlmComplete` implementation into the BuJo store.
|
|
454
465
|
|
|
455
|
-
For operator views, run `mono-agent tui` or `mono-agent web` from any directory once the agent is started. Both discover running agents via the trace-source registry. The TUI and assistant-ui web console chat over the default-on `tui` stream endpoint (`"tui": {"enabled": false}` opts out)
|
|
466
|
+
For operator views, run `mono-agent tui` or `mono-agent web` from any directory once the agent is started. Both discover running agents via the trace-source registry. The TUI and assistant-ui web console chat over the default-on `tui` stream endpoint (`"tui": {"enabled": false}` opts out). Edit `mono-agent.config.json` or `IDENTITY.md`, validate, and restart to apply configuration changes. `mono-agent web` is an always-on service namespace, binds `0.0.0.0:5050` by default, and has no app login; use `--loopback` to narrow it. On `web start`, `restart`, or `run`, `--theme` selects the shell and `--name <label>` replaces the hostname-derived PWA, browser-tab, and rail label; `--name -` restores the hostname default; managed starts persist both selections. Capable agents expose stable read-only cron channels there. Their quiet headers show only cadence and agent-authored next run (viewer-local absolute time), or disabled/removed/unavailable state. Retained web proxy and operator API run-now/runtime enable controls require `tui.apiKey` and explicit `cron.operatorActions.enabled`; every mutation still requires confirmation, is agent-audited, and does not rewrite job config. The former read-only recorder command, package, and relay were removed; use `mono-agent tui` (recorded-run replay) or `mono-agent web` (live console). The low-level `mono-agent-tui` bin also supports `--responder <file>` (embedded, an ESM module default-exporting an `AgentResponderLike` or exporting `createResponder(env, cwd, configJson)`) and `--url <baseUrl>` (direct connect).
|
|
456
467
|
|
|
457
468
|
## Programmatic Escape Hatch
|
|
458
469
|
|
|
@@ -83,14 +83,19 @@ the user wants run-scoped JavaScript evaluation. All three execute with the same
|
|
|
83
83
|
sandbox authority.
|
|
84
84
|
|
|
85
85
|
If the agent needs public-web research, ask whether it should use automatic
|
|
86
|
-
local SearXNG → ChatGPT-subscription Codex → keyless fallback,
|
|
87
|
-
strict keyless, or strict SearXNG-only discovery.
|
|
88
|
-
`tools.web.search.backend`, optional `tools.web.search.endpoint`,
|
|
86
|
+
local SearXNG → ChatGPT-subscription Codex → keyless fallback, explicit local or
|
|
87
|
+
hosted Ollama, strict Codex, strict keyless, or strict SearXNG-only discovery.
|
|
88
|
+
Fill `tools.web.search.backend`, optional `tools.web.search.searxng.endpoint`,
|
|
89
|
+
optional `tools.web.search.ollama.*`, and optional
|
|
89
90
|
`tools.web.search.codex.model` (default `gpt-5.6-luna`). Keep
|
|
90
91
|
`tools.web.fetch.render: "never"` unless the user explicitly needs
|
|
91
92
|
JavaScript-heavy pages and has `agent-browser` 0.33.1 or newer; then select
|
|
92
|
-
`"auto"` plus the direct `browserCommand`. Explain that
|
|
93
|
-
|
|
93
|
+
config-level `"auto"` plus the direct `browserCommand`. Explain that the agent
|
|
94
|
+
can request per-call `WebFetch` `render: "always"` when a known page must be
|
|
95
|
+
browser-first; `"always"` is not a config value. Explain that local
|
|
96
|
+
SearXNG/Ollama are infrastructure, not offline indexes, both search and fetch
|
|
97
|
+
still generate public network traffic, hosted Ollama credentials are accepted
|
|
98
|
+
only at the exact official origin, and rendering does not bypass access controls.
|
|
94
99
|
|
|
95
100
|
## 6. Memory Strategy
|
|
96
101
|
|
|
@@ -2,6 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
Every framework capability and how a composed agent reaches it. This table is the **authoritative, exhaustive** answer to "can the config do X?" — answer from it, do not grep the `@mono-agent` package source to confirm. `config` = declarable in `mono-agent.config.json`; config fields may be JSON-only. Environment-variable overrides are optional: only fields with a documented `MONO_AGENT_*` mapping accept one, so consult the generated config reference's `Env override` column (`--` means none, as for `channels.plugins`) instead of inferring one. `cli` = a `mono-agent` CLI flag/command, `auto` = always on when the app runs, `code` = programmatic escape hatch only, `dev` = development/test tooling. A capability that is absent here, or marked `code`, is not reachable through config — that is the answer, not a cue to read source. The final column maps config-bearing rows back to the repo's canonical registry; multiple ids in one row are an intentional aggregation. The repo's `docs/reference/feature-registry.md` (framework checkout only) and the documentation site at <https://mono-agent-docs.vercel.app/> are longer-form human-facing mirrors of this same table.
|
|
4
4
|
|
|
5
|
+
The default configured agent may also advertise the operator-only v1
|
|
6
|
+
`contextImport` capability. It is not a config toggle and must be detected from
|
|
7
|
+
`GET /v1/info`; `historyAppend`/`deliverVerbatim` is a separate legacy surface
|
|
8
|
+
and is not evidence of import support. Import performs no cron or model turn and
|
|
9
|
+
accepts at most 32 KiB of decoded UTF-8 text with a source-qualified 512-byte
|
|
10
|
+
idempotency key and a 4096-byte conversation id.
|
|
11
|
+
|
|
5
12
|
## Runtime
|
|
6
13
|
|
|
7
14
|
| Capability | Coverage | Where | Registry config ids |
|
|
@@ -16,12 +23,13 @@ Every framework capability and how a composed agent reaches it. This table is th
|
|
|
16
23
|
| Per-channel run admission/execution bounds | config | `concurrency.maxConcurrentRuns`, `concurrency.maxPendingRuns` | `runtime.concurrency` |
|
|
17
24
|
| Local providers (Ollama / LM Studio / OpenAI-compatible) | config | `providers.<id>.{type,baseUrl,enabled,trustPublicUrl,apiKeyEnv,models,maxAdvertisedModels}`; the legacy `providers.local[]` array is still accepted and migrated on load | `runtime.local-providers` |
|
|
18
25
|
| Provider catalog (declares supported providers, widening model selection to each provider's full catalog) | config | the `providers` map, keyed by provider id — `providers.piAuthPath`, `providers.piNative`, and `providers.local` are reserved keys, never provider ids, and `providers.entries` is the resolved in-memory shape, not a JSON key. `ollama` and `lmstudio` are zero-config autodiscovered via localhost; a route naming any other provider that is not a Pi builtin fails config load until the map declares it with a `baseUrl` | `runtime.providers` |
|
|
19
|
-
| Pi OAuth credentials | config | `providers.piAuthPath` | `runtime.pi-credentials` |
|
|
26
|
+
| Pi OAuth/API-key credentials and web-console re-authentication | config + cli + auto | `providers.piAuthPath`; `mono-agent auth login`; Agent settings lists only effective used providers and, when the protected operator capability is present, offers Pi-native GitHub/OpenAI device code, Anthropic redirect/code paste-back, or masked provider prompts through the same owner-only locked/no-clobber Pi-store transaction. Detection and successful live-request verification are separate; no `--device-auth` flag exists and Codex CLI `~/.codex/auth.json` is not covered | `runtime.pi-credentials` |
|
|
20
27
|
| Pi-native transport, retry, and durable provider-session tuning | config | `providers.piNative.{transport,piMaxRetries,maxRetryDelayMs,piSessionsRoot}` | `runtime.pi-native-tuning` |
|
|
28
|
+
| Prompt-cache diagnostics (metadata-only request fingerprints in run artifacts, offline token-weighted cache summary) | config | `providers.piNative.promptCacheDiagnostics` (`MONO_AGENT_PI_PROMPT_CACHE_DIAGNOSTICS`), default `false`; summarize with `scripts/summarize-prompt-cache.mjs` | `runtime.prompt-cache-diagnostics` |
|
|
21
29
|
| Tool-output bloat guard, cost tracking | auto | built into every run | — |
|
|
22
30
|
| Context handling / auto-compaction | config + provider | `runtime.compaction.*` (matching `MONO_AGENT_COMPACTION_*`) controls adaptive Pi compaction. Omitted budgets derive from the active model window; reactive recovery re-prompts exactly once only after a verified reduction, and persistent `context_limit` advances to a configured fallback | `runtime.context-compaction` |
|
|
23
31
|
| Structured output (JSON schema) | code | harness `runtimeOptions.outputSchema` | — |
|
|
24
|
-
| Live input steering | auto + code | built into ordinary Slack
|
|
32
|
+
| Live input steering | auto + code | built into ordinary Slack and Telegram turns and the web console's single server-authoritative Send path, with exact host-operation ownership, separate native acceptance, exact transcript consumption, uncertainty/no automatic retry, durable UUID receipts, and confirmed safe-preview `Steered` activity; custom hosts use `runtimeOptions.liveInput` | — |
|
|
25
33
|
| Tool approval gates (risk tiers, timeouts, always-allow) | code | `createMonoRuntime({ onToolApprovalRequest, ... })` — needs a host UI | — |
|
|
26
34
|
| Fully custom runtime | code | `startMonoAgentApp({ runtime })` | — |
|
|
27
35
|
|
|
@@ -31,7 +39,7 @@ Every framework capability and how a composed agent reaches it. This table is th
|
|
|
31
39
|
| --- | --- | --- | --- |
|
|
32
40
|
| Public name plus identity and optional soul documents; wizard Role has one explicit destination and created/preserved outcome | config + cli | `agent.name`, `context.identityPath`, `context.soulPath`; guided Role is `IDENTITY.md` → `## Role`, and an existing identity is never overwritten | `agent.public-name`, `context.identity`, `context.soul` |
|
|
33
41
|
| Selected skills from a skills root | config | `context.skillsRoot`, `context.selectedSkills` | `skills.selected-activation` |
|
|
34
|
-
| Generated project
|
|
42
|
+
| Generated project memory skill with progressive disclosure | config + cli | init selects `mono-agent-memory` under `./skills` with `context.skillDisclosure: "index"`; drift and retired-skill migration: `mono-agent install-skill --project --check\|--update` | `app.managed-project-skills` |
|
|
35
43
|
| Version-matched semantic documentation companion for the global composer skill | cli + tool | `mono-agent install-skill` pairs `mono-agent-docs` with every available Codex/Claude target by default; `--no-docs-mcp` opts out; `mono_agent_docs` uses `action: "search"` for ranked 2–3k excerpts and `action: "read"` for anchored windows up to 10k, internal-link targets, and exact continuation actions | — |
|
|
36
44
|
| Per-skill byte cap | config | `context.skillMaxBytes` | `skills.byte-capping` |
|
|
37
45
|
| Conversation history (owner-only durable store) | auto | 64 messages per exact conversation id independent of `runtime.maxTurns`; aggregate defaults 256 MiB / 10,000 conversations / 365 inactive days; staged atomic publication and post-commit pruning; custom store via code | — |
|
|
@@ -45,7 +53,8 @@ Every framework capability and how a composed agent reaches it. This table is th
|
|
|
45
53
|
| Config-aware memory preview CLI (stats/today/show/search/top plus metadata-only audit; remains available when the live recall tool is disabled; local search warns and falls back to FTS-only when embeddings are down) | cli | `mono-agent memory stats\|today\|show <date>\|search <query>\|top\|audit [--limit <n>] [--json]` | — |
|
|
46
54
|
| Memory liveness check (managed tier/provider/model/dimension identity; provider-native typed discovery plus real finite-vector/dimension probe for Ollama or LM Studio; declared auth env; BuJo LLM config + consolidation cadence; no cross-provider fallback) | cli | `mono-agent validate` | — |
|
|
47
55
|
| Memory write modes and per-turn BuJo capture | config | `memory.writeMode`: `disabled`, `append-host-summary`, or `capture`; capture requires `memory.mode: "bujo"` | `memory.write-mode`, `memory.per-turn-capture` |
|
|
48
|
-
| Auto-provisioned read-only `MemoryRecall` tool exposed for every configured memory
|
|
56
|
+
| Auto-provisioned targeted read-only `MemoryRecall` tool exposed for every configured memory backend; no chat LLM | config | `config.memory.recallTool.enabled` (`MONO_AGENT_MEMORY_RECALL_TOOL_ENABLED`, default on; explicit false opts out of both explicit memory-read tools) | `memory.recall-tool` |
|
|
57
|
+
| Bounded `MemoryJournal` broad chronological retrieval over curated canonical local memory; Lite/Journal/BuJo only, Supermemory unsupported; no embedding/chat call | config + auto | Shares `memory.recallTool.enabled`; restrictive `tools.allowedTools` must name `MemoryJournal` (or its canonical MCP name/server wildcard), deny wins | `memory.journal-browse` |
|
|
49
58
|
| Agent-callable `Remember` tool that durably stores one explicitly stated fact; deterministic, append-only, no chat LLM; bujo backend and writable stores only; allowlist-gated and rejects credential-bearing text | config | `config.memory.rememberTool.enabled` (`MONO_AGENT_MEMORY_REMEMBER_TOOL_ENABLED`, default on for the bujo backend; explicit false opts out); a restrictive `tools.allowedTools` must name `Remember` | `memory.remember-tool` |
|
|
50
59
|
| In-app memory LLM call timeout | config | `memory.llm.timeoutMs` (`MONO_AGENT_MEMORY_LLM_TIMEOUT_MS`, default 60000) | `memory.llm-timeout` |
|
|
51
60
|
|
|
@@ -55,14 +64,15 @@ Every framework capability and how a composed agent reaches it. This table is th
|
|
|
55
64
|
| --- | --- | --- | --- |
|
|
56
65
|
| Allow-all tool policy (omitted / `["*"]` = all tools; `[]` = none) | config | default `tools.allowedTools`; the harness no-policy safety net is `failClosedToolPolicy()` | `tool-policy.allow-all` |
|
|
57
66
|
| Built-in tool allow/deny lists (deny wins, even under allow-all; pi doesn't deny external MCP tools) | config | `tools.allowedTools`, `tools.disallowedTools`; managed built-ins are Read/Write/Edit/Glob/Grep/Exec/Bash/NodeRepl/WebFetch/WebSearch | `tool-policy.allowlist`, `tool-policy.denylist`, `runtime.builtin-tools` |
|
|
58
|
-
|
|
|
59
|
-
| Pi-native
|
|
60
|
-
|
|
|
67
|
+
| Additional managed file-tool roots while process sandboxing is off | config | `tools.filesystem.readableRoots` adds roots for Read/Glob/Grep; `tools.filesystem.writableRoots` adds roots for Write/Edit and also makes them readable. Lexical and realpath containment reject traversal and symlink escapes. Native sandbox roots remain authoritative when enabled; these fields do not constrain shell command contents | `tool-policy.filesystem-roots` |
|
|
68
|
+
| Pi-native Exec/Bash background process jobs with exact-thread wake | config + cli + auto | `processJobs.*` opts in (default off; unsupported on Windows). Only controller-ready exact Slack, Telegram, and web-console turns gain optional `background`; request lineage diagnostics remain visible at exhaustion (default depth 4, cap 64). Background-only `wake_on_completion` defaults true; explicit false keeps terminal card updates without a wake. Exact sentinel-only replies suppress delivery; narration and rich content stay visible. Ambiguous wake receipts are unknown and never auto-replayed. Host-owned queue/runtime/output/depth/retention caps, owner-private records, inherited POSIX process groups, restart interruption, unforgeable-depth normal-tool wakes, Slack/Telegram same-message lifecycle updates, fail-closed live store health, `mono-agent jobs list\|get\|cancel`, and durable web cards are built in. Busy pre-turn wake admission remains pending without consuming its retry budget. JSON-only `unsafeAllowUnprotectedState` is an explicit sandbox-off/all-Pi trusted-host posture: it suppresses ProcessJobs and clear-sessions SRT while retaining registry, lease, private-root, and provider-zero route invariants, and warns that ProcessJobs state plus the operator secret are model-accessible. Commands that daemonize into another group or session are unsupported | `agent-app.process-jobs` |
|
|
69
|
+
| Pi-native `Monitor`/`MonitorStop` streaming watches with per-batch conversation wakes | config + cli | `monitors.*` opts in (default off; additionally requires `processJobs.enabled`, whose protected private-state root, registration proof and origin binding it reuses; unsupported on Windows). A monitor keeps a command alive after the turn returns, treats each stdout line as one event, coalesces within `coalesceMs`, and wakes the exact originating conversation per batch plus once at the end, steering an in-flight run or queuing its own turn and holding no provider slot. Command preparation, workdir rules, environment cleaning, sandbox seam and output redaction are shared with `Bash`, so there is no separate command allowlist. Tool fields default to `wake_on: batch`, `dedupe: none`, `min_wake_interval_ms: 0`. Opt-in consecutive batch dedupe ignores ANSI redraw controls only; meaningful whitespace and timestamps remain significant. The host clamps the interval to `monitors.maxWakeIntervalMs` (default/cap 300000) and reports the effective policy. Exit-only permits only default dedupe/interval and sends one terminal wake with a bounded tail. First and terminal wakes bypass the interval; cancellation must never automatically recreate a watch. CLI/web expose durable suppression and follow-up/steered/unknown wake counters, not invented model costs. `monitors.maxChainDepth` defaults to4, cap64. Capacity is counted independently of `processJobs.*`; one wake per monitor is in flight at a time, pending batches are bounded in lines and bytes with oldest-drop accounting reported to the model, and a sustained firehose stops the watch with `rate_limited` plus one terminal wake. A pre-dispatch refusal is re-offered with the same batch under a fresh sequence; every other delivery failure is never replayed. Restart marks live monitors `interrupted`, terminates the incarnation-matched group, and owes exactly one recovery wake without re-running a model-authored command. The fenced envelope declares the turn host-raised and its content untrusted, and a `NOTHING_TO_REPORT` reply is suppressed. Availability is Telegram, Slack, and existing user-created web conversations; cron, webhook, web:new, TUI-direct and A2A never receive the tools. `mono-agent monitors list\|get\|cancel` is the operator surface | `agent-app.monitors` |
|
|
70
|
+
| Local-first public-web research | config + auto | `tools.web.coordination: "host"` shares private admission/cooldown/quota state across agents under one OS user (default `process`); `mono-agent web-control status` inspects it. Broad primary queries and WebFetch `start_line`/`max_lines` avoid repeated work; Codex keeps a 10% quota reserve. `tools.web.search.maxRequestsPerRun` defaults to four actual provider requests per logical run, with cache/coalescing/cooldown/quota skips free. `tools.web.search.backend`, provider-scoped `searxng.endpoint` / `ollama.*`, and `codex.model` select strict providers or public no-credentials fallbacks; `auto` tries explicitly configured Ollama → configured SearXNG → Codex → keyless. Cooldowns advance immediately and tell the model not to sleep or retry. `tools.web.fetch.{render,browserCommand}` keeps deterministic static extraction as the default and optionally enables isolated agent-browser rendering; `render: "always"` is an explicit browser-first tool call under an `auto` config ceiling, and transient-fetch retry behavior is automatic rather than config-bearing | `runtime.web-research` |
|
|
61
71
|
| MCP servers (stdio/sse/http) from a JSON file | config | `tools.mcpConfigPath` | `tool-policy.mcp-servers` |
|
|
62
72
|
| Generated reply files and Pi-native MCP Apps | config + auto | `PublishReplyFile` is included under allow-all or must be named in a restrictive `tools.allowedTools`; it publishes confined files through owner-private integrity storage for native Slack/Telegram upload and web download. MCP Apps appear only when every configured runtime route supports the Pi-owned bridge, and render only in the hardened web console. Files and Apps share a 20-part run cap; retention follows `artifacts.retention.maxAgeDays` | `agent-app.rich-replies` |
|
|
63
73
|
| Durable origin-bound continuations for trusted stdio/loopback-HTTP MCP services | config + auto | `tools.continuationServers` + `continuations.*`; interactive claims pin a bounded immutable origin snapshot before commit, exact rollover buckets are preserved, v3 state is restart-safe, and unavailable/legacy snapshots use a fixed zero-model fallback | `agent-app.durable-continuations` |
|
|
64
74
|
| Adapter-derived send tools for enabled Slack/Telegram adapters | config | auto-available under allow-all once the channel is enabled; a **specific** `tools.allowedTools` must include `SlackSendMessage` / `TelegramSendMessage`; valid `slack.*` / `telegram.*` config and existing adapter allowlists provide credentials and destination bounds; confirmed message posts are idempotently recorded in destination history | `agent-app.adapter-send-tools` |
|
|
65
|
-
| Interaction bridge for adapter-send history, structured blocking asks, and MCP progress | config + auto | `interaction.bridge.{host,port}`, `interaction.askUser.timeoutMs
|
|
75
|
+
| Interaction bridge for adapter-send history, structured blocking asks, and MCP progress | config + auto | `interaction.bridge.{host,port}`, `interaction.askUser.timeoutMs` (default 600000; `null` disables automatic expiry), `interaction.progress.enabled`; env `MONO_AGENT_INTERACTION_BRIDGE_HOST`, `MONO_AGENT_INTERACTION_BRIDGE_PORT`, `MONO_AGENT_ASK_USER_TIMEOUT_MS` (`none` disables automatic expiry), `MONO_AGENT_PROGRESS_ENABLED`. It auto-starts for configured Slack/Telegram send tools, when `AskUser` is allowed, when an `interaction` block or interaction env override is configured, or when `interaction.progress.enabled` resolves true and `tools.mcpRequestContextServers` names at least one opted project stdio MCP server. AskUser presents all questions together on web and sequential native controls on Slack/Telegram. | `interaction.bridge` |
|
|
66
76
|
| Sandbox on/off + srt engine (Pi-owned tools) | config | `sandbox.mode` | `sandbox.mode` |
|
|
67
77
|
| Network policy (none/localhost/allowlist/all) | config | `sandbox.network.{mode,allowlist}` | `sandbox.network-policy` |
|
|
68
78
|
| Filesystem scopes (readable/writable roots, deny-write globs) | config | `sandbox.readableRoots`, `sandbox.writableRoots`, `sandbox.denyWrite` | `sandbox.filesystem-scopes` |
|
|
@@ -80,19 +90,20 @@ Every framework capability and how a composed agent reaches it. This table is th
|
|
|
80
90
|
| Telegram inbound audio transcription | config | `telegram.transcription.{endpoint,model,language,timeoutMs}`; opt-in OpenAI-compatible transcription endpoint for voice notes, audio files, and round-video attachments | `telegram.transcription` |
|
|
81
91
|
| Slack (Socket Mode, channel allowlist, mention handling, native runtime controls) | config + code | `slack` section; optional `slack.unfurlLinks` / `slack.unfurlMedia` control native agent message previews while omission preserves Slack defaults; built-in Block Kit controls use configured primary/fallback choices through DM-wide/thread-local `@agent /model` and `@agent /effort`, plus channel-wide workspace commands `/<bot>-model` and `/<bot>-effort` derived from `auth.test.user` (Slack app registration + `commands` scope; no mono-agent config key) | `slack.socket-mode` |
|
|
82
92
|
| Slack speaker names (who sent each turn) | config | `slack.resolveUserNames` (default `true`) resolves the sender's display name and handle via `users.info`; requires the `users:read` bot scope; best-effort, so a missing scope leaves turns unnamed instead of failing them; the resolved name is durable (stored turn + memory label) | `slack.speaker-names` |
|
|
83
|
-
| Surface awareness (which channel/DM the turn is in) | config | Always on for Slack and Telegram: the Session block states the surface kind, its id, and the per-message character budget. `slack.resolveChannelNames` (default `true`) adds the Slack channel NAME via `conversations.info` and requires `channels:read`/`groups:read`; best-effort, so a missing scope leaves the surface named by kind and id. Surface ids are model-visible by design — pair with an explicit `slack.allowedChannelIds` allowlist if `SlackSendMessage` is enabled | `channels.surface-awareness` |
|
|
93
|
+
| Surface awareness (which channel/DM the turn is in) | config | Always on for Slack and Telegram: the Session block states the surface kind, its id, and the per-message character budget. `slack.resolveChannelNames` (default `true`) adds the Slack channel NAME via `conversations.info` and requires `channels:read`/`groups:read`; best-effort, so a missing scope leaves the surface named by kind and id. Surface ids are model-visible by design — pair with an explicit `slack.allowedChannelIds` allowlist if `SlackSendMessage` is enabled. Interactive console turns (web console thread, terminal TUI) are told which console they are on and given the thread's own conversation id verbatim (`web:<threadId>`), so an agent can quote it to host-side tools and operator commands that bind background work (Monitor, process jobs, task records) to that exact thread; cron/webhook/API turns still disclose nothing | `channels.surface-awareness` |
|
|
84
94
|
| Slack thread/channel turn context (what was said before the agent was triggered) | config | `slack.threadContext.{enabled,maxMessages,requestLimit,timeoutMs,includeBotMessages}`, defaults `true`/`15`/`15`/`4000`/`true`; reads `conversations.replies` in a thread and `conversations.history` otherwise; requires `channels:history` / `groups:history` / `im:history` / `mpim:history`; one request per turn with a per-channel rate-limit breaker; best-effort, so a missing scope or rate limit sends no transcript instead of failing the turn | `slack.thread-context` |
|
|
85
95
|
| Slack global/message shortcuts | config | `slack.shortcuts[]: {callbackId, prompt, channelId?, ackText?, threadReply?}`; JSON-only | `slack.shortcuts` |
|
|
86
96
|
| Slack App Home actions | config | `slack.homeTab: {enabled?, headerText?, buttons?:[{actionId, label, prompt, channelId?, ackText?, threadReply?}]}`; `enabled` defaults to `false`, `buttons` defaults to `[]`; JSON-only | `slack.app-home` |
|
|
87
97
|
| External channel plugins | config | `channels.plugins[]: { package, id?, label?, config? }`; package must export `createChannelDriver(options)` or a default driver factory | `channel.plugins` |
|
|
88
98
|
| WhatsApp (Baileys, QR login, group mention/any triggers) | config | `channels.plugins[].package: "@mono-agent/whatsapp-adapter"` plus plugin `config.{enabled,allowedChatJids,allowAllChats,groupMode,botJids,mentionTextAliases,stripMentionText}` | `whatsapp.baileys` |
|
|
99
|
+
| Facebook Messenger (signed Meta webhook + Send API, PSID allowlist) | config | `channels.plugins[].package: "@mono-agent/messenger-adapter"` plus plugin `config.{enabled,allowedUserIds,allowAllUsers,host,port,webhookPath,apiVersion,allowNonLoopback,proactiveMessagingType,proactiveTag}`; the three credentials are environment-only and rejected in JSON — `MONO_AGENT_MESSENGER_PAGE_ACCESS_TOKEN`, `MONO_AGENT_MESSENGER_APP_SECRET`, `MONO_AGENT_MESSENGER_VERIFY_TOKEN` | `messenger.graph` |
|
|
89
100
|
| A2A provider (Agent Card, JSON-RPC + REST, streaming, bearer, configurable request-body limit, opt-in durable dispatch identity) | config | `channels.plugins[].package: "@mono-agent/a2a-adapter"` plus plugin `config.provider` (including `maxRequestBytes` and `idempotency.{namespace,stateDir,retentionMs,maxRecords}`), `config.agent`, `config.skill`; `config.enabled` is canonical | `a2a.provider` |
|
|
90
101
|
| A2A consumer settings (remote agent URLs, timeouts) and calls | config + code | same A2A plugin entry's `config.consumer`; calls via `sendA2AMessage({ idempotencyKey })` or `createA2AConsumerResponder({ idempotencyKeyForRequest })` | `a2a.consumer` |
|
|
91
102
|
| TUI stream endpoint (operator console transport) | config | `tui.{enabled,host,port,basePath,allowNonLoopback,apiKey}`; default on, loopback; `/v1/info` capability-gates exact AskUser and agent-owned cron routes without changing wire schema 1 | `tui.stream-endpoint` |
|
|
92
103
|
| Cron jobs (five-field expressions, timezones, stable job-id-seeded `H`; agent-app pins overlap to skip) | config + code | `cron.jobs[]`, including per-job `model` / `effort`; single-job `MONO_AGENT_CRON_*`, or one markdown file per job in `cron.dir` / `MONO_AGENT_CRON_DIR` (default `cron/`); `cron.operatorActions.enabled` / `MONO_AGENT_CRON_OPERATOR_ACTIONS_ENABLED` opt in to authenticated, confirmed, idempotent run-now and runtime enable controls (default off; never rewrites config); queue/replace controls are programmatic-only `startCronAdapter` options | `cron.scheduled-prompts` |
|
|
93
104
|
| Cron per-run watchdog | config + code | `cron.jobs[].maxRunMs` or `maxRunMs` frontmatter; programmatic adapter fallback via `startCronAdapter({ maxRunMs })` | `cron.run-watchdog` |
|
|
94
|
-
| Per-request runtime model and effort overrides | config + code | `cron.jobs[].{model,effort}`; `webhook.endpoints[].{model,effort}` plus request body `{model,effort}` (request wins); Telegram `/model` and `/effort`; Slack Block Kit selectors through thread-local `@agent /model` / `@agent /effort` and channel-wide `/<bot>-model` / `/<bot>-effort`, all over configured primary/fallback models | `runtime.per-trigger-model` |
|
|
95
|
-
| Native final-answer notification for cron/webhook | config | Per job/endpoint `notify`; explicit `notifyConversationId` wins, otherwise inference occurs only with exactly one notify-capable Telegram/Slack candidate. With 0 or 2+ candidates delivery is skipped with a warning. Artifact-derived candidates use a 30-second post-scan cache. Telegram/Slack artifact commits invalidate it immediately; runs using default synthetic `cron:`/`webhook:` ids do not. Other artifact changes appear after expiry and the next scan. Cron model-exhaustion notices require an explicit `notifyConversationId` and never infer; `notifyFailureCooldownHours` rate-limits them. | `channel.native-notify` |
|
|
105
|
+
| Per-request runtime model and effort overrides | config + code | `cron.jobs[].{model,effort}`; `webhook.endpoints[].{model,effort}` plus request body `{model,effort}` (request wins); Telegram `/model` and `/effort`; Slack Block Kit selectors through thread-local `@agent /model` / `@agent /effort` and channel-wide `/<bot>-model` / `/<bot>-effort`, all over configured primary/fallback models. Model-only turns inherit effort per route: primary = `runtime.effort`, configured fallback = its pinned effort or provider default, other advertised model = `runtime.effort` only when admitted | `runtime.per-trigger-model` |
|
|
106
|
+
| Native final-answer notification for cron/webhook | config | Per job/endpoint `notify`; explicit `notifyConversationId` wins, otherwise inference occurs only with exactly one notify-capable Telegram/Slack/Messenger candidate. With 0 or 2+ candidates delivery is skipped with a warning. Artifact-derived candidates use a 30-second post-scan cache. Telegram/Slack/Messenger artifact commits invalidate it immediately; runs using default synthetic `cron:`/`webhook:` ids do not. Other artifact changes appear after expiry and the next scan. Cron model-exhaustion notices require an explicit `notifyConversationId` and never infer; `notifyFailureCooldownHours` rate-limits them. | `channel.native-notify` |
|
|
96
107
|
| Channel message texts / stream tuning (welcome, debounce, ...) | code | channel driver overrides | — |
|
|
97
108
|
| Custom transports | config + code | implement `ChannelDriver` and expose it through `channels.plugins[]`, or pass it via `startMonoAgentApp({ drivers })` | `channel.custom` |
|
|
98
109
|
|
|
@@ -104,10 +115,9 @@ Every framework capability and how a composed agent reaches it. This table is th
|
|
|
104
115
|
| Trace-source registry (heartbeat manifests `mono-agent status` reads) | config | `traceability.{registryDir,sourceId,sourceLabel,heartbeatMs,staleAfterMs,globalDiscovery}` | `observability.trace-registry` |
|
|
105
116
|
| Phoenix trace viewer (best-effort terminal-batched OTLP exporter; independent local JSONL has bounded terminal snapshots and can lose RAM-buffered events on crash) | config | `observability.exporters` (phoenix entry) | `observability.phoenix-exporter` |
|
|
106
117
|
| Operator console (live chat with thinking/tool/telemetry insight, run replay, config view, and owner-authenticated process-job routes when enabled) | cli | `mono-agent tui [--agent <label>]`; agents serve the `tui` stream endpoint by default (`tui.enabled`, loopback); `mono-agent jobs` uses a separate owner capability | — |
|
|
107
|
-
| Always-on multi-agent web console (persistent conversations and same-thread quotes, agent-maintained semantic titles with permanent manual-rename precedence, durable process-job cards, live active-agent skill discovery with canonical `$skill-name` insertion, fixed compact/expanded rail, offline-agent filtering that always preserves pinned/selected agents, durable Web Push, exact structured AskUser reconciliation, stable read-only per-cron channels with bounded keyset history, attachments, model/effort selection, reasoning/tools, hidden telemetry-backed cumulative context usage, cancellation) | cli | `mono-agent web start\|stop\|restart\|status\|logs\|run`; stable cron routes are `/agents/:sourceId/cron/:jobId`, read next-run only from capable agents, and expose confirmed mutations only when the agent has an operator key and `cron.operatorActions.enabled`; process-job cards are source/thread-bound and update through the owner-authenticated operator proxy without a live browser; skill autocomplete/browse reads the running agent's bounded registry and never sends on selection; bare `mono-agent web` is read-only status/help; default `0.0.0.0:5050`, `--loopback` narrows to `127.0.0.1`; package `@mono-agent/web`; no app authentication, so LAN/Tailnet reachability is the access boundary | — |
|
|
108
|
-
| Managed proposal-only SELF-CONFIG conversation | cli + tool | macOS `mono-agent tui --configure` attaches to the authoritative background agent; persistent marker and capability map; stable configuration conversation with a fresh proposal capability after each checkpoint; host-gated `ProposeAgentConfiguration`; approval restarts and waits for readiness, failed start rolls files/agent back; only quitting exits. `--local` is ordinary chat only; off macOS configuration is manual | — |
|
|
118
|
+
| Always-on multi-agent web console (persistent conversations and same-thread quotes, one server-authoritative UUID-bearing Send path with durable read-only receipt recovery, agent-maintained semantic titles with permanent manual-rename precedence, durable process-job cards, live active-agent skill discovery with canonical `$skill-name` insertion, fixed compact/expanded rail, offline-agent filtering that always preserves pinned/selected agents, durable Web Push, exact structured AskUser reconciliation, stable read-only per-cron channels with bounded keyset history, attachments, per-conversation model/effort selection, SQLite-persisted per-agent defaults for new web conversations with one-click config revert, per-run requested/attempted/executed route and effective-effort attribution including nested subagents, remembered process-job/Monitor revival selection, reasoning/tools, hidden telemetry-backed cumulative context usage, cancellation) | cli | `mono-agent web start\|stop\|restart\|status\|logs\|run`; stable cron routes are `/agents/:sourceId/cron/:jobId`, read next-run only from capable agents, and expose confirmed mutations only when the agent has an operator key and `cron.operatorActions.enabled`; process-job cards are source/thread-bound and update through the owner-authenticated operator proxy without a live browser; standalone process-job/Monitor wake turns re-read the thread snapshot while an active Web Send targets the exact owned run or visibly queues on an older operator; fallback reasons and retries are bounded/sanitized before browser projection; skill autocomplete/browse reads the running agent's bounded registry and never sends on selection; bare `mono-agent web` is read-only status/help; default `0.0.0.0:5050`, `--loopback` narrows to `127.0.0.1`; `--theme` selects the shell and `--name <label>` replaces the hostname-derived PWA/tab/rail label on start/restart/run, `--name -` restores the hostname default, and managed selections are persisted; package `@mono-agent/web`; no app authentication, so LAN/Tailnet reachability is the access boundary | — |
|
|
109
119
|
| Setup presets (saved answer-sets: generate config + `.env.example` + checklist) | cli | `mono-agent presets list\|show <id>`, `mono-agent init --preset <id> --yes` (the `recipes` command and `--recipe` alias were removed) | — |
|
|
110
|
-
| Interactive setup wizard (preset/custom; exact `IDENTITY.md` → `## Role` prompt/outcome; walks model→channels→memory→tools→sandbox→observability; Journal/BuJo explicitly choose Ollama or LM Studio service root/model/dimension/optional auth env using typed discovery and a real probe; macOS starts the background agent
|
|
120
|
+
| Interactive setup wizard (preset/custom; exact `IDENTITY.md` → `## Role` prompt/outcome; walks model→channels→memory→tools→sandbox→observability; Journal/BuJo explicitly choose Ollama or LM Studio service root/model/dimension/optional auth env using typed discovery and a real probe; macOS starts the background agent and prints manual edit/validate/restart/TUI steps) | cli | `mono-agent init` (no flags, on a TTY; `setup` alias); manual embedding entry still requires readiness probe; flags/non-TTY stay scaffold-only; unsupported platforms use manual configuration/foreground start/ordinary TUI | — |
|
|
111
121
|
| Tools reporting + no-tools guardrail (allow-all → `All tools allowed`; explicit empty `allowedTools: []` → `waiting`; unknown-tool "did you mean"; send-tool/channel cross-checks) | cli | part of `mono-agent validate`/`doctor`; the wizard's tools step | — |
|
|
112
122
|
| Resolved config view (every field tagged env/json/default) | cli | `mono-agent config` | — |
|
|
113
123
|
| Scaffold / validate / start / install-skill | cli | `mono-agent init [--model <ref>] [--fallback <ref> [--fallback-effort <provider-default\|level>]]... [--effort <level>] [--auth]\|validate [--consumer <path>]\|config\|presets\|start\|install-skill [--target claude\|codex\|both] [--force] [--no-docs-mcp]`; the legacy CLI `--fallback-models <csv>` flag was removed (JSON/env compat inputs remain) | — |
|
|
@@ -116,3 +126,9 @@ Every framework capability and how a composed agent reaches it. This table is th
|
|
|
116
126
|
| Explicit failure objects (no fake success) | auto | harness | — |
|
|
117
127
|
| Per-request runtime options, custom memory/history stores | code | `createConfiguredAgentResponder` options | — |
|
|
118
128
|
| Multi-agent delegation (`AskCollaborator` loopback MCP tool) | code | `@mono-agent/agent-orchestrator` | — |
|
|
129
|
+
|
|
130
|
+
Prompt-cache diagnostics: set `providers.piNative.promptCacheDiagnostics` (default
|
|
131
|
+
`false`) or `MONO_AGENT_PI_PROMPT_CACHE_DIAGNOSTICS` to retain metadata-only request
|
|
132
|
+
fingerprints in existing run artifacts. Use the framework script
|
|
133
|
+
`scripts/summarize-prompt-cache.mjs` for token-weighted cache ratios and fingerprint
|
|
134
|
+
changes; see [measurement](https://mono-agent-docs.vercel.app/runtime/prompt-cache-measurement/).
|