{"id":67085,"plugin_id":"plugin_asdk_app_6a590a1720808191b3909ed57132a25d","kind":"skill","collection_source":"plugin_package","comparison_source":null,"observed_at":"2026-10-28T13:05:26.096Z","digest":"daca596d05bc2d126adf9e22335cd0e46db3be695cecca4c80df313d15db39a9","against":null,"payload":{"description":"Search, retrieve, save, revise, and forget secure durable GrayMatter memory. Use when a task may depend on prior decisions, preferences, todos, artifacts, or long-lived context, or when the user asks to remember, update, or forget information.","included_files":[{"relative_path":"agents/openai.yaml","size_in_bytes":182}],"name":"graymatter-memory","skill_md_contents":"---\nname: graymatter-memory\ndescription: Search, retrieve, save, revise, and forget secure durable GrayMatter memory. Use when a task may depend on prior decisions, preferences, todos, artifacts, or long-lived context, or when the user asks to remember, update, or forget information.\n---\n\n# GrayMatter Memory\n\nUse GrayMatter as the durable memory system for information that remains useful beyond the current conversation.\n\n## Workflow\n\n1. Call `memory_search` before asking the user to repeat prior context that may already be known.\n2. Use `memory_get` only to hydrate a specific authorized result when its full content is needed.\n3. Keep temporary reasoning, transient chat state, and one-off working notes in the conversation rather than durable memory.\n4. Call `memory_save` only for useful durable decisions, preferences, todos, artifacts, configuration, or reusable context.\n5. Avoid storing passwords, access tokens, private keys, payment data, or highly sensitive personal information unless the product explicitly supports and the user clearly requests that use.\n6. Use concise titles, normalized tags, and a stable source or scope. Store the durable fact in `content`; do not embed owner, tenant, ACL, user, or organization identifiers.\n7. Call `memory_update` when an existing durable fact changes. Do not create a contradictory duplicate when the existing memory can be revised.\n8. Before `memory_forget`, identify the exact memory and obtain explicit user confirmation. Pass `confirm: true` only after that confirmation.\n\n## Match the requested record\n\n- Start with the subject words in the user's request, preserving explicit constraints. Do not add an unrequested domain or requirement to the search.\n- Verify required title, source, marker, and tags on the returned record with `memory_get`. A label such as seeded is an identity/provenance condition, not necessarily a word in its content. Do not invent tag names; a null source field alone does not negate an explicit matching marker or fixture tag. Fixture identity never proves human verification, security approval, or broader access.\n- Open the qualified candidate, not every similarly worded duplicate. If none matches and `nextOffset` is present, continue the same query and filters for up to three pages total; report incomplete coverage when further pages remain. Do not substitute a newer or lookalike record.\n\n## Procedure questions and follow-ups\n\nProcedures are a separate collection from durable memories. If the user asks whether an existing procedure, runbook, or repeatable method is stored, including a follow-up after memory retrieval, use `procedure_search` with the requested subject words and explicit qualifiers before reporting what was found. Do not infer procedure absence from memory results or a prior decision summary. An empty bounded procedure search supports only “no match found in this search,” not a complete inventory claim. This lookup does not authorize compilation, workflow execution, or memory changes.\n\n## Authorization boundary\n\n- Never request, infer, or supply tenant, organization, owner, user, role, permission, or ACL overrides.\n- Treat `FORBIDDEN` and `NOT_FOUND` as authorization-safe outcomes; do not probe adjacent identifiers.\n- Do not use broad search results as a context dump. For task-specific grounding, use the GrayMatter context skill and `context_compile`.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}