@mono-agent/agent-app 0.5.1 → 0.6.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 +7 -0
- package/dist/adapter-send-tools.d.ts +7 -7
- package/dist/adapter-send-tools.d.ts.map +1 -1
- package/dist/adapter-send-tools.js +59 -50
- package/dist/adapter-send-tools.js.map +1 -1
- package/dist/app.js +8 -8
- package/dist/app.js.map +1 -1
- package/dist/channels.js +3 -3
- package/dist/channels.js.map +1 -1
- package/dist/cli.d.ts +28 -10
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +287 -164
- package/dist/cli.js.map +1 -1
- package/dist/config-reference.js +4 -4
- package/dist/config-reference.js.map +1 -1
- package/dist/consumer-contract.d.ts.map +1 -1
- package/dist/consumer-contract.js +5 -3
- package/dist/consumer-contract.js.map +1 -1
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +131 -7
- package/dist/doctor.js.map +1 -1
- package/dist/init.d.ts +11 -22
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +25 -116
- package/dist/init.js.map +1 -1
- package/dist/interaction-bridge.d.ts +3 -3
- package/dist/interaction-bridge.d.ts.map +1 -1
- package/dist/memory-recall.d.ts +2 -2
- package/dist/memory-recall.d.ts.map +1 -1
- package/dist/memory-recall.js +3 -3
- package/dist/memory-recall.js.map +1 -1
- package/dist/modules/base.d.ts +25 -0
- package/dist/modules/base.d.ts.map +1 -0
- package/dist/{recipes → modules}/base.js +17 -11
- package/dist/modules/base.js.map +1 -0
- package/dist/modules/catalog.d.ts +12 -0
- package/dist/modules/catalog.d.ts.map +1 -0
- package/dist/modules/catalog.js +412 -0
- package/dist/modules/catalog.js.map +1 -0
- package/dist/modules/index.d.ts +8 -0
- package/dist/modules/index.d.ts.map +1 -0
- package/dist/modules/index.js +5 -0
- package/dist/modules/index.js.map +1 -0
- package/dist/modules/known-tools.d.ts +44 -0
- package/dist/modules/known-tools.d.ts.map +1 -0
- package/dist/modules/known-tools.js +88 -0
- package/dist/modules/known-tools.js.map +1 -0
- package/dist/modules/types.d.ts +73 -0
- package/dist/modules/types.d.ts.map +1 -0
- package/dist/{recipes → modules}/types.js +3 -3
- package/dist/{recipes → modules}/types.js.map +1 -1
- package/dist/posted-message-index.d.ts +2 -2
- package/dist/posted-message-index.js +2 -2
- package/dist/provider-setup.d.ts +44 -0
- package/dist/provider-setup.d.ts.map +1 -0
- package/dist/provider-setup.js +174 -0
- package/dist/provider-setup.js.map +1 -0
- package/dist/wizard/answers.d.ts +87 -0
- package/dist/wizard/answers.d.ts.map +1 -0
- package/dist/wizard/answers.js +244 -0
- package/dist/wizard/answers.js.map +1 -0
- package/dist/wizard/from-flags.d.ts +27 -0
- package/dist/wizard/from-flags.d.ts.map +1 -0
- package/dist/wizard/from-flags.js +45 -0
- package/dist/wizard/from-flags.js.map +1 -0
- package/dist/wizard/index.d.ts +11 -0
- package/dist/wizard/index.d.ts.map +1 -0
- package/dist/wizard/index.js +6 -0
- package/dist/wizard/index.js.map +1 -0
- package/dist/wizard/model-discovery.d.ts +35 -0
- package/dist/wizard/model-discovery.d.ts.map +1 -0
- package/dist/wizard/model-discovery.js +239 -0
- package/dist/wizard/model-discovery.js.map +1 -0
- package/dist/wizard/presets.d.ts +40 -0
- package/dist/wizard/presets.d.ts.map +1 -0
- package/dist/wizard/presets.js +85 -0
- package/dist/wizard/presets.js.map +1 -0
- package/dist/wizard/prompts.d.ts +55 -0
- package/dist/wizard/prompts.d.ts.map +1 -0
- package/dist/wizard/prompts.js +152 -0
- package/dist/wizard/prompts.js.map +1 -0
- package/dist/wizard/run.d.ts +20 -0
- package/dist/wizard/run.d.ts.map +1 -0
- package/dist/wizard/run.js +374 -0
- package/dist/wizard/run.js.map +1 -0
- package/package.json +17 -16
- package/schema/mono-agent.config.schema.json +5 -3
- package/skills/mono-agent-composer/SKILL.md +8 -8
- package/skills/mono-agent-composer/references/config-blueprint.md +7 -7
- package/skills/mono-agent-composer/references/discovery-questions.md +13 -10
- package/skills/mono-agent-composer/references/feature-coverage.md +12 -10
- package/skills/mono-agent-composer/references/package-map.md +7 -6
- package/skills/mono-agent-composer/references/playbooks.md +22 -22
- package/skills/mono-agent-composer/references/validation.md +3 -3
- package/dist/recipes/base.d.ts +0 -15
- package/dist/recipes/base.d.ts.map +0 -1
- package/dist/recipes/base.js.map +0 -1
- package/dist/recipes/catalog.d.ts +0 -4
- package/dist/recipes/catalog.d.ts.map +0 -1
- package/dist/recipes/catalog.js +0 -525
- package/dist/recipes/catalog.js.map +0 -1
- package/dist/recipes/index.d.ts +0 -11
- package/dist/recipes/index.d.ts.map +0 -1
- package/dist/recipes/index.js +0 -14
- package/dist/recipes/index.js.map +0 -1
- package/dist/recipes/types.d.ts +0 -70
- package/dist/recipes/types.d.ts.map +0 -1
- package/dist/setup.d.ts +0 -29
- package/dist/setup.d.ts.map +0 -1
- package/dist/setup.js +0 -97
- package/dist/setup.js.map +0 -1
|
@@ -6,9 +6,9 @@ Every framework capability and how a composed agent reaches it. This table is th
|
|
|
6
6
|
|
|
7
7
|
| Capability | Coverage | Where |
|
|
8
8
|
| --- | --- | --- |
|
|
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` |
|
|
9
|
+
| Model backends: claude (sdk/cli), codex (cli direct fallback), pi sdk providers (OpenAI, OpenAI-Codex preferred when Pi auth exists, Copilot, OpenRouter, OpenCode-through-Pi, Ollama, LM Studio, ...), plus hand-authored opencode runtime refs (cli, `opencode:<provider>:<model>` via the OpenCode server) | config | `runtime.model` |
|
|
10
10
|
| Backup models on retryable provider failure | config | `runtime.fallbackModels` |
|
|
11
|
-
| Execution mode (sdk/cli), effort, max turns, workspace | config | `runtime.executionMode`, `runtime.effort
|
|
11
|
+
| Execution mode (sdk/cli), effort, max turns, workspace | config + cli | `runtime.executionMode`, `runtime.effort` (`mono-agent init --effort <level>`), `runtime.maxTurns`, `runtime.workspace` |
|
|
12
12
|
| Tool-permission posture for CLI backends | config | `runtime.permissionMode` |
|
|
13
13
|
| Continuous provider sessions with idle eviction | config | `runtime.session.{mode,idleTimeoutMs}` |
|
|
14
14
|
| Local providers (Ollama / LM Studio / OpenAI-compatible) | config | `providers.local[]` |
|
|
@@ -35,16 +35,16 @@ Every framework capability and how a composed agent reaches it. This table is th
|
|
|
35
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
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 `
|
|
38
|
+
| Auto-provisioned read-only `MemoryRecall` 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) |
|
|
39
39
|
|
|
40
40
|
## Tools, MCP, sandbox
|
|
41
41
|
|
|
42
42
|
| Capability | Coverage | Where |
|
|
43
43
|
| --- | --- | --- |
|
|
44
|
-
|
|
|
45
|
-
| Tool allow/deny lists (deny wins) | config | `tools.allowedTools`, `tools.disallowedTools` |
|
|
44
|
+
| Allow-all tool policy (omitted / `["*"]` = all tools; `[]` = none) | config | default `tools.allowedTools`; the harness no-policy safety net is `failClosedToolPolicy()` |
|
|
45
|
+
| Tool allow/deny lists (deny wins, even under allow-all; pi doesn't deny external MCP tools) | config | `tools.allowedTools`, `tools.disallowedTools` |
|
|
46
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 `
|
|
47
|
+
| 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 |
|
|
48
48
|
| Sandbox on/off + srt engine | config | `sandbox.mode` |
|
|
49
49
|
| Network policy (none/localhost/allowlist/all) | config | `sandbox.network.{mode,allowlist}` |
|
|
50
50
|
| Filesystem scopes (readable/writable roots, deny-write globs) | config | `sandbox.readableRoots`, `sandbox.writableRoots`, `sandbox.denyWrite` |
|
|
@@ -78,11 +78,13 @@ Every framework capability and how a composed agent reaches it. This table is th
|
|
|
78
78
|
| Phoenix trace viewer (OTLP exporter; local JSONL artifacts are the fallback) | config | `observability.exporters` (phoenix entry) |
|
|
79
79
|
| 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) |
|
|
80
80
|
| 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 |
|
|
81
|
-
|
|
|
81
|
+
| Setup presets (saved answer-sets: generate config + `.env.example` + checklist) | cli | `mono-agent presets list\|show <id>`, `mono-agent init --preset <id> --yes` (`recipes`/`--recipe` deprecated aliases) |
|
|
82
|
+
| Interactive setup wizard (preset/custom; walks model→channels→memory→tools→sandbox→observability) | cli | `mono-agent init` (no flags, on a TTY; `setup` alias) |
|
|
83
|
+
| Tools reporting + no-tools guardrail (allow-all → `All tools allowed`; explicit empty `allowedTools: []` → `waiting`; unknown-tool "did you mean"; send-tool/channel cross-checks) | cli | part of `mono-agent validate`/`doctor`; the wizard's tools step |
|
|
82
84
|
| Resolved config view (every field tagged env/json/default) | cli | `mono-agent config` |
|
|
83
|
-
| Scaffold / validate / start / install-skill | cli | `mono-agent init\|validate [--consumer <path>]\|config\|
|
|
84
|
-
|
|
|
85
|
+
| Scaffold / validate / start / install-skill | cli | `mono-agent init [--model <ref>] [--fallback-models <csv>] [--effort <level>] [--auth]\|validate [--consumer <path>]\|config\|presets\|start\|install-skill` |
|
|
86
|
+
| Preset capability check (selected preset live?) | cli | `mono-agent validate --preset <id>` |
|
|
85
87
|
| `.env` auto-loading | cli | automatic; `--env-file <path>` |
|
|
86
88
|
| Explicit failure objects (no fake success) | auto | harness |
|
|
87
89
|
| Per-request runtime options, custom memory/history stores | code | `createConfiguredAgentResponder` options |
|
|
88
|
-
| Multi-agent delegation (`
|
|
90
|
+
| Multi-agent delegation (`AskCollaborator` loopback MCP tool) | code | `@mono-agent/agent-orchestrator` |
|
|
@@ -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 + decay (journal), LLM capture/reconcile + entity graph + scheduled consolidation (bujo) |
|
|
53
53
|
| Embedding providers | `@mono-agent/memory/search` | Ollama/OpenAI embedding providers used by the store subpath for vector recall |
|
|
54
|
-
| Recall tool surface | `@mono-agent/agent-app` (bundled) | Auto-provisions a read-only `
|
|
54
|
+
| Recall tool surface | `@mono-agent/agent-app` (bundled) | Auto-provisions a read-only `MemoryRecall` tool (hybrid keyword+semantic search) from `config.memory.recallTool.enabled`; spawns the bundled `mono-agent-memory` stdio child using the same memory root + embeddings as the in-app memory |
|
|
55
55
|
|
|
56
56
|
Mono-agent selected skills are not auto-selected by description. The host chooses `context.selectedSkills`, and the harness loads those exact bodies.
|
|
57
57
|
|
|
@@ -72,21 +72,21 @@ Use `@mono-agent/agent-harness` directly when a host needs custom prompt/runtime
|
|
|
72
72
|
|
|
73
73
|
## Tools And MCP Join
|
|
74
74
|
|
|
75
|
-
Use `@mono-agent/agent-harness` for
|
|
75
|
+
Use `@mono-agent/agent-harness` for tool/MCP policy normalization. The **config** default is allow-all (`["*"]`); `createToolPolicy` itself does no defaulting, and the harness's no-policy safety net is `failClosedToolPolicy()` (an empty, fail-closed policy):
|
|
76
76
|
|
|
77
77
|
```ts
|
|
78
78
|
import { createToolPolicy, toolPolicyToRuntimeOptions } from "@mono-agent/agent-harness";
|
|
79
79
|
|
|
80
80
|
const policy = createToolPolicy({
|
|
81
|
-
allowedTools: ["
|
|
82
|
-
disallowedTools: ["WebFetch"],
|
|
81
|
+
allowedTools: ["*"], // ["*"] = all; ["Read","Grep"] = specific; [] = none
|
|
82
|
+
disallowedTools: ["WebFetch"], // deny wins, even under allow-all
|
|
83
83
|
mcpConfigPath: "./mcp.json",
|
|
84
84
|
});
|
|
85
85
|
|
|
86
86
|
const runtimeOptions = toolPolicyToRuntimeOptions(policy);
|
|
87
87
|
```
|
|
88
88
|
|
|
89
|
-
|
|
89
|
+
Match the user's intent: allow-all is the recommended default. Prefer subtracting with `disallowedTools` over hand-curating an allowlist, and only narrow to a specific list when the user asks for it.
|
|
90
90
|
|
|
91
91
|
## Adapter Join
|
|
92
92
|
|
|
@@ -127,6 +127,7 @@ Supported model reference families:
|
|
|
127
127
|
|
|
128
128
|
- `codex:<model>` with CLI execution
|
|
129
129
|
- `claude:<model>` with SDK or CLI execution
|
|
130
|
-
- `pi:<provider>:<model>` with SDK execution, including local providers such as Ollama
|
|
130
|
+
- `pi:<provider>:<model>` with SDK execution, including Pi OpenAI-Codex, OpenCode-through-Pi (`pi:opencode-go:*`), and local providers such as Ollama and LM Studio
|
|
131
|
+
- `opencode:<provider>:<model>` with CLI execution for hand-authored OpenCode backend config
|
|
131
132
|
|
|
132
133
|
Provider credentials belong in the provider/runtime environment, not in committed config.
|
|
@@ -29,23 +29,23 @@ Flow, check whether one of these fits and adapt it. Verify every key against
|
|
|
29
29
|
}
|
|
30
30
|
```
|
|
31
31
|
**Steps:** `ollama pull nomic-embed-text:v1.5 && ollama pull qwen3.6:latest` → `mono-agent init --model claude:claude-sonnet-4-6 --memory bujo` → add telegram + fill embeddings/llm + `writeMode: capture` → `mono-agent validate` (confirm memory liveness + consolidation cadence) → `mono-agent start`.
|
|
32
|
-
**Smoke:** send a fact from the allowed chat, then ask a paraphrased question later; confirm `
|
|
32
|
+
**Smoke:** send a fact from the allowed chat, then ask a paraphrased question later; confirm `MemoryRecall` in the run JSONL and that the answer uses it.
|
|
33
33
|
|
|
34
34
|
## 2. Slack team bot with MCP tools
|
|
35
35
|
**For:** a DevOps engineer running a shared team bot.
|
|
36
|
-
**Goal:** a mention-triggered Slack Socket Mode bot with a custom MCP tool, Read/Grep, and `
|
|
36
|
+
**Goal:** a mention-triggered Slack Socket Mode bot with a custom MCP tool, Read/Grep, and `SlackSendMessage` for proactive posts.
|
|
37
37
|
**Features:** `slack.socket-mode`, `tool-policy.allowlist`, `tool-policy.mcp-servers`, `agent-app.adapter-send-tools`, `runtime.concurrency`.
|
|
38
38
|
|
|
39
39
|
```json
|
|
40
40
|
{
|
|
41
41
|
"runtime": { "model": "claude:claude-sonnet-4-6" },
|
|
42
42
|
"slack": { "enabled": true, "botToken": "xoxb-...", "appToken": "xapp-...", "allowedChannelIds": ["C012345"], "botUserIds": ["U012345"], "mentionTextAliases": ["@agent"] },
|
|
43
|
-
"tools": { "allowedTools": ["Read", "Grep", "
|
|
43
|
+
"tools": { "allowedTools": ["Read", "Grep", "SlackSendMessage", "deployTool"], "mcpConfigPath": "./mcp.json" },
|
|
44
44
|
"concurrency": { "maxConcurrentRuns": 4, "maxPendingRuns": 8 }
|
|
45
45
|
}
|
|
46
46
|
```
|
|
47
|
-
**Steps:** create a Slack app (Socket Mode app token + bot token) → `mono-agent init` → write `mcp.json`
|
|
48
|
-
**Smoke:** mention the bot in an allowed channel; confirm the 👀 reaction, final answer, the MCP tool firing in the artifact, and that `
|
|
47
|
+
**Steps:** create a Slack app (Socket Mode app token + bot token) → `mono-agent init` (allow-all by default) → write `mcp.json` (the MCP tool becomes available from the server declaration — MCP tools aren't gated by `allowedTools`) → add slack; `SlackSendMessage` is auto-available under allow-all, or name it if you narrow to a specific allowlist → `validate` → `start`.
|
|
48
|
+
**Smoke:** mention the bot in an allowed channel; confirm the 👀 reaction, final answer, the MCP tool firing in the artifact, and that `SlackSendMessage` posts only to allowed channels.
|
|
49
49
|
|
|
50
50
|
## 3. Fully local Ollama agent (no cloud)
|
|
51
51
|
**For:** a privacy-focused user with no cloud budget.
|
|
@@ -107,12 +107,12 @@ Flow, check whether one of these fits and adapt it. Verify every key against
|
|
|
107
107
|
{
|
|
108
108
|
"runtime": { "model": "claude:claude-sonnet-4-6" },
|
|
109
109
|
"slack": { "enabled": true, "botToken": "xoxb-...", "appToken": "xapp-...", "allowedChannelIds": ["C012345"] },
|
|
110
|
-
"tools": { "allowedTools": ["
|
|
111
|
-
"cron": { "jobs": [{ "id": "morning-digest", "enabled": true, "expression": "0 9 * * *", "timezone": "America/New_York", "prompt": "Build the morning digest and post it to #team via
|
|
110
|
+
"tools": { "allowedTools": ["SlackSendMessage", "WebSearch"] },
|
|
111
|
+
"cron": { "jobs": [{ "id": "morning-digest", "enabled": true, "expression": "0 9 * * *", "timezone": "America/New_York", "prompt": "Build the morning digest and post it to #team via SlackSendMessage.", "conversationId": "daily-digest" }] }
|
|
112
112
|
}
|
|
113
113
|
```
|
|
114
|
-
**Steps:** `mono-agent init` → add slack + `
|
|
115
|
-
**Smoke:** trigger a one-off tick; confirm `
|
|
114
|
+
**Steps:** `mono-agent init` → add slack + `SlackSendMessage` → add the cron job (or `cron/morning-digest.md`) with `conversationId` + IANA timezone → `validate` → `start`.
|
|
115
|
+
**Smoke:** trigger a one-off tick; confirm `SlackSendMessage` posts the digest to the allowed channel and `conversationId` shares context across ticks.
|
|
116
116
|
|
|
117
117
|
## 7. A2A provider + consumer pair
|
|
118
118
|
**For:** a platform integrator connecting two agents over A2A.
|
|
@@ -139,9 +139,9 @@ Flow, check whether one of these fits and adapt it. Verify every key against
|
|
|
139
139
|
**Steps:** provider — `init`, add the `@mono-agent/a2a-adapter` plugin entry with `provider`/`agent`/`skill` + bearer, `validate`, `start`, confirm the Agent Card is reachable. Consumer — set plugin `config.consumer` (or compose `createA2AConsumerResponder`), send text to the provider's Agent Card URL with the bearer.
|
|
140
140
|
**Smoke:** send a message to the provider's Agent Card URL with the bearer; confirm a real response.
|
|
141
141
|
|
|
142
|
-
## 8. Multi-agent orchestration (`
|
|
142
|
+
## 8. Multi-agent orchestration (`AskCollaborator`) — code
|
|
143
143
|
**For:** a workflow designer composing specialist agents.
|
|
144
|
-
**Goal:** one orchestrator delegates to named collaborator responders via the loopback `
|
|
144
|
+
**Goal:** one orchestrator delegates to named collaborator responders via the loopback `AskCollaborator` MCP tool.
|
|
145
145
|
**Features:** `orchestrator.ask-collaborator`, `harness.request-runtime-options`, `runtime.custom`.
|
|
146
146
|
|
|
147
147
|
```ts
|
|
@@ -155,21 +155,21 @@ const ext = createCollaboratorToolRuntimeExtension({
|
|
|
155
155
|
// pass ext.runtimeOptions via createConfiguredAgentResponder({ runtimeOptionsForRequest })
|
|
156
156
|
// call ext.cleanup() on disposal to close the ephemeral MCP server
|
|
157
157
|
```
|
|
158
|
-
**Smoke:** give a compound task ("research X then write a summary"); confirm the artifact shows `
|
|
158
|
+
**Smoke:** give a compound task ("research X then write a summary"); confirm the artifact shows `AskCollaborator` delegating to both, and `cleanup()` closes the MCP port.
|
|
159
159
|
|
|
160
160
|
## 9. Sandboxed code agent (loopback only, deny .env)
|
|
161
161
|
**For:** a security team deploying an internal code assistant.
|
|
162
162
|
**Goal:** read repos + run Bash inside the native srt sandbox with loopback-only network access and protected secrets.
|
|
163
|
-
**Features:** `sandbox.mode`, `sandbox.network-policy`, `sandbox.filesystem-scopes`, `sandbox.fallback`, `tool-policy.
|
|
163
|
+
**Features:** `sandbox.mode`, `sandbox.network-policy`, `sandbox.filesystem-scopes`, `sandbox.fallback`, `tool-policy.allow-all`, `memory.journal`.
|
|
164
164
|
|
|
165
165
|
```json
|
|
166
166
|
{
|
|
167
167
|
"runtime": { "model": "claude:claude-sonnet-4-6" },
|
|
168
|
-
"tools": { "allowedTools": ["
|
|
168
|
+
"tools": { "allowedTools": ["*"] },
|
|
169
169
|
"sandbox": { "mode": "native", "network": { "mode": "localhost" }, "readableRoots": ["."], "writableRoots": ["."], "denyWrite": [".env", ".env.*", ".git/config", ".git/hooks/**"], "fallback": "fail-closed" }
|
|
170
170
|
}
|
|
171
171
|
```
|
|
172
|
-
**Steps:** `mono-agent init --memory journal` → allow
|
|
172
|
+
**Steps:** `mono-agent init --memory journal` → leave tools at the allow-all default (`["*"]`); the **sandbox**, not an allowlist, is what constrains the code tools → `sandbox.mode native` + `network localhost` + deny-write defaults → keep `fallback: fail-closed` (do NOT set `unsafe-host-process`) → `validate` → `start`.
|
|
173
173
|
**Smoke:** ask it to read a file + run Bash (works), then fetch an external URL or write `.env` (both blocked in the artifact). Note: provider CLI bridges run their own tool loops and may not be srt-wrapped — pair with provider sandboxing.
|
|
174
174
|
|
|
175
175
|
## 10. Phoenix-observed agent with the TUI
|
|
@@ -216,7 +216,7 @@ const ext = createCollaboratorToolRuntimeExtension({
|
|
|
216
216
|
|
|
217
217
|
## 13. Personal Telegram assistant with Supermemory
|
|
218
218
|
**For:** a power user trying an external memory layer while keeping the agent local.
|
|
219
|
-
**Goal:** a Telegram bot captures turns into a local or hosted Supermemory instance and recalls through the same `
|
|
219
|
+
**Goal:** a Telegram bot captures turns into a local or hosted Supermemory instance and recalls through the same `MemoryRecall` tool.
|
|
220
220
|
**Features:** `telegram.long-polling`, `memory.backend-supermemory`, `memory.per-turn-capture`, `memory.recall-tool`.
|
|
221
221
|
|
|
222
222
|
```json
|
|
@@ -231,8 +231,8 @@ const ext = createCollaboratorToolRuntimeExtension({
|
|
|
231
231
|
}
|
|
232
232
|
}
|
|
233
233
|
```
|
|
234
|
-
**Steps:** run `supermemory-server`, save its `sm_...` key in `.env`, `mono-agent init --
|
|
235
|
-
**Smoke:** send a fact, wait for ingestion, then ask a paraphrased question; confirm the run shows `
|
|
234
|
+
**Steps:** run `supermemory-server`, save its `sm_...` key in `.env`, `mono-agent init --preset telegram-supermemory --yes`, add Telegram token/chat id, `validate`, `start`.
|
|
235
|
+
**Smoke:** send a fact, wait for ingestion, then ask a paraphrased question; confirm the run shows `MemoryRecall` returning Supermemory hits.
|
|
236
236
|
|
|
237
237
|
## 14. Fully local LM Studio agent
|
|
238
238
|
**For:** a privacy-focused user who prefers LM Studio's GUI local server.
|
|
@@ -247,21 +247,21 @@ const ext = createCollaboratorToolRuntimeExtension({
|
|
|
247
247
|
"webhook": { "enabled": true }
|
|
248
248
|
}
|
|
249
249
|
```
|
|
250
|
-
**Steps:** start LM Studio's local server with the chosen model loaded → `mono-agent init --
|
|
250
|
+
**Steps:** start LM Studio's local server with the chosen model loaded → `mono-agent init --model pi:lmstudio:qwen3.6-32b --memory lite` (the `pi:lmstudio:*` model auto-adds the LM Studio provider block; there is no LM Studio preset — `local-private` is Ollama-based) → adjust `runtime.model` if the displayed model id differs → `validate` → `start`.
|
|
251
251
|
**Smoke:** `curl` the webhook invoke URL and confirm the response comes from the local LM Studio model.
|
|
252
252
|
|
|
253
253
|
## 15. Interactive agent with long jobs and large media
|
|
254
254
|
**For:** a builder whose Telegram agent needs to ask before acting, run multi-minute tools, and exchange large files.
|
|
255
|
-
**Goal:** one Telegram agent uses `
|
|
255
|
+
**Goal:** one Telegram agent uses `AskUser`, long-running MCP tool progress, a self-hosted Bot API server, and `TelegramSendFile`.
|
|
256
256
|
**Features:** `telegram.long-polling`, `agent-app.adapter-send-tools`, `interaction.ask-user`, `interaction.progress`, `tool-policy.mcp-servers`.
|
|
257
257
|
|
|
258
258
|
```json
|
|
259
259
|
{
|
|
260
260
|
"runtime": { "model": "pi:openai-codex:gpt-5.5", "executionMode": "sdk" },
|
|
261
|
-
"tools": { "allowedTools": ["Read", "
|
|
261
|
+
"tools": { "allowedTools": ["Read", "AskUser", "TelegramSendFile"], "mcpConfigPath": "./.mcp.json", "mcpCallMaxTotalTimeoutMs": 2700000 },
|
|
262
262
|
"interaction": { "bridge": { "host": "127.0.0.1", "port": 4471 }, "askUser": { "timeoutMs": 600000 }, "progress": { "enabled": true } },
|
|
263
263
|
"telegram": { "enabled": true, "allowedChatIds": ["123456789"], "apiRoot": "http://127.0.0.1:8081", "attachments": { "maxBytes": 268435456, "maxUploadBytes": 268435456 } }
|
|
264
264
|
}
|
|
265
265
|
```
|
|
266
266
|
**Steps:** run a loopback self-hosted Bot API server if files exceed 20 MB, wire a long-running MCP tool in `.mcp.json`, `validate`, `start`.
|
|
267
|
-
**Smoke:** send media with no caption, answer the `
|
|
267
|
+
**Smoke:** send media with no caption, answer the `AskUser` question, watch progress update during the long job, and receive the generated file via `TelegramSendFile`.
|
|
@@ -83,15 +83,15 @@ pnpm run test:demo
|
|
|
83
83
|
| TUI | Start the host and complete one local prompt. |
|
|
84
84
|
| Telegram | Send one allowed chat message and verify the reply. |
|
|
85
85
|
| Slack | Send one allowed DM or channel message and verify formatting. |
|
|
86
|
-
| Adapter send tools | When `
|
|
86
|
+
| Adapter send tools | When `SlackSendMessage` / `TelegramSendMessage` are available (allow-all, or an explicit `tools.allowedTools` entry) with the channel enabled, call them from a non-Slack/Telegram surface such as TUI, cron, or OpenAI API to an allowed destination and verify delivery. |
|
|
87
87
|
| WhatsApp | Send one allowed sender/group trigger and verify the reply. |
|
|
88
88
|
| OpenAI API | `curl /v1/models` and `/v1/chat/completions`. |
|
|
89
89
|
| A2A | Send text to the Agent Card URL with `sendA2AMessage()`. |
|
|
90
90
|
| Webhook | `curl` the invocation path and inspect the response body/status. |
|
|
91
91
|
| Cron | Run a one-off scheduled invocation or wait for one tick. |
|
|
92
92
|
| Observability | Confirm a run writes a redacted JSONL artifact; if an `observability.exporters` Phoenix entry is set, confirm the trace appears in Phoenix. |
|
|
93
|
-
| Memory recall tool | With `memory.recallTool.enabled` (default on for journal/bujo with embeddings), ask the agent to recall an old note and confirm `
|
|
94
|
-
| Semantic memory search | With `memory.embeddings` set (Ollama: `ollama pull nomic-embed-text:v1.5` first), ask a paraphrased question about an old note and confirm `
|
|
93
|
+
| Memory recall tool | With `memory.recallTool.enabled` (default on for journal/bujo with embeddings), ask the agent to recall an old note and confirm `MemoryRecall` appears in the run artifact and returns it. |
|
|
94
|
+
| Semantic memory search | With `memory.embeddings` set (Ollama: `ollama pull nomic-embed-text:v1.5` first), ask a paraphrased question about an old note and confirm `MemoryRecall` (hybrid keyword + semantic) returns it. |
|
|
95
95
|
|
|
96
96
|
## Failure Handling
|
|
97
97
|
|
package/dist/recipes/base.d.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import type { MonoAgentConfigJson } from "@mono-agent/config";
|
|
2
|
-
import type { RecipeInput, RecipeInputValues } from "./types.js";
|
|
3
|
-
export declare const DEFAULT_MODEL = "claude:claude-sonnet-4-6";
|
|
4
|
-
/** The model input every recipe shares; overridable from `--model`. */
|
|
5
|
-
export declare const MODEL_INPUT: RecipeInput;
|
|
6
|
-
/**
|
|
7
|
-
* The adapter-neutral skeleton every recipe extends: runtime model, identity,
|
|
8
|
-
* empty tool policy, local artifacts, and the trace registry. Recipes spread
|
|
9
|
-
* this and add their channel / memory / sandbox / observability blocks. Mirrors
|
|
10
|
-
* `init.ts`'s scaffold so a recipe-built folder matches a hand-init'd one.
|
|
11
|
-
*/
|
|
12
|
-
export declare function baseConfig(input: RecipeInputValues): MonoAgentConfigJson;
|
|
13
|
-
/** A `memory` block for the given tier, rooted at the standard memory path. */
|
|
14
|
-
export declare function memoryBlock(mode: "lite" | "journal" | "bujo"): NonNullable<MonoAgentConfigJson["memory"]>;
|
|
15
|
-
//# sourceMappingURL=base.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/recipes/base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAG9D,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEjE,eAAO,MAAM,aAAa,6BAA6B,CAAC;AAExD,uEAAuE;AACvE,eAAO,MAAM,WAAW,EAAE,WAKzB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,iBAAiB,GAAG,mBAAmB,CA0BxE;AAED,+EAA+E;AAC/E,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAChC,WAAW,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAM5C"}
|
package/dist/recipes/base.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/recipes/base.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAGnE,MAAM,CAAC,MAAM,aAAa,GAAG,0BAA0B,CAAC;AAExD,uEAAuE;AACvE,MAAM,CAAC,MAAM,WAAW,GAAgB;IACtC,EAAE,EAAE,OAAO;IACX,KAAK,EAAE,OAAO;IACd,WAAW,EAAE,sGAAsG;IACnH,OAAO,EAAE,aAAa;CACvB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,KAAwB;IACjD,OAAO,yBAAyB,CAAC;QAC/B,OAAO,EAAE;YACP,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,aAAa;YACnC,SAAS,EAAE,GAAG;SACf;QACD,OAAO,EAAE;YACP,YAAY,EAAE,eAAe;YAC7B,cAAc,EAAE,EAAE;SACnB;QACD,KAAK,EAAE;YACL,YAAY,EAAE,EAAE;YAChB,eAAe,EAAE,EAAE;SACpB;QACD,SAAS,EAAE;YACT,GAAG,EAAE,yBAAyB;YAC9B,SAAS,EAAE;gBACT,UAAU,EAAE,GAAG;gBACf,QAAQ,EAAE,KAAK;gBACf,MAAM,EAAE,KAAK;aACd;SACF;QACD,YAAY,EAAE;YACZ,WAAW,EAAE,6BAA6B;SAC3C;KACqB,CAAC,CAAC;AAC5B,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,WAAW,CACzB,IAAiC;IAEjC,OAAO;QACL,IAAI;QACJ,IAAI,EAAE,sBAAsB;QAC5B,SAAS,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,qBAAqB;KAC/D,CAAC;AACJ,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/recipes/catalog.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAqB,MAAM,YAAY,CAAC;AAqhBjE,6EAA6E;AAC7E,eAAO,MAAM,cAAc,EAAE,SAAS,WAAW,EAchD,CAAC"}
|