From 32be34505adbe9cdefd3fec47730f1bb08c82aaf Mon Sep 17 00:00:00 2001 From: Alex Newman Date: Sun, 14 Dec 2025 22:55:09 -0500 Subject: [PATCH] refactor: consolidate mem-search skill, remove desktop-skill duplication MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Delete separate desktop-skill/ directory (was outdated) - Generate mem-search.zip during build from plugin/skills/mem-search/ - Update docs with correct MCP tool list and new download path - Single source of truth for Claude Desktop skill šŸ¤– Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- desktop-skill/Skill.md | 44 --------------------------- desktop-skill/mem-search.zip | Bin 1124 -> 0 bytes docs/public/usage/claude-desktop.mdx | 24 +++++++-------- plugin/skills/mem-search.zip | Bin 0 -> 32128 bytes scripts/build-hooks.js | 16 ++++++++++ 5 files changed, 28 insertions(+), 56 deletions(-) delete mode 100644 desktop-skill/Skill.md delete mode 100644 desktop-skill/mem-search.zip create mode 100644 plugin/skills/mem-search.zip diff --git a/desktop-skill/Skill.md b/desktop-skill/Skill.md deleted file mode 100644 index 40c8a098..00000000 --- a/desktop-skill/Skill.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -name: mem-search -description: Search your persistent memory database from previous coding sessions. Use when asked about past work, decisions, bugs fixed, or development history. ---- - -## Overview - -Search your local memory database for past sessions, decisions, code changes, and development history. This skill uses the `mem-search` MCP server tools. - -## Available MCP tools - -Use these tools from the `mem-search` MCP server: - -| Tool | Description | -|------|-------------| -| `search` | Unified search across all memory types | -| `decisions` | Find architectural/design decisions | -| `changes` | Find code changes and refactorings | -| `timeline` | Get observations around a specific point in time | -| `find_by_file` | Find observations for specific files | -| `find_by_type` | Filter by type (decision, bugfix, feature, refactor, discovery, change) | -| `find_by_concept` | Find by concept tags | -| `how_it_works` | Understand system architecture and design patterns | - -## Common parameters - -- `query` - Natural language search query -- `limit` - Max results (1-100, default 20) -- `format` - `index` for titles only (recommended), `full` for complete content -- `type` - Filter: observations, sessions, or prompts -- `obs_type` - Filter observation type: decision, bugfix, feature, refactor, discovery, change - -## When to use - -- "Did we already solve this?" -- "How did we do X last time?" -- "Find the bug fix for..." -- "What decisions did we make about..." -- "Show me changes to [file]" -- "What work did we do on [project]?" - -## Setup requirement - -The `mem-search` MCP server must be configured in Claude Desktop settings. See MCP configuration docs. diff --git a/desktop-skill/mem-search.zip b/desktop-skill/mem-search.zip deleted file mode 100644 index 89573028f7696b73d3ce8803de54827f249ac756..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1124 zcmWIWW@h1H00FDo?r1OrN^mpCFyyA@>K3Oa7A0rshlX%6F!$?NXHEg)(h6<{MwYLP z3=AwHK;;2ILqIeK*pPiXQ~iXP85j!L7#M_64GGT9%*oNqO@SLW5!0}_A-?{%9R&9N z4)1xuG-<9=|IQH66>nR&2`OkPPRV&wxasVz?6T{e(>^`^o%YtEGpaCykMqpA=hdIp zPH$QgChEWPk=ExmG5fr@zU{p1dtuwWOSM}9)1%#at=HE+uKxB^XFfZ59ckeoUL*^S8BHQ=kj(BG3|G|tyXsR&HOZV z)%2eKA+dip8`wV3|CF7}v-N~?;!zWO2lM5-XV2Goa6z0kyLbK(JNx`8W?6|A`;ND( z2>J-<-%om>Sfl>X#Ix)RL-?(WZyS|vsqWUPYn%U&+4$`D$g(dHuY;I>-E-0^zg8WT z#-dfi%hnaBtS9utm6@mWV&mrvR;hLgj$by}9k}k!`=ZzI_yji>+38yBeG$EiDlfWv z*F`4nD^l1!AuzPVbL!@`Q`GJ+2v}L1wT4Y{ms;m*<0&glqDwXhNy}-^Um|$#IM1VJ z{>rKE>@Klv*!E)Lg6_X1g~}WIHK(pIuwVXI;fBK7V(z?MB{RN!GO5gaJ!iH-S=*cD z&Zb+7H*C5+lg~J?>HSJAg)Isbe)1Kq?tAz=(NdYYm+OV4kV1A@^6FDvR~;`^9GH}9 zQlESA{v4xU>y&C!E@Z5pw&#B93x#=Z;Z_~b=T;q_u+Q}1<)fu#wWX>_nxZ^kKE4X7 zVa#5-=(9}o$J;hcvLylyxw%%m3g#?UJeFNJQ)!XuvhPhh4Ko5ZOvqOHStYfpvF#;i z`^$-Gu15vDg!i}{%r29vl#!S@=hA;eNx|Alvqjf*#BQ+JeU&xWv9WMXSKl5}X~B)( z=AV1=bM{@Oz!FWJzf6~Qm~UG1w>X9|(BjtwVf6$bwaGueZ3%kl5$HV4Ywgbc)2jDZ z=Wwf7b8(-wJsq}RX445J*{zH+^B8aDuQ|{CYr@8NmRoq+>T|ay?=0~A^x>T9>ZqQL z9VJt%I3I8cKI{$D73mA!!ndt4pJUM*&Q0IT^WNVp4!j|A{R4l1HzSiAGp<}J0nM)h z3 + Download the mem-search skill for Claude Desktop Or build from source: ```bash -cd desktop-skill -zip -r mem-search.zip Skill.md +npm run build # Generates plugin/skills/mem-search.zip ``` ### Step 2: Install in Claude Desktop @@ -110,20 +109,21 @@ Once installed, the skill auto-activates when you ask about past work: "Show me changes to worker-service.ts" ``` -## Available Search Tools +## Available MCP Tools The skill provides access to these MCP tools: | Tool | Description | |------|-------------| -| `search` | Unified search across all memory types | -| `decisions` | Find architectural/design decisions | -| `changes` | Find code changes and refactorings | -| `timeline` | Get observations around a specific point in time | -| `find_by_file` | Find observations for specific files | -| `find_by_type` | Filter by type (decision, bugfix, feature, refactor, discovery, change) | -| `find_by_concept` | Find by concept tags | -| `how_it_works` | Understand system architecture and design patterns | +| `search` | Unified search across observations, sessions, and prompts | +| `timeline` | Get chronological context around a query or observation ID | +| `get_observation` | Fetch a single observation by ID | +| `get_batch_observations` | Fetch multiple observations efficiently | +| `get_session` | Fetch session summary by ID | +| `get_prompt` | Fetch user prompt by ID | +| `get_recent_context` | Get recent timeline items | +| `get_context_timeline` | Get timeline around a specific observation | +| `progressive_description` | Load detailed usage instructions | ## Troubleshooting diff --git a/plugin/skills/mem-search.zip b/plugin/skills/mem-search.zip new file mode 100644 index 0000000000000000000000000000000000000000..999ff782ae705909889ad10ea0742fbd8fdbcab2 GIT binary patch literal 32128 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 Pr7~_gyq7XiT~72n6E@$$4{%+f5g?p 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 V-`nf}04VRjckea6gVWFd{vY+C9CZKy literal 0 HcmV?d00001 diff --git a/scripts/build-hooks.js b/scripts/build-hooks.js index 21794d6d..6028b9d3 100644 --- a/scripts/build-hooks.js +++ b/scripts/build-hooks.js @@ -222,12 +222,28 @@ async function buildHooks() { console.log(`āœ“ ${hook.name} built (${sizeInKB} KB)`); } + // Build mem-search skill zip for Claude Desktop + console.log('\nšŸ“¦ Building mem-search skill zip for Claude Desktop...'); + const { execSync } = await import('child_process'); + const zipOutput = 'plugin/skills/mem-search.zip'; + + // Remove old zip if exists + if (fs.existsSync(zipOutput)) { + fs.unlinkSync(zipOutput); + } + + // Create zip from mem-search skill directory + execSync(`cd plugin/skills && zip -r mem-search.zip mem-search/`, { stdio: 'pipe' }); + const zipStats = fs.statSync(zipOutput); + console.log(`āœ“ mem-search.zip built (${(zipStats.size / 1024).toFixed(2)} KB)`); + console.log('\nāœ… All hooks, worker service, and MCP server built successfully!'); console.log(` Output: ${hooksDir}/`); console.log(` - Hooks: *-hook.js`); console.log(` - Worker: worker-service.cjs`); console.log(` - MCP Server: mcp-server.cjs`); console.log(` - Skills: plugin/skills/`); + console.log(` - Desktop Skill: plugin/skills/mem-search.zip`); console.log('\nšŸ’” Note: Dependencies will be auto-installed on first hook execution'); } catch (error) {