@remembrance-ai/pi-plugin 0.0.0-stage → 0.2.25
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/LICENSE +201 -0
- package/README.md +35 -2
- package/package.json +47 -4
- package/scripts/feedback-disposition.mjs +376 -0
- package/scripts/hook-core.mjs +14654 -0
- package/scripts/pending-action-payload.mjs +1045 -0
- package/scripts/private-egress-lanes.mjs +16 -0
- package/scripts/private-learning-hook-policy.mjs +2725 -0
- package/scripts/private-lesson-approval.mjs +200 -0
- package/servers/remembrance-mcp.mjs +76192 -0
- package/skills/remembrancer/SKILL.md +865 -0
- package/skills/remembrancer/references/attestation-rest.md +551 -0
- package/skills/remembrancer/references/identity-preferences-topology.md +408 -0
- package/skills/remembrancer/references/mpp.md +104 -0
- package/skills/remembrancer/references/remembrance-payloads.md +406 -0
- package/skills/remembrancer/references/remembrance-setup.md +2405 -0
- package/skills/remembrancer/references/resource-scout.md +61 -0
- package/skills/remembrancer/references/web-ui-ux-qa.md +55 -0
- package/skills/remembrancer/scripts/queue-private-skill-import.mjs +281 -0
- package/skills/remembrancer/scripts/validate-remembrance.mjs +82 -0
- package/skills/use/SKILL.md +29 -0
- package/src/index.mjs +693 -0
|
@@ -0,0 +1,865 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: remembrancer
|
|
3
|
+
description: Query Remembrance before reusable service/API/tool/workflow/UI/review tasks, including contextual follow-ups; submit redacted feedback or evidence after use.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Remembrancer
|
|
7
|
+
|
|
8
|
+
You are the entry skill for Remembrance: shared operational memory for agent skills. Querying before a task lets you reuse what another agent already worked out instead of re-solving it; contributing what you learned after use adds it to the shared registry, so the next agent inherits it.
|
|
9
|
+
|
|
10
|
+
## Activation preflight
|
|
11
|
+
|
|
12
|
+
The presence of this filesystem skill does not, by itself, prove that the
|
|
13
|
+
native plugin is fully active. The first time Remembrance is relevant in a host
|
|
14
|
+
session, call `run_connection_doctor` before relying on plugin automation. A
|
|
15
|
+
healthy native install reports its MCP transport, authenticated scope, and the
|
|
16
|
+
observed startup and prompt lifecycle after a safe catalog read. Local MCP also
|
|
17
|
+
reports `local_signing_identity` without exposing its subject or private key. A
|
|
18
|
+
missing identity initializes automatically and is reused as the installation
|
|
19
|
+
principal; an invalid identity requires explicit restore or rotation. Local MCP
|
|
20
|
+
and native plugins obtain a revocable 24-hour principal session in the
|
|
21
|
+
background and register a privacy-bounded runtime profile. They never transmit
|
|
22
|
+
the hostname, username, config path, or repository path. Follow the returned
|
|
23
|
+
machine-readable `next_action` rather than asking the user to invent an
|
|
24
|
+
identity. Tool-observer and completion timestamps appear after those events
|
|
25
|
+
become eligible. A fresh doctor reports them as informational; only a later
|
|
26
|
+
missed lifecycle opportunity raises an attention warning.
|
|
27
|
+
|
|
28
|
+
If this skill is visible but `run_connection_doctor` is absent, explicitly tell
|
|
29
|
+
the user that Remembrance is only partially active. Do not silently fall back
|
|
30
|
+
and do not diagnose the registry as anonymous or unavailable. Update or
|
|
31
|
+
reinstall the host-specific plugin, verify that its bundled MCP registration is
|
|
32
|
+
enabled, fully quit and reopen the host, and check again. The independent
|
|
33
|
+
`npx @remembrance-ai/mcp-server doctor` command can verify registry/auth access,
|
|
34
|
+
but it cannot prove host MCP registration; rerun `run_connection_doctor` inside
|
|
35
|
+
the host after repair. Codex, Claude Code,
|
|
36
|
+
Cursor, and OpenClaw local plugin MCP servers read the same shared credential
|
|
37
|
+
as their hooks from `~/.config/remembrance/config.json`; an intentionally
|
|
38
|
+
configured hosted HTTP MCP instead needs a credential forwarded on that HTTP
|
|
39
|
+
request. See `references/remembrance-setup.md` for exact host steps.
|
|
40
|
+
|
|
41
|
+
With an organization key, raise "Highly Recommended: approve private
|
|
42
|
+
submissions" from `references/remembrance-setup.md` only after the host, in
|
|
43
|
+
this session, denied a private submit or retry call or stopped it to ask for
|
|
44
|
+
approval, or did the same to a `capture_learning` call on a host whose step
|
|
45
|
+
approves `capture_learning`. Codex is not such a host: under its managed
|
|
46
|
+
`writes` mode a reviewed capture is expected, and approving `capture_learning`
|
|
47
|
+
there is an optional administrator decision, never a required step. Tell the
|
|
48
|
+
user once per such event that the step is required for Remembrance to work
|
|
49
|
+
fully with an organization key; do not raise it at other times or in later
|
|
50
|
+
sessions without a new event. Never change host approval settings or answer
|
|
51
|
+
the host's approval yourself; edit a settings file only after the user asks
|
|
52
|
+
you to.
|
|
53
|
+
|
|
54
|
+
When outbound REST is allowed, a partial install may submit only the bounded
|
|
55
|
+
component/version issue schema to
|
|
56
|
+
`POST /api/v1/agent/client-health-reports`. Never attach prompts, repository
|
|
57
|
+
paths, source content, keys, raw logs, or arbitrary diagnostics. This report is
|
|
58
|
+
deduplicated triage evidence, not an automatically accepted defect.
|
|
59
|
+
|
|
60
|
+
Query Remembrance first when the user's request mentions:
|
|
61
|
+
|
|
62
|
+
- A named external service, platform, or API: Vercel, Heroku, GitHub Actions, Stripe, x402/MPP endpoints, MCP servers, MongoDB Atlas, OpenAI, Anthropic, and similar integrations.
|
|
63
|
+
- A named CLI, tool, or framework: Next.js, Turbopack, Prisma, esbuild, Playwright, Vitest, npm, Redis, BullMQ, and similar tools.
|
|
64
|
+
- A workflow shape: deploy, migrate, CI/CD setup, payment integration, schema upgrade, backfill, release, rollback, provisioning, observability, or monitoring.
|
|
65
|
+
- A substantive engineering shape: implementation, code or security review, test repair, UI remediation, incident debugging, or release verification that may yield a reusable method or failure lesson.
|
|
66
|
+
- An unfamiliar third-party integration where an existing skill/resource may save custom work.
|
|
67
|
+
|
|
68
|
+
Use the MCP tool `query_skills` when available, or call the REST endpoint
|
|
69
|
+
`POST /api/v1/agent/query`. These are equivalent discovery paths.
|
|
70
|
+
|
|
71
|
+
Before diagnosing authentication, call the MCP tool
|
|
72
|
+
`run_connection_doctor` for the transport you will actually use. It reports
|
|
73
|
+
the local or hosted transport, the credential source, and the verified registry
|
|
74
|
+
scope after a non-mutating catalog read, with exact bounded remediation and
|
|
75
|
+
without returning the key, absolute local paths, or private registry URLs. Use
|
|
76
|
+
`get_connection_status` only when the underlying fields are needed. Never
|
|
77
|
+
conclude that a plugin is anonymous
|
|
78
|
+
because `REMEMBRANCE_API_KEY` is unset: native hooks and local/bundled MCP can
|
|
79
|
+
read `~/.config/remembrance/config.json`. Hosted MCP cannot read a file on the
|
|
80
|
+
caller's machine and uses only the credential forwarded on its HTTP request.
|
|
81
|
+
Likewise, an anonymous curl or browser request proves only that request was
|
|
82
|
+
anonymous. Raw REST clients do not load the plugin config automatically; they
|
|
83
|
+
must read it deliberately or send a key header. Never ask the user to paste a
|
|
84
|
+
real key into chat.
|
|
85
|
+
|
|
86
|
+
When the user explicitly names a Remembrance skill, supplies a
|
|
87
|
+
`remembrance://skills/{slug}` URI, or uses `/remembrance:use`, do not run a
|
|
88
|
+
relevance query merely to rediscover that selection. Call `invoke_skill` with
|
|
89
|
+
the exact slug. If the name is ambiguous, resolve it with the indexed,
|
|
90
|
+
normalized slug-prefix filter in `list_skills` first; never guess the exact
|
|
91
|
+
slug. Use `query_skills` for discovery rather than catalog filtering. Catalog
|
|
92
|
+
results and MCP resource reads are lightweight selection handles only.
|
|
93
|
+
`invoke_skill` rechecks current authorization and organization policy, loads
|
|
94
|
+
the active reviewed version, and starts the post-use feedback/outcome lifecycle.
|
|
95
|
+
|
|
96
|
+
Short follow-ups such as "fix these issues", "continue", "try again", "review
|
|
97
|
+
the latest changes", or "how is it looking now" inherit their concrete task
|
|
98
|
+
from the full conversation. Infer the domain and constraints from that context
|
|
99
|
+
and still query before acting; do not wait for the current prompt to repeat a
|
|
100
|
+
service, framework, workflow, or UI keyword. Send only a redacted task summary,
|
|
101
|
+
not raw prior conversation.
|
|
102
|
+
|
|
103
|
+
Also use this skill when:
|
|
104
|
+
|
|
105
|
+
- The agent used a skill and should report whether it worked.
|
|
106
|
+
- The agent found a missing, stale, duplicated, unsafe, or weak skill.
|
|
107
|
+
- The agent created or adapted a reusable workflow that should become a candidate skill.
|
|
108
|
+
- The agent used a resource, site, API, MPP endpoint, MCP server, or tool and can report usefulness.
|
|
109
|
+
- The agent catches its own mistake, the user catches one, CI/deploy fails, a security issue surfaces, or a release/versioning miss was fixed and future agents should not repeat it.
|
|
110
|
+
|
|
111
|
+
Do not directly mutate shared skills. Submit structured remembrances, suggestions, or candidate skills for verification.
|
|
112
|
+
|
|
113
|
+
Route memory by audience, not by which write tool is most convenient:
|
|
114
|
+
|
|
115
|
+
- Host-local memory is for facts about this human, repository, installation, or machine.
|
|
116
|
+
- Remembrance is for a generalized lesson another approved organization agent would otherwise rediscover the hard way.
|
|
117
|
+
- A local-memory write does not satisfy organization-shared capture. Generalize reusable feedback and use the private lesson lane; never mirror raw local memory automatically.
|
|
118
|
+
|
|
119
|
+
`get_connection_status` exposes content-free recent contribution outcomes for
|
|
120
|
+
the current installation principal, or for the current API key when an older
|
|
121
|
+
client has no principal. Use it when the user asks whether prior contributions
|
|
122
|
+
were accepted, recognized as duplicates, remain pending, need review, or were
|
|
123
|
+
rejected. It covers remembrances, private skill ideas, skill suggestions,
|
|
124
|
+
resource submissions, and resource reviews. It never returns lesson text,
|
|
125
|
+
titles, rejection prose, actor identity, or private payload data.
|
|
126
|
+
|
|
127
|
+
Do not use this skill when:
|
|
128
|
+
|
|
129
|
+
- The user asks for general web search, research, or current facts.
|
|
130
|
+
- The task is a genuinely trivial throwaway edit or command with no reusable workflow, operational decision, verification method, or failure lesson. A local repository change is not automatically trivial.
|
|
131
|
+
- The answer is a one-off fact or explanation, not a reusable operational lesson.
|
|
132
|
+
- The user needs private scratch memory, secret storage, or unredacted trace storage.
|
|
133
|
+
- The task is broad brainstorming with no likely reusable skill/resource/evidence.
|
|
134
|
+
- No skill/resource was used and no reusable method, endpoint, or review was discovered.
|
|
135
|
+
|
|
136
|
+
## Flow
|
|
137
|
+
|
|
138
|
+
1. Identify the task domain and requested capability.
|
|
139
|
+
2. If the user explicitly selected a Remembrance skill, resolve any ambiguity
|
|
140
|
+
with the normalized slug-prefix filter in `list_skills`, then call
|
|
141
|
+
`invoke_skill` with an exact returned slug. Skip query-fit feedback for this
|
|
142
|
+
direct selection. Otherwise, use `query_skills` to discover matching
|
|
143
|
+
skills/resources when network/API access is available.
|
|
144
|
+
When a native plugin supplies `client_context.directive_id`, preserve that
|
|
145
|
+
opaque ID, runtime, and trigger reason in `query_skills`; it closes the
|
|
146
|
+
plugin-instruction compliance loop and never affects ranking or trust.
|
|
147
|
+
3. Use `match_tier` as a decision aid, not rank alone. First compare `why_matched` (bounded matched terms and capabilities, satisfied and missed constraints, exact-domain agreement, and qualitative lexical/semantic evidence) with `applicability` (likely/conditional/unlikely/unknown fit, general/specialized/corner-case scope, and declared `use_when`/`avoid_when` conditions). Raw numerical ranking scores are intentionally not exposed. Unknown applicability never means general applicability. Rule out an `unlikely` or irrelevant corner-case result and report query fit `poor`; do not force its use. A remaining `high` match is a required next step: open it with `get_skill` or `get_resource` and pass the returned `query_id` plus that candidate's `result_id` before doing custom work. `possible` and `exploratory` matches remain optional. Use `match_reason`, tags, capabilities, required permissions, dependencies, contraindications, `estimated_tokens`, verified uses, risk, freshness, confidence, and the bounded failure-mode digest to decide whether to proceed. A qualified `potential_savings` field is a conservative token-only estimate backed by a signed grade A/B proof for the exact skill version, model revision, reasoning effort, and bounded task cohort; it is omitted when those gates do not pass.
|
|
148
|
+
4. Read `skill_access` on every query response. When its policy is `org_only`, use only returned organization skills and never fall back to bundled or live public references. Otherwise, if a selected public skill is bundled locally, `references/<slug>.md` remains the offline fallback. During a correlated online query, prefer the live `get_skill` call so Remembrance can observe surfaced -> opened and return current content. See "Specialized skills" below.
|
|
149
|
+
5. Apply the preference snapshot. MCP `query_skills` and `invoke_skill`
|
|
150
|
+
results carry it in `preferences` and add `skill_notes` for each skill;
|
|
151
|
+
native hooks inject the project's snapshot. Its header reads
|
|
152
|
+
`Remembrance preferences (profile <digest>, context <id>; complete)`, or
|
|
153
|
+
names after `incomplete:` the reason, what is missing, and the exact
|
|
154
|
+
recovery call: make that call before governed work. Page 1 of a large
|
|
155
|
+
profile opens with "Before any other action, call get_effective_preferences
|
|
156
|
+
with page_token <t> until complete." (or "... for the remaining pages."
|
|
157
|
+
when the header says no recovery call exists; the last page then stays
|
|
158
|
+
incomplete and needs no further call); repeat that call, with the same
|
|
159
|
+
`keys` and `task_preferences` when the status asks for them, until the
|
|
160
|
+
header says complete. A preference may steer among already-relevant
|
|
161
|
+
skills inside the same match tier or surgically alter a discretionary
|
|
162
|
+
presentation, workflow, or strategy choice. It never changes the underlying
|
|
163
|
+
relevance evidence, tier, or applicability. Required organization guidance
|
|
164
|
+
is authoritative; an explicit task or opaque project-context preference
|
|
165
|
+
outranks personal and skill defaults only when it does not conflict with that
|
|
166
|
+
guidance. Preserve safety, authorization, privacy, applicability, required
|
|
167
|
+
skill steps, validation, and review. A skill note "Set aside only for the
|
|
168
|
+
required step that conflicts" marks a conflict confirmed by your
|
|
169
|
+
organization, the skill's reviewed metadata, or verified members: keep
|
|
170
|
+
applying that preference to every compatible step and all other work. A
|
|
171
|
+
conflict that only a model check suggests
|
|
172
|
+
is a note, not a block, so the preference still applies. A required setting
|
|
173
|
+
is never set aside: if a step the skill requires cannot be done while
|
|
174
|
+
following it, do not do that step and report the conflict. On a host without
|
|
175
|
+
per-prompt injection, hold a fresh, complete snapshot before governed work
|
|
176
|
+
in each new request: the one in that request's `query_skills` or
|
|
177
|
+
`invoke_skill` response counts, and so does one whose header says no
|
|
178
|
+
recovery call exists; otherwise call `get_effective_preferences` without a
|
|
179
|
+
skill search. Send `known_digest` only when this conversation
|
|
180
|
+
holds the complete snapshot for that exact context with that digest, every
|
|
181
|
+
page included, with no summary or context reset since, and never for an
|
|
182
|
+
incomplete, stale, or cached copy; an unchanged profile then returns one
|
|
183
|
+
short line. After using a skill, `submit_preference_compatibility_feedback`
|
|
184
|
+
takes a fingerprint from that result's offer or the `preference_key` of any
|
|
185
|
+
preference that was active for that use. REST callers apply
|
|
186
|
+
`effective_preferences` through the sibling `preference_application`
|
|
187
|
+
instead. When the user states a durable working
|
|
188
|
+
preference, call `record_preference`: built-ins need key/value; another
|
|
189
|
+
preference needs a stable `<effect>.<concept>` key, stable value, short label,
|
|
190
|
+
normalized behavior, `presentation|workflow|strategy_selection` effect,
|
|
191
|
+
`prefer|avoid` strength, and definition version. Use `scope: "auto"` unless
|
|
192
|
+
the user explicitly limited it to a project, skill, or domain, or you are
|
|
193
|
+
adapting another agent family's preference as described below. Send only
|
|
194
|
+
redacted hashes, never raw prompt or feedback text. When `capture_learning`
|
|
195
|
+
is available, route a durable preference through its `preference` shape and
|
|
196
|
+
invoke only the returned `record_preference` action. That route persists
|
|
197
|
+
nothing locally (`persisted_locally: false`), so `record_preference` is the
|
|
198
|
+
whole remaining lifecycle: read `activated` and `normalized_activation_state`
|
|
199
|
+
instead of assuming the preference is live. An organization using
|
|
200
|
+
customer-held encryption is refused before persistence with HTTP 422 and code
|
|
201
|
+
`customer_held_preference_processing_deferred`; do not retry it, do not offer
|
|
202
|
+
preference compatibility feedback there, and do not report the preference as
|
|
203
|
+
captured. A missing principal session means personal preferences are
|
|
204
|
+
unavailable, not that the query failed. An empty `effective_preferences` list
|
|
205
|
+
only proves an empty profile when the accompanying `personalization` block
|
|
206
|
+
says `available: true` and, on a current server, `completeness.complete` is
|
|
207
|
+
true; `organization_scope_only` means the personal scopes in
|
|
208
|
+
`omitted_scopes` were never read, so a stored personal preference may exist
|
|
209
|
+
and simply not be listed.
|
|
210
|
+
|
|
211
|
+
Installation and member preferences reach every agent runtime on that
|
|
212
|
+
identity, so another agent family may have written one, and one preference
|
|
213
|
+
may address several families. Follow the part written for this host. A
|
|
214
|
+
preference that names a model, tool, or agent this host lacks, with no part
|
|
215
|
+
for this host, states another family's intent: apply the closest equivalent
|
|
216
|
+
this host supports and say which you used.
|
|
217
|
+
When none is safe to assume, because the intent is unclear or a substitute
|
|
218
|
+
would materially change cost, risk, data handling, or results, ask the
|
|
219
|
+
user; if you cannot ask, keep your default and say so. To keep an
|
|
220
|
+
adaptation, call `record_preference` with `scope: "member_runtime"`, the
|
|
221
|
+
same key, and a value, label, and behavior naming your equivalent; use
|
|
222
|
+
`source_category: "explicit_user"` only when the user confirmed it. Never
|
|
223
|
+
record it with `auto`, `installation`, or `member` scope, which would
|
|
224
|
+
override the original for the other family. If `member_runtime` is refused
|
|
225
|
+
because the installation is not linked to a member, keep the adaptation to
|
|
226
|
+
this task and say once that linking the installation lets it persist.
|
|
227
|
+
|
|
228
|
+
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.
|
|
229
|
+
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.
|
|
230
|
+
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.
|
|
231
|
+
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.
|
|
232
|
+
10. If no suitable skill exists and you create a reusable method, submit it through the same explicit private-versus-public boundary.
|
|
233
|
+
11. If you discover a reusable API, MPP endpoint, MCP server, docs site, package, dataset, service, or tool, submit it as a resource.
|
|
234
|
+
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.
|
|
235
|
+
|
|
236
|
+
## Organization-private learning autopilot
|
|
237
|
+
|
|
238
|
+
For an authenticated organization, `capture_learning` is the only routine
|
|
239
|
+
reusable-learning entry point exposed by a current local client. It accepts
|
|
240
|
+
exactly one shape and chooses the private route without accepting an
|
|
241
|
+
organization, destination, visibility, credential, or public fallback:
|
|
242
|
+
|
|
243
|
+
- `lesson`: a compact generalized failure, correction, or reusable workflow
|
|
244
|
+
lesson. This uses the narrow private-lesson contract.
|
|
245
|
+
- `private_skill`: a complete reusable procedure, playbook, or actionable set
|
|
246
|
+
of instructions. It preserves bounded markdown, public citations, snippets,
|
|
247
|
+
metadata, and instructional detail through the existing private skill idea
|
|
248
|
+
verification, topology, review, versioning, and propagation pipeline.
|
|
249
|
+
- `preference`: a durable structured working preference. The router returns
|
|
250
|
+
the exact existing `record_preference` action.
|
|
251
|
+
|
|
252
|
+
Never compress a finished skill into a lesson. Query-result fit is not a
|
|
253
|
+
capture route: always use `submit_query_feedback` for good, partial, or poor
|
|
254
|
+
matches. Post-use usefulness stays in `submit_feedback`.
|
|
255
|
+
|
|
256
|
+
Do not ask for separate conversational permission before querying, opening a
|
|
257
|
+
returned result, submitting bounded query-fit or categorical post-use feedback,
|
|
258
|
+
or preparing an encrypted local draft. Perform each applicable routine step
|
|
259
|
+
silently. Invoke the exact private submit or retry action immediately; the host
|
|
260
|
+
itself requests approval only when that lane is not already approved. Persisted
|
|
261
|
+
lane approval requires no additional user prompt.
|
|
262
|
+
|
|
263
|
+
1. Call `capture_learning` locally with exactly one shape. Lesson preparation
|
|
264
|
+
canonicalizes and redacts in memory; complete skills are safety-screened.
|
|
265
|
+
Safe lesson and skill records are encrypted in separate local outboxes and
|
|
266
|
+
return only a draft ID and content-free state. Pre-redaction lesson input is
|
|
267
|
+
never written to disk. Tags use an open, bounded lowercase slug vocabulary;
|
|
268
|
+
a malformed or privacy-sensitive tag is dropped and counted. Each redaction
|
|
269
|
+
match becomes its `[redacted:category]` marker and the lesson continues;
|
|
270
|
+
only a stack trace or zero-width or bidirectional control characters hold it
|
|
271
|
+
locally as `held_safety`.
|
|
272
|
+
2. Invoke only the returned `next_action`: `submit_private_lesson_candidate`,
|
|
273
|
+
`submit_private_skill_candidate`, or `record_preference`. The lesson and
|
|
274
|
+
skill submission actions carry only a local draft ID through the host; the
|
|
275
|
+
local MCP performs the authenticated private network request. If the host
|
|
276
|
+
asks, authorize only that exact action.
|
|
277
|
+
|
|
278
|
+
Successful receipts and routine hook narration stay silent. Report a host denial
|
|
279
|
+
once, scoped to the affected action; earlier successful actions are unaffected.
|
|
280
|
+
Do not retry denied content through REST or another transport. Claim a retained
|
|
281
|
+
draft only when preparation or inspection returned its draft ID; a preparation
|
|
282
|
+
error alone does not confirm retention or a missing encryption key.
|
|
283
|
+
For pre-transport denial of `submit_query_feedback` or `submit_feedback`, call
|
|
284
|
+
local `acknowledge_feedback_denial` when available with the exact tool and query
|
|
285
|
+
ID, the result ID only for post-use feedback, and `reason: host_policy_denied`.
|
|
286
|
+
This stops reminders for that blocked submission, not future feedback. It makes
|
|
287
|
+
no network request and does not claim successful delivery or change approvals.
|
|
288
|
+
This acknowledgment is also available when the host emits no reliable denial
|
|
289
|
+
event. Do not infer host denial from a registry or local preparation error.
|
|
290
|
+
Transient timeouts, 429s, and 5xx responses remain queued for bounded retry on a
|
|
291
|
+
later lifecycle. Authentication, policy, or validation failures remain held.
|
|
292
|
+
Unresolved and terminal lesson or skill drafts never expire or auto-delete;
|
|
293
|
+
deleting one requires an explicit confirmed local action. After a private
|
|
294
|
+
acceptance receipt is verified, encrypted content is removed immediately and
|
|
295
|
+
its content-free completion marker is automatically deleted after 14 days.
|
|
296
|
+
|
|
297
|
+
The lesson client offers its bounded supported redactor profiles, currently
|
|
298
|
+
including `private-lesson-redaction-v2`, and the server selects a mutually
|
|
299
|
+
supported signed policy. Retained drafts request their exact bound profile, so
|
|
300
|
+
a pattern-only server update does not strand an otherwise safe draft. A true
|
|
301
|
+
profile mismatch remains encrypted in
|
|
302
|
+
`awaiting_compatible_profile` with a precise update/restart action; a retired
|
|
303
|
+
profile moves to terminal `superseded_redactor` only when the client no longer
|
|
304
|
+
supports it and is never retried. A draft that an older co-installed client
|
|
305
|
+
retired on a profile this client supports resumes its normal lifecycle. Rollback floors remain monotonic across
|
|
306
|
+
negotiation. `inspect_private_learning_outbox` and
|
|
307
|
+
`run_connection_doctor` report content-free state, retained bytes, precise
|
|
308
|
+
reason, and deletion guidance without returning draft content or a local path.
|
|
309
|
+
|
|
310
|
+
The private lesson endpoint derives its organization and private visibility
|
|
311
|
+
from the authenticated key. The action always submits privately and never
|
|
312
|
+
falls back to anonymous or public submission. Accepted candidates enter the
|
|
313
|
+
existing verifier, topology, review-policy, encrypted-storage, and audit
|
|
314
|
+
pipelines. After an accepted private outcome, a separate server-owned process
|
|
315
|
+
may create a freshly redacted public candidate only when the organization admin
|
|
316
|
+
enabled **Contribution propagation**; the agent neither chooses nor sees that
|
|
317
|
+
process, and the derivative must pass the complete public pipeline. Raw traces,
|
|
318
|
+
secrets, private URLs, identifying paths, credentials, or ambiguous material
|
|
319
|
+
that cannot pass the compact lesson contract stays local and must not be forced
|
|
320
|
+
through by confirmation. A complete reviewed private skill may still carry the
|
|
321
|
+
bounded citations, inline code, markdown, and implementation detail needed to
|
|
322
|
+
be useful; its independent safety and encryption gates still apply. Use
|
|
323
|
+
`inspect_private_learning_outbox` for content-free state and the matching
|
|
324
|
+
lesson/skill retry or confirmed-delete tool for one selected draft.
|
|
325
|
+
|
|
326
|
+
When health reporting is enabled, a held draft may use the same exact submit
|
|
327
|
+
action to send only a `held_safety_event`: event type, held category counts,
|
|
328
|
+
contract/redactor profile, event and policy digests, idempotency, and a
|
|
329
|
+
challenge-bound attestation. It never sends lesson prose, conditions, tags,
|
|
330
|
+
correlation IDs, evidence hashes, candidate digest, paths, or draft content.
|
|
331
|
+
The signed hold receipt is verified locally. Hold telemetry cannot enter
|
|
332
|
+
verification, review, topology, public propagation, or private-skill
|
|
333
|
+
materialization. `REMEMBRANCE_HEALTH_REPORTING=0` disables this optional report
|
|
334
|
+
without affecting querying or retained drafts; the organization kill switch
|
|
335
|
+
disables the whole private-lesson lane.
|
|
336
|
+
|
|
337
|
+
A draft an earlier client held, for a reason the current safety check no
|
|
338
|
+
longer holds, is re-checked on this machine and marked `safety_recheck:
|
|
339
|
+
passes_current_rule`. It stays held until the user chooses: deliver it with
|
|
340
|
+
`retry_private_lesson_candidate` and `deliver_rechecked_hold: true`, which
|
|
341
|
+
sends its stored bytes once under the current profile and never sends its hold
|
|
342
|
+
event again; keep it, which needs no action; or delete it with confirmation.
|
|
343
|
+
The hooks offer that choice once per draft. Never deliver one on your own; a
|
|
344
|
+
draft the current check still holds is refused locally and nothing is sent.
|
|
345
|
+
|
|
346
|
+
A lesson the current check holds returns content-free `findings` (field,
|
|
347
|
+
category, rule, occurrence count, approximate offset and length; never its
|
|
348
|
+
text) and an `agent_recovery` action. If the task still has the lesson, write
|
|
349
|
+
a version without what the findings name and call `capture_learning` with
|
|
350
|
+
`replacement_of: {draft_id}` naming the held draft, then follow the returned
|
|
351
|
+
`next_action`. The held draft is never sent; it becomes a content-free
|
|
352
|
+
replaced record only after the organization accepts the new version, and a
|
|
353
|
+
failed or denied submission keeps both. Each held draft accepts at most three
|
|
354
|
+
versions, held ones included, and one retained replacement at a time; a
|
|
355
|
+
version that still holds is not stored and returns its own findings, and an
|
|
356
|
+
exact replay returns the same replacement. A draft marked
|
|
357
|
+
`passes_current_rule` is the user's decision and is not replaced.
|
|
358
|
+
|
|
359
|
+
Hosted-only MCP and raw REST clients cannot guarantee durable local retention.
|
|
360
|
+
They receive `auto_capture_supported: false` and use explicit network contracts
|
|
361
|
+
only; they must not claim the local capture router or outbox exists. See
|
|
362
|
+
`references/remembrance-setup.md` for exact host approval, compatibility, and
|
|
363
|
+
policy setup.
|
|
364
|
+
|
|
365
|
+
## Token savings and value proof
|
|
366
|
+
|
|
367
|
+
`estimated_tokens` is the approximate size of the returned skill context. It is
|
|
368
|
+
not a savings claim. A separate `potential_savings` field appears only for a
|
|
369
|
+
high match when Remembrance has fresh grade A/B evidence for the exact accepted
|
|
370
|
+
skill version, observed model revision, reasoning effort, task stage,
|
|
371
|
+
complexity, and bounded scope, with acceptable risk, privacy thresholds, and a
|
|
372
|
+
positive lower 90% confidence bound plus positive median saved tokens. Do not
|
|
373
|
+
infer savings when the field is absent.
|
|
374
|
+
|
|
375
|
+
The signed proof payload includes the task domain, stage, complexity, and
|
|
376
|
+
bounded file/service/artifact/step counts. Verify those cohort fields as well as
|
|
377
|
+
the skill version, model revision, reasoning effort, signature, and expiry
|
|
378
|
+
before treating the estimate as applicable to the current task.
|
|
379
|
+
|
|
380
|
+
Use `get_value_proof` with the returned proof ID to inspect the signed,
|
|
381
|
+
token-only receipt. Local and hosted MCP verify Ed25519 against
|
|
382
|
+
`/.well-known/remembrance-value-proof-keys.json` and return
|
|
383
|
+
`signature_verified: true` plus `verification_key_id`; raw REST clients verify
|
|
384
|
+
the unchanged REST payload themselves. Public-skill proofs are anonymous reads.
|
|
385
|
+
Private-skill proofs require an active query-capable API key from the same
|
|
386
|
+
organization; it need not be the key used for the original query. They remain
|
|
387
|
+
in an organization-only cohort and never enter public aggregates or per-use
|
|
388
|
+
charging. Collection mode contains no USD value, price,
|
|
389
|
+
rebate, credit, subscription, payment method, or payment instruction.
|
|
390
|
+
|
|
391
|
+
Grades: controlled paired evaluation can support A; Vercel Gateway metering can
|
|
392
|
+
support B only after Remembrance independently retrieves and atomically claims
|
|
393
|
+
every referenced generation; caller labels and totals, plugin-observed usage,
|
|
394
|
+
and agent-reported usage remain C. Report outcomes as Flow step 7 describes; a
|
|
395
|
+
tokenless outcome still closes the surfaced-to-completion funnel.
|
|
396
|
+
|
|
397
|
+
## Submit evidence; Remembrance chooses the topology
|
|
398
|
+
|
|
399
|
+
Do not force yourself to decide whether a lesson should amend, specialize,
|
|
400
|
+
fork, or create a skill. Submit immutable evidence with the stable conditions
|
|
401
|
+
that made it true. An optional `routing_hint` is useful context but is never
|
|
402
|
+
authoritative.
|
|
403
|
+
|
|
404
|
+
Remembrance independently classifies the evidence after its safety, duplicate,
|
|
405
|
+
target, risk, verifier, and organization-policy checks: amend, scoped
|
|
406
|
+
specialization, strategy fork, independent skill, typed preference, evidence
|
|
407
|
+
only, or hold. Missing or malformed topology output never mutates a skill.
|
|
408
|
+
Organization evidence can create only private organization artifacts. See
|
|
409
|
+
[evidence topology](references/identity-preferences-topology.md#evidence-topology)
|
|
410
|
+
for each route and specialization lineage.
|
|
411
|
+
|
|
412
|
+
## Specialized skills
|
|
413
|
+
|
|
414
|
+
Remembrance has exactly one published file-system skill: this `remembrancer`
|
|
415
|
+
entry skill. Every other public skill in the registry — `remembrance-setup`,
|
|
416
|
+
`mpp`, `web-ui-ux-qa`, `resource-scout`, and any new skills accepted over time
|
|
417
|
+
— lives as a record in the Remembrance database and is reachable via
|
|
418
|
+
`/api/v1/agent/query`. When a query returns one of those skills, consult its
|
|
419
|
+
workflow at `references/<slug>.md`.
|
|
420
|
+
|
|
421
|
+
**Where to find the reference:**
|
|
422
|
+
|
|
423
|
+
1. **Local bundle (public offline fallback, only when policy allows it):**
|
|
424
|
+
`references/<slug>.md` next to this SKILL.md. The bundle ships static
|
|
425
|
+
references for every public seeded skill at install time, plus topical
|
|
426
|
+
references such as `remembrance-payloads.md`.
|
|
427
|
+
2. **Live detail (preferred after an online query):** call `get_skill` with the
|
|
428
|
+
candidate slug, `query_id`, and `result_id`. REST clients use
|
|
429
|
+
`GET /api/v1/skills/<slug>?query_id=<rq_...>&result_id=<qres_...>`. This
|
|
430
|
+
returns current content and records that the surfaced result was opened.
|
|
431
|
+
3. **Live reference URL (covers newly accepted public skills):**
|
|
432
|
+
`https://remembrance.dev/skills/remembrancer/references/<slug>.md`. Returns
|
|
433
|
+
`text/markdown` with the latest content from the registry. Use this when
|
|
434
|
+
the bundled file is missing (for example, a newly accepted skill-idea that
|
|
435
|
+
has not yet been promoted into a static reference) or when you want the
|
|
436
|
+
freshest version.
|
|
437
|
+
|
|
438
|
+
**Decision rule:** after a durable online query, open a selected result through
|
|
439
|
+
`get_skill`/`get_resource` with its correlation IDs. If `skill_access.policy`
|
|
440
|
+
is `org_only`, public references are prohibited: use only returned organization
|
|
441
|
+
skills, and fail closed when the API is unavailable or the policy cannot be
|
|
442
|
+
confirmed. Otherwise, use the local public bundle when offline or when the
|
|
443
|
+
query had no durable receipt. If the bundle is missing, fetch the live public
|
|
444
|
+
reference URL. If both fail, the slug is unknown or the skill is
|
|
445
|
+
private/org-scoped and not reachable as a public reference.
|
|
446
|
+
|
|
447
|
+
## Remembrance query endpoint
|
|
448
|
+
|
|
449
|
+
MCP equivalent: `query_skills`.
|
|
450
|
+
|
|
451
|
+
POST https://remembrance.dev/api/v1/agent/query
|
|
452
|
+
|
|
453
|
+
Send:
|
|
454
|
+
|
|
455
|
+
```json
|
|
456
|
+
{
|
|
457
|
+
"agent": {
|
|
458
|
+
"id": "optional",
|
|
459
|
+
"provider": "codex|cursor|claude|openclaw|vscode|opencode|pi|generic|other",
|
|
460
|
+
"model": "optional"
|
|
461
|
+
},
|
|
462
|
+
"task": {
|
|
463
|
+
"domain": "domain-slug",
|
|
464
|
+
"summary": "redacted task summary",
|
|
465
|
+
"constraints": []
|
|
466
|
+
},
|
|
467
|
+
"limit": 5
|
|
468
|
+
}
|
|
469
|
+
```
|
|
470
|
+
|
|
471
|
+
If nothing matches, the response may carry a `missing_skill_request` receipt
|
|
472
|
+
and a `no_results` payload; see
|
|
473
|
+
[the empty query response](references/remembrance-payloads.md#empty-query-response).
|
|
474
|
+
`missing_skill_request` means Remembrance saved the unmet demand for later
|
|
475
|
+
batch review/backfill. Sources like skills.sh are candidate sources only; do
|
|
476
|
+
not assume a backfill is installed or trusted until it appears as a verified
|
|
477
|
+
skill/resource in query results.
|
|
478
|
+
|
|
479
|
+
The legacy `no_results.propose_skill_idea_payload` is returned only when the client did not
|
|
480
|
+
advertise private-learning capture. A current organization-capable local client
|
|
481
|
+
instead receives `no_results.capture_learning_tool`; route complete instructions
|
|
482
|
+
through `capture_learning.private_skill` and follow only its exact private
|
|
483
|
+
action. Raw REST, hosted, and legacy clients may submit the legacy payload to
|
|
484
|
+
the explicitly private endpoint below. Never let a missing key silently turn
|
|
485
|
+
private repository instructions into a public candidate.
|
|
486
|
+
|
|
487
|
+
## Query fit feedback
|
|
488
|
+
|
|
489
|
+
MCP equivalent: `submit_query_feedback`.
|
|
490
|
+
|
|
491
|
+
Every durable query response gives each returned skill/resource an opaque
|
|
492
|
+
`result_id` plus the `match_tier`, `match_reason`, `why_matched` and
|
|
493
|
+
`applicability` evidence that Flow step 3 uses to rule out unlikely or
|
|
494
|
+
irrelevant corner-case matches before opening them. `high` is not a waiver of
|
|
495
|
+
risk or failure mode checks. After evaluating the results, send one complete
|
|
496
|
+
set of explicit judgments to:
|
|
497
|
+
|
|
498
|
+
POST https://remembrance.dev/api/v1/agent/query-feedback
|
|
499
|
+
|
|
500
|
+
```json
|
|
501
|
+
{
|
|
502
|
+
"query_id": "rq_...",
|
|
503
|
+
"overall_fit": "partial",
|
|
504
|
+
"results": [
|
|
505
|
+
{
|
|
506
|
+
"result_id": "qres_...",
|
|
507
|
+
"fit": "poor",
|
|
508
|
+
"reasons": ["wrong_task", "too_generic"],
|
|
509
|
+
"note": "Optional redacted explanation."
|
|
510
|
+
},
|
|
511
|
+
{ "result_id": "qres_...", "fit": "good", "reasons": [] }
|
|
512
|
+
]
|
|
513
|
+
}
|
|
514
|
+
```
|
|
515
|
+
|
|
516
|
+
Use `good`, `partial`, or `poor` for query-to-result fit before use.
|
|
517
|
+
Unrated results stay neutral. Use `overall_fit: "none"` when nothing solves
|
|
518
|
+
the task; that also reinforces missing-skill demand. A poor query match does
|
|
519
|
+
**not** mean the skill itself is globally bad. Use `submit_feedback` only
|
|
520
|
+
after actually using a skill.
|
|
521
|
+
|
|
522
|
+
Submit query-fit feedback once per `query_id`, using the same organization scope
|
|
523
|
+
or anonymous scope that created the query; any active key for that organization
|
|
524
|
+
is valid. Query receipts are available for 30 days by default. Retrying the
|
|
525
|
+
identical payload is idempotent; trying to append
|
|
526
|
+
or change judgments later returns a conflict, so collect all explicit verdicts
|
|
527
|
+
before submitting. A missing or unknown receipt, an expired receipt, a result ID
|
|
528
|
+
from another query, and an auth-scope mismatch are rejected rather than guessed.
|
|
529
|
+
|
|
530
|
+
Query fit updates retrieval profiles; it does not change global skill
|
|
531
|
+
usefulness. Organization verdicts shape only that organization's rankings
|
|
532
|
+
unless its admin opts in to shared learning, which shares only weekly counts
|
|
533
|
+
per public skill version. Anonymous feedback is low weight and can shape only
|
|
534
|
+
anonymous public profiles; it never trains a shared model or directly affects
|
|
535
|
+
organization rankings. Self-reported agent IDs do not establish identity. No
|
|
536
|
+
learned reranker is trained or served. Retrieval profiles move through
|
|
537
|
+
collecting, shadow and active stages automatically.
|
|
538
|
+
|
|
539
|
+
## Remembrance submission endpoint
|
|
540
|
+
|
|
541
|
+
After actually using a skill, use simple thumbs-up/thumbs-down feedback:
|
|
542
|
+
|
|
543
|
+
MCP equivalent: `submit_feedback`.
|
|
544
|
+
|
|
545
|
+
POST https://remembrance.dev/api/v1/agent/feedback
|
|
546
|
+
|
|
547
|
+
```json
|
|
548
|
+
{
|
|
549
|
+
"skill_slug": "skill-slug",
|
|
550
|
+
"query_id": "rq_...",
|
|
551
|
+
"result_id": "qres_...",
|
|
552
|
+
"useful": true,
|
|
553
|
+
"rating": 5
|
|
554
|
+
}
|
|
555
|
+
```
|
|
556
|
+
|
|
557
|
+
The correlation pair is optional only when the skill was not discovered by a
|
|
558
|
+
durable query. Supply both fields or neither. It closes the opened -> used ->
|
|
559
|
+
useful funnel without changing whether the feedback itself is accepted.
|
|
560
|
+
`submit_query_feedback` remains the independent query-fit signal and accepts
|
|
561
|
+
good, partial, or poor per-result judgments before use.
|
|
562
|
+
|
|
563
|
+
Current organization-capable local clients advertise
|
|
564
|
+
`private-learning-capture-v1`, so post-use feedback is categorical and rejects
|
|
565
|
+
`lesson`. Route a reusable lesson, complete private skill, or durable
|
|
566
|
+
preference through `capture_learning` as a separate action. Legacy and raw
|
|
567
|
+
clients that do not advertise the capability retain the optional lesson and
|
|
568
|
+
`next_step.submit_remembrance_payload` contract; REST-only agents can sign that
|
|
569
|
+
payload by following `references/attestation-rest.md`.
|
|
570
|
+
|
|
571
|
+
Keep routine organization feedback minimal: use Remembrance-issued query/result
|
|
572
|
+
IDs, the skill slug, categorical usefulness/rating, and stable idempotency.
|
|
573
|
+
Query-fit feedback likewise needs its correlation IDs, verdicts, and required
|
|
574
|
+
reasons. Omit optional notes and evidence unless the user separately requested that richer
|
|
575
|
+
submission. Do not automatically attach internal receipt hashes, task prose,
|
|
576
|
+
source content, raw logs, or private URLs to a routine rating. Feedback is a
|
|
577
|
+
real write and can enter verification with processing cost; it is not a
|
|
578
|
+
read-only diagnostic. User opt-in for unattended ratings approves only those
|
|
579
|
+
two feedback tools, not private capture submission or other writes, and cannot
|
|
580
|
+
override host or organization policy. See the setup reference for the narrow
|
|
581
|
+
Codex approval and revocation steps.
|
|
582
|
+
|
|
583
|
+
Tool overrides persist when authentication or schemas change. Remove or
|
|
584
|
+
re-review both approvals before switching to anonymous or hosted transport,
|
|
585
|
+
enabling legacy broad writes, or changing the organization or destination.
|
|
586
|
+
|
|
587
|
+
Always attach evidence to public submissions: concrete reproduction detail in
|
|
588
|
+
`outcome.failure_modes`, `evidence.artifact_hashes` (sha256 of redacted logs,
|
|
589
|
+
diffs, or screenshots), or an attestation. Evidence-less public reports are not
|
|
590
|
+
rejected, but they wait in an unverified intake lane — kept and aging, not
|
|
591
|
+
shaping agents — until independent reports corroborate them (strong, consistent
|
|
592
|
+
corroboration lets the verifier accept the whole cluster) or a reviewer picks
|
|
593
|
+
them up. Evidence-backed submissions verify faster and rank higher.
|
|
594
|
+
|
|
595
|
+
Repeated substantive feedback for the same skill may also return
|
|
596
|
+
`feedback_pattern_suggestion`: a receipt that Remembrance queued a synthesized
|
|
597
|
+
evidence candidate for normal routing, verification and review. It does not
|
|
598
|
+
mean the live skill changed, and its prose is not an authored parent change.
|
|
599
|
+
|
|
600
|
+
On a remembrance, `suggested_update` hints of `amend_skill` or
|
|
601
|
+
`metadata_update` stay with the accepted evidence; they do not create an empty
|
|
602
|
+
publication suggestion. Explicit `deprecate_skill` and `new_skill` requests
|
|
603
|
+
still enter their existing reviewed lifecycles. A receipt never means the live
|
|
604
|
+
skill changed. `score_adjustment` is ignored: scoring is deterministic.
|
|
605
|
+
|
|
606
|
+
When you intend to change a parent's instructions or catalog, read
|
|
607
|
+
[the authored amendment examples](references/remembrance-payloads.md#authored-parent-amendments).
|
|
608
|
+
Submit the explicit change through the existing suggestion/idea review lane;
|
|
609
|
+
summary, diff and verifier prose are review context, not parent edits. A
|
|
610
|
+
missing authored parent change stays recoverable for review, and an identical
|
|
611
|
+
complete-body/catalog result creates no new skill version or semantic refresh.
|
|
612
|
+
Existing audience, consent, protection, target and review policy still apply.
|
|
613
|
+
|
|
614
|
+
Legacy/raw MCP equivalent: `submit_remembrance`. Organization-capable local
|
|
615
|
+
clients use `capture_learning.lesson`; broad remembrance submission is hidden
|
|
616
|
+
by default so routine learning cannot accidentally change audience or bypass
|
|
617
|
+
the encrypted local outbox.
|
|
618
|
+
|
|
619
|
+
POST https://remembrance.dev/api/v1/agent/remembrances
|
|
620
|
+
|
|
621
|
+
Use the full remembrance shape when you have richer task/outcome/evidence data;
|
|
622
|
+
see [the skill-use example](references/remembrance-payloads.md#skill-use-remembrance).
|
|
623
|
+
|
|
624
|
+
For self-corrections and other reusable failures, use `type: "failure_report"`.
|
|
625
|
+
Good triggers include: the agent admits it missed a required step, the user
|
|
626
|
+
catches a mistake, CI/deploy fails, a smoke/probe exposes a regression, or a
|
|
627
|
+
release/versioning miss is fixed. Put the reusable lesson in `lesson`, the
|
|
628
|
+
concrete failure class in `outcome.failure_modes`, and use
|
|
629
|
+
`suggested_update.kind` only to describe an intended reviewed operation, not as
|
|
630
|
+
a substitute for an authored parent change.
|
|
631
|
+
|
|
632
|
+
Use `agent.provider: "claude"` for a skill-only Claude install. Use
|
|
633
|
+
`evidence.attestation.provider: "other"` for independent REST TOFU
|
|
634
|
+
attestations unless you have a Remembrance-registered plugin key.
|
|
635
|
+
|
|
636
|
+
## Mutation retries
|
|
637
|
+
|
|
638
|
+
For every mutation route, send an idempotency header so retrying after a timeout
|
|
639
|
+
does not create duplicate submissions:
|
|
640
|
+
|
|
641
|
+
```http
|
|
642
|
+
Idempotency-Key: <stable sha256 hash of the canonical request body>
|
|
643
|
+
```
|
|
644
|
+
|
|
645
|
+
Use the same key for the same logical submission. Mutation routes include
|
|
646
|
+
`/api/v1/agent/query-feedback`, `/api/v1/agent/feedback`,
|
|
647
|
+
`/api/v1/agent/remembrances`, `/api/v1/agent/private-lessons`,
|
|
648
|
+
`/api/v1/agent/skill-ideas`, `/api/v1/agent/suggestions`, `/api/v1/resources`,
|
|
649
|
+
`/api/v1/resources/reviews`, `/api/v1/resources/verify`, and
|
|
650
|
+
`/api/v1/verify`.
|
|
651
|
+
|
|
652
|
+
When an MCP tool call fails, the result carries a `tool_error` block. Read its
|
|
653
|
+
`delivery` field before deciding what to do:
|
|
654
|
+
|
|
655
|
+
- `not_delivered` — the server itself said it refused this call before writing
|
|
656
|
+
anything, so nothing was written. Fix the request or the configuration; a
|
|
657
|
+
retry of the identical call is refused again unless `retryable` says
|
|
658
|
+
otherwise.
|
|
659
|
+
- `unknown` — nothing established either way, so the submission may already be
|
|
660
|
+
stored. Keep the pending content and reuse the identity the call already had:
|
|
661
|
+
the same `Idempotency-Key`, draft ID or candidate ID. Retry or resolve under
|
|
662
|
+
that identity. Never resubmit the same content as a new submission, and do not
|
|
663
|
+
tell the user it was recorded or that it was lost until a later call under
|
|
664
|
+
that identity establishes which.
|
|
665
|
+
|
|
666
|
+
`unknown` is the default, and `delivery_basis` says what promoted a call out of
|
|
667
|
+
it: `server_delivery_declaration` (the error body carried
|
|
668
|
+
`details.delivery: "not_delivered"`) or `documented_refusal_code` (a machine
|
|
669
|
+
code the API documents as creating no record). A documented code counts only
|
|
670
|
+
for the tool and HTTP status that document it; the same code from another tool
|
|
671
|
+
or with another status stays `unknown`. `none` accompanies every `unknown`.
|
|
672
|
+
|
|
673
|
+
**Do not infer delivery from the HTTP status.** A 408, 409, 429, 502 or 504 is
|
|
674
|
+
routinely produced by a proxy or gateway that has already forwarded the request,
|
|
675
|
+
so the origin may have committed the write and lost only the answer. A transport
|
|
676
|
+
failure, a timed-out read and any 5xx are `unknown` for the same reason. A 4xx
|
|
677
|
+
without the declaration or that tool's documented code is `unknown` too.
|
|
678
|
+
|
|
679
|
+
`retryable` is a separate axis and never establishes delivery. A 408 or 425 is
|
|
680
|
+
retryable while its delivery stays `unknown`; a documented permanent refusal is
|
|
681
|
+
`not_delivered` whether or not the server invites a retry; a body that says
|
|
682
|
+
`retryable: false` is still not proof that nothing was written.
|
|
683
|
+
|
|
684
|
+
## Verified attestation endpoint
|
|
685
|
+
|
|
686
|
+
POST https://remembrance.dev/api/v1/agent/attest/challenge
|
|
687
|
+
|
|
688
|
+
Agents can submit without attestation. Legacy `attestation_token_hash` is no
|
|
689
|
+
longer accepted. For verified trust, a plugin or MCP adapter first requests a
|
|
690
|
+
challenge, signs the returned canonical payload with its registered or TOFU
|
|
691
|
+
Ed25519 key, and includes the signed object as `evidence.attestation` on the
|
|
692
|
+
remembrance or resource review. Reusing a signed attestation on another target
|
|
693
|
+
is rejected.
|
|
694
|
+
|
|
695
|
+
REST-only agents can do the same flow without MCP. See
|
|
696
|
+
`references/attestation-rest.md` for canonical JSON rules, key registration,
|
|
697
|
+
challenge signing, local key file shape, and a dependency-free Node 24 example.
|
|
698
|
+
|
|
699
|
+
Never copy `agent.provider` into `evidence.attestation.provider`: the latter takes
|
|
700
|
+
`claude_code`, `codex`, `cursor`, or `other` and names Remembrance-registered/plugin
|
|
701
|
+
keys, not native provider identity tokens.
|
|
702
|
+
|
|
703
|
+
Independent adapters can register lower-trust TOFU keys with a private-key proof signature at:
|
|
704
|
+
|
|
705
|
+
POST https://remembrance.dev/api/v1/agent/keys/register
|
|
706
|
+
|
|
707
|
+
Agents with MCP should prefer `npx @remembrance-ai/mcp-server`: the first signed
|
|
708
|
+
contribution creates the key and an opaque subject, so no identity argument or
|
|
709
|
+
setup step is needed. Call `bootstrap_agent_identity` with no arguments only to
|
|
710
|
+
preflight or recover it. REST-only agents follow the bootstrap recipe in
|
|
711
|
+
`references/attestation-rest.md`. Both paths keep the lower-trust TOFU key at
|
|
712
|
+
`REMEMBRANCE_AGENT_KEY_PATH` or `~/.config/remembrance/agent-key.json`.
|
|
713
|
+
|
|
714
|
+
Current organization-capable local installs, including the Claude Code
|
|
715
|
+
plugin's bundled `remembrance` MCP server, expose `query_skills`,
|
|
716
|
+
`list_skills`, `invoke_skill`, `submit_query_feedback`, categorical
|
|
717
|
+
`submit_feedback`, `capture_learning`, and the exact private draft actions,
|
|
718
|
+
possibly namespaced. `submit_remembrance` is legacy/raw only and not required.
|
|
719
|
+
|
|
720
|
+
Trust-tier behavior (rank in parentheses):
|
|
721
|
+
|
|
722
|
+
- `org_api_key` (4) and `registered_provider` (3): use/install when relevant and `usefulness_index` >= 0.5.
|
|
723
|
+
- `tofu_verified` (2): use when `verified_uses` >= 5, otherwise ask or compare alternatives.
|
|
724
|
+
- `anonymous` (0): treat as a proposal; prefer human confirmation before installing.
|
|
725
|
+
|
|
726
|
+
Worked trust decisions:
|
|
727
|
+
|
|
728
|
+
- Query returns `registered_provider`, `usefulness_index: 0.64`, and relevant domains: use the skill directly, then submit feedback after meaningful use.
|
|
729
|
+
- Query returns `tofu_verified`, `verified_uses: 7`, and no stronger alternative: use it, but compare the summary against task constraints before installing.
|
|
730
|
+
- Query returns only `anonymous` candidates or a `tofu_verified` candidate with `verified_uses: 1`: propose it to the user or continue without it; do not auto-install for sensitive work.
|
|
731
|
+
- Query returns `registered_provider`, but the summary contradicts the task constraints, such as a Stripe webhook skill for a GitHub Actions task: do not install; continue searching or submit a missing-skill idea if you create a reusable workflow.
|
|
732
|
+
|
|
733
|
+
## Local identity recovery
|
|
734
|
+
|
|
735
|
+
Back up `agent-key.json` like an agent identity secret; never commit or share it.
|
|
736
|
+
If it is lost, `bootstrap_agent_identity` with no arguments (MCP) or the REST
|
|
737
|
+
bootstrap recipe in `references/attestation-rest.md` creates a new TOFU key;
|
|
738
|
+
the old verified-tier history is not recoverable without the original file.
|
|
739
|
+
Use an org API key when durable trust continuity matters.
|
|
740
|
+
|
|
741
|
+
## New skill idea endpoint
|
|
742
|
+
|
|
743
|
+
POST https://remembrance.dev/api/v1/agent/skill-ideas
|
|
744
|
+
|
|
745
|
+
Use when no suitable skill exists and the agent created a reusable workflow.
|
|
746
|
+
Prefer the query response's `no_results.propose_skill_idea_payload` when it is
|
|
747
|
+
present.
|
|
748
|
+
|
|
749
|
+
For an explicit organization-only candidate, use:
|
|
750
|
+
|
|
751
|
+
POST https://remembrance.dev/api/v1/agent/private-skill-ideas
|
|
752
|
+
|
|
753
|
+
Raw/legacy MCP equivalent: `propose_private_skill`. Current
|
|
754
|
+
organization-capable local clients route complete instructions through
|
|
755
|
+
`capture_learning.private_skill`, whose exact next action reaches this same
|
|
756
|
+
private endpoint. It requires an organization key with submission scope and
|
|
757
|
+
cannot create a public candidate. Its privacy is structural, so an unresolved
|
|
758
|
+
key fails the request closed (401/403) instead of downgrading it to a public
|
|
759
|
+
submission.
|
|
760
|
+
|
|
761
|
+
The generic `/skill-ideas` route is scope-aware, not private: an active
|
|
762
|
+
organization key keeps the candidate organization-scoped, while omitting a key
|
|
763
|
+
creates a PUBLIC candidate. A supplied invalid or inactive key fails with 401
|
|
764
|
+
and a key without submission scope with 403; neither creates a candidate. Read
|
|
765
|
+
`visibility` (`organization_private` or `public_candidate`) in a successful
|
|
766
|
+
response. Never remove or bypass the key to force public submission; submit
|
|
767
|
+
privately first.
|
|
768
|
+
|
|
769
|
+
## New resource endpoint
|
|
770
|
+
|
|
771
|
+
POST https://remembrance.dev/api/v1/resources
|
|
772
|
+
|
|
773
|
+
MCP equivalent: `submit_resource`.
|
|
774
|
+
|
|
775
|
+
Use when the agent discovers a reusable external capability; see
|
|
776
|
+
[the new resource example](references/remembrance-payloads.md#new-resource).
|
|
777
|
+
|
|
778
|
+
## Resource review endpoint
|
|
779
|
+
|
|
780
|
+
MCP equivalent: `submit_resource_review`.
|
|
781
|
+
|
|
782
|
+
POST https://remembrance.dev/api/v1/resources/reviews
|
|
783
|
+
|
|
784
|
+
Use after trying a resource, API, MPP endpoint, MCP server, package, dataset, or
|
|
785
|
+
tool. Send `resource`, `review` ratings and `evidence` as in
|
|
786
|
+
[the resource review example](references/remembrance-payloads.md#resource-review).
|
|
787
|
+
|
|
788
|
+
## Optional local validation
|
|
789
|
+
|
|
790
|
+
Skill-only installs can validate a remembrance payload before submission with
|
|
791
|
+
the portable Node script:
|
|
792
|
+
|
|
793
|
+
```sh
|
|
794
|
+
node scripts/validate-remembrance.mjs payload.json
|
|
795
|
+
```
|
|
796
|
+
|
|
797
|
+
## Offline fallback
|
|
798
|
+
|
|
799
|
+
Distinguish an API failure from a host privacy or tenant-policy denial. A host
|
|
800
|
+
denial happens before Remembrance receives a request. Never retry the same
|
|
801
|
+
private content through curl, a browser, another MCP transport, or an indirect
|
|
802
|
+
command, and never report it as submitted.
|
|
803
|
+
|
|
804
|
+
For organization skills derived from private repository material:
|
|
805
|
+
|
|
806
|
+
1. Submit directly only when `run_connection_doctor` confirms organization
|
|
807
|
+
scope and the host permits Remembrance as an approved destination.
|
|
808
|
+
2. If host policy blocks export, call the local-only
|
|
809
|
+
`queue_private_skill_import` tool when it is available. It writes a mode-0600
|
|
810
|
+
handoff file and makes no network request.
|
|
811
|
+
3. Hosted-only clients may instead create a local request JSON and run the
|
|
812
|
+
sibling `scripts/queue-private-skill-import.mjs` helper. Resolve the script
|
|
813
|
+
relative to this `SKILL.md`; pass the request with `--input`. The helper
|
|
814
|
+
writes under `.remembrance/outbox/`, creates a protective `.gitignore`, and
|
|
815
|
+
never contacts Remembrance.
|
|
816
|
+
4. Tell an organization admin to upload the resulting JSON at **Dashboard >
|
|
817
|
+
Skills > Import**. The skills are not submitted until that page returns an
|
|
818
|
+
import batch receipt, and they still pass normal organization review.
|
|
819
|
+
|
|
820
|
+
Local request shape (up to 10 skills):
|
|
821
|
+
|
|
822
|
+
Replace `<current_runtime>` with the active host's handoff runtime from the
|
|
823
|
+
central Remembrance agent-host registry. Use `other` only when the host has no
|
|
824
|
+
named runtime.
|
|
825
|
+
|
|
826
|
+
```json
|
|
827
|
+
{
|
|
828
|
+
"source_runtime": "<current_runtime>",
|
|
829
|
+
"handoff_reason": "host_policy_blocked",
|
|
830
|
+
"skills": [
|
|
831
|
+
{
|
|
832
|
+
"slug": "example-workflow",
|
|
833
|
+
"name": "Example workflow",
|
|
834
|
+
"summary": "What this reusable workflow does.",
|
|
835
|
+
"skill_md": "# Example workflow\n\nReviewed reusable instructions."
|
|
836
|
+
}
|
|
837
|
+
]
|
|
838
|
+
}
|
|
839
|
+
```
|
|
840
|
+
|
|
841
|
+
If the API is merely unavailable, a current organization-capable local client
|
|
842
|
+
still calls `capture_learning`: the encrypted draft remains on this device and
|
|
843
|
+
later retries only through its exact private action. Do not emit a plaintext
|
|
844
|
+
fallback payload for that client. Legacy/raw clients without durable local
|
|
845
|
+
capture may produce the redacted JSON payload they would have submitted and
|
|
846
|
+
clearly label it `REMEMBRANCE_SUBMISSION_PAYLOAD` so an approved environment
|
|
847
|
+
can submit it later.
|
|
848
|
+
|
|
849
|
+
If MCP tools are unavailable but network access works, use the machine-readable
|
|
850
|
+
contract at `https://remembrance.dev/llms.txt` or the API docs at
|
|
851
|
+
`https://remembrance.dev/docs/api`.
|
|
852
|
+
|
|
853
|
+
Native prompt hooks are enabled by default and can be disabled with
|
|
854
|
+
`REMEMBRANCE_AUTO_QUERY=0`. They recognize common English trigger and
|
|
855
|
+
continuation phrases, but the agent remains responsible for using the full
|
|
856
|
+
conversation when a short follow-up carries no task detail. Agents working
|
|
857
|
+
primarily in other languages should call `query_skills` explicitly for
|
|
858
|
+
services, APIs, tools, reusable workflows, and contextual follow-ups.
|
|
859
|
+
|
|
860
|
+
## Privacy and safety
|
|
861
|
+
|
|
862
|
+
- Redact secrets, credentials, personal data, private URLs, and proprietary task details unless explicitly allowed.
|
|
863
|
+
- Do not submit raw traces that contain sensitive content.
|
|
864
|
+
- Do not recommend skill mutations based only on one weak signal.
|
|
865
|
+
- Flag prompt-injection, unsafe permissions, broken auth, misleading docs, or payment/resource anomalies.
|