@remembrance-ai/opencode-plugin 0.1.77 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -146,62 +146,118 @@ Do not use this skill when:
146
146
  preference needs a stable `<effect>.<concept>` key, stable value, short label,
147
147
  normalized behavior, `presentation|workflow|strategy_selection` effect,
148
148
  `prefer|avoid` strength, and definition version. Use `scope: "auto"` unless
149
- the user explicitly limited it to a project, skill, or domain. Send only
150
- redacted hashes, never raw prompt or feedback text. A missing principal
151
- session means personal preferences are unavailable, not that the query
152
- failed.
149
+ the user explicitly limited it to a project, skill, or domain, or you are
150
+ adapting another agent family's preference as described below. Send only
151
+ redacted hashes, never raw prompt or feedback text. When `capture_learning`
152
+ is available, route a durable preference through its `preference` shape and
153
+ invoke only the returned `record_preference` action. That route persists
154
+ nothing locally (`persisted_locally: false`), so `record_preference` is the
155
+ whole remaining lifecycle: read `activated` and `normalized_activation_state`
156
+ instead of assuming the preference is live. An organization using
157
+ customer-held encryption is refused before persistence with HTTP 422 and code
158
+ `customer_held_preference_processing_deferred`; do not retry it, do not offer
159
+ preference compatibility feedback there, and do not report the preference as
160
+ captured. A missing principal session means personal preferences are
161
+ unavailable, not that the query failed. An empty `effective_preferences` list
162
+ only proves an empty profile when the accompanying `personalization` block
163
+ says `available: true`; `organization_scope_only` means the personal scopes
164
+ in `omitted_scopes` were never read, so a stored personal preference may
165
+ exist and simply not be listed.
166
+
167
+ Installation and member preferences reach every agent runtime on that
168
+ identity, so another agent family may have written one, and one preference
169
+ may address several families. Follow the part written for this host. A
170
+ preference that names a model, tool, or agent this host lacks, with no part
171
+ for this host, states another family's intent: apply the closest equivalent
172
+ this host supports and say which you used.
173
+ When none is safe to assume, because the intent is unclear or a substitute
174
+ would materially change cost, risk, data handling, or results, ask the
175
+ user; if you cannot ask, keep your default and say so. To keep an
176
+ adaptation, call `record_preference` with `scope: "member_runtime"`, the
177
+ same key, and a value, label, and behavior naming your equivalent; use
178
+ `source_category: "explicit_user"` only when the user confirmed it. Never
179
+ record it with `auto`, `installation`, or `member` scope, which would
180
+ override the original for the other family. If `member_runtime` is refused
181
+ because the installation is not linked to a member, keep the adaptation to
182
+ this task and say once that linking the installation lets it persist.
183
+
153
184
  6. Use the selected skill or resource. When delegating, pass its slug, `query_id`, and `result_id` to the subagent; the subagent must open that result or run its own full-context query before custom work.
154
- 7. After meaningful use, report task completion or abandonment with `report_task_outcome`. Remembrance accepts one terminal outcome per query or direct invocation; retry the same report with the same idempotency key instead of submitting a different later outcome. Use only result IDs from `task_outcome.eligible_result_ids`. Each result and bundle also carries `task_outcome_eligible`; `task_outcome.available` is true only when at least one result is eligible. One result ID attributes the outcome to that result. When two or three selected query results exactly match a returned bundle, include its `bundle_id` to attribute the outcome only to that bundle. Other multi-result combinations are accepted as funnel telemetry without proof or cohort attribution. Include success, latency, and detailed token totals only when the runtime exposes them. For Vercel AI Gateway work, include every `gen_` generation ID in `metering_reference`; Remembrance retrieves the authoritative records asynchronously, so caller totals never establish proof trust. Never include prompts, transcripts, outputs, source paths, or private URLs. Then submit quick feedback with the same `query_id` and `result_id`; if the feedback response includes `next_step.submit_remembrance_payload`, submit that full remembrance when the lesson should become reusable evidence. If it includes `feedback_pattern_suggestion`, Remembrance has already created a reviewable evidence candidate; do not submit a duplicate suggestion. Direct selections use post-use feedback only and are excluded from query-fit and reranker training.
155
- 8. Before finishing, self-check both halves of the loop: confirm that a relevant query actually happened, then check for high-value failure lessons. If the query was missed, run it from the full conversation before concluding. If a high match was surfaced but not opened, open it now or submit `fit: "poor"` query feedback with an explicit reason. If you caught your own mistake, the user caught one, CI/deploy failed, a security issue surfaced, or you fixed a release/versioning miss, capture the reusable lesson. With an authenticated organization and the private lesson tools available, use the two-stage private lesson lane described below for a compact evidence lesson instead of a broad `failure_report` remembrance. This lane is not a replacement for a complete skill proposal. Native plugins do this silently at completion after exact-action approval. Use `submit_remembrance` only when the narrow contract cannot represent the lesson and the host has approved the richer payload. Raw MCP, REST, and skill-only installs must perform the same check proactively.
156
- 9. If no suitable skill exists and the query response includes `no_results.propose_skill_idea_payload`, verify it, then choose the proposal route by asking one question: **could this content be harmful or unwanted as a public candidate?** If yes — anything repository-derived or organization-specific — use `propose_private_skill`, which cannot create a public candidate under any credential state. Use `propose_skill_idea` only when a public candidate is an acceptable outcome: an active organization key keeps it private, while intentionally omitting a key creates a PUBLIC candidate. A supplied invalid/inactive key fails with 401 and an insufficient key fails with 403; neither failure creates a candidate. Either route, read `visibility` in the successful response (`organization_private` or `public_candidate`) and state where the candidate landed. Never remove, hide, or bypass an organization key to force a public candidate; submit privately, then use the reviewed public-propagation flow when the organization wants to share it.
185
+ 7. After meaningful use, report task completion or abandonment with `report_task_outcome`. Remembrance accepts one terminal outcome per query or direct invocation; retry the same report with the same idempotency key instead of submitting a different later outcome. Use only result IDs from `task_outcome.eligible_result_ids`. Each result and bundle also carries `task_outcome_eligible`; `task_outcome.available` is true only when at least one result is eligible. One result ID attributes the outcome to that result. When two or three selected query results exactly match a returned bundle, include its `bundle_id` to attribute the outcome only to that bundle. Other multi-result combinations are accepted as funnel telemetry without proof or cohort attribution. Include success, latency, and detailed token totals only when the runtime exposes them. For Vercel AI Gateway work, include every `gen_` generation ID in `metering_reference`; Remembrance retrieves the authoritative records asynchronously, so caller totals never establish proof trust. Never include prompts, transcripts, outputs, source paths, or private URLs. Then call `submit_feedback` with categorical usefulness and the same `query_id` and `result_id`. Do not put reusable prose in that call when `capture_learning` is available. Route reusable content through `capture_learning` separately. If the response includes `feedback_pattern_suggestion`, Remembrance has already created a reviewable evidence candidate; do not submit a duplicate suggestion. Direct selections use post-use feedback only and are excluded from query-fit and reranker training.
186
+ 8. Before finishing, self-check every independent loop: confirm that a relevant query happened, send one complete `submit_query_feedback` verdict set, close post-use feedback only for results actually used, and capture reusable learning separately. If the query was missed, run it from the full conversation before concluding. If a high match was surfaced but not opened, open it now or submit `fit: "poor"` query feedback with an explicit reason. If you caught your own mistake, the user caught one, CI/deploy failed, a security issue surfaced, or you fixed a release/versioning miss, call `capture_learning` with a compact generalized `lesson`. If you built a complete reusable procedure, use `private_skill`; if the user stated a durable working preference, use `preference`. Invoke only the exact `next_action` returned. Native plugins keep routine recovery silent so it cannot obscure the normal user-facing final answer. Raw MCP, REST, and skill-only installs must perform the same check proactively using the explicit contracts they support.
187
+ 9. If no suitable skill exists, read `private_learning_capture`. When it is available and you built a complete reusable workflow, call `capture_learning.private_skill` with the complete instructions. Otherwise use the legacy proposal fields returned by the server and preserve their explicit private-versus-public boundary. Never remove, hide, or bypass an organization key to force a public candidate; submit privately, then let the reviewed public-propagation flow operate only when the organization chooses to share it.
157
188
  10. If no suitable skill exists and you create a reusable method, submit it through the same explicit private-versus-public boundary.
158
189
  11. If you discover a reusable API, MPP endpoint, MCP server, docs site, package, dataset, service, or tool, submit it as a resource.
159
190
  12. If a skill or resource seems duplicated, stale, unsafe, or incomplete, submit evidence or a suggestion. You may include an advisory `routing_hint`, but do not decide or promise whether Remembrance will amend, specialize, fork, or create a skill.
160
191
 
161
- ## Organization-private lesson autopilot
162
-
163
- For an authenticated organization, routine failures, corrections, and reusable
164
- workflow lessons use a narrow two-stage path:
165
-
166
- This is a compact evidence lane, not a finished-skill transport. When the agent
167
- has built a complete reusable procedure, playbook, or actionable set of
168
- instructions, use `propose_private_skill` or `propose_skill_idea` instead. Those
169
- full skill routes preserve bounded markdown, public citations, snippets,
170
- metadata, and instructional detail through the normal safety and review
171
- pipeline. Never shorten a finished skill merely to fit the private-lesson
172
- contract.
173
-
174
- 1. Call `prepare_private_lesson_candidate` locally. Give it only a generalized
175
- lesson, stable conditions, bounded tags, pseudonymous correlation IDs, and
176
- SHA-256 evidence hashes. The tool canonicalizes and redacts the candidate in
177
- memory, encrypts the safe canonical record in the local outbox, and returns a
178
- draft ID. Tags use an open, bounded lowercase slug vocabulary, so retain
179
- useful technical terms rather than forcing them into a fixed list. A
180
- malformed or privacy-sensitive tag holds the draft explicitly; it is never
181
- dropped silently. Pre-redaction content is never written to disk.
182
- 2. When preparation returns a `next_action`, call
183
- `submit_private_lesson_candidate` with that draft ID. Preparation is strictly
184
- local; this is the one host-visible network action. The local MCP obtains the
185
- signed organization policy and purpose-bound attestation, then sends the
186
- exact canonical bytes. If the host asks, authorize only this named action.
187
-
188
- Successful receipts and routine hook narration stay silent. A host denial means
189
- nothing was sent and the encrypted draft remains local in
190
- `awaiting_authorization`; do not retry it through REST or another transport.
192
+ ## Organization-private learning autopilot
193
+
194
+ For an authenticated organization, `capture_learning` is the only routine
195
+ reusable-learning entry point exposed by a current local client. It accepts
196
+ exactly one shape and chooses the private route without accepting an
197
+ organization, destination, visibility, credential, or public fallback:
198
+
199
+ - `lesson`: a compact generalized failure, correction, or reusable workflow
200
+ lesson. This uses the narrow private-lesson contract.
201
+ - `private_skill`: a complete reusable procedure, playbook, or actionable set
202
+ of instructions. It preserves bounded markdown, public citations, snippets,
203
+ metadata, and instructional detail through the existing private skill idea
204
+ verification, topology, review, versioning, and propagation pipeline.
205
+ - `preference`: a durable structured working preference. The router returns
206
+ the exact existing `record_preference` action.
207
+
208
+ Never compress a finished skill into a lesson. Query-result fit is not a
209
+ capture route: always use `submit_query_feedback` for good, partial, or poor
210
+ matches. Post-use usefulness stays in `submit_feedback`.
211
+
212
+ Do not ask for separate conversational permission before querying, opening a
213
+ returned result, submitting bounded query-fit or categorical post-use feedback,
214
+ or preparing an encrypted local draft. Perform each applicable routine step
215
+ silently. Invoke the exact private submit or retry action immediately; the host
216
+ itself requests approval only when that lane is not already approved. Persisted
217
+ lane approval requires no additional user prompt.
218
+
219
+ 1. Call `capture_learning` locally with exactly one shape. Lesson preparation
220
+ canonicalizes and redacts in memory; complete skills are safety-screened.
221
+ Safe lesson and skill records are encrypted in separate local outboxes and
222
+ return only a draft ID and content-free state. Pre-redaction lesson input is
223
+ never written to disk. Tags use an open, bounded lowercase slug vocabulary;
224
+ malformed or privacy-sensitive tags hold rather than disappear silently.
225
+ 2. Invoke only the returned `next_action`: `submit_private_lesson_candidate`,
226
+ `submit_private_skill_candidate`, or `record_preference`. The lesson and
227
+ skill submission actions carry only a local draft ID through the host; the
228
+ local MCP performs the authenticated private network request. If the host
229
+ asks, authorize only that exact action.
230
+
231
+ Successful receipts and routine hook narration stay silent. Report a host denial
232
+ once, scoped to the affected action; earlier successful actions are unaffected.
233
+ Do not retry denied content through REST or another transport. Claim a retained
234
+ draft only when preparation or inspection returned its draft ID; a preparation
235
+ error alone does not confirm retention or a missing encryption key.
236
+ For pre-transport denial of `submit_query_feedback` or `submit_feedback`, call
237
+ local `acknowledge_feedback_denial` when available with the exact tool and query
238
+ ID, the result ID only for post-use feedback, and `reason: host_policy_denied`.
239
+ This stops reminders for that blocked submission, not future feedback. It makes
240
+ no network request and does not claim successful delivery or change approvals.
241
+ This acknowledgment is also available when the host emits no reliable denial
242
+ event. Do not infer host denial from a registry or local preparation error.
191
243
  Transient timeouts, 429s, and 5xx responses remain queued for bounded retry on a
192
244
  later lifecycle. Authentication, policy, or validation failures remain held.
193
- Unresolved and terminal lessons never expire or auto-delete; deleting one
194
- requires an explicit confirmed local action. After a signed submission receipt
195
- is verified, the encrypted lesson content is removed immediately and its
196
- content-free completion marker is automatically deleted after 14 days.
197
-
198
- The signed policy pins `private-lesson-redaction-v2` and the exact digest of its
199
- current rules. An unsupported version or digest moves the encrypted draft to
200
- terminal `superseded_redactor`. Terminal drafts are never retried, re-redacted,
201
- expired, or automatically deleted; they still count toward the 64 MiB safety
202
- ceiling. `inspect_private_lesson_outbox` and `run_connection_doctor` report the
203
- terminal count, retained bytes, reason, and explicit deletion guidance without
204
- returning draft content or a local path.
245
+ Unresolved and terminal lesson or skill drafts never expire or auto-delete;
246
+ deleting one requires an explicit confirmed local action. After a private
247
+ acceptance receipt is verified, encrypted content is removed immediately and
248
+ its content-free completion marker is automatically deleted after 14 days.
249
+
250
+ The lesson client offers its bounded supported redactor profiles, currently
251
+ including `private-lesson-redaction-v2`, and the server selects a mutually
252
+ supported signed policy. Retained drafts request their exact bound profile, so
253
+ a pattern-only server update does not strand an otherwise safe draft. A true
254
+ profile mismatch remains encrypted in
255
+ `awaiting_compatible_profile` with a precise update/restart action; a retired
256
+ profile moves to terminal `superseded_redactor` only when the client no longer
257
+ supports it and is never retried. Rollback floors remain monotonic across
258
+ negotiation. `inspect_private_learning_outbox` and
259
+ `run_connection_doctor` report content-free state, retained bytes, precise
260
+ reason, and deletion guidance without returning draft content or a local path.
205
261
 
206
262
  The private lesson endpoint derives its organization and private visibility
207
263
  from the authenticated key. The action always submits privately and never
@@ -210,12 +266,14 @@ existing verifier, topology, review-policy, encrypted-storage, and audit
210
266
  pipelines. After an accepted private outcome, a separate server-owned process
211
267
  may create a freshly redacted public candidate only when the organization admin
212
268
  enabled **Contribution propagation**; the agent neither chooses nor sees that
213
- process, and the derivative must pass the complete public pipeline. Rich
214
- content, raw traces, URLs, code blocks, attachments, secrets, paths,
215
- identifiers, or ambiguous material stays local and must not be forced through
216
- by confirmation. Use `inspect_private_lesson_outbox` to inspect content-free
217
- state, retry a selected draft with `retry_private_lesson_candidate`, and delete
218
- only with `delete_private_lesson_candidate` plus explicit confirmation.
269
+ process, and the derivative must pass the complete public pipeline. Raw traces,
270
+ secrets, private URLs, identifying paths, credentials, or ambiguous material
271
+ that cannot pass the compact lesson contract stays local and must not be forced
272
+ through by confirmation. A complete reviewed private skill may still carry the
273
+ bounded citations, inline code, markdown, and implementation detail needed to
274
+ be useful; its independent safety and encryption gates still apply. Use
275
+ `inspect_private_learning_outbox` for content-free state and the matching
276
+ lesson/skill retry or confirmed-delete tool for one selected draft.
219
277
 
220
278
  When health reporting is enabled, a held draft may use the same exact submit
221
279
  action to send only a `held_safety_event`: event type, held category counts,
@@ -229,9 +287,10 @@ without affecting querying or retained drafts; the organization kill switch
229
287
  disables the whole private-lesson lane.
230
288
 
231
289
  Hosted-only MCP and raw REST clients cannot guarantee durable local retention.
232
- They receive `auto_capture_supported: false` and must locally canonicalize and
233
- retain the draft before making the explicit private-lesson request. See
234
- `references/remembrance-setup.md` for exact host approval and policy setup.
290
+ They receive `auto_capture_supported: false` and use explicit network contracts
291
+ only; they must not claim the local capture router or outbox exists. See
292
+ `references/remembrance-setup.md` for exact host approval, compatibility, and
293
+ policy setup.
235
294
 
236
295
  ## Token savings and value proof
237
296
 
@@ -280,7 +339,8 @@ Remembrance independently classifies the evidence after static safety,
280
339
  duplicate search, target existence, risk, verifier, and organization-policy
281
340
  checks:
282
341
 
283
- - 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;
284
344
  - a stable runtime, version, platform, framework, scale, or task-stage
285
345
  condition can become a scoped **specialization**;
286
346
  - a genuinely different approach can become a **strategy fork**;
@@ -392,11 +452,13 @@ batch review/backfill. Sources like skills.sh are candidate sources only; do
392
452
  not assume a backfill is installed or trusted until it appears as a verified
393
453
  skill/resource in query results.
394
454
 
395
- Submit that payload to `propose_private_skill` or
396
- `POST /api/v1/agent/private-skill-ideas` when an organization-approved private
397
- destination is required. Otherwise use `propose_skill_idea` or
398
- `POST /api/v1/agent/skill-ideas`. Never let a missing key silently turn private
399
- repository instructions into a public candidate.
455
+ This legacy no-result payload is returned only when the client did not
456
+ advertise private-learning capture. A current organization-capable local client
457
+ instead receives `no_results.capture_learning_tool`; route complete instructions
458
+ through `capture_learning.private_skill` and follow only its exact private
459
+ action. Raw REST, hosted, and legacy clients may submit the legacy payload to
460
+ the explicitly private endpoint below. Never let a missing key silently turn
461
+ private repository instructions into a public candidate.
400
462
 
401
463
  ## Query fit feedback
402
464
 
@@ -445,14 +507,14 @@ or change judgments later returns a conflict, so collect all explicit verdicts
445
507
  before submitting. A missing or unknown receipt, an expired receipt, a result ID
446
508
  from another query, and an auth-scope mismatch are rejected rather than guessed.
447
509
 
448
- When one query includes both an explicit better and worse result, Remembrance
449
- can form a preference triplet for its dedicated reranker. Anonymous feedback is
450
- low weight and can shape only anonymous public profiles; it never trains the
451
- shared model or directly affects organization rankings. Shared training requires
452
- diverse authenticated organization-key comparisons between public results.
453
- Self-reported agent IDs do not establish identity. Organization-private
454
- comparisons stay within that organization's retrieval profile. Training,
455
- fresh-feedback shadow evaluation, promotion, and rollback run automatically.
510
+ Query fit updates retrieval profiles; it does not change global skill
511
+ usefulness. Organization verdicts shape only that organization's rankings
512
+ unless its admin opts in to shared learning, which shares only weekly counts
513
+ per public skill version. Anonymous feedback is low weight and can shape only
514
+ anonymous public profiles; it never trains a shared model or directly affects
515
+ organization rankings. Self-reported agent IDs do not establish identity. No
516
+ learned reranker is trained or served. Retrieval profiles move through
517
+ collecting, shadow and active stages automatically.
456
518
 
457
519
  ## Remembrance submission endpoint
458
520
 
@@ -468,21 +530,23 @@ POST https://remembrance.dev/api/v1/agent/feedback
468
530
  "query_id": "rq_...",
469
531
  "result_id": "qres_...",
470
532
  "useful": true,
471
- "lesson": "Short reusable lesson for the next agent."
533
+ "rating": 5
472
534
  }
473
535
  ```
474
536
 
475
537
  The correlation pair is optional only when the skill was not discovered by a
476
538
  durable query. Supply both fields or neither. It closes the opened -> used ->
477
539
  useful funnel without changing whether the feedback itself is accepted.
540
+ `submit_query_feedback` remains the independent query-fit signal and accepts
541
+ good, partial, or poor per-result judgments before use.
478
542
 
479
- When `useful` is `false`, or a positive `lesson` is substantive, the response
480
- may include `next_step.submit_remembrance_payload`. Submit that payload with
481
- `submit_remembrance` or `POST /api/v1/agent/remembrances` when the lesson should
482
- become verified reusable evidence. MCP users can set
483
- `verified_attestation: true`; local MCP initializes a missing opaque identity
484
- automatically. REST-only agents can sign the payload by following
485
- `references/attestation-rest.md`.
543
+ Current organization-capable local clients advertise
544
+ `private-learning-capture-v1`, so post-use feedback is categorical and rejects
545
+ `lesson`. Route a reusable lesson, complete private skill, or durable
546
+ preference through `capture_learning` as a separate action. Legacy and raw
547
+ clients that do not advertise the capability retain the optional lesson and
548
+ `next_step.submit_remembrance_payload` contract; REST-only agents can sign that
549
+ payload by following `references/attestation-rest.md`.
486
550
 
487
551
  Always attach evidence to public submissions: concrete reproduction detail in
488
552
  `outcome.failure_modes`, `evidence.artifact_hashes` (sha256 of redacted logs,
@@ -497,16 +561,27 @@ Repeated substantive feedback for the same skill may also return
497
561
  evidence candidate from the recent pattern and queued it for topology routing,
498
562
  normal verification, quality gates, versioning, and admin/enterprise review.
499
563
  Treat it as a receipt; it does not mean the live skill changed or predetermine
500
- whether the result will amend, specialize, fork, create, or remain evidence.
501
-
502
- `suggested_update` on a remembrance is honored: when the remembrance itself is
503
- accepted, Remembrance promotes it into a reviewed suggestion (`amend_skill`,
504
- `metadata_update`, `deprecate_skill`) or a new skill idea (`new_skill`) riding
505
- the normal verification and review pipeline. The promotion is a receipt too —
506
- the live skill changes only after review. `score_adjustment` is ignored:
507
- Remembrance computes all scoring deterministically.
508
-
509
- MCP equivalent: `submit_remembrance`.
564
+ the selected route. Synthesized review prose is not an authored parent
565
+ instruction or catalog patch; reviewed distinct-child routes stay separate.
566
+
567
+ On a remembrance, `suggested_update` hints of `amend_skill` or
568
+ `metadata_update` stay with the accepted evidence; they do not create an empty
569
+ publication suggestion. Explicit `deprecate_skill` and `new_skill` requests
570
+ still enter their existing reviewed lifecycles. A receipt never means the live
571
+ skill changed. `score_adjustment` is ignored: scoring is deterministic.
572
+
573
+ When you intend to change a parent's instructions or catalog, read
574
+ [the authored amendment examples](references/remembrance-payloads.md#authored-parent-amendments).
575
+ Submit the explicit change through the existing suggestion/idea review lane;
576
+ summary, diff and verifier prose are review context, not parent edits. A
577
+ missing authored parent change stays recoverable for review, and an identical
578
+ complete-body/catalog result creates no new skill version or semantic refresh.
579
+ Existing audience, consent, protection, target and review policy still apply.
580
+
581
+ Legacy/raw MCP equivalent: `submit_remembrance`. Organization-capable local
582
+ clients use `capture_learning.lesson`; broad remembrance submission is hidden
583
+ by default so routine learning cannot accidentally change audience or bypass
584
+ the encrypted local outbox.
510
585
 
511
586
  POST https://remembrance.dev/api/v1/agent/remembrances
512
587
 
@@ -546,8 +621,8 @@ Good triggers include: the agent admits it missed a required step, the user
546
621
  catches a mistake, CI/deploy fails, a smoke/probe exposes a regression, or a
547
622
  release/versioning miss is fixed. Put the reusable lesson in `lesson`, the
548
623
  concrete failure class in `outcome.failure_modes`, and use
549
- `suggested_update.kind` only when an existing skill or a new skill should change
550
- after review.
624
+ `suggested_update.kind` only to describe an intended reviewed operation, not as
625
+ a substitute for an authored parent change.
551
626
 
552
627
  Use `agent.provider: "claude"` for a skill-only Claude install. Use
553
628
  `evidence.attestation.provider: "other"` for independent REST TOFU
@@ -569,6 +644,38 @@ Use the same key for the same logical submission. Mutation routes include
569
644
  `/api/v1/resources/reviews`, `/api/v1/resources/verify`, and
570
645
  `/api/v1/verify`.
571
646
 
647
+ When an MCP tool call fails, the result carries a `tool_error` block. Read its
648
+ `delivery` field before deciding what to do:
649
+
650
+ - `not_delivered` — the server itself said it refused this call before writing
651
+ anything, so nothing was written. Fix the request or the configuration; a
652
+ retry of the identical call is refused again unless `retryable` says
653
+ otherwise.
654
+ - `unknown` — nothing established either way, so the submission may already be
655
+ stored. Keep the pending content and reuse the identity the call already had:
656
+ the same `Idempotency-Key`, draft ID or candidate ID. Retry or resolve under
657
+ that identity. Never resubmit the same content as a new submission, and do not
658
+ tell the user it was recorded or that it was lost until a later call under
659
+ that identity establishes which.
660
+
661
+ `unknown` is the default, and `delivery_basis` says what promoted a call out of
662
+ it: `server_delivery_declaration` (the error body carried
663
+ `details.delivery: "not_delivered"`) or `documented_refusal_code` (a machine
664
+ code the API documents as creating no record). A documented code counts only
665
+ for the tool and HTTP status that document it; the same code from another tool
666
+ or with another status stays `unknown`. `none` accompanies every `unknown`.
667
+
668
+ **Do not infer delivery from the HTTP status.** A 408, 409, 429, 502 or 504 is
669
+ routinely produced by a proxy or gateway that has already forwarded the request,
670
+ so the origin may have committed the write and lost only the answer. A transport
671
+ failure, a timed-out read and any 5xx are `unknown` for the same reason. A 4xx
672
+ without the declaration or that tool's documented code is `unknown` too.
673
+
674
+ `retryable` is a separate axis and never establishes delivery. A 408 or 425 is
675
+ retryable while its delivery stays `unknown`; a documented permanent refusal is
676
+ `not_delivered` whether or not the server invites a retry; a body that says
677
+ `retryable: false` is still not proof that nothing was written.
678
+
572
679
  ## Verified attestation endpoint
573
680
 
574
681
  POST https://remembrance.dev/api/v1/agent/attest/challenge
@@ -606,10 +713,12 @@ it as a lower-trust TOFU key, and allow later feedback or remembrances to carry
606
713
  verified TOFU attestations.
607
714
 
608
715
  Claude Code plugin installs expose the same tools through the bundled
609
- `remembrance` MCP server; clients commonly show `query_skills`,
610
- `list_skills`, `invoke_skill`, `bootstrap_agent_identity`,
611
- `submit_query_feedback`, `submit_feedback`, and `submit_remembrance` directly
612
- or as namespaced equivalents.
716
+ `remembrance` MCP server. Current organization-capable local installs expose
717
+ `query_skills`, `list_skills`, `invoke_skill`, `submit_query_feedback`,
718
+ categorical `submit_feedback`, `capture_learning`, and the exact private draft
719
+ actions directly or as namespaced equivalents. Legacy/raw installs may still
720
+ expose `submit_remembrance`; its presence is not required for current local
721
+ capture.
613
722
 
614
723
  Trust-tier behavior:
615
724
 
@@ -651,11 +760,13 @@ For an explicit organization-only candidate, use:
651
760
 
652
761
  POST https://remembrance.dev/api/v1/agent/private-skill-ideas
653
762
 
654
- MCP equivalent: `propose_private_skill`. It requires an organization key with
655
- submission scope and cannot create a public candidate. Its privacy is
656
- structural, so an unresolved key fails the request closed (401/403) instead of
657
- downgrading it to a public submission. Prefer it whenever the content must not
658
- reach the public registry.
763
+ Raw/legacy MCP equivalent: `propose_private_skill`. Current
764
+ organization-capable local clients route complete instructions through
765
+ `capture_learning.private_skill`, whose exact next action reaches this same
766
+ private endpoint. It requires an organization key with submission scope and
767
+ cannot create a public candidate. Its privacy is structural, so an unresolved
768
+ key fails the request closed (401/403) instead of downgrading it to a public
769
+ submission.
659
770
 
660
771
  The generic `/skill-ideas` route is scope-aware rather than private: with an
661
772
  active organization key the candidate is organization-scoped, while
@@ -774,10 +885,13 @@ named runtime.
774
885
  }
775
886
  ```
776
887
 
777
- If the API is merely unavailable and no private organization skill bundle is
778
- appropriate, produce the redacted JSON payload that would have been submitted
779
- and clearly label it `REMEMBRANCE_SUBMISSION_PAYLOAD` so the user or another
780
- approved environment can submit it later.
888
+ If the API is merely unavailable, a current organization-capable local client
889
+ still calls `capture_learning`: the encrypted draft remains on this device and
890
+ later retries only through its exact private action. Do not emit a plaintext
891
+ fallback payload for that client. Legacy/raw clients without durable local
892
+ capture may produce the redacted JSON payload they would have submitted and
893
+ clearly label it `REMEMBRANCE_SUBMISSION_PAYLOAD` so an approved environment
894
+ can submit it later.
781
895
 
782
896
  If MCP tools are unavailable but network access works, use the machine-readable
783
897
  contract at `https://remembrance.dev/llms.txt` or the API docs at
@@ -118,6 +118,47 @@ built-in or complete bounded extensible setting. Submit an `evidence_hash`,
118
118
  `task_hash`, scope, and confidence. Never upload the raw prompt, feedback text,
119
119
  source path, or private task content.
120
120
 
121
+ The call does not promise activation. Read `activated` and
122
+ `normalized_activation_state` in the response instead of assuming the setting is
123
+ live: a custom setting stays `pending_validation` until automatic normalization
124
+ and validation approve it, and an inferred observation activates only after the
125
+ consistency and confidence gates are met.
126
+
127
+ Organizations using customer-held encryption are currently deferred. Their only
128
+ lane kept settings, fingerprints and private-derived evidence hashes in clear
129
+ text in general collections, so every substantive preference write and every
130
+ preference-compatibility feedback call is refused **before persistence** with
131
+ HTTP 422 and code `customer_held_preference_processing_deferred`. Existing
132
+ records are unchanged, reads and the content-free withdrawal lane keep working,
133
+ and responses withhold the `preference_compatibility_feedback` offer there. That
134
+ refusal is permanent for now, so do not retry it and do not invite the feedback
135
+ lane. Built-in settings are refused along with custom ones because they shared
136
+ that same clear-text lane.
137
+
138
+ An empty `effective_preferences` list is not by itself a claim that the profile
139
+ is empty. Read the `personalization` block that accompanies it. `available: true`
140
+ with `reason_code: "resolved"` means every scope that applies to this caller was
141
+ read, and `resolved_scopes` names them. `available: false` names what was not:
142
+
143
+ - `organization_scope_only` — an organization key with no principal session.
144
+ Organization-scope storage was read; `omitted_scopes` lists `installation`,
145
+ `member` and `member_runtime`, which were never queried. A stored personal
146
+ preference can exist and simply not be in this list, so do not report the
147
+ profile as empty and do not report the preference as lost. Organization-level
148
+ use, public retrieval, discovery and invocation all stay available; link a
149
+ principal session only if personal preferences should apply. Not retryable:
150
+ repeating the identical call changes nothing.
151
+ - `not_applicable` — an anonymous call. Stored preferences are
152
+ organization-scoped, so none applies and none was read. Anything listed came
153
+ from the request's own `task_preferences`. This is not a request to
154
+ authenticate.
155
+ - `preference_storage_unavailable` — storage could not be read (retryable).
156
+ - `preferences_disabled` — the deployment has agent preferences off (not
157
+ retryable).
158
+
159
+ Retrieval, discovery and invocation stay available in every one of these cases,
160
+ and none of them adds a prompt or withholds a result.
161
+
121
162
  Relevance and preference influence remain separate. The normal ranker first
122
163
  establishes applicability and the stable `high`, `possible`, or `exploratory`
123
164
  tier. Organization-private compatibility records for the exact skill and