@mono-agent/agent-app 0.3.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. package/README.md +24 -10
  2. package/dist/adapter-send-tools-main.d.ts +3 -0
  3. package/dist/adapter-send-tools-main.d.ts.map +1 -0
  4. package/dist/adapter-send-tools-main.js +20 -0
  5. package/dist/adapter-send-tools-main.js.map +1 -0
  6. package/dist/adapter-send-tools.d.ts +125 -0
  7. package/dist/adapter-send-tools.d.ts.map +1 -0
  8. package/dist/adapter-send-tools.js +629 -0
  9. package/dist/adapter-send-tools.js.map +1 -0
  10. package/dist/app-config.d.ts +86 -26
  11. package/dist/app-config.d.ts.map +1 -1
  12. package/dist/app-config.js +284 -90
  13. package/dist/app-config.js.map +1 -1
  14. package/dist/app.d.ts +51 -20
  15. package/dist/app.d.ts.map +1 -1
  16. package/dist/app.js +889 -119
  17. package/dist/app.js.map +1 -1
  18. package/dist/artifact-retention.d.ts +32 -0
  19. package/dist/artifact-retention.d.ts.map +1 -0
  20. package/dist/artifact-retention.js +111 -0
  21. package/dist/artifact-retention.js.map +1 -0
  22. package/dist/audit-runs.d.ts +12 -0
  23. package/dist/audit-runs.d.ts.map +1 -0
  24. package/dist/audit-runs.js +68 -0
  25. package/dist/audit-runs.js.map +1 -0
  26. package/dist/backfill.d.ts +75 -0
  27. package/dist/backfill.d.ts.map +1 -0
  28. package/dist/backfill.js +350 -0
  29. package/dist/backfill.js.map +1 -0
  30. package/dist/background.d.ts +8 -5
  31. package/dist/background.d.ts.map +1 -1
  32. package/dist/background.js +279 -53
  33. package/dist/background.js.map +1 -1
  34. package/dist/broadcast-recorder.d.ts +27 -0
  35. package/dist/broadcast-recorder.d.ts.map +1 -0
  36. package/dist/broadcast-recorder.js +82 -0
  37. package/dist/broadcast-recorder.js.map +1 -0
  38. package/dist/channel-config-view.d.ts +28 -0
  39. package/dist/channel-config-view.d.ts.map +1 -0
  40. package/dist/channel-config-view.js +79 -0
  41. package/dist/channel-config-view.js.map +1 -0
  42. package/dist/channel-gate.d.ts +22 -0
  43. package/dist/channel-gate.d.ts.map +1 -0
  44. package/dist/channel-gate.js +35 -0
  45. package/dist/channel-gate.js.map +1 -0
  46. package/dist/channel-plugins.d.ts +39 -0
  47. package/dist/channel-plugins.d.ts.map +1 -0
  48. package/dist/channel-plugins.js +346 -0
  49. package/dist/channel-plugins.js.map +1 -0
  50. package/dist/channels.d.ts +62 -66
  51. package/dist/channels.d.ts.map +1 -1
  52. package/dist/channels.js +850 -120
  53. package/dist/channels.js.map +1 -1
  54. package/dist/cli.d.ts +103 -4
  55. package/dist/cli.d.ts.map +1 -1
  56. package/dist/cli.js +984 -112
  57. package/dist/cli.js.map +1 -1
  58. package/dist/config-reference.d.ts +24 -0
  59. package/dist/config-reference.d.ts.map +1 -0
  60. package/dist/config-reference.js +580 -0
  61. package/dist/config-reference.js.map +1 -0
  62. package/dist/configured-agent.d.ts +104 -0
  63. package/dist/configured-agent.d.ts.map +1 -0
  64. package/dist/configured-agent.js +578 -0
  65. package/dist/configured-agent.js.map +1 -0
  66. package/dist/consumer-contract.d.ts +36 -0
  67. package/dist/consumer-contract.d.ts.map +1 -0
  68. package/dist/consumer-contract.js +290 -0
  69. package/dist/consumer-contract.js.map +1 -0
  70. package/dist/doctor.d.ts +17 -0
  71. package/dist/doctor.d.ts.map +1 -1
  72. package/dist/doctor.js +392 -95
  73. package/dist/doctor.js.map +1 -1
  74. package/dist/index.d.ts +14 -6
  75. package/dist/index.d.ts.map +1 -1
  76. package/dist/index.js +7 -3
  77. package/dist/index.js.map +1 -1
  78. package/dist/init.d.ts +23 -7
  79. package/dist/init.d.ts.map +1 -1
  80. package/dist/init.js +91 -26
  81. package/dist/init.js.map +1 -1
  82. package/dist/install-skill.d.ts +1 -1
  83. package/dist/install-skill.js +2 -2
  84. package/dist/install-skill.js.map +1 -1
  85. package/dist/interaction-bridge.d.ts +72 -0
  86. package/dist/interaction-bridge.d.ts.map +1 -0
  87. package/dist/interaction-bridge.js +354 -0
  88. package/dist/interaction-bridge.js.map +1 -0
  89. package/dist/launchd.d.ts +0 -2
  90. package/dist/launchd.d.ts.map +1 -1
  91. package/dist/launchd.js +0 -2
  92. package/dist/launchd.js.map +1 -1
  93. package/dist/memory-command.d.ts +10 -0
  94. package/dist/memory-command.d.ts.map +1 -0
  95. package/dist/memory-command.js +649 -0
  96. package/dist/memory-command.js.map +1 -0
  97. package/dist/memory-recall-main.d.ts +3 -0
  98. package/dist/memory-recall-main.d.ts.map +1 -0
  99. package/dist/memory-recall-main.js +30 -0
  100. package/dist/memory-recall-main.js.map +1 -0
  101. package/dist/memory-recall.d.ts +147 -0
  102. package/dist/memory-recall.d.ts.map +1 -0
  103. package/dist/memory-recall.js +345 -0
  104. package/dist/memory-recall.js.map +1 -0
  105. package/dist/memory-rituals.d.ts +8 -11
  106. package/dist/memory-rituals.d.ts.map +1 -1
  107. package/dist/memory-rituals.js +26 -25
  108. package/dist/memory-rituals.js.map +1 -1
  109. package/dist/metrics.d.ts +13 -0
  110. package/dist/metrics.d.ts.map +1 -0
  111. package/dist/metrics.js +105 -0
  112. package/dist/metrics.js.map +1 -0
  113. package/dist/notify-destinations.d.ts +23 -0
  114. package/dist/notify-destinations.d.ts.map +1 -0
  115. package/dist/notify-destinations.js +79 -0
  116. package/dist/notify-destinations.js.map +1 -0
  117. package/dist/posted-message-index.d.ts +61 -0
  118. package/dist/posted-message-index.d.ts.map +1 -0
  119. package/dist/posted-message-index.js +178 -0
  120. package/dist/posted-message-index.js.map +1 -0
  121. package/dist/proactive-notify.d.ts +32 -0
  122. package/dist/proactive-notify.d.ts.map +1 -0
  123. package/dist/proactive-notify.js +62 -0
  124. package/dist/proactive-notify.js.map +1 -0
  125. package/dist/recipes/base.d.ts +15 -0
  126. package/dist/recipes/base.d.ts.map +1 -0
  127. package/dist/recipes/base.js +51 -0
  128. package/dist/recipes/base.js.map +1 -0
  129. package/dist/recipes/catalog.d.ts +4 -0
  130. package/dist/recipes/catalog.d.ts.map +1 -0
  131. package/dist/recipes/catalog.js +509 -0
  132. package/dist/recipes/catalog.js.map +1 -0
  133. package/dist/recipes/index.d.ts +11 -0
  134. package/dist/recipes/index.d.ts.map +1 -0
  135. package/dist/recipes/index.js +14 -0
  136. package/dist/recipes/index.js.map +1 -0
  137. package/dist/recipes/types.d.ts +70 -0
  138. package/dist/recipes/types.d.ts.map +1 -0
  139. package/dist/recipes/types.js +15 -0
  140. package/dist/recipes/types.js.map +1 -0
  141. package/dist/request-model-override.d.ts +67 -0
  142. package/dist/request-model-override.d.ts.map +1 -0
  143. package/dist/request-model-override.js +96 -0
  144. package/dist/request-model-override.js.map +1 -0
  145. package/dist/runs-health.d.ts +22 -0
  146. package/dist/runs-health.d.ts.map +1 -0
  147. package/dist/runs-health.js +144 -0
  148. package/dist/runs-health.js.map +1 -0
  149. package/dist/seen-conversations.d.ts +22 -0
  150. package/dist/seen-conversations.d.ts.map +1 -0
  151. package/dist/seen-conversations.js +120 -0
  152. package/dist/seen-conversations.js.map +1 -0
  153. package/dist/sessions.d.ts +21 -0
  154. package/dist/sessions.d.ts.map +1 -0
  155. package/dist/sessions.js +45 -0
  156. package/dist/sessions.js.map +1 -0
  157. package/dist/setup.d.ts +29 -0
  158. package/dist/setup.d.ts.map +1 -0
  159. package/dist/setup.js +97 -0
  160. package/dist/setup.js.map +1 -0
  161. package/dist/trigger-overrides.d.ts +17 -0
  162. package/dist/trigger-overrides.d.ts.map +1 -0
  163. package/dist/trigger-overrides.js +30 -0
  164. package/dist/trigger-overrides.js.map +1 -0
  165. package/dist/tui-command.d.ts +56 -0
  166. package/dist/tui-command.d.ts.map +1 -0
  167. package/dist/tui-command.js +160 -0
  168. package/dist/tui-command.js.map +1 -0
  169. package/dist/ui.d.ts +54 -0
  170. package/dist/ui.d.ts.map +1 -0
  171. package/dist/ui.js +157 -0
  172. package/dist/ui.js.map +1 -0
  173. package/dist/web-command.d.ts +39 -0
  174. package/dist/web-command.d.ts.map +1 -0
  175. package/dist/web-command.js +151 -0
  176. package/dist/web-command.js.map +1 -0
  177. package/package.json +22 -17
  178. package/schema/mono-agent.config.schema.json +1686 -0
  179. package/skills/mono-agent-composer/SKILL.md +38 -12
  180. package/skills/mono-agent-composer/agents/openai.yaml +4 -0
  181. package/skills/mono-agent-composer/references/config-blueprint.md +84 -31
  182. package/skills/mono-agent-composer/references/discovery-questions.md +49 -36
  183. package/skills/mono-agent-composer/references/feature-coverage.md +26 -19
  184. package/skills/mono-agent-composer/references/package-map.md +20 -22
  185. package/skills/mono-agent-composer/references/playbooks.md +209 -0
  186. package/skills/mono-agent-composer/references/validation.md +14 -5
@@ -5,10 +5,31 @@ description: Construct a working mono-agent in the current folder from one mono-
5
5
 
6
6
  # Mono Agent Composer
7
7
 
8
- Construct a working mono-agent in the user's current folder — empty or already holding knowledge — from one `mono-agent.config.json`. Discover what the user wants (runtime with backup models, communication channels incl. crons and webhooks, skills, MCP servers, memory strategy incl. semantic search, sandbox, operator console, observability), write the config, then make it run with the `mono-agent` CLI. No hand-written host code unless the user genuinely needs programmatic composition. `references/feature-coverage.md` maps every framework feature to a config key, CLI flag, or the programmatic escape hatch consult it before declaring anything impossible or inventing keys.
8
+ Construct a working mono-agent in the user's current folder — empty or already holding knowledge — from one `mono-agent.config.json`. Discover what the user wants (runtime with backup models, communication channels incl. crons and webhooks, skills, MCP servers, memory strategy incl. semantic search, sandbox, observability), write the config, then make it run with the `mono-agent` CLI. The config is JSON-first: edit `mono-agent.config.json` directly (agents can edit it too); changes apply on the next `mono-agent restart`. No hand-written host code unless the user genuinely needs programmatic composition.
9
+
10
+ ## Authoritative Sources — Read the References, Not the Package Source
11
+
12
+ The `references/*.md` bundled beside this SKILL.md ARE the source of truth for what a mono-agent can do and how to configure it. They are maintained in lockstep with the framework and are **complete for configuration and capabilities**. Answer every "can it do X?", "what is the key for Y?", and "how is Z configured?" from them.
13
+
14
+ Do **not** read or grep the `@mono-agent` TypeScript/package source — `packages/*/src`, `node_modules/@mono-agent/*`, the vendored runtime — to compose, configure, or troubleshoot an agent. For configuration the source is not more authoritative than the references: it is slower, easy to misread, and full of internal-only knobs that are NOT user-configurable. You will usually be working in the user's own agent folder where that source does not even exist.
15
+
16
+ - `references/feature-coverage.md` is the **exhaustive** map of every feature to a `config` key, `cli` flag, `auto` behavior, or `code`-only escape hatch. If a capability is listed `config`/`cli`, use that key/flag verbatim. If it is **not in the table, or is marked `code`**, it is not reachable through `mono-agent.config.json` — say so plainly and name the escape hatch. Absence from the table means "not configurable," never "go check the source."
17
+ - The real exception: if the user is **modifying the framework itself** (changing `@mono-agent` package code), that is framework development, not composing an agent — outside this skill. Only then is reading `packages/*/src` correct.
18
+ - The published docs site (<https://mono-agent-docs.vercel.app/>) is the human-facing companion and the repo's `docs/` is a repo-only long-form mirror an end user will not have. Neither is needed: the bundled references work offline and are sufficient.
19
+
20
+ **Red flags — STOP, you are about to grep source you should not:**
21
+
22
+ | Thought | Reality |
23
+ | --- | --- |
24
+ | "Let me verify the key name against the source." | The references give the exact key. Trust them; don't re-derive from source. |
25
+ | "The references might be incomplete — I'll double-check `packages/.../src`." | `feature-coverage.md` is exhaustive for config/CLI. Not in it = not configurable. |
26
+ | "I'll confirm the docs and source agree." | You are composing an agent, not auditing the framework. The references are the contract. |
27
+ | "The real behavior is in the source, not just the docs." | For configuration the references are authoritative. Answer from them and stop. |
9
28
 
10
29
  ## Operating Rules
11
30
 
31
+ - Answer capability/config questions from the bundled `references/*.md` (authoritative and complete) — never grep or read the `@mono-agent` package source to compose an agent. See "Authoritative Sources" above.
32
+
12
33
  - The deliverable is a folder that works: `mono-agent.config.json` + `IDENTITY.md` (+ optional `skills/`, `mcp.json`), validated and started — not a tutorial.
13
34
  - Start by discovering the intended agent product, not by naming packages.
14
35
  - Ask one question at a time; skip anything the user already answered.
@@ -25,11 +46,12 @@ The `mono-agent` CLI ships with `@mono-agent/agent-app` on npm:
25
46
  npm install -g @mono-agent/agent-app # or: npx @mono-agent/agent-app …
26
47
  ```
27
48
 
28
- To run an unreleased build instead, use a clone of the mono-agent workspace:
49
+ To run an unreleased build instead, use a clone of the mono-agent workspace with Node 20+ and pnpm 10 or newer already installed:
29
50
 
30
51
  ```bash
31
52
  git clone <mono-agent-repo> ~/mono-agent && cd ~/mono-agent
32
- corepack enable && pnpm install --frozen-lockfile && pnpm run build
53
+ pnpm install --frozen-lockfile
54
+ pnpm run build
33
55
  alias mono-agent="node ~/mono-agent/packages/agent-app/dist/cli.js"
34
56
  ```
35
57
 
@@ -37,42 +59,46 @@ Everything below runs in the user's agent folder, not the workspace.
37
59
 
38
60
  ## Composition Flow
39
61
 
40
- 1. **Discover.** Read `references/discovery-questions.md` and resolve: runtime model + backup models, channels, identity/knowledge, skills, tools/MCP, memory strategy, sandbox, observability, and the acceptance smoke test.
41
- 2. **Scaffold.** In the user's folder run:
62
+ 1. **Discover.** Read `references/discovery-questions.md` and resolve: runtime model + backup models, channels, identity/knowledge, skills, tools/MCP, memory strategy, sandbox, observability, and the acceptance smoke test. Then run `mono-agent recipes list` (and `mono-agent recipes show <id>`) for an executable blueprint matching the user's intent; `references/playbooks.md` is the prose companion. If a recipe fits, use it as the starting shape.
63
+ 2. **Scaffold.** In the user's folder, prefer the recipe path when one fits:
42
64
 
43
65
  ```bash
44
- mono-agent init --model <ref> [--fallback-models <csv>] [--memory lite|journal|bujo]
66
+ mono-agent init --recipe <id> [--with slack,cron] [--dry-run] # blueprint + .env.example + checklist
67
+ mono-agent init --model <ref> [--fallback-models <csv>] [--memory lite|journal|bujo] # bare scaffold
45
68
  ```
46
69
 
47
- This writes a minimal `mono-agent.config.json` (webhook enabled as the zero-credential smoke channel), an `IDENTITY.md` that references any knowledge files already present, and `.mono-agent/` working directories. It never overwrites existing files.
48
- 3. **Configure.** Edit `mono-agent.config.json` to match the discovery answers. Read `references/config-blueprint.md` for the full annotated config shape: every channel section, skills, MCP, memory, sandbox, and fallback models.
70
+ Either writes a `mono-agent.config.json`, an `IDENTITY.md` that references any knowledge files already present, and `.mono-agent/` working directories (recipes also emit a `.env.example` and any extra files). `--dry-run` previews without writing. It never overwrites existing files.
71
+ 3. **Configure.** Edit `mono-agent.config.json` to match the discovery answers. 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.
49
72
  4. **Validate.**
50
73
 
51
74
  ```bash
52
- mono-agent validate
75
+ mono-agent validate [--recipe <id>] [--consumer <path>]
53
76
  ```
54
77
 
55
- Fix every `[error]` section. `[waiting]` channels are fine — they are simply not configured yet. Re-run until the report says the config is ready.
78
+ Fix every `[error]` section. `[waiting]` channels are fine — they are simply not configured yet. With `--recipe`, the report also flags any capability the recipe promised that is not yet live. Re-run until the report says the config is ready.
56
79
  5. **Start and smoke.**
57
80
 
58
81
  ```bash
59
82
  mono-agent start
60
83
  ```
61
84
 
62
- Then run the acceptance smoke test matching the chosen channel (see `references/validation.md`). The operator console URL printed at start lets the user edit config in the browser; saves re-apply live.
85
+ Then run the acceptance smoke test matching the chosen channel (see `references/validation.md`). To change anything, edit `mono-agent.config.json` directly and run `mono-agent restart`; there is no live browser re-apply.
63
86
 
64
87
  ## When Config Is Not Enough
65
88
 
66
- Config-first covers one responder served over any combination of the seven channels (webhook, OpenAI-compatible API, Telegram, Slack, WhatsApp, A2A, cron) plus the operator console, sandbox, memory (lite with FTS-only recall, journal with hybrid BM25+vector recall + Ollama embeddings, or bujo with SQLite-indexed hybrid recall + LLM capture/reconcile + entity graph + auto-scheduled reflection/migration), and traceability. Drop to programmatic composition only for: custom runtimes (`MonoRuntimeLike`, incl. the OpenAI Agents SDK), request-scoped runtime extensions, tool approval gates, structured output schemas, multi-agent orchestration (`@mono-agent/agent-orchestrator`), custom channel message texts, or bespoke transports — `references/feature-coverage.md` lists which features are config keys and which are code-only. Read `references/package-map.md` for the package boundaries, and start from `startMonoAgentApp({ drivers, runtime, ... })` or `@mono-agent/agent-host` rather than re-writing lifecycle glue. For eval suites over the composed agent, use `@mono-agent/agent-evals`.
89
+ Config-first covers one responder served over any combination of the seven channels (webhook, OpenAI-compatible API, Telegram, Slack, WhatsApp, A2A, cron) plus sandbox, memory (lite with FTS-only recall, journal with hybrid BM25+vector recall + configured embeddings, or bujo with SQLite-indexed hybrid recall + LLM capture/reconcile + entity graph + auto-scheduled consolidation), and traceability. Drop to programmatic composition only for: custom `MonoRuntimeLike` implementations, request-scoped runtime extensions, tool approval gates, structured output schemas, multi-agent orchestration (`@mono-agent/agent-orchestrator`), custom channel message texts, or bespoke transports — `references/feature-coverage.md` lists which features are config keys and which are code-only. Read `references/package-map.md` for the package boundaries, and start from `startMonoAgentApp({ drivers, runtime, ... })` or `@mono-agent/agent-app` rather than re-writing lifecycle glue.
67
90
 
68
91
  ## Implementation References
69
92
 
70
93
  - `references/discovery-questions.md` — the question sequence and which config keys each answer fills.
71
94
  - `references/config-blueprint.md` — annotated `mono-agent.config.json` covering every section, plus the folder layout and programmatic escape hatch.
72
95
  - `references/feature-coverage.md` — every framework feature mapped to config / CLI / code / dev-tooling coverage; the answer to "can the config do X?".
96
+ - `references/playbooks.md` — end-to-end recipes (persona → config block → `init`/`validate`/`start`/smoke). Check for a matching recipe before hand-assembling a config.
73
97
  - `references/package-map.md` — which package owns what, for programmatic composition and troubleshooting.
74
98
  - `references/validation.md` — validation commands and per-channel smoke tests; read before claiming the agent works.
75
99
 
100
+ These bundled `references/*` files are your authoritative, self-sufficient source — they ship with `@mono-agent/agent-app` and work offline, so always read them rather than the package source or a remote site. The published documentation site at <https://mono-agent-docs.vercel.app/> (notably its Playbooks index and Feature Matrix) is the human-facing companion, and the repo's `docs/reference/feature-registry.md` is a longer-form mirror that exists only inside a framework checkout — neither is required, and do not depend on the live site being reachable.
101
+
76
102
  ## Done Criteria
77
103
 
78
104
  - `mono-agent validate` exits 0 in the user's folder.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "Mono Agent Composer"
3
+ short_description: "Compose config-first mono-agents"
4
+ default_prompt: "Use $mono-agent-composer to build and validate a config-first mono-agent folder."
@@ -1,5 +1,10 @@
1
1
  # Config Blueprint
2
2
 
3
+ > A prose, per-domain version of this reference (runtime, channels, memory, …)
4
+ > lives on the published docs site:
5
+ > <https://mono-agent-docs.vercel.app/config/>. This annotated JSON
6
+ > stays the offline canonical shape.
7
+
3
8
  One `mono-agent.config.json` declares the whole agent. Paths are relative to the folder; every field also has a `MONO_AGENT_*` env var that overrides it (env > JSON > defaults). Omit a section to leave that capability off — every section except `runtime.model` and `context.identityPath` is optional. `references/feature-coverage.md` maps every framework feature to its config key; if a capability is not listed there, it needs the programmatic escape hatch.
4
9
 
5
10
  ## Folder Layout
@@ -9,6 +14,7 @@ my-agent/
9
14
  mono-agent.config.json # the single declaration below
10
15
  IDENTITY.md # role, boundaries, references to existing knowledge
11
16
  skills/ # optional: <skill-name>/SKILL.md per selected skill
17
+ cron/ # optional: <job-id>.md scheduled prompts
12
18
  mcp.json # optional: MCP server definitions
13
19
  .env # optional: secrets; auto-loaded by the CLI, never committed
14
20
  .mono-agent/
@@ -31,7 +37,6 @@ my-agent/
31
37
  "executionMode": "sdk", // sdk | cli (default inferred from model)
32
38
  "effort": "medium", // none|low|medium|high|xhigh|max
33
39
  "permissionMode": "default", // default|plan|acceptEdits|bypassPermissions (CLI backends)
34
- "reasoningSummary": "auto", // auto|concise|detailed|off|on
35
40
  "maxTurns": 0, // 0 or omitted means unlimited; 1-100 caps turns
36
41
  "workspace": ".",
37
42
  "session": { "mode": "continuous", "idleTimeoutMs": 1800000 } // or "per-message"
@@ -40,6 +45,12 @@ my-agent/
40
45
  // Local/self-hosted providers for pi:<provider>:<model> references.
41
46
  "providers": {
42
47
  "piAuthPath": "~/.pi/agent/auth.json", // Pi OAuth credentials (openai-codex, ...)
48
+ // Pi-native bridge tuning (all optional).
49
+ "piNative": {
50
+ "piMaxRetries": 2, // 0-8; transient provider-transport retries
51
+ "maxRetryDelayMs": 60000, // backoff cap between retries (ms)
52
+ "piSessionsRoot": ".mono-agent/sessions" // durable JSONL sessions → resume across restarts (unset = in-memory)
53
+ },
43
54
  "local": [
44
55
  {
45
56
  "id": "ollama",
@@ -63,15 +74,15 @@ my-agent/
63
74
  },
64
75
 
65
76
  // Memory strategy. Omit the section for no memory.
66
- // Three tiers over one substrate (memory-store + memory-bujo):
77
+ // Three tiers over one substrate (@mono-agent/memory store + bujo subpaths):
67
78
  // lite — FTS keyword recall + rapid-log; no external deps.
68
- // journal — + hybrid recall (BM25+vector) + decay; needs Ollama embeddings.
79
+ // journal — + hybrid recall (BM25+vector) + decay; needs embeddings.
69
80
  // bujo — + LLM capture/reconcile + entity graph + auto-scheduled
70
- // reflection/migration; needs Ollama embeddings + chat model.
81
+ // lightweight consolidation; needs embeddings + an app-level memory.llm for capture/tier selection.
71
82
  "memory": {
72
83
  "mode": "bujo", // lite | journal | bujo
73
84
  "path": "./.mono-agent/memory", // root directory for all tiers
74
- "writeMode": "append-host-summary", // disabled | append-host-summary
85
+ "writeMode": "capture", // disabled | append-host-summary | capture (bujo only)
75
86
  "maxBytes": 64000,
76
87
  "embeddings": { // required for journal and bujo
77
88
  "provider": "ollama", // ollama | openai
@@ -80,15 +91,16 @@ my-agent/
80
91
  "apiKeyEnv": "OPENAI_API_KEY", // or inline "apiKey"; required for openai
81
92
  "dim": 768 // nomic-embed-text:v1.5 output dimension
82
93
  },
83
- "llm": { // required for bujo; omit for lite/journal
84
- "provider": "ollama",
85
- "model": "qwen3.6:latest", // any local Ollama chat model; also set MONO_AGENT_MEMORY_LLM_MODEL for CLI
86
- "endpoint": "http://localhost:11434" // optional; defaults to http://localhost:11434
94
+ "llm": { // enables bujo capture and the effective bujo tier; omit for lite/journal
95
+ // Env: MONO_AGENT_MEMORY_LLM_PROVIDER / _MODEL / _EXECUTION_MODE / _ENDPOINT.
96
+ "provider": "ollama", // ollama | agent-host
97
+ "model": "qwen3.6:latest", // ollama: model string; agent-host: runtime ref, e.g. pi:openai-codex:gpt-5.5
98
+ "endpoint": "http://localhost:11434" // ollama only; invalid for agent-host
99
+ // For agent-host, use: "model": "pi:openai-codex:gpt-5.5", "executionMode": "sdk"; omit endpoint.
87
100
  },
88
- // Bujo auto-scheduler — override defaults or disable per-ritual.
89
- // Rituals run in-app; no external cron or launchd needed.
90
- "reflection": { "enabled": true, "cron": "0 3 * * *" }, // default: nightly 03:00
91
- "migration": { "enabled": true, "cron": "0 4 1 * *" } // default: 1st of month 04:00
101
+ // Bujo auto-scheduler — override the default or disable it.
102
+ // Consolidation runs in-app; no external cron or launchd needed.
103
+ "consolidation": { "enabled": true, "cron": "0 */2 * * *" } // default: every two hours
92
104
  },
93
105
 
94
106
  // Fail-closed tool policy + MCP servers. Deny wins; overlap is rejected.
@@ -109,24 +121,54 @@ my-agent/
109
121
  "unsafeAllowHostProcess": false // explicit opt-in required for the unsafe fallback
110
122
  },
111
123
 
112
- // Observability: JSONL artifacts + the trace-source registry dashboards read.
113
- "artifacts": { "dir": "./.mono-agent/artifacts" },
124
+ // Observability: JSONL artifacts (always written; the local fallback) + the
125
+ // trace-source registry that `mono-agent status` reads.
126
+ "artifacts": {
127
+ "dir": "./.mono-agent/artifacts",
128
+ "retention": { "maxAgeDays": 365, "maxCount": 50000, "dryRun": false },
129
+ "memoryRetention": { "maxAgeDays": 7, "maxCount": 5000, "dryRun": false }
130
+ },
114
131
  "traceability": {
115
132
  "registryDir": "./.mono-agent/trace-sources",
116
133
  "sourceId": "my-agent",
117
134
  "sourceLabel": "My Agent",
118
135
  "heartbeatMs": 10000,
119
- "staleAfterMs": 30000
136
+ "staleAfterMs": 30000,
137
+ // Also mirror this agent's manifest into the global ~/.mono-agent/trace-sources
138
+ // registry so `mono-agent tui` discovers it from any directory. Default true;
139
+ // set false to keep the agent visible only via its own registryDir.
140
+ "globalDiscovery": true
120
141
  },
121
142
 
122
- // Local operator console (browser settings + traceability). On by default.
123
- "console": {
124
- "enabled": true,
125
- "port": 0 // 0 or omitted picks a free loopback port
143
+ // Optional trace viewer: add a Phoenix (OTLP) exporter to browse traces in
144
+ // Phoenix. Omit this entry to keep only the local JSONL artifacts.
145
+ "observability": {
146
+ "exporters": [
147
+ { "type": "phoenix", "endpoint": "http://127.0.0.1:6006/v1/traces" }
148
+ ]
149
+ },
150
+
151
+ // ----- Channels: one section per channel; all independent. Most channels are
152
+ // ----- opt-in; operator surfaces (`tui`, `live`) default on and can opt out.
153
+ // ----- A waiting/disabled channel never blocks the others.
154
+
155
+ "tui": {
156
+ "enabled": true, // default-on loopback operator console endpoint
157
+ "host": "127.0.0.1",
158
+ "port": 0,
159
+ "basePath": "/tui",
160
+ "allowNonLoopback": false,
161
+ "apiKey": "optional-bearer"
126
162
  },
127
163
 
128
- // ----- Channels: one section per channel; all independent. An unconfigured
129
- // ----- channel reports waiting_for_config and never blocks the others.
164
+ "live": {
165
+ "enabled": true, // default-on read-only SSE relay for mono-agent web
166
+ "host": "127.0.0.1",
167
+ "port": 0,
168
+ "basePath": "/live",
169
+ "allowNonLoopback": false,
170
+ "apiKey": "optional-bearer"
171
+ },
130
172
 
131
173
  "webhook": {
132
174
  "enabled": true,
@@ -149,6 +191,11 @@ my-agent/
149
191
  "apiKey": "..." // optional bearer required from clients
150
192
  },
151
193
 
194
+ // Telegram & Slack deliver only the FINAL answer by default (no streamed
195
+ // interim edits) while showing a working indicator — Telegram a "typing…"
196
+ // action, Slack a 👀 "seen" reaction. This is built-in behavior (not a JSON
197
+ // field); restoring live interim streaming needs a custom channel driver with
198
+ // stream.finalOnly=false. The OpenAI-compatible endpoint still streams tokens.
152
199
  "telegram": {
153
200
  "enabled": true, // opt-in; defaults to false (off → "disabled")
154
201
  "botToken": "...",
@@ -180,8 +227,8 @@ my-agent/
180
227
  },
181
228
 
182
229
  "a2a": {
230
+ "enabled": true, // canonical channel-root flag (legacy a2a.provider.enabled still honored)
183
231
  "provider": {
184
- "enabled": true,
185
232
  "host": "127.0.0.1",
186
233
  "port": 4201,
187
234
  "publicBaseUrl": "https://agent.example.com", // Agent Card URL when fronted by a proxy
@@ -222,16 +269,22 @@ my-agent/
222
269
  ## Lifecycle
223
270
 
224
271
  ```bash
272
+ mono-agent recipes list # executable blueprints (id, risk, tags)
273
+ mono-agent recipes show <id> # generated config + .env.example + follow-up checklist
274
+ mono-agent init --recipe <id> [--with slack,cron] [--dry-run] # scaffold from a blueprint
225
275
  mono-agent init --model claude:claude-sonnet-4-6 --fallback-models pi:ollama:gemma4:31b [--memory lite|journal|bujo]
226
- mono-agent validate # per-section report incl. sandbox, console, every channel; exit 0 means ready
227
- mono-agent start # console + traceability + every configured channel
228
- mono-agent start --no-console # headless (or "console": { "enabled": false })
229
- mono-agent start --port 4400 # fixed console port (or "console": { "port": 4400 })
276
+ mono-agent config # resolved config field-by-field, each value tagged env/json/default
277
+ mono-agent validate [--recipe <id>] [--consumer <path>] # per-section report; --recipe also checks the recipe's capabilities
278
+ mono-agent start # traceability + every configured channel
279
+ mono-agent restart # apply config edits (config is JSON-first; restart to re-apply)
280
+ mono-agent restart --force # restart AND purge persisted pi sessions (fresh start; durable memory kept)
230
281
  ```
231
282
 
232
- A `.env` file in the folder is loaded automatically (exported shell variables win); use `--env-file <path>` for an alternate file. `start` prints the operator console URL (config editing in the browser; saves re-apply live without restarting), the traceability source, and one status line per channel: `running` with its endpoint facts, `waiting_for_config` with the exact missing setting, `disabled`, or `failed` with the reason.
283
+ A `.env` file in the folder is loaded automatically (exported shell variables win); use `--env-file <path>` for an alternate file. `validate --consumer <path>` loads the consumer folder's `.env` by default and resolves relative `--config` / `--env-file` paths there. `start` prints the traceability source (Phoenix when an `observability.exporters` Phoenix entry is configured, otherwise the local JSONL artifacts) and one status line per channel: `running` with its endpoint facts, `waiting_for_config` with the exact missing setting, `disabled`, or `failed` with the reason. Config is JSON-first: edit `mono-agent.config.json` directly (agents can edit it) and run `mono-agent restart` to apply — there is no live browser re-apply.
284
+
285
+ For BuJo capture and the effective `bujo` tier that runs scheduled consolidation, configure `memory.llm`. Use `provider: "ollama"` with a local Ollama chat model string and optional `endpoint`, or `provider: "agent-host"` with `model` as a normal SDK runtime model reference such as `pi:openai-codex:gpt-5.5` and `executionMode: "sdk"`. `endpoint` is Ollama-only, and CLI-backed refs such as `codex:gpt-5.5` are rejected for memory LLMs until runtimes can enforce no external actions. The same values can be supplied via `MONO_AGENT_MEMORY_LLM_PROVIDER`, `MONO_AGENT_MEMORY_LLM_MODEL`, `MONO_AGENT_MEMORY_LLM_EXECUTION_MODE`, and `MONO_AGENT_MEMORY_LLM_ENDPOINT`. The standalone `memory-bujo` maintenance CLI remains Ollama-only; `agent-host` LLM capture is an in-app composition path that injects the `LlmComplete` implementation into the BuJo store.
233
286
 
234
- For a local terminal chat against the same config, `@mono-agent/tui` ships a `mono-agent-tui` bin: `mono-agent-tui --config ./mono-agent.config.json`.
287
+ For operator views, run `mono-agent tui` or `mono-agent web` from any directory once the agent is started. Both discover running agents via the trace-source registry. The TUI chats over the default-on `tui` stream endpoint (`"tui": {"enabled": false}` opts out); the web PWA reads artifacts and live updates from the default-on `live` relay (`"live": {"enabled": false}` opts out). Web history/live views show agent runs by default; add `mono-agent web --include-memory` to inspect memory-maintenance runs. Both bind loopback by default. The low-level `mono-agent-tui` bin also supports `--responder <file>` (embedded, an ESM module default-exporting an `AgentResponderLike` or exporting `createResponder(env, cwd, configJson)`) and `--url <baseUrl>` (direct connect).
235
288
 
236
289
  ## Programmatic Escape Hatch
237
290
 
@@ -242,9 +295,9 @@ import { startMonoAgentApp, defaultChannelDrivers } from "@mono-agent/agent-app"
242
295
 
243
296
  const app = await startMonoAgentApp({
244
297
  cwd: process.cwd(),
245
- runtime: myCustomRuntime, // any MonoRuntimeLike (incl. createOpenAIAgentsRuntime)
298
+ runtime: myCustomRuntime, // any MonoRuntimeLike
246
299
  drivers: [...defaultChannelDrivers(), myCustomDriver],
247
300
  });
248
301
  ```
249
302
 
250
- For a bare responder without channels, use `@mono-agent/config` + `@mono-agent/agent-host` (`createConfiguredAgentResponder` — also takes `memory`, `historyStore`, `runtimeOptions`, `runtimeOptionsForRequest`). For multi-agent orchestration, add `@mono-agent/agent-orchestrator` (`createCollaboratorToolRuntimeExtension`) — see `references/package-map.md`. Channel message texts and stream tuning (welcome/help/error texts, edit debounce) are channel-driver overrides, not config keys.
303
+ For a bare responder without channels, use `@mono-agent/config` + `@mono-agent/agent-app` (`createConfiguredAgentResponder` — also takes `memory`, `historyStore`, `runtimeOptions`, `runtimeOptionsForRequest`). For multi-agent orchestration, add `@mono-agent/agent-orchestrator` (`createCollaboratorToolRuntimeExtension`) — see `references/package-map.md`. Channel message texts and stream tuning (welcome/help/error texts, edit debounce) are channel-driver overrides, not config keys.
@@ -74,7 +74,7 @@ What tools or MCP servers does the agent actually need?
74
74
  4. Both
75
75
  ```
76
76
 
77
- Fills: `tools.allowedTools`, `tools.disallowedTools` (denylist wins), `tools.mcpConfigPath`. Record exact tool names; do not broaden access as a convenience.
77
+ Fills: `tools.allowedTools`, `tools.disallowedTools` (denylist wins), `tools.mcpConfigPath`. Record exact tool names; do not broaden access as a convenience. To expose adapter-derived send tools, include `slack_send_message` / `telegram_send_message`; valid enabled Slack/Telegram adapter config and destination allowlists are still required.
78
78
 
79
79
  ## 6. Memory Strategy
80
80
 
@@ -85,14 +85,14 @@ Should the agent remember anything between conversations?
85
85
 
86
86
  1. No durable memory yet (recommended for first integration)
87
87
  2. Lite memory — FTS keyword recall + rapid-log capture; zero external deps
88
- 3. Journal memory — hybrid recall (BM25+vector) + salience decay; requires local Ollama embeddings
88
+ 3. Journal memory — hybrid recall (BM25+vector) + salience decay; requires embeddings
89
89
  4. BuJo memory — full tier: journal + LLM capture/reconcile + entity graph + auto-scheduled
90
- reflection/migration; requires Ollama embeddings AND a local chat model
90
+ consolidation; requires embeddings AND a chat model
91
91
  ```
92
92
 
93
- All tiers share the same `@mono-agent/memory-bujo` substrate. Fills: `memory.mode`
93
+ All tiers share the same `@mono-agent/memory/bujo` substrate. Fills: `memory.mode`
94
94
  (`lite`/`journal`/`bujo`), `memory.path`, `memory.writeMode`
95
- (`disabled`/`append-host-summary`), and tier-specific blocks below.
95
+ (`disabled`/`append-host-summary`/`capture`), and tier-specific blocks below.
96
96
 
97
97
  **Tier 2 — lite (no external deps):**
98
98
 
@@ -110,9 +110,11 @@ No prerequisites. No Ollama. SQLite is bundled.
110
110
 
111
111
  **Tier 3 — journal (embeddings required):**
112
112
 
113
- - Ask: which local Ollama embeddings model? (default `nomic-embed-text:v1.5` — use the
114
- exact `:v1.5` tag; pull first with `ollama pull nomic-embed-text:v1.5`).
115
- - Default `memory.embeddings.dim` to `768` for `nomic-embed-text:v1.5`.
113
+ - Ask: which embeddings provider/model?
114
+ - Ollama default: `provider: "ollama"`, model `nomic-embed-text:v1.5`, dim `768`
115
+ (use the exact `:v1.5` tag; pull first with `ollama pull nomic-embed-text:v1.5`).
116
+ - OpenAI option: `provider: "openai"`, model `text-embedding-3-small`, API key via
117
+ `apiKeyEnv`, dim matching the model.
116
118
 
117
119
  Write:
118
120
 
@@ -129,24 +131,27 @@ Write:
129
131
  }
130
132
  ```
131
133
 
132
- After writing, remind the user to run `mono-agent validate` (checks Ollama reachability
133
- and that the model is pulled warns loudly on any failure, never silently falls back).
134
+ After writing, remind the user to run `mono-agent validate` (checks root writability and
135
+ provider-specific liveness; Ollama model pulls are checked only when using Ollama).
134
136
 
135
- **Tier 4 — bujo (embeddings + chat model + auto-rituals):**
137
+ **Tier 4 — bujo (embeddings + chat model + consolidation):**
136
138
 
137
139
  Proactively explain what bujo does: capture → reconcile (ADD/UPDATE/SUPERSEDE/NOOP),
138
- hybrid BM25+vector recall, entity graph, reflection (decay + insight synthesis), monthly
139
- migration (promote/reschedule/cluster/forget), living `index.md` + `future-log.md`.
140
- The reflection and migration rituals are **auto-scheduled in-app** — no external cron or
141
- launchd setup needed.
142
-
143
- - Ask: which local Ollama embeddings model? (default `nomic-embed-text:v1.5` — exact
144
- `:v1.5` tag; `ollama pull nomic-embed-text:v1.5`).
145
- - Ask: which local chat model for LLM pipelines? (e.g. `qwen3.6:latest`;
146
- `ollama pull qwen3.6:latest`). A chat model is required without it the `bujo` tier
147
- cannot run capture/reflect/migrate.
148
- - Ask: should we keep the default reflection/migration schedule (nightly `0 3 * * *` /
149
- monthly `0 4 1 * *`), or customise the cron expressions?
140
+ hybrid BM25+vector recall, entity graph, scheduled consolidation (decay + duplicate
141
+ superseding), living `index.md`, and an empty retired `future-log.md` stub. Consolidation
142
+ is **auto-scheduled in-app** — no external cron or launchd setup needed.
143
+
144
+ - Ask: which embeddings provider/model? Use the same choices as journal.
145
+ - Ask: which chat LLM provider/model for LLM pipelines?
146
+ - Ollama: local model string such as `qwen3.6:latest`; pull it first with
147
+ `ollama pull qwen3.6:latest`.
148
+ - agent-host: SDK runtime model reference such as `pi:openai-codex:gpt-5.5` with
149
+ `executionMode: "sdk"`. Do not use CLI-backed refs such as `codex:gpt-5.5`; they are
150
+ rejected for memory LLMs until runtimes can enforce no external actions.
151
+ - Ask: should per-turn intelligent capture be enabled (`writeMode: "capture"`), or only
152
+ deterministic rapid-log summaries (`append-host-summary`) plus scheduled consolidation?
153
+ - Ask: should we keep the default consolidation schedule (`0 */2 * * *`), customise the
154
+ cron expression, or disable scheduled consolidation?
150
155
 
151
156
  Write (embeddings + chat model):
152
157
 
@@ -154,7 +159,7 @@ Write (embeddings + chat model):
154
159
  "memory": {
155
160
  "mode": "bujo",
156
161
  "path": "./.mono-agent/memory",
157
- "writeMode": "append-host-summary",
162
+ "writeMode": "capture",
158
163
  "embeddings": {
159
164
  "provider": "ollama",
160
165
  "model": "nomic-embed-text:v1.5",
@@ -167,11 +172,20 @@ Write (embeddings + chat model):
167
172
  }
168
173
  ```
169
174
 
170
- If the user customises the ritual schedule, add the `reflection`/`migration` blocks:
175
+ For an agent-host memory LLM, write the `llm` block as:
176
+
177
+ ```jsonc
178
+ "llm": {
179
+ "provider": "agent-host",
180
+ "model": "pi:openai-codex:gpt-5.5",
181
+ "executionMode": "sdk"
182
+ }
183
+ ```
184
+
185
+ If the user customises the consolidation schedule, add the `consolidation` block:
171
186
 
172
187
  ```jsonc
173
- "reflection": { "enabled": true, "cron": "0 3 * * *" },
174
- "migration": { "enabled": true, "cron": "0 4 1 * *" }
188
+ "consolidation": { "enabled": true, "cron": "0 */4 * * *" }
175
189
  ```
176
190
 
177
191
  After writing, append a prerequisite note:
@@ -179,12 +193,12 @@ After writing, append a prerequisite note:
179
193
  ```
180
194
  Before running mono-agent validate, pull the required models:
181
195
  ollama pull nomic-embed-text:v1.5
182
- ollama pull qwen3.6:latest # (or whichever chat model you chose)
196
+ ollama pull qwen3.6:latest # only if using llm.provider: "ollama"
183
197
  ```
184
198
 
185
- Then run `mono-agent validate` — the Memory section confirms Ollama reachability, both
186
- models are present, the root is writable, and the ritual cadence (with next-run times).
187
- See `docs/memory.md` for the full tier table, config shapes, and CLI subcommands
199
+ Then run `mono-agent validate` — the Memory section confirms the root is writable,
200
+ provider-specific liveness, and the consolidation cadence.
201
+ See `docs/memory/index.md` for the full tier table, config shapes, and CLI subcommands
188
202
  (`memory-bujo rebuild|recall|index|reflect|migrate`).
189
203
 
190
204
  ## 7. Sandbox
@@ -207,14 +221,13 @@ Fills: the `sandbox` section — `mode`, `network.mode` (`none`/`localhost`/`all
207
221
  Question:
208
222
 
209
223
  ```text
210
- Do you need browsable traceability or just local artifacts?
224
+ Do you need a browsable trace viewer or just local artifacts?
211
225
 
212
- 1. JSONL artifacts and the operator console (recommended; console is on by default)
213
- 2. JSONL artifacts and the console on a fixed port
214
- 3. JSONL artifacts only (headless)
226
+ 1. JSONL artifacts plus Phoenix as the trace viewer (recommended; add an `observability.exporters` Phoenix entry)
227
+ 2. JSONL artifacts only (the local fallback; no external viewer)
215
228
  ```
216
229
 
217
- Fills: `artifacts.dir`, `traceability.registryDir` / `sourceId` / `sourceLabel`, and the `console` section — `console.port` for a fixed loopback port, `console.enabled: false` (or `start --no-console`) for headless. Artifacts record runtime/tool/message events and summaries, not private chain-of-thought. For a local terminal chat instead of (or alongside) the browser console, mention `mono-agent-tui --config ./mono-agent.config.json`.
230
+ Fills: `artifacts.dir`, `traceability.registryDir` / `sourceId` / `sourceLabel`, and when Phoenix is wanted an `observability.exporters` (phoenix) OTLP entry. Local JSONL artifacts are always written and are the fallback when no exporter is configured. Artifacts record runtime/tool/message events and summaries, not private chain-of-thought. For a terminal operator console, mention `mono-agent tui` (run from anywhere once the agent is started; live chat with thinking/tool insight, run replay, config view). Config is JSON-first — edit `mono-agent.config.json` directly and run `mono-agent restart` to apply changes.
218
231
 
219
232
  ## 9. Acceptance Smoke Test
220
233
 
@@ -1,23 +1,23 @@
1
1
  # Feature Coverage
2
2
 
3
- Every framework capability and how a composed agent reaches it. Use this to answer "can the config do X?" without guessing: `config` = a `mono-agent.config.json` key (env var override always exists), `cli` = a `mono-agent` CLI flag/command, `auto` = always on when the app runs, `code` = programmatic escape hatch only, `dev` = development/test tooling. The repo's `docs/feature-registry.md` is the long-form source of truth.
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` = a `mono-agent.config.json` key (env var override always exists), `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 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
5
  ## Runtime
6
6
 
7
7
  | Capability | Coverage | Where |
8
8
  | --- | --- | --- |
9
- | Model backends: claude (sdk/cli), codex (cli), pi sdk providers (OpenAI, Copilot, OpenRouter, Ollama, ...) | config | `runtime.model` |
9
+ | Model backends: claude (sdk/cli), codex (cli), pi sdk providers (OpenAI, Copilot, OpenRouter, Ollama, ...), opencode (cli, `opencode:<provider>:<model>` via the OpenCode server) | config | `runtime.model` |
10
10
  | Backup models on retryable provider failure | config | `runtime.fallbackModels` |
11
11
  | Execution mode (sdk/cli), effort, max turns, workspace | config | `runtime.executionMode`, `runtime.effort`, `runtime.maxTurns`, `runtime.workspace` |
12
12
  | Tool-permission posture for CLI backends | config | `runtime.permissionMode` |
13
- | Reasoning summary verbosity | config | `runtime.reasoningSummary` |
14
13
  | Continuous provider sessions with idle eviction | config | `runtime.session.{mode,idleTimeoutMs}` |
15
14
  | Local providers (Ollama / LM Studio / OpenAI-compatible) | config | `providers.local[]` |
16
15
  | Pi OAuth credentials | config | `providers.piAuthPath` |
17
- | Context compaction, tool-output bloat guard, cost tracking | auto | built into every run |
16
+ | Tool-output bloat guard, cost tracking | auto | built into every run |
17
+ | Context handling / auto-compaction | provider + auto | delegated to the provider; the pi bridge drives `AgentHarness.compact()` (proactive before a near-window turn + reactive recovery on overflow). Runs report `context_compaction_applied: true` / `false` / `null` |
18
18
  | Structured output (JSON schema), live input steering | code | harness `runtimeOptions` |
19
19
  | Tool approval gates (risk tiers, timeouts, always-allow) | code | `createMonoRuntime({ onToolApprovalRequest, ... })` — needs a host UI |
20
- | OpenAI Agents SDK backend / fully custom runtime | code | `startMonoAgentApp({ runtime })` |
20
+ | Fully custom runtime | code | `startMonoAgentApp({ runtime })` |
21
21
 
22
22
  ## Context, skills, memory
23
23
 
@@ -28,13 +28,14 @@ Every framework capability and how a composed agent reaches it. Use this to answ
28
28
  | Per-skill byte cap | config | `context.skillMaxBytes` |
29
29
  | Conversation history (in-memory; unlimited unless turns are capped) | auto | sized from `runtime.maxTurns`; custom store via code |
30
30
  | Lite memory (FTS keyword recall + rapid-log capture; no external deps) | config | `memory.mode: "lite"`, `path`, `maxBytes`, `writeMode` |
31
- | Journal memory (hybrid recall BM25+vector + salience decay; needs Ollama embeddings) | config | `memory.mode: "journal"`, `path`, `memory.embeddings.{provider,model,dim}` |
32
- | BuJo memory (journal + LLM capture/reconcile ADD/UPDATE/SUPERSEDE/NOOP + entity graph + auto-scheduled reflection/migration; needs Ollama embeddings + chat model) | config | `memory.mode: "bujo"`, `path`, `memory.embeddings.{provider,model,dim}`, `memory.llm.{provider,model,endpoint}` — see `docs/memory.md` |
33
- | BuJo reflection auto-scheduler (nightly decay + insight synthesis; in-app, no external cron needed) | config | `memory.reflection.{enabled,cron}` (default `0 3 * * *`); env `MONO_AGENT_MEMORY_REFLECTION_CRON`, `MONO_AGENT_MEMORY_REFLECTION_ENABLED` |
34
- | BuJo migration auto-scheduler (monthly promote/reschedule/cluster/forget; in-app) | config | `memory.migration.{enabled,cron}` (default `0 4 1 * *`); env `MONO_AGENT_MEMORY_MIGRATION_CRON`, `MONO_AGENT_MEMORY_MIGRATION_ENABLED` |
35
- | Memory out-of-band maintenance CLI (rebuild/recall/index/reflect/migrate) | cli | `memory-bujo <subcommand> <root>`; opt-in `MONO_AGENT_MEMORY_EMBEDDINGS_PROVIDER`/`_MODEL`/`_DIM` for semantic recall; `MONO_AGENT_MEMORY_LLM_MODEL`, `MONO_AGENT_MEMORY_LLM_ENDPOINT` required for reflect/migrate |
36
- | Memory liveness check (root writable; Ollama + models for journal/bujo; ritual cadence for bujo — loud warn, no silent fallback) | cli | `mono-agent validate` |
31
+ | Journal memory (hybrid recall BM25+vector + salience decay; needs configured embeddings) | config | `memory.mode: "journal"`, `path`, `memory.embeddings.{provider,model,dim}` (`provider: "ollama" | "openai"`) |
32
+ | BuJo memory (journal + LLM capture/reconcile ADD/UPDATE/SUPERSEDE/NOOP + entity graph + auto-scheduled consolidation; needs embeddings + an app-level `memory.llm`) | config | `memory.mode: "bujo"`, `path`, `memory.embeddings.{provider,model,dim}`, `memory.llm` with `provider: "ollama"` (`model`, optional `endpoint`) or `provider: "agent-host"` (`model` is an SDK runtime model ref, e.g. `pi:openai-codex:gpt-5.5`, optional `executionMode: "sdk"`) — see `docs/memory/index.md` |
33
+ | BuJo consolidation auto-scheduler (lightweight decay + duplicate superseding; in-app, no external cron needed) | config | `memory.consolidation.{enabled,cron}` (default `0 */2 * * *`); env `MONO_AGENT_MEMORY_CONSOLIDATION_CRON`, `MONO_AGENT_MEMORY_CONSOLIDATION_ENABLED` |
34
+ | Memory out-of-band maintenance CLI (rebuild/recall/index/legacy reflect/migrate) | cli | `memory-bujo <subcommand> <root>`; opt-in `MONO_AGENT_MEMORY_EMBEDDINGS_PROVIDER`/`_MODEL`/`_DIM` for semantic recall; legacy reflect/migrate are Ollama-only and require `MONO_AGENT_MEMORY_LLM_MODEL` (optional `MONO_AGENT_MEMORY_LLM_ENDPOINT`) |
35
+ | Config-aware memory preview CLI (stats/today/show/search/top for the configured backend; local search warns and falls back to FTS-only when embeddings are down) | cli | `mono-agent memory stats\|today\|show <date>\|search <query>\|top [--limit <n>] [--json]` |
36
+ | Memory liveness check (root writable; provider-specific Ollama checks only when embeddings/chat use Ollama; BuJo LLM config + consolidation cadence — loud warn, no silent fallback) | cli | `mono-agent validate` |
37
37
  | Host summaries appended after runs | config | `memory.writeMode: "append-host-summary"` |
38
+ | Auto-provisioned read-only `memory_recall` tool (hybrid keyword+semantic search) exposed to the agent from the single memory config; no chat LLM | config | `config.memory.recallTool.enabled` (`MONO_AGENT_MEMORY_RECALL_TOOL_ENABLED`, default on for journal/bujo with embeddings) |
38
39
 
39
40
  ## Tools, MCP, sandbox
40
41
 
@@ -43,6 +44,7 @@ Every framework capability and how a composed agent reaches it. Use this to answ
43
44
  | Fail-closed tool policy (empty allowlist = no tools) | auto | default |
44
45
  | Tool allow/deny lists (deny wins) | config | `tools.allowedTools`, `tools.disallowedTools` |
45
46
  | MCP servers (stdio/sse/http) from a JSON file | config | `tools.mcpConfigPath` |
47
+ | Adapter-derived send tools for enabled Slack/Telegram adapters | config | `tools.allowedTools` must include `slack_send_message` / `telegram_send_message`; valid `slack.*` / `telegram.*` config and existing adapter allowlists provide credentials and destination bounds |
46
48
  | Sandbox on/off + srt engine | config | `sandbox.mode` |
47
49
  | Network policy (none/localhost/allowlist/all) | config | `sandbox.network.{mode,allowlist}` |
48
50
  | Filesystem scopes (readable/writable roots, deny-write globs) | config | `sandbox.readableRoots`, `sandbox.writableRoots`, `sandbox.denyWrite` |
@@ -58,9 +60,11 @@ Every framework capability and how a composed agent reaches it. Use this to answ
58
60
  | Telegram (long polling, chat allowlist) | config | `telegram` section |
59
61
  | Slack (Socket Mode, channel allowlist, mention handling) | config | `slack` section |
60
62
  | WhatsApp (Baileys, QR login, group mention/any triggers) | config | `whatsapp` section |
61
- | A2A provider (Agent Card, JSON-RPC + REST, streaming, bearer) | config | `a2a.provider` + `a2a.agent` + `a2a.skill` |
63
+ | A2A provider (Agent Card, JSON-RPC + REST, streaming, bearer) | config | `a2a.enabled` (canonical; legacy `a2a.provider.enabled` honored) + `a2a.provider` + `a2a.agent` + `a2a.skill` |
62
64
  | A2A consumer settings (remote agent URLs, timeouts) | config + code | `a2a.consumer` holds settings; calls via `createA2AConsumerResponder` |
63
- | Cron jobs (five-field expressions, timezones, overlap skip) | config | `cron.jobs[]` |
65
+ | TUI stream endpoint (operator console transport) | config | `tui.{enabled,host,port,basePath,allowNonLoopback,apiKey}`; default on, loopback |
66
+ | Live event relay (read-only run-event SSE for web) | config | `live.{enabled,host,port,basePath,allowNonLoopback,apiKey}`; default on, loopback |
67
+ | Cron jobs (five-field expressions, timezones, overlap skip) | config | `cron.jobs[]`, single-job `MONO_AGENT_CRON_*`, or one markdown file per job in `cron.dir` / `MONO_AGENT_CRON_DIR` (default `cron/`) |
64
68
  | Channel message texts / stream tuning (welcome, debounce, ...) | code | channel driver overrides |
65
69
  | Custom transports | code | implement `ChannelDriver`, pass via `startMonoAgentApp({ drivers })` |
66
70
 
@@ -68,13 +72,16 @@ Every framework capability and how a composed agent reaches it. Use this to answ
68
72
 
69
73
  | Capability | Coverage | Where |
70
74
  | --- | --- | --- |
71
- | JSONL run artifacts (events + summaries, secrets redacted) | config | `artifacts.dir` |
72
- | Trace-source registry (heartbeat manifests for dashboards) | config | `traceability.{registryDir,sourceId,sourceLabel,heartbeatMs,staleAfterMs}` |
73
- | Operator console (browser settings editor, traceability views, live config re-apply, bearer token) | config + cli | `console.{enabled,port}`; `--port`, `--no-console` |
74
- | Terminal chat (TUI with transcript + redacted config pane) | cli | `mono-agent-tui --config ./mono-agent.config.json` |
75
- | Scaffold / validate / start / install-skill | cli | `mono-agent init|validate|start|install-skill` |
75
+ | JSONL run artifacts (events + summaries, secrets redacted) | config | `artifacts.dir`, `artifacts.retention`, `artifacts.memoryRetention` |
76
+ | Trace-source registry (heartbeat manifests `mono-agent status` reads) | config | `traceability.{registryDir,sourceId,sourceLabel,heartbeatMs,staleAfterMs,globalDiscovery}` |
77
+ | Phoenix trace viewer (OTLP exporter; local JSONL artifacts are the fallback) | config | `observability.exporters` (phoenix entry) |
78
+ | Operator console (live chat with thinking/tool/telemetry insight, run replay, config view) | cli | `mono-agent tui [--agent <label>]`; agents serve the `tui` stream endpoint by default (`tui.enabled`, loopback) |
79
+ | Session Recorder web PWA (read-only run browser) | cli | `mono-agent web [--host] [--port] [--no-open] [--allow-non-loopback] [--include-memory]`; consumes the default-on `live` relay and local artifacts; memory runs are opt-in |
80
+ | Executable config blueprints (generate config + `.env.example` + checklist) | cli | `mono-agent recipes list\|show <id>`, `mono-agent init --recipe <id>` |
81
+ | Resolved config view (every field tagged env/json/default) | cli | `mono-agent config` |
82
+ | Scaffold / validate / start / install-skill | cli | `mono-agent init\|validate [--consumer <path>]\|config\|recipes\|start\|install-skill` |
83
+ | Recipe capability check (selected recipe live?) | cli | `mono-agent validate --recipe <id>` |
76
84
  | `.env` auto-loading | cli | automatic; `--env-file <path>` |
77
85
  | Explicit failure objects (no fake success) | auto | harness |
78
86
  | Per-request runtime options, custom memory/history stores | code | `createConfiguredAgentResponder` options |
79
87
  | Multi-agent delegation (`ask_collaborator` loopback MCP tool) | code | `@mono-agent/agent-orchestrator` |
80
- | Eval scenarios/suites (trajectory + judge assertions) | dev | `@mono-agent/agent-evals`, live runs via `MONO_AGENT_EVAL_LIVE=1` |