@mono-agent/agent-app 0.13.0 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/README.md +163 -32
  2. package/dist/adapter-send-tools-main.js +0 -1
  3. package/dist/adapter-send-tools-main.js.map +1 -1
  4. package/dist/adapter-send-tools.d.ts +8 -5
  5. package/dist/adapter-send-tools.d.ts.map +1 -1
  6. package/dist/adapter-send-tools.js +133 -287
  7. package/dist/adapter-send-tools.js.map +1 -1
  8. package/dist/app-controller-channels.d.ts.map +1 -1
  9. package/dist/app-controller-channels.js +2 -1
  10. package/dist/app-controller-channels.js.map +1 -1
  11. package/dist/app-controller-continuation.d.ts.map +1 -1
  12. package/dist/app-controller-continuation.js +1 -5
  13. package/dist/app-controller-continuation.js.map +1 -1
  14. package/dist/app-controller-maintenance.d.ts +2 -1
  15. package/dist/app-controller-maintenance.d.ts.map +1 -1
  16. package/dist/app-controller-maintenance.js +64 -1
  17. package/dist/app-controller-maintenance.js.map +1 -1
  18. package/dist/app-controller-responder.d.ts.map +1 -1
  19. package/dist/app-controller-responder.js +4 -1
  20. package/dist/app-controller-responder.js.map +1 -1
  21. package/dist/app-controller-utils.js +1 -1
  22. package/dist/app-controller-utils.js.map +1 -1
  23. package/dist/background-environment.d.ts +1 -0
  24. package/dist/background-environment.d.ts.map +1 -1
  25. package/dist/background-environment.js +1 -0
  26. package/dist/background-environment.js.map +1 -1
  27. package/dist/background-runtime.d.ts +13 -2
  28. package/dist/background-runtime.d.ts.map +1 -1
  29. package/dist/background-runtime.js +27 -3
  30. package/dist/background-runtime.js.map +1 -1
  31. package/dist/background.d.ts +26 -1
  32. package/dist/background.d.ts.map +1 -1
  33. package/dist/background.js +226 -34
  34. package/dist/background.js.map +1 -1
  35. package/dist/channel-drivers/cron.js +8 -1
  36. package/dist/channel-drivers/cron.js.map +1 -1
  37. package/dist/channel-drivers/native-notify.d.ts +2 -0
  38. package/dist/channel-drivers/native-notify.d.ts.map +1 -1
  39. package/dist/channel-drivers/native-notify.js +14 -2
  40. package/dist/channel-drivers/native-notify.js.map +1 -1
  41. package/dist/channel-drivers/slack.d.ts.map +1 -1
  42. package/dist/channel-drivers/slack.js +49 -0
  43. package/dist/channel-drivers/slack.js.map +1 -1
  44. package/dist/channel-drivers/telegram.d.ts.map +1 -1
  45. package/dist/channel-drivers/telegram.js +7 -18
  46. package/dist/channel-drivers/telegram.js.map +1 -1
  47. package/dist/channel-drivers/tui.d.ts.map +1 -1
  48. package/dist/channel-drivers/tui.js +8 -0
  49. package/dist/channel-drivers/tui.js.map +1 -1
  50. package/dist/cli-args.d.ts +8 -2
  51. package/dist/cli-args.d.ts.map +1 -1
  52. package/dist/cli-args.js +48 -27
  53. package/dist/cli-args.js.map +1 -1
  54. package/dist/cli-background-command.d.ts.map +1 -1
  55. package/dist/cli-background-command.js +89 -14
  56. package/dist/cli-background-command.js.map +1 -1
  57. package/dist/cli-commands.d.ts.map +1 -1
  58. package/dist/cli-commands.js +0 -14
  59. package/dist/cli-commands.js.map +1 -1
  60. package/dist/cli-help.d.ts.map +1 -1
  61. package/dist/cli-help.js +1 -7
  62. package/dist/cli-help.js.map +1 -1
  63. package/dist/cli-runs-command.d.ts +0 -3
  64. package/dist/cli-runs-command.d.ts.map +1 -1
  65. package/dist/cli-runs-command.js +1 -5
  66. package/dist/cli-runs-command.js.map +1 -1
  67. package/dist/config-reference.d.ts.map +1 -1
  68. package/dist/config-reference.js +3 -4
  69. package/dist/config-reference.js.map +1 -1
  70. package/dist/doctor.js +1 -2
  71. package/dist/doctor.js.map +1 -1
  72. package/dist/interaction-bridge.d.ts +5 -22
  73. package/dist/interaction-bridge.d.ts.map +1 -1
  74. package/dist/interaction-bridge.js +251 -141
  75. package/dist/interaction-bridge.js.map +1 -1
  76. package/dist/launchd.d.ts +33 -1
  77. package/dist/launchd.d.ts.map +1 -1
  78. package/dist/launchd.js +129 -2
  79. package/dist/launchd.js.map +1 -1
  80. package/dist/modules/catalog.js +1 -1
  81. package/dist/modules/catalog.js.map +1 -1
  82. package/dist/modules/known-tools.d.ts +1 -1
  83. package/dist/modules/known-tools.d.ts.map +1 -1
  84. package/dist/modules/known-tools.js +0 -3
  85. package/dist/modules/known-tools.js.map +1 -1
  86. package/dist/run-history.d.ts +6 -2
  87. package/dist/run-history.d.ts.map +1 -1
  88. package/dist/run-history.js +476 -96
  89. package/dist/run-history.js.map +1 -1
  90. package/dist/ui.js +1 -1
  91. package/dist/ui.js.map +1 -1
  92. package/dist/wizard/prompts.d.ts.map +1 -1
  93. package/dist/wizard/prompts.js +3 -4
  94. package/dist/wizard/prompts.js.map +1 -1
  95. package/dist/wizard/run.js +3 -3
  96. package/dist/wizard/run.js.map +1 -1
  97. package/package.json +15 -15
  98. package/schema/mono-agent.config.schema.json +2 -2
  99. package/skills/mono-agent-composer/SKILL.md +5 -5
  100. package/skills/mono-agent-composer/references/config-blueprint.md +2 -2
  101. package/skills/mono-agent-composer/references/feature-coverage.md +3 -3
  102. package/skills/mono-agent-composer/references/package-map.md +1 -1
  103. package/skills/mono-agent-composer/references/playbooks.md +1 -1
  104. package/skills/mono-agent-composer/references/validation.md +20 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mono-agent/agent-app",
3
- "version": "0.13.0",
3
+ "version": "0.14.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",
@@ -37,20 +37,20 @@
37
37
  "@clack/prompts": "^1.7.0",
38
38
  "@earendil-works/pi-ai": "0.80.6",
39
39
  "@modelcontextprotocol/sdk": "^1.29.0",
40
- "@mono-agent/agent-contracts": "0.13.0",
41
- "@mono-agent/agent-harness": "0.13.0",
42
- "@mono-agent/config": "0.13.0",
43
- "@mono-agent/cron-adapter": "0.13.0",
44
- "@mono-agent/operator-adapter": "0.13.0",
45
- "@mono-agent/memory": "0.13.0",
46
- "@mono-agent/observability": "0.13.0",
47
- "@mono-agent/openai-api-adapter": "0.13.0",
48
- "@mono-agent/runtime-adapter": "0.13.0",
49
- "@mono-agent/slack-adapter": "0.13.0",
50
- "@mono-agent/telegram-adapter": "0.13.0",
51
- "@mono-agent/tui": "0.13.0",
52
- "@mono-agent/web": "0.13.0",
53
- "@mono-agent/webhook-adapter": "0.13.0",
40
+ "@mono-agent/agent-contracts": "0.14.0",
41
+ "@mono-agent/agent-harness": "0.14.0",
42
+ "@mono-agent/config": "0.14.0",
43
+ "@mono-agent/cron-adapter": "0.14.0",
44
+ "@mono-agent/operator-adapter": "0.14.0",
45
+ "@mono-agent/memory": "0.14.0",
46
+ "@mono-agent/observability": "0.14.0",
47
+ "@mono-agent/openai-api-adapter": "0.14.0",
48
+ "@mono-agent/runtime-adapter": "0.14.0",
49
+ "@mono-agent/slack-adapter": "0.14.0",
50
+ "@mono-agent/telegram-adapter": "0.14.0",
51
+ "@mono-agent/tui": "0.14.0",
52
+ "@mono-agent/web": "0.14.0",
53
+ "@mono-agent/webhook-adapter": "0.14.0",
54
54
  "undici": "8.7.0",
55
55
  "zod": "^4.4.3"
56
56
  },
@@ -1220,7 +1220,7 @@
1220
1220
  "additionalProperties": false,
1221
1221
  "properties": {
1222
1222
  "host": {
1223
- "description": "Loopback host for the app-owned AskUser/tool-progress bridge.",
1223
+ "description": "Bind host for the app-owned AskUser/tool-progress bridge. Defaults to loopback; keep it local because non-loopback values are not rejected.",
1224
1224
  "examples": [
1225
1225
  "127.0.0.1"
1226
1226
  ],
@@ -1242,7 +1242,7 @@
1242
1242
  "additionalProperties": false,
1243
1243
  "properties": {
1244
1244
  "timeoutMs": {
1245
- "description": "Maximum wait for one AskUser question.",
1245
+ "description": "Maximum wait for one AskUser interaction (one to five questions).",
1246
1246
  "examples": [
1247
1247
  600000
1248
1248
  ],
@@ -9,7 +9,7 @@ Construct a working mono-agent in the user's current folder — empty or already
9
9
 
10
10
  ## Authoritative Sources — Search, Then References, Never Package Source
11
11
 
12
- When the `search_mono_agent_docs` MCP tool is available, use it **before** opening files or following website links. Its version-matched offline corpus contains the canonical public documentation plus the `references/*.md` bundled beside this skill. For "can it do X?", "what is the key for Y?", and "how is Z configured?", search with `scope: "composer"`; returned composer chunks have the same authority as the bundled references. Use `scope: "all"` for broader conceptual or troubleshooting questions. Results include complete Markdown excerpts, so links are provenance rather than a required second retrieval step.
12
+ When the `mono_agent_docs` MCP tool is available, use it **before** opening files or following website links. Its version-matched offline corpus contains the canonical public documentation plus the `references/*.md` bundled beside this skill. Start with `{"action":"search","query":"...","scope":"composer"}` for "can it do X?", "what is the key for Y?", and "how is Z configured?"; use `scope: "all"` for broader conceptual or troubleshooting questions. Search excerpts are a map, not the complete answer: call `{"action":"read","target":"<readTarget>"}` on the best result, follow the returned `internalLinks` with `action: "read"`, and use exact `previousTarget` / `nextTarget` actions when a long section continues. Composer-scoped content has the same authority as the bundled references.
13
13
 
14
14
  The bundled `references/*.md` remain the source of truth and the fallback when the MCP tool is unavailable. They are maintained in lockstep with the framework and are **complete for configuration and capabilities**. If the tool's `docsVersion` differs from the installed `mono-agent` version, use search for general context but verify version-specific config and CLI details against these local references. Reformulate a weak search once before falling back; never compensate by grepping package source.
15
15
 
@@ -17,13 +17,13 @@ Do **not** read or grep the `@mono-agent` TypeScript/package source — `package
17
17
 
18
18
  - `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."
19
19
  - 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.
20
- - The published docs site (<https://mono-agent-docs.vercel.app/>) is the human-facing companion. Do not browse it just to discover links: `search_mono_agent_docs` returns the indexed content directly, and the bundled references work offline when the tool is absent.
20
+ - The published docs site (<https://mono-agent-docs.vercel.app/>) is the human-facing companion. Do not browse it just to discover links: `mono_agent_docs` searches, expands, and resolves internal links offline, and the bundled references work when the tool is absent.
21
21
 
22
22
  **Red flags — STOP, you are about to grep source you should not:**
23
23
 
24
24
  | Thought | Reality |
25
25
  | --- | --- |
26
- | "Let me browse the docs navigation until I find the right page." | Search `search_mono_agent_docs`; it returns the matching excerpts directly. |
26
+ | "Let me browse the docs navigation until I find the right page." | Search with `mono_agent_docs`, read the best `readTarget`, then follow its structured `internalLinks`. |
27
27
  | "Let me verify the key name against the source." | The references give the exact key. Trust them; don't re-derive from source. |
28
28
  | "The references might be incomplete — I'll double-check `packages/.../src`." | `feature-coverage.md` is exhaustive for config/CLI. Not in it = not configurable. |
29
29
  | "I'll confirm the docs and source agree." | You are composing an agent, not auditing the framework. The references are the contract. |
@@ -31,7 +31,7 @@ Do **not** read or grep the `@mono-agent` TypeScript/package source — `package
31
31
 
32
32
  ## Operating Rules
33
33
 
34
- - Answer capability/config questions from `search_mono_agent_docs` with `scope: "composer"`, falling back to the bundled `references/*.md` (authoritative and complete) — never grep or read the `@mono-agent` package source to compose an agent. See "Authoritative Sources" above.
34
+ - Answer capability/config questions through `mono_agent_docs`: search with `scope: "composer"`, read the best target, and continue through structured links/windows as needed. Fall back to the bundled `references/*.md` (authoritative and complete) — never grep or read the `@mono-agent` package source to compose an agent. See "Authoritative Sources" above.
35
35
 
36
36
  - The deliverable is a folder that works: `mono-agent.config.json` + `IDENTITY.md` (+ optional `skills/`, `mcp.json`), validated and started — not a tutorial.
37
37
  - Start by discovering the intended agent product, not by naming packages.
@@ -105,7 +105,7 @@ Config-first covers one responder served over any combination of the seven chann
105
105
  - `references/package-map.md` — which package owns what, for programmatic composition and troubleshooting.
106
106
  - `references/validation.md` — validation commands and per-channel smoke tests; read before claiming the agent works.
107
107
 
108
- `search_mono_agent_docs` is the primary discovery interface when present; its composer-scoped results are built from these same versioned references. The bundled `references/*` files remain authoritative and self-sufficient when the tool is absent or version-mismatched, so use them rather than package source or a remote site. The published documentation site at <https://mono-agent-docs.vercel.app/> is the human-facing companion, not an AI retrieval dependency.
108
+ `mono_agent_docs` is the primary discovery and reading interface when present; its composer-scoped results are built from these same versioned references. Always progress from `action: "search"` to `action: "read"` before concluding from a short hit, and use the response's exact navigation actions rather than inventing chunk or page locations. The bundled `references/*` files remain authoritative and self-sufficient when the tool is absent or version-mismatched, so use them rather than package source or a remote site. The published documentation site at <https://mono-agent-docs.vercel.app/> is the human-facing companion, not an AI retrieval dependency.
109
109
 
110
110
  ## Done Criteria
111
111
 
@@ -158,7 +158,7 @@ new agent.
158
158
  // NodeRepl shares state only inside one run and uses the same sandbox policy
159
159
  // as Bash.
160
160
 
161
- // Human-in-the-loop bridge: blocking AskUser / TelegramAskButtons plus
161
+ // Human-in-the-loop bridge: structured blocking AskUser plus
162
162
  // run-scoped project-MCP progress. It auto-starts when either ask tool is
163
163
  // allowed, this block or an interaction env override is configured, or
164
164
  // interaction.progress.enabled resolves true while
@@ -409,7 +409,7 @@ mono-agent config # resolved config field-by-field, each value tagged env/
409
409
  mono-agent validate [--preset <id>] [--consumer <path>] # per-section report; --preset also checks the preset's capabilities
410
410
  mono-agent start # traceability + every configured channel
411
411
  mono-agent restart # apply config edits (config is JSON-first; restart to re-apply)
412
- mono-agent restart --clear-sessions # restart AND purge persisted pi sessions (fresh start; durable memory kept) [--force is a deprecated alias]
412
+ mono-agent restart --clear-sessions # restart AND purge persisted pi sessions (fresh start; durable memory kept)
413
413
  ```
414
414
 
415
415
  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.
@@ -29,7 +29,7 @@ Every framework capability and how a composed agent reaches it. This table is th
29
29
  | 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` |
30
30
  | Selected skills from a skills root | config | `context.skillsRoot`, `context.selectedSkills` | `skills.selected-activation` |
31
31
  | Generated project configuration skills with progressive disclosure | config + cli | init selects `mono-agent-configure` + `mono-agent-memory` under `./skills` with `context.skillDisclosure: "index"`; drift: `mono-agent install-skill --project --check\|--update` | `app.managed-project-skills` |
32
- | 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; tool `search_mono_agent_docs` searches full offline excerpts from `@mono-agent/docs-mcp` | — |
32
+ | 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 | — |
33
33
  | Per-skill byte cap | config | `context.skillMaxBytes` | `skills.byte-capping` |
34
34
  | 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 | — |
35
35
  | Lite memory (FTS keyword recall + rapid-log capture; no external deps) | config | `memory.mode: "lite"`, `path`, `maxBytes`, `writeMode` | `memory.lite` |
@@ -54,7 +54,7 @@ Every framework capability and how a composed agent reaches it. This table is th
54
54
  | MCP servers (stdio/sse/http) from a JSON file | config | `tools.mcpConfigPath` | `tool-policy.mcp-servers` |
55
55
  | 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` |
56
56
  | 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` |
57
- | Interaction bridge for adapter-send history, blocking asks, and MCP progress | config + auto | `interaction.bridge.{host,port}`, `interaction.askUser.timeoutMs`, `interaction.progress.enabled`; env `MONO_AGENT_INTERACTION_BRIDGE_HOST`, `MONO_AGENT_INTERACTION_BRIDGE_PORT`, `MONO_AGENT_ASK_USER_TIMEOUT_MS`, `MONO_AGENT_PROGRESS_ENABLED`. It auto-starts for configured Slack/Telegram send tools, when `AskUser` or `TelegramAskButtons` 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. | `interaction.bridge` |
57
+ | Interaction bridge for adapter-send history, structured blocking asks, and MCP progress | config + auto | `interaction.bridge.{host,port}`, `interaction.askUser.timeoutMs`, `interaction.progress.enabled`; env `MONO_AGENT_INTERACTION_BRIDGE_HOST`, `MONO_AGENT_INTERACTION_BRIDGE_PORT`, `MONO_AGENT_ASK_USER_TIMEOUT_MS`, `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` |
58
58
  | Sandbox on/off + srt engine (Pi-owned tools; direct Codex has its own sandbox, Claude/direct OpenCode reject native mono policy) | config | `sandbox.mode` | `sandbox.mode` |
59
59
  | Network policy (none/localhost/allowlist/all) | config | `sandbox.network.{mode,allowlist}` | `sandbox.network-policy` |
60
60
  | Filesystem scopes (readable/writable roots, deny-write globs) | config | `sandbox.readableRoots`, `sandbox.writableRoots`, `sandbox.denyWrite` | `sandbox.filesystem-scopes` |
@@ -68,7 +68,7 @@ Every framework capability and how a composed agent reaches it. This table is th
68
68
  | Webhook (sync/async HTTP invoke + status polling + optional bearer) | config | `webhook` section; `apiKey` protects invoke/status and is required with non-loopback opt-in; endpoint overrides at `webhook.endpoints[].{model,effort,maxRunMs}`; endpoint `maxRunMs` wins over the `webhook.maxRunMs` fallback and `0` disables that endpoint watchdog | `webhook.http-invoke`, `webhook.run-watchdog` |
69
69
  | OpenAI-compatible API (/v1/models, /v1/chat/completions, SSE, bearer) | config | `openaiApi` section; sampling fields remain request metadata, while non-default values are ignored with a `runtime_warning` and runtime config stays authoritative | `openai-api.chat-completions` |
70
70
  | Telegram long polling and chat allowlist | config | `telegram` section | `telegram.long-polling` |
71
- | Telegram runtime/command/reaction/button/file interactivity | config + code | built-in per-chat `/model` and `/effort` use configured primary/fallback models (no Telegram config key); `telegram.commands[]`, `telegram.reactions`, `telegram.quietHours`; `TelegramAskButtons` / `TelegramSendFile` through `tools.allowedTools` | `telegram.interactive` |
71
+ | Telegram runtime/command/reaction/button/file interactivity | config + code | built-in per-chat `/model` and `/effort` use configured primary/fallback models (no Telegram config key); `telegram.commands[]`, `telegram.reactions`, `telegram.quietHours`; `AskUser`, non-blocking `TelegramSendMessage.reply_options`, and `TelegramSendFile` | `telegram.interactive` |
72
72
  | 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` |
73
73
  | Slack (Socket Mode, channel allowlist, mention handling, native runtime controls) | config + code | `slack` section; 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` |
74
74
  | Slack global/message shortcuts | config | `slack.shortcuts[]: {callbackId, prompt, channelId?, ackText?, threadReply?}`; JSON-only | `slack.shortcuts` |
@@ -51,7 +51,7 @@ Use this path when the agent needs identity, selected skills, history, and optio
51
51
  | Memory substrate (schema, migrations, FTS+vector db, RRF) | `@mono-agent/memory/store` | SQLite storage, BM25 FTS, optional vector index, hybrid recall; re-exports `MemoryStore`/`MemoryBlock`/`MemoryWriteResult` from `@mono-agent/agent-contracts` |
52
52
  | Memory engine (all tiers: lite/journal/bujo) | `@mono-agent/memory/bujo` | `BujoMemoryStore` — tier-aware: FTS recall (lite), hybrid recall + static salience (journal), LLM capture/reconcile + entity graph + projection-only scheduled consolidation (bujo) |
53
53
  | Embedding providers | `@mono-agent/memory/search` | Exclusive Ollama/LM Studio/OpenAI embedding providers used by the store subpath for vector recall; `agent-app` owns guided typed discovery and the real readiness probe |
54
- | Composer documentation search | `@mono-agent/docs-mcp` (optional plugin) | Exact-version offline hybrid semantic/BM25 search over canonical docs and composer references through `search_mono_agent_docs`; paired by `mono-agent install-skill`, outside the composed agent's own `mcp.json` |
54
+ | Composer documentation search + guided reading | `@mono-agent/docs-mcp` (optional plugin) | Exact-version offline hybrid semantic/BM25 `mono_agent_docs` search plus anchored reads, cross-link resolution, and continuation windows over canonical docs and composer references; paired by `mono-agent install-skill`, outside the composed agent's own `mcp.json` |
55
55
  | External Supermemory backend | `@mono-agent/memory-supermemory` (optional plugin) | Explicitly installed lockstep package selected by `memory.backend: "supermemory"`; proxies the shared `MemoryStore` / `MemoryRecall` contracts to local or hosted Supermemory for server-side extraction, consolidation, and hybrid recall |
56
56
  | Recall tool surface | `@mono-agent/agent-app` (bundled) | Auto-provisions read-only `MemoryRecall` for every configured tier and direct configured responder; automatic/tool recall share the same store and per-turn query cache |
57
57
 
@@ -275,7 +275,7 @@ per-route form for a new agent.
275
275
  **Goal:** one Telegram agent uses `AskUser`, long-running MCP tool progress, a self-hosted Bot API server, and `TelegramSendFile`.
276
276
  **Features:** `telegram.long-polling`, `agent-app.adapter-send-tools`, `interaction.ask-user`, `interaction.progress`, `tool-policy.mcp-servers`.
277
277
 
278
- **Bridge startup:** the loopback interaction bridge auto-starts when `AskUser` or `TelegramAskButtons` is allowed, when the `interaction` block or an interaction env override is configured, or when `interaction.progress.enabled` resolves true and `tools.mcpRequestContextServers` names at least one opted project MCP server.
278
+ **Bridge startup:** the interaction bridge defaults to loopback and auto-starts when `AskUser` is allowed, when the `interaction` block or an interaction env override is configured, or when `interaction.progress.enabled` resolves true and `tools.mcpRequestContextServers` names at least one opted project MCP server. Keep `interaction.bridge.host` on loopback because non-loopback values are not rejected. AskUser takes one to five structured questions with two or three described choices each; Telegram presents them sequentially with native buttons, Other/custom reply, and Done for multi-select.
279
279
 
280
280
  ```json
281
281
  {
@@ -43,6 +43,26 @@ mono-agent start
43
43
 
44
44
  Every channel the user asked for must report `running` with its endpoint facts; anything `failed` is a blocker, not a footnote.
45
45
 
46
+ On macOS, managed start also installs a no-`KeepAlive` recovery helper that runs
47
+ at login and every five minutes. It safely reconciles an inactive worker, a
48
+ changed keyed snapshot, or a different available controller CLI closure without
49
+ executing mutable source bytes. The existing worker stays live during runtime
50
+ installation; failed recovery preserves the helper and both definitions for the
51
+ next scheduled retry. `mono-agent stop` removes that authority, so an explicitly
52
+ stopped agent is not resurrected.
53
+
54
+ Confirm the authoritative process boundary with:
55
+
56
+ ```bash
57
+ mono-agent status --json
58
+ ```
59
+
60
+ Treat `ok: true` as proof only because the status command now requires the trace
61
+ PID to be alive and equal launchd's current PID. When launchd has no matching
62
+ live process, cached `running` channels are rendered `stopped`, live endpoint
63
+ facts are omitted, `pid` is `null`, and the command exits 1. Do not interpret an
64
+ old trace manifest by itself as a running consumer.
65
+
46
66
  ## Documentation Validation
47
67
 
48
68
  To confirm a skills folder is indexable (replace `<skillsRoot>` with the