[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71DMVQE514VVRS4EWB3PY4D":3,"skill-same:01M71DMVQE514VVRS4EWB3PY4D":58},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":32,"linkOnly":33,"markdownContent":34,"markdownBody":35,"frontMatter":36,"refName":38,"commitSha":39,"skillDirectory":40,"forksCount":41,"repositoryHtmlUrl":42,"repositoryHomepageUrl":6,"ownerHtmlUrl":43,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":44,"install":45,"resources":57},"01M71DMVQE514VVRS4EWB3PY4D","mm-consolidate",null,"Scans memories for recurring patterns and proposes consolidation (merge, identity update, or shadow candidate)","mirror-mind-ai\u002Fmirror","mirror-mind-ai","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F284655986?v=4","01M71DK28AKP6F5W1QCCBXN1W2","01M71DK29N7M7PSY7645ZQZ2B3",21,"MIT","https:\u002F\u002Fgithub.com\u002Fmirror-mind-ai\u002Fmirror\u002Fblob\u002Fmain\u002F.pi\u002Fskills\u002Fmm-consolidate\u002FSKILL.md",[],[18,19,20,21,22,23,24,25,26,27,28,29,30,31],"mm","mm consolidate","consolidate","memories","recurring","consolidation","for","merge","update","Shadow","true","patterns","candidate","identity","2026-11-10 10:12:30",false,"---\nname: \"mm-consolidate\"\ndescription: Scans memories for recurring patterns and proposes consolidation (merge, identity update, or shadow candidate)\nuser-invocable: true\n---\n\n# mm-consolidate\n\nConsolidation as integration — the operation that promotes raw extracted memories into\nstructural identity content (CV7.E4.S3).\n\nMemories accumulate over time. Patterns repeat. The same insight lands in five conversations\nas five isolated memories, none of which reaches the identity layer where it could actually\nchange how the mirror responds. Consolidation is the bridge. This skill surfaces those\nclusters, proposes a structural move, and waits for explicit acknowledgment before writing\nanything.\n\n**Promotion mechanism: manual-by-acknowledgment.** The scan is automatic; the promotion is not.\nEvery proposal must be reviewed and accepted (or rejected) before it changes the database.\nThis is intentional — identity updates are meaningful acts.\n\n---\n\n## Usage\n\n```\n\u002Fmm-consolidate [--journey \u003Cslug>] [--layer \u003Clayer>] [--limit \u003Cn>]\n\u002Fmm-consolidate apply \u003Cproposal_id>\n\u002Fmm-consolidate reject \u003Cproposal_id>\n\u002Fmm-consolidate list [--status pending|accepted|rejected]\n```\n\n---\n\n## 1. Scan for proposals\n\n> The scan answers from TypeScript against the live provider (CV22.DS8.TS2). Each cluster is one model call bounded by the extraction timeout (`MEMORY_LLM_TIMEOUT_EXTRACTION`, 60 s) with bounded retries, and every successful call leaves a priced `llm_calls` row before its proposal is parsed. A call that fails is logged by class (`outcome=transport_failed kind=…`) in `front-door.log` beside the database.\n\n```bash\nmirror consolidate scan \\\n  [--journey \u003Cslug>] \\\n  [--layer \u003Clayer>] \\\n  [--limit 5] \\\n  [--threshold 0.75]\n```\n\nThis clusters semantically similar memories and calls the LLM to propose one of:\n- **merge**: distill a redundant cluster into one sharper memory\n- **identity_update**: encode a persistent pattern into an identity layer (ego\u002Fbehavior, etc.)\n- **shadow_candidate**: mark a tension\u002Favoidance cluster for the mm-shadow pass\n\nEach proposal is printed and stored with `status='pending'`.\n\n**Default filters:** no journey or layer filter (all memories). Threshold 0.75. Limit 5 proposals.\n\n---\n\n## 2. Present each proposal to the user\n\nFor each proposal, show:\n- The source memories (title, type, date)\n- The proposed action and target (if identity_update: which layer\u002Fkey)\n- The rationale\n- The proposed content\n\nAsk: **accept as-is \u002F edit \u002F reject?**\n\n---\n\n## 3. Apply or reject\n\n**Accept as-is:**\n```bash\nmirror consolidate apply \u003Cproposal_id>\n```\n\n**Accept with edited content:**\n```bash\nmirror consolidate apply \u003Cproposal_id> \\\n  --content \"User-revised version of the proposed content\"\n```\n\n**Reject:**\n```bash\nmirror consolidate reject \u003Cproposal_id>\n```\n\nWhat happens on acceptance:\n- **merge**: creates a merged memory; source memories advance to `integrated`\n- **identity_update**: appends to the identity layer; source memories advance to `acknowledged`\n- **shadow_candidate**: source memories advance to `candidate` for the next mm-shadow pass\n\nRejected proposals leave source memories unchanged.\n\n---\n\n## 4. List consolidation history\n\n```bash\nmirror consolidate list [--status pending|accepted|rejected] [--limit 20]\n```\n\n---\n\n## Notes\n\n- The skill uses the same model as extraction (Gemini Flash via OpenRouter). LLM calls are\n  logged to `llm_calls` when `MEMORY_LOG_LLM_CALLS=1`.\n- Proposal IDs can be abbreviated to their first 8 characters.\n- Memories with `readiness_state='integrated'` are excluded from clustering.\n- Run with `--threshold 0.65` to surface more (and looser) clusters; raise to `0.85` for tighter ones.\n- For shadow-specific work, use `mm-shadow` (CV7.E4.S4) after candidates are established.\n","# mm-consolidate\n\nConsolidation as integration — the operation that promotes raw extracted memories into\nstructural identity content (CV7.E4.S3).\n\nMemories accumulate over time. Patterns repeat. The same insight lands in five conversations\nas five isolated memories, none of which reaches the identity layer where it could actually\nchange how the mirror responds. Consolidation is the bridge. This skill surfaces those\nclusters, proposes a structural move, and waits for explicit acknowledgment before writing\nanything.\n\n**Promotion mechanism: manual-by-acknowledgment.** The scan is automatic; the promotion is not.\nEvery proposal must be reviewed and accepted (or rejected) before it changes the database.\nThis is intentional — identity updates are meaningful acts.\n\n---\n\n## Usage\n\n```\n\u002Fmm-consolidate [--journey \u003Cslug>] [--layer \u003Clayer>] [--limit \u003Cn>]\n\u002Fmm-consolidate apply \u003Cproposal_id>\n\u002Fmm-consolidate reject \u003Cproposal_id>\n\u002Fmm-consolidate list [--status pending|accepted|rejected]\n```\n\n---\n\n## 1. Scan for proposals\n\n> The scan answers from TypeScript against the live provider (CV22.DS8.TS2). Each cluster is one model call bounded by the extraction timeout (`MEMORY_LLM_TIMEOUT_EXTRACTION`, 60 s) with bounded retries, and every successful call leaves a priced `llm_calls` row before its proposal is parsed. A call that fails is logged by class (`outcome=transport_failed kind=…`) in `front-door.log` beside the database.\n\n```bash\nmirror consolidate scan \\\n  [--journey \u003Cslug>] \\\n  [--layer \u003Clayer>] \\\n  [--limit 5] \\\n  [--threshold 0.75]\n```\n\nThis clusters semantically similar memories and calls the LLM to propose one of:\n- **merge**: distill a redundant cluster into one sharper memory\n- **identity_update**: encode a persistent pattern into an identity layer (ego\u002Fbehavior, etc.)\n- **shadow_candidate**: mark a tension\u002Favoidance cluster for the mm-shadow pass\n\nEach proposal is printed and stored with `status='pending'`.\n\n**Default filters:** no journey or layer filter (all memories). Threshold 0.75. Limit 5 proposals.\n\n---\n\n## 2. Present each proposal to the user\n\nFor each proposal, show:\n- The source memories (title, type, date)\n- The proposed action and target (if identity_update: which layer\u002Fkey)\n- The rationale\n- The proposed content\n\nAsk: **accept as-is \u002F edit \u002F reject?**\n\n---\n\n## 3. Apply or reject\n\n**Accept as-is:**\n```bash\nmirror consolidate apply \u003Cproposal_id>\n```\n\n**Accept with edited content:**\n```bash\nmirror consolidate apply \u003Cproposal_id> \\\n  --content \"User-revised version of the proposed content\"\n```\n\n**Reject:**\n```bash\nmirror consolidate reject \u003Cproposal_id>\n```\n\nWhat happens on acceptance:\n- **merge**: creates a merged memory; source memories advance to `integrated`\n- **identity_update**: appends to the identity layer; source memories advance to `acknowledged`\n- **shadow_candidate**: source memories advance to `candidate` for the next mm-shadow pass\n\nRejected proposals leave source memories unchanged.\n\n---\n\n## 4. List consolidation history\n\n```bash\nmirror consolidate list [--status pending|accepted|rejected] [--limit 20]\n```\n\n---\n\n## Notes\n\n- The skill uses the same model as extraction (Gemini Flash via OpenRouter). LLM calls are\n  logged to `llm_calls` when `MEMORY_LOG_LLM_CALLS=1`.\n- Proposal IDs can be abbreviated to their first 8 characters.\n- Memories with `readiness_state='integrated'` are excluded from clustering.\n- Run with `--threshold 0.65` to surface more (and looser) clusters; raise to `0.85` for tighter ones.\n- For shadow-specific work, use `mm-shadow` (CV7.E4.S4) after candidates are established.\n",{"name":5,"description":7,"user-invocable":37},true,"main","4402e28990454797b18d84035e611c81c1c7dd1b",".pi\u002Fskills\u002Fmm-consolidate",12,"https:\u002F\u002Fgithub.com\u002Fmirror-mind-ai\u002Fmirror","https:\u002F\u002Fgithub.com\u002Fmirror-mind-ai","2026-11-14 01:47:51",{"source":8,"skillName":5,"commands":46,"prompt":56,"zipAvailable":37},[47,50,53],{"tool":48,"command":49},"npx","npx skills add mirror-mind-ai\u002Fmirror --skill mm-consolidate",{"tool":51,"command":52},"bunx","bunx skills add mirror-mind-ai\u002Fmirror --skill mm-consolidate",{"tool":54,"command":55},"pnpm","pnpm dlx skills add mirror-mind-ai\u002Fmirror --skill mm-consolidate","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmirror-mind-ai\u002Fmirror\u002Fblob\u002Fmain\u002F.pi\u002Fskills\u002Fmm-consolidate\u002FSKILL.md",[],[59,68,76,84,90,102],{"skillNo":60,"name":61,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":62,"categories":63,"keywords":64,"publishedAt":32},"01M71DRDAQS0MBZT50V4K24RVT","ext:claude-only","https:\u002F\u002Fgithub.com\u002Fmirror-mind-ai\u002Fmirror\u002Fblob\u002Fmain\u002Fts\u002Ftest\u002Ffixtures\u002Fextension-catalog\u002Fhome\u002Fextensions\u002Fext-claude-only\u002Fskills\u002Fclaude\u002FSKILL.md",[],[65,66,67],"ext:claude only","claude only","only",{"skillNo":69,"name":70,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":71,"categories":72,"keywords":73,"publishedAt":32},"01M71DRBQ9R7RX6779KRGX7H49","ext-beta","https:\u002F\u002Fgithub.com\u002Fmirror-mind-ai\u002Fmirror\u002Fblob\u002Fmain\u002Fts\u002Ftest\u002Ffixtures\u002Fextension-catalog\u002Fhome\u002Fextensions\u002Fext-beta\u002Fskills\u002Fpi\u002FSKILL.md",[],[74,75],"ext beta","beta",{"skillNo":77,"name":78,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":79,"categories":80,"keywords":81,"publishedAt":32},"01M71DR9Z5NGMW0STW3E238KHR","ext-alpha","https:\u002F\u002Fgithub.com\u002Fmirror-mind-ai\u002Fmirror\u002Fblob\u002Fmain\u002Fts\u002Ftest\u002Ffixtures\u002Fextension-catalog\u002Fhome\u002Fextensions\u002Fext-alpha\u002Fskills\u002Fpi\u002FSKILL.md",[],[82,83],"alpha","ext alpha",{"skillNo":85,"name":86,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":87,"categories":88,"keywords":89,"publishedAt":32},"01M71DR871VEZSZH8RMQTGQD79","ext:alpha","https:\u002F\u002Fgithub.com\u002Fmirror-mind-ai\u002Fmirror\u002Fblob\u002Fmain\u002Fts\u002Ftest\u002Ffixtures\u002Fextension-catalog\u002Fhome\u002Fextensions\u002Fext-alpha\u002Fskills\u002Fclaude\u002FSKILL.md",[],[86,82],{"skillNo":91,"name":92,"nameZh":6,"description":93,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":94,"categories":95,"keywords":96,"publishedAt":32},"01M71DR5ZKBAF01TS3C8E02Z7K","ext-tools","Fixture extension for the CV22.DS7.TS4 dispatch corpus","https:\u002F\u002Fgithub.com\u002Fmirror-mind-ai\u002Fmirror\u002Fblob\u002Fmain\u002Fts\u002Ftest\u002Ffixtures\u002Fext-dispatch\u002Ftools\u002FSKILL.md",[],[97,98,99,24,100,101],"Tools","ext tools","extension","dispatch","fixture",{"skillNo":103,"name":104,"nameZh":6,"description":105,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":106,"categories":107,"keywords":108,"publishedAt":32},"01M71DR44APEA202QDS68E30DX","ext-silent","Fixture extension that registers no subcommands","https:\u002F\u002Fgithub.com\u002Fmirror-mind-ai\u002Fmirror\u002Fblob\u002Fmain\u002Fts\u002Ftest\u002Ffixtures\u002Fext-dispatch\u002Fsilent\u002FSKILL.md",[],[109,99,101],"ext silent"]