@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.
- package/README.md +24 -10
- package/dist/adapter-send-tools-main.d.ts +3 -0
- package/dist/adapter-send-tools-main.d.ts.map +1 -0
- package/dist/adapter-send-tools-main.js +20 -0
- package/dist/adapter-send-tools-main.js.map +1 -0
- package/dist/adapter-send-tools.d.ts +125 -0
- package/dist/adapter-send-tools.d.ts.map +1 -0
- package/dist/adapter-send-tools.js +629 -0
- package/dist/adapter-send-tools.js.map +1 -0
- package/dist/app-config.d.ts +86 -26
- package/dist/app-config.d.ts.map +1 -1
- package/dist/app-config.js +284 -90
- package/dist/app-config.js.map +1 -1
- package/dist/app.d.ts +51 -20
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +889 -119
- package/dist/app.js.map +1 -1
- package/dist/artifact-retention.d.ts +32 -0
- package/dist/artifact-retention.d.ts.map +1 -0
- package/dist/artifact-retention.js +111 -0
- package/dist/artifact-retention.js.map +1 -0
- package/dist/audit-runs.d.ts +12 -0
- package/dist/audit-runs.d.ts.map +1 -0
- package/dist/audit-runs.js +68 -0
- package/dist/audit-runs.js.map +1 -0
- package/dist/backfill.d.ts +75 -0
- package/dist/backfill.d.ts.map +1 -0
- package/dist/backfill.js +350 -0
- package/dist/backfill.js.map +1 -0
- package/dist/background.d.ts +8 -5
- package/dist/background.d.ts.map +1 -1
- package/dist/background.js +279 -53
- package/dist/background.js.map +1 -1
- package/dist/broadcast-recorder.d.ts +27 -0
- package/dist/broadcast-recorder.d.ts.map +1 -0
- package/dist/broadcast-recorder.js +82 -0
- package/dist/broadcast-recorder.js.map +1 -0
- package/dist/channel-config-view.d.ts +28 -0
- package/dist/channel-config-view.d.ts.map +1 -0
- package/dist/channel-config-view.js +79 -0
- package/dist/channel-config-view.js.map +1 -0
- package/dist/channel-gate.d.ts +22 -0
- package/dist/channel-gate.d.ts.map +1 -0
- package/dist/channel-gate.js +35 -0
- package/dist/channel-gate.js.map +1 -0
- package/dist/channel-plugins.d.ts +39 -0
- package/dist/channel-plugins.d.ts.map +1 -0
- package/dist/channel-plugins.js +346 -0
- package/dist/channel-plugins.js.map +1 -0
- package/dist/channels.d.ts +62 -66
- package/dist/channels.d.ts.map +1 -1
- package/dist/channels.js +850 -120
- package/dist/channels.js.map +1 -1
- package/dist/cli.d.ts +103 -4
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +984 -112
- package/dist/cli.js.map +1 -1
- package/dist/config-reference.d.ts +24 -0
- package/dist/config-reference.d.ts.map +1 -0
- package/dist/config-reference.js +580 -0
- package/dist/config-reference.js.map +1 -0
- package/dist/configured-agent.d.ts +104 -0
- package/dist/configured-agent.d.ts.map +1 -0
- package/dist/configured-agent.js +578 -0
- package/dist/configured-agent.js.map +1 -0
- package/dist/consumer-contract.d.ts +36 -0
- package/dist/consumer-contract.d.ts.map +1 -0
- package/dist/consumer-contract.js +290 -0
- package/dist/consumer-contract.js.map +1 -0
- package/dist/doctor.d.ts +17 -0
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +392 -95
- package/dist/doctor.js.map +1 -1
- package/dist/index.d.ts +14 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -3
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +23 -7
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +91 -26
- package/dist/init.js.map +1 -1
- package/dist/install-skill.d.ts +1 -1
- package/dist/install-skill.js +2 -2
- package/dist/install-skill.js.map +1 -1
- package/dist/interaction-bridge.d.ts +72 -0
- package/dist/interaction-bridge.d.ts.map +1 -0
- package/dist/interaction-bridge.js +354 -0
- package/dist/interaction-bridge.js.map +1 -0
- package/dist/launchd.d.ts +0 -2
- package/dist/launchd.d.ts.map +1 -1
- package/dist/launchd.js +0 -2
- package/dist/launchd.js.map +1 -1
- package/dist/memory-command.d.ts +10 -0
- package/dist/memory-command.d.ts.map +1 -0
- package/dist/memory-command.js +649 -0
- package/dist/memory-command.js.map +1 -0
- package/dist/memory-recall-main.d.ts +3 -0
- package/dist/memory-recall-main.d.ts.map +1 -0
- package/dist/memory-recall-main.js +30 -0
- package/dist/memory-recall-main.js.map +1 -0
- package/dist/memory-recall.d.ts +147 -0
- package/dist/memory-recall.d.ts.map +1 -0
- package/dist/memory-recall.js +345 -0
- package/dist/memory-recall.js.map +1 -0
- package/dist/memory-rituals.d.ts +8 -11
- package/dist/memory-rituals.d.ts.map +1 -1
- package/dist/memory-rituals.js +26 -25
- package/dist/memory-rituals.js.map +1 -1
- package/dist/metrics.d.ts +13 -0
- package/dist/metrics.d.ts.map +1 -0
- package/dist/metrics.js +105 -0
- package/dist/metrics.js.map +1 -0
- package/dist/notify-destinations.d.ts +23 -0
- package/dist/notify-destinations.d.ts.map +1 -0
- package/dist/notify-destinations.js +79 -0
- package/dist/notify-destinations.js.map +1 -0
- package/dist/posted-message-index.d.ts +61 -0
- package/dist/posted-message-index.d.ts.map +1 -0
- package/dist/posted-message-index.js +178 -0
- package/dist/posted-message-index.js.map +1 -0
- package/dist/proactive-notify.d.ts +32 -0
- package/dist/proactive-notify.d.ts.map +1 -0
- package/dist/proactive-notify.js +62 -0
- package/dist/proactive-notify.js.map +1 -0
- package/dist/recipes/base.d.ts +15 -0
- package/dist/recipes/base.d.ts.map +1 -0
- package/dist/recipes/base.js +51 -0
- package/dist/recipes/base.js.map +1 -0
- package/dist/recipes/catalog.d.ts +4 -0
- package/dist/recipes/catalog.d.ts.map +1 -0
- package/dist/recipes/catalog.js +509 -0
- package/dist/recipes/catalog.js.map +1 -0
- package/dist/recipes/index.d.ts +11 -0
- package/dist/recipes/index.d.ts.map +1 -0
- package/dist/recipes/index.js +14 -0
- package/dist/recipes/index.js.map +1 -0
- package/dist/recipes/types.d.ts +70 -0
- package/dist/recipes/types.d.ts.map +1 -0
- package/dist/recipes/types.js +15 -0
- package/dist/recipes/types.js.map +1 -0
- package/dist/request-model-override.d.ts +67 -0
- package/dist/request-model-override.d.ts.map +1 -0
- package/dist/request-model-override.js +96 -0
- package/dist/request-model-override.js.map +1 -0
- package/dist/runs-health.d.ts +22 -0
- package/dist/runs-health.d.ts.map +1 -0
- package/dist/runs-health.js +144 -0
- package/dist/runs-health.js.map +1 -0
- package/dist/seen-conversations.d.ts +22 -0
- package/dist/seen-conversations.d.ts.map +1 -0
- package/dist/seen-conversations.js +120 -0
- package/dist/seen-conversations.js.map +1 -0
- package/dist/sessions.d.ts +21 -0
- package/dist/sessions.d.ts.map +1 -0
- package/dist/sessions.js +45 -0
- package/dist/sessions.js.map +1 -0
- package/dist/setup.d.ts +29 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +97 -0
- package/dist/setup.js.map +1 -0
- package/dist/trigger-overrides.d.ts +17 -0
- package/dist/trigger-overrides.d.ts.map +1 -0
- package/dist/trigger-overrides.js +30 -0
- package/dist/trigger-overrides.js.map +1 -0
- package/dist/tui-command.d.ts +56 -0
- package/dist/tui-command.d.ts.map +1 -0
- package/dist/tui-command.js +160 -0
- package/dist/tui-command.js.map +1 -0
- package/dist/ui.d.ts +54 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +157 -0
- package/dist/ui.js.map +1 -0
- package/dist/web-command.d.ts +39 -0
- package/dist/web-command.d.ts.map +1 -0
- package/dist/web-command.js +151 -0
- package/dist/web-command.js.map +1 -0
- package/package.json +22 -17
- package/schema/mono-agent.config.schema.json +1686 -0
- package/skills/mono-agent-composer/SKILL.md +38 -12
- package/skills/mono-agent-composer/agents/openai.yaml +4 -0
- package/skills/mono-agent-composer/references/config-blueprint.md +84 -31
- package/skills/mono-agent-composer/references/discovery-questions.md +49 -36
- package/skills/mono-agent-composer/references/feature-coverage.md +26 -19
- package/skills/mono-agent-composer/references/package-map.md +20 -22
- package/skills/mono-agent-composer/references/playbooks.md +209 -0
- 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,
|
|
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
|
-
|
|
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
|
|
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 --
|
|
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
|
-
|
|
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`).
|
|
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
|
|
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.
|
|
@@ -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
|
|
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
|
|
79
|
+
// journal — + hybrid recall (BM25+vector) + decay; needs embeddings.
|
|
69
80
|
// bujo — + LLM capture/reconcile + entity graph + auto-scheduled
|
|
70
|
-
//
|
|
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": "
|
|
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": { //
|
|
84
|
-
|
|
85
|
-
"
|
|
86
|
-
"
|
|
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
|
|
89
|
-
//
|
|
90
|
-
"
|
|
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
|
|
113
|
-
|
|
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
|
-
//
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
"
|
|
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
|
-
|
|
129
|
-
|
|
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
|
|
227
|
-
mono-agent
|
|
228
|
-
mono-agent start
|
|
229
|
-
mono-agent
|
|
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. `
|
|
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
|
|
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
|
|
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-
|
|
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
|
|
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
|
-
|
|
90
|
+
consolidation; requires embeddings AND a chat model
|
|
91
91
|
```
|
|
92
92
|
|
|
93
|
-
All tiers share the same `@mono-agent/memory
|
|
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
|
|
114
|
-
|
|
115
|
-
|
|
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
|
|
133
|
-
|
|
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 +
|
|
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,
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
- Ask: which
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
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": "
|
|
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
|
-
|
|
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
|
-
"
|
|
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 #
|
|
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
|
|
186
|
-
|
|
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
|
|
224
|
+
Do you need a browsable trace viewer or just local artifacts?
|
|
211
225
|
|
|
212
|
-
1. JSONL artifacts
|
|
213
|
-
2. JSONL artifacts
|
|
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
|
|
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.
|
|
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
|
-
|
|
|
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
|
-
|
|
|
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
|
|
32
|
-
| BuJo memory (journal + LLM capture/reconcile ADD/UPDATE/SUPERSEDE/NOOP + entity graph + auto-scheduled
|
|
33
|
-
| BuJo
|
|
34
|
-
|
|
|
35
|
-
|
|
|
36
|
-
| Memory liveness check (root writable; Ollama
|
|
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
|
-
|
|
|
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
|
|
73
|
-
|
|
|
74
|
-
|
|
|
75
|
-
|
|
|
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` |
|