@remembrance-ai/opencode-plugin 0.2.2 → 0.2.4

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.
@@ -19,6 +19,8 @@ REST/HTTPS, skill-only installs, enterprise org keys, local identity, and common
19
19
  propose_private_skill because it has no durable device outbox.
20
20
  - A native plugin appears installed but hooks, trust prompts, or MCP tools do
21
21
  not work.
22
+ - An organization install stops for approval at every private lesson or skill
23
+ submission, or an unattended or headless run denies it.
22
24
  - A request fails with 401, 403, 404, 413, 422, 429, or a missing-key error.
23
25
 
24
26
  ## First decision
@@ -32,6 +34,11 @@ REST/HTTPS, skill-only installs, enterprise org keys, local identity, and common
32
34
  5. Use the skills.sh entry skill only when the runtime can load filesystem
33
35
  skills but not native plugins.
34
36
 
37
+ With an organization key, a plugin or MCP install also needs the step in
38
+ "Highly Recommended: approve private submissions" below; ask the user to apply
39
+ it rather than changing host settings yourself. REST and skill-only installs
40
+ have no MCP tools to approve.
41
+
35
42
  Raw MCP, REST, and skill-only paths do not have native Stop hooks. They must
36
43
  self-check before finishing and submit `type: "failure_report"` remembrances
37
44
  for reusable self-corrections, user-caught mistakes, CI/deploy failures, and
@@ -135,6 +142,81 @@ show the same review screen again; never use the automation-only trust bypass
135
142
  for normal installation. Fully restart Codex, submit one prompt, use one
136
143
  Remembrance tool, complete one turn, and run `run_connection_doctor`.
137
144
 
145
+ OpenClaw:
146
+
147
+ ~~~bash
148
+ openclaw plugins install clawhub:@remembrance/openclaw-plugin
149
+ openclaw remembrance setup
150
+ ~~~
151
+
152
+ If ClawHub search shows multiple Remembrance matches, use the official package
153
+ that points to "dreamarkinc/remembrance-skills", mentions the Remembrance agent
154
+ skill/resource service, and exposes the expected Remembrance MCP tools such as
155
+ run_connection_doctor, get_connection_status, query_skills, list_skills,
156
+ invoke_skill, submit_query_feedback, capture_learning,
157
+ submit_private_lesson_candidate, submit_private_skill_candidate, get_skill, and
158
+ get_resource, plus report_task_outcome and get_value_proof. Do not install
159
+ unrelated roots, genealogy, ancestry, or memorial packages.
160
+
161
+ The setup command preserves existing OpenClaw settings, enables conversation
162
+ access, and registers the bundled local MCP by its installed absolute path.
163
+ Before that grant, OpenClaw already runs the plugin's prompt, tool and
164
+ subagent-end hooks and holds only its completion hook (before_agent_finalize):
165
+ the prompt hook reads each prompt and, unless `REMEMBRANCE_AUTO_QUERY=0`,
166
+ sends a reusable-looking prompt, redacted, as a registry query.
167
+ In centrally managed environments, apply this equivalent configuration in
168
+ "~/.openclaw/openclaw.json":
169
+
170
+ ~~~json
171
+ {
172
+ "plugins": {
173
+ "entries": {
174
+ "remembrance": {
175
+ "enabled": true,
176
+ "hooks": { "allowConversationAccess": true },
177
+ "config": {}
178
+ }
179
+ }
180
+ }
181
+ }
182
+ ~~~
183
+
184
+ Cursor:
185
+
186
+ Install the native plugin from Cursor > Customize > Plugins or from a team
187
+ marketplace that imports "packages/cursor-plugin" from the public mirror. The
188
+ Cursor plugin installs this Remembrancer skill, an always-apply Cursor rule, a
189
+ plugin-managed MCP server config, and hooks that ask for feedback only after
190
+ actual Remembrance MCP use.
191
+
192
+ For local plugin testing before marketplace approval, copy the plugin into its
193
+ own folder under Cursor's local plugin folder, then restart Cursor or run
194
+ **Developer: Reload Window**:
195
+
196
+ ~~~bash
197
+ mkdir -p ~/.cursor/plugins/local/remembrance
198
+ cp -R /absolute/path/to/remembrance/packages/cursor-plugin/. ~/.cursor/plugins/local/remembrance/
199
+ ~~~
200
+
201
+ Copy the files rather than linking them: Cursor skips a symbolic link that
202
+ points to a plugin elsewhere on disk. On Teams and Enterprise, local plugins
203
+ load only when an administrator allows **Allow Local Plugin Imports**, which is
204
+ off by default on Enterprise.
205
+
206
+ Cursor now documents conversation hooks for cloud agents, but a local plugin
207
+ install does not automatically provision the cloud surface. Distribute the
208
+ plugin through the team marketplace, register Remembrance as a Team MCP server
209
+ under **Dashboard > Plugins & MCPs**, and verify query, invocation, feedback,
210
+ and contribution receipts in both local and cloud runs.
211
+
212
+ After installing any native plugin, restart the agent app/session and approve
213
+ the runtime's trust request when one appears. For Codex, complete the hook
214
+ review above if Codex requests it; unchanged, previously trusted definitions
215
+ may not show another review screen. Changed hook definitions show the review
216
+ screen again. A currently running Codex or Claude thread usually cannot
217
+ hot-load newly installed plugin tools. With an organization key, then ask the
218
+ user to complete the Highly Recommended step below.
219
+
138
220
  ### Optional unattended routine feedback in Codex
139
221
 
140
222
  After the user explicitly opts in, add only these two tool overrides to the
@@ -162,11 +244,13 @@ their separate evidence requirements; reusable private lessons use
162
244
 
163
245
  These are real writes, not read-only diagnostics. Post-use feedback can enter
164
246
  verification and incur processing cost under the existing organization policy.
165
- The two overrides do not approve private lesson/skill submission, publishing,
166
- deletion, reset, preference changes, or other tools. They do not widen the
167
- server's enabled tool set or override managed policy, guardian decisions,
168
- network restrictions, or organization processing grants. Do not set the whole
169
- server's approval default to `approve` for this purpose.
247
+ The two overrides do not approve private lesson/skill submission (the Highly
248
+ Recommended step below covers that), publishing, deletion, reset, preference
249
+ changes, or other tools. They do not widen the server's enabled tool set or
250
+ override managed policy, network restrictions, or organization processing
251
+ grants. They do skip the Codex approval prompt and its Auto-review (guardian)
252
+ evaluation for these two tools. Do not set the whole server's approval default
253
+ to `approve` for this purpose.
170
254
 
171
255
  Tool overrides persist when authentication or schemas change. Remove or
172
256
  re-review both approvals before switching to anonymous or hosted transport,
@@ -180,72 +264,342 @@ connection, not that host approval policy permits feedback. A denial means
180
264
  that rating was not submitted; acknowledge it locally and do not retry through
181
265
  another transport. See the [official installed-server policy guide](https://developers.openai.com/plugins/build/plugins#configure-installed-server-policy).
182
266
 
183
- OpenClaw:
267
+ ## Highly Recommended: approve private submissions
268
+
269
+ For organizations that use Remembrance with a private organization key, this
270
+ step is required for Remembrance to do its job fully. Without it, on hosts that
271
+ ask before these tools, every private lesson or skill submission stops for a
272
+ manual approval, and unattended or headless runs deny it. Public-only use,
273
+ without an organization key, does not need it.
274
+
275
+ Ask the user (for managed settings, the administrator) before applying this
276
+ step. An agent never edits host permission or settings files without the
277
+ user's consent, and never answers the host's approval of its own pending
278
+ action.
279
+
280
+ Persist the host's approval for exactly these four local tools, the private
281
+ submit and retry actions:
282
+
283
+ - `submit_private_lesson_candidate`
284
+ - `retry_private_lesson_candidate`
285
+ - `submit_private_skill_candidate`
286
+ - `retry_private_skill_candidate`
287
+
288
+ Hosted MCP exposes only `submit_private_lesson_candidate` of the four, so
289
+ approve only that one there. Each approval lets the agent send to the
290
+ organization's private review queue without asking. On a local server that is
291
+ normally a draft that `capture_learning` already prepared, although the
292
+ lesson submit also accepts a lesson candidate the agent writes into the call;
293
+ on hosted MCP, which has no `capture_learning`, the approved submit sends the
294
+ lesson candidate the agent writes. These actions cannot publish public content.
295
+ Never pre-approve `delete_private_lesson_candidate` or
296
+ `delete_private_skill_candidate`, a whole server (`mcp__<server>` or
297
+ `mcp__<server>__*`), `bypassPermissions`, Gemini CLI `trust: true` or
298
+ `mcp.allowed`, or any global auto-approve.
299
+
300
+ Every local private submission starts with `capture_learning`, which writes
301
+ the encrypted draft. It is local only: it stays on this machine and sends
302
+ nothing. On hosts that ask before it (Claude Code, which asks before every MCP
303
+ tool; Gemini CLI; VS Code; and Cursor, depending on its Run Mode), the steps
304
+ below add it as a labelled local-only entry, which is not one of the four
305
+ submit and retry tools. Without it the capture prompts, and a headless run
306
+ denies it before any draft exists. Codex under the managed `writes` mode also
307
+ asks before it, but there approving it is an optional administrator decision:
308
+ with it, Auto-review never sees the lesson content (see "Approve private
309
+ repository contributions in managed Codex"). On these hosts a run that nobody
310
+ can answer, such as a headless run, denies every tool that has no approval, so
311
+ it also needs approvals for the other Remembrance tools it calls, such as
312
+ `query_skills`; this step covers only private learning.
313
+
314
+ Check the step by behavior: capture one disposable private lesson and confirm
315
+ that neither the capture nor its submission prompts. Where the organization
316
+ leaves `capture_learning` to Auto-review or a person, as managed Codex may,
317
+ only the capture is reviewed; its submission still must not prompt.
318
+ `run_connection_doctor` cannot see a persisted approval; its `host_approval`
319
+ field reports only recent denials.
320
+
321
+ ### Claude Code
322
+
323
+ Merge these entries into `permissions.allow` in `~/.claude/settings.json`,
324
+ which applies to every project. The first four are the plugin's private submit
325
+ and retry tools; the last is the local-only `capture_learning` entry:
184
326
 
185
- ~~~bash
186
- openclaw plugins install clawhub:@remembrance/openclaw-plugin
187
- openclaw remembrance setup
327
+ ~~~json
328
+ {
329
+ "permissions": {
330
+ "allow": [
331
+ "mcp__plugin_remembrance_remembrance__submit_private_lesson_candidate",
332
+ "mcp__plugin_remembrance_remembrance__retry_private_lesson_candidate",
333
+ "mcp__plugin_remembrance_remembrance__submit_private_skill_candidate",
334
+ "mcp__plugin_remembrance_remembrance__retry_private_skill_candidate",
335
+ "mcp__plugin_remembrance_remembrance__capture_learning"
336
+ ]
337
+ }
338
+ }
188
339
  ~~~
189
340
 
190
- If ClawHub search shows multiple Remembrance matches, use the official package
191
- that points to "dreamarkinc/remembrance-skills", mentions the Remembrance agent
192
- skill/resource service, and exposes the expected Remembrance MCP tools such as
193
- run_connection_doctor, get_connection_status, query_skills, list_skills,
194
- invoke_skill, submit_query_feedback, capture_learning,
195
- submit_private_lesson_candidate, submit_private_skill_candidate, get_skill, and
196
- get_resource, plus report_task_outcome and get_value_proof. Do not install
197
- unrelated roots, genealogy, ancestry, or memorial packages.
341
+ Choosing "Yes, and don't ask again" at the prompt saves the rule only for the
342
+ current project, in `.claude/settings.local.json`. A local standalone server
343
+ named `remembrance`, whether a user or the organization registers it, uses
344
+ `mcp__remembrance__<tool>` names instead:
198
345
 
199
- The setup command preserves existing OpenClaw settings, enables conversation
200
- access, and registers the bundled local MCP by its installed absolute path.
201
- Before that grant, OpenClaw already runs the plugin's prompt, tool and
202
- subagent-end hooks and holds only its completion hook (before_agent_finalize):
203
- the prompt hook reads each prompt and, unless `REMEMBRANCE_AUTO_QUERY=0`,
204
- sends a reusable-looking prompt, redacted, as a registry query.
205
- In centrally managed environments, apply this equivalent configuration in
206
- "~/.openclaw/openclaw.json":
346
+ ~~~json
347
+ {
348
+ "permissions": {
349
+ "allow": [
350
+ "mcp__remembrance__submit_private_lesson_candidate",
351
+ "mcp__remembrance__retry_private_lesson_candidate",
352
+ "mcp__remembrance__submit_private_skill_candidate",
353
+ "mcp__remembrance__retry_private_skill_candidate",
354
+ "mcp__remembrance__capture_learning"
355
+ ]
356
+ }
357
+ }
358
+ ~~~
359
+
360
+ Hosted MCP, including the `managed-mcp.json` path in "Approve Claude Code",
361
+ exposes only `submit_private_lesson_candidate` of these and has no
362
+ `capture_learning`, so a hosted server named `remembrance` needs only this
363
+ entry:
364
+
365
+ ~~~json
366
+ {
367
+ "permissions": {
368
+ "allow": [
369
+ "mcp__remembrance__submit_private_lesson_candidate"
370
+ ]
371
+ }
372
+ }
373
+ ~~~
374
+
375
+ Headless runs such as `claude -p` deny every tool without an allow rule, so
376
+ they also need rules for the other Remembrance tools they call. Plan mode still
377
+ asks before these tools even when a rule allows them. When managed settings set
378
+ `allowManagedPermissionRulesOnly`, Claude Code ignores user rules, so an
379
+ administrator must ship them (see "Approve Claude Code").
380
+
381
+ ### Codex
382
+
383
+ Add one table per tool to the user-level `~/.codex/config.toml`, separate from
384
+ the optional routine-feedback opt-in above:
385
+
386
+ ~~~toml
387
+ [plugins."remembrance@remembrance".mcp_servers.remembrance.tools.submit_private_lesson_candidate]
388
+ approval_mode = "approve"
389
+
390
+ [plugins."remembrance@remembrance".mcp_servers.remembrance.tools.retry_private_lesson_candidate]
391
+ approval_mode = "approve"
392
+
393
+ [plugins."remembrance@remembrance".mcp_servers.remembrance.tools.submit_private_skill_candidate]
394
+ approval_mode = "approve"
395
+
396
+ [plugins."remembrance@remembrance".mcp_servers.remembrance.tools.retry_private_skill_candidate]
397
+ approval_mode = "approve"
398
+ ~~~
399
+
400
+ Current Codex source does not prompt for these four tools, or for
401
+ `capture_learning`, under the default `auto` tool approval mode, because
402
+ Remembrance marks them non-destructive and closed-world; older releases and
403
+ other modes can, so add the tables anyway. Under the managed
404
+ `default_tools_approval_mode = "writes"`, Codex asks before every call, from a
405
+ person or from Auto-review where it is the reviewer, and cannot remember the
406
+ answer, so a per-tool `approve` entry is the only way to persist approval.
407
+ `approve` also skips Auto-review for that tool, so in a managed organization
408
+ add these tables only with your administrator ("Approve private repository
409
+ contributions in managed Codex" covers the trade-off and `capture_learning`).
410
+ For a manually registered server named `remembrance`, use the same tables
411
+ under `mcp_servers.remembrance`:
412
+
413
+ ~~~toml
414
+ [mcp_servers.remembrance.tools.submit_private_lesson_candidate]
415
+ approval_mode = "approve"
416
+
417
+ [mcp_servers.remembrance.tools.retry_private_lesson_candidate]
418
+ approval_mode = "approve"
419
+
420
+ [mcp_servers.remembrance.tools.submit_private_skill_candidate]
421
+ approval_mode = "approve"
422
+
423
+ [mcp_servers.remembrance.tools.retry_private_skill_candidate]
424
+ approval_mode = "approve"
425
+ ~~~
426
+
427
+ ### Cursor
428
+
429
+ In the IDE, merge these entries into the `mcpAllowlist` array of
430
+ `~/.cursor/permissions.json` (create the file if it is missing); the last is
431
+ the local-only `capture_learning` entry:
432
+
433
+ ~~~json
434
+ {
435
+ "mcpAllowlist": [
436
+ "remembrance:submit_private_lesson_candidate",
437
+ "remembrance:retry_private_lesson_candidate",
438
+ "remembrance:submit_private_skill_candidate",
439
+ "remembrance:retry_private_skill_candidate",
440
+ "remembrance:capture_learning"
441
+ ]
442
+ }
443
+ ~~~
444
+
445
+ `mcpAllowlist` replaces the whole in-app MCP allowlist, so keep the entries
446
+ you already rely on in the same array, keep the file's other keys such as
447
+ `terminalAllowlist`, `approvalMode`, and `autoReview`, and use this
448
+ user-level file. Cursor applies it under its Run Modes (Auto-review is the
449
+ default); a team Run Mode configuration from an administrator overrides it. For
450
+ the Cursor CLI, merge the same tools into `permissions.allow` in
451
+ `~/.cursor/cli-config.json`:
452
+
453
+ ~~~json
454
+ {
455
+ "permissions": {
456
+ "allow": [
457
+ "Mcp(remembrance:submit_private_lesson_candidate)",
458
+ "Mcp(remembrance:retry_private_lesson_candidate)",
459
+ "Mcp(remembrance:submit_private_skill_candidate)",
460
+ "Mcp(remembrance:retry_private_skill_candidate)",
461
+ "Mcp(remembrance:capture_learning)"
462
+ ]
463
+ }
464
+ }
465
+ ~~~
466
+
467
+ If Cursor shows the plugin's server under a name other than `remembrance`, use
468
+ that exact name instead. Do not replace the server name with `*`, which
469
+ approves the tool on every server.
470
+
471
+ ### VS Code
472
+
473
+ VS Code has no settings key or policy that pre-approves a single tool; use its
474
+ interface. Run **Chat: Manage Tool Approval**, expand the Remembrance server,
475
+ tick only the four tools and the local-only `capture_learning`, and turn off
476
+ **Configure for this workspace only** so the approval applies in every
477
+ workspace. Do not tick the server's own box or choose **Always Allow Tools
478
+ from** the server: both approve the whole server. Alternatively, choose
479
+ **Always Allow** in the prompt's Allow menu the first time each of those tools
480
+ asks.
481
+
482
+ ### OpenCode
483
+
484
+ OpenCode runs MCP tools without asking by default, so private submissions
485
+ already complete. Add explicit entries to the `permission` map in
486
+ `~/.config/opencode/opencode.json` so the four tools and the local-only
487
+ `capture_learning` keep working under a broader ask rule that comes before
488
+ them, which would otherwise stop every private lesson or skill submission:
489
+
490
+ ~~~json
491
+ {
492
+ "permission": {
493
+ "remembrance_submit_private_lesson_candidate": "allow",
494
+ "remembrance_retry_private_lesson_candidate": "allow",
495
+ "remembrance_submit_private_skill_candidate": "allow",
496
+ "remembrance_retry_private_skill_candidate": "allow",
497
+ "remembrance_capture_learning": "allow"
498
+ }
499
+ }
500
+ ~~~
501
+
502
+ Put them after any broader `"*"` or `"remembrance_*"` rule in the same
503
+ `permission` map, because OpenCode applies the last matching rule. A broader ask
504
+ rule set elsewhere, such as in an agent's own `permission` map or, depending on
505
+ the OpenCode version, in another configuration file, can still take precedence;
506
+ if the capture or its submission still prompts, find that rule and make sure the
507
+ same entries come after it. In OpenCode 2.x, answering "always" at a prompt
508
+ saves an allow rule for the current project across sessions (1.x keeps it until
509
+ OpenCode restarts); never answer "always" on a `delete_private_*` prompt.
510
+
511
+ ### OpenClaw
512
+
513
+ In native runs OpenClaw documents no prompt of its own for MCP tools; the
514
+ Remembrance plugin asks before each private submission. To persist approval,
515
+ answer **allow-always** once for each lane when it asks to "Submit private
516
+ Remembrance lesson" or "Submit private Remembrance skill", for example with
517
+ `/approve <id> allow-always` in chat or
518
+ `openclaw approvals resolve <id> allow-always`. One decision covers that lane's
519
+ submit and retry actions, and the plugin saves it in its config.
520
+
521
+ To pre-set both lanes instead, Remembrance for OpenClaw 0.2.3 or later accepts
522
+ this in `~/.openclaw/openclaw.json`:
207
523
 
208
524
  ~~~json
209
525
  {
210
526
  "plugins": {
211
527
  "entries": {
212
528
  "remembrance": {
213
- "enabled": true,
214
- "hooks": { "allowConversationAccess": true },
215
- "config": {}
529
+ "config": {
530
+ "privateLearningEgressApprovals": {
531
+ "private_lesson": true,
532
+ "private_skill": true
533
+ }
534
+ }
216
535
  }
217
536
  }
218
537
  }
219
538
  }
220
539
  ~~~
221
540
 
222
- Cursor:
541
+ Check the installed version first, for example with
542
+ `openclaw plugins inspect remembrance`. Earlier versions reject the key: the
543
+ Gateway then refuses to start until it is removed, and those versions cannot
544
+ keep an allow-always decision across a restart either. On older or
545
+ mixed-version installs, use allow-always.
223
546
 
224
- Install the native plugin from Cursor > Customize > Plugins or from a team
225
- marketplace that imports "packages/cursor-plugin" from the public mirror. The
226
- Cursor plugin installs this Remembrancer skill, an always-apply Cursor rule, a
227
- plugin-managed MCP server config, and hooks that ask for feedback only after
228
- actual Remembrance MCP use.
547
+ ### Gemini CLI
229
548
 
230
- For local plugin testing before marketplace approval:
549
+ Create `~/.gemini/policies/remembrance.toml` with one rule per tool; the last
550
+ rule is the local-only `capture_learning` entry:
231
551
 
232
- ~~~bash
233
- mkdir -p ~/.cursor/plugins/local
234
- ln -s /absolute/path/to/remembrance/packages/cursor-plugin ~/.cursor/plugins/local/remembrance
552
+ ~~~toml
553
+ [[rule]]
554
+ mcpName = "remembrance"
555
+ toolName = "submit_private_lesson_candidate"
556
+ decision = "allow"
557
+ priority = 200
558
+
559
+ [[rule]]
560
+ mcpName = "remembrance"
561
+ toolName = "retry_private_lesson_candidate"
562
+ decision = "allow"
563
+ priority = 200
564
+
565
+ [[rule]]
566
+ mcpName = "remembrance"
567
+ toolName = "submit_private_skill_candidate"
568
+ decision = "allow"
569
+ priority = 200
570
+
571
+ [[rule]]
572
+ mcpName = "remembrance"
573
+ toolName = "retry_private_skill_candidate"
574
+ decision = "allow"
575
+ priority = 200
576
+
577
+ # Local only: capture_learning stays on this machine and sends nothing.
578
+ [[rule]]
579
+ mcpName = "remembrance"
580
+ toolName = "capture_learning"
581
+ decision = "allow"
582
+ priority = 200
235
583
  ~~~
236
584
 
237
- Cursor now documents conversation hooks for cloud agents, but a local plugin
238
- install does not automatically provision the cloud surface. Distribute the
239
- plugin through the team marketplace, register Remembrance under **Dashboard >
240
- Integrations & MCP**, and verify query, invocation, feedback, and contribution
241
- receipts in both local and cloud runs.
242
-
243
- After installing any native plugin, restart the agent app/session and approve
244
- the runtime's trust request when one appears. For Codex, complete the hook
245
- review above if Codex requests it; unchanged, previously trusted definitions
246
- may not show another review screen. Changed hook definitions show the review
247
- screen again. A currently running Codex or Claude thread usually cannot
248
- hot-load newly installed plugin tools.
585
+ Gemini CLI asks before every MCP tool without an allow rule, and
586
+ non-interactive runs treat that prompt as a denial. These rules cover private
587
+ learning only, so a headless run also needs rules for the other Remembrance
588
+ tools it calls, such as `query_skills`. Keep `trust` false and do not list
589
+ the server in `mcp.allowed`: Gemini CLI turns `trust: true` and an
590
+ `mcp.allowed` entry alike into an allow rule for every tool of the server.
591
+ Administrators use the admin policy file in "Approve Gemini CLI" instead, which
592
+ already contains these rules.
593
+
594
+ ### Claude Desktop and other MCP clients
595
+
596
+ Claude Desktop offers a per-tool **Always allow**, in the approval prompt or in
597
+ the connector's tool permissions, but it has no config key and users report
598
+ that it resets when the app updates, so do not rely on it for unattended runs.
599
+ For other MCP clients, use the client's per-tool approval for the four exact
600
+ tool names (only `submit_private_lesson_candidate` on hosted MCP), plus the
601
+ local-only `capture_learning` on a local server that asks before it. If a
602
+ client can approve only a whole server, keep its prompts.
249
603
 
250
604
  ## Enterprise/org key setup
251
605
 
@@ -332,8 +686,10 @@ while malformed or privacy-sensitive tags hold the draft instead of being
332
686
  silently removed.
333
687
 
334
688
  The plugin then calls `submit_private_lesson_candidate` with that draft ID.
335
- This is the only host-visible network action in the flow. Approve or persist
336
- approval for this exact action, not every Remembrance write. The server derives
689
+ This is the host-visible network action in the flow, and
690
+ `retry_private_lesson_candidate` later resends a retained draft through the
691
+ same lane. Persist approval for these exact actions, as in "Highly Recommended:
692
+ approve private submissions", not for every Remembrance write. The server derives
337
693
  the organization and private visibility from the authenticated key, verifies a
338
694
  signed organization policy plus purpose-bound attestation, and returns a signed
339
695
  content-free receipt. The action always submits privately and never falls back
@@ -391,16 +747,17 @@ agent task remain available when capture or submission is blocked.
391
747
  ### Approve private repository contributions in managed Codex
392
748
 
393
749
  An API key authorizes Remembrance; it does not authorize Codex to export
394
- repository-derived content. Codex Auto-review separately evaluates MCP and
395
- network actions for data exfiltration. A chat approval may not override an
396
- enterprise deny rule, and no Remembrance plugin setting can weaken that host
397
- boundary.
750
+ repository-derived content. Codex Auto-review evaluates the approval requests
751
+ that would otherwise pause for a person, including MCP calls that need approval
752
+ under their annotations or configured approval mode; a tool set to `approve`
753
+ never reaches it. A chat approval may not override an enterprise deny rule, and
754
+ no Remembrance plugin setting can weaken that host boundary.
398
755
 
399
756
  For an organization that has approved Remembrance as an operational-memory
400
757
  processor, a Codex administrator should do all of the following:
401
758
 
402
- 1. Allow the exact Remembrance MCP server identity and
403
- `https://remembrance.dev/api/mcp` in managed Codex requirements.
759
+ 1. Allow the Remembrance marketplace source in managed Codex requirements and
760
+ enable the plugin's bundled `remembrance` server in managed configuration.
404
761
  2. Merge a narrow Remembrance destination rule into the existing
405
762
  `guardian_policy_config`. Do not replace the rest of the tenant policy or
406
763
  remove its credential, secret, raw-log, or unrelated-source-code denies.
@@ -421,9 +778,12 @@ key to force a public candidate. Submit privately, then use the reviewed public-
421
778
  propagation flow for a redacted public-safe version when the organization wants
422
779
  to share it.
423
780
 
424
- The exact plugin MCP identity belongs in managed `requirements.toml`. The
425
- tool allowlist belongs in managed configuration. This keeps reads and normal
426
- skill use available while prompting for non-read-only writes:
781
+ Managed `requirements.toml` restricts the marketplace source; the tool
782
+ allowlist and approval mode belong in managed configuration. The bundled server
783
+ is a local stdio server, so never give it the hosted URL as its identity. If the
784
+ requirements also carry an `mcp_servers` allowlist, approve this server by its
785
+ configured command (`sh`): Codex disables a server whose name and identity do
786
+ not match an approved entry.
427
787
 
428
788
  Add these entries to `requirements.toml`:
429
789
 
@@ -431,9 +791,6 @@ Add these entries to `requirements.toml`:
431
791
  [features]
432
792
  hooks = true
433
793
 
434
- [plugins."remembrance@remembrance".mcp_servers.remembrance]
435
- identity = { url = "https://remembrance.dev/api/mcp" }
436
-
437
794
  [marketplaces]
438
795
  restrict_to_allowed_sources = true
439
796
 
@@ -477,8 +834,50 @@ enabled_tools = [
477
834
  "delete_private_skill_candidate",
478
835
  ]
479
836
  default_tools_approval_mode = "writes"
837
+
838
+ [plugins."remembrance@remembrance".mcp_servers.remembrance.tools.submit_private_lesson_candidate]
839
+ approval_mode = "approve"
840
+
841
+ [plugins."remembrance@remembrance".mcp_servers.remembrance.tools.retry_private_lesson_candidate]
842
+ approval_mode = "approve"
843
+
844
+ [plugins."remembrance@remembrance".mcp_servers.remembrance.tools.submit_private_skill_candidate]
845
+ approval_mode = "approve"
846
+
847
+ [plugins."remembrance@remembrance".mcp_servers.remembrance.tools.retry_private_skill_candidate]
848
+ approval_mode = "approve"
849
+ ~~~
850
+
851
+ `default_tools_approval_mode = "writes"` asks before every call of every tool
852
+ that is not marked read-only, including `query_skills`, `get_skill`,
853
+ `get_resource`, `invoke_skill`, `capture_learning`, and the feedback tools.
854
+ The answer comes from a person, or from Auto-review where it is the reviewer;
855
+ Codex cannot remember it, and a run that cannot ask denies the call.
856
+
857
+ The four `approve` tables are the Highly Recommended step: they let the
858
+ private submit and retry calls run without that per-call review. The trade-off
859
+ is that Auto-review never evaluates a tool set to `approve`, so the guardian
860
+ policy's denies no longer apply to those four calls. They normally carry only a
861
+ draft ID, so the lesson or skill content passes through `capture_learning`,
862
+ which a person or Auto-review still reviews; but the lesson submit also accepts
863
+ a lesson candidate written into the call, which then reaches the
864
+ organization's private review queue without that review. Leave the tables out
865
+ if the organization wants Auto-review to evaluate every private submission.
866
+
867
+ Runs that cannot ask can capture only if `capture_learning` is approved too.
868
+ This optional table is local only, but with it Auto-review never sees the
869
+ lesson content at all:
870
+
871
+ ~~~toml
872
+ # Local only: capture_learning stays on this machine and sends nothing.
873
+ # Approving it also skips Auto-review for the lesson it captures.
874
+ [plugins."remembrance@remembrance".mcp_servers.remembrance.tools.capture_learning]
875
+ approval_mode = "approve"
480
876
  ~~~
481
877
 
878
+ Those runs also need approval for every other tool they call, so unattended
879
+ work under `writes` usually relies on Auto-review as the reviewer instead.
880
+
482
881
  If `allow_managed_hooks_only = true`, Codex skips plugin hooks. Either leave
483
882
  the vetted Remembrance plugin hooks permitted or deploy equivalent managed
484
883
  query/completion hooks; otherwise MCP calls may work while the query and
@@ -633,10 +1032,66 @@ optional local-only tools and never belong in a hosted MCP allowlist.
633
1032
  ### Approve Claude Code
634
1033
 
635
1034
  Force-enable `remembrance@remembrance` in managed settings so its vetted hooks
636
- still run when `allowManagedHooksOnly` is enabled. If the organization deploys
637
- `managed-mcp.json`, define Remembrance there because exclusive managed MCP
638
- suppresses every plugin-provided MCP server. Use the exact URL as the security
639
- boundary; a server name alone is not sufficient.
1035
+ still run when `allowManagedHooksOnly` is enabled. Then choose one MCP path.
1036
+
1037
+ To keep the plugin's local server, with all four private submit and retry tools
1038
+ and the encrypted device outbox, deploy neither `managed-mcp.json` nor the
1039
+ URL-only `allowedMcpServers` list of the hosted path below. Exclusive managed
1040
+ MCP suppresses every plugin-provided server, and Claude Code also checks plugin
1041
+ servers against `allowedMcpServers`, where a list with only `serverUrl`
1042
+ entries blocks every stdio server. Merge this approval into managed settings;
1043
+ the plugin's tool names carry the `mcp__plugin_remembrance_remembrance__`
1044
+ prefix, and the last entry is the local-only `capture_learning`:
1045
+
1046
+ ~~~json
1047
+ {
1048
+ "enabledPlugins": {
1049
+ "remembrance@remembrance": true
1050
+ },
1051
+ "permissions": {
1052
+ "allow": [
1053
+ "mcp__plugin_remembrance_remembrance__submit_private_lesson_candidate",
1054
+ "mcp__plugin_remembrance_remembrance__retry_private_lesson_candidate",
1055
+ "mcp__plugin_remembrance_remembrance__submit_private_skill_candidate",
1056
+ "mcp__plugin_remembrance_remembrance__retry_private_skill_candidate",
1057
+ "mcp__plugin_remembrance_remembrance__capture_learning"
1058
+ ]
1059
+ }
1060
+ }
1061
+ ~~~
1062
+
1063
+ Managed rules also cover organizations that set
1064
+ `allowManagedPermissionRulesOnly`, which makes Claude Code ignore user rules.
1065
+ For command or REST fallbacks under a sandbox, also merge `remembrance.dev`
1066
+ into `sandbox.network.allowedDomains`.
1067
+
1068
+ Optional lockdown, separate from that approval: Remembrance needs neither of
1069
+ these keys, and both restrict much more than Remembrance.
1070
+ `allowManagedHooksOnly` makes Claude Code ignore every user, project, and
1071
+ local hook, and turns off `/goal` and command-sourced plugins.
1072
+ `strictKnownMarketplaces` blocks plugins from every marketplace it does not
1073
+ list, and also the `~/.claude/skills` auto-load unless the list includes
1074
+ `{"source": "skills-dir"}`. Add them only when the organization wants that
1075
+ lockdown; the hosted path below carries the same two keys:
1076
+
1077
+ ~~~json
1078
+ {
1079
+ "strictKnownMarketplaces": [
1080
+ {
1081
+ "source": "github",
1082
+ "repo": "dreamarkinc/remembrance-skills"
1083
+ }
1084
+ ],
1085
+ "allowManagedHooksOnly": true
1086
+ }
1087
+ ~~~
1088
+
1089
+ To use hosted MCP instead, define Remembrance in `managed-mcp.json`, because
1090
+ exclusive managed MCP suppresses every plugin-provided MCP server. The plugin
1091
+ keeps its hooks and skills, but its tools then come from the hosted server named
1092
+ `remembrance`, which exposes only `submit_private_lesson_candidate` of the four
1093
+ private actions. Use the exact URL as the security boundary; a server name alone
1094
+ is not sufficient.
640
1095
 
641
1096
  Do not put a real key directly in `managed-mcp.json`; every local user can read
642
1097
  that file. Reference each user's process environment instead:
@@ -655,7 +1110,7 @@ that file. Reference each user's process environment instead:
655
1110
  }
656
1111
  ~~~
657
1112
 
658
- Merge this into managed settings:
1113
+ Merge this into managed settings for the hosted path:
659
1114
 
660
1115
  ~~~json
661
1116
  {
@@ -689,7 +1144,7 @@ Merge this into managed settings:
689
1144
  "mcp__remembrance__link_current_installation",
690
1145
  "mcp__remembrance__submit_private_lesson_candidate",
691
1146
  "mcp__remembrance__submit_remembrance",
692
- "mcp__remembrance__propose_private_skill",
1147
+ "mcp__remembrance__propose_private_skill"
693
1148
  ]
694
1149
  },
695
1150
  "sandbox": {
@@ -715,13 +1170,11 @@ work. See the official
715
1170
  ### Approve Gemini CLI
716
1171
 
717
1172
  Define the canonical server and its tool allowlist in the system override
718
- settings, not only user or workspace settings. Leave `trust` false unless the
719
- organization has deliberately chosen to bypass every confirmation for this
720
- narrow server/tool set:
1173
+ settings, not only user or workspace settings. Keep `trust` false;
1174
+ `trust: true` bypasses every confirmation for the server:
721
1175
 
722
1176
  ~~~json
723
1177
  {
724
- "mcp": { "allowed": ["remembrance"] },
725
1178
  "mcpServers": {
726
1179
  "remembrance": {
727
1180
  "command": "npx",
@@ -731,33 +1184,33 @@ narrow server/tool set:
731
1184
  "REMEMBRANCE_API_KEY": "${REMEMBRANCE_API_KEY}"
732
1185
  },
733
1186
  "includeTools": [
734
- "get_connection_status",
735
- "run_connection_doctor",
736
- "query_skills",
737
- "list_skills",
738
- "invoke_skill",
739
- "get_effective_preferences",
740
- "get_private_lesson_policy",
741
- "get_skill",
742
- "get_resource",
743
- "get_value_proof",
744
- "submit_query_feedback",
745
- "submit_feedback",
746
- "submit_preference_compatibility_feedback",
747
- "report_task_outcome",
748
- "submit_suggestion",
749
- "record_preference",
750
- "link_current_installation",
751
- "submit_private_lesson_candidate",
752
- "acknowledge_feedback_denial",
753
- "decline_pending_action",
754
- "capture_learning",
755
- "inspect_private_learning_outbox",
756
- "submit_private_skill_candidate",
757
- "retry_private_lesson_candidate",
758
- "delete_private_lesson_candidate",
759
- "retry_private_skill_candidate",
760
- "delete_private_skill_candidate",
1187
+ "get_connection_status",
1188
+ "run_connection_doctor",
1189
+ "query_skills",
1190
+ "list_skills",
1191
+ "invoke_skill",
1192
+ "get_effective_preferences",
1193
+ "get_private_lesson_policy",
1194
+ "get_skill",
1195
+ "get_resource",
1196
+ "get_value_proof",
1197
+ "submit_query_feedback",
1198
+ "submit_feedback",
1199
+ "submit_preference_compatibility_feedback",
1200
+ "report_task_outcome",
1201
+ "submit_suggestion",
1202
+ "record_preference",
1203
+ "link_current_installation",
1204
+ "submit_private_lesson_candidate",
1205
+ "acknowledge_feedback_denial",
1206
+ "decline_pending_action",
1207
+ "capture_learning",
1208
+ "inspect_private_learning_outbox",
1209
+ "submit_private_skill_candidate",
1210
+ "retry_private_lesson_candidate",
1211
+ "delete_private_lesson_candidate",
1212
+ "retry_private_skill_candidate",
1213
+ "delete_private_skill_candidate"
761
1214
  ],
762
1215
  "trust": false
763
1216
  }
@@ -765,14 +1218,220 @@ narrow server/tool set:
765
1218
  }
766
1219
  ~~~
767
1220
 
1221
+ Approve tools only with exact per-tool policy rules. Do not list the server in
1222
+ `mcp.allowed`: the server runs without it, and current Gemini CLI source turns
1223
+ each `mcp.allowed` entry into an allow rule for every tool of that server.
1224
+ Instead, save this file as `remembrance.toml` in the admin policy folder:
1225
+ `/Library/Application Support/GeminiCli/policies` on macOS,
1226
+ `/etc/gemini-cli/policies` on Linux, or `C:\ProgramData\gemini-cli\policies`
1227
+ on Windows. Gemini CLI ignores admin policy files that are not root-owned.
1228
+
1229
+ ~~~toml
1230
+ # One exact rule per tool in includeTools: allow, except the two
1231
+ # confirmed-delete tools, which ask. To make a tool ask, change its
1232
+ # decision to "ask_user" rather than deleting its rule: an admin ask
1233
+ # outranks users' own allow rules, and without one a user's allow decides.
1234
+
1235
+ [[rule]]
1236
+ mcpName = "remembrance"
1237
+ toolName = "get_connection_status"
1238
+ decision = "allow"
1239
+ priority = 200
1240
+
1241
+ [[rule]]
1242
+ mcpName = "remembrance"
1243
+ toolName = "run_connection_doctor"
1244
+ decision = "allow"
1245
+ priority = 200
1246
+
1247
+ [[rule]]
1248
+ mcpName = "remembrance"
1249
+ toolName = "query_skills"
1250
+ decision = "allow"
1251
+ priority = 200
1252
+
1253
+ [[rule]]
1254
+ mcpName = "remembrance"
1255
+ toolName = "list_skills"
1256
+ decision = "allow"
1257
+ priority = 200
1258
+
1259
+ [[rule]]
1260
+ mcpName = "remembrance"
1261
+ toolName = "invoke_skill"
1262
+ decision = "allow"
1263
+ priority = 200
1264
+
1265
+ [[rule]]
1266
+ mcpName = "remembrance"
1267
+ toolName = "get_effective_preferences"
1268
+ decision = "allow"
1269
+ priority = 200
1270
+
1271
+ [[rule]]
1272
+ mcpName = "remembrance"
1273
+ toolName = "get_private_lesson_policy"
1274
+ decision = "allow"
1275
+ priority = 200
1276
+
1277
+ [[rule]]
1278
+ mcpName = "remembrance"
1279
+ toolName = "get_skill"
1280
+ decision = "allow"
1281
+ priority = 200
1282
+
1283
+ [[rule]]
1284
+ mcpName = "remembrance"
1285
+ toolName = "get_resource"
1286
+ decision = "allow"
1287
+ priority = 200
1288
+
1289
+ [[rule]]
1290
+ mcpName = "remembrance"
1291
+ toolName = "get_value_proof"
1292
+ decision = "allow"
1293
+ priority = 200
1294
+
1295
+ [[rule]]
1296
+ mcpName = "remembrance"
1297
+ toolName = "submit_query_feedback"
1298
+ decision = "allow"
1299
+ priority = 200
1300
+
1301
+ [[rule]]
1302
+ mcpName = "remembrance"
1303
+ toolName = "submit_feedback"
1304
+ decision = "allow"
1305
+ priority = 200
1306
+
1307
+ [[rule]]
1308
+ mcpName = "remembrance"
1309
+ toolName = "submit_preference_compatibility_feedback"
1310
+ decision = "allow"
1311
+ priority = 200
1312
+
1313
+ [[rule]]
1314
+ mcpName = "remembrance"
1315
+ toolName = "report_task_outcome"
1316
+ decision = "allow"
1317
+ priority = 200
1318
+
1319
+ [[rule]]
1320
+ mcpName = "remembrance"
1321
+ toolName = "submit_suggestion"
1322
+ decision = "allow"
1323
+ priority = 200
1324
+
1325
+ [[rule]]
1326
+ mcpName = "remembrance"
1327
+ toolName = "record_preference"
1328
+ decision = "allow"
1329
+ priority = 200
1330
+
1331
+ [[rule]]
1332
+ mcpName = "remembrance"
1333
+ toolName = "link_current_installation"
1334
+ decision = "allow"
1335
+ priority = 200
1336
+
1337
+ [[rule]]
1338
+ mcpName = "remembrance"
1339
+ toolName = "submit_private_lesson_candidate"
1340
+ decision = "allow"
1341
+ priority = 200
1342
+
1343
+ [[rule]]
1344
+ mcpName = "remembrance"
1345
+ toolName = "acknowledge_feedback_denial"
1346
+ decision = "allow"
1347
+ priority = 200
1348
+
1349
+ [[rule]]
1350
+ mcpName = "remembrance"
1351
+ toolName = "decline_pending_action"
1352
+ decision = "allow"
1353
+ priority = 200
1354
+
1355
+ # Local only: capture_learning stays on this machine and sends nothing.
1356
+ [[rule]]
1357
+ mcpName = "remembrance"
1358
+ toolName = "capture_learning"
1359
+ decision = "allow"
1360
+ priority = 200
1361
+
1362
+ [[rule]]
1363
+ mcpName = "remembrance"
1364
+ toolName = "inspect_private_learning_outbox"
1365
+ decision = "allow"
1366
+ priority = 200
1367
+
1368
+ [[rule]]
1369
+ mcpName = "remembrance"
1370
+ toolName = "submit_private_skill_candidate"
1371
+ decision = "allow"
1372
+ priority = 200
1373
+
1374
+ [[rule]]
1375
+ mcpName = "remembrance"
1376
+ toolName = "retry_private_lesson_candidate"
1377
+ decision = "allow"
1378
+ priority = 200
1379
+
1380
+ [[rule]]
1381
+ mcpName = "remembrance"
1382
+ toolName = "delete_private_lesson_candidate"
1383
+ decision = "ask_user"
1384
+ priority = 200
1385
+
1386
+ [[rule]]
1387
+ mcpName = "remembrance"
1388
+ toolName = "retry_private_skill_candidate"
1389
+ decision = "allow"
1390
+ priority = 200
1391
+
1392
+ [[rule]]
1393
+ mcpName = "remembrance"
1394
+ toolName = "delete_private_skill_candidate"
1395
+ decision = "ask_user"
1396
+ priority = 200
1397
+ ~~~
1398
+
1399
+ The file has one exact rule for every tool in `includeTools`: an allow rule
1400
+ for each tool except the two confirmed-delete tools, whose admin `ask_user`
1401
+ rules keep them asking even where a user allowed them, so a headless run denies
1402
+ them. Apart from those two, this reproduces the earlier behavior of this
1403
+ recipe, whose `mcp.allowed` entry let every included tool run, with exact
1404
+ rules instead of a whole-server rule. The file already contains the rules from
1405
+ "Highly Recommended: approve private submissions" for the four private submit
1406
+ and retry tools and the local-only `capture_learning`, so do not add those
1407
+ again. To make a tool ask, change its rule to `decision = "ask_user"` instead
1408
+ of deleting the rule: an admin-tier ask outranks users' own allow rules, while
1409
+ without an admin rule a user's allow rule decides. A headless run then denies
1410
+ that tool.
1411
+
1412
+ If the organization already restricts servers with `mcp.allowed`, Remembrance
1413
+ must be listed there to run, and that entry creates the whole-server allow rule.
1414
+ Then also place this rule in the admin policy folder. It creates no allow rule:
1415
+ admin rules outrank the one `mcp.allowed` creates, so a Remembrance tool
1416
+ without its own admin rule asks again, while the per-tool rules above, at
1417
+ priority 200, still win over it for their tools:
1418
+
1419
+ ~~~toml
1420
+ [[rule]]
1421
+ mcpName = "remembrance"
1422
+ decision = "ask_user"
1423
+ priority = 100
1424
+ ~~~
1425
+
768
1426
  System settings live at `/Library/Application Support/GeminiCli/settings.json`
769
1427
  on macOS, `/etc/gemini-cli/settings.json` on Linux, and
770
1428
  `C:\ProgramData\gemini-cli\settings.json` on Windows. Also allow
771
1429
  `remembrance.dev` in the organization's egress policy. Restart Gemini CLI,
772
1430
  inspect the registered server, then run `run_connection_doctor` and require
773
1431
  organization scope before contribution work. See the official
774
- [enterprise configuration](https://google-gemini.github.io/gemini-cli/docs/cli/enterprise.html)
775
- and [MCP settings](https://google-gemini.github.io/gemini-cli/docs/tools/mcp-server.html).
1432
+ [enterprise configuration](https://geminicli.com/docs/cli/enterprise/),
1433
+ [MCP settings](https://geminicli.com/docs/tools/mcp-server/), and
1434
+ [policy engine](https://geminicli.com/docs/reference/policy-engine/).
776
1435
 
777
1436
  ### Approve OpenClaw
778
1437
 
@@ -798,33 +1457,33 @@ MCP tools, and `tools.deny: ["bundle-mcp"]` disables them:
798
1457
  "remembrance": {
799
1458
  "toolFilter": {
800
1459
  "include": [
801
- "get_connection_status",
802
- "run_connection_doctor",
803
- "query_skills",
804
- "list_skills",
805
- "invoke_skill",
806
- "get_effective_preferences",
807
- "get_private_lesson_policy",
808
- "get_skill",
809
- "get_resource",
810
- "get_value_proof",
811
- "submit_query_feedback",
812
- "submit_feedback",
813
- "submit_preference_compatibility_feedback",
814
- "report_task_outcome",
815
- "submit_suggestion",
816
- "record_preference",
817
- "link_current_installation",
818
- "submit_private_lesson_candidate",
819
- "acknowledge_feedback_denial",
820
- "decline_pending_action",
821
- "capture_learning",
822
- "inspect_private_learning_outbox",
823
- "submit_private_skill_candidate",
824
- "retry_private_lesson_candidate",
825
- "delete_private_lesson_candidate",
826
- "retry_private_skill_candidate",
827
- "delete_private_skill_candidate",
1460
+ "get_connection_status",
1461
+ "run_connection_doctor",
1462
+ "query_skills",
1463
+ "list_skills",
1464
+ "invoke_skill",
1465
+ "get_effective_preferences",
1466
+ "get_private_lesson_policy",
1467
+ "get_skill",
1468
+ "get_resource",
1469
+ "get_value_proof",
1470
+ "submit_query_feedback",
1471
+ "submit_feedback",
1472
+ "submit_preference_compatibility_feedback",
1473
+ "report_task_outcome",
1474
+ "submit_suggestion",
1475
+ "record_preference",
1476
+ "link_current_installation",
1477
+ "submit_private_lesson_candidate",
1478
+ "acknowledge_feedback_denial",
1479
+ "decline_pending_action",
1480
+ "capture_learning",
1481
+ "inspect_private_learning_outbox",
1482
+ "submit_private_skill_candidate",
1483
+ "retry_private_lesson_candidate",
1484
+ "delete_private_lesson_candidate",
1485
+ "retry_private_skill_candidate",
1486
+ "delete_private_skill_candidate"
828
1487
  ]
829
1488
  }
830
1489
  }
@@ -833,8 +1492,17 @@ MCP tools, and `tools.deny: ["bundle-mcp"]` disables them:
833
1492
  }
834
1493
  ~~~
835
1494
 
836
- Use a normal `coding` or `messaging` tool profile. Then verify cold config,
837
- the active Gateway plugin, and live MCP capabilities separately:
1495
+ Use a normal `coding` or `messaging` tool profile; both already include
1496
+ `bundle-mcp`, so the MCP tools need no `tools.allow` or `tools.alsoAllow`
1497
+ entry. The plugin asks before each private submission. For unattended runs,
1498
+ have each user answer allow-always once per lane. On Remembrance for OpenClaw
1499
+ 0.2.3 or later only, you can instead pre-set both private lanes by merging the
1500
+ `privateLearningEgressApprovals` object from "Highly Recommended: approve
1501
+ private submissions" into `plugins.entries.remembrance.config`. Earlier
1502
+ versions reject that key and the Gateway then refuses to start, so check the
1503
+ installed version first and keep allow-always on older or mixed-version
1504
+ fleets. Then verify cold config, the active Gateway plugin, and live MCP
1505
+ capabilities separately:
838
1506
 
839
1507
  ~~~bash
840
1508
  openclaw plugins inspect remembrance --runtime --json
@@ -869,18 +1537,27 @@ approved secret source, not in `policy.jsonc`. After the probes, run
869
1537
 
870
1538
  For local agents, publish Remembrance in the team marketplace and choose
871
1539
  `Required` or `Default On`. For cloud agents, also register the exact
872
- Remembrance endpoint under **Dashboard > Integrations & MCP** so the same Team
873
- MCP is distributed across cloud agents, the Agents window, IDE, and CLI. Add
874
- `remembrance.dev` to the enterprise sandbox network allowlist for command-
875
- based fallback paths.
876
-
877
- Cursor's current public enterprise documentation does not define a managed
878
- per-MCP-tool allowlist equivalent to Codex, Claude Code, Gemini CLI, or
879
- OpenClaw. Keep Cursor's normal tool approvals enabled and do not claim an
880
- undocumented control exists. Run `run_connection_doctor` and require
881
- organization scope on every enabled surface, then verify query, invocation,
882
- feedback, and private-contribution receipts; local plugin hooks and cloud-agent
883
- hooks can differ. See the official
1540
+ Remembrance endpoint as a Team MCP server under **Dashboard > Plugins & MCPs**
1541
+ so the same Team MCP is distributed across cloud agents, the Agents window,
1542
+ IDE, and CLI. Add `remembrance.dev` to the enterprise sandbox network
1543
+ allowlist for command-based fallback paths.
1544
+
1545
+ Cursor's managed per-tool allowlist is `~/.cursor/permissions.json`,
1546
+ distributed through MDM: ship the five `mcpAllowlist` entries from "Highly
1547
+ Recommended: approve private submissions", the four private submit and retry
1548
+ tools and the local-only `capture_learning`. A distributed file replaces each
1549
+ user's file and its in-app MCP allowlist, so merge these entries with every
1550
+ other entry and key the organization relies on, such as `terminalAllowlist`,
1551
+ `approvalMode`, and `autoReview`. A team Run Mode configuration overrides
1552
+ local `permissions.json` files, and the per-server tools field under
1553
+ **Team Settings > MCP Configuration** limits which tools may run but does not
1554
+ run them without asking. Keep the Auto-review or Allowlist Run Mode rather
1555
+ than Run Everything. Run `run_connection_doctor` and
1556
+ require organization scope on every enabled surface, then verify query,
1557
+ invocation, feedback, and private-contribution receipts; local plugin hooks and
1558
+ cloud-agent hooks can differ. See the official
1559
+ [permissions file](https://cursor.com/docs/reference/permissions),
1560
+ [Run Modes](https://cursor.com/docs/agent/security/run-modes),
884
1561
  [team plugin modes](https://cursor.com/changelog/05-01-26),
885
1562
  [Team MCP distribution](https://cursor.com/changelog/team-marketplace-updates),
886
1563
  [sandbox network controls](https://cursor.com/changelog/2-5), and
@@ -890,12 +1567,15 @@ hooks can differ. See the official
890
1567
 
891
1568
  Register exactly `https://remembrance.dev/api/mcp` or the exact local
892
1569
  `npx @remembrance-ai/mcp-server` command. Use the recommended organization
893
- tool list above when the client supports tool filtering. Keep normal approval
894
- behavior for non-read-only calls unless unattended organization-private
895
- contribution is explicitly approved. A client with no server/tool policy must
896
- use its existing destination control or the zero-network handoff. Supply the
1570
+ tool list above when the client supports tool filtering. Supply the
897
1571
  organization key through the client's secret/header mechanism, then run
898
1572
  `run_connection_doctor` and require organization scope before private writes.
1573
+ Keep normal approval behavior for other non-read-only calls, and persist
1574
+ approval only for the four private submit and retry tools (on hosted MCP, the
1575
+ lesson submit), plus the local-only `capture_learning` on a local server that
1576
+ asks before it, as in the Highly Recommended step. A client with no
1577
+ server/tool policy must use its existing destination control or the
1578
+ zero-network handoff.
899
1579
 
900
1580
  If any host still denies the export, that denial remains authoritative. The
901
1581
  portable local handoff and dashboard import work identically for Codex, Claude
@@ -1005,6 +1685,13 @@ not inherit shell exports:
1005
1685
  }
1006
1686
  ~~~
1007
1687
 
1688
+ A server you register yourself under the name `remembrance`, local or hosted,
1689
+ takes the standalone approval forms from "Highly Recommended: approve private
1690
+ submissions": `[mcp_servers.remembrance.tools.<tool>]` tables in Codex,
1691
+ `mcp__remembrance__<tool>` rules in Claude Code (for example after
1692
+ `claude mcp add`), and `remembrance:<tool>` entries in Cursor. A hosted server
1693
+ needs only `submit_private_lesson_candidate`.
1694
+
1008
1695
  ## Skill-only install
1009
1696
 
1010
1697
  For skills.sh-compatible runtimes (or any Agent Skills provider) that can load
@@ -1087,14 +1774,20 @@ session skills.
1087
1774
  `capture_learning.lesson` followed by the exact returned action and a
1088
1775
  private draft receipt. On hosted/legacy MCP, require a `failure_report`
1089
1776
  through submit_remembrance. This validates both capability states without
1090
- mixing their schemas.
1777
+ mixing their schemas. With an organization key and the Highly Recommended
1778
+ approval in place, neither the capture nor the private submission may
1779
+ prompt. A prompt for a submit or retry tool means its approval is missing or
1780
+ uses the wrong tool names; one for `capture_learning` means only that its
1781
+ local-only entry is missing, and is expected where the organization leaves
1782
+ the capture to Auto-review or a person, as managed Codex may.
1091
1783
  12. If using an org key, list and invoke an org-only skill or private overlay
1092
1784
  that should not appear anonymously.
1093
1785
  13. With an organization submission key, submit one disposable redacted skill.
1094
1786
  Current local MCP must use `capture_learning.private_skill` followed by
1095
1787
  submit_private_skill_candidate; hosted/legacy MCP must use
1096
1788
  propose_private_skill. Verify it appears only in that organization's review
1097
- queue. In a separate negative scenario, simulate a
1789
+ queue and, on local MCP with the approval in place, that it needed no host
1790
+ prompt. In a separate negative scenario, simulate a
1098
1791
  host-policy denial and verify the plugin reports the fixed content-free alert
1099
1792
  once, persists no blocked content, performs no retry, and creates no handoff.
1100
1793
  Test queue_private_skill_import only as a separate administrator-requested
@@ -1154,6 +1847,27 @@ session skills.
1154
1847
  --probe", and restart OpenClaw after plugin install/config changes.
1155
1848
  - "Claude desktop ignores env vars": put env in the user-scoped Claude settings
1156
1849
  that the desktop app reads, then fully quit and relaunch.
1850
+ - "Every private submission asks for approval" or "a headless run denies
1851
+ private submissions": report the blocked submission once as not submitted.
1852
+ Then ask the user (for managed settings, the administrator) to apply or fix
1853
+ the Highly Recommended approval; never change host settings or answer the
1854
+ host's approval yourself, and only after they confirm, send the retained
1855
+ draft through its exact submit or retry action.
1856
+ `inspect_private_learning_outbox` lists each draft with its `state`,
1857
+ `attempts`, and `next_retry_at`: a draft the host stopped before sending,
1858
+ a lesson still `awaiting_authorization` with 0 attempts or a skill still
1859
+ `ready`, needs its submit action, and a `retry_scheduled` draft its retry
1860
+ action once `next_retry_at` has passed. A prompt or denial naming a
1861
+ submit or retry tool means its approval is missing or names the wrong tools:
1862
+ a Claude Code plugin install needs
1863
+ `mcp__plugin_remembrance_remembrance__<tool>` rules, not
1864
+ `mcp__remembrance__<tool>`. One naming `capture_learning` means only that
1865
+ its local-only entry is missing, and is expected where the organization
1866
+ leaves the capture to Auto-review or a person, as managed Codex may: under
1867
+ managed Codex `writes`, approving `capture_learning` is an optional
1868
+ administrator decision (with it, Auto-review never sees the lesson content),
1869
+ not a fix to ask for. `run_connection_doctor` cannot see a persisted
1870
+ approval.
1157
1871
  - "Host policy denied private repository export": this is not a Remembrance
1158
1872
  API failure. An administrator must narrowly approve the Remembrance MCP
1159
1873
  server, destination, and private contribution action. Otherwise use the