agenr 1.4.0 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +52 -2
- package/README.md +36 -28
- package/dist/{chunk-DSP74MEN.js → chunk-6SJBRIGC.js} +239 -139
- package/dist/cli.js +4684 -3234
- package/dist/core/recall/index.d.ts +5 -0
- package/dist/internal-recall-eval-server.js +17 -6
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,55 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [1.6.0] - 2026-04-02
|
|
4
|
+
|
|
5
|
+
Store nudge, memory guidance improvements, plugin rename, and dead code cleanup.
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- **Store nudge system.** Mid-session memory prompting via `[MEMORY CHECK]` injection. When the agent goes N turns without storing to agenr, a nudge is injected via `prependContext` reminding it to review recent conversation for durable knowledge. Escalating message tone across nudge ordinals. Three-level store outcome classification (stored/skipped/failed) with separate tracking for explicit memory maintenance actions (`claimKey`, `supersedes`, `agenr_update`, `agenr_retire`). Configurable via `storeNudge.enabled`, `storeNudge.threshold` (default 8), and `storeNudge.maxPerSession` (default 5).
|
|
10
|
+
- **`after_tool_call` hook.** New hook handler for real-time memory action detection. Synchronous state mutation (no async before write) to avoid races with OpenClaw's fire-and-forget dispatch. Classifies `agenr_store`, `agenr_update`, and `agenr_retire` tool calls.
|
|
11
|
+
- **`MidSessionTracker`.** Separate per-session runtime state tracker for nudge logic, distinct from `SessionStartTracker`. Tracks turn counts, store counts, nudge counts, stored subjects (bounded to last 5), and three-level memory action timestamps. Includes session cleanup via TTL pruning.
|
|
12
|
+
- **Session identity helper.** Shared `resolveSessionIdentityKey()` used by both trackers for consistent session key resolution.
|
|
13
|
+
- **ESLint safety rules.** New eslint config with safety rules for the codebase.
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
|
|
17
|
+
- **Improved memory guidance.** Tightened prompt section and store tool descriptions informed by Claude Code memory research. Includes success recording ("store validated wins, not just corrections"), compact exclusion filters, session-vs-durable distinction, and Rule → Why → How to apply structure hints for lessons and preferences.
|
|
18
|
+
- **Plugin package renamed.** `@agenr/openclaw-plugin` → `@agenr/agenr-plugin` across all source, docs, tests, and config. Fixes the `deriveIdHint` compatibility warning — `agenr-plugin` matches the `{manifestId}-plugin` pattern.
|
|
19
|
+
- **Non-first-turn `before_prompt_build` path.** Previously returned `undefined` immediately. Now handles mid-session nudge injection with skip guards for non-user triggers (heartbeat, cron, memory).
|
|
20
|
+
|
|
21
|
+
### Removed
|
|
22
|
+
|
|
23
|
+
- **Dead internal session filtering.** Removed `isInternalAgenrSession` guard and `INTERNAL_AGENR_SESSION_PREFIX` constant from `before-prompt-build.ts`. The `temp:agenr-*` session prefix is no longer used in v1 — internal worker sessions use different mechanisms.
|
|
24
|
+
|
|
25
|
+
## [1.5.0] - 2026-04-01
|
|
26
|
+
|
|
27
|
+
Temporal validity, claim extraction, surgeon supersession pass, and OpenClaw auth improvements.
|
|
28
|
+
|
|
29
|
+
### Added
|
|
30
|
+
|
|
31
|
+
- **Temporal validity schema.** New `valid_from`, `valid_to`, `claim_key`, `supersession_kind`, and `supersession_reason` columns on entries. Entries can now express when a fact is true in the world, how facts replace each other, and why. All columns are nullable and backward-compatible.
|
|
32
|
+
- **Claim key extraction.** Automatic `claim_key` assignment at store time via LLM classification. Identifies the `entity/attribute` slot an entry occupies (e.g., `jim/home_city`, `agenr/default_model`). Runs as a best-effort pipeline stage — entries store normally if extraction fails or is disabled. Supports entity hint seeding from existing claim keys to prevent namespace drift. Configurable confidence threshold (default 0.8), eligible types (fact, preference, decision), and model override.
|
|
33
|
+
- **Claim extraction in bulk ingest.** `agenr ingest` now runs batch claim extraction with configurable concurrency. Entries that already have a `claim_key` are skipped.
|
|
34
|
+
- **Claim extraction model in CLI setup.** `agenr setup` and `agenr init` now include a "Claim extraction" stage in the model customization flow, alongside extraction, dedup, episode, and surgeon.
|
|
35
|
+
- **Explicit supersession in store pipeline.** `agenr_store` accepts optional `supersedes`, `claim_key`, `valid_from`, and `valid_to` fields. When `supersedes` is provided, the old entry is atomically linked to the new one in a transaction.
|
|
36
|
+
- **Surgeon supersession pass.** New `agenr surgeon run --pass supersession` finds entries that should be linked via `superseded_by` and creates those links with kind and reason. Candidate generation groups by shared claim key (highest confidence) or shared subject+type (medium confidence). Four new tools: `query_supersession_candidates`, `link_supersession`, `assign_claim_key`, `set_validity`. Hard rules enforced in code: no cross-type links, no milestone supersession, no core-expiry supersession.
|
|
37
|
+
- **`claimExtractionModel` in OpenClaw plugin config.** Model override for claim extraction at store time, using OpenClaw's auth system.
|
|
38
|
+
- **Lightweight OpenClaw LLM client.** New `createOpenClawLlmClient` factory resolves credentials from OpenClaw's `modelAuth.resolveApiKeyForProvider` and calls pi-ai's `completeSimple()` directly — no embedded agent runner overhead.
|
|
39
|
+
|
|
40
|
+
### Changed
|
|
41
|
+
|
|
42
|
+
- **OpenClaw continuity and episode summaries use lightweight LLM client.** Migrated from the heavy embedded agent runner (`runEmbeddedPiAgent` with temp directories and full agent lifecycle) to the new `createOpenClawLlmClient` for direct `completeSimple()` calls. Same auth, dramatically less overhead.
|
|
43
|
+
- **OpenClaw claim extraction uses OpenClaw auth.** Store-time claim extraction now resolves credentials through OpenClaw's `modelAuth` system instead of agenr's CLI credentials. Fixes silent failures when agenr API keys aren't configured in OpenClaw-hosted contexts.
|
|
44
|
+
- **Surgeon is now pass-aware.** The agent loop, prompt selection, tool selection, and completion guards are all driven by the pass type. Shared infrastructure (budget, audit, trace) remains pass-agnostic.
|
|
45
|
+
- **Multi-surface session continuity.** Improved continuity resolution across different chat surfaces and session types.
|
|
46
|
+
- **Architecture cleanup.** Internal refactoring across multiple phases for cleaner module boundaries.
|
|
47
|
+
|
|
48
|
+
### Documentation
|
|
49
|
+
|
|
50
|
+
- **Model config auth boundary.** New architecture doc and updated code comments clarifying the split between CLI-context models (agenr auth) and OpenClaw-context models (OpenClaw auth).
|
|
51
|
+
- **Updated README.md and SURGEON.md** with supersession pass documentation.
|
|
52
|
+
|
|
3
53
|
## [1.4.0] - 2026-03-30
|
|
4
54
|
|
|
5
55
|
Configurable summary models, surgeon personal knowledge protection, and documentation overhaul.
|
|
@@ -87,7 +137,7 @@ This release splits the OpenClaw plugin into its own publishable npm package and
|
|
|
87
137
|
|
|
88
138
|
### Added
|
|
89
139
|
|
|
90
|
-
- **Standalone OpenClaw plugin package.** Publishes the OpenClaw integration separately as `@agenr/
|
|
140
|
+
- **Standalone OpenClaw plugin package.** Publishes the OpenClaw integration separately as `@agenr/agenr-plugin` while keeping the runtime plugin id as `agenr`.
|
|
91
141
|
- **Workspace-based build layout.** Adds `pnpm-workspace.yaml` and package-specific build wiring for the dedicated plugin package.
|
|
92
142
|
- **Plugin packaging coverage.** Expands tests to verify the standalone plugin package metadata, manifest/version alignment, and that the plugin entry graph stays free of CLI-only code.
|
|
93
143
|
- **Plugin-specific docs.** Adds package-level README content and OpenClaw docs covering the new install and local development paths.
|
|
@@ -95,7 +145,7 @@ This release splits the OpenClaw plugin into its own publishable npm package and
|
|
|
95
145
|
### Changed
|
|
96
146
|
|
|
97
147
|
- **CLI package is no longer the plugin package.** The root `agenr` package now builds the CLI plus the plugin package, but no longer exposes OpenClaw plugin metadata itself.
|
|
98
|
-
- **OpenClaw install instructions updated.** Installation now uses `openclaw plugins install @agenr/
|
|
148
|
+
- **OpenClaw install instructions updated.** Installation now uses `openclaw plugins install @agenr/agenr-plugin`, with migration guidance for existing users and unchanged plugin id/config keys.
|
|
99
149
|
- **Init flow updated for split packaging.** OpenClaw setup and installation flows now point at the standalone plugin package instead of the root package.
|
|
100
150
|
|
|
101
151
|
### Fixed
|
package/README.md
CHANGED
|
@@ -16,9 +16,9 @@ Local-first, durable memory infrastructure for AI agents.
|
|
|
16
16
|
|
|
17
17
|
agenr gives agents a persistent brain: a local SQLite database of durable knowledge that survives across sessions, tools, and agent restarts. Instead of relying on fragile prompt state or file-based scratch memory, agents can ingest transcripts, extract decisions and lessons, store them as typed entries, generate episodic summaries of what happened, and recall them later with semantic search and memory-aware ranking.
|
|
18
18
|
|
|
19
|
-
It exists because most agent runtimes forget everything important between sessions. Even when a tool has a built-in memory feature, it is often lossy, file-based, or tightly coupled to one surface. agenr keeps memory structured and queryable: facts, decisions, preferences, lessons,
|
|
19
|
+
It exists because most agent runtimes forget everything important between sessions. Even when a tool has a built-in memory feature, it is often lossy, file-based, or tightly coupled to one surface. agenr keeps memory structured and queryable: facts, decisions, preferences, lessons, milestones, relationships, and session-level episodes live in one local store instead of getting flattened into prompt text.
|
|
20
20
|
|
|
21
|
-
What makes agenr different is the combination of local-first storage, semantic embeddings, hybrid recall, episodic temporal memory, and adapter-friendly architecture. The core is hexagonal, so multiple agent systems can share the same brain over time. Today the production adapter is the OpenClaw memory plugin, published separately as `@agenr/
|
|
21
|
+
What makes agenr different is the combination of local-first storage, semantic embeddings, hybrid recall, episodic temporal memory, and adapter-friendly architecture. The core is hexagonal, so multiple agent systems can share the same brain over time. Today the production adapter is the OpenClaw memory plugin, published separately as `@agenr/agenr-plugin`, and the CLI provides offline ingest, recall, and maintenance against that same database.
|
|
22
22
|
|
|
23
23
|
## Features
|
|
24
24
|
|
|
@@ -27,7 +27,7 @@ What makes agenr different is the combination of local-first storage, semantic e
|
|
|
27
27
|
- LLM-powered knowledge extraction from conversation transcripts.
|
|
28
28
|
- Semantic deduplication using exact hashes, normalized hashes, embeddings, and within-run clustering.
|
|
29
29
|
- Session continuity with predecessor resolution, recent transcript tails, and LLM-generated continuity summaries.
|
|
30
|
-
- Surgeon
|
|
30
|
+
- Surgeon maintenance passes for corpus health: run retirement cleanup for stale entries or supersession review for same-slot lineage, both with audit history.
|
|
31
31
|
- Agent tools for `store`, `recall`, `retire`, `update`, and `trace` through the OpenClaw plugin.
|
|
32
32
|
- Native OpenClaw memory plugin that replaces OpenClaw's built-in memory slot.
|
|
33
33
|
- Local-first storage with SQLite/libSQL. Memory stays on your machine; only model and embedding calls leave it.
|
|
@@ -57,7 +57,7 @@ Run `agenr init` again any time you want to re-run onboarding, reinstall the plu
|
|
|
57
57
|
If you already have agenr configured, or you want to install the plugin separately:
|
|
58
58
|
|
|
59
59
|
```bash
|
|
60
|
-
openclaw plugins install @agenr/
|
|
60
|
+
openclaw plugins install @agenr/agenr-plugin
|
|
61
61
|
openclaw gateway restart
|
|
62
62
|
```
|
|
63
63
|
|
|
@@ -66,7 +66,7 @@ The OpenClaw plugin id remains `agenr`, so `plugins.entries.agenr`, `plugins.slo
|
|
|
66
66
|
After the plugin is installed, `openclaw plugins update agenr` continues to target that same plugin id.
|
|
67
67
|
If `plugins.entries.agenr.config` is omitted, the plugin falls back to agenr's normal config resolution: `AGENR_CONFIG_PATH`, then `~/.agenr/config.json`, and the `dbPath` from that config or `~/.agenr/knowledge.db`.
|
|
68
68
|
|
|
69
|
-
If you want to pin an exact plugin release, install a versioned package spec such as `openclaw plugins install @agenr/
|
|
69
|
+
If you want to pin an exact plugin release, install a versioned package spec such as `openclaw plugins install @agenr/agenr-plugin@1.0.1`.
|
|
70
70
|
|
|
71
71
|
For local development or a custom build path, run `pnpm build` first and point OpenClaw at the plugin package root:
|
|
72
72
|
|
|
@@ -92,7 +92,7 @@ If `config.json` is not next to `dbPath`, add `"configPath": "/path/to/config.js
|
|
|
92
92
|
|
|
93
93
|
Migration note:
|
|
94
94
|
|
|
95
|
-
- Existing users who originally installed the plugin from the `agenr` package should reinstall once with `openclaw plugins install @agenr/
|
|
95
|
+
- Existing users who originally installed the plugin from the `agenr` package should reinstall once with `openclaw plugins install @agenr/agenr-plugin` so OpenClaw records the new npm package source.
|
|
96
96
|
- After that reinstall, `openclaw plugins update agenr` should continue to work because updates key off the plugin id `agenr`.
|
|
97
97
|
|
|
98
98
|
## Configuration
|
|
@@ -111,16 +111,21 @@ Key config fields:
|
|
|
111
111
|
|
|
112
112
|
| Field | What it does |
|
|
113
113
|
| -------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
114
|
-
| `auth` | Authentication method: `openai-api-key`, `openai-subscription`, `anthropic-api-key`, `anthropic-oauth`, or `anthropic-token`.
|
|
114
|
+
| `auth` | Authentication method: `openai-api-key`, `openai-subscription`, `anthropic-api-key`, `anthropic-oauth`, or `anthropic-token`. |
|
|
115
115
|
| `provider` / `model` | Default LLM provider and model used for extraction tasks unless overridden. |
|
|
116
116
|
| `credentials` | Stored manual credentials. Today that can include `openaiApiKey`, `anthropicApiKey`, and `anthropicOauthToken`. The config file is written with locked-down permissions (`0600`). |
|
|
117
|
-
| `credentials.openaiApiKey` | OpenAI key used for embeddings, and also for extraction when `auth` is `openai-api-key`.
|
|
117
|
+
| `credentials.openaiApiKey` | OpenAI key used for embeddings, and also for extraction when `auth` is `openai-api-key`. Agenr no longer reads legacy `embeddingApiKey` or `apiKey` fields. |
|
|
118
118
|
| `embeddingModel` | Embedding model. Defaults to `text-embedding-3-small`. |
|
|
119
119
|
| `extractionModel` / `dedupModel` | Optional per-pipeline overrides so extraction and dedup can use different provider/model pairs. |
|
|
120
120
|
| `extractionContext` | Optional user context injected into extraction prompts to help the model decide what is worth remembering. |
|
|
121
121
|
| `dbPath` | Knowledge database location. Defaults to `~/.agenr/knowledge.db` unless overridden. |
|
|
122
122
|
|
|
123
|
-
Important: when agenr is running as an OpenClaw plugin, session summaries use OpenClaw's configured LLM
|
|
123
|
+
Important: when agenr is running as an OpenClaw plugin, session summaries and store-time claim extraction use OpenClaw's configured LLM auth, not agenr's. Agenr's config is still required for embeddings and for CLI-based ingestion/recall.
|
|
124
|
+
|
|
125
|
+
Compatibility policy:
|
|
126
|
+
|
|
127
|
+
- Agenr only supports the current `config.json` shape. Move any legacy `apiKey` value into `credentials.openaiApiKey` or `credentials.anthropicApiKey`, move any `embeddingApiKey` value into `credentials.openaiApiKey`, then remove the legacy fields.
|
|
128
|
+
- Agenr only supports fresh databases and databases already at the current schema version. Older schema versions are no longer auto-migrated at startup.
|
|
124
129
|
|
|
125
130
|
## What You Need
|
|
126
131
|
|
|
@@ -132,19 +137,19 @@ Important: when agenr is running as an OpenClaw plugin, session summaries use Op
|
|
|
132
137
|
|
|
133
138
|
The CLI surface is still intentionally compact, but it now covers setup, recall, ingest, and corpus maintenance.
|
|
134
139
|
|
|
135
|
-
| Command
|
|
136
|
-
|
|
|
137
|
-
| `agenr init`
|
|
138
|
-
| `agenr setup`
|
|
139
|
-
| `agenr recall <query>`
|
|
140
|
-
| `agenr ingest <path>`
|
|
141
|
-
| `agenr ingest entries <path>`
|
|
142
|
-
| `agenr ingest episodes
|
|
143
|
-
| `agenr surgeon run`
|
|
144
|
-
| `agenr surgeon status`
|
|
145
|
-
| `agenr surgeon history`
|
|
146
|
-
| `agenr surgeon actions <
|
|
147
|
-
| `agenr db reset`
|
|
140
|
+
| Command | What it does |
|
|
141
|
+
| ------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
142
|
+
| `agenr init` | Interactive first-run wizard: auth, model selection, OpenClaw detection, plugin install, and optional initial ingestion. |
|
|
143
|
+
| `agenr setup` | Configure auth, model defaults, embeddings, and the agenr database path. |
|
|
144
|
+
| `agenr recall <query>` | Run the hybrid recall pipeline with optional temporal and type/tag filters. |
|
|
145
|
+
| `agenr ingest <path>` | Default durable-entry ingest shorthand. Equivalent to `agenr ingest entries <path>`. |
|
|
146
|
+
| `agenr ingest entries <path>` | Bulk-ingest one file or directory of OpenClaw transcript files into durable knowledge entries. |
|
|
147
|
+
| `agenr ingest episodes [path]` | Backfill episodic summaries from OpenClaw session transcripts, including rotated `.reset.*` and `.deleted.*` files. |
|
|
148
|
+
| `agenr surgeon run` | Execute a surgeon maintenance pass. Defaults to retirement; use `--pass supersession` for lineage review. Dry-run by default; add `--apply` to mutate the corpus. |
|
|
149
|
+
| `agenr surgeon status` | Show corpus health plus the latest surgeon run summary. |
|
|
150
|
+
| `agenr surgeon history` | Show recent surgeon runs. |
|
|
151
|
+
| `agenr surgeon actions <runId>` | Show the audit trail for one surgeon run. |
|
|
152
|
+
| `agenr db reset` | Delete and recreate the knowledge database. |
|
|
148
153
|
|
|
149
154
|
The OpenClaw plugin also gives the agent five tools directly inside the runtime: `agenr_store`, `agenr_recall`, `agenr_retire`, `agenr_update`, and `agenr_trace`.
|
|
150
155
|
|
|
@@ -163,6 +168,9 @@ agenr ingest episodes ~/.openclaw/agents/main/sessions/ --recent 30d
|
|
|
163
168
|
# Run the surgeon retirement pass (dry-run by default)
|
|
164
169
|
agenr surgeon run --budget 2.00
|
|
165
170
|
|
|
171
|
+
# Run the surgeon supersession pass
|
|
172
|
+
agenr surgeon run --pass supersession --budget 2.00
|
|
173
|
+
|
|
166
174
|
# Reset the database
|
|
167
175
|
agenr db reset
|
|
168
176
|
```
|
|
@@ -184,7 +192,7 @@ Recall is a hybrid pipeline. Agenr embeds the query, retrieves candidates throug
|
|
|
184
192
|
Agenr has two ingest pipelines over the same transcript corpus:
|
|
185
193
|
|
|
186
194
|
- `agenr ingest entries <path>` extracts durable typed knowledge such as facts, decisions, preferences, lessons, milestones, and relationships.
|
|
187
|
-
- `agenr ingest episodes
|
|
195
|
+
- `agenr ingest episodes [path]` generates one narrative summary per session so the brain can answer temporal questions like "what happened last week?"
|
|
188
196
|
|
|
189
197
|
Both paths parse OpenClaw transcripts first, but they optimize for different outputs: entry ingest distills durable knowledge and runs semantic dedup across the whole ingest batch, while episode ingest does a session-by-session preflight pass, uses `sessions.json` metadata when available, reconstructs missing surface metadata for rotated files, and writes episodic summaries. Details: [docs/INGEST.md](./docs/INGEST.md) and [docs/STORE.md](./docs/STORE.md).
|
|
190
198
|
|
|
@@ -194,7 +202,7 @@ Episodes are session-level memory artifacts stored separately from durable entri
|
|
|
194
202
|
|
|
195
203
|
## How the Surgeon Works
|
|
196
204
|
|
|
197
|
-
The surgeon is a maintenance
|
|
205
|
+
The surgeon is a maintenance system for the durable-memory corpus. Today it supports two passes: retirement, which reviews stale entries for conservative cleanup, and supersession, which links older entries to newer replacements without deleting history. `agenr surgeon run` is safe by default because it starts in dry-run mode; `--pass supersession` switches the workflow, and `--apply` is the explicit mutation switch. For runtime details, governance, and audit behavior, see [docs/SURGEON.md](./docs/SURGEON.md).
|
|
198
206
|
|
|
199
207
|
## Development
|
|
200
208
|
|
|
@@ -210,10 +218,10 @@ pnpm check # format + lint + typecheck + test
|
|
|
210
218
|
| Problem | What to check |
|
|
211
219
|
| ----------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
212
220
|
| `agenr init` cannot complete setup | Re-run `agenr setup` and verify the selected auth method is actually available. Subscription flows depend on the relevant external login being present, and non-OpenAI extraction setups still need a separate OpenAI embedding key. |
|
|
213
|
-
| `openclaw plugins install @agenr/
|
|
214
|
-
| `agenr recall` or `agenr_recall` fails with embedding/auth errors | Embeddings always use OpenAI. Confirm `credentials.openaiApiKey` is configured, or re-run `agenr setup` to set the embedding key explicitly.
|
|
215
|
-
| SQLite says the database is locked | Avoid running multiple writers against the same DB at once. Stop overlapping ingest/reset runs, restart the OpenClaw gateway if needed, then retry.
|
|
216
|
-
| OpenClaw does not pick up the plugin | Restart the gateway, confirm `plugins.slots.memory` is `agenr`, confirm `plugins.allow` contains `agenr`, and for dev installs confirm `plugins.load.paths` points at the built `packages/openclaw-plugin` directory.
|
|
221
|
+
| `openclaw plugins install @agenr/agenr-plugin` fails | Make sure the `openclaw` CLI is installed and on `PATH`. For local development, run `pnpm build` and use `plugins.load.paths` instead. |
|
|
222
|
+
| `agenr recall` or `agenr_recall` fails with embedding/auth errors | Embeddings always use OpenAI. Confirm `credentials.openaiApiKey` is configured, or re-run `agenr setup` to set the embedding key explicitly. |
|
|
223
|
+
| SQLite says the database is locked | Avoid running multiple writers against the same DB at once. Stop overlapping ingest/reset runs, restart the OpenClaw gateway if needed, then retry. |
|
|
224
|
+
| OpenClaw does not pick up the plugin | Restart the gateway, confirm `plugins.slots.memory` is `agenr`, confirm `plugins.allow` contains `agenr`, and for dev installs confirm `plugins.load.paths` points at the built `packages/openclaw-plugin` directory. |
|
|
217
225
|
|
|
218
226
|
## License
|
|
219
227
|
|