@remembrance-ai/opencode-plugin 0.2.0 → 0.2.2

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/opencode.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "command": [
7
7
  "npx",
8
8
  "-y",
9
- "@remembrance-ai/mcp-server@0.2.0"
9
+ "@remembrance-ai/mcp-server@0.2.2"
10
10
  ],
11
11
  "enabled": true,
12
12
  "environment": {
@@ -16,6 +16,6 @@
16
16
  }
17
17
  },
18
18
  "plugin": [
19
- "@remembrance-ai/opencode-plugin@0.2.0"
19
+ "@remembrance-ai/opencode-plugin@0.2.2"
20
20
  ]
21
21
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remembrance-ai/opencode-plugin",
3
- "version": "0.2.0",
3
+ "version": "0.2.2",
4
4
  "license": "Apache-2.0",
5
5
  "description": "opencode plugin for Remembrance session hooks, tool observation, and contribution nudges.",
6
6
  "type": "module",
@@ -8622,7 +8622,7 @@ var MCP_CORE_INSTRUCTIONS = "Remembrance is shared operational memory for agents
8622
8622
  - Send summaries and hashes, never secrets, credentials, private URLs, raw logs, or proprietary content.
8623
8623
  - If the host blocks a Remembrance action, report it once as not submitted and do not retry it another way.
8624
8624
  ` + LEGACY_CORE_FINISH_RULE;
8625
- var REMEMBRANCE_MCP_SERVER_INSTRUCTIONS = MCP_CORE_INSTRUCTIONS + MCP_DETAILS_HEADING + "Before claiming that Remembrance is anonymous, unconfigured, partially active, or missing an organization key, call run_connection_doctor for the transport you will actually use. It performs a safe catalog read and returns exact bounded remediation without submitting content. Use get_connection_status only when you need the underlying transport and lifecycle fields. An unset REMEMBRANCE_API_KEY does not prove that a local plugin is anonymous because local hooks and bundled MCP may read ~/.config/remembrance/config.json. Conversely, hosted MCP cannot read that local file. Anonymous curl or browser probes describe only those requests, not plugin authentication. Never print or request the raw key. When the user explicitly names an authorized Remembrance skill or supplies a remembrance://skills/{slug} URI, resolve ambiguous names with list_skills using its normalized slug-prefix filter, then call invoke_skill with an exact returned slug. Never guess a slug. list_skills is catalog resolution, not relevance search; use query_skills when the user wants relevant candidates rather than a known selection. invoke_skill rechecks authorization and organization policy, resolves the current reviewed version, and returns the only full instruction body. Catalog listings and MCP resource reads are lightweight handles, not skill use. Do not run query_skills merely to rediscover that explicit selection, and do not submit query-fit feedback for it. After meaningful direct use, follow the returned task-outcome and post-use feedback instructions once. BEFORE non-trivial service/API/tool/library/workflow/UI/review/test/security/deployment work, call query_skills to reuse proven skills and resources instead of rediscovering them. A local repository change still qualifies when it involves a reusable workflow or lesson; skip only genuinely trivial throwaway edits and one-off facts. For short follow-ups such as 'fix these issues', 'continue', or 'try again', infer the concrete task, domain, and constraints from the full conversation and still call query_skills; do not wait for the current prompt to repeat trigger keywords. Treat match_tier as a decision aid, then inspect why_matched and applicability before opening a result. These fields show bounded matched terms/capabilities, constraint text overlap, qualitative lexical/semantic evidence, declared scope, use conditions, and exclusions without exposing unstable raw ranking scores. satisfied_constraints and missed_constraints describe textual overlap only, not verified compliance or proven capability gaps. Discard an unlikely or irrelevant corner-case result and report fit: poor; do not force its use. For a remaining high match, call get_skill or get_resource before custom work and pass the returned query_id/result_id so the surfaced-to-fetch funnel closes; possible and exploratory matches are optional. The response also includes approximate context tokens, verified uses, risk, tags, permissions, dependencies, and contraindications so you can weigh the detour safely. Honor query_skills.skill_access on every response. When policy is org_only, use only returned organization skills and never substitute bundled or live public skill references; if an organization key is configured and the query is unavailable, fail closed because the policy cannot be confirmed. AFTER query_skills, call submit_query_feedback once with one complete set of explicit good/partial/poor judgments using the returned query_id and result_id values; leave unrated results neutral, and remember that a poor query match is not the same as a globally bad skill. Reuse the same organization or anonymous auth scope as the query. AFTER you actually use a skill or resource, close the post-use loop with submit_feedback (useful true/false plus a one-line lesson and the originating query_id/result_id; it returns a ready submit_remembrance payload), then submit_remembrance if the lesson is reusable. If nothing fit and you built a new workflow, use propose_private_skill for an organization-private candidate. With an organization key, propose_skill_idea also remains organization-private. Never remove, suppress, or bypass that key to force a public submission; submit privately, then use the reviewed public-propagation flow when the organization chooses to share it. When delegating, pass the selected slug, exact version, query_id, and result_id to the subagent; it should invoke/fetch that result or run its own full-context query. The parent reports the terminal outcome unless the subagent creates its own invocation. Route memory deliberately: host-local memory is for facts about this human, repository, or machine; Remembrance is for generalized lessons another approved organization agent would otherwise rediscover. A local-memory write does not satisfy organization-shared capture. Before finishing any reusable task, self-check for a missed query. If you catch your own mistake, the user catches one, CI/deploy fails, a security issue appears, or you fix a release/versioning miss, submit a failure_report remembrance even if no skill was used; raw MCP clients have no plugin Stop hook to remind you later. After an observed host-policy denial, report only the affected action once: 'The host blocked this Remembrance action. Do not treat it as submitted. Earlier successful actions are unaffected; querying remains available.' Do not retry the blocked content through another transport or claim submission. If submit_query_feedback or submit_feedback was denied before transport and acknowledge_feedback_denial is available, call that local-only tool with the exact tool, query_id, result_id only for submit_feedback, and reason host_policy_denied. It suppresses that blocked reminder without claiming feedback was submitted, changing approvals, or blocking future feedback. When host events are unavailable, use this explicit acknowledgment; do not infer denial from API errors. Do not repeat warnings already reported. Attach evidence (reproduction detail, artifact hashes, or an attestation); evidence-less public reports wait in unverified intake until corroborated. Redact secrets, private URLs, credentials, raw logs, and proprietary content; submit summaries and hashes, not raw traces.";
8625
+ var REMEMBRANCE_MCP_SERVER_INSTRUCTIONS = MCP_CORE_INSTRUCTIONS + MCP_DETAILS_HEADING + "Before claiming that Remembrance is anonymous, unconfigured, partially active, or missing an organization key, call run_connection_doctor for the transport you will actually use. It performs a safe catalog read and returns exact bounded remediation without submitting content. Use get_connection_status only when you need the underlying transport and lifecycle fields. An unset REMEMBRANCE_API_KEY does not prove that a local plugin is anonymous because local hooks and bundled MCP may read ~/.config/remembrance/config.json. Conversely, hosted MCP cannot read that local file. Anonymous curl or browser probes describe only those requests, not plugin authentication. Never print or request the raw key. When the user explicitly names an authorized Remembrance skill or supplies a remembrance://skills/{slug} URI, resolve ambiguous names with list_skills using its normalized slug-prefix filter, then call invoke_skill with an exact returned slug. Never guess a slug. list_skills is catalog resolution, not relevance search; use query_skills when the user wants relevant candidates rather than a known selection. invoke_skill rechecks authorization and organization policy, resolves the current reviewed version, and returns the only full instruction body. Catalog listings and MCP resource reads are lightweight handles, not skill use. Do not run query_skills merely to rediscover that explicit selection, and do not submit query-fit feedback for it. After meaningful direct use, follow the returned task-outcome and post-use feedback instructions once. BEFORE non-trivial service/API/tool/library/workflow/UI/review/test/security/deployment work, call query_skills to reuse proven skills and resources instead of rediscovering them. A local repository change still qualifies when it involves a reusable workflow or lesson; skip only genuinely trivial throwaway edits and one-off facts. For short follow-ups such as 'fix these issues', 'continue', or 'try again', infer the concrete task, domain, and constraints from the full conversation and still call query_skills; do not wait for the current prompt to repeat trigger keywords. Treat match_tier as a decision aid, then inspect why_matched and applicability before opening a result. These fields show bounded matched terms/capabilities, constraint text overlap, qualitative lexical/semantic evidence, declared scope, use conditions, and exclusions without exposing unstable raw ranking scores. satisfied_constraints and missed_constraints describe textual overlap only, not verified compliance or proven capability gaps. Discard an unlikely or irrelevant corner-case result and report fit: poor; do not force its use. For a remaining high match, call get_skill or get_resource before custom work and pass the returned query_id/result_id so the surfaced-to-fetch funnel closes; possible and exploratory matches are optional. The response also includes approximate context tokens, verified uses, risk, tags, permissions, dependencies, and contraindications so you can weigh the detour safely. Honor query_skills.skill_access on every response. When policy is org_only, use only returned organization skills and never substitute bundled or live public skill references; if an organization key is configured and the query is unavailable, fail closed because the policy cannot be confirmed. AFTER query_skills, call submit_query_feedback once with one complete set of explicit good/partial/poor judgments using the returned query_id and result_id values; leave unrated results neutral, and remember that a poor query match is not the same as a globally bad skill. Reuse the same organization or anonymous auth scope as the query. AFTER you actually use a skill or resource, close the post-use loop with submit_feedback (useful true/false plus a one-line lesson and the originating query_id/result_id; it returns a ready submit_remembrance payload), then submit_remembrance if the lesson is reusable. If nothing fit and you built a new workflow, use propose_private_skill for an organization-private candidate. With an organization key, propose_skill_idea also remains organization-private. Never remove, suppress, or bypass that key to force a public submission; submit privately, then use the reviewed public-propagation flow when the organization chooses to share it. When delegating, pass the selected slug, exact version, query_id, and result_id to the subagent; it should invoke/fetch that result or run its own full-context query. The parent reports the terminal outcome unless the subagent creates its own invocation. Route memory deliberately: host-local memory is for facts about this human, repository, or machine; Remembrance is for generalized lessons another approved organization agent would otherwise rediscover. A local-memory write does not satisfy organization-shared capture. Before finishing any reusable task, self-check for a missed query. If you catch your own mistake, the user catches one, CI/deploy fails, a security issue appears, or you fix a release/versioning miss, submit a failure_report remembrance even if no skill was used; raw MCP clients have no plugin Stop hook to remind you later. After an observed host-policy denial, report only the affected action once: 'The host blocked this Remembrance action. Do not treat it as submitted. Earlier successful actions are unaffected; querying remains available.' Do not retry the blocked content through another transport or claim submission. If submit_query_feedback or submit_feedback was denied before transport and acknowledge_feedback_denial is available, call that local-only tool with the exact tool, query_id, result_id only for submit_feedback, and reason host_policy_denied. It suppresses that blocked reminder without claiming feedback was submitted, changing approvals, or blocking future feedback. When host events are unavailable, use this explicit acknowledgment; do not infer denial from API errors. Do not repeat warnings already reported. Attach evidence (reproduction detail, artifact hashes, or an attestation); evidence-less public reports wait in unverified intake until corroborated. Redact secrets, private URLs, credentials, raw logs, and proprietary content; submit summaries and hashes, not raw traces. Keep routine organization query-fit and categorical post-use ratings minimal: use the Remembrance-issued query_id/result_id values, judgments, required reasons, and an idempotency key when needed. Do not automatically attach internal artifact hashes, task text, source snippets, or raw logs to routine ratings. Optional evidence is not required for these ratings; public substantive reports still need evidence. Standing approval for these two feedback tools does not authorize reusable content submission or override host policy, organization scope, or processing consent.";
8626
8626
  var LEGACY_POST_QUERY_GUIDANCE = "AFTER query_skills, call submit_query_feedback once with one complete set of explicit good/partial/poor judgments using the returned query_id and result_id values; leave unrated results neutral, and remember that a poor query match is not the same as a globally bad skill. Reuse the same organization or anonymous auth scope as the query. AFTER you actually use a skill or resource, close the post-use loop with submit_feedback (useful true/false plus a one-line lesson and the originating query_id/result_id; it returns a ready submit_remembrance payload), then submit_remembrance if the lesson is reusable. If nothing fit and you built a new workflow, use propose_private_skill for an organization-private candidate. With an organization key, propose_skill_idea also remains organization-private. Never remove, suppress, or bypass that key to force a public submission; submit privately, then use the reviewed public-propagation flow when the organization chooses to share it. ";
8627
8627
  var PRIVATE_CAPTURE_POST_QUERY_GUIDANCE = "AFTER query_skills, call submit_query_feedback once with one complete set of explicit good/partial/poor judgments using the returned query_id and result_id values; leave unrated results neutral, and remember that a poor query match is not the same as a globally bad skill. Reuse the same organization scope as the query. AFTER actually using a skill or resource, call submit_feedback with categorical usefulness and the originating query_id/result_id; reusable prose does not belong in that call. Capture each new reusable item once with capture_learning using lesson, private_skill, or preference, then follow its exact next_action or bounded agent_recovery instructions. Reformulation updates the same retained draft after fresh local inspection; it does not authorize submitting held content, inventing missing instructions, or changing destination. A complete workflow must include complete reviewed instructions in private_skill; do not compress it into a lesson. Querying, opening a returned result, bounded feedback, and local encrypted capture are routine actions: perform them silently without asking for separate conversational permission. Only the exact private network submit or retry action may require host approval; when that lane is already approved, continue without another prompt. capture_learning chooses the organization-private lane and never accepts an organization, destination, visibility, credential, or public fallback. Its preference route is routing only: it persists nothing locally (persisted_locally is false) and record_preference is the whole remaining lifecycle, so read that response instead of assuming the preference is live. record_preference does not promise activation, and an organization using customer-held encryption is refused before persistence with HTTP 422 and code customer_held_preference_processing_deferred: do not retry it, do not offer preference compatibility feedback there, and do not report the preference as captured. ";
8628
8628
  var LEGACY_FINISH_GUIDANCE = "Before finishing any reusable task, self-check for a missed query. If you catch your own mistake, the user catches one, CI/deploy fails, a security issue appears, or you fix a release/versioning miss, submit a failure_report remembrance even if no skill was used; raw MCP clients have no plugin Stop hook to remind you later. ";
@@ -23828,7 +23828,7 @@ var seedSkills = [
23828
23828
  summary: "Operational setup and troubleshooting workflow for Remembrance across Claude Code, Codex, OpenClaw, Cursor, Gemini, MCP, REST, skill-only installs, enterprise keys, and local agent identity.",
23829
23829
  status: "active",
23830
23830
  visibility: "public",
23831
- version: "0.1.37",
23831
+ version: "0.1.38",
23832
23832
  domains: ["agent-skills", "mcp", "resource-discovery"],
23833
23833
  tags: [
23834
23834
  "remembrance",
@@ -23879,7 +23879,7 @@ var seedSkills = [
23879
23879
  "gemini",
23880
23880
  "rest"
23881
23881
  ],
23882
- version: "0.1.37",
23882
+ version: "0.1.38",
23883
23883
  status: "active",
23884
23884
  visibility: "public",
23885
23885
  providers: ["codex", "claude", "cursor", "openclaw", "generic"],
@@ -24085,6 +24085,51 @@ show the same review screen again; never use the automation-only trust bypass
24085
24085
  for normal installation. Fully restart Codex, submit one prompt, use one
24086
24086
  Remembrance tool, complete one turn, and run \`run_connection_doctor\`.
24087
24087
 
24088
+ ### Optional unattended routine feedback in Codex
24089
+
24090
+ After the user explicitly opts in, add only these two tool overrides to the
24091
+ user-level \`~/.codex/config.toml\`. This approval persists across future
24092
+ sessions on this installation until removed; installation alone does not grant
24093
+ it. Merge with existing tables rather than duplicating them:
24094
+
24095
+ ~~~toml
24096
+ [plugins."remembrance@remembrance".mcp_servers.remembrance.tools.submit_query_feedback]
24097
+ approval_mode = "approve"
24098
+
24099
+ [plugins."remembrance@remembrance".mcp_servers.remembrance.tools.submit_feedback]
24100
+ approval_mode = "approve"
24101
+ ~~~
24102
+
24103
+ Use this opt-in for an organization-authenticated local plugin whose
24104
+ \`submit_feedback\` schema is categorical and rejects \`lesson\`. Query-fit
24105
+ ratings send Remembrance-issued query/result IDs, categorical verdicts, and
24106
+ required reasons; post-use ratings send the skill slug, those correlation IDs, usefulness/rating,
24107
+ and stable idempotency. Keep optional notes and evidence out of routine
24108
+ ratings: do not automatically attach internal receipt hashes, task prose,
24109
+ source content, raw logs, or private URLs. Public substantive reports retain
24110
+ their separate evidence requirements; reusable private lessons use
24111
+ \`capture_learning\` and its exact returned action.
24112
+
24113
+ These are real writes, not read-only diagnostics. Post-use feedback can enter
24114
+ verification and incur processing cost under the existing organization policy.
24115
+ The two overrides do not approve private lesson/skill submission, publishing,
24116
+ deletion, reset, preference changes, or other tools. They do not widen the
24117
+ server's enabled tool set or override managed policy, guardian decisions,
24118
+ network restrictions, or organization processing grants. Do not set the whole
24119
+ server's approval default to \`approve\` for this purpose.
24120
+
24121
+ Tool overrides persist when authentication or schemas change. Remove or
24122
+ re-review both approvals before switching to anonymous or hosted transport,
24123
+ enabling legacy broad writes, or changing the organization or destination.
24124
+
24125
+ To revoke this opt-in, remove only these two tool-level approval entries;
24126
+ the inherited approval policy applies again. Reconnect the plugin or start a
24127
+ fresh Codex session if the current host does not reload config, then verify
24128
+ with a minimal eligible rating. A healthy connection doctor verifies the
24129
+ connection, not that host approval policy permits feedback. A denial means
24130
+ that rating was not submitted; acknowledge it locally and do not retry through
24131
+ another transport. See the [official installed-server policy guide](https://developers.openai.com/plugins/build/plugins#configure-installed-server-policy).
24132
+
24088
24133
  OpenClaw:
24089
24134
 
24090
24135
  ~~~bash
@@ -28044,6 +28089,13 @@ var categoricalSubmitFeedbackMaxSerializedBytes = boundedWritePayloadCeilingWith
28044
28089
  categoricalSubmitFeedbackInputSchema[BOUNDED_JSON_BYTES_EXTENSION] = categoricalSubmitFeedbackMaxSerializedBytes;
28045
28090
  var categoricalSubmitFeedbackRuntime = freezeToolRuntime({
28046
28091
  ...canonicalSubmitFeedbackRuntime.definition,
28092
+ description: `${canonicalSubmitFeedbackRuntime.definition.description} Routine organization feedback needs only the skill identity, categorical rating, and Remembrance-issued correlation IDs. Do not automatically attach internal artifact hashes or task prose; include optional richer evidence only when the current task authorizes it.`,
28093
+ // This profile exists only for a configured organization's private feedback.
28094
+ // It remains a networked write; only the public/legacy profile is open-world.
28095
+ annotations: {
28096
+ ...canonicalSubmitFeedbackRuntime.definition.annotations,
28097
+ openWorldHint: false
28098
+ },
28047
28099
  schemaProfile: toolSchemaProfileId(
28048
28100
  "submit_feedback",
28049
28101
  "input",
@@ -28436,18 +28488,32 @@ function inputSchemaFor(schema, name, maxSerializedBytes) {
28436
28488
  const resolved = definitions?.[name] ?? converted;
28437
28489
  normalizeBoundedWriteJsonSchema(resolved, name);
28438
28490
  if (name === "acknowledge_feedback_denial") {
28491
+ const properties = resolved.properties;
28439
28492
  return {
28440
28493
  type: "object",
28441
- properties: resolved.properties,
28494
+ properties,
28442
28495
  additionalProperties: false,
28443
28496
  oneOf: [
28444
28497
  {
28445
- properties: { tool: { const: "submit_query_feedback" } },
28498
+ type: "object",
28499
+ properties: {
28500
+ tool: { const: "submit_query_feedback" },
28501
+ query_id: properties.query_id,
28502
+ reason: properties.reason
28503
+ },
28504
+ additionalProperties: false,
28446
28505
  required: ["tool", "query_id", "reason"],
28447
28506
  not: { required: ["result_id"] }
28448
28507
  },
28449
28508
  {
28450
- properties: { tool: { const: "submit_feedback" } },
28509
+ type: "object",
28510
+ properties: {
28511
+ tool: { const: "submit_feedback" },
28512
+ query_id: properties.query_id,
28513
+ result_id: properties.result_id,
28514
+ reason: properties.reason
28515
+ },
28516
+ additionalProperties: false,
28451
28517
  required: ["tool", "query_id", "result_id", "reason"]
28452
28518
  }
28453
28519
  ]
@@ -67273,7 +67339,7 @@ function inspectPrivateLearningOutbox2(input, dependencies = {}) {
67273
67339
  }
67274
67340
  var MAX_REMOTE_RESPONSE_BYTES = 4 * 1024 * 1024;
67275
67341
  var DOCTOR_PROBE_TIMEOUT_MS = 7500;
67276
- var SERVER_VERSION = true ? "0.2.0" : "0.0.0-dev";
67342
+ var SERVER_VERSION = true ? "0.2.2" : "0.0.0-dev";
67277
67343
  var tools = toolDefinitions;
67278
67344
  var doctorCliRequested = process.argv[2] === "doctor";
67279
67345
  var nativeContextCliRequested = process.argv[2] === "--native-context";
@@ -339,7 +339,8 @@ Remembrance independently classifies the evidence after static safety,
339
339
  duplicate search, target existence, risk, verifier, and organization-policy
340
340
  checks:
341
341
 
342
- - a universal correction or reusable detail can **amend** the target;
342
+ - a universal correction or reusable detail can **amend** the target when an
343
+ explicit authored instruction body or catalog change is supplied;
343
344
  - a stable runtime, version, platform, framework, scale, or task-stage
344
345
  condition can become a scoped **specialization**;
345
346
  - a genuinely different approach can become a **strategy fork**;
@@ -547,6 +548,22 @@ clients that do not advertise the capability retain the optional lesson and
547
548
  `next_step.submit_remembrance_payload` contract; REST-only agents can sign that
548
549
  payload by following `references/attestation-rest.md`.
549
550
 
551
+ Keep routine organization feedback minimal: use Remembrance-issued query/result
552
+ IDs, the skill slug, categorical usefulness/rating, and stable idempotency.
553
+ Query-fit feedback likewise needs its correlation IDs, verdicts, and required
554
+ reasons. Omit optional notes and evidence unless the user separately requested that richer
555
+ submission. Do not automatically attach internal receipt hashes, task prose,
556
+ source content, raw logs, or private URLs to a routine rating. Feedback is a
557
+ real write and can enter verification with processing cost; it is not a
558
+ read-only diagnostic. User opt-in for unattended ratings approves only those
559
+ two feedback tools, not private capture submission or other writes, and cannot
560
+ override host or organization policy. See the setup reference for the narrow
561
+ Codex approval and revocation steps.
562
+
563
+ Tool overrides persist when authentication or schemas change. Remove or
564
+ re-review both approvals before switching to anonymous or hosted transport,
565
+ enabling legacy broad writes, or changing the organization or destination.
566
+
550
567
  Always attach evidence to public submissions: concrete reproduction detail in
551
568
  `outcome.failure_modes`, `evidence.artifact_hashes` (sha256 of redacted logs,
552
569
  diffs, or screenshots), or an attestation. Evidence-less public reports are not
@@ -560,14 +577,22 @@ Repeated substantive feedback for the same skill may also return
560
577
  evidence candidate from the recent pattern and queued it for topology routing,
561
578
  normal verification, quality gates, versioning, and admin/enterprise review.
562
579
  Treat it as a receipt; it does not mean the live skill changed or predetermine
563
- whether the result will amend, specialize, fork, create, or remain evidence.
564
-
565
- `suggested_update` on a remembrance is honored: when the remembrance itself is
566
- accepted, Remembrance promotes it into a reviewed suggestion (`amend_skill`,
567
- `metadata_update`, `deprecate_skill`) or a new skill idea (`new_skill`) riding
568
- the normal verification and review pipeline. The promotion is a receipt too —
569
- the live skill changes only after review. `score_adjustment` is ignored:
570
- Remembrance computes all scoring deterministically.
580
+ the selected route. Synthesized review prose is not an authored parent
581
+ instruction or catalog patch; reviewed distinct-child routes stay separate.
582
+
583
+ On a remembrance, `suggested_update` hints of `amend_skill` or
584
+ `metadata_update` stay with the accepted evidence; they do not create an empty
585
+ publication suggestion. Explicit `deprecate_skill` and `new_skill` requests
586
+ still enter their existing reviewed lifecycles. A receipt never means the live
587
+ skill changed. `score_adjustment` is ignored: scoring is deterministic.
588
+
589
+ When you intend to change a parent's instructions or catalog, read
590
+ [the authored amendment examples](references/remembrance-payloads.md#authored-parent-amendments).
591
+ Submit the explicit change through the existing suggestion/idea review lane;
592
+ summary, diff and verifier prose are review context, not parent edits. A
593
+ missing authored parent change stays recoverable for review, and an identical
594
+ complete-body/catalog result creates no new skill version or semantic refresh.
595
+ Existing audience, consent, protection, target and review policy still apply.
571
596
 
572
597
  Legacy/raw MCP equivalent: `submit_remembrance`. Organization-capable local
573
598
  clients use `capture_learning.lesson`; broad remembrance submission is hidden
@@ -612,8 +637,8 @@ Good triggers include: the agent admits it missed a required step, the user
612
637
  catches a mistake, CI/deploy fails, a smoke/probe exposes a regression, or a
613
638
  release/versioning miss is fixed. Put the reusable lesson in `lesson`, the
614
639
  concrete failure class in `outcome.failure_modes`, and use
615
- `suggested_update.kind` only when an existing skill or a new skill should change
616
- after review.
640
+ `suggested_update.kind` only to describe an intended reviewed operation, not as
641
+ a substitute for an authored parent change.
617
642
 
618
643
  Use `agent.provider: "claude"` for a skill-only Claude install. Use
619
644
  `evidence.attestation.provider: "other"` for independent REST TOFU
@@ -44,16 +44,77 @@ use categorical `submit_feedback` independently.
44
44
 
45
45
  Legacy `attestation_token_hash` is no longer accepted. Verified trust uses `POST /api/v1/agent/attest/challenge` followed by a plugin-signed `evidence.attestation` object.
46
46
 
47
- `suggested_update` describes a requested content operation; it does not decide
48
- the final skill topology. When the remembrance itself is accepted, Remembrance
49
- creates reviewable evidence through the normal verification pipeline. The
50
- topology router may amend the target, create a scoped specialization, create a
51
- strategy fork or independent skill, record a typed preference, retain evidence
52
- without mutation, or hold for review. The live skill changes only after the
47
+ `suggested_update` describes an intended operation; it does not decide the
48
+ final topology or supply a parent edit. An accepted remembrance retains
49
+ `amend_skill` and `metadata_update` hints as evidence without creating an empty
50
+ publication suggestion. Explicit `deprecate_skill` and `new_skill` requests
51
+ still enter their existing reviewed lifecycles. For an authored parent change,
52
+ use the suggestion/idea lane below. The live skill changes only after the
53
53
  selected route clears its safety, quality, target, policy, and version guards.
54
54
  `score_adjustment` is ignored (scoring is deterministic); use `kind: "none"`
55
55
  when no content operation is proposed.
56
56
 
57
+ ## Authored parent amendments
58
+
59
+ For `submit_suggestion` / `POST /api/v1/agent/suggestions`, send the complete
60
+ intended instruction body in `payload.skill_md`, `payload.proposed_skill_md`
61
+ or `payload.full_skill_md`. Start from the current authorized skill body and
62
+ preserve instructions you are not changing; do not send only a diff or an
63
+ isolated addition as the replacement body. For a parent amendment, `summary`,
64
+ `diff_text` and a verifier's `proposed_patch` explain the review, but are never
65
+ appended as instructions or implicitly saved as catalog guidance.
66
+
67
+ This synthetic example replaces the complete body of a small public skill:
68
+
69
+ ```json
70
+ {
71
+ "skill_slug": "synthetic-state-check",
72
+ "suggestion_type": "amend_skill",
73
+ "summary": "Check the response status before interpreting the result.",
74
+ "diff_text": "Review context: add the response-status check.",
75
+ "payload": {
76
+ "skill_md": "# State check\n\nRead the current state. Check the response status before interpreting the result. Compare it with the expected state and report any difference.\n"
77
+ }
78
+ }
79
+ ```
80
+
81
+ For a catalog-only change, submit the existing structured catalog fields
82
+ explicitly. For example:
83
+
84
+ ```json
85
+ {
86
+ "skill_slug": "synthetic-state-check",
87
+ "suggestion_type": "metadata_update",
88
+ "summary": "Describe the skill's existing response-status check.",
89
+ "payload": {
90
+ "summary": "Compare the current and expected state after checking the response status."
91
+ }
92
+ }
93
+ ```
94
+
95
+ These are payload-shape examples, not permission to submit public content.
96
+ Keep organization authentication and private protection on organization
97
+ requests; never remove a key to make a private amendment public. Current
98
+ organization-capable clients still use their authorized local capture/router
99
+ and only its returned actions. These examples do not add a direct mutation
100
+ tool or bypass that contract. Preserve the existing organization array
101
+ replacement/merge rules for catalog updates.
102
+
103
+ For an idea routed to amend a parent, use its existing `proposed_skill_md` or
104
+ explicit `proposed_metadata` fields. Authored input does not remove an existing
105
+ target-resolution or protection hold. A parent amendment without authored input
106
+ is retained in a recoverable review hold: resubmit the complete intended body
107
+ or structured catalog change through the same authorized review lane. A changed
108
+ payload is a new logical submission and needs its own idempotency key; retries
109
+ of that submission reuse its key. A reviewer may instead select `evidence_only`
110
+ to retain the comment without publishing. Do not report a replacement as
111
+ submitted or a skill as changed until the corresponding receipt proves it.
112
+
113
+ An accepted identical body/catalog result is an audited no-op: it preserves
114
+ the live version and does not enqueue semantic refresh. Explicit deprecation,
115
+ new-skill proposals and reviewed distinct-child routes retain their existing
116
+ contracts; they are not universally held by the parent-amendment rule.
117
+
57
118
  Provider fields are intentionally split:
58
119
 
59
120
  - `agent.provider` describes the calling runtime: `codex`, `cursor`, `claude`,
@@ -213,9 +274,11 @@ predetermined metadata update or a live mutation:
213
274
  }
214
275
  ```
215
276
 
216
- Do not submit a duplicate suggestion for the same pattern. Wait for the
217
- topology, verification, review, and versioning result before assuming the
218
- active skill changed.
277
+ Do not submit a duplicate suggestion for the same pattern. Its review prose
278
+ does not supply an authored parent catalog patch or instruction body. If you
279
+ separately intend a parent change, use the authored amendment lane above and
280
+ the existing review policy; do not assume the evidence receipt changed the
281
+ active skill.
219
282
 
220
283
  Local identity recovery: the persisted key file
221
284
  `~/.config/remembrance/agent-key.json` is a private key. Back it up like an
@@ -135,6 +135,51 @@ show the same review screen again; never use the automation-only trust bypass
135
135
  for normal installation. Fully restart Codex, submit one prompt, use one
136
136
  Remembrance tool, complete one turn, and run `run_connection_doctor`.
137
137
 
138
+ ### Optional unattended routine feedback in Codex
139
+
140
+ After the user explicitly opts in, add only these two tool overrides to the
141
+ user-level `~/.codex/config.toml`. This approval persists across future
142
+ sessions on this installation until removed; installation alone does not grant
143
+ it. Merge with existing tables rather than duplicating them:
144
+
145
+ ~~~toml
146
+ [plugins."remembrance@remembrance".mcp_servers.remembrance.tools.submit_query_feedback]
147
+ approval_mode = "approve"
148
+
149
+ [plugins."remembrance@remembrance".mcp_servers.remembrance.tools.submit_feedback]
150
+ approval_mode = "approve"
151
+ ~~~
152
+
153
+ Use this opt-in for an organization-authenticated local plugin whose
154
+ `submit_feedback` schema is categorical and rejects `lesson`. Query-fit
155
+ ratings send Remembrance-issued query/result IDs, categorical verdicts, and
156
+ required reasons; post-use ratings send the skill slug, those correlation IDs, usefulness/rating,
157
+ and stable idempotency. Keep optional notes and evidence out of routine
158
+ ratings: do not automatically attach internal receipt hashes, task prose,
159
+ source content, raw logs, or private URLs. Public substantive reports retain
160
+ their separate evidence requirements; reusable private lessons use
161
+ `capture_learning` and its exact returned action.
162
+
163
+ These are real writes, not read-only diagnostics. Post-use feedback can enter
164
+ 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.
170
+
171
+ Tool overrides persist when authentication or schemas change. Remove or
172
+ re-review both approvals before switching to anonymous or hosted transport,
173
+ enabling legacy broad writes, or changing the organization or destination.
174
+
175
+ To revoke this opt-in, remove only these two tool-level approval entries;
176
+ the inherited approval policy applies again. Reconnect the plugin or start a
177
+ fresh Codex session if the current host does not reload config, then verify
178
+ with a minimal eligible rating. A healthy connection doctor verifies the
179
+ connection, not that host approval policy permits feedback. A denial means
180
+ that rating was not submitted; acknowledge it locally and do not retry through
181
+ another transport. See the [official installed-server policy guide](https://developers.openai.com/plugins/build/plugins#configure-installed-server-policy).
182
+
138
183
  OpenClaw:
139
184
 
140
185
  ~~~bash