@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.
- package/README.md +172 -32
- package/opencode.json +2 -2
- package/package.json +1 -1
- package/scripts/feedback-disposition.mjs +376 -0
- package/scripts/hook-core.mjs +6145 -685
- package/scripts/pending-action-payload.mjs +1044 -0
- package/scripts/private-learning-hook-policy.mjs +2515 -0
- package/servers/remembrance-mcp.mjs +62249 -6956
- package/skills/remembrancer/SKILL.md +219 -105
- package/skills/remembrancer/references/identity-preferences-topology.md +41 -0
- package/skills/remembrancer/references/remembrance-payloads.md +94 -17
- package/skills/remembrancer/references/remembrance-setup.md +186 -74
- package/src/index.mjs +131 -40
|
@@ -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
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
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
|
|
155
|
-
8. Before finishing, self-check
|
|
156
|
-
9. If no suitable skill exists
|
|
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
|
|
162
|
-
|
|
163
|
-
For an authenticated organization,
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
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
|
|
194
|
-
requires an explicit confirmed local action. After a
|
|
195
|
-
is verified,
|
|
196
|
-
content-free completion marker is automatically deleted after 14 days.
|
|
197
|
-
|
|
198
|
-
The
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
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.
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
by confirmation.
|
|
217
|
-
|
|
218
|
-
|
|
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
|
|
233
|
-
|
|
234
|
-
`references/remembrance-setup.md` for exact host approval and
|
|
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
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
`
|
|
399
|
-
|
|
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
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
Self-reported agent IDs do not establish identity.
|
|
454
|
-
|
|
455
|
-
|
|
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
|
-
"
|
|
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
|
-
|
|
480
|
-
|
|
481
|
-
`
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
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
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
`metadata_update
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
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
|
|
550
|
-
|
|
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
|
|
610
|
-
`list_skills`, `invoke_skill`, `
|
|
611
|
-
`
|
|
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`.
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
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
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
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
|