[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M69A6MF7ZDEM4XQQASAZQRPF":3,"skill-same:01M69A6MF7ZDEM4XQQASAZQRPF":80},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":20,"linkOnly":21,"markdownContent":22,"markdownBody":23,"frontMatter":24,"refName":29,"commitSha":30,"skillDirectory":31,"forksCount":32,"repositoryHtmlUrl":33,"repositoryHomepageUrl":6,"ownerHtmlUrl":34,"ownerBlogUrl":35,"ownerDescription":36,"updatedAt":37,"install":38,"resources":50},"01M69A6MF7ZDEM4XQQASAZQRPF","memory",null,"Your memory store: overview, list, review, forget, edit, help.","microsoft\u002Famplifier-bundle-memory","microsoft","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F6154722?v=4","01M698VYDXZ6JW5WH3CRV650R8","Microsoft","01M69A6JTTC84WHNBD2FGCANPG",1,"MIT","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Famplifier-bundle-memory\u002Fblob\u002Fmain\u002Fskills\u002Fmemory\u002FSKILL.md",[],[5,19],"review","2026-11-10 10:12:30",false,"---\nname: memory\ndescription: \"Your memory store: overview, list, review, forget, edit, help.\"\nargument-hint: \"[list|review|forget|edit|remember|help] [arguments]\"\nmetadata:\n  amplifier.completions: completions.json\nuser-invocable: true\ndisable-model-invocation: true\n---\n\n# \u002Fmemory\n\nsession.v5 §6. `$ARGUMENTS` is empty, or starts with one word that chooses what\nhappens. Dispatch on that first word; the rest of the line is the argument.\n\n## Dispatch\n\n| `$ARGUMENTS` | Call |\n|---|---|\n| empty | `memory(operation=\"overview\")` |\n| `list` | `memory(operation=\"list\")` |\n| `list 2` | `memory(operation=\"list\", page=2)` |\n| `review` | `memory(operation=\"review\", action=\"list\")` |\n| `review 2` | `memory(operation=\"review\", action=\"list\", page=2)` |\n| `review accept s-042` | `memory(operation=\"review\", action=\"accept\", id=\"s-042\")` |\n| `review decline s-042` | `memory(operation=\"review\", action=\"decline\", id=\"s-042\")` |\n| `review decline s-042 because \u003Creason>` | `memory(operation=\"review\", action=\"decline\", id=\"s-042\", reason=\"\u003Creason>\")` |\n| `review skip s-042` | `memory(operation=\"review\", action=\"skip\", id=\"s-042\")` |\n| `forget m-017` | `memory(operation=\"forget\", id=\"m-017\")` |\n| `edit m-004 \u003Ctext>` | `memory(operation=\"edit\", id=\"m-004\", text=\"\u003Ctext>\", quote=\"\u003Ctext>\", writer=\"human\")` |\n| `remember \u003Ctext>` | `memory(operation=\"save\", text=\"\u003Ctext>\", quote=\"\u003Ctext>\", writer=\"human\")` |\n| `help` | the **Help** section below — no tool call |\n| anything else | the **Help** section below — no tool call |\n\nFor reads and ordinary single-id requests, make the stated call and relay its\nresult. The defined multi-call exceptions are a frozen multi-id **`review`**\nbatch and an approved conversational prior-memory consolidation: in the latter,\nedit the survivor first and then forget each displayed duplicate in order. Stop\non a refusal and relay every actual result in order. Several stable ids in one\nbreath are several calls, in the order they were said.\n\n**Relay the tool's result exactly as it stands — it is relayed verbatim and never reworded.**\nTwo shapes, and which one you use depends on what came back:\n\n**The overview and every receipt go inside a fenced code block**, like this:\n\n    ```\n    17 suggestions waiting. \u002Fmemory review to walk them.\n    4 memories. \u002Fmemory list to see them.\n    last 7 days: 6 written, 1 forgotten, 2 cited.\n    \u002Fmemory list · review · forget \u003Cid> · edit \u003Cid> \u003Ctext> · help\n    ```\n\nThe fence is not decoration. Outside one, markdown folds those lines into a\nsingle paragraph and treats `\u003Cid>` and `\u003Ctext>` as tags and drops them.\nNo text before the fence, none after.\n\n**A `list` page and a `review` page go bare — no fence.** They are already\nmarkdown: bold ids, blockquoted quotes, one blank line between items. A fence\nwould show the asterisks as asterisks and refuse to wrap, which is the wall\nthey exist to replace. Paste the page as it stands, with nothing before or\nafter it.\n\nWhen one clear request needs multiple independent memory calls, make them one\nat a time in the stated order and wait for each result. A later refusal does\nnot undo an earlier success. Stop after that refusal and relay every earlier\nsuccessful receipt followed by the refusal, in order, inside one fence. Never\nreplace that compound result with a blanket “nothing changed” message.\n\nIf the tool refuses, relay its one line as it stands and stop, except for the\none read-only correction in **`review`** below. A refusal is not an\ninvestigation: do not go looking through `MEMORY.md` for something close, and\nnever act on a different id than the one named. No store yet means\n`amplifier-memory init`.\n\nThree refusals are about this session rather than this command, and each one is\nfinal — relay the line and stop, do not retry, do not look for another route:\n\n- `memory is disabled for this instance (\u003Cpath>: enabled: false).` — the\n  instance is switched off (session.v5 §12). Every operation answers this, reads\n  included, and nothing is written. The remedy is a human editing `enabled` in\n  that `config.yaml`; it is not yours to change.\n- `refused: session.v4 §13 — a worker session never …` — this session declared a\n  non-human origin, so it may not save, edit or forget. Reading still works: the\n  memories still apply, the work is still this human's. Nobody is here to answer\n  a suggestion either, so no suggestions line is shown.\n- `refused: session.v4 R2 — a sub-agent session never …` — the same rule, one\n  step down: a sub-agent inherits the memories and never writes.\n\n## Pages\n\n`list` and `review` come back one page at a time, and the page says which page\nit is. `\u003Cpage>` selects one: `\u002Fmemory review 2` is `page=2`.\n\n**`next` is this call again with `page + 1`.** Nothing remembers a page for you\n— read the page number off the header you just relayed and add one. A page past\nthe last is refused in one line that names the last page; relay it and stop.\n\n## `edit` and `remember` write the human's own words\n\n`writer=\"human\"` is what makes them the human's words, and the text is its own\nquote — that is what the writer requires (session.v5 §5). Split `$ARGUMENTS` at\nthe first space after the first word: `edit` takes an id then the new text;\n`remember` takes the text and nothing else. Do not tidy, expand, or rephrase\nwhat was typed.\n\nAn `edit` keeps the id. Every reference to `m-004` — in this session, in `git\nlog`, in the human's own head — still points at the same memory, refined. A\nforget plus a save retires the number and starts a new one, which is how\n\"update 4\" once deleted the wrong line.\n\n## Conversational prior-memory management\n\nAfter you have relayed a real `list` page in this conversation, a later natural\nreply may refer to an entry in that **shown snapshot** by its stable `m-NNN` id,\nunambiguous displayed text or description, or an explicit displayed position\nsuch as `#2` or `the first memory`. This is the narrow conversational exception:\nliteral `\u002Fmemory edit` and `\u002Fmemory forget`, direct tool calls, and shell commands\nstill take stable ids only. A bare number in one of those forms means an id, never\na current position.\n\nFreeze every stated action and its resolved `m-NNN` target from the displayed\nsnapshot before any mutation. This works for an older or nonconsecutive id and\nfor an entry on a later page that was actually shown. If the target, action, or\nmap is ambiguous, conflicting, or lost, ask one short clarification question and\nmake no call. Never guess. If a mapped id is missing or stale, relay that refusal\nand stop: do not list again, rebind a position, retarget a remaining action, or\nlook for a close match.\n\nA pointer ending `→ topics\u002F\u003Cslug>.md` is read-only: never pass its id to `edit`\nor `forget`. When the human selects a displayed pointer, use the existing\n`read_file` capability only for that exact `topics\u002F\u003Cslug>.md` path beneath the\ninstance whose `MEMORY.md` path the displayed list named. Relay the real topic\nbody bare before resolving a later reference to one of its actual `m-NNN` lines.\nDo not enumerate topics, construct a path from a guess, write files, install or\ngrant a capability. If `read_file` is unavailable or refuses, or the displayed\ninstance\u002Fpath cannot be established, state that limitation and stop.\n\nFor one clear reword, call the existing operation once:\n`memory(operation=\"edit\", id=\u003Cfrozen m-NNN>, text=\u003Cderived replacement>,\nquote=\u003Cthe human's exact correction>, writer=\"assistant\")`. The actual human\ninstruction is the quote; derived wording is assistant-authored. For one clear\nremoval, call `memory(operation=\"forget\", id=\u003Cfrozen m-NNN>)`. Neither requires\nanother confirmation. Relay the actual receipt exactly in a fence.\n\n**Consolidation is a preview, not a new command or bulk operation.** Before any\nwrite, show the exact survivor `m-NNN`, assistant-derived replacement, actual\nhuman correction quote, and ordered duplicate `m-NNN` ids. Make no call for that\npreview. Only an immediately later `yes` or `do it` approves that exact displayed\nmap; no approval or a decline writes nothing. On approval, edit the survivor\nfirst using the human quote and `writer=\"assistant\"`, then forget the named\nduplicates one at a time in their shown order. If the edit fails, do not forget\nanything. If a later forget fails, stop immediately. Relay each actual earlier\nreceipt and the later refusal unchanged in one fence, in call order. Never call\nthe result atomic or say nothing changed after an earlier success.\n\nThis is different from correcting a **pending suggestion** (`s-NNN`): follow\nthe corrected-acceptance flow in **`review`**. Never accept original text and\nthen edit it, and never turn a pending suggestion into an unrelated new memory.\n\n## `review`\n\nsuggestions.v2 §6. The daily job proposes lines it heard and never writes one\nitself; this is where they are answered, one id at a time. Ids here are `s-NNN`.\n\nAccept writes the line through the same writer every save uses. Decline is final\nand reversible only by hand, so never decline a suggestion whose target is\nunclear — when an answer such as \"no\" cannot clearly resolve from the displayed\npage, ask which. Skip changes nothing and leaves the item waiting. Nothing about\na suggestion is ever in your context: you learn what is waiting by calling\n`review`, the same way the human does.\n\nWhen the human clearly declines one or more shown suggestions **because** of one\nreason, freeze the full action\u002Fid\u002Freason map before the first write. A reason is\nshared only when the human states that the same raw reason applies to every\nselected decline. Keep distinct reasons with their ids. Item-differentiated\nclauses whose assignment to the selected ids is not explicit are not a shared\nreason: do not broadcast the mixed text, infer an unstated map, or drop it.\nAsk one short question that maps each stated reason to an id, and make no call\nuntil the map is clear. Then call `memory(operation=\"review\", action=\"decline\",\nid=\u003Cs-NNN>, reason=\u003Cthe exact human reason>)` one stable id at a time. A plain\ndecline does not ask why. Reason is decline-only: never pass it to accept or\nskip.\n\n**One read-only correction.** Exactly once, correct a first call to\n`accept`, `decline`, or `skip` with no id to\n`memory(operation=\"review\", action=\"list\", page=\u003Crequested page>)` only when\nthe original request was `review` or `review \u003Cpage>` and the first result is\nthat action's `refused: review \u003Caction> needs the suggestion id, e.g. s-042`\nargument refusal. Preserve the requested page (use page 1 when none was\nrequested). If the correction succeeds, relay only its bare rendered page; do\nnot present the first argument error. A second failure is terminal.\n\nNever use this correction for a user-requested `accept`, `decline`, or `skip`\nwhose target cannot clearly resolve from the displayed page; ask which id\ninstead. Disabled instances, unavailable review, worker or sub-agent write\nrefusals, unknown ids, privacy or writer refusals, and library failures are\nfinal: relay them and stop. Never invent an id, turn a requested write into a\nread, or inspect files to route around a refusal.\n\n**Conversational addressing from a displayed page.** After you have relayed a\nreal `review` page in this conversation, a later natural-language reply may\nrefer to that displayed page by `#1`, `first one`, or unambiguous text from one\nitem. Resolve each clear reference to that page's stable `s-NNN` id before\nmaking a call. This is only for the conversational reply to the displayed page:\ntool inputs, shell commands, and `\u002Fmemory review accept|decline|skip` still\nrequire stable ids.\n\nFor a batch such as \"accept #1, decline #2\", resolve the **complete** requested\nbatch first and freeze its action-to-id map. Then call the stable ids one at a\ntime in the human's stated order; do not list again between calls, and relay all\nreceipts together inside one fence. No confirmation is needed when every action\nand target is clear. If you explicitly stated the complete map in your\nimmediately preceding reply, \"yes\" approves that exact map without retyping\nids.\n\nIf any reference or map is unknown, lost, ambiguous, or conflicting, ask one\nconcise clarification question and make no write. If a mapped stable id is\nmissing or stale, stop calling tools: do not list again, rebind a position,\nsubstitute another item, or shift a remaining action. If an earlier action in\nthis same batch succeeded, relay each earlier receipt followed by this refusal\ntogether in one fence, in call order. Otherwise relay the refusal as it stands.\nDo not infer an unnamed decline or accept every displayed item.\n\n**Corrected acceptance of one pending suggestion.** For a clear `accept it but\n...` against one stable id from that displayed, frozen page, derive the corrected\ntext but preserve the human's exact correction as `quote`. Call\n`memory(operation=\"review\", action=\"accept\", id=\u003Cs-NNN>, text=\u003Cderived corrected\ntext>, quote=\u003Cactual correction>)`. Do not pass a writer: this path records the\nderived wording as assistant-authored. Both `text` and `quote` are required; a\nmissing one is a refusal, never an ordinary accept.\n\nFor a clear request to revise without accepting, display the derived corrected\ntext, the actual correction quote, and the exact `s-NNN` proposal-to-id map with\nno tool call and no receipt. Only an immediately later `yes` or `do it` approves\nthat exact displayed map; then make the corrected-accept call above. A decline\nof that proposal leaves its source pending; an explicit `review decline s-NNN`\nis the ordinary decline. A missing, ambiguous, or stale map, no approval, or any\nrefusal leaves the source pending. Do not re-list, rebind, or retarget it.\n\n**Several stable ids in one breath are several calls.** \"accept s-002 and\ns-003, skip s-004\" is three calls, in that order, one id each — the tool takes\none id and this is not a limitation to work around. Make them all, then relay\ntheir results together, inside one fence, in the order they were made — include\nsuccessful receipts and a later refusal if one occurs. Never say that nothing\nchanged after an earlier call succeeded, and never hide that success behind the\nlast refusal.\n\nA page numbers its items so they can be read. A direct tool, shell, or slash\ncommand `accept 2` is refused, and the refusal names the ids that page holds.\n\n## Ids\n\nOutside conversational review and conversational prior-memory addressing from an\nactual displayed page, ids are the only names. A bare number N means m-00N,\nnever a position in a list. Never guess an id. A forgotten id is never reused.\n\n## Cite at use\n\nWhen a memory changes what you would otherwise have done, write `per m-NNN` inline and call `cite` with that id.\n\n## Do not\n\n- Do not summarise, group, re-order, re-bullet, or editorialise a result.\n- Do not drop the ids.\n- Do not put more than one stable id in a tool call. A clear conversational\n  review batch may use one tool call per resolved id, in the human's stated\n  order.\n- Do not read or print a topic body except after the human selects its displayed\n  pointer, using the exact bounded `read_file` procedure above.\n- Do not suggest memories to forget unless asked.\n\n## Help\n\nPrint this section as your whole answer — the table, then the paragraph. Make no\ntool call.\n\n| Command | What it does |\n|---|---|\n| `\u002Fremember \u003Ctext>` | saves exactly what you typed |\n| `\u002Fmemory` | the overview: what is waiting, what is stored, the last 7 days |\n| `\u002Fmemory list [\u003Cpage>]` | every memory, with its id |\n| `\u002Fmemory review [\u003Cpage> \\| accept\\|decline\\|skip \u003Cid>]` | walk what the daily job proposed |\n| `\u002Fmemory forget \u003Cid>` | removes one memory; it stays in git |\n| `\u002Fmemory edit \u003Cid> \u003Ctext>` | replaces one memory's text, keeping its id |\n| `\u002Fmemory remember \u003Ctext>` | the same as `\u002Fremember \u003Ctext>` |\n| `\u002Fmemory help` | this table |\n\nMemory is one file, `MEMORY.md`, put in front of the model on every request of\nevery session on this device — so a preference stated once holds in the next\nsession without being said again. It lives in a memory *instance*, a directory\nof its own; `\u002Fmemory list` ends by naming this session's, and an app can point a\nsession at a different one, in which case the load line at the start of the\nsession names it too. The assistant also saves on\nits own, in the same turn, when you state something meant to hold beyond the\ncurrent task (\"never X\", \"always Y\", \"stop doing Z\"), always with your own words\nas the quote; it does not save task instructions or facts it can work out for\nitself. The store is a git repository you can `cat`, `grep` and edit by hand:\nevery save, edit and forget is one commit, and `amplifier-memory why m-017`\nreplays one memory's history. A ruleset — anything longer than one line — goes\nto `topics\u002F\u003Cslug>.md` with a single pointer line in `MEMORY.md`, so it is read\nwhen it is relevant instead of loaded every time.\n","# \u002Fmemory\n\nsession.v5 §6. `$ARGUMENTS` is empty, or starts with one word that chooses what\nhappens. Dispatch on that first word; the rest of the line is the argument.\n\n## Dispatch\n\n| `$ARGUMENTS` | Call |\n|---|---|\n| empty | `memory(operation=\"overview\")` |\n| `list` | `memory(operation=\"list\")` |\n| `list 2` | `memory(operation=\"list\", page=2)` |\n| `review` | `memory(operation=\"review\", action=\"list\")` |\n| `review 2` | `memory(operation=\"review\", action=\"list\", page=2)` |\n| `review accept s-042` | `memory(operation=\"review\", action=\"accept\", id=\"s-042\")` |\n| `review decline s-042` | `memory(operation=\"review\", action=\"decline\", id=\"s-042\")` |\n| `review decline s-042 because \u003Creason>` | `memory(operation=\"review\", action=\"decline\", id=\"s-042\", reason=\"\u003Creason>\")` |\n| `review skip s-042` | `memory(operation=\"review\", action=\"skip\", id=\"s-042\")` |\n| `forget m-017` | `memory(operation=\"forget\", id=\"m-017\")` |\n| `edit m-004 \u003Ctext>` | `memory(operation=\"edit\", id=\"m-004\", text=\"\u003Ctext>\", quote=\"\u003Ctext>\", writer=\"human\")` |\n| `remember \u003Ctext>` | `memory(operation=\"save\", text=\"\u003Ctext>\", quote=\"\u003Ctext>\", writer=\"human\")` |\n| `help` | the **Help** section below — no tool call |\n| anything else | the **Help** section below — no tool call |\n\nFor reads and ordinary single-id requests, make the stated call and relay its\nresult. The defined multi-call exceptions are a frozen multi-id **`review`**\nbatch and an approved conversational prior-memory consolidation: in the latter,\nedit the survivor first and then forget each displayed duplicate in order. Stop\non a refusal and relay every actual result in order. Several stable ids in one\nbreath are several calls, in the order they were said.\n\n**Relay the tool's result exactly as it stands — it is relayed verbatim and never reworded.**\nTwo shapes, and which one you use depends on what came back:\n\n**The overview and every receipt go inside a fenced code block**, like this:\n\n    ```\n    17 suggestions waiting. \u002Fmemory review to walk them.\n    4 memories. \u002Fmemory list to see them.\n    last 7 days: 6 written, 1 forgotten, 2 cited.\n    \u002Fmemory list · review · forget \u003Cid> · edit \u003Cid> \u003Ctext> · help\n    ```\n\nThe fence is not decoration. Outside one, markdown folds those lines into a\nsingle paragraph and treats `\u003Cid>` and `\u003Ctext>` as tags and drops them.\nNo text before the fence, none after.\n\n**A `list` page and a `review` page go bare — no fence.** They are already\nmarkdown: bold ids, blockquoted quotes, one blank line between items. A fence\nwould show the asterisks as asterisks and refuse to wrap, which is the wall\nthey exist to replace. Paste the page as it stands, with nothing before or\nafter it.\n\nWhen one clear request needs multiple independent memory calls, make them one\nat a time in the stated order and wait for each result. A later refusal does\nnot undo an earlier success. Stop after that refusal and relay every earlier\nsuccessful receipt followed by the refusal, in order, inside one fence. Never\nreplace that compound result with a blanket “nothing changed” message.\n\nIf the tool refuses, relay its one line as it stands and stop, except for the\none read-only correction in **`review`** below. A refusal is not an\ninvestigation: do not go looking through `MEMORY.md` for something close, and\nnever act on a different id than the one named. No store yet means\n`amplifier-memory init`.\n\nThree refusals are about this session rather than this command, and each one is\nfinal — relay the line and stop, do not retry, do not look for another route:\n\n- `memory is disabled for this instance (\u003Cpath>: enabled: false).` — the\n  instance is switched off (session.v5 §12). Every operation answers this, reads\n  included, and nothing is written. The remedy is a human editing `enabled` in\n  that `config.yaml`; it is not yours to change.\n- `refused: session.v4 §13 — a worker session never …` — this session declared a\n  non-human origin, so it may not save, edit or forget. Reading still works: the\n  memories still apply, the work is still this human's. Nobody is here to answer\n  a suggestion either, so no suggestions line is shown.\n- `refused: session.v4 R2 — a sub-agent session never …` — the same rule, one\n  step down: a sub-agent inherits the memories and never writes.\n\n## Pages\n\n`list` and `review` come back one page at a time, and the page says which page\nit is. `\u003Cpage>` selects one: `\u002Fmemory review 2` is `page=2`.\n\n**`next` is this call again with `page + 1`.** Nothing remembers a page for you\n— read the page number off the header you just relayed and add one. A page past\nthe last is refused in one line that names the last page; relay it and stop.\n\n## `edit` and `remember` write the human's own words\n\n`writer=\"human\"` is what makes them the human's words, and the text is its own\nquote — that is what the writer requires (session.v5 §5). Split `$ARGUMENTS` at\nthe first space after the first word: `edit` takes an id then the new text;\n`remember` takes the text and nothing else. Do not tidy, expand, or rephrase\nwhat was typed.\n\nAn `edit` keeps the id. Every reference to `m-004` — in this session, in `git\nlog`, in the human's own head — still points at the same memory, refined. A\nforget plus a save retires the number and starts a new one, which is how\n\"update 4\" once deleted the wrong line.\n\n## Conversational prior-memory management\n\nAfter you have relayed a real `list` page in this conversation, a later natural\nreply may refer to an entry in that **shown snapshot** by its stable `m-NNN` id,\nunambiguous displayed text or description, or an explicit displayed position\nsuch as `#2` or `the first memory`. This is the narrow conversational exception:\nliteral `\u002Fmemory edit` and `\u002Fmemory forget`, direct tool calls, and shell commands\nstill take stable ids only. A bare number in one of those forms means an id, never\na current position.\n\nFreeze every stated action and its resolved `m-NNN` target from the displayed\nsnapshot before any mutation. This works for an older or nonconsecutive id and\nfor an entry on a later page that was actually shown. If the target, action, or\nmap is ambiguous, conflicting, or lost, ask one short clarification question and\nmake no call. Never guess. If a mapped id is missing or stale, relay that refusal\nand stop: do not list again, rebind a position, retarget a remaining action, or\nlook for a close match.\n\nA pointer ending `→ topics\u002F\u003Cslug>.md` is read-only: never pass its id to `edit`\nor `forget`. When the human selects a displayed pointer, use the existing\n`read_file` capability only for that exact `topics\u002F\u003Cslug>.md` path beneath the\ninstance whose `MEMORY.md` path the displayed list named. Relay the real topic\nbody bare before resolving a later reference to one of its actual `m-NNN` lines.\nDo not enumerate topics, construct a path from a guess, write files, install or\ngrant a capability. If `read_file` is unavailable or refuses, or the displayed\ninstance\u002Fpath cannot be established, state that limitation and stop.\n\nFor one clear reword, call the existing operation once:\n`memory(operation=\"edit\", id=\u003Cfrozen m-NNN>, text=\u003Cderived replacement>,\nquote=\u003Cthe human's exact correction>, writer=\"assistant\")`. The actual human\ninstruction is the quote; derived wording is assistant-authored. For one clear\nremoval, call `memory(operation=\"forget\", id=\u003Cfrozen m-NNN>)`. Neither requires\nanother confirmation. Relay the actual receipt exactly in a fence.\n\n**Consolidation is a preview, not a new command or bulk operation.** Before any\nwrite, show the exact survivor `m-NNN`, assistant-derived replacement, actual\nhuman correction quote, and ordered duplicate `m-NNN` ids. Make no call for that\npreview. Only an immediately later `yes` or `do it` approves that exact displayed\nmap; no approval or a decline writes nothing. On approval, edit the survivor\nfirst using the human quote and `writer=\"assistant\"`, then forget the named\nduplicates one at a time in their shown order. If the edit fails, do not forget\nanything. If a later forget fails, stop immediately. Relay each actual earlier\nreceipt and the later refusal unchanged in one fence, in call order. Never call\nthe result atomic or say nothing changed after an earlier success.\n\nThis is different from correcting a **pending suggestion** (`s-NNN`): follow\nthe corrected-acceptance flow in **`review`**. Never accept original text and\nthen edit it, and never turn a pending suggestion into an unrelated new memory.\n\n## `review`\n\nsuggestions.v2 §6. The daily job proposes lines it heard and never writes one\nitself; this is where they are answered, one id at a time. Ids here are `s-NNN`.\n\nAccept writes the line through the same writer every save uses. Decline is final\nand reversible only by hand, so never decline a suggestion whose target is\nunclear — when an answer such as \"no\" cannot clearly resolve from the displayed\npage, ask which. Skip changes nothing and leaves the item waiting. Nothing about\na suggestion is ever in your context: you learn what is waiting by calling\n`review`, the same way the human does.\n\nWhen the human clearly declines one or more shown suggestions **because** of one\nreason, freeze the full action\u002Fid\u002Freason map before the first write. A reason is\nshared only when the human states that the same raw reason applies to every\nselected decline. Keep distinct reasons with their ids. Item-differentiated\nclauses whose assignment to the selected ids is not explicit are not a shared\nreason: do not broadcast the mixed text, infer an unstated map, or drop it.\nAsk one short question that maps each stated reason to an id, and make no call\nuntil the map is clear. Then call `memory(operation=\"review\", action=\"decline\",\nid=\u003Cs-NNN>, reason=\u003Cthe exact human reason>)` one stable id at a time. A plain\ndecline does not ask why. Reason is decline-only: never pass it to accept or\nskip.\n\n**One read-only correction.** Exactly once, correct a first call to\n`accept`, `decline`, or `skip` with no id to\n`memory(operation=\"review\", action=\"list\", page=\u003Crequested page>)` only when\nthe original request was `review` or `review \u003Cpage>` and the first result is\nthat action's `refused: review \u003Caction> needs the suggestion id, e.g. s-042`\nargument refusal. Preserve the requested page (use page 1 when none was\nrequested). If the correction succeeds, relay only its bare rendered page; do\nnot present the first argument error. A second failure is terminal.\n\nNever use this correction for a user-requested `accept`, `decline`, or `skip`\nwhose target cannot clearly resolve from the displayed page; ask which id\ninstead. Disabled instances, unavailable review, worker or sub-agent write\nrefusals, unknown ids, privacy or writer refusals, and library failures are\nfinal: relay them and stop. Never invent an id, turn a requested write into a\nread, or inspect files to route around a refusal.\n\n**Conversational addressing from a displayed page.** After you have relayed a\nreal `review` page in this conversation, a later natural-language reply may\nrefer to that displayed page by `#1`, `first one`, or unambiguous text from one\nitem. Resolve each clear reference to that page's stable `s-NNN` id before\nmaking a call. This is only for the conversational reply to the displayed page:\ntool inputs, shell commands, and `\u002Fmemory review accept|decline|skip` still\nrequire stable ids.\n\nFor a batch such as \"accept #1, decline #2\", resolve the **complete** requested\nbatch first and freeze its action-to-id map. Then call the stable ids one at a\ntime in the human's stated order; do not list again between calls, and relay all\nreceipts together inside one fence. No confirmation is needed when every action\nand target is clear. If you explicitly stated the complete map in your\nimmediately preceding reply, \"yes\" approves that exact map without retyping\nids.\n\nIf any reference or map is unknown, lost, ambiguous, or conflicting, ask one\nconcise clarification question and make no write. If a mapped stable id is\nmissing or stale, stop calling tools: do not list again, rebind a position,\nsubstitute another item, or shift a remaining action. If an earlier action in\nthis same batch succeeded, relay each earlier receipt followed by this refusal\ntogether in one fence, in call order. Otherwise relay the refusal as it stands.\nDo not infer an unnamed decline or accept every displayed item.\n\n**Corrected acceptance of one pending suggestion.** For a clear `accept it but\n...` against one stable id from that displayed, frozen page, derive the corrected\ntext but preserve the human's exact correction as `quote`. Call\n`memory(operation=\"review\", action=\"accept\", id=\u003Cs-NNN>, text=\u003Cderived corrected\ntext>, quote=\u003Cactual correction>)`. Do not pass a writer: this path records the\nderived wording as assistant-authored. Both `text` and `quote` are required; a\nmissing one is a refusal, never an ordinary accept.\n\nFor a clear request to revise without accepting, display the derived corrected\ntext, the actual correction quote, and the exact `s-NNN` proposal-to-id map with\nno tool call and no receipt. Only an immediately later `yes` or `do it` approves\nthat exact displayed map; then make the corrected-accept call above. A decline\nof that proposal leaves its source pending; an explicit `review decline s-NNN`\nis the ordinary decline. A missing, ambiguous, or stale map, no approval, or any\nrefusal leaves the source pending. Do not re-list, rebind, or retarget it.\n\n**Several stable ids in one breath are several calls.** \"accept s-002 and\ns-003, skip s-004\" is three calls, in that order, one id each — the tool takes\none id and this is not a limitation to work around. Make them all, then relay\ntheir results together, inside one fence, in the order they were made — include\nsuccessful receipts and a later refusal if one occurs. Never say that nothing\nchanged after an earlier call succeeded, and never hide that success behind the\nlast refusal.\n\nA page numbers its items so they can be read. A direct tool, shell, or slash\ncommand `accept 2` is refused, and the refusal names the ids that page holds.\n\n## Ids\n\nOutside conversational review and conversational prior-memory addressing from an\nactual displayed page, ids are the only names. A bare number N means m-00N,\nnever a position in a list. Never guess an id. A forgotten id is never reused.\n\n## Cite at use\n\nWhen a memory changes what you would otherwise have done, write `per m-NNN` inline and call `cite` with that id.\n\n## Do not\n\n- Do not summarise, group, re-order, re-bullet, or editorialise a result.\n- Do not drop the ids.\n- Do not put more than one stable id in a tool call. A clear conversational\n  review batch may use one tool call per resolved id, in the human's stated\n  order.\n- Do not read or print a topic body except after the human selects its displayed\n  pointer, using the exact bounded `read_file` procedure above.\n- Do not suggest memories to forget unless asked.\n\n## Help\n\nPrint this section as your whole answer — the table, then the paragraph. Make no\ntool call.\n\n| Command | What it does |\n|---|---|\n| `\u002Fremember \u003Ctext>` | saves exactly what you typed |\n| `\u002Fmemory` | the overview: what is waiting, what is stored, the last 7 days |\n| `\u002Fmemory list [\u003Cpage>]` | every memory, with its id |\n| `\u002Fmemory review [\u003Cpage> \\| accept\\|decline\\|skip \u003Cid>]` | walk what the daily job proposed |\n| `\u002Fmemory forget \u003Cid>` | removes one memory; it stays in git |\n| `\u002Fmemory edit \u003Cid> \u003Ctext>` | replaces one memory's text, keeping its id |\n| `\u002Fmemory remember \u003Ctext>` | the same as `\u002Fremember \u003Ctext>` |\n| `\u002Fmemory help` | this table |\n\nMemory is one file, `MEMORY.md`, put in front of the model on every request of\nevery session on this device — so a preference stated once holds in the next\nsession without being said again. It lives in a memory *instance*, a directory\nof its own; `\u002Fmemory list` ends by naming this session's, and an app can point a\nsession at a different one, in which case the load line at the start of the\nsession names it too. The assistant also saves on\nits own, in the same turn, when you state something meant to hold beyond the\ncurrent task (\"never X\", \"always Y\", \"stop doing Z\"), always with your own words\nas the quote; it does not save task instructions or facts it can work out for\nitself. The store is a git repository you can `cat`, `grep` and edit by hand:\nevery save, edit and forget is one commit, and `amplifier-memory why m-017`\nreplays one memory's history. A ruleset — anything longer than one line — goes\nto `topics\u002F\u003Cslug>.md` with a single pointer line in `MEMORY.md`, so it is read\nwhen it is relevant instead of loaded every time.\n",{"name":5,"metadata":25,"description":7,"argument-hint":27,"user-invocable":28,"disable-model-invocation":28},{"amplifier.completions":26},"completions.json","[list|review|forget|edit|remember|help] [arguments]",true,"main","b011380b2edd2e7038051ab8ba7d665f752d8cc7","skills\u002Fmemory",0,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Famplifier-bundle-memory","https:\u002F\u002Fgithub.com\u002Fmicrosoft","https:\u002F\u002Fopensource.microsoft.com","Open source projects and samples from Microsoft","2026-11-01 11:12:36",{"source":8,"skillName":5,"commands":39,"prompt":49,"zipAvailable":28},[40,43,46],{"tool":41,"command":42},"npx","npx skills add microsoft\u002Famplifier-bundle-memory --skill memory",{"tool":44,"command":45},"bunx","bunx skills add microsoft\u002Famplifier-bundle-memory --skill memory",{"tool":47,"command":48},"pnpm","pnpm dlx skills add microsoft\u002Famplifier-bundle-memory --skill memory","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Famplifier-bundle-memory\u002Fblob\u002Fmain\u002Fskills\u002Fmemory\u002FSKILL.md",[51,56,60,64,68,72,76],{"path":26,"resourceType":52,"resourceTypeDesc":53,"sizeBytes":54,"sourceHtmlUrl":55},"REFERENCE","参考文档",230,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Famplifier-bundle-memory\u002Fblob\u002Fmain\u002Fskills\u002Fmemory\u002Fcompletions.json",{"path":57,"resourceType":52,"resourceTypeDesc":53,"sizeBytes":58,"sourceHtmlUrl":59},"references\u002Fapi-access.md",11800,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fcloud\u002Fapplication-integration-basics\u002Freferences\u002Fapi-access.md",{"path":61,"resourceType":52,"resourceTypeDesc":53,"sizeBytes":62,"sourceHtmlUrl":63},"references\u002Fattribution.md",5079,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fcloud\u002Fapplication-integration-basics\u002Freferences\u002Fattribution.md",{"path":65,"resourceType":52,"resourceTypeDesc":53,"sizeBytes":66,"sourceHtmlUrl":67},"references\u002Fcore-concepts.md",14082,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fcloud\u002Fapplication-integration-basics\u002Freferences\u002Fcore-concepts.md",{"path":69,"resourceType":52,"resourceTypeDesc":53,"sizeBytes":70,"sourceHtmlUrl":71},"references\u002Fiam-and-service-accounts.md",15161,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fcloud\u002Fapplication-integration-basics\u002Freferences\u002Fiam-and-service-accounts.md",{"path":73,"resourceType":52,"resourceTypeDesc":53,"sizeBytes":74,"sourceHtmlUrl":75},"references\u002Flimits.md",6414,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fcloud\u002Fapplication-integration-basics\u002Freferences\u002Flimits.md",{"path":77,"resourceType":52,"resourceTypeDesc":53,"sizeBytes":78,"sourceHtmlUrl":79},"references\u002Fprovisioning-and-terraform.md",8467,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fcloud\u002Fapplication-integration-basics\u002Freferences\u002Fprovisioning-and-terraform.md",[81],{"skillNo":82,"name":83,"nameZh":6,"description":84,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":85,"categories":86,"keywords":87,"publishedAt":20},"01M69A6NYFDA5AK3NPQSS3231X","remember","Save what you typed as a memory, in your own words. `\u002Fremember \u003Ctext>`.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Famplifier-bundle-memory\u002Fblob\u002Fmain\u002Fskills\u002Fremember\u002FSKILL.md",[],[83,5]]