{"items":[{"id":"cmugucipt0015qu06tdn8bkzt","slug":"thedotmack-claude-mem-install","name":"claude-mem-install","description":"Use this when setting up claude-mem on Cursor: local or remote worker, local host-login observer or remote cmem.ai inference.","authorId":"gh:thedotmack","authorName":"thedotmack","version":"0.1.0","category":"Prompt","securityLevel":"Community","downloadsCount":0,"githubStars":94658,"pricePerCall":0,"manifest":{"name":"claude-mem-install","tools":[],"category":"Prompt","entrypoint":{"type":"prompt"},"description":"Use this when setting up claude-mem on Cursor: local or remote worker, local host-login observer or remote cmem.ai inference.","permissions":[],"systemPrompt":"# Install claude-mem on Cursor\n\nIndependent of Grok Bot. Do not require the other IDE.\n\n## Local worker (default)\n\n```\nnpx claude-mem install --ide cursor\n```\n\nStarts the local worker. Hooks already ship with this plugin. MCP `claude-mem-local` talks to it.\n\nObserver:\n\n- Remote inference (typical): leave provider as openrouter / cmem.ai (`CLAUDE_MEM_OPENROUTER_BASE_URL=https://cmem.ai/api/inference/v1`)\n- Local host-login: `--provider host` (loopback shim; never bind the worker port — on macOS the worker is often 37777, so the shim uses 37778)\n\n## Remote worker\n\n```\nnpx claude-mem install --ide cursor --runtime server --server-url https://YOUR_HOST\n```\n\nSet plugin variable `CLAUDE_MEM_MCP_TOKEN` for `claude-mem-remote` (`https://cmem.ai/api/mcp` or your server).\n\nNever restart a healthy worker (RAM queue). No Claude CLI required for host/openrouter.","schemaVersion":1},"repoUrl":"https://github.com/thedotmack/claude-mem/tree/main/claude-mem-cursor/skills/install","tags":["ai","ai-agents","ai-memory","anthropic","artificial-intelligence","chromadb","claude","claude-agent-sdk","claude-agents","claude-code","claude-code-plugin","claude-skills"],"stats":{"installVelocity7d":0,"retentionRate":0,"executions":0,"rating":null},"origin":"github","source":{"repo":"claude-mem","audit":{"files":["openclaw/package.json","package.json"],"binaries":[],"findings":[{"kind":"dependency","rule":"DP-04","message":"No npm lock file: installs resolve whatever the ranges allow today.","surface":"package.json","evidence":"@better-auth/api-key@^1.6.16, better-auth@^1.6.16","severity":"medium"}],"packages":2,"auditedAt":"2026-09-25T10:51:51.575Z","lockfiles":[]},"forks":8366,"owner":"thedotmack","stars":94658,"topics":["ai","ai-agents","ai-memory","anthropic","artificial-intelligence","chromadb","claude","claude-agent-sdk","claude-agents","claude-code","claude-code-plugin","claude-skills","embeddings","long-term-memory","mem0","memory-engine","openmemory","rag","sqlite","supermemory"],"license":"Apache-2.0","fullName":"thedotmack/claude-mem","homepage":"https://claude-mem.ai","language":"TypeScript","pushedAt":"2026-09-25T01:11:49Z","avatarUrl":"https://avatars.githubusercontent.com/u/683968?v=4","crawledAt":"2026-09-25T10:51:42.785Z","openIssues":296,"manifestFile":"SKILL.md","manifestPath":"claude-mem-cursor/skills/install/SKILL.md","defaultBranch":"main"},"readme":"# Install claude-mem on Cursor\n\nIndependent of Grok Bot. Do not require the other IDE.\n\n## Local worker (default)\n\n```\nnpx claude-mem install --ide cursor\n```\n\nStarts the local worker. Hooks already ship with this plugin. MCP `claude-mem-local` talks to it.\n\nObserver:\n\n- Remote inference (typical): leave provider as openrouter / cmem.ai (`CLAUDE_MEM_OPENROUTER_BASE_URL=https://cmem.ai/api/inference/v1`)\n- Local host-login: `--provider host` (loopback shim; never bind the worker port — on macOS the worker is often 37777, so the shim uses 37778)\n\n## Remote worker\n\n```\nnpx claude-mem install --ide cursor --runtime server --server-url https://YOUR_HOST\n```\n\nSet plugin variable `CLAUDE_MEM_MCP_TOKEN` for `claude-mem-remote` (`https://cmem.ai/api/mcp` or your server).\n\nNever restart a healthy worker (RAM queue). No Claude CLI required for host/openrouter.","createdAt":"2026-09-25T10:51:51.617Z","updatedAt":"2026-09-25T10:51:51.617Z"},{"id":"cmuguciph0012qu060d3en5wf","slug":"thedotmack-claude-mem-openclaw","name":"openclaw","description":"This guide walks through setting up the claude-mem plugin on an OpenClaw gateway. By the end, your agents will have persistent memory across sessions via system prompt context injection, and optionally a real-time observation feed streaming to a messaging channel.","authorId":"gh:thedotmack","authorName":"thedotmack","version":"0.1.0","category":"Prompt","securityLevel":"Sandbox","downloadsCount":0,"githubStars":94658,"pricePerCall":0,"manifest":{"name":"openclaw","tools":[],"category":"Prompt","entrypoint":{"type":"prompt"},"description":"This guide walks through setting up the claude-mem plugin on an OpenClaw gateway. By the end, your agents will have persistent memory across sessions via system prompt context injection, and optionally a real-time observation feed streaming to a messaging channel.","permissions":[],"systemPrompt":"# Claude-Mem OpenClaw Plugin — Setup Guide\n\nThis guide walks through setting up the claude-mem plugin on an OpenClaw gateway. By the end, your agents will have persistent memory across sessions via system prompt context injection, and optionally a real-time observation feed streaming to a messaging channel.\n\n## Quick Install (Recommended)\n\nRun this one-liner to install everything automatically:\n\n```bash\ncurl -fsSL https://install.cmem.ai/openclaw.sh | bash\n```\n\nThe installer handles dependency checks (Bun, uv), plugin installation, memory slot configuration, AI provider setup, worker startup, and optional observation feed configuration — all interactively.\n\n### Install with options\n\nPre-select your AI provider and API key to skip interactive prompts:\n\n```bash\ncurl -fsSL https://install.cmem.ai/openclaw.sh | bash -s -- --provider=gemini --api-key=YOUR_KEY\n```\n\nFor fully unattended installation (defaults to Claude Max Plan, skips observation feed):\n\n```bash\ncurl -fsSL https://install.cmem.ai/openclaw.sh | bash -s -- --non-interactive\n```\n\nTo upgrade an existing installation (preserves settings, updates plugin):\n\n```bash\ncurl -fsSL https://install.cmem.ai/openclaw.sh | bash -s -- --upgrade\n```\n\nAfter installation, skip to [Step 4: Restart the Gateway and Verify](#step-4-restart-the-gateway-and-verify) to confirm everything is working.\n\n---\n\n## Manual Setup\n\nThe steps below are for manual installation if you prefer not to use the automated installer, or need to troubleshoot individual steps.\n\n### Step 1: Clone the Claude-Mem Repo\n\nFirst, clone the claude-mem repository to a location accessible by your OpenClaw gateway. This gives you the worker service source and the plugin code.\n\n```bash\ncd /opt  # or wherever you want to keep it\ngit clone https://github.com/thedotmack/claude-mem.git\ncd claude-mem\nnpm install\nnpm run build\n```\n\nYou'll need **bun** installed for the worker service. If you don't have it:\n\n```bash\ncurl -fsSL https://bun.sh/install | bash\n```\n\n### Step 2: Get the Worker Running\n\nThe claude-mem worker is an HTTP service on port 37777. It stores observations, generates summaries, and serves the context timeline. The plugin talks to it over HTTP — it doesn't matter where the worker is running, just that it's reachable on localhost:37777.\n\n#### Check if it's already running\n\nIf this machine also runs Claude Code with claude-mem installed, the worker may already be running:\n\n```bash\ncurl http://localhost:37777/api/health\n```\n\n**Got `{\"status\":\"ok\"}`?** The worker is already running. Skip to Step 3.\n\n**Got connection refused or no response?** The worker isn't running. Continue below.\n\n#### If Claude Code has claude-mem installed\n\nIf claude-mem is installed as a Claude Code plugin (at `~/.claude/plugins/marketplaces/thedotmack/`), start the worker from that installation:\n\n```bash\ncd ~/.claude/plugins/marketplaces/thedotmack\nnpm run worker:restart\n```\n\nVerify:\n```bash\ncurl http://localhost:37777/api/health\n```\n\n**Got `{\"status\":\"ok\"}`?** You're set. Skip to Step 3.\n\n**Still not working?** Check `npm run worker:status` for error details, or check that bun is installed and on your PATH.\n\n#### If there's no Claude Code installation\n\nRun the worker from the cloned repo:\n\n```bash\ncd /opt/claude-mem  # wherever you cloned it\nnpm run worker:start\n```\n\nVerify:\n```bash\ncurl http://localhost:37777/api/health\n```\n\n**Got `{\"status\":\"ok\"}`?** You're set. Move to Step 3.\n\n**Still not working?** Debug steps:\n- Check that bun is installed: `bun --version`\n- Check the worker status: `npm run worker:status`\n- Check if something else is using port 37777: `lsof -i :37777`\n- Check logs: `npm run worker:logs` (if available)\n- Try running it directly to see errors: `bun plugin/scripts/worker-service.cjs start`\n\n### Step 3: Add the Plugin to Your Gateway\n\nAdd the `claude-mem` plugin to your OpenClaw gateway configuration:\n\n```json\n{\n  \"plugins\": {\n    \"claude-mem\": {\n      \"enabled\": true,\n      \"config\": {\n        \"project\": \"my-project\",\n        \"syncMemoryFile\": true,\n        \"workerPort\": 37777\n      }\n    }\n  }\n}\n```\n\n#### Config fields explained\n\n- **`project`** (string, default: `\"openclaw\"`) — The project name that scopes all observations in the memory database. Use a unique name per gateway/use-case so observations don't mix. For example, if this gateway runs a coding bot, use `\"coding-bot\"`.\n\n- **`syncMemoryFile`** (boolean, default: `true`) — When enabled, the plugin injects the observation timeline into each agent's system prompt via the `before_prompt_build` hook. This gives agents cross-session context without writing to MEMORY.md. Set to `false` to disable context injection entirely (observations are still recorded).\n\n- **`syncMemoryFileExclude`** (string[], default: `[]`) — Agent IDs excluded from automatic context injection. Useful for agents that curate their own memory. Observations are still recorded for excluded agents.\n\n- **`workerPort`** (number, default: `37777`) — The port where the claude-mem worker service is listening. Only change this if you configured the worker to use a different port.\n\n---\n\n## Step 4: Restart the Gateway and Verify\n\nRestart your OpenClaw gateway so it picks up the new plugin configuration. After restart, check the gateway logs for:\n\n```\n[claude-mem] OpenClaw plugin loaded — v1.0.0 (worker: 127.0.0.1:37777)\n```\n\nIf you see this, the plugin is loaded. You can also verify by running `/claude_mem_status` in any OpenClaw chat:\n\n```\nClaude-Mem Worker Status\nStatus: ok\nPort: 37777\nActive sessions: 0\nObservation feed: disconnected\n```\n\nThe observation feed shows `disconnected` because we haven't configured it yet. That's next.\n\n## Step 5: Verify Observations Are Being Recorded\n\nHave an agent do some work. The plugin automatically records observations through these OpenClaw events:\n\n1. **`before_agent_start`** — Initializes a claude-mem session when the agent starts\n2. **`before_prompt_build`** — Injects the observation timeline into the agent's system prompt (cached for 60s)\n3. **`tool_result_persist`** — Records each tool use (Read, Write, Bash, etc.) as an observation\n4. **`agent_end`** — Summarizes the session and marks it complete\n\nAll of this happens automatically. No additional configuration needed.\n\nTo verify it's working, check the worker's viewer UI at http://localhost:37777 to see observations appearing after the agent runs.\n\nYou can also check the worker's viewer UI at http://localhost:37777 to see observations appearing in real time.\n\n## Step 6: Set Up the Observation Feed (Streaming to a Channel)\n\nThe observation feed connects to the claude-mem worker's SSE (Server-Sent Events) stream and forwards every new observation to a messaging channel in real time. Your agents learn things, and you see them learning in your Telegram/Discord/Slack/etc.\n\n### What you'll see\n\nEvery time claude-mem creates a new observation from your agent's tool usage, a message like this appears in your channel:\n\n```\n🧠 Claude-Mem Observation\n**Implemented retry logic for API client**\nAdded exponential backoff with configurable max retries to handle transient failures\n```\n\n### Pick your channel\n\nYou need two things:\n- **Channel type** — Must match a channel plugin already running on your OpenClaw gateway\n- **Target ID** — The chat/channel/user ID where messages go\n\n#### Telegram\n\nChannel type: `telegram`\n\nTo find your chat ID:\n1. Message @userinfobot on Telegram — https://t.me/userinfobot\n2. It replies with your numeric chat ID (e.g., `123456789`)\n3. For group chats, the ID is negative (e.g., `-1001234567890`)\n\n```json\n\"observationFeed\": {\n  \"enabled\": true,\n  \"channel\": \"telegram\",\n  \"to\": \"123456789\"\n}\n```\n\n#### Discord\n\nChannel type: `discord`\n\nTo find your channel ID:\n1. Enable Developer Mode in Discord: Settings → Advanced → Developer Mode\n2. Right-click the target channel → Copy Channel ID\n\n```json\n\"observationFeed\": {\n  \"enabled\": true,\n  \"channel\": \"discord\",\n  \"to\": \"1234567890123456789\"\n}\n```\n\n#### Slack\n\nChannel type: `slack`\n\nTo find your channel ID (not the channel name):\n1. Open the channel in Slack\n2. Click the channel name at the top\n3. Scroll to the bottom of the channel details — the ID looks like `C01ABC2DEFG`\n\n```json\n\"observationFeed\": {\n  \"enabled\": true,\n  \"channel\": \"slack\",\n  \"to\": \"C01ABC2DEFG\"\n}\n```\n\n#### Signal\n\nChannel type: `signal`\n\nUse the phone number or group ID configured in your OpenClaw gateway's Signal plugin.\n\n```json\n\"observationFeed\": {\n  \"enabled\": true,\n  \"channel\": \"signal\",\n  \"to\": \"+1234567890\"\n}\n```\n\n#### WhatsApp\n\nChannel type: `whatsapp`\n\nUse the phone number or group JID configured in your OpenClaw gateway's WhatsApp plugin.\n\n```json\n\"observationFeed\": {\n  \"enabled\": true,\n  \"channel\": \"whatsapp\",\n  \"to\": \"+1234567890\"\n}\n```\n\n#### LINE\n\nChannel type: `line`\n\nUse the user ID or group ID from the LINE Developer Console.\n\n```json\n\"observationFeed\": {\n  \"enabled\": true,\n  \"channel\": \"line\",\n  \"to\": \"U1234567890abcdef\"\n}\n```\n\n### Add it to your config\n\nYour complete plugin config should now look like this (using Telegram as an example):\n\n```json\n{\n  \"plugins\": {\n    \"claude-mem\": {\n      \"enabled\": true,\n      \"config\": {\n        \"project\": \"my-project\",\n        \"syncMemoryFile\": true,\n        \"workerPort\": 37777,\n        \"observationFeed\": {\n          \"enabled\": true,\n          \"channel\": \"telegram\",\n          \"to\": \"123456789\"\n        }\n      }\n    }\n  }\n}\n```\n\n### Restart and verify\n\nRestart the gateway. Check the logs for these three lines in order:\n\n```\n[claude-mem] Observation feed starting — channel: telegram, target: 123456789\n[claude-mem] Connecting to SSE stream at http://localhost:37777/stream\n[claude-mem] Connected to SSE stream\n```\n\nThen run `/claude_mem_feed` in any OpenClaw chat:\n\n```\nClaude-Mem Observation Feed\nEnabled: yes\nChannel: telegram\nTarget: 123456789\nConnection: connected\n```\n\nIf `Connection` shows `connected`, you're done. Have an agent do some work and watch observations stream to your channel.\n\n## Commands Reference\n\nThe plugin registers two commands:\n\n### /claude_mem_status\n\nReports worker health and current session state.\n\n```\n/claude_mem_status\n```\n\nOutput:\n```\nClaude-Mem Worker Status\nStatus: ok\nPort: 37777\nActive sessions: 2\nObservation feed: connected\n```\n\n### /claude_mem_feed\n\nShows observation feed status. Accepts optional `on`/`off` argument.\n\n```\n/claude_mem_feed          — show status\n/claude_mem_feed on       — request enable (update config to persist)\n/claude_mem_feed off      — request disable (update config to persist)\n```\n\n## How It All Works\n\n```\nOpenClaw Gateway\n  │\n  ├── before_agent_start ───→ Init session\n  ├── before_prompt_build ──→ Inject context into system prompt\n  ├── tool_result_persist ──→ Record observation\n  ├── agent_end ────────────→ Summarize + Complete session\n  └── gateway_start ────────→ Reset session tracking + context cache\n                    │\n                    ▼\n         Claude-Mem Worker (localhost:37777)\n           ├── POST /api/sessions/init\n           ├── POST /api/sessions/observations\n           ├── POST /api/sessions/summarize\n           ├── POST /api/sessions/complete\n           ├── GET  /api/context/inject ──→ System prompt context\n           └── GET  /stream ─────────────→ SSE → Messaging channels\n```\n\n### System prompt context injection\n\nThe plugin injects the observation timeline into each agent's system prompt via the `before_prompt_build` hook. The content comes from the worker's `GET /api/context/inject` endpoint. Context is cached for 60 seconds per project to avoid re-fetching on every LLM turn. The cache is cleared on gateway restart.\n\nThis keeps MEMORY.md under the agent's control for curated long-term memory, while the observation timeline is delivered through the system prompt.\n\n### Observation recording\n\nEvery tool use (Read, Write, Bash, etc.) is sent to the claude-mem worker as an observation. The worker's AI agent processes it into a structured observation with title, subtitle, facts, concepts, and narrative. Tools prefixed with `memory_` are skipped to avoid recursive recording.\n\n### Session lifecycle\n\n- **`before_agent_start`** — Creates a session in the worker.\n- **`before_prompt_build`** — Fetches the observation timeline and returns it as `appendSystemContext`. Cached for 60s.\n- **`tool_result_persist`** — Records observation (fire-and-forget). Tool responses are truncated to 1000 characters.\n- **`agent_end`** — Sends the last assistant message for summarization, then completes the session. Both fire-and-forget.\n- **`gateway_start`** — Clears all session tracking (session IDs, context cache) so agents start fresh.\n\n### Observation feed\n\nA background service connects to the worker's SSE stream and forwards `new_observation` events to a configured messaging channel. The connection auto-reconnects with exponential backoff (1s → 30s max).\n\n## Troubleshooting\n\n| Problem | What to check |\n|---------|---------------|\n| Worker health check fails | Is bun installed? (`bun --version`). Is something else on port 37777? (`lsof -i :37777`). Try running directly: `bun plugin/scripts/worker-service.cjs start` |\n| Worker started from Claude Code install but not responding | Check `cd ~/.claude/plugins/marketplaces/thedotmack && npm run worker:status`. May need `npm run worker:restart`. |\n| Worker started from cloned repo but not responding | Check `cd /path/to/claude-mem && npm run worker:status`. Make sure you ran `npm install && npm run build` first. |\n| No context in agent system prompt | Check that `syncMemoryFile` is not set to `false`. Check that the agent's ID is not in `syncMemoryFileExclude`. Verify the worker is running and has observations. |\n| Observations not being recorded | Check gateway logs for `[claude-mem]` messages. The worker must be running and reachable on localhost:37777. |\n| Feed shows `disconnected` | Worker's `/stream` endpoint not reachable. Check `workerPort` matches the actual worker port. |\n| Feed shows `reconnecting` | Connection dropped. The plugin auto-reconnects — wait up to 30 seconds. |\n| `Unknown channel type` in logs | The channel plugin (e.g., telegram) isn't loaded on your gateway. Make sure the channel is configured and running. |\n| `Observation feed disabled` in logs | Set `observationFeed.enabled` to `true` in your config. |\n| `Observation feed misconfigured` in logs | Both `observationFeed.channel` and `observationFeed.to` are required. |\n| No messages in channel despite `connected` | The feed only sends processed observations, not raw tool usage. There's a 1-2 second delay. Make sure the worker is actually processing observations (check http://localhost:37777). |\n\n## Full Config Reference\n\n```json\n{\n  \"plugins\": {\n    \"claude-mem\": {\n      \"enabled\": true,\n      \"config\": {\n        \"project\": \"openclaw\",\n        \"syncMemoryFile\": true,\n        \"workerPort\": 37777,\n        \"observationFeed\": {\n          \"enabled\": false,\n          \"channel\": \"telegram\",\n          \"to\": \"123456789\"\n        }\n      }\n    }\n  }\n}\n```\n\n| Field | Type | Default | Description |\n|-------|------|---------|-------------|\n| `project` | string | `\"openclaw\"` | Project name scoping observations in the database |\n| `syncMemoryFile` | boolean | `true` | Inject observation context into agent system prompt |\n| `syncMemoryFileExclude` | string[] | `[]` | Agent IDs excluded from context injection |\n| `workerPort` | number | `37777` | Claude-mem worker service port |\n| `observationFeed.enabled` | boolean | `false` | Stream observations to a messaging channel |\n| `observationFeed.channel` | string | — | Channel type: `telegram`, `discord`, `slack`, `signal`, `whatsapp`, `line` |\n| `observationFeed.to` | string | — | Target chat/channel/user ID |","schemaVersion":1},"repoUrl":"https://github.com/thedotmack/claude-mem/tree/main/openclaw","tags":["ai","ai-agents","ai-memory","anthropic","artificial-intelligence","chromadb","claude","claude-agent-sdk","claude-agents","claude-code","claude-code-plugin","claude-skills"],"stats":{"installVelocity7d":0,"retentionRate":0,"executions":0,"rating":null},"origin":"github","source":{"repo":"claude-mem","audit":{"files":["openclaw/package.json","package.json"],"binaries":[],"findings":[{"kind":"dependency","rule":"DP-04","message":"No npm lock file: installs resolve whatever the ranges allow today.","surface":"package.json","evidence":"@better-auth/api-key@^1.6.16, better-auth@^1.6.16","severity":"medium"}],"packages":2,"auditedAt":"2026-09-25T10:51:51.575Z","lockfiles":[]},"forks":8366,"owner":"thedotmack","stars":94658,"topics":["ai","ai-agents","ai-memory","anthropic","artificial-intelligence","chromadb","claude","claude-agent-sdk","claude-agents","claude-code","claude-code-plugin","claude-skills","embeddings","long-term-memory","mem0","memory-engine","openmemory","rag","sqlite","supermemory"],"license":"Apache-2.0","fullName":"thedotmack/claude-mem","homepage":"https://claude-mem.ai","language":"TypeScript","pushedAt":"2026-09-25T01:11:49Z","avatarUrl":"https://avatars.githubusercontent.com/u/683968?v=4","crawledAt":"2026-09-25T10:51:42.785Z","openIssues":296,"manifestFile":"SKILL.md","manifestPath":"openclaw/SKILL.md","defaultBranch":"main"},"readme":"# Claude-Mem OpenClaw Plugin — Setup Guide\n\nThis guide walks through setting up the claude-mem plugin on an OpenClaw gateway. By the end, your agents will have persistent memory across sessions via system prompt context injection, and optionally a real-time observation feed streaming to a messaging channel.\n\n## Quick Install (Recommended)\n\nRun this one-liner to install everything automatically:\n\n```bash\ncurl -fsSL https://install.cmem.ai/openclaw.sh | bash\n```\n\nThe installer handles dependency checks (Bun, uv), plugin installation, memory slot configuration, AI provider setup, worker startup, and optional observation feed configuration — all interactively.\n\n### Install with options\n\nPre-select your AI provider and API key to skip interactive prompts:\n\n```bash\ncurl -fsSL https://install.cmem.ai/openclaw.sh | bash -s -- --provider=gemini --api-key=YOUR_KEY\n```\n\nFor fully unattended installation (defaults to Claude Max Plan, skips observation feed):\n\n```bash\ncurl -fsSL https://install.cmem.ai/openclaw.sh | bash -s -- --non-interactive\n```\n\nTo upgrade an existing installation (preserves settings, updates plugin):\n\n```bash\ncurl -fsSL https://install.cmem.ai/openclaw.sh | bash -s -- --upgrade\n```\n\nAfter installation, skip to [Step 4: Restart the Gateway and Verify](#step-4-restart-the-gateway-and-verify) to confirm everything is working.\n\n---\n\n## Manual Setup\n\nThe steps below are for manual installation if you prefer not to use the automated installer, or need to troubleshoot individual steps.\n\n### Step 1: Clone the Claude-Mem Repo\n\nFirst, clone the claude-mem repository to a location accessible by your OpenClaw gateway. This gives you the worker service source and the plugin code.\n\n```bash\ncd /opt  # or wherever you want to keep it\ngit clone https://github.com/thedotmack/claude-mem.git\ncd claude-mem\nnpm install\nnpm run build\n```\n\nYou'll need **bun** installed for the worker service. If you don't have it:\n\n```bash\ncurl -fsSL https://bun.sh/install | bash\n```\n\n### Step 2: Get the Worker Running\n\nThe claude-mem worker is an HTTP service on port 37777. It stores observations, generates summaries, and serves the context timeline. The plugin talks to it over HTTP — it doesn't matter where the worker is running, just that it's reachable on localhost:37777.\n\n#### Check if it's already running\n\nIf this machine also runs Claude Code with claude-mem installed, the worker may already be running:\n\n```bash\ncurl http://localhost:37777/api/health\n```\n\n**Got `{\"status\":\"ok\"}`?** The worker is already running. Skip to Step 3.\n\n**Got connection refused or no response?** The worker isn't running. Continue below.\n\n#### If Claude Code has claude-mem installed\n\nIf claude-mem is installed as a Claude Code plugin (at `~/.claude/plugins/marketplaces/thedotmack/`), start the worker from that installation:\n\n```bash\ncd ~/.claude/plugins/marketplaces/thedotmack\nnpm run worker:restart\n```\n\nVerify:\n```bash\ncurl http://localhost:37777/api/health\n```\n\n**Got `{\"status\":\"ok\"}`?** You're set. Skip to Step 3.\n\n**Still not working?** Check `npm run worker:status` for error details, or check that bun is installed and on your PATH.\n\n#### If there's no Claude Code installation\n\nRun the worker from the cloned repo:\n\n```bash\ncd /opt/claude-mem  # wherever you cloned it\nnpm run worker:start\n```\n\nVerify:\n```bash\ncurl http://localhost:37777/api/health\n```\n\n**Got `{\"status\":\"ok\"}`?** You're set. Move to Step 3.\n\n**Still not working?** Debug steps:\n- Check that bun is installed: `bun --version`\n- Check the worker status: `npm run worker:status`\n- Check if something else is using port 37777: `lsof -i :37777`\n- Check logs: `npm run worker:logs` (if available)\n- Try running it directly to see errors: `bun plugin/scripts/worker-service.cjs start`\n\n### Step 3: Add the Plugin to Your Gateway\n\nAdd the `claude-mem` plugin to your OpenClaw gateway configuration:\n\n```json\n{\n  \"plugins\": {\n    \"claude-mem\": {\n      \"enabled\": true,\n      \"config\": {\n        \"project\": \"my-project\",\n        ","createdAt":"2026-09-25T10:51:51.605Z","updatedAt":"2026-09-25T10:51:51.605Z"},{"id":"cmuguciq20018qu06i02xg77d","slug":"thedotmack-claude-mem-mem-search","name":"mem-search","description":"Use this when the user asks to search memory, \"did we already solve this?\", \"how did we do X last time?\", or wants work from previous sessions.","authorId":"gh:thedotmack","authorName":"thedotmack","version":"0.1.0","category":"Prompt","securityLevel":"Community","downloadsCount":0,"githubStars":94658,"pricePerCall":0,"manifest":{"name":"mem-search","tools":[],"category":"Prompt","entrypoint":{"type":"prompt"},"description":"Use this when the user asks to search memory, \"did we already solve this?\", \"how did we do X last time?\", or wants work from previous sessions.","permissions":[],"systemPrompt":"# mem-search\n\nLayered workflow. Do not dump full observations until IDs are filtered, and do not reach for raw tool bodies until the summaries came up short.\n\n1. `search(query)` — index with IDs\n2. `timeline(anchor=ID)` — nearby context\n3. `get_observations(ids=[...])` — full details for those IDs only\n4. `get_tool_uses(ids=[...])` — the ORIGINAL `tool_input` / `tool_response` for specific tool calls. Last resort: these are unsummarized and can run to thousands of tokens each.\n\nStamp `platformSource` as `cursor` or `grok-bot` on writes for this host. When reading, do not drop the other host unless asked.\n\nIf MCP is missing, run the install skill first (`npx claude-mem install --ide <host>`).","schemaVersion":1},"repoUrl":"https://github.com/thedotmack/claude-mem/tree/main/claude-mem-cursor/skills/mem-search","tags":["ai","ai-agents","ai-memory","anthropic","artificial-intelligence","chromadb","claude","claude-agent-sdk","claude-agents","claude-code","claude-code-plugin","claude-skills"],"stats":{"installVelocity7d":0,"retentionRate":0,"executions":0,"rating":null},"origin":"github","source":{"repo":"claude-mem","audit":{"files":["openclaw/package.json","package.json"],"binaries":[],"findings":[{"kind":"dependency","rule":"DP-04","message":"No npm lock file: installs resolve whatever the ranges allow today.","surface":"package.json","evidence":"@better-auth/api-key@^1.6.16, better-auth@^1.6.16","severity":"medium"}],"packages":2,"auditedAt":"2026-09-25T10:51:51.575Z","lockfiles":[]},"forks":8366,"owner":"thedotmack","stars":94658,"topics":["ai","ai-agents","ai-memory","anthropic","artificial-intelligence","chromadb","claude","claude-agent-sdk","claude-agents","claude-code","claude-code-plugin","claude-skills","embeddings","long-term-memory","mem0","memory-engine","openmemory","rag","sqlite","supermemory"],"license":"Apache-2.0","fullName":"thedotmack/claude-mem","homepage":"https://claude-mem.ai","language":"TypeScript","pushedAt":"2026-09-25T01:11:49Z","avatarUrl":"https://avatars.githubusercontent.com/u/683968?v=4","crawledAt":"2026-09-25T10:51:42.785Z","openIssues":296,"manifestFile":"SKILL.md","manifestPath":"claude-mem-cursor/skills/mem-search/SKILL.md","defaultBranch":"main"},"readme":"# mem-search\n\nLayered workflow. Do not dump full observations until IDs are filtered, and do not reach for raw tool bodies until the summaries came up short.\n\n1. `search(query)` — index with IDs\n2. `timeline(anchor=ID)` — nearby context\n3. `get_observations(ids=[...])` — full details for those IDs only\n4. `get_tool_uses(ids=[...])` — the ORIGINAL `tool_input` / `tool_response` for specific tool calls. Last resort: these are unsummarized and can run to thousands of tokens each.\n\nStamp `platformSource` as `cursor` or `grok-bot` on writes for this host. When reading, do not drop the other host unless asked.\n\nIf MCP is missing, run the install skill first (`npx claude-mem install --ide <host>`).","createdAt":"2026-09-25T10:51:51.626Z","updatedAt":"2026-09-25T10:51:51.626Z"},{"id":"cmuguciqa001bqu067rqlbqm2","slug":"thedotmack-claude-mem-host-observer","name":"host-observer","description":"Use this when fulfilling claude-mem observer jobs on Grok Bot: reply only skip_summary or one full observation XML, never prose.","authorId":"gh:thedotmack","authorName":"thedotmack","version":"0.1.0","category":"Prompt","securityLevel":"Community","downloadsCount":0,"githubStars":94658,"pricePerCall":0,"manifest":{"name":"host-observer","tools":[],"category":"Prompt","entrypoint":{"type":"prompt"},"description":"Use this when fulfilling claude-mem observer jobs on Grok Bot: reply only skip_summary or one full observation XML, never prose.","permissions":[],"systemPrompt":"# Host observer (Grok Bot)\n\nYou are the model inside claude-mem's generator loop (OpenRouter HTTP agent to the local shim).\n\nWrite only `outbox/{id}.txt` for inbox jobs, or return the XML as the chat-completions body.\n\n**Idle / init / no tool results:** `<skip_summary reason=\"noise\" />`\n\n**Finished searchable unit:** one `<observation>` with real title, 4–10 facts with paths, narrative. Types: bugfix, feature, refactor, change, discovery, decision. Never title with a tool name.\n\nProse is dropped (`outputClass=prose`). Do not mix skip_summary and observation. Do not POST `/api/memory/save` except last-resort.","schemaVersion":1},"repoUrl":"https://github.com/thedotmack/claude-mem/tree/main/claude-mem-grok-bot/skills/host-observer","tags":["ai","ai-agents","ai-memory","anthropic","artificial-intelligence","chromadb","claude","claude-agent-sdk","claude-agents","claude-code","claude-code-plugin","claude-skills"],"stats":{"installVelocity7d":0,"retentionRate":0,"executions":0,"rating":null},"origin":"github","source":{"repo":"claude-mem","audit":{"files":["openclaw/package.json","package.json"],"binaries":[],"findings":[{"kind":"dependency","rule":"DP-04","message":"No npm lock file: installs resolve whatever the ranges allow today.","surface":"package.json","evidence":"@better-auth/api-key@^1.6.16, better-auth@^1.6.16","severity":"medium"}],"packages":2,"auditedAt":"2026-09-25T10:51:51.575Z","lockfiles":[]},"forks":8366,"owner":"thedotmack","stars":94658,"topics":["ai","ai-agents","ai-memory","anthropic","artificial-intelligence","chromadb","claude","claude-agent-sdk","claude-agents","claude-code","claude-code-plugin","claude-skills","embeddings","long-term-memory","mem0","memory-engine","openmemory","rag","sqlite","supermemory"],"license":"Apache-2.0","fullName":"thedotmack/claude-mem","homepage":"https://claude-mem.ai","language":"TypeScript","pushedAt":"2026-09-25T01:11:49Z","avatarUrl":"https://avatars.githubusercontent.com/u/683968?v=4","crawledAt":"2026-09-25T10:51:42.785Z","openIssues":296,"manifestFile":"SKILL.md","manifestPath":"claude-mem-grok-bot/skills/host-observer/SKILL.md","defaultBranch":"main"},"readme":"# Host observer (Grok Bot)\n\nYou are the model inside claude-mem's generator loop (OpenRouter HTTP agent to the local shim).\n\nWrite only `outbox/{id}.txt` for inbox jobs, or return the XML as the chat-completions body.\n\n**Idle / init / no tool results:** `<skip_summary reason=\"noise\" />`\n\n**Finished searchable unit:** one `<observation>` with real title, 4–10 facts with paths, narrative. Types: bugfix, feature, refactor, change, discovery, decision. Never title with a tool name.\n\nProse is dropped (`outputClass=prose`). Do not mix skip_summary and observation. Do not POST `/api/memory/save` except last-resort.","createdAt":"2026-09-25T10:51:51.634Z","updatedAt":"2026-09-25T10:51:51.634Z"},{"id":"cmuguciqh001equ06okfmm43n","slug":"thedotmack-claude-mem-install-2","name":"claude-mem-install","description":"Use this when setting up claude-mem on Grok Bot: local worker plus CMEM Pro observer (default), optional host-login observer, or remote cmem.ai. No Cursor required.","authorId":"gh:thedotmack","authorName":"thedotmack","version":"0.1.0","category":"Prompt","securityLevel":"Community","downloadsCount":0,"githubStars":94658,"pricePerCall":0,"manifest":{"name":"claude-mem-install","tools":[],"category":"Prompt","entrypoint":{"type":"prompt"},"description":"Use this when setting up claude-mem on Grok Bot: local worker plus CMEM Pro observer (default), optional host-login observer, or remote cmem.ai. No Cursor required.","permissions":[],"systemPrompt":"# Install claude-mem on Grok Bot\n\nIndependent of Cursor. Grok Bot has no session-start / file-read / tool-use hooks.\n\n## Local worker + CMEM Pro observer (default)\n\n```\nnpx claude-mem install --ide grok-bot\n```\n\nDo **not** pass `--provider host` unless you want the loopback shim. With no `--provider`, this is the CMEM Pro path:\n\n- Worker on `127.0.0.1:<port>` (default `37700 + uid%100`). Do not restart if healthy.\n- Transcript watcher per Grok Bot agent (`platformSource=grok-bot`)\n- Observer via CMEM Pro: `CLAUDE_MEM_PROVIDER=openrouter`, `CLAUDE_MEM_OPENROUTER_BASE_URL=https://cmem.ai/api/inference/v1`, `CLAUDE_MEM_OPENROUTER_MODEL=cmem-observer`, API key from installer OAuth (`cm_pro` memory key)\n- Interactive installer pre-selects CMEM Pro\n- MCP `session_start_context` at the start of a real task\n- Live INDEX into `agents/<uuid>/memory/log/zz-claude-mem-inject.md` (disable with `CLAUDE_MEM_GROK_BOT_INJECT_ENABLED=false`)\n\nNo xAI key. No Claude CLI.\n\n## Optional: local host-login observer\n\nExplicit opt-in only. Not the user default.\n\n```\nnpx claude-mem install --ide grok-bot --provider host\n```\n\nLoopback OpenAI-compatible shim on a **free** loopback port (not the worker port). Idle replies are `<skip_summary />`; finished units are one `<observation>`. This Grok login fulfills inbox jobs (skill host-observer).\n\n## Remote worker / remote observer\n\nSet plugin variable `CLAUDE_MEM_MCP_TOKEN` and use MCP `claude-mem-remote`.\n\n```\nnpx claude-mem install --ide grok-bot --runtime server --server-url https://cmem.ai\n```","schemaVersion":1},"repoUrl":"https://github.com/thedotmack/claude-mem/tree/main/claude-mem-grok-bot/skills/install","tags":["ai","ai-agents","ai-memory","anthropic","artificial-intelligence","chromadb","claude","claude-agent-sdk","claude-agents","claude-code","claude-code-plugin","claude-skills"],"stats":{"installVelocity7d":0,"retentionRate":0,"executions":0,"rating":null},"origin":"github","source":{"repo":"claude-mem","audit":{"files":["openclaw/package.json","package.json"],"binaries":[],"findings":[{"kind":"dependency","rule":"DP-04","message":"No npm lock file: installs resolve whatever the ranges allow today.","surface":"package.json","evidence":"@better-auth/api-key@^1.6.16, better-auth@^1.6.16","severity":"medium"}],"packages":2,"auditedAt":"2026-09-25T10:51:51.575Z","lockfiles":[]},"forks":8366,"owner":"thedotmack","stars":94658,"topics":["ai","ai-agents","ai-memory","anthropic","artificial-intelligence","chromadb","claude","claude-agent-sdk","claude-agents","claude-code","claude-code-plugin","claude-skills","embeddings","long-term-memory","mem0","memory-engine","openmemory","rag","sqlite","supermemory"],"license":"Apache-2.0","fullName":"thedotmack/claude-mem","homepage":"https://claude-mem.ai","language":"TypeScript","pushedAt":"2026-09-25T01:11:49Z","avatarUrl":"https://avatars.githubusercontent.com/u/683968?v=4","crawledAt":"2026-09-25T10:51:42.785Z","openIssues":296,"manifestFile":"SKILL.md","manifestPath":"claude-mem-grok-bot/skills/install/SKILL.md","defaultBranch":"main"},"readme":"# Install claude-mem on Grok Bot\n\nIndependent of Cursor. Grok Bot has no session-start / file-read / tool-use hooks.\n\n## Local worker + CMEM Pro observer (default)\n\n```\nnpx claude-mem install --ide grok-bot\n```\n\nDo **not** pass `--provider host` unless you want the loopback shim. With no `--provider`, this is the CMEM Pro path:\n\n- Worker on `127.0.0.1:<port>` (default `37700 + uid%100`). Do not restart if healthy.\n- Transcript watcher per Grok Bot agent (`platformSource=grok-bot`)\n- Observer via CMEM Pro: `CLAUDE_MEM_PROVIDER=openrouter`, `CLAUDE_MEM_OPENROUTER_BASE_URL=https://cmem.ai/api/inference/v1`, `CLAUDE_MEM_OPENROUTER_MODEL=cmem-observer`, API key from installer OAuth (`cm_pro` memory key)\n- Interactive installer pre-selects CMEM Pro\n- MCP `session_start_context` at the start of a real task\n- Live INDEX into `agents/<uuid>/memory/log/zz-claude-mem-inject.md` (disable with `CLAUDE_MEM_GROK_BOT_INJECT_ENABLED=false`)\n\nNo xAI key. No Claude CLI.\n\n## Optional: local host-login observer\n\nExplicit opt-in only. Not the user default.\n\n```\nnpx claude-mem install --ide grok-bot --provider host\n```\n\nLoopback OpenAI-compatible shim on a **free** loopback port (not the worker port). Idle replies are `<skip_summary />`; finished units are one `<observation>`. This Grok login fulfills inbox jobs (skill host-observer).\n\n## Remote worker / remote observer\n\nSet plugin variable `CLAUDE_MEM_MCP_TOKEN` and use MCP `claude-mem-remote`.\n\n```\nnpx claude-mem install --ide grok-bot --runtime server --server-url https://cmem.ai\n```","createdAt":"2026-09-25T10:51:51.642Z","updatedAt":"2026-09-25T10:51:51.642Z"},{"id":"cmuguciqq001hqu06l0mg3r2i","slug":"thedotmack-claude-mem-mem-search-2","name":"mem-search","description":"Use this when the user asks to search memory, \"did we already solve this?\", \"how did we do X last time?\", or wants work from previous sessions.","authorId":"gh:thedotmack","authorName":"thedotmack","version":"0.1.0","category":"Prompt","securityLevel":"Community","downloadsCount":0,"githubStars":94658,"pricePerCall":0,"manifest":{"name":"mem-search","tools":[],"category":"Prompt","entrypoint":{"type":"prompt"},"description":"Use this when the user asks to search memory, \"did we already solve this?\", \"how did we do X last time?\", or wants work from previous sessions.","permissions":[],"systemPrompt":"# mem-search\n\nLayered workflow. Do not dump full observations until IDs are filtered, and do not reach for raw tool bodies until the summaries came up short.\n\n1. `search(query)` — index with IDs\n2. `timeline(anchor=ID)` — nearby context\n3. `get_observations(ids=[...])` — full details for those IDs only\n4. `get_tool_uses(ids=[...])` — the ORIGINAL `tool_input` / `tool_response` for specific tool calls. Last resort: these are unsummarized and can run to thousands of tokens each.\n\nThe worker also live-writes a growing ID INDEX to `agents/<this-seat-uuid>/memory/log/zz-claude-mem-inject.md` (host Memory mid-attach). Use those IDs with `get_observations`. Thin seat diaries are filled from newest house observations. Disable with `CLAUDE_MEM_GROK_BOT_INJECT_ENABLED=false`.\n\nStamp `platformSource` as `cursor` or `grok-bot` on writes for this host. When reading, do not drop the other host unless asked.\n\nIf MCP is missing, run the install skill first (`npx claude-mem install --ide <host>`).","schemaVersion":1},"repoUrl":"https://github.com/thedotmack/claude-mem/tree/main/claude-mem-grok-bot/skills/mem-search","tags":["ai","ai-agents","ai-memory","anthropic","artificial-intelligence","chromadb","claude","claude-agent-sdk","claude-agents","claude-code","claude-code-plugin","claude-skills"],"stats":{"installVelocity7d":0,"retentionRate":0,"executions":0,"rating":null},"origin":"github","source":{"repo":"claude-mem","audit":{"files":["openclaw/package.json","package.json"],"binaries":[],"findings":[{"kind":"dependency","rule":"DP-04","message":"No npm lock file: installs resolve whatever the ranges allow today.","surface":"package.json","evidence":"@better-auth/api-key@^1.6.16, better-auth@^1.6.16","severity":"medium"}],"packages":2,"auditedAt":"2026-09-25T10:51:51.575Z","lockfiles":[]},"forks":8366,"owner":"thedotmack","stars":94658,"topics":["ai","ai-agents","ai-memory","anthropic","artificial-intelligence","chromadb","claude","claude-agent-sdk","claude-agents","claude-code","claude-code-plugin","claude-skills","embeddings","long-term-memory","mem0","memory-engine","openmemory","rag","sqlite","supermemory"],"license":"Apache-2.0","fullName":"thedotmack/claude-mem","homepage":"https://claude-mem.ai","language":"TypeScript","pushedAt":"2026-09-25T01:11:49Z","avatarUrl":"https://avatars.githubusercontent.com/u/683968?v=4","crawledAt":"2026-09-25T10:51:42.785Z","openIssues":296,"manifestFile":"SKILL.md","manifestPath":"claude-mem-grok-bot/skills/mem-search/SKILL.md","defaultBranch":"main"},"readme":"# mem-search\n\nLayered workflow. Do not dump full observations until IDs are filtered, and do not reach for raw tool bodies until the summaries came up short.\n\n1. `search(query)` — index with IDs\n2. `timeline(anchor=ID)` — nearby context\n3. `get_observations(ids=[...])` — full details for those IDs only\n4. `get_tool_uses(ids=[...])` — the ORIGINAL `tool_input` / `tool_response` for specific tool calls. Last resort: these are unsummarized and can run to thousands of tokens each.\n\nThe worker also live-writes a growing ID INDEX to `agents/<this-seat-uuid>/memory/log/zz-claude-mem-inject.md` (host Memory mid-attach). Use those IDs with `get_observations`. Thin seat diaries are filled from newest house observations. Disable with `CLAUDE_MEM_GROK_BOT_INJECT_ENABLED=false`.\n\nStamp `platformSource` as `cursor` or `grok-bot` on writes for this host. When reading, do not drop the other host unless asked.\n\nIf MCP is missing, run the install skill first (`npx claude-mem install --ide <host>`).","createdAt":"2026-09-25T10:51:51.651Z","updatedAt":"2026-09-25T10:51:51.651Z"},{"id":"cmuguciqy001kqu06vtvfm5ch","slug":"thedotmack-claude-mem-mem-search-3","name":"mem-search","description":"This skill should be used when the user asks to \"search memory\", \"what do you remember about X\", \"check claude-mem\", \"mem search\", \"find past observations\", \"what did we do last session\", or wants prior-session context about a project, decision, file, or task. Searches the user's Claude-Mem (cmem.ai) memory.","authorId":"gh:thedotmack","authorName":"thedotmack","version":"0.1.0","category":"Prompt","securityLevel":"Community","downloadsCount":0,"githubStars":94658,"pricePerCall":0,"manifest":{"name":"mem-search","tools":[],"category":"Prompt","entrypoint":{"type":"prompt"},"description":"This skill should be used when the user asks to \"search memory\", \"what do you remember about X\", \"check claude-mem\", \"mem search\", \"find past observations\", \"what did we do last session\", or wants prior-session context about a project, decision, file, or task. Searches the user's Claude-Mem (cmem.ai) memory.","permissions":[],"systemPrompt":"# Claude-Mem Search (Cowork)\n\nSearch the user's persistent Claude-Mem memory on cmem.ai. Memory contains\ntimestamped observations synthesized from past sessions across all their\nagents (Claude Code, Cowork, Codex, and others).\n\n## How to search\n\nRun the bundled CLI (no dependencies, uses the plugin's configured API key):\n\n```bash\nnode \"${CLAUDE_PLUGIN_ROOT}/scripts/cmem-hook.mjs\" search \"your query\" --limit 20\n```\n\n## Progressive search method\n\nFollow claude-mem's Index → Timeline → Transcript discipline — cheap passes\nfirst, expensive detail only for confirmed hits:\n\n1. **Index pass** — run 1–3 broad keyword searches (project names, file names,\n   error strings, feature names). Skim titles/summaries only.\n2. **Narrow pass** — re-search with the most specific terms found in step 1\n   (IDs, exact phrases) and a smaller `--limit`.\n3. **Answer** — synthesize from the observations returned. Quote timestamps\n   when the user asks \"when\".\n\nDo not dump raw search output at the user; extract the relevant observations\nand answer in plain language.\n\n## Diagnostics\n\nIf searches return nothing or error:\n\n```bash\nnode \"${CLAUDE_PLUGIN_ROOT}/scripts/cmem-hook.mjs\" status\n```\n\nReport the status output plainly: a MISSING api key means the plugin needs the\nuser's cmem.ai key added to its configuration; a 404 on `/api/hooks/context`\njust means the newer Pro endpoint isn't deployed — search still works via\n`/api/mcp`.\n\n## Notes\n\n- Some filters (date ranges, type) may be silently ignored by the cloud API\n  until MCP parity ships — prefer keyword narrowing over filter flags.\n- Never write secrets into search queries; queries are sent to cmem.ai.","schemaVersion":1},"repoUrl":"https://github.com/thedotmack/claude-mem/tree/main/cowork/skills/mem-search","tags":["ai","ai-agents","ai-memory","anthropic","artificial-intelligence","chromadb","claude","claude-agent-sdk","claude-agents","claude-code","claude-code-plugin","claude-skills"],"stats":{"installVelocity7d":0,"retentionRate":0,"executions":0,"rating":null},"origin":"github","source":{"repo":"claude-mem","audit":{"files":["openclaw/package.json","package.json"],"binaries":[],"findings":[{"kind":"dependency","rule":"DP-04","message":"No npm lock file: installs resolve whatever the ranges allow today.","surface":"package.json","evidence":"@better-auth/api-key@^1.6.16, better-auth@^1.6.16","severity":"medium"}],"packages":2,"auditedAt":"2026-09-25T10:51:51.575Z","lockfiles":[]},"forks":8366,"owner":"thedotmack","stars":94658,"topics":["ai","ai-agents","ai-memory","anthropic","artificial-intelligence","chromadb","claude","claude-agent-sdk","claude-agents","claude-code","claude-code-plugin","claude-skills","embeddings","long-term-memory","mem0","memory-engine","openmemory","rag","sqlite","supermemory"],"license":"Apache-2.0","fullName":"thedotmack/claude-mem","homepage":"https://claude-mem.ai","language":"TypeScript","pushedAt":"2026-09-25T01:11:49Z","avatarUrl":"https://avatars.githubusercontent.com/u/683968?v=4","crawledAt":"2026-09-25T10:51:42.785Z","openIssues":296,"manifestFile":"SKILL.md","manifestPath":"cowork/skills/mem-search/SKILL.md","defaultBranch":"main"},"readme":"# Claude-Mem Search (Cowork)\n\nSearch the user's persistent Claude-Mem memory on cmem.ai. Memory contains\ntimestamped observations synthesized from past sessions across all their\nagents (Claude Code, Cowork, Codex, and others).\n\n## How to search\n\nRun the bundled CLI (no dependencies, uses the plugin's configured API key):\n\n```bash\nnode \"${CLAUDE_PLUGIN_ROOT}/scripts/cmem-hook.mjs\" search \"your query\" --limit 20\n```\n\n## Progressive search method\n\nFollow claude-mem's Index → Timeline → Transcript discipline — cheap passes\nfirst, expensive detail only for confirmed hits:\n\n1. **Index pass** — run 1–3 broad keyword searches (project names, file names,\n   error strings, feature names). Skim titles/summaries only.\n2. **Narrow pass** — re-search with the most specific terms found in step 1\n   (IDs, exact phrases) and a smaller `--limit`.\n3. **Answer** — synthesize from the observations returned. Quote timestamps\n   when the user asks \"when\".\n\nDo not dump raw search output at the user; extract the relevant observations\nand answer in plain language.\n\n## Diagnostics\n\nIf searches return nothing or error:\n\n```bash\nnode \"${CLAUDE_PLUGIN_ROOT}/scripts/cmem-hook.mjs\" status\n```\n\nReport the status output plainly: a MISSING api key means the plugin needs the\nuser's cmem.ai key added to its configuration; a 404 on `/api/hooks/context`\njust means the newer Pro endpoint isn't deployed — search still works via\n`/api/mcp`.\n\n## Notes\n\n- Some filters (date ranges, type) may be silently ignored by the cloud API\n  until MCP parity ships — prefer keyword narrowing over filter flags.\n- Never write secrets into search queries; queries are sent to cmem.ai.","createdAt":"2026-09-25T10:51:51.658Z","updatedAt":"2026-09-25T10:51:51.658Z"},{"id":"cmugucir6001nqu0644ckdppw","slug":"thedotmack-claude-mem-mem-setup","name":"mem-setup","description":"This skill should be used when the user asks to \"set up claude-mem\", \"pair claude-mem\", \"connect cmem\", \"add my cmem key\", \"set up cloud sync in Cowork\", or provides cmem.ai Connect values (sync token, user id, SyncHub URL) for this plugin. Configures the claude-mem-cowork plugin credentials.","authorId":"gh:thedotmack","authorName":"thedotmack","version":"0.1.0","category":"Prompt","securityLevel":"Community","downloadsCount":0,"githubStars":94658,"pricePerCall":0,"manifest":{"name":"mem-setup","tools":[],"category":"Prompt","entrypoint":{"type":"prompt"},"description":"This skill should be used when the user asks to \"set up claude-mem\", \"pair claude-mem\", \"connect cmem\", \"add my cmem key\", \"set up cloud sync in Cowork\", or provides cmem.ai Connect values (sync token, user id, SyncHub URL) for this plugin. Configures the claude-mem-cowork plugin credentials.","permissions":[],"systemPrompt":"# Claude-Mem Setup (Cowork pairing)\n\nConfigure this plugin with the user's own cmem.ai credentials so hooks can\ncapture and inject memory. Anyone can pair — credentials are per-user\nconfiguration, never hardcoded in plugin logic.\n\n## What to collect\n\nFrom **cmem.ai → Connect**, the user has three values:\n\n1. **sync token** (starts with `cm_`) — used as the bearer API key\n2. **user id** (UUID)\n3. **SyncHub URL** (a workers.dev or cmem.ai URL)\n\nIf the user pastes the whole Connect blurb, extract the three values from it.\nIf any are missing, ask for the sync token at minimum — the other two are\noptional.\n\n## Secret handling — non-negotiable\n\n- Never echo the token back in conversation, put it in a shell argv, or log it.\n- Move it only via file writes (Write/Edit tool) and file reads.\n\n## Steps\n\n1. Locate the installed plugin root (this skill's own plugin). Update its\n   `config.json`: set `apiKey` to the sync token, `userId`, and `syncHubUrl`.\n   Leave other settings unless the user asks (`inject` toggles). Project naming\n   is automatic (`cmem_work_*`) and is not configurable.\n2. Cowork containers are ephemeral: edits to the installed copy last only for\n   this session. To make pairing permanent, repackage — zip the plugin\n   directory as `<plugin-name>.plugin` and send it to the user to re-install\n   (the cowork-plugin skill's packaging flow). Tell the user this is why.\n3. If this machine also has a local claude-mem install (a `~/.claude-mem/`\n   directory exists), optionally write the same values to\n   `~/.claude-mem/settings.json` with mode 0600 (`CLAUDE_MEM_CLOUD_SYNC_TOKEN`,\n   `CLAUDE_MEM_CLOUD_SYNC_USER_ID`, `CLAUDE_MEM_CLOUD_SYNC_HUB_URL` keys — the\n   same keys the local claude-mem cloud-sync pairing writes) — the hook script\n   and the local worker both read it.\n4. Verify without exposing the secret:\n\n   ```bash\n   node \"${CLAUDE_PLUGIN_ROOT}/scripts/cmem-hook.mjs\" status\n   ```\n\n   Report the masked output. A `MISSING` key means the write didn't land;\n   a 404 on `/api/hooks/context` is expected until the Pro endpoints deploy\n   (search/injection still work via `/api/mcp`).\n\n## Alternate source\n\nEnv vars override everything and need no file edits: `CMEM_API_KEY`,\n`CMEM_USER_ID`, `CMEM_SYNC_HUB_URL`, `CMEM_API_BASE`.","schemaVersion":1},"repoUrl":"https://github.com/thedotmack/claude-mem/tree/main/cowork/skills/mem-setup","tags":["ai","ai-agents","ai-memory","anthropic","artificial-intelligence","chromadb","claude","claude-agent-sdk","claude-agents","claude-code","claude-code-plugin","claude-skills"],"stats":{"installVelocity7d":0,"retentionRate":0,"executions":0,"rating":null},"origin":"github","source":{"repo":"claude-mem","audit":{"files":["openclaw/package.json","package.json"],"binaries":[],"findings":[{"kind":"dependency","rule":"DP-04","message":"No npm lock file: installs resolve whatever the ranges allow today.","surface":"package.json","evidence":"@better-auth/api-key@^1.6.16, better-auth@^1.6.16","severity":"medium"}],"packages":2,"auditedAt":"2026-09-25T10:51:51.575Z","lockfiles":[]},"forks":8366,"owner":"thedotmack","stars":94658,"topics":["ai","ai-agents","ai-memory","anthropic","artificial-intelligence","chromadb","claude","claude-agent-sdk","claude-agents","claude-code","claude-code-plugin","claude-skills","embeddings","long-term-memory","mem0","memory-engine","openmemory","rag","sqlite","supermemory"],"license":"Apache-2.0","fullName":"thedotmack/claude-mem","homepage":"https://claude-mem.ai","language":"TypeScript","pushedAt":"2026-09-25T01:11:49Z","avatarUrl":"https://avatars.githubusercontent.com/u/683968?v=4","crawledAt":"2026-09-25T10:51:42.785Z","openIssues":296,"manifestFile":"SKILL.md","manifestPath":"cowork/skills/mem-setup/SKILL.md","defaultBranch":"main"},"readme":"# Claude-Mem Setup (Cowork pairing)\n\nConfigure this plugin with the user's own cmem.ai credentials so hooks can\ncapture and inject memory. Anyone can pair — credentials are per-user\nconfiguration, never hardcoded in plugin logic.\n\n## What to collect\n\nFrom **cmem.ai → Connect**, the user has three values:\n\n1. **sync token** (starts with `cm_`) — used as the bearer API key\n2. **user id** (UUID)\n3. **SyncHub URL** (a workers.dev or cmem.ai URL)\n\nIf the user pastes the whole Connect blurb, extract the three values from it.\nIf any are missing, ask for the sync token at minimum — the other two are\noptional.\n\n## Secret handling — non-negotiable\n\n- Never echo the token back in conversation, put it in a shell argv, or log it.\n- Move it only via file writes (Write/Edit tool) and file reads.\n\n## Steps\n\n1. Locate the installed plugin root (this skill's own plugin). Update its\n   `config.json`: set `apiKey` to the sync token, `userId`, and `syncHubUrl`.\n   Leave other settings unless the user asks (`inject` toggles). Project naming\n   is automatic (`cmem_work_*`) and is not configurable.\n2. Cowork containers are ephemeral: edits to the installed copy last only for\n   this session. To make pairing permanent, repackage — zip the plugin\n   directory as `<plugin-name>.plugin` and send it to the user to re-install\n   (the cowork-plugin skill's packaging flow). Tell the user this is why.\n3. If this machine also has a local claude-mem install (a `~/.claude-mem/`\n   directory exists), optionally write the same values to\n   `~/.claude-mem/settings.json` with mode 0600 (`CLAUDE_MEM_CLOUD_SYNC_TOKEN`,\n   `CLAUDE_MEM_CLOUD_SYNC_USER_ID`, `CLAUDE_MEM_CLOUD_SYNC_HUB_URL` keys — the\n   same keys the local claude-mem cloud-sync pairing writes) — the hook script\n   and the local worker both read it.\n4. Verify without exposing the secret:\n\n   ```bash\n   node \"${CLAUDE_PLUGIN_ROOT}/scripts/cmem-hook.mjs\" status\n   ```\n\n   Report the masked output. A `MISSING` key means the write didn't land;\n   a 404 on `/api/hooks/context` is expected until the Pro endpoints deploy\n   (search/injection still work via `/api/mcp`).\n\n## Alternate source\n\nEnv vars override everything and need no file edits: `CMEM_API_KEY`,\n`CMEM_USER_ID`, `CMEM_SYNC_HUB_URL`, `CMEM_API_BASE`.","createdAt":"2026-09-25T10:51:51.667Z","updatedAt":"2026-09-25T10:51:51.667Z"},{"id":"cmugucirf001qqu06y6m5zfvo","slug":"thedotmack-claude-mem-do","name":"do","description":"../../../plugin/skills/do/SKILL.md","authorId":"gh:thedotmack","authorName":"thedotmack","version":"0.1.0","category":"Prompt","securityLevel":"Community","downloadsCount":0,"githubStars":94658,"pricePerCall":0,"manifest":{"name":"do","tools":[],"category":"Prompt","entrypoint":{"type":"prompt"},"description":"../../../plugin/skills/do/SKILL.md","permissions":[],"systemPrompt":"../../../plugin/skills/do/SKILL.md","schemaVersion":1},"repoUrl":"https://github.com/thedotmack/claude-mem/tree/main/openclaw/skills/do","tags":["ai","ai-agents","ai-memory","anthropic","artificial-intelligence","chromadb","claude","claude-agent-sdk","claude-agents","claude-code","claude-code-plugin","claude-skills"],"stats":{"installVelocity7d":0,"retentionRate":0,"executions":0,"rating":null},"origin":"github","source":{"repo":"claude-mem","audit":{"files":["openclaw/package.json","package.json"],"binaries":[],"findings":[{"kind":"dependency","rule":"DP-04","message":"No npm lock file: installs resolve whatever the ranges allow today.","surface":"package.json","evidence":"@better-auth/api-key@^1.6.16, better-auth@^1.6.16","severity":"medium"}],"packages":2,"auditedAt":"2026-09-25T10:51:51.575Z","lockfiles":[]},"forks":8366,"owner":"thedotmack","stars":94658,"topics":["ai","ai-agents","ai-memory","anthropic","artificial-intelligence","chromadb","claude","claude-agent-sdk","claude-agents","claude-code","claude-code-plugin","claude-skills","embeddings","long-term-memory","mem0","memory-engine","openmemory","rag","sqlite","supermemory"],"license":"Apache-2.0","fullName":"thedotmack/claude-mem","homepage":"https://claude-mem.ai","language":"TypeScript","pushedAt":"2026-09-25T01:11:49Z","avatarUrl":"https://avatars.githubusercontent.com/u/683968?v=4","crawledAt":"2026-09-25T10:51:42.785Z","openIssues":296,"manifestFile":"SKILL.md","manifestPath":"openclaw/skills/do/SKILL.md","defaultBranch":"main"},"readme":"../../../plugin/skills/do/SKILL.md","createdAt":"2026-09-25T10:51:51.675Z","updatedAt":"2026-09-25T10:51:51.675Z"},{"id":"cmugucirm001tqu06vuvqm7g9","slug":"thedotmack-claude-mem-make-plan","name":"make-plan","description":"../../../plugin/skills/make-plan/SKILL.md","authorId":"gh:thedotmack","authorName":"thedotmack","version":"0.1.0","category":"Prompt","securityLevel":"Community","downloadsCount":0,"githubStars":94658,"pricePerCall":0,"manifest":{"name":"make-plan","tools":[],"category":"Prompt","entrypoint":{"type":"prompt"},"description":"../../../plugin/skills/make-plan/SKILL.md","permissions":[],"systemPrompt":"../../../plugin/skills/make-plan/SKILL.md","schemaVersion":1},"repoUrl":"https://github.com/thedotmack/claude-mem/tree/main/openclaw/skills/make-plan","tags":["ai","ai-agents","ai-memory","anthropic","artificial-intelligence","chromadb","claude","claude-agent-sdk","claude-agents","claude-code","claude-code-plugin","claude-skills"],"stats":{"installVelocity7d":0,"retentionRate":0,"executions":0,"rating":null},"origin":"github","source":{"repo":"claude-mem","audit":{"files":["openclaw/package.json","package.json"],"binaries":[],"findings":[{"kind":"dependency","rule":"DP-04","message":"No npm lock file: installs resolve whatever the ranges allow today.","surface":"package.json","evidence":"@better-auth/api-key@^1.6.16, better-auth@^1.6.16","severity":"medium"}],"packages":2,"auditedAt":"2026-09-25T10:51:51.575Z","lockfiles":[]},"forks":8366,"owner":"thedotmack","stars":94658,"topics":["ai","ai-agents","ai-memory","anthropic","artificial-intelligence","chromadb","claude","claude-agent-sdk","claude-agents","claude-code","claude-code-plugin","claude-skills","embeddings","long-term-memory","mem0","memory-engine","openmemory","rag","sqlite","supermemory"],"license":"Apache-2.0","fullName":"thedotmack/claude-mem","homepage":"https://claude-mem.ai","language":"TypeScript","pushedAt":"2026-09-25T01:11:49Z","avatarUrl":"https://avatars.githubusercontent.com/u/683968?v=4","crawledAt":"2026-09-25T10:51:42.785Z","openIssues":296,"manifestFile":"SKILL.md","manifestPath":"openclaw/skills/make-plan/SKILL.md","defaultBranch":"main"},"readme":"../../../plugin/skills/make-plan/SKILL.md","createdAt":"2026-09-25T10:51:51.682Z","updatedAt":"2026-09-25T10:51:51.682Z"},{"id":"cmugucirt001wqu063jhe6ygd","slug":"thedotmack-claude-mem-babysit","name":"babysit","description":"Watch a pull request or review cycle until it is ready to merge. Use when asked to babysit, monitor, or keep checking PR comments, reviews, and CI until all actionable issues are resolved.","authorId":"gh:thedotmack","authorName":"thedotmack","version":"0.1.0","category":"Prompt","securityLevel":"Community","downloadsCount":0,"githubStars":94658,"pricePerCall":0,"manifest":{"name":"babysit","tools":[],"category":"Prompt","entrypoint":{"type":"prompt"},"description":"Watch a pull request or review cycle until it is ready to merge. Use when asked to babysit, monitor, or keep checking PR comments, reviews, and CI until all actionable issues are resolved.","permissions":[],"systemPrompt":"# Babysit PR\n\nStay with the PR until it is actually clean. Do not stop after one check pass if comments or review threads are still unresolved.\n\n## Workflow\n\n1. Identify the PR number, branch, and base branch.\n2. Confirm the PR is not draft and inspect mergeability, checks, review decision, comments, and review threads.\n3. Watch pending checks until they finish. Poll at a practical interval, usually 30-60 seconds unless the user asks for a different cadence.\n4. Read new comments and unresolved review threads. Treat bot summaries as useful, but verify actionable findings against the code.\n5. Fix real issues in focused commits, run relevant tests/builds, push, and return to step 2.\n6. Resolve stale review threads only after verifying the code or generated artifact now addresses the comment.\n7. Stop only when checks are passing or intentionally skipped, review decision is acceptable, no actionable comments remain, and no unresolved review threads remain.\n\n## GitHub CLI Checks\n\nUse `gh pr view` for the coarse status:\n\n```bash\ngh pr view <number> --json \\\n  number,state,isDraft,mergeable,mergeStateStatus,reviewDecision,headRefOid,statusCheckRollup,url\n```\n\nResolve the repository owner/name before using GraphQL:\n\n```bash\nrepo_json=$(gh repo view --json owner,name)\nowner=$(jq -r '.owner.login // .owner.name' <<<\"$repo_json\")\nrepo=$(jq -r '.name' <<<\"$repo_json\")\n```\n\nUse GraphQL for unresolved review threads. Include `pageInfo`; omit `cursor` on the first page, then pass the previous `endCursor` with `-f cursor=\"$cursor\"` while `hasNextPage` is `true`.\n\n```bash\ngh api graphql \\\n  -f query='query($owner:String!,$repo:String!,$number:Int!,$cursor:String){repository(owner:$owner,name:$repo){pullRequest(number:$number){reviewThreads(first:100,after:$cursor){pageInfo{hasNextPage endCursor}nodes{id,isResolved,isOutdated,path,line,comments(last:1){nodes{author{login},body,createdAt,url}}}}}}}' \\\n  -f owner=\"$owner\" -f repo=\"$repo\" -F number=<number>\n```\n\nUse this loop when a PR may have many review threads:\n\n```bash\nthread_query='query($owner:String!,$repo:String!,$number:Int!,$cursor:String){repository(owner:$owner,name:$repo){pullRequest(number:$number){reviewThreads(first:100,after:$cursor){pageInfo{hasNextPage endCursor}nodes{id,isResolved,isOutdated,path,line,comments(last:1){nodes{author{login},body,createdAt,url}}}}}}}'\ncursor_args=()\n\nwhile :; do\n  page=$(gh api graphql -f query=\"$thread_query\" -f owner=\"$owner\" -f repo=\"$repo\" -F number=<number> \"${cursor_args[@]}\")\n  printf '%s\\n' \"$page\" | jq -r '.data.repository.pullRequest.reviewThreads.nodes[]\n    | select(.isResolved==false)\n    | [.id,.path,(.line//\"\"),(.isOutdated|tostring),(.comments.nodes[-1].author.login//\"\"),(.comments.nodes[-1].body|gsub(\"\\n\";\" \")|.[0:240])]\n    | @tsv'\n\n  jq -e '.data.repository.pullRequest.reviewThreads.pageInfo.hasNextPage' >/dev/null <<<\"$page\" || break\n  cursor=$(jq -r '.data.repository.pullRequest.reviewThreads.pageInfo.endCursor' <<<\"$page\")\n  cursor_args=(-f cursor=\"$cursor\")\ndone\n```\n\nFilter unresolved threads with `jq`:\n\n```bash\njq -r '.data.repository.pullRequest.reviewThreads.nodes[]\n  | select(.isResolved==false)\n  | [.id,.path,(.line//\"\"),(.isOutdated|tostring),(.comments.nodes[-1].author.login//\"\"),(.comments.nodes[-1].body|gsub(\"\\n\";\" \")|.[0:240])]\n  | @tsv'\n```\n\nResolve a stale thread only when the fix is verified:\n\n```bash\ngh api graphql \\\n  -f query='mutation($threadId:ID!){resolveReviewThread(input:{threadId:$threadId}){thread{id,isResolved}}}' \\\n  -f threadId=<thread-id>\n```\n\n## Operating Rules\n\n- Keep the watcher running while long checks are pending.\n- If a generated file is part of the distribution, verify the source and generated artifact agree before resolving comments.\n- If a bot reports an issue against stale code, confirm whether the thread is outdated or addressed in the latest head.\n- Before final reporting, do one fresh sweep of PR status, unresolved threads, recent comments, and local `git status`.\n- Report concrete evidence: latest commit SHA, check names and results, unresolved thread count, tests run, and any dirty local files left untouched.","schemaVersion":1},"repoUrl":"https://github.com/thedotmack/claude-mem/tree/main/plugin/skills/babysit","tags":["ai","ai-agents","ai-memory","anthropic","artificial-intelligence","chromadb","claude","claude-agent-sdk","claude-agents","claude-code","claude-code-plugin","claude-skills"],"stats":{"installVelocity7d":0,"retentionRate":0,"executions":0,"rating":null},"origin":"github","source":{"repo":"claude-mem","audit":{"files":["openclaw/package.json","package.json"],"binaries":[],"findings":[{"kind":"dependency","rule":"DP-04","message":"No npm lock file: installs resolve whatever the ranges allow today.","surface":"package.json","evidence":"@better-auth/api-key@^1.6.16, better-auth@^1.6.16","severity":"medium"}],"packages":2,"auditedAt":"2026-09-25T10:51:51.575Z","lockfiles":[]},"forks":8366,"owner":"thedotmack","stars":94658,"topics":["ai","ai-agents","ai-memory","anthropic","artificial-intelligence","chromadb","claude","claude-agent-sdk","claude-agents","claude-code","claude-code-plugin","claude-skills","embeddings","long-term-memory","mem0","memory-engine","openmemory","rag","sqlite","supermemory"],"license":"Apache-2.0","fullName":"thedotmack/claude-mem","homepage":"https://claude-mem.ai","language":"TypeScript","pushedAt":"2026-09-25T01:11:49Z","avatarUrl":"https://avatars.githubusercontent.com/u/683968?v=4","crawledAt":"2026-09-25T10:51:42.785Z","openIssues":296,"manifestFile":"SKILL.md","manifestPath":"plugin/skills/babysit/SKILL.md","defaultBranch":"main"},"readme":"# Babysit PR\n\nStay with the PR until it is actually clean. Do not stop after one check pass if comments or review threads are still unresolved.\n\n## Workflow\n\n1. Identify the PR number, branch, and base branch.\n2. Confirm the PR is not draft and inspect mergeability, checks, review decision, comments, and review threads.\n3. Watch pending checks until they finish. Poll at a practical interval, usually 30-60 seconds unless the user asks for a different cadence.\n4. Read new comments and unresolved review threads. Treat bot summaries as useful, but verify actionable findings against the code.\n5. Fix real issues in focused commits, run relevant tests/builds, push, and return to step 2.\n6. Resolve stale review threads only after verifying the code or generated artifact now addresses the comment.\n7. Stop only when checks are passing or intentionally skipped, review decision is acceptable, no actionable comments remain, and no unresolved review threads remain.\n\n## GitHub CLI Checks\n\nUse `gh pr view` for the coarse status:\n\n```bash\ngh pr view <number> --json \\\n  number,state,isDraft,mergeable,mergeStateStatus,reviewDecision,headRefOid,statusCheckRollup,url\n```\n\nResolve the repository owner/name before using GraphQL:\n\n```bash\nrepo_json=$(gh repo view --json owner,name)\nowner=$(jq -r '.owner.login // .owner.name' <<<\"$repo_json\")\nrepo=$(jq -r '.name' <<<\"$repo_json\")\n```\n\nUse GraphQL for unresolved review threads. Include `pageInfo`; omit `cursor` on the first page, then pass the previous `endCursor` with `-f cursor=\"$cursor\"` while `hasNextPage` is `true`.\n\n```bash\ngh api graphql \\\n  -f query='query($owner:String!,$repo:String!,$number:Int!,$cursor:String){repository(owner:$owner,name:$repo){pullRequest(number:$number){reviewThreads(first:100,after:$cursor){pageInfo{hasNextPage endCursor}nodes{id,isResolved,isOutdated,path,line,comments(last:1){nodes{author{login},body,createdAt,url}}}}}}}' \\\n  -f owner=\"$owner\" -f repo=\"$repo\" -F number=<number>\n```\n\nUse this loop when a PR may have many review threads:\n\n```bash\nthread_query='query($owner:String!,$repo:String!,$number:Int!,$cursor:String){repository(owner:$owner,name:$repo){pullRequest(number:$number){reviewThreads(first:100,after:$cursor){pageInfo{hasNextPage endCursor}nodes{id,isResolved,isOutdated,path,line,comments(last:1){nodes{author{login},body,createdAt,url}}}}}}}'\ncursor_args=()\n\nwhile :; do\n  page=$(gh api graphql -f query=\"$thread_query\" -f owner=\"$owner\" -f repo=\"$repo\" -F number=<number> \"${cursor_args[@]}\")\n  printf '%s\\n' \"$page\" | jq -r '.data.repository.pullRequest.reviewThreads.nodes[]\n    | select(.isResolved==false)\n    | [.id,.path,(.line//\"\"),(.isOutdated|tostring),(.comments.nodes[-1].author.login//\"\"),(.comments.nodes[-1].body|gsub(\"\\n\";\" \")|.[0:240])]\n    | @tsv'\n\n  jq -e '.data.repository.pullRequest.reviewThreads.pageInfo.hasNextPage' >/dev/null <<<\"$page\" || break\n  cursor=$(jq -r '.data.repository.pullRequest.reviewThreads.pageInfo.endCursor' <<<\"$page\")\n  cursor_args=(-f cursor=\"$cursor\")\ndone\n```\n\nFilter unresolved threads with `jq`:\n\n```bash\njq -r '.data.repository.pullRequest.reviewThreads.nodes[]\n  | select(.isResolved==false)\n  | [.id,.path,(.line//\"\"),(.isOutdated|tostring),(.comments.nodes[-1].author.login//\"\"),(.comments.nodes[-1].body|gsub(\"\\n\";\" \")|.[0:240])]\n  | @tsv'\n```\n\nResolve a stale thread only when the fix is verified:\n\n```bash\ngh api graphql \\\n  -f query='mutation($threadId:ID!){resolveReviewThread(input:{threadId:$threadId}){thread{id,isResolved}}}' \\\n  -f threadId=<thread-id>\n```\n\n## Operating Rules\n\n- Keep the watcher running while long checks are pending.\n- If a generated file is part of the distribution, verify the source and generated artifact agree before resolving comments.\n- If a bot reports an issue against stale code, confirm whether the thread is outdated or addressed in the latest head.\n- Before final reporting, do one fresh sweep of PR status, unresolved threads, recent comments, and local `git status`.\n- Report concrete evi","createdAt":"2026-09-25T10:51:51.689Z","updatedAt":"2026-09-25T10:51:51.689Z"},{"id":"cmugucis3001zqu06ovfcywrb","slug":"thedotmack-claude-mem-ccs-align","name":"ccs-align","description":"Run the CCS Align seat's hourly breathing cycle — prove the local claude-mem worker is healthy, pull needle observations through search → timeline → get_observations, land them in a seat-owned middle cache via atomic grab → append → filter exclude-marks → replace, manage exclude marks, and walk house → project → seat rules to detect conflicts (SHADOW_HOUSE, DENY_ALLOW, DRIFT, CLOCK_HEADER) with an append-only rules-report.md. Use when asked to run CCS Align, breathe the alignment seat, refresh the middle cache, exclude or restore an observation, walk rules, check rules conflicts, or check the Worker Watch board.","authorId":"gh:thedotmack","authorName":"thedotmack","version":"0.1.0","category":"Prompt","securityLevel":"Community","downloadsCount":0,"githubStars":94658,"pricePerCall":0,"manifest":{"name":"ccs-align","tools":[],"category":"Prompt","entrypoint":{"type":"prompt"},"description":"Run the CCS Align seat's hourly breathing cycle — prove the local claude-mem worker is healthy, pull needle observations through search → timeline → get_observations, land them in a seat-owned middle cache via atomic grab → append → filter exclude-marks → replace, manage exclude marks, and walk house → project → seat rules to detect conflicts (SHADOW_HOUSE, DENY_ALLOW, DRIFT, CLOCK_HEADER) with an append-only rules-report.md. Use when asked to run CCS Align, breathe the alignment seat, refresh the middle cache, exclude or restore an observation, walk rules, check rules conflicts, or check the Worker Watch board.","permissions":[],"systemPrompt":"# CCS Align — Worker Watch seat (Phases 0–2 shipped; Phase 3 = verify / sign-off)\n\nCCS Align is a **standing seat**, not a bird's-eye planner. Its one job, once an hour: talk to the **local** claude-mem worker, pull recent needle observations through the existing three-layer disclosure ladder, and land them in a **seat-owned middle cache** using grab → append → replace.\n\nThis skill implements the Phase 0 breathing slice, Phase 1 exclude marks, and Phase 2 rules alignment from the plan of record, `plans/2026-09-09-ccs-align.md`. Phases 0–2 are **shipped and merged** ([#3934](https://github.com/thedotmack/claude-mem/pull/3934), [#3935](https://github.com/thedotmack/claude-mem/pull/3935), [#3936](https://github.com/thedotmack/claude-mem/pull/3936)); Phase 3 is **verify / sign-off** (this loop) — no new product surface. It is **not** a context compiler, **not** Focus/mouth, and **not** Grok Memory Phase 2. When you speak to the human, address them as **Alex**.\n\n## What is implemented (Phases 0–2 shipped)\n\n- **Phase 0 — Breathing slice** ([#3934](https://github.com/thedotmack/claude-mem/pull/3934)): health check → `search` → `timeline` → `get_observations` → append records to `~/.claude-mem/ccs-align/<viewerId>/middle.jsonl` (atomic, deduped).\n- **Phase 1 — Exclude marks** ([#3935](https://github.com/thedotmack/claude-mem/pull/3935)): mark observations (and linked tool-use ids) as excluded from the compiled middle cache. \"Purge\" means the compiled `middle.jsonl` no longer contains the record — the diary / SQLite stay authoritative. Unmarking + rebuild restores the observation. `DELETE /api/observation/:id` is **forbidden**.\n- **Phase 2 — Rules alignment** ([#3936](https://github.com/thedotmack/claude-mem/pull/3936)): walk house → project → seat layers, detect conflicts (`SHADOW_HOUSE`, `DENY_ALLOW`, `DRIFT`, `CLOCK_HEADER`), emit an append-only `rules-report.md`. Optionally dry-run/apply `SHADOW_HOUSE` leaf patches when `CLAUDE_MEM_CCS_ALIGN_PATCH_SHADOWS=true`. Runs every 6th hour of the hourly Worker Watch cycle (D4). This is a **checklist**, not a parser — no `.cas` compiler.\n- **Phase 3 — Verify / sign-off** (this loop): re-run the regression tests and anti-pattern greps, prove the boundary (a scripted cycle dedupes, an exclude drops from the middle cache but not the diary, the rules report is produced or a MISS is recorded), and keep the skill + plan honest about what this seat is not. Phase 3 adds **no** new runtime behavior.\n- **Does not:** delete history, write `profile.md`, write LFG/Orifice `[awareness]` logs (that seam belongs to [#3931](https://github.com/thedotmack/claude-mem/pull/3931)), add a sixth `processAgentResponse` consumer, restart the worker, run a per-turn drip update, enforce Focus/mouth/standing rules, or copy house text into seats.\n\n## What this is NOT (honest boundary)\n\nCCS Align is deliberately small. It does **not** ship, and this loop does **not** add, any of the following — these are future work or a different agent, called out so no one reads more into the seat than is there:\n\n- **No context compiler.** There is no `.cas` parser, no `compileAwareness()`, no JIT compile, no computed-styles UI. The CCS Notion page types (`Bucket`, `canRead`) are teaching copy quoted as comments — never a runtime parser.\n- **No brainbeat product.** The \"regenerate awareness once per finished unit of work\" door is not built. Align *pulls* on an hourly cadence; it is not a per-turn drip and it is not a brainbeat.\n- **No attention trough / curse-salience.** No salience decay, no trough scoring. Explicitly out of every phase.\n- **No Focus / mouth enforcement.** Standing rules (always / never / danger) are never enforced or decayed here. Align may *list* a conflict; egress filtering belongs to a different agent.\n- **No second writer on LFG/Orifice `[awareness]` logs.** [#3931](https://github.com/thedotmack/claude-mem/pull/3931) owns `agents/**/memory/log/YYYY-MM.md`. Align writes only its seat-owned middle cache.\n- **No history rewrite.** Exclude marks filter the *compiled* cache; the diary / SQLite stay authoritative and rebuildable. No `DELETE /api/observation`, no A-MEM row rewrite.\n\n### Ops MISS — worker plugin version lag\n\nAs of this sign-off, the repo (package, plugin, marketplace) is at **13.24.5** (this Phase 3 PATCH), but the **running worker plugin on the house box may still be 13.24.1**. That is an **operational MISS to record, not fix here**: this seat does not restart or upgrade the worker (a hard forbid). If the live box still shows 13.24.1, note it when rolling status up to the Prioritizer so the worker gets restarted onto the current plugin out-of-band. If the running worker already matches the package version, this MISS is closed.\n\n## Prerequisites\n\nThe claude-mem worker must be running locally. This seat talks to the **local worker** (per-UID port ~`37700`), never the cloud CMEM MCP — cloud `observation:<base64>` ids are a different API and must not be mixed in.\n\n**Resolve the worker port** once and reuse `$WORKER_PORT` in every curl below. This snippet is copied from the `timeline-report` skill and honors `CLAUDE_MEM_WORKER_PORT` → `~/.claude-mem/settings.json` → the per-UID default `37700 + (uid % 100)`:\n\n```bash\nWORKER_PORT=\"${CLAUDE_MEM_WORKER_PORT:-$(node -e \"const fs=require('fs'),p=require('path'),os=require('os');const uid=(typeof process.getuid==='function'?process.getuid():77);const fallback=String(37700+(uid%100));try{const s=JSON.parse(fs.readFileSync(p.join(os.homedir(),'.claude-mem','settings.json'),'utf-8'));process.stdout.write(String(s.CLAUDE_MEM_WORKER_PORT||fallback));}catch{process.stdout.write(fallback);}\" 2>/dev/null)}\"\n```\n\nDo **not** hardcode port `37777` — ports are per-UID.\n\n## Settings\n\nDefaults live in `SettingsDefaultsManager.ts`; override in `~/.claude-mem/settings.json`:\n\n| Key | Default | Meaning |\n|---|---|---|\n| `CLAUDE_MEM_CCS_ALIGN_ENABLED` | `true` | Master switch for the seat. |\n| `CLAUDE_MEM_CCS_ALIGN_VIEWER_IDS` | `ccs-align` | Comma-separated viewer ids the seat maintains a cache for. |\n| `CLAUDE_MEM_CCS_ALIGN_TRIGGER_TYPES` | `decision,bugfix,security_alert,sensitive` | Needle observation types to pull (copied from #3931's list, D6). |\n| `CLAUDE_MEM_CCS_ALIGN_PATCH_SHADOWS` | `false` | Phase 2 rules-shadow patch gate. When `true`, the rules walker removes `SHADOW_HOUSE` duplicate lines from leaf files (atomic temp+rename). Default **off** — report-only. |\n\nPilot viewer id is `ccs-align`. The seat **may read** LFG observations (agent id `521e962d-2ec3-4488-bfbc-54d5209ce118`) as a project filter, but **must not write** LFG/Orifice monthly logs or any `profile.md`.\n\n## Hourly cycle (Appendix A runbook)\n\nRun this every hour on a weekday house board. One purpose. No watercooler. No \"while I was here I also…\".\n\n```\nevery hour (weekday house board):\n  1. Resolve WORKER_PORT (snippet above)\n  2. GET /api/health || GET /health   → abort with a one-line miss if down\n  3. search(obs_type=needles, limit=20) since cursor.lastObservationId\n  4. timeline(anchor=newest)          → collect neighbor ids\n  5. get_observations(ids=…)\n  5b. (Phase 1, mark-time only) If excluding: get_tool_uses for tool ids → record on mark\n  6. grab middle.jsonl → append new → filter exclude-marks → replace atomic\n  7. if original-cache path set and not writable: append-only to middle.jsonl (already done)\n  8. update cursor.json\n  9. every 6th hour: rules walk → append rules-report.md   (Phase 2 — see below)\n 10. Speak to Alex only on red (worker down, write refused, unexpected profile.md touch)\n```\n\n### Step 1 — Resolve the port\n\nUse the `$WORKER_PORT` snippet above.\n\n### Step 2 — Prove worker health (prefer `/api/health`)\n\nPrefer `GET /api/health`; also accept the viewer alias `GET /health`. The public worker docs still show `GET /health` and a `port` field — both are stale. Health does **not** return a port; use `GET /api/stats` (`worker.port`) if you need it.\n\n```bash\ncurl -sS \"http://127.0.0.1:${WORKER_PORT}/api/health\" || curl -sS \"http://127.0.0.1:${WORKER_PORT}/health\"\n# expect a JSON body with \"status\":\"ok\". If the worker is down, abort with a\n# one-line miss — do NOT start it, do NOT retry aggressively.\n```\n\nIf health cannot be proven (e.g. no live worker in a cloud VM), record a **MISS** and stop. Do not fabricate a cache cycle.\n\n### Step 3 — Pull through the three-layer ladder (in order)\n\nThe disclosure order is **`search` → `timeline` → `get_observations`**. Never jump straight to `get_observations`, and do **not** call `get_tool_uses` in Phase 0 (that is Phase 1).\n\n1. **`search`** with the needle `obs_type` list (`CLAUDE_MEM_CCS_ALIGN_TRIGGER_TYPES`), `limit` ≤ 20, optionally scoped by `project`. Use the cursor's `lastObservationId` to avoid re-pulling the whole diary.\n\n   ```bash\n   curl -sS \"http://127.0.0.1:${WORKER_PORT}/api/search?query=*&type=decision&limit=20&format=json\"\n   ```\n\n2. **`timeline`** anchored on the newest hit. The worker's **code default depth is 10** (`SearchManager.ts`) — the MCP text that says \"3\" is stale, so omit the depths (worker applies 10) or pass `10` explicitly.\n\n   ```bash\n   curl -sS \"http://127.0.0.1:${WORKER_PORT}/api/timeline?anchor=<newestObservationId>\"\n   ```\n\n3. **`get_observations`** for the ids you will actually cache.\n\n   ```bash\n   curl -sS -X POST \"http://127.0.0.1:${WORKER_PORT}/api/observations/batch\" \\\n     -H 'content-type: application/json' \\\n     -d '{\"ids\":[12345,12346]}'\n   ```\n\nThe MCP twins are `search` → `timeline` → `get_observations`. Worker `get_observations` ids are **numbers**; do not pass cloud `observation:<base64>` ids into `/api/observations/batch`.\n\n### Step 4 — Grab → append → filter exclude-marks → replace (atomic middle cache)\n\nLand the observations with the seat helper `src/services/integrations/CcsAlignMiddleCache.ts`\n(`landObservationsInMiddleCache`). It copies the #3931 atomic primitive\n(`appendAwarenessLineAtomic` + `awarenessLineBody`) with exactly three changes:\nthe tag is `[ccs-align]`, the path root is `~/.claude-mem/ccs-align/<viewerId>/`,\nand the file is `middle.jsonl`.\n\nPhase 1 adds an exclude-marks filter inside the atomic pipeline:\n\n```\ngrab:    read middle.jsonl if it exists, else empty\nfilter:  load exclude-marks.json; drop any record whose id is marked\nappend:  for each new observation id not already present AND not marked, append one record\nreplace: write temp + rename (copy appendAwarenessLineAtomic; never appendFileSync)\nfallback: if an OPTIONAL original-cache path is set and not writable, skip grab/replace\n          on that path and append timeline items to middle.jsonl only\n```\n\nThere is **no compiled laminate file in-repo**, so the fallback resolves to\n\"append to the seat file\" — never invent a laminate.\n\nEach line of `middle.jsonl` is one record. The shape is **locked** for Phase 0 (do not add fields):\n\n```json\n{\n  \"v\": 1,\n  \"id\": 12345,\n  \"type\": \"decision\",\n  \"title\": \"…\",\n  \"created_at\": \"2026-09-09T00:00:00.000Z\",\n  \"project\": \"claude-mem\",\n  \"agent_id\": null,\n  \"source\": \"worker\",\n  \"line\": \"- 2026-09-09 [ccs-align] decision — …\"\n}\n```\n\n`line` is `formatCcsAlignLine` — the #3931 `formatAwarenessLine` with the tag\nswapped and the same 500-char truncation. Dedupe is by observation `id` **and**\nby body (the line from `[ccs-align]` onward, date excluded), so the same fact on\na new day is still skipped and the file does not grow on a repeat cycle.\n\nA minimal invocation (bun/node):\n\n```ts\nimport { landObservationsInMiddleCache } from '../../src/services/integrations/CcsAlignMiddleCache.js';\n\nlandObservationsInMiddleCache({\n  viewerId: 'ccs-align',\n  observations: rowsFromGetObservations, // [{ id, type, title, subtitle, facts, created_at, project, agent_id }]\n});\n```\n\nIt **never throws** into the caller — a broken write path is logged and swallowed.\n\n### Step 5 — Update the cursor\n\nWrite `~/.claude-mem/ccs-align/<viewerId>/cursor.json` so the next hour does not re-pull the whole diary:\n\n```json\n{ \"lastRunAt\": \"…\", \"lastObservationId\": 12345, \"healthPath\": \"/api/health\", \"workerPort\": 37700 }\n```\n\nUse `writeCursor` from the helper (atomic temp + rename).\n\n### Step 6 — Speak only on red\n\nRoll status **up** to the Prioritizer. Only speak to Alex on red: worker down, a write was refused, or an unexpected `profile.md` touch. Otherwise stay quiet.\n\n## Phase 1 — Exclude marks\n\n\"Purge\" means the compiled `middle.jsonl` no longer contains the observation or its tool I/O for that viewer. The diary stays. This is Secure Isolated Awareness + context-stripper — **not** delete.\n\n### Exclude-marks file\n\nEach viewer has `~/.claude-mem/ccs-align/<viewerId>/exclude-marks.json`:\n\n```json\n{\n  \"v\": 1,\n  \"marks\": [\n    {\n      \"observationId\": 12345,\n      \"toolUseIds\": [\"toolu_01abc\", 678],\n      \"reason\": \"sibling-wall|manual|stripper|secure-isolation\",\n      \"markedAt\": \"2026-09-09T00:00:00.000Z\",\n      \"markedBy\": \"ccs-align\"\n    }\n  ]\n}\n```\n\nMarks are managed by `addExcludeMark` / `removeExcludeMark` in `CcsAlignMiddleCache.ts`, or by manual JSON edit.\n\n### How marks get created (v1)\n\n1. **Manual JSON edit** — open `exclude-marks.json` and add a mark entry.\n2. **Skill flag** — `exclude <observationId> --reason …` (manual, sibling-wall, stripper, secure-isolation).\n3. No auto-promotion from chat text (poison surface — see Memory dig findings).\n\n### Purge tools (compiled only)\n\nWhen recording tool-use ids on a mark:\n\n1. After `get_observations`, if you need tool ids, call `get_tool_uses` / `POST /api/tool-uses/batch` (layer 4).\n2. Record those ids on the mark's `toolUseIds` array.\n3. **Never persist raw `tool_input` / `tool_response` into `middle.jsonl`** — layer 4 stays out of the laminate.\n4. **Do not** call `DELETE /api/observation/:id` — that tombstones the diary and breaks rebuild-from-history.\n\n> **Warning:** `get_tool_uses` is **layer 4** of the progressive disclosure ladder. It returns raw tool I/O and should only be called at mark-time to capture tool-use ids for an exclude mark. Never call it during the normal hourly cycle. Never persist its `tool_input` / `tool_response` payloads into any cache file.\n\n### Unmark + rebuild\n\nTo restore a previously excluded observation:\n\n1. Remove the mark from `exclude-marks.json` (`removeExcludeMark` or manual edit).\n2. Re-pull the diary through the three-layer ladder (`search` → `timeline` → `get_observations`).\n3. Call `rebuildMiddleCache` to clear and re-land the compiled file from the authoritative diary.\n\nThe observation reappears in `middle.jsonl` on the next cycle because the diary was never touched.\n\n### Viewer isolation\n\nEach viewer's middle cache is independent:\n\n- `~/.claude-mem/ccs-align/viewer-a/middle.jsonl`\n- `~/.claude-mem/ccs-align/viewer-b/middle.jsonl`\n\nObservations landed for viewer A never appear in viewer B's compiled file. Exclude marks for viewer A do not affect viewer B. This implements the Secure Isolated Awareness property: inject a unique eval token into viewer A's cache → run viewer B → assert A's token never appears in B's compiled file.\n\n### Programmatic usage\n\n```ts\nimport {\n  addExcludeMark,\n  removeExcludeMark,\n  rebuildMiddleCache,\n  ccsAlignExcludeMarksPath,\n  readExcludeMarks,\n} from '../../src/services/integrations/CcsAlignMiddleCache.js';\n\nconst marksPath = ccsAlignExcludeMarksPath(dataRoot, 'ccs-align');\n\n// Mark an observation as excluded (with optional tool-use ids)\naddExcludeMark(marksPath, 12345, ['toolu_01abc'], 'manual');\n\n// Unmark and rebuild\nremoveExcludeMark(marksPath, 12345);\nrebuildMiddleCache({\n  viewerId: 'ccs-align',\n  observations: allObservationsFromDiary,\n  dataRoot,\n});\n```\n\n## Hard forbids (every phase)\n\n- ❌ `DELETE /api/observation/:id` — tombstone ≠ exclude mark; breaks rebuild-from-history.\n- ❌ Writing LFG/Orifice `[awareness]` logs, or into any `agents/**/memory/log/` path.\n- ❌ Writing `profile.md`, user-memory, or project memory.\n- ❌ A top-of-prompt clock (timestamps belong on facts, not a cache header).\n- ❌ `POST /api/context/semantic` (per-turn drip the awareness design forbids).\n- ❌ A sixth `processAgentResponse` consumer — CCS Align **pulls**; #3931 owns that seam.\n- ❌ Restarting the worker, or `POST /api/settings`.\n- ❌ Addressing the human as \"Az\". Always **Alex**.\n- ❌ Claiming a context compiler / brainbeat shipped. Those are future work.\n- ❌ \"Fixing\" deny/allow by flipping rules — report only.\n- ❌ Copying house text into seats — that is the bug this phase detects.\n- ❌ Building a `.cas` compiler so the report looks smarter.\n- ❌ Patching standing / Focus / always / never / danger files.\n- ❌ Attention trough / curse-salience experiments (Phase-N backlog only).\n\n## Phase 2 — Rules alignment (house → project → seat)\n\nEvery 6th hour of the hourly Worker Watch cycle (D4), the seat walks house → project → seat layers to detect and report rules conflicts. This is a **checklist**, not a parser. No `.cas` compiler.\n\n### Cascade rules (from Notion CCS)\n\n- Write once at HOUSE; seats inherit\n- A leaf copy **shadows** the cascade (bug, not feature)\n- Deny beats allow\n- Siblings deny heavy buckets (`obs`, `note`, `person`) by default\n- Fail closed: if no rule exists, deny\n\n### Layer walk\n\n| Layer | Where to look (house box) | Bucket |\n|---|---|---|\n| House | `user-memory/` shared profile; Notion CCS `:root` | `profile`, `standing`, `owns` |\n| Project | `.cmem-projects/<project>/`, repo `CLAUDE.md` | project overrides |\n| Seat | `agents/<uuid>/profile.md`, `agents/<uuid>/memory/` | leaf — must not duplicate house |\n\nOn a box with no agent-data tree, the report records `MISS: house-box paths` and exits cleanly.\n\n### Conflict classes (v1)\n\n| Code | Pattern | Agency |\n|---|---|---|\n| `SHADOW_HOUSE` | Leaf file contains a line that also exists at house (or starts with `House rule`) | Dry-run remove-from-leaf; apply only if `CLAUDE_MEM_CCS_ALIGN_PATCH_SHADOWS=true` |\n| `DENY_ALLOW` | Same bucket allow at one layer, deny at another | Report only |\n| `DRIFT` | House text changed; leaf still has old wording (partial prefix match) | Report only |\n| `CLOCK_HEADER` | Top-of-prompt clock / \"current time is\" in a profile | Report only (house rule: no clock in the prefix) |\n\n### Rules report\n\nOutput: `~/.claude-mem/ccs-align/<viewerId>/rules-report.md` — dated, append-only sections. Each run appends a new section with a timestamp, a table of conflicts, any MISS entries, and a patches-applied count. Status rolls **up** to Prioritizer (never peer spam).\n\n### Limited patch (D8 default off)\n\nWhen `CLAUDE_MEM_CCS_ALIGN_PATCH_SHADOWS=true`:\n\n1. Only `SHADOW_HOUSE` conflicts are patched — never `DENY_ALLOW`, `DRIFT`, or `CLOCK_HEADER`.\n2. The would-be diff is written into the report **before** any patch is applied.\n3. The leaf file is copied, duplicate lines are stripped, and the file is replaced atomically (temp + rename, same primitive as `CcsAlignMiddleCache`).\n4. **Never patches `standing` / Focus / `always.md` / `never.md` / `danger.md` / `profile.md`.**\n5. House files are never modified.\n\n### Programmatic usage\n\n```ts\nimport {\n  walkRules,\n  discoverLayerPaths,\n  type RulesWalkerConfig,\n} from '../../src/services/integrations/CcsAlignRulesWalker.js';\n\n// Discover paths on the current box\nconst paths = discoverLayerPaths({ project: 'claude-mem' });\n\nconst config: RulesWalkerConfig = {\n  dataRoot: '~/.claude-mem',\n  viewerId: 'ccs-align',\n  patchShadows: false,  // report-only by default\n  housePaths: paths.housePaths,\n  projectPaths: paths.projectPaths,\n  seatPaths: paths.seatPaths,\n};\n\nconst result = walkRules(config);\n// result.conflicts — array of detected conflicts\n// result.misses — paths that were not found\n// result.reportPath — path to the appended rules-report.md\n// result.patchesApplied — number of SHADOW_HOUSE lines removed (0 if patchShadows=false)\n```\n\n## Phase 3 — Verify / sign-off (plan §3)\n\nPhase 3 closes the plan loop. It proves the seat is hourly-runnable, documented, and honest about what it is not — it does **not** add runtime behavior.\n\n**Prove the boundary, not the code (§3.1):**\n\n- One scripted cycle: health → `search` → `timeline` → `get_observations` → `middle.jsonl`.\n- A second cycle produces no duplicate lines (dedupe holds).\n- Exclude one id → gone from the middle cache, still returned by the worker (`GET /api/observation/N`).\n- A rules report is produced (or an explicit `MISS` on a box with no agent-data tree).\n- User-facing strings say **Alex**, never \"Az\"; no \"context compiler shipped / brainbeat is live / we compiled awareness\" claims (only future / not-this-plan wording).\n\n**Prove nothing regressed (§3.2):** run the tests in the Verification section below, including the #3931 pusher and transcript tests. #3931 behavior must stay: LFG/Orifice still get `[awareness]` lines from the **worker pusher**, not from Align.\n\n**Anti-pattern grep (§3.3):** no `DELETE /api/observation`, no `notifyGrokBotAwareness`, no `processAgentResponse` reuse in the seat helpers (forbid/comment mentions are fine — the seat must not *use* them).\n\n**Sign-off (§3.4):** this skill can be run by a Worker Watch seat with no extra product context; the shipped defaults still match the D-rows; the Prioritizer can roll this up as \"CCS Align Phase 0 green / Phase 1 marks / Phase 2 report.\"\n\nSee `plans/2026-09-09-ccs-align.md` §3 for the full contract.\n\n## Later phases (documented, not implemented)\n\n- **Full brainbeat / context compiler / `.cas` runtime** — future work, paper scaffold, out of this plan.\n- **Attention trough / curse-salience, Focus/mouth egress enforcement** — different agents / backlog; hard forbids here.\n\nSee `plans/2026-09-09-ccs-align.md` \"Explicit non-goals\" for the full list.\n\n## Verification (Phase 0 + Phase 1 + Phase 2)\n\n```bash\nbun test tests/integrations/ccs-align-middle-cache.test.ts\n# Phase 0: format/truncate, needle match, append, dedupe, path safety, never-throw, cursor round-trip\n# Phase 1: mark drop, diary present, tool ids not in middle.jsonl, viewer isolation,\n#           unmark+rebuild, exclude-marks round-trip, buildExcludeSet, secure-isolation,\n#           corrupt marks fail-closed, marked ids skipped on ingest\n\nbun test tests/integrations/ccs-align-rules-walker.test.ts\n# Phase 2: SHADOW_HOUSE detection (exact dup + \"House rule\" prefix), default report-only\n#           (leaf unchanged), patchShadows=true (leaf loses duplicates, house unchanged),\n#           never patches standing/always/never, MISS on absent paths, CLOCK_HEADER detection,\n#           DENY_ALLOW detection, DRIFT detection, append-only report, atomic patch,\n#           full walkRules integration, edge cases\n\n# #3931 must not regress — LFG/Orifice still get [awareness] lines from the worker pusher, not Align\nbun test tests/integrations/grok-bot-awareness-pusher.test.ts\n```\n\nVerification greps (plan §2.3):\n\n```bash\n# Report path documented\nrg -n \"rules-report\" plugin/skills/ccs-align/SKILL.md\n# expect ≥1\n\n# Patch gated\nrg -n \"CCS_ALIGN_PATCH_SHADOWS\" plugin/skills/ccs-align/SKILL.md\n# expect ≥1\n```\n\nLive-box checks (house, not CI — a cloud VM may have no live worker; record a MISS if so):\n\n- `curl -sS \"http://127.0.0.1:$WORKER_PORT/api/health\"` returns `status: ok`\n- After one cycle, `~/.claude-mem/ccs-align/ccs-align/middle.jsonl` exists\n- A second cycle with the same observations does **not** grow the file (dedupe)\n- Mark observation N → next cycle drops N from `middle.jsonl`\n- SQLite / `GET /api/observation/N` still returns the row (diary is authoritative)\n- Linked tool-use ids on the mark never appear in `middle.jsonl`\n- Viewer B's cache does not contain viewer A's unique eval token\n- Unmark (remove from JSON) + cycle restores N on the next pull\n- `profile.md` under any `agents/` path is byte-identical to before\n- LFG/Orifice `memory/log/YYYY-MM.md` unchanged by Align","schemaVersion":1},"repoUrl":"https://github.com/thedotmack/claude-mem/tree/main/plugin/skills/ccs-align","tags":["ai","ai-agents","ai-memory","anthropic","artificial-intelligence","chromadb","claude","claude-agent-sdk","claude-agents","claude-code","claude-code-plugin","claude-skills"],"stats":{"installVelocity7d":0,"retentionRate":0,"executions":0,"rating":null},"origin":"github","source":{"repo":"claude-mem","audit":{"files":["openclaw/package.json","package.json"],"binaries":[],"findings":[{"kind":"dependency","rule":"DP-04","message":"No npm lock file: installs resolve whatever the ranges allow today.","surface":"package.json","evidence":"@better-auth/api-key@^1.6.16, better-auth@^1.6.16","severity":"medium"}],"packages":2,"auditedAt":"2026-09-25T10:51:51.575Z","lockfiles":[]},"forks":8366,"owner":"thedotmack","stars":94658,"topics":["ai","ai-agents","ai-memory","anthropic","artificial-intelligence","chromadb","claude","claude-agent-sdk","claude-agents","claude-code","claude-code-plugin","claude-skills","embeddings","long-term-memory","mem0","memory-engine","openmemory","rag","sqlite","supermemory"],"license":"Apache-2.0","fullName":"thedotmack/claude-mem","homepage":"https://claude-mem.ai","language":"TypeScript","pushedAt":"2026-09-25T01:11:49Z","avatarUrl":"https://avatars.githubusercontent.com/u/683968?v=4","crawledAt":"2026-09-25T10:51:42.785Z","openIssues":296,"manifestFile":"SKILL.md","manifestPath":"plugin/skills/ccs-align/SKILL.md","defaultBranch":"main"},"readme":"# CCS Align — Worker Watch seat (Phases 0–2 shipped; Phase 3 = verify / sign-off)\n\nCCS Align is a **standing seat**, not a bird's-eye planner. Its one job, once an hour: talk to the **local** claude-mem worker, pull recent needle observations through the existing three-layer disclosure ladder, and land them in a **seat-owned middle cache** using grab → append → replace.\n\nThis skill implements the Phase 0 breathing slice, Phase 1 exclude marks, and Phase 2 rules alignment from the plan of record, `plans/2026-09-09-ccs-align.md`. Phases 0–2 are **shipped and merged** ([#3934](https://github.com/thedotmack/claude-mem/pull/3934), [#3935](https://github.com/thedotmack/claude-mem/pull/3935), [#3936](https://github.com/thedotmack/claude-mem/pull/3936)); Phase 3 is **verify / sign-off** (this loop) — no new product surface. It is **not** a context compiler, **not** Focus/mouth, and **not** Grok Memory Phase 2. When you speak to the human, address them as **Alex**.\n\n## What is implemented (Phases 0–2 shipped)\n\n- **Phase 0 — Breathing slice** ([#3934](https://github.com/thedotmack/claude-mem/pull/3934)): health check → `search` → `timeline` → `get_observations` → append records to `~/.claude-mem/ccs-align/<viewerId>/middle.jsonl` (atomic, deduped).\n- **Phase 1 — Exclude marks** ([#3935](https://github.com/thedotmack/claude-mem/pull/3935)): mark observations (and linked tool-use ids) as excluded from the compiled middle cache. \"Purge\" means the compiled `middle.jsonl` no longer contains the record — the diary / SQLite stay authoritative. Unmarking + rebuild restores the observation. `DELETE /api/observation/:id` is **forbidden**.\n- **Phase 2 — Rules alignment** ([#3936](https://github.com/thedotmack/claude-mem/pull/3936)): walk house → project → seat layers, detect conflicts (`SHADOW_HOUSE`, `DENY_ALLOW`, `DRIFT`, `CLOCK_HEADER`), emit an append-only `rules-report.md`. Optionally dry-run/apply `SHADOW_HOUSE` leaf patches when `CLAUDE_MEM_CCS_ALIGN_PATCH_SHADOWS=true`. Runs every 6th hour of the hourly Worker Watch cycle (D4). This is a **checklist**, not a parser — no `.cas` compiler.\n- **Phase 3 — Verify / sign-off** (this loop): re-run the regression tests and anti-pattern greps, prove the boundary (a scripted cycle dedupes, an exclude drops from the middle cache but not the diary, the rules report is produced or a MISS is recorded), and keep the skill + plan honest about what this seat is not. Phase 3 adds **no** new runtime behavior.\n- **Does not:** delete history, write `profile.md`, write LFG/Orifice `[awareness]` logs (that seam belongs to [#3931](https://github.com/thedotmack/claude-mem/pull/3931)), add a sixth `processAgentResponse` consumer, restart the worker, run a per-turn drip update, enforce Focus/mouth/standing rules, or copy house text into seats.\n\n## What this is NOT (honest boundary)\n\nCCS Align is deliberately small. It does **not** ship, and this loop does **not** add, any of the following — these are future work or a different agent, called out so no one reads more into the seat than is there:\n\n- **No context compiler.** There is no `.cas` parser, no `compileAwareness()`, no JIT compile, no computed-styles UI. The CCS Notion page types (`Bucket`, `canRead`) are teaching copy quoted as comments — never a runtime parser.\n- **No brainbeat product.** The \"regenerate awareness once per finished unit of work\" door is not built. Align *pulls* on an hourly cadence; it is not a per-turn drip and it is not a brainbeat.\n- **No attention trough / curse-salience.** No salience decay, no trough scoring. Explicitly out of every phase.\n- **No Focus / mouth enforcement.** Standing rules (always / never / danger) are never enforced or decayed here. Align may *list* a conflict; egress filtering belongs to a different agent.\n- **No second writer on LFG/Orifice `[awareness]` logs.** [#3931](https://github.com/thedotmack/claude-mem/pull/3931) owns `agents/**/memory/log/YYYY-MM.md`. Align writes only its seat-owned middle cache.\n- **No his","createdAt":"2026-09-25T10:51:51.699Z","updatedAt":"2026-09-25T10:51:51.699Z"},{"id":"cmugucise0022qu064n2kkc7a","slug":"thedotmack-claude-mem-cloud-sync","name":"cloud-sync","description":"Set up or check claude-mem cloud sync with cmem.ai Pro. Use when the user says \"set up cloud sync\", \"sync my memories\", \"cmem pro\", \"cloud backup\", \"sync status\", or wants their memory database backed up or synced to their cmem.ai account.","authorId":"gh:thedotmack","authorName":"thedotmack","version":"0.1.0","category":"Prompt","securityLevel":"Community","downloadsCount":0,"githubStars":94658,"pricePerCall":0,"manifest":{"name":"cloud-sync","tools":[],"category":"Prompt","entrypoint":{"type":"prompt"},"description":"Set up or check claude-mem cloud sync with cmem.ai Pro. Use when the user says \"set up cloud sync\", \"sync my memories\", \"cmem pro\", \"cloud backup\", \"sync status\", or wants their memory database backed up or synced to their cmem.ai account.","permissions":["shell"],"systemPrompt":"# Cloud Sync (cmem.ai Pro)\n\nThe installed worker syncs through SyncHub. There is one client, one durable\noperation log, and no separate sync daemon. This skill checks status or writes\nthe three connection values issued by **cmem.ai → Connect**.\n\n**Security rule:** never print the sync token, put it in argv, or log it.\nConfirm only its length. Preserve every unrelated setting and keep\n`~/.claude-mem/settings.json` mode `0600`.\n\n## 1. Check status\n\nResolve the worker port and query the always-registered status route:\n\n```bash\nPORT=\"${CLAUDE_MEM_WORKER_PORT:-$(node -e \"const fs=require('fs'),p=require('path'),os=require('os');const uid=(typeof process.getuid==='function'?process.getuid():77);const fallback=String(37700+(uid%100));try{const s=JSON.parse(fs.readFileSync(p.join(os.homedir(),'.claude-mem','settings.json'),'utf-8'));process.stdout.write(String(s.CLAUDE_MEM_WORKER_PORT||fallback));}catch{process.stdout.write(fallback);}\" 2>/dev/null)}\"\ncurl -s \"http://127.0.0.1:${PORT}/api/sync/status\"\n```\n\n- `configured: true` and `hub.reachable: true` → the worker completed an\n  authenticated `GET /v1/sync/status` against SyncHub. Report `deviceId`,\n  pending counts, `lastFlushAt`, `lastError`, and the Hub head/checkpoint;\n  stop unless the user asked to replace the connection.\n- `configured: true` and `hub.reachable: false` → report `hub.error` and say\n  the SyncHub connection is not verified. A zero pending count or\n  `lastError: null` is not success because an empty queue performs no push.\n- `configured: false` → continue.\n- Connection refused, 404, or 503 immediately after restart → retry every\n  three seconds for about 30 seconds before diagnosing the worker.\n\n## 2. Obtain the connection\n\nAsk for all three values shown by **cmem.ai → Connect**:\n\n1. sync token;\n2. user id;\n3. SyncHub URL.\n\nThe Hub URL must be an absolute `https://` URL. Do not substitute the cmem.ai\napplication API URL; the installed client talks only to SyncHub.\n\n## 3. Write installed-client settings\n\nSubstitute the collected values inside this quoted stdin script. Do not echo\nthem before or after running it:\n\n```bash\nnode - <<'EOF'\nconst fs = require('fs'), os = require('os'), path = require('path');\nconst token = 'PASTE_TOKEN_HERE';\nconst userId = 'PASTE_USER_ID_HERE';\nconst hubUrl = 'PASTE_HUB_URL_HERE';\nif (!token || !userId || !/^https:\\/\\/[^\\s]+$/.test(hubUrl)) {\n  console.error('token, user id, and an https SyncHub URL are required');\n  process.exit(1);\n}\nconst dir = path.join(os.homedir(), '.claude-mem');\nconst file = path.join(dir, 'settings.json');\nfs.mkdirSync(dir, { recursive: true });\nconst settings = fs.existsSync(file) ? JSON.parse(fs.readFileSync(file, 'utf8')) : {};\nconst target = settings.env && typeof settings.env === 'object' ? settings.env : settings;\ntarget.CLAUDE_MEM_CLOUD_SYNC_TOKEN = token;\ntarget.CLAUDE_MEM_CLOUD_SYNC_USER_ID = userId;\ntarget.CLAUDE_MEM_CLOUD_SYNC_HUB_URL = hubUrl.replace(/\\/+$/, '');\nfs.writeFileSync(file, JSON.stringify(settings, null, 2) + '\\n', { mode: 0o600 });\nfs.chmodSync(file, 0o600);\nconsole.log(`saved cloud connection: token length ${token.length}, user id length ${userId.length}`);\nEOF\n```\n\nThese are the only required connection keys. The worker mints and persists a\ndevice id on first start and defaults the device name to the hostname.\n\n## 4. Restart and verify\n\n```bash\ncurl -s -X POST \"http://127.0.0.1:${PORT}/api/admin/restart\"\n```\n\nPoll the status route every five seconds for up to 30 seconds while the\nsuccessor starts. Success means `configured: true`, `hub.reachable: true`, and\n`lastError: null`. The local route always makes an authenticated, read-only\nSyncHub status probe, even when every pending count is zero; it never uses a\nlegacy cmem.ai Pro status route and never appends or advances sync state.\nPending counts describe only writes made after the SyncHub launch baseline;\nsetup does not migrate a pre-launch local corpus.\n\nIf `hub.reachable` is false, report `hub.error`. If `lastError` is non-null,\nreport it too. Ask the user to verify the three values in **cmem.ai →\nConnect**. Never include the token.\n\n## 5. Report\n\nReport device id, pending counts, last successful flush, Hub reachability and\ncheckpoint, and any Hub/flush error. End with this privacy note:\n\n> Cloud sync uploads your observation narratives and full prompt text to your\n> cmem.ai account.","schemaVersion":1},"repoUrl":"https://github.com/thedotmack/claude-mem/tree/main/plugin/skills/cloud-sync","tags":["ai","ai-agents","ai-memory","anthropic","artificial-intelligence","chromadb","claude","claude-agent-sdk","claude-agents","claude-code","claude-code-plugin","claude-skills"],"stats":{"installVelocity7d":0,"retentionRate":0,"executions":0,"rating":null},"origin":"github","source":{"repo":"claude-mem","audit":{"files":["openclaw/package.json","package.json"],"binaries":[],"findings":[{"kind":"dependency","rule":"DP-04","message":"No npm lock file: installs resolve whatever the ranges allow today.","surface":"package.json","evidence":"@better-auth/api-key@^1.6.16, better-auth@^1.6.16","severity":"medium"}],"packages":2,"auditedAt":"2026-09-25T10:51:51.575Z","lockfiles":[]},"forks":8366,"owner":"thedotmack","stars":94658,"topics":["ai","ai-agents","ai-memory","anthropic","artificial-intelligence","chromadb","claude","claude-agent-sdk","claude-agents","claude-code","claude-code-plugin","claude-skills","embeddings","long-term-memory","mem0","memory-engine","openmemory","rag","sqlite","supermemory"],"license":"Apache-2.0","fullName":"thedotmack/claude-mem","homepage":"https://claude-mem.ai","language":"TypeScript","pushedAt":"2026-09-25T01:11:49Z","avatarUrl":"https://avatars.githubusercontent.com/u/683968?v=4","crawledAt":"2026-09-25T10:51:42.785Z","openIssues":296,"manifestFile":"SKILL.md","manifestPath":"plugin/skills/cloud-sync/SKILL.md","defaultBranch":"main"},"readme":"# Cloud Sync (cmem.ai Pro)\n\nThe installed worker syncs through SyncHub. There is one client, one durable\noperation log, and no separate sync daemon. This skill checks status or writes\nthe three connection values issued by **cmem.ai → Connect**.\n\n**Security rule:** never print the sync token, put it in argv, or log it.\nConfirm only its length. Preserve every unrelated setting and keep\n`~/.claude-mem/settings.json` mode `0600`.\n\n## 1. Check status\n\nResolve the worker port and query the always-registered status route:\n\n```bash\nPORT=\"${CLAUDE_MEM_WORKER_PORT:-$(node -e \"const fs=require('fs'),p=require('path'),os=require('os');const uid=(typeof process.getuid==='function'?process.getuid():77);const fallback=String(37700+(uid%100));try{const s=JSON.parse(fs.readFileSync(p.join(os.homedir(),'.claude-mem','settings.json'),'utf-8'));process.stdout.write(String(s.CLAUDE_MEM_WORKER_PORT||fallback));}catch{process.stdout.write(fallback);}\" 2>/dev/null)}\"\ncurl -s \"http://127.0.0.1:${PORT}/api/sync/status\"\n```\n\n- `configured: true` and `hub.reachable: true` → the worker completed an\n  authenticated `GET /v1/sync/status` against SyncHub. Report `deviceId`,\n  pending counts, `lastFlushAt`, `lastError`, and the Hub head/checkpoint;\n  stop unless the user asked to replace the connection.\n- `configured: true` and `hub.reachable: false` → report `hub.error` and say\n  the SyncHub connection is not verified. A zero pending count or\n  `lastError: null` is not success because an empty queue performs no push.\n- `configured: false` → continue.\n- Connection refused, 404, or 503 immediately after restart → retry every\n  three seconds for about 30 seconds before diagnosing the worker.\n\n## 2. Obtain the connection\n\nAsk for all three values shown by **cmem.ai → Connect**:\n\n1. sync token;\n2. user id;\n3. SyncHub URL.\n\nThe Hub URL must be an absolute `https://` URL. Do not substitute the cmem.ai\napplication API URL; the installed client talks only to SyncHub.\n\n## 3. Write installed-client settings\n\nSubstitute the collected values inside this quoted stdin script. Do not echo\nthem before or after running it:\n\n```bash\nnode - <<'EOF'\nconst fs = require('fs'), os = require('os'), path = require('path');\nconst token = 'PASTE_TOKEN_HERE';\nconst userId = 'PASTE_USER_ID_HERE';\nconst hubUrl = 'PASTE_HUB_URL_HERE';\nif (!token || !userId || !/^https:\\/\\/[^\\s]+$/.test(hubUrl)) {\n  console.error('token, user id, and an https SyncHub URL are required');\n  process.exit(1);\n}\nconst dir = path.join(os.homedir(), '.claude-mem');\nconst file = path.join(dir, 'settings.json');\nfs.mkdirSync(dir, { recursive: true });\nconst settings = fs.existsSync(file) ? JSON.parse(fs.readFileSync(file, 'utf8')) : {};\nconst target = settings.env && typeof settings.env === 'object' ? settings.env : settings;\ntarget.CLAUDE_MEM_CLOUD_SYNC_TOKEN = token;\ntarget.CLAUDE_MEM_CLOUD_SYNC_USER_ID = userId;\ntarget.CLAUDE_MEM_CLOUD_SYNC_HUB_URL = hubUrl.replace(/\\/+$/, '');\nfs.writeFileSync(file, JSON.stringify(settings, null, 2) + '\\n', { mode: 0o600 });\nfs.chmodSync(file, 0o600);\nconsole.log(`saved cloud connection: token length ${token.length}, user id length ${userId.length}`);\nEOF\n```\n\nThese are the only required connection keys. The worker mints and persists a\ndevice id on first start and defaults the device name to the hostname.\n\n## 4. Restart and verify\n\n```bash\ncurl -s -X POST \"http://127.0.0.1:${PORT}/api/admin/restart\"\n```\n\nPoll the status route every five seconds for up to 30 seconds while the\nsuccessor starts. Success means `configured: true`, `hub.reachable: true`, and\n`lastError: null`. The local route always makes an authenticated, read-only\nSyncHub status probe, even when every pending count is zero; it never uses a\nlegacy cmem.ai Pro status route and never appends or advances sync state.\nPending counts describe only writes made after the SyncHub launch baseline;\nsetup does not migrate a pre-launch local corpus.\n\nIf `hub.reachable` is false, report `hub.error`. If `lastError` is non-null,\nrep","createdAt":"2026-09-25T10:51:51.711Z","updatedAt":"2026-09-25T10:51:51.711Z"},{"id":"cmugucism0025qu06ncgxcjyp","slug":"thedotmack-claude-mem-design-is","name":"design-is","description":"Audit a design against Dieter Rams' ten \"Good design is...\" principles, then hand off a /make-plan prompt for one of three outcomes — new design, refine design, or redesign. Use when the user says \"audit this design\", \"design review\", \"check this UI against Rams\", \"is this UI good\", \"critique this design\", \"design audit\", or asks for a critique that should lead to a plan.","authorId":"gh:thedotmack","authorName":"thedotmack","version":"0.1.0","category":"Prompt","securityLevel":"Community","downloadsCount":0,"githubStars":94658,"pricePerCall":0,"manifest":{"name":"design-is","tools":[],"category":"Prompt","entrypoint":{"type":"prompt"},"description":"Audit a design against Dieter Rams' ten \"Good design is...\" principles, then hand off a /make-plan prompt for one of three outcomes — new design, refine design, or redesign. Use when the user says \"audit this design\", \"design review\", \"check this UI against Rams\", \"is this UI good\", \"critique this design\", \"design audit\", or asks for a critique that should lead to a plan.","permissions":[],"systemPrompt":"# Design Is\n\n## Do not use for\n\n- Routine UI code reviews → use `/review`\n- Pure copy edits → use a separate copy pass\n- Pre-design ideation with no artifact yet → start with `/make-plan` directly\n\nYou are an ORCHESTRATOR. Audit a design against Dieter Rams' ten principles, score each principle with evidence, decide the outcome verdict (NEW / REFINE / REDESIGN), and hand off to `/make-plan` with a ready-to-run prompt.\n\nYou do not write implementation code. You produce: evidence-cited scores, a verdict, and a `/make-plan` handoff prompt.\n\n## The Ten Principles (Dieter Rams)\n\nAudit each principle in this exact order. Each gets a score 0–3 and ≥1 piece of evidence (`file:line`, screenshot region, copy excerpt, or measured value).\n\n1. **Good design is innovative** — Does it advance the form, or imitate? Innovation rides on technology; never an end in itself.\n2. **Good design makes a product useful** — Does it serve the primary task? Emphasizes usefulness; disregards anything that detracts.\n3. **Good design is aesthetic** — Is it beautiful? Only well-executed objects can be beautiful; aesthetic quality affects well-being.\n4. **Good design makes a product understandable** — Does the structure clarify function? Or is it self-explanatory at best?\n5. **Good design is unobtrusive** — Does it stay out of the way? Neither decorative objects nor works of art — leave room for self-expression.\n6. **Good design is honest** — Does it claim only what it is? No false promises, no manipulation, no inflated value.\n7. **Good design is long-lasting** — Will it age well? Avoids being fashionable; never appears antiquated.\n8. **Good design is thorough down to the last detail** — Are edges, empty states, errors, focus rings, motion curves all considered? Care and accuracy express respect for the user.\n9. **Good design is environmentally friendly** — Does it conserve resources? Minimizes pollution — in software: bundle weight, energy, attention, cognitive load.\n10. **Good design is as little design as possible** — Less, but better. Concentrates on essentials; back to purity, back to simplicity.\n\n> The user wrote \"Dieter Braun\" — they mean Dieter Rams. Don't correct them inline; just use the right principles.\n\n## Delegation Model\n\nUse subagents for *evidence gathering* (reading components, measuring contrast, counting elements, inspecting tokens, screenshotting via agent-browser). Keep *scoring and verdict synthesis* with the orchestrator. Reject subagent reports that score without citing evidence and redeploy.\n\n### Subagent Reporting Contract (MANDATORY)\n\nEach evidence subagent response must include:\n1. Sources consulted — exact file paths and line ranges, or screenshot regions\n2. Concrete findings — what is present, what is missing, with quotes/values\n3. Per-principle facts (not opinions) — leave scoring to the orchestrator\n4. Known gaps — what could not be inspected and why\n\n## Output Artifacts\n\nAll artifacts go in `DESIGN-IS-<YYYY-MM-DD>/` at repo root (or the project the user points at):\n\n- `00-scope.md` — what was audited (URL, component paths, screens), input materials\n- `01-evidence.md` — per-principle evidence collected by subagents\n- `02-scorecard.md` — per-principle 0–3 score with one-line justification + total\n- `03-verdict.md` — NEW / REFINE / REDESIGN with reasoning\n- `04-handoff-prompt.md` — copy-pasteable `/make-plan` prompt for the chosen outcome\n\n## Phases\n\n### Phase 0: Scope Lock (ALWAYS FIRST)\n\nAsk the user (or infer from the request) and write `00-scope.md`:\n- What is being audited? (live URL, repo path, Figma frame, component name)\n- Who is the primary user, and what is the primary task?\n- Constraints (brand, stack, deadline)\n- Reference designs or competitors, if any\n\nIf the user is asking about a design that doesn't exist yet, skip Phases 1–2 and go straight to Phase 3 with verdict = **NEW**.\n\n### Phase 1: Evidence Gathering (FAN OUT)\n\nDeploy subagents in parallel. Each must return ONLY the required fields below — no prose paragraphs, no scoring.\n\n**1. Structural Evidence** subagent (always deploy)\nRequired fields returned:\n- Total interactive-element count on audited surface\n- Max nesting depth of the primary component tree\n- Repeated-pattern count (same affordance appearing >1 place with the same purpose)\n- Dead-prop / unused-import count\n- File:line citations for every count\n\n**2. Visual Evidence** subagent (always deploy)\nMode: if target is a reachable URL or running dev server → use the `agent-browser` skill for screenshots and computed-style inspection. If target is a static repo with no running instance → read source CSS / tokens / component files and report inferred facts only (mark these \"INFERRED\").\nRequired fields returned:\n- Spacing scale observed (px array)\n- Type scale observed (px array)\n- Distinct color count (count of unique hex/oklch tokens actually rendered or referenced)\n- Lowest contrast ratio observed across primary text\n- States present checklist: empty / loading / error / success / focus / disabled — present or missing for each\n\n**3. Copy & Honesty** subagent (always deploy)\nRequired fields returned:\n- List of every user-facing string with file:line\n- Flagged inflations (marketing superlatives without backing)\n- Flagged dark patterns (forced continuity, hidden cost, fake scarcity, confirmshaming)\n- Flagged jargon / unclear labels with proposed plain replacement\n- Label→behavior mismatches with file:line of both\n\n**4. Weight & Friction** subagent (always deploy)\nRequired fields returned:\n- Initial JS bytes (number)\n- Network request count for primary view (number)\n- Time-to-interactive ms (number, measured or estimated with method noted)\n- Animation count on idle screen (number)\n- Notification / badge / modal count on initial load (number)\n\n**5. Accessibility Evidence** subagent (OPTIONAL — deploy only if target has a meaningful interactive UI surface; skip for static landing pages without interaction)\nRequired fields returned:\n- WCAG contrast pass/fail per text token\n- Focus order list across primary controls\n- Keyboard reachability of every primary action (yes/no per action)\n- ARIA landmark count\n- Skip-link present (yes/no)\n\n**Principle → subagent mapping** (orchestrator uses this when scoring):\n\n| Principle | Fed by |\n|-----------|--------|\n| #1 innovative | orchestrator-only (judgment using all evidence) |\n| #2 useful | Structural, Accessibility |\n| #3 aesthetic | Visual |\n| #4 understandable | Structural, Copy & Honesty, Accessibility |\n| #5 unobtrusive | Structural, Visual |\n| #6 honest | Copy & Honesty |\n| #7 long-lasting | orchestrator-only (judgment using all evidence) |\n| #8 thorough | Visual |\n| #9 environmentally friendly | Weight & Friction |\n| #10 as little design as possible | Structural |\n\nThe orchestrator writes `01-evidence.md` consolidating all subagent reports. Reject any finding without a source citation. Subagents are explicitly forbidden from scoring — only the orchestrator scores, using the rubric in Phase 2.\n\n### Phase 2: Scorecard (ORCHESTRATOR)\n\nThe orchestrator scores each of the ten principles itself — do NOT delegate scoring.\n\nFor each principle, write to `02-scorecard.md`:\n\n```\nN. Good design is <principle> — Score: X/3\n   Evidence: <one-line summary citing 01-evidence.md anchors>\n   Justification: <one sentence on why this score, not the one above or below>\n```\n\nPer-principle scoring anchors (apply verbatim — pick the level whose signal best matches the audited surface):\n\n#1 innovative — 3: introduces a pattern not seen in 5+ peer products and ships it with restraint. 2: refreshes an existing pattern with a clear improvement. 1: imitates competitors with minor variation. 0: copies a competitor's flow wholesale.\n#2 useful — 3: primary task completes in fewest possible steps; no decoy actions. 2: primary task completes but adjacent surface adds steps. 1: primary task requires unnecessary detours. 0: primary task is not directly supported on the screen audited.\n#3 aesthetic — 3: spacing/type/color obey a single visible system; no orphan styles. 2: ≤2 minor inconsistencies across audited surface. 1: 3–5 inconsistencies OR one jarring violation. 0: no visible system OR active visual noise.\n#4 understandable — 3: a first-time user names every primary control correctly. 2: 1 control needs a tooltip. 1: 2–3 controls unclear; jargon present. 0: primary action is not identifiable without help.\n#5 unobtrusive — 3: chrome recedes; content is the figure, UI the ground. 2: chrome visible but quiet. 1: decoration competes with content. 0: chrome dominates content.\n#6 honest — 3: every claim, badge, and label maps 1:1 to actual behavior. 2: ≤1 minor inflation (e.g. \"powerful\" once). 1: 2+ inflations OR one dark pattern. 0: any deceptive flow (forced continuity, hidden cost, fake scarcity).\n#7 long-lasting — 3: visual language has no dated trend markers; would read as current 3 years from now. 2: 1 dated marker. 1: 2–3 dated markers (skeuomorph residue, fad gradients, trend typography). 0: design reads as a specific year's trend.\n#8 thorough — 3: empty / loading / error / success / focus / disabled all present and considered. 2: 1 state missing or rough. 1: 2–3 states missing. 0: 4+ states missing or default-browser.\n#9 environmentally friendly — 3: initial JS <100KB, no idle animation, dark mode honored, prefers-reduced-motion respected. 2: <500KB, motion gated. 1: 500KB–2MB, motion always on. 0: >2MB OR autoplay video OR dark mode ignored.\n#10 as little design as possible — 3: every element earns its place; removing any one breaks the task. 2: ≤2 removable elements. 1: 3–5 removable elements. 0: page is dominated by decoration or duplicated affordances.\n\nScoring rules:\n- **Tie-breaker rule**: When uncertain between two scores, pick the lower one. Convergence > generosity.\n- **Score worst, not mean**: When a principle has multiple representative instances on the audited surface, score the worst instance — not the average.\n- **No bonuses, no weights**: Scores stay 0–3 integer. Principles are equally weighted. Total is sum of ten scores, max 30.\n\n### Phase 3: Verdict (ORCHESTRATOR)\n\nWrite `03-verdict.md` with one of three verdicts, chosen by these rules:\n\n- **NEW DESIGN** — No design exists yet, OR the existing artifact is a stub/wireframe with no real decisions to preserve.\n- **REFINE** — Total score ≥ 20 AND no individual principle scored 0. The bones are good; iterate.\n- **REDESIGN** — Total score < 20, OR any principle scored 0 on a load-bearing dimension (typically #2 useful, #4 understandable, or #6 honest). Start over from purpose.\n\nState the verdict in one sentence. Then list the 3–5 highest-leverage moves — each tied to a specific principle and evidence anchor. These become the spine of the next phase's plan.\n\n**Anti-patterns to reject in your own verdict:**\n- Recommending REFINE because the codebase is large (sunk cost is not a design principle)\n- Recommending REDESIGN because a single screen is ugly (scope it)\n- Recommending NEW when an honest REDESIGN is warranted (don't dodge the critique)\n\n### Phase 4: /make-plan Handoff\n\nWrite `04-handoff-prompt.md` containing exactly ONE fenced `/make-plan` prompt matching the verdict. The prompt must be self-contained — the next session won't see this audit unless it's quoted in.\n\nUse the matching template below. Fill every `<bracket>`. Include the top 3–5 moves from Phase 3 verbatim, each with its evidence anchor.\n\n**Quote-in step (mandatory, applies to all three templates below):** Before emitting the handoff, replace EVERY `<bracket>` placeholder with concrete content from the audit. Inline the verdict paragraph from `03-verdict.md` and the top 3–5 moves verbatim into the template. Do NOT leave bare references like \"see DESIGN-IS-.../03-verdict.md\" — the next session won't have file access to the audit. The emitted handoff must be readable and actionable with zero external lookups.\n\n#### Template: NEW DESIGN\n\n````\n/make-plan Design <product/screen/component name> from scratch.\n\nPrimary user: <who>\nPrimary task: <one sentence>\nConstraints: <brand, stack, deadline, accessibility floor>\n\nNon-goals (do not design these now):\n- <explicit out-of-scope item 1>\n- <explicit out-of-scope item 2>\n- <explicit out-of-scope item 3>\n\nReference principles to optimize for, in order:\n1. Useful (#2) — <what useful looks like here>\n2. Understandable (#4) — <what clarity looks like here>\n3. As little design as possible (#10) — <what restraint looks like here>\n\nDeliverables for the plan:\n- Information architecture (one screen map or component tree)\n- Primary flow wireframe (low-fi, labeled)\n- Token decisions (type scale, spacing scale, color count cap)\n- States checklist (empty, loading, error, success, focus, disabled)\n- Honesty audit on every user-facing string before ship\n\nAnti-patterns to guard against (specific to NEW):\n- Decoration without function\n- Novel interactions without precedent\n- Copy that overpromises\n- Designing for screens the Non-goals list excluded\n````\n\n#### Template: REFINE DESIGN\n\n````\n/make-plan Refine <product/screen/component name> based on a Dieter Rams audit (total <X>/30).\n\nVerdict paragraph (quoted from 03-verdict.md):\n> <paste the one-sentence verdict here>\n\nKeep (already strong, do NOT touch in this pass):\n- Principle #<N> (<name>) scored 3 — Evidence: <file:line or anchor>. Regression check: <what to grep / re-test to confirm it still scores 3 after the refine>.\n- <repeat for every principle that scored 3>\n\nFix in priority order (top 3–5 moves from the audit, verbatim):\n1. <Principle # — short name>: <specific move>. Evidence: <file:line or anchor>.\n2. <Principle # — short name>: <specific move>. Evidence: <file:line or anchor>.\n3. <Principle # — short name>: <specific move>. Evidence: <file:line or anchor>.\n4. <optional 4th>\n5. <optional 5th>\n\nOut of scope for this refine pass: <explicit list — what NOT to touch>\n\nDeliverables for the plan:\n- Per-fix: target files, exact change, verification step\n- Token/spec changes consolidated in one place\n- Regression checklist for every \"Keep\" item above\n\nAnti-patterns to guard against (specific to REFINE):\n- Adding new abstractions where a direct change suffices\n- Restyling areas that already scored 3\n- Scope creep into structural redesign (if structure must change, this should be REDESIGN, not REFINE)\n- Letting fixes mutate principles outside the priority list\n````\n\n#### Template: REDESIGN\n\n````\n/make-plan Redesign <product/screen/component name>. Current design failed audit at <X>/30 with critical gaps in principles <comma-separated list of 0-scored or 1-scored load-bearing principles>.\n\nVerdict paragraph (quoted from 03-verdict.md):\n> <paste the one-sentence verdict here>\n\nWhy redesign and not refine: <one sentence — usually a load-bearing principle (#2, #4, or #6) scored 0, or total is below threshold>\n\nPreserve from current design (MUST be non-empty — at minimum, name the brand tokens):\n- <specific element 1, with file:line>\n- <specific element 2, with file:line>\n- (if structurally nothing survives, write: \"Brand tokens only — color palette and logo. Discard everything else.\")\n\nDiscard (MUST be non-empty — name the structural patterns causing the failures):\n- <pattern 1>. Evidence: <file:line>. Caused failure on principle #<N>.\n- <pattern 2>. Evidence: <file:line>. Caused failure on principle #<N>.\n\nTop 3–5 moves from the audit (verbatim):\n1. <Principle # — short name>: <specific move>. Evidence: <file:line>.\n2. <Principle # — short name>: <specific move>. Evidence: <file:line>.\n3. <Principle # — short name>: <specific move>. Evidence: <file:line>.\n\nRedesign principles in priority order:\n1. <Principle # — name> — <what success looks like>\n2. <Principle # — name> — <what success looks like>\n3. <Principle # — name> — <what success looks like>\n\nDeliverables for the plan:\n- New information architecture (not derived from old)\n- New primary flow (low-fi, labeled, compared side-by-side to current)\n- States checklist (empty, loading, error, success, focus, disabled)\n- Migration path for users currently on the old design\n- Cutover criteria (when is the old design retired)\n\nAnti-patterns to guard against (specific to REDESIGN):\n- Porting old structure under new styling\n- Keeping both designs behind a flag indefinitely\n- Redesigning to follow a trend rather than the principles above\n- Treating the Preserve list as optional — it must be filled before this handoff is valid\n````\n\n## Key Principles (for the auditor)\n\n- **Evidence over taste** — every score cites a source; \"feels wrong\" is not a finding\n- **Score what is, not what was intended** — design is what ships, not what was drawn\n- **Honesty applies to the audit too** — if total is 28/30, say REFINE even if the user wanted a redesign; if it's 12/30, say REDESIGN even if the user wanted a refine\n- **One verdict, not three** — pick NEW or REFINE or REDESIGN; do not hedge\n- **Handoff, don't implement** — `design-is` ends at the `/make-plan` prompt; `/make-plan` and `/do` take it from there\n- **Verdict commitment** — Once `02-scorecard.md` is written, the verdict follows the Phase 3 rule mechanically. Never re-score to back into a preferred verdict; if the scorecard says REDESIGN, the handoff is REDESIGN.\n\n## Failure Modes to Prevent\n\n- Scoring from screenshots alone without reading the code — redeploy with structural subagent\n- Scoring the codebase instead of the design — re-anchor on user-facing evidence\n- Awarding 3s generously to soften the verdict — recalibrate against the per-principle anchors in Phase 2\n- Producing a handoff prompt that doesn't quote the verdict and top moves — the next session is blind without them\n- Skipping Phase 0 scope lock — auditing the wrong surface wastes Phase 1\n- **Sunk-cost reasoning** — recommending REFINE because the codebase is large; sunk cost is not a design principle\n- **Hedging across verdicts** — \"could be REFINE or REDESIGN depending on...\" — pick one\n- **Score inflation to match a desired verdict** — score the evidence, then read the verdict off the rule\n- **Letting Phase 0 user preference override Phase 3 evidence** — the user can disagree with the verdict, but the audit reports what the evidence says","schemaVersion":1},"repoUrl":"https://github.com/thedotmack/claude-mem/tree/main/plugin/skills/design-is","tags":["ai","ai-agents","ai-memory","anthropic","artificial-intelligence","chromadb","claude","claude-agent-sdk","claude-agents","claude-code","claude-code-plugin","claude-skills"],"stats":{"installVelocity7d":0,"retentionRate":0,"executions":0,"rating":null},"origin":"github","source":{"repo":"claude-mem","audit":{"files":["openclaw/package.json","package.json"],"binaries":[],"findings":[{"kind":"dependency","rule":"DP-04","message":"No npm lock file: installs resolve whatever the ranges allow today.","surface":"package.json","evidence":"@better-auth/api-key@^1.6.16, better-auth@^1.6.16","severity":"medium"}],"packages":2,"auditedAt":"2026-09-25T10:51:51.575Z","lockfiles":[]},"forks":8366,"owner":"thedotmack","stars":94658,"topics":["ai","ai-agents","ai-memory","anthropic","artificial-intelligence","chromadb","claude","claude-agent-sdk","claude-agents","claude-code","claude-code-plugin","claude-skills","embeddings","long-term-memory","mem0","memory-engine","openmemory","rag","sqlite","supermemory"],"license":"Apache-2.0","fullName":"thedotmack/claude-mem","homepage":"https://claude-mem.ai","language":"TypeScript","pushedAt":"2026-09-25T01:11:49Z","avatarUrl":"https://avatars.githubusercontent.com/u/683968?v=4","crawledAt":"2026-09-25T10:51:42.785Z","openIssues":296,"manifestFile":"SKILL.md","manifestPath":"plugin/skills/design-is/SKILL.md","defaultBranch":"main"},"readme":"# Design Is\n\n## Do not use for\n\n- Routine UI code reviews → use `/review`\n- Pure copy edits → use a separate copy pass\n- Pre-design ideation with no artifact yet → start with `/make-plan` directly\n\nYou are an ORCHESTRATOR. Audit a design against Dieter Rams' ten principles, score each principle with evidence, decide the outcome verdict (NEW / REFINE / REDESIGN), and hand off to `/make-plan` with a ready-to-run prompt.\n\nYou do not write implementation code. You produce: evidence-cited scores, a verdict, and a `/make-plan` handoff prompt.\n\n## The Ten Principles (Dieter Rams)\n\nAudit each principle in this exact order. Each gets a score 0–3 and ≥1 piece of evidence (`file:line`, screenshot region, copy excerpt, or measured value).\n\n1. **Good design is innovative** — Does it advance the form, or imitate? Innovation rides on technology; never an end in itself.\n2. **Good design makes a product useful** — Does it serve the primary task? Emphasizes usefulness; disregards anything that detracts.\n3. **Good design is aesthetic** — Is it beautiful? Only well-executed objects can be beautiful; aesthetic quality affects well-being.\n4. **Good design makes a product understandable** — Does the structure clarify function? Or is it self-explanatory at best?\n5. **Good design is unobtrusive** — Does it stay out of the way? Neither decorative objects nor works of art — leave room for self-expression.\n6. **Good design is honest** — Does it claim only what it is? No false promises, no manipulation, no inflated value.\n7. **Good design is long-lasting** — Will it age well? Avoids being fashionable; never appears antiquated.\n8. **Good design is thorough down to the last detail** — Are edges, empty states, errors, focus rings, motion curves all considered? Care and accuracy express respect for the user.\n9. **Good design is environmentally friendly** — Does it conserve resources? Minimizes pollution — in software: bundle weight, energy, attention, cognitive load.\n10. **Good design is as little design as possible** — Less, but better. Concentrates on essentials; back to purity, back to simplicity.\n\n> The user wrote \"Dieter Braun\" — they mean Dieter Rams. Don't correct them inline; just use the right principles.\n\n## Delegation Model\n\nUse subagents for *evidence gathering* (reading components, measuring contrast, counting elements, inspecting tokens, screenshotting via agent-browser). Keep *scoring and verdict synthesis* with the orchestrator. Reject subagent reports that score without citing evidence and redeploy.\n\n### Subagent Reporting Contract (MANDATORY)\n\nEach evidence subagent response must include:\n1. Sources consulted — exact file paths and line ranges, or screenshot regions\n2. Concrete findings — what is present, what is missing, with quotes/values\n3. Per-principle facts (not opinions) — leave scoring to the orchestrator\n4. Known gaps — what could not be inspected and why\n\n## Output Artifacts\n\nAll artifacts go in `DESIGN-IS-<YYYY-MM-DD>/` at repo root (or the project the user points at):\n\n- `00-scope.md` — what was audited (URL, component paths, screens), input materials\n- `01-evidence.md` — per-principle evidence collected by subagents\n- `02-scorecard.md` — per-principle 0–3 score with one-line justification + total\n- `03-verdict.md` — NEW / REFINE / REDESIGN with reasoning\n- `04-handoff-prompt.md` — copy-pasteable `/make-plan` prompt for the chosen outcome\n\n## Phases\n\n### Phase 0: Scope Lock (ALWAYS FIRST)\n\nAsk the user (or infer from the request) and write `00-scope.md`:\n- What is being audited? (live URL, repo path, Figma frame, component name)\n- Who is the primary user, and what is the primary task?\n- Constraints (brand, stack, deadline)\n- Reference designs or competitors, if any\n\nIf the user is asking about a design that doesn't exist yet, skip Phases 1–2 and go straight to Phase 3 with verdict = **NEW**.\n\n### Phase 1: Evidence Gathering (FAN OUT)\n\nDeploy subagents in parallel. Each must return ONLY the required fields below — no prose paragra","createdAt":"2026-09-25T10:51:51.719Z","updatedAt":"2026-09-25T10:51:51.719Z"},{"id":"cmugucisw0028qu06f8p3nnpk","slug":"thedotmack-claude-mem-do-2","name":"do","description":"Execute a phased implementation plan using subagents. Use when asked to execute, run, or carry out a plan — especially one created by make-plan.","authorId":"gh:thedotmack","authorName":"thedotmack","version":"0.1.0","category":"Prompt","securityLevel":"Community","downloadsCount":0,"githubStars":94658,"pricePerCall":0,"manifest":{"name":"do","tools":[],"category":"Prompt","entrypoint":{"type":"prompt"},"description":"Execute a phased implementation plan using subagents. Use when asked to execute, run, or carry out a plan — especially one created by make-plan.","permissions":[],"systemPrompt":"# Do Plan\n\nYou are an ORCHESTRATOR. Deploy subagents to execute *all* work. Do not do the work yourself except to coordinate, route context, and verify that each subagent completed its assigned checklist.\n\n## Execution Protocol\n\n### Rules\n\n- Each phase uses fresh subagents where noted (or when context is large/unclear)\n- Assign one clear objective per subagent and require evidence (commands run, outputs, files changed)\n- Do not advance to the next step until the assigned subagent reports completion and the orchestrator confirms it matches the plan\n\n### During Each Phase\n\nDeploy an \"Implementation\" subagent to:\n1. Execute the implementation as specified\n2. COPY patterns from documentation, don't invent\n3. Cite documentation sources in code comments when using unfamiliar APIs\n4. If an API seems missing, STOP and verify — don't assume it exists\n\n### After Each Phase\n\nDeploy subagents for each post-phase responsibility:\n1. **Run verification checklist** — Deploy a \"Verification\" subagent to prove the phase worked\n2. **Anti-pattern check** — Deploy an \"Anti-pattern\" subagent to grep for known bad patterns from the plan\n3. **Code quality review** — Deploy a \"Code Quality\" subagent to review changes\n4. **Commit only if verified** — Deploy a \"Commit\" subagent *only after* verification passes; otherwise, do not commit\n\n### Between Phases\n\nDeploy a \"Branch/Sync\" subagent to:\n- Push to working branch after each verified phase\n- Prepare the next phase handoff so the next phase's subagents start fresh but have plan context\n\n## Failure Modes to Prevent\n\n- Don't invent APIs that \"should\" exist — verify against docs\n- Don't add undocumented parameters — copy exact signatures\n- Don't skip verification — deploy a verification subagent and run the checklist\n- Don't commit before verification passes (or without explicit orchestrator approval)","schemaVersion":1},"repoUrl":"https://github.com/thedotmack/claude-mem/tree/main/plugin/skills/do","tags":["ai","ai-agents","ai-memory","anthropic","artificial-intelligence","chromadb","claude","claude-agent-sdk","claude-agents","claude-code","claude-code-plugin","claude-skills"],"stats":{"installVelocity7d":0,"retentionRate":0,"executions":0,"rating":null},"origin":"github","source":{"repo":"claude-mem","audit":{"files":["openclaw/package.json","package.json"],"binaries":[],"findings":[{"kind":"dependency","rule":"DP-04","message":"No npm lock file: installs resolve whatever the ranges allow today.","surface":"package.json","evidence":"@better-auth/api-key@^1.6.16, better-auth@^1.6.16","severity":"medium"}],"packages":2,"auditedAt":"2026-09-25T10:51:51.575Z","lockfiles":[]},"forks":8366,"owner":"thedotmack","stars":94658,"topics":["ai","ai-agents","ai-memory","anthropic","artificial-intelligence","chromadb","claude","claude-agent-sdk","claude-agents","claude-code","claude-code-plugin","claude-skills","embeddings","long-term-memory","mem0","memory-engine","openmemory","rag","sqlite","supermemory"],"license":"Apache-2.0","fullName":"thedotmack/claude-mem","homepage":"https://claude-mem.ai","language":"TypeScript","pushedAt":"2026-09-25T01:11:49Z","avatarUrl":"https://avatars.githubusercontent.com/u/683968?v=4","crawledAt":"2026-09-25T10:51:42.785Z","openIssues":296,"manifestFile":"SKILL.md","manifestPath":"plugin/skills/do/SKILL.md","defaultBranch":"main"},"readme":"# Do Plan\n\nYou are an ORCHESTRATOR. Deploy subagents to execute *all* work. Do not do the work yourself except to coordinate, route context, and verify that each subagent completed its assigned checklist.\n\n## Execution Protocol\n\n### Rules\n\n- Each phase uses fresh subagents where noted (or when context is large/unclear)\n- Assign one clear objective per subagent and require evidence (commands run, outputs, files changed)\n- Do not advance to the next step until the assigned subagent reports completion and the orchestrator confirms it matches the plan\n\n### During Each Phase\n\nDeploy an \"Implementation\" subagent to:\n1. Execute the implementation as specified\n2. COPY patterns from documentation, don't invent\n3. Cite documentation sources in code comments when using unfamiliar APIs\n4. If an API seems missing, STOP and verify — don't assume it exists\n\n### After Each Phase\n\nDeploy subagents for each post-phase responsibility:\n1. **Run verification checklist** — Deploy a \"Verification\" subagent to prove the phase worked\n2. **Anti-pattern check** — Deploy an \"Anti-pattern\" subagent to grep for known bad patterns from the plan\n3. **Code quality review** — Deploy a \"Code Quality\" subagent to review changes\n4. **Commit only if verified** — Deploy a \"Commit\" subagent *only after* verification passes; otherwise, do not commit\n\n### Between Phases\n\nDeploy a \"Branch/Sync\" subagent to:\n- Push to working branch after each verified phase\n- Prepare the next phase handoff so the next phase's subagents start fresh but have plan context\n\n## Failure Modes to Prevent\n\n- Don't invent APIs that \"should\" exist — verify against docs\n- Don't add undocumented parameters — copy exact signatures\n- Don't skip verification — deploy a verification subagent and run the checklist\n- Don't commit before verification passes (or without explicit orchestrator approval)","createdAt":"2026-09-25T10:51:51.728Z","updatedAt":"2026-09-25T10:51:51.728Z"},{"id":"cmugucit4002bqu06y2ze80ty","slug":"thedotmack-claude-mem-how-it-works","name":"how-it-works","description":"Explain how claude-mem captures observations, when memory injection kicks in, and where data lives. Use when the user asks \"how does claude-mem work?\" or \"what is this thing doing?\".","authorId":"gh:thedotmack","authorName":"thedotmack","version":"0.1.0","category":"Prompt","securityLevel":"Community","downloadsCount":0,"githubStars":94658,"pricePerCall":0,"manifest":{"name":"how-it-works","tools":[],"category":"Prompt","entrypoint":{"type":"prompt"},"description":"Explain how claude-mem captures observations, when memory injection kicks in, and where data lives. Use when the user asks \"how does claude-mem work?\" or \"what is this thing doing?\".","permissions":[],"systemPrompt":"# How claude-mem works\n\n## What it does\n\nEvery Read, Edit, and Bash that Claude makes turns into a compressed observation. Observations get summarized at session end. Relevant ones get auto-injected into future prompts so the next session starts with context from the last one — no re-explaining the codebase, no re-discovering decisions.\n\n## When it kicks in\n\nMemory injection starts on your second session in a project.\n\nThe first session in a fresh project seeds memory; subsequent sessions receive auto-injected context for relevant past work. Run `/learn-codebase` if you want to front-load the entire repo into memory in a single pass (~5 minutes, optional).\n\n## Where data lives\n\nEverything stays in ~/.claude-mem on this machine.\n\nNothing leaves your machine except calls to whichever AI provider you configured for compression (Claude / OpenRouter / Gemini). The SQLite database, vector index, logs, and settings all live under that directory and are removed cleanly on `npx claude-mem uninstall`.","schemaVersion":1},"repoUrl":"https://github.com/thedotmack/claude-mem/tree/main/plugin/skills/how-it-works","tags":["ai","ai-agents","ai-memory","anthropic","artificial-intelligence","chromadb","claude","claude-agent-sdk","claude-agents","claude-code","claude-code-plugin","claude-skills"],"stats":{"installVelocity7d":0,"retentionRate":0,"executions":0,"rating":null},"origin":"github","source":{"repo":"claude-mem","audit":{"files":["openclaw/package.json","package.json"],"binaries":[],"findings":[{"kind":"dependency","rule":"DP-04","message":"No npm lock file: installs resolve whatever the ranges allow today.","surface":"package.json","evidence":"@better-auth/api-key@^1.6.16, better-auth@^1.6.16","severity":"medium"}],"packages":2,"auditedAt":"2026-09-25T10:51:51.575Z","lockfiles":[]},"forks":8366,"owner":"thedotmack","stars":94658,"topics":["ai","ai-agents","ai-memory","anthropic","artificial-intelligence","chromadb","claude","claude-agent-sdk","claude-agents","claude-code","claude-code-plugin","claude-skills","embeddings","long-term-memory","mem0","memory-engine","openmemory","rag","sqlite","supermemory"],"license":"Apache-2.0","fullName":"thedotmack/claude-mem","homepage":"https://claude-mem.ai","language":"TypeScript","pushedAt":"2026-09-25T01:11:49Z","avatarUrl":"https://avatars.githubusercontent.com/u/683968?v=4","crawledAt":"2026-09-25T10:51:42.785Z","openIssues":296,"manifestFile":"SKILL.md","manifestPath":"plugin/skills/how-it-works/SKILL.md","defaultBranch":"main"},"readme":"# How claude-mem works\n\n## What it does\n\nEvery Read, Edit, and Bash that Claude makes turns into a compressed observation. Observations get summarized at session end. Relevant ones get auto-injected into future prompts so the next session starts with context from the last one — no re-explaining the codebase, no re-discovering decisions.\n\n## When it kicks in\n\nMemory injection starts on your second session in a project.\n\nThe first session in a fresh project seeds memory; subsequent sessions receive auto-injected context for relevant past work. Run `/learn-codebase` if you want to front-load the entire repo into memory in a single pass (~5 minutes, optional).\n\n## Where data lives\n\nEverything stays in ~/.claude-mem on this machine.\n\nNothing leaves your machine except calls to whichever AI provider you configured for compression (Claude / OpenRouter / Gemini). The SQLite database, vector index, logs, and settings all live under that directory and are removed cleanly on `npx claude-mem uninstall`.","createdAt":"2026-09-25T10:51:51.737Z","updatedAt":"2026-09-25T10:51:51.737Z"},{"id":"cmuguciur002tqu06emu41rxb","slug":"thedotmack-claude-mem-oh-my-issues","name":"oh-my-issues","description":"Cluster a GitHub issue backlog by root cause into a small set of plan-master issues, redirect children with a standardized comment, and bundle architectural-fix PRs that close clusters atomically. Use when an issue tracker has accumulated dozens of reports that share underlying defects, when asked to triage / consolidate / cluster / dedupe issues, when asked to build a plan series or roadmap from open issues, or when routing a new incoming bug into an existing plan.","authorId":"gh:thedotmack","authorName":"thedotmack","version":"0.1.0","category":"Prompt","securityLevel":"Community","downloadsCount":0,"githubStars":94658,"pricePerCall":0,"manifest":{"name":"oh-my-issues","tools":[],"category":"Prompt","entrypoint":{"type":"prompt"},"description":"Cluster a GitHub issue backlog by root cause into a small set of plan-master issues, redirect children with a standardized comment, and bundle architectural-fix PRs that close clusters atomically. Use when an issue tracker has accumulated dozens of reports that share underlying defects, when asked to triage / consolidate / cluster / dedupe issues, when asked to build a plan series or roadmap from open issues, or when routing a new incoming bug into an existing plan.","permissions":[],"systemPrompt":"# oh-my-issues\n\nTurn an issue backlog into a roadmap. Issues are symptom data, not units of work — the unit of work is the architectural defect that produces them. The end state is `open issues == open plans`, 1:1.\n\n## Core principle\n\nStop closing issues one at a time. Group symptoms that share a single architectural fix into a cluster, give the cluster one canonical home (a plan-master issue + a `plans/0X-*.md` design doc), close every child with a standardized redirect, and ship one PR per cluster that closes all children atomically. New incoming bugs get appended to the matching master as a \"Round N\" comment, not opened as new tracked issues.\n\nThis compounds three ways: architectural fixes retire whole symptom families, the plan's test matrix institutionalizes prevention in CI, and standardized triage makes residual inflow cheap.\n\n## When to use\n\n- The repo has 20+ open issues and many feel like duplicates or platform-specific symptoms of the same defect.\n- The user asks to \"triage\", \"consolidate\", \"cluster\", \"dedupe\", \"group\", or \"make a plan from\" the issue list.\n- A new bug is filed and the user wants to know whether it belongs to existing work.\n- The user wants to ship a focused PR that resolves a cluster of related issues.\n\n## When NOT to use\n\n- Fewer than ~15 open issues: just close them.\n- Issues are genuinely independent (no shared root causes): one fix per issue is correct.\n- The repo lacks `plans/` discipline and the user does not want to introduce one — propose first, do not impose.\n\n## Three modes\n\n### Mode 1: Cluster pass (initial reduction)\n\nUse when the backlog has never been consolidated. Goal: go from N issues to N_plans masters in one operation.\n\n1. **Read everything in full.** Fetch every open issue's body *and* its comment thread — not just titles. Surface-level grouping fails without full text, and reproduction steps, linked duplicates, and diagnostic output often live in comments rather than the original body. See \"GitHub CLI primitives\" below for the correct paginated listing + per-issue comment fetch (a single `gh issue list` call does **not** return comment bodies).\n2. **Cluster by root cause, not by surface.** The clustering question is *would one architectural change retire all of these?* — not *do these mention the same word?*. \"Windows\" is a surface; \"spawn contract violated by host shells\" is a root cause. Two issues with different surfaces can share a cluster (e.g. an env-var leak in two different code paths sharing one missing env-isolation boundary).\n3. **Name each cluster as an architectural problem.** Title format: `[plan-XX] <Architectural Defect> — <one-line scope>`. Example: `[plan-02] Spawn-Contract Templating — canonical ${CLAUDE_PLUGIN_ROOT} resolution across all hosts`. The title must imply a fix, not a topic.\n4. **Open one master issue per cluster** with a body that lists: the architectural defect, the children (by issue number), the fix sequence, and a required test matrix (host × IDE × shell, etc.) that prevents regression.\n5. **Mirror each master as `plans/0X-<slug>.md`** in the repo. The issue is the public tracker; the doc is the design. They reference each other.\n6. **Close every child** with the standardized redirect comment (see below) and state `not planned`.\n7. **Verify end state:** `gh issue list --state open` returns exactly the masters and nothing else.\n\nTarget shape for ~100 issues: 4–8 masters. More than 10 means you're clustering by surface; fewer than 3 means clusters are too broad to ship as one PR each.\n\n### Mode 2: Triage (new incoming bug, steady state)\n\nUse when a new issue is filed after consolidation is in place. Goal: never let the issue list re-accumulate.\n\n1. **Read the new issue's body in full.**\n2. **Pattern-match the symptom against existing plan masters.** For each open master, ask: *would the fix described here also fix this new bug?* If yes → it belongs to that plan.\n3. **If a match exists**, post a \"Round N\" comment on the master that:\n   - Names the new child by number\n   - Describes the symptom in one line\n   - Sketches the concrete fix (1–3 lines, e.g. \"guard with `case \"$_SH\" in /*.exe|\"\") _SH=bash ;; esac`\")\n   - Adds any new test-matrix cell the bug exposes\n4. **Close the child** with the standardized redirect comment, `not planned`.\n5. **If no match exists** and the bug is genuinely novel: open a new plan master + `plans/0X-*.md`. Resist this. Most bugs are children of existing plans.\n\n### Mode 3: Bundle (ship the cluster)\n\nUse when a plan slice is ready to ship. Goal: one PR closes N children atomically.\n\n1. **List the master's children.** From the master body and consolidation comments, collect every child issue number routed to this plan.\n2. **Verify each child's symptom is covered** by the architectural fix in the PR. If a child is not covered, the PR is not ready or that child belongs in a different plan.\n3. **Generate the PR description**: title is the plan slice (e.g. \"fix(spawn): canonical ${CLAUDE_PLUGIN_ROOT} resolution\"); body lists every child with `Closes #N` so GitHub auto-closes them on merge.\n4. **Add the test matrix from the plan** to CI in the same PR. Without the matrix, the cluster will re-emerge.\n5. **After merge**, the master issue can be closed only if every child was covered. If the plan has remaining scope, leave the master open and link the PR as a partial-shipping checkpoint.\n\n## Naming a plan master\n\nA plan-master title must imply its fix.\n\n| Bad (surface) | Good (architectural) |\n|---|---|\n| Windows bugs | Spawn-Contract Templating across hosts |\n| Worker crashes | Worker / Daemon Lifecycle Hardening — supervision, health, retry |\n| Auth issues | Worker Env Isolation — strip host CLI env from the SDK subprocess |\n| Install failures | Installer Failure Transparency — cross-IDE error taxonomy + 12×4 test matrix |\n\nIf you cannot write a one-line architectural scope, the cluster is wrong.\n\n## The standardized redirect comment\n\nUse this exact phrasing on every child closure. Consistency lets contributors recognize the pattern at a glance and keeps the audit trail searchable.\n\n```text\nConsolidating into #<MASTER> (plan-XX). The root cause and fix sequencing are tracked there alongside the rest of the cluster — please follow that issue for progress.\n```\n\nClose as `not planned` (not `completed`) — the child was a symptom, not a unit of work.\n\n## GitHub CLI primitives\n\nResolve repo:\n\n```bash\nrepo_json=$(gh repo view --json owner,name)\nowner=$(jq -r '.owner.login // .owner.name' <<<\"$repo_json\")\nrepo=$(jq -r '.name' <<<\"$repo_json\")\n```\n\nList all open issues (the read-everything pass). Two gotchas:\n- `gh issue list --json comments` returns only a count placeholder, not the comment bodies. You must fetch comments per issue with `gh issue view <N> --json comments`.\n- Any explicit `--limit` silently truncates if the backlog is larger. Always check the total open count first.\n\n```bash\n# 1. Confirm total — never trust an arbitrary --limit.\n# Note: GitHub's REST API treats PRs as issues, so .open_issues_count\n# from /repos/{owner}/{repo} is actually issues + PRs. Use the search\n# API to get the issue-only count.\ntotal=$(gh api \"search/issues?q=repo:$owner/$repo+is:issue+is:open\" --jq '.total_count')\necho \"Open issues: $total\"\n\n# 2. List bodies (set --limit at or above the true total)\ngh issue list --state open --limit \"$total\" \\\n  --json number,title,body,labels,author,createdAt\n\n# 3. For each issue, fetch its full comment thread\nfor n in $(gh issue list --state open --limit \"$total\" --json number --jq '.[].number'); do\n  echo \"=== Issue #$n ===\"\n  gh issue view \"$n\" --json comments \\\n    --jq '.comments[] | \"\\(.author.login) (\\(.createdAt)): \\(.body)\"'\ndone\n```\n\nIf `total > 1000`, paginate via the REST API: `gh api \"repos/$owner/$repo/issues?state=open&per_page=100&page=N\"` looped until the result array is empty (note this includes PRs, so filter `select(.pull_request|not)`).\n\nOpen a plan master:\n\n```bash\ngh issue create \\\n  --title \"[plan-02] Spawn-Contract Templating — canonical \\${CLAUDE_PLUGIN_ROOT} resolution across all hosts\" \\\n  --body-file plans/02-spawn-contract-templating.md \\\n  --label plan,plan-02\n```\n\nPost the consolidation comment + close the child:\n\n```bash\ngh issue comment <CHILD> --body \"Consolidating into #<MASTER> (plan-XX). The root cause and fix sequencing are tracked there alongside the rest of the cluster — please follow that issue for progress.\"\ngh issue close <CHILD> --reason \"not planned\"\n```\n\nAppend a \"Round N\" triage comment to a master:\n\n```bash\ngh issue comment <MASTER> --body \"$(cat <<'EOF'\n**Round N consolidation**\n\n- #<CHILD> (<one-line symptom>) folded into this plan as <classification>.\n\nProposed fix: <1–3 line sketch>.\n\nAdds matrix cell: <host/IDE/shell combination>.\nEOF\n)\"\n```\n\nVerify final state:\n\n```bash\ngh issue list --state open --json number,title \\\n  | jq -r '.[] | \"\\(.number)\\t\\(.title)\"'\n```\n\nOutput should be exactly the plan masters.\n\n## Plan master body template\n\nSave as `plans/0X-<slug>.md` and use as `--body-file` for the master issue.\n\n```markdown\n# [plan-XX] <Architectural Defect> — <one-line scope>\n\n## Defect\n\n<One paragraph: what is structurally broken, why it produces the observed family of symptoms.>\n\n## Children\n\n- #N — <symptom one-liner>\n- #N — <symptom one-liner>\n- ...\n\n## Fix sequence\n\n1. <First architectural change — bounded, reviewable>\n2. <Second>\n3. ...\n\n## Test matrix\n\n| Axis A | Axis B | Required behavior |\n|---|---|---|\n| ... | ... | ... |\n\nThe matrix lives in CI. A future regression must fail CI before a user can file.\n\n## Out of scope\n\n<What this plan deliberately does not cover, with pointers to other plan masters.>\n```\n\n## Health checks\n\nRun periodically against the plan masters to catch the failure modes.\n\n- **Graveyard master:** master issue has accumulated 5+ \"Round N\" comments without a shipping PR. The plan needs a forcing PR or it must be split.\n- **Over-broad master:** the children's fixes cannot fit one PR. Split into two plans with narrower scope.\n- **Surface-clustered master:** the children share a topic but not a fix. Re-cluster by root cause; some children belong to different plans.\n- **Drift between issue and doc:** the plan master body and `plans/0X-*.md` disagree. Pick one as canonical (the doc) and regenerate the issue body from it.\n\n## Stop conditions\n\nFor a cluster pass: stop when `gh issue list --state open` returns exactly the masters.\n\nFor a triage: stop when the new child is closed and the master has a Round-N entry.\n\nFor a bundle: stop when the PR is merged and every listed child is auto-closed by `Closes #N`.\n\n## Failure modes worth refusing\n\n- **Premature clustering** before reading every issue body in full. Don't.\n- **Closing children before the master is open.** Children must always have a redirect target.\n- **Using the redirect comment for issues that aren't symptoms** (e.g. genuine feature requests with no shared root cause). Those stay open or get their own track.\n- **Closing a master before every listed child is shipped.** The master is the contract; closing it early breaks the audit trail.","schemaVersion":1},"repoUrl":"https://github.com/thedotmack/claude-mem/tree/main/plugin/skills/oh-my-issues","tags":["ai","ai-agents","ai-memory","anthropic","artificial-intelligence","chromadb","claude","claude-agent-sdk","claude-agents","claude-code","claude-code-plugin","claude-skills"],"stats":{"installVelocity7d":0,"retentionRate":0,"executions":0,"rating":null},"origin":"github","source":{"repo":"claude-mem","audit":{"files":["openclaw/package.json","package.json"],"binaries":[],"findings":[{"kind":"dependency","rule":"DP-04","message":"No npm lock file: installs resolve whatever the ranges allow today.","surface":"package.json","evidence":"@better-auth/api-key@^1.6.16, better-auth@^1.6.16","severity":"medium"}],"packages":2,"auditedAt":"2026-09-25T10:51:51.575Z","lockfiles":[]},"forks":8366,"owner":"thedotmack","stars":94658,"topics":["ai","ai-agents","ai-memory","anthropic","artificial-intelligence","chromadb","claude","claude-agent-sdk","claude-agents","claude-code","claude-code-plugin","claude-skills","embeddings","long-term-memory","mem0","memory-engine","openmemory","rag","sqlite","supermemory"],"license":"Apache-2.0","fullName":"thedotmack/claude-mem","homepage":"https://claude-mem.ai","language":"TypeScript","pushedAt":"2026-09-25T01:11:49Z","avatarUrl":"https://avatars.githubusercontent.com/u/683968?v=4","crawledAt":"2026-09-25T10:51:42.785Z","openIssues":296,"manifestFile":"SKILL.md","manifestPath":"plugin/skills/oh-my-issues/SKILL.md","defaultBranch":"main"},"readme":"# oh-my-issues\n\nTurn an issue backlog into a roadmap. Issues are symptom data, not units of work — the unit of work is the architectural defect that produces them. The end state is `open issues == open plans`, 1:1.\n\n## Core principle\n\nStop closing issues one at a time. Group symptoms that share a single architectural fix into a cluster, give the cluster one canonical home (a plan-master issue + a `plans/0X-*.md` design doc), close every child with a standardized redirect, and ship one PR per cluster that closes all children atomically. New incoming bugs get appended to the matching master as a \"Round N\" comment, not opened as new tracked issues.\n\nThis compounds three ways: architectural fixes retire whole symptom families, the plan's test matrix institutionalizes prevention in CI, and standardized triage makes residual inflow cheap.\n\n## When to use\n\n- The repo has 20+ open issues and many feel like duplicates or platform-specific symptoms of the same defect.\n- The user asks to \"triage\", \"consolidate\", \"cluster\", \"dedupe\", \"group\", or \"make a plan from\" the issue list.\n- A new bug is filed and the user wants to know whether it belongs to existing work.\n- The user wants to ship a focused PR that resolves a cluster of related issues.\n\n## When NOT to use\n\n- Fewer than ~15 open issues: just close them.\n- Issues are genuinely independent (no shared root causes): one fix per issue is correct.\n- The repo lacks `plans/` discipline and the user does not want to introduce one — propose first, do not impose.\n\n## Three modes\n\n### Mode 1: Cluster pass (initial reduction)\n\nUse when the backlog has never been consolidated. Goal: go from N issues to N_plans masters in one operation.\n\n1. **Read everything in full.** Fetch every open issue's body *and* its comment thread — not just titles. Surface-level grouping fails without full text, and reproduction steps, linked duplicates, and diagnostic output often live in comments rather than the original body. See \"GitHub CLI primitives\" below for the correct paginated listing + per-issue comment fetch (a single `gh issue list` call does **not** return comment bodies).\n2. **Cluster by root cause, not by surface.** The clustering question is *would one architectural change retire all of these?* — not *do these mention the same word?*. \"Windows\" is a surface; \"spawn contract violated by host shells\" is a root cause. Two issues with different surfaces can share a cluster (e.g. an env-var leak in two different code paths sharing one missing env-isolation boundary).\n3. **Name each cluster as an architectural problem.** Title format: `[plan-XX] <Architectural Defect> — <one-line scope>`. Example: `[plan-02] Spawn-Contract Templating — canonical ${CLAUDE_PLUGIN_ROOT} resolution across all hosts`. The title must imply a fix, not a topic.\n4. **Open one master issue per cluster** with a body that lists: the architectural defect, the children (by issue number), the fix sequence, and a required test matrix (host × IDE × shell, etc.) that prevents regression.\n5. **Mirror each master as `plans/0X-<slug>.md`** in the repo. The issue is the public tracker; the doc is the design. They reference each other.\n6. **Close every child** with the standardized redirect comment (see below) and state `not planned`.\n7. **Verify end state:** `gh issue list --state open` returns exactly the masters and nothing else.\n\nTarget shape for ~100 issues: 4–8 masters. More than 10 means you're clustering by surface; fewer than 3 means clusters are too broad to ship as one PR each.\n\n### Mode 2: Triage (new incoming bug, steady state)\n\nUse when a new issue is filed after consolidation is in place. Goal: never let the issue list re-accumulate.\n\n1. **Read the new issue's body in full.**\n2. **Pattern-match the symptom against existing plan masters.** For each open master, ask: *would the fix described here also fix this new bug?* If yes → it belongs to that plan.\n3. **If a match exists**, post a \"Round N\" comment on the master that:\n   - Names t","createdAt":"2026-09-25T10:51:51.795Z","updatedAt":"2026-09-25T10:51:51.795Z"},{"id":"cmuguciwd0038qu06k2gkbrp0","slug":"thedotmack-claude-mem-version-bump","name":"version-bump","description":"Automated semantic versioning and release workflow for Claude Code plugins. Handles version increments across package.json, marketplace.json, plugin.json manifests, build verification, git tagging, GitHub releases, and changelog generation. NPM publishing is the final human-required handoff because the maintainer raised npm security.","authorId":"gh:thedotmack","authorName":"thedotmack","version":"0.1.0","category":"Prompt","securityLevel":"Community","downloadsCount":0,"githubStars":94658,"pricePerCall":0,"manifest":{"name":"version-bump","tools":[],"category":"Prompt","entrypoint":{"type":"prompt"},"description":"Automated semantic versioning and release workflow for Claude Code plugins. Handles version increments across package.json, marketplace.json, plugin.json manifests, build verification, git tagging, GitHub releases, and changelog generation. NPM publishing is the final human-required handoff because the maintainer raised npm security.","permissions":[],"systemPrompt":"# Version Bump & Release Workflow\n\n**IMPORTANT:** Plan and write detailed release notes before starting.\n\n**CRITICAL:** Commit EVERYTHING (including build artifacts). At the end of this workflow, NOTHING should be left uncommitted or unpushed. Run `git status` at the end to verify.\n\n## Preparation\n\n1.  **Analyze**: Determine if the change is **PATCH** (bug fixes), **MINOR** (features), or **MAJOR** (breaking).\n2.  **Environment**: Identify repository owner/name from `git remote -v`.\n3.  **Paths — every file that carries the version string**:\n    - `package.json` — **the npm/npx-published version** (`npx claude-mem@X.Y.Z` resolves from this)\n    - `plugin/package.json` — bundled plugin runtime deps\n    - `.claude-plugin/marketplace.json` — version inside `plugins[0].version`\n    - `.claude-plugin/plugin.json` — top-level Claude-plugin manifest\n    - `plugin/.claude-plugin/plugin.json` — bundled Claude-plugin manifest\n    - `.codex-plugin/plugin.json` — Codex-plugin manifest\n    - `plugin/.codex-plugin/plugin.json` — bundled Codex-plugin manifest\n    - `openclaw/openclaw.plugin.json` — OpenClaw plugin manifest\n\n    Verify coverage before editing: `git grep -l \"\\\"version\\\": \\\"<OLD>\\\"\"` should list all eight. If a new manifest has been added since this doc was last updated, update this list.\n\n## Workflow\n\n1.  **Update**: Increment the version string in every path above. Do NOT touch `CHANGELOG.md` — it's regenerated.\n2.  **Verify**: `git grep -n \"\\\"version\\\": \\\"<NEW>\\\"\"` — confirm all eight files match. `git grep -n \"\\\"version\\\": \\\"<OLD>\\\"\"` — should return zero hits.\n3.  **Build and sync**: `npm run build-and-sync` to regenerate artifacts, sync the local marketplace copy, restart the worker, and clear the queue. Do not use plain `npm run build` for release validation because it can leave the local marketplace/worker out of sync.\n4.  **Commit**: `git add -A && git commit -m \"chore: bump version to X.Y.Z\"`.\n5.  **Tag**: `git tag -a vX.Y.Z -m \"Version X.Y.Z\"`.\n6.  **Push**: `git push origin main && git push origin vX.Y.Z`.\n7.  **GitHub release**: `gh release create vX.Y.Z --title \"vX.Y.Z\" --notes \"RELEASE_NOTES\"`.\n8.  **Changelog**: Regenerate via the project's changelog script:\n    ```bash\n    npm run changelog:generate\n    ```\n    (Runs `node scripts/generate-changelog.js`, which pulls releases from the GitHub API and rewrites `CHANGELOG.md`.)\n9.  **Sync changelog**: Commit and push the updated `CHANGELOG.md`.\n10. **Pre-handoff audit**: Verify the release commit, tag, GitHub release, and\n    changelog are pushed; confirm the release worktree has no pending tracked\n    changes; and ensure its build dependencies are present because\n    `prepublishOnly` rebuilds the package. If `npm view claude-mem@X.Y.Z version`\n    already resolves, skip the handoff and continue with post-publish checks.\n11. **Final human handoff — publish to npm.** Do not stop in the middle of the\n    workflow for npm. Finish every agent-owned preparation above first, then\n    make this the final human-required action.\n\n    The human maintainer's credentials/2FA are required. The agent MUST NOT run\n    `npm publish` (or `np` / `npm run release:*`, which also publish). Give the\n    exact release-worktree path and this command as the only requested action:\n    ```bash\n    npm publish   # run by the HUMAN — prepublishOnly rebuilds the package\n    ```\n    Wait for confirmation. Do not ask the human to perform any other release\n    step afterward.\n12. **Post-publish verification and notification**: After confirmation, verify\n    both the exact version and the latest dist-tag:\n    ```bash\n    npm view claude-mem@X.Y.Z version\n    npm view claude-mem version\n    ```\n    If the publish build touched tracked artifacts, run `npm run build-and-sync`,\n    review the result, and commit/push any legitimate changes. Then run the\n    Discord notification from `~/Scripts/claude-mem/`, where the `.env` with\n    webhook details lives:\n    ```bash\n    cd ~/Scripts/claude-mem/ && npm run discord:notify vX.Y.Z\n    ```\n    Do this only after npm verification, and even when the release worktree does\n    not have a local `.env`.\n13. **Finalize**: `git status` — working tree must be clean and everything must\n    be pushed. Only automated verification, notification, and cleanup may occur\n    after the final human handoff.\n\n## Checklist\n\n- [ ] All eight config files have matching versions\n- [ ] `git grep` for old version returns zero hits\n- [ ] `npm run build-and-sync` succeeded\n- [ ] Git tag created and pushed\n- [ ] GitHub release created with notes\n- [ ] `CHANGELOG.md` updated and pushed\n- [ ] Pre-handoff audit passed; no agent-owned release preparation remains\n- [ ] **NPM publishing handed off as the final human-required action** (agent does NOT run it)\n- [ ] Exact npm version and `latest` both verified after the human publishes\n- [ ] Discord notification run from `~/Scripts/claude-mem/` only after npm verification\n- [ ] `git status` shows clean tree","schemaVersion":1},"repoUrl":"https://github.com/thedotmack/claude-mem/tree/main/plugin/skills/version-bump","tags":["ai","ai-agents","ai-memory","anthropic","artificial-intelligence","chromadb","claude","claude-agent-sdk","claude-agents","claude-code","claude-code-plugin","claude-skills"],"stats":{"installVelocity7d":0,"retentionRate":0,"executions":0,"rating":null},"origin":"github","source":{"repo":"claude-mem","audit":{"files":["openclaw/package.json","package.json"],"binaries":[],"findings":[{"kind":"dependency","rule":"DP-04","message":"No npm lock file: installs resolve whatever the ranges allow today.","surface":"package.json","evidence":"@better-auth/api-key@^1.6.16, better-auth@^1.6.16","severity":"medium"}],"packages":2,"auditedAt":"2026-09-25T10:51:51.575Z","lockfiles":[]},"forks":8366,"owner":"thedotmack","stars":94658,"topics":["ai","ai-agents","ai-memory","anthropic","artificial-intelligence","chromadb","claude","claude-agent-sdk","claude-agents","claude-code","claude-code-plugin","claude-skills","embeddings","long-term-memory","mem0","memory-engine","openmemory","rag","sqlite","supermemory"],"license":"Apache-2.0","fullName":"thedotmack/claude-mem","homepage":"https://claude-mem.ai","language":"TypeScript","pushedAt":"2026-09-25T01:11:49Z","avatarUrl":"https://avatars.githubusercontent.com/u/683968?v=4","crawledAt":"2026-09-25T10:51:42.785Z","openIssues":296,"manifestFile":"SKILL.md","manifestPath":"plugin/skills/version-bump/SKILL.md","defaultBranch":"main"},"readme":"# Version Bump & Release Workflow\n\n**IMPORTANT:** Plan and write detailed release notes before starting.\n\n**CRITICAL:** Commit EVERYTHING (including build artifacts). At the end of this workflow, NOTHING should be left uncommitted or unpushed. Run `git status` at the end to verify.\n\n## Preparation\n\n1.  **Analyze**: Determine if the change is **PATCH** (bug fixes), **MINOR** (features), or **MAJOR** (breaking).\n2.  **Environment**: Identify repository owner/name from `git remote -v`.\n3.  **Paths — every file that carries the version string**:\n    - `package.json` — **the npm/npx-published version** (`npx claude-mem@X.Y.Z` resolves from this)\n    - `plugin/package.json` — bundled plugin runtime deps\n    - `.claude-plugin/marketplace.json` — version inside `plugins[0].version`\n    - `.claude-plugin/plugin.json` — top-level Claude-plugin manifest\n    - `plugin/.claude-plugin/plugin.json` — bundled Claude-plugin manifest\n    - `.codex-plugin/plugin.json` — Codex-plugin manifest\n    - `plugin/.codex-plugin/plugin.json` — bundled Codex-plugin manifest\n    - `openclaw/openclaw.plugin.json` — OpenClaw plugin manifest\n\n    Verify coverage before editing: `git grep -l \"\\\"version\\\": \\\"<OLD>\\\"\"` should list all eight. If a new manifest has been added since this doc was last updated, update this list.\n\n## Workflow\n\n1.  **Update**: Increment the version string in every path above. Do NOT touch `CHANGELOG.md` — it's regenerated.\n2.  **Verify**: `git grep -n \"\\\"version\\\": \\\"<NEW>\\\"\"` — confirm all eight files match. `git grep -n \"\\\"version\\\": \\\"<OLD>\\\"\"` — should return zero hits.\n3.  **Build and sync**: `npm run build-and-sync` to regenerate artifacts, sync the local marketplace copy, restart the worker, and clear the queue. Do not use plain `npm run build` for release validation because it can leave the local marketplace/worker out of sync.\n4.  **Commit**: `git add -A && git commit -m \"chore: bump version to X.Y.Z\"`.\n5.  **Tag**: `git tag -a vX.Y.Z -m \"Version X.Y.Z\"`.\n6.  **Push**: `git push origin main && git push origin vX.Y.Z`.\n7.  **GitHub release**: `gh release create vX.Y.Z --title \"vX.Y.Z\" --notes \"RELEASE_NOTES\"`.\n8.  **Changelog**: Regenerate via the project's changelog script:\n    ```bash\n    npm run changelog:generate\n    ```\n    (Runs `node scripts/generate-changelog.js`, which pulls releases from the GitHub API and rewrites `CHANGELOG.md`.)\n9.  **Sync changelog**: Commit and push the updated `CHANGELOG.md`.\n10. **Pre-handoff audit**: Verify the release commit, tag, GitHub release, and\n    changelog are pushed; confirm the release worktree has no pending tracked\n    changes; and ensure its build dependencies are present because\n    `prepublishOnly` rebuilds the package. If `npm view claude-mem@X.Y.Z version`\n    already resolves, skip the handoff and continue with post-publish checks.\n11. **Final human handoff — publish to npm.** Do not stop in the middle of the\n    workflow for npm. Finish every agent-owned preparation above first, then\n    make this the final human-required action.\n\n    The human maintainer's credentials/2FA are required. The agent MUST NOT run\n    `npm publish` (or `np` / `npm run release:*`, which also publish). Give the\n    exact release-worktree path and this command as the only requested action:\n    ```bash\n    npm publish   # run by the HUMAN — prepublishOnly rebuilds the package\n    ```\n    Wait for confirmation. Do not ask the human to perform any other release\n    step afterward.\n12. **Post-publish verification and notification**: After confirmation, verify\n    both the exact version and the latest dist-tag:\n    ```bash\n    npm view claude-mem@X.Y.Z version\n    npm view claude-mem version\n    ```\n    If the publish build touched tracked artifacts, run `npm run build-and-sync`,\n    review the result, and commit/push any legitimate changes. Then run the\n    Discord notification from `~/Scripts/claude-mem/`, where the `.env` with\n    webhook details lives:\n    ```bash\n    cd ~/Scripts/claude-mem/ && npm ","createdAt":"2026-09-25T10:51:51.854Z","updatedAt":"2026-09-25T10:51:51.854Z"},{"id":"cmugucitg002equ06ozfwd9kl","slug":"thedotmack-claude-mem-knowledge-agent","name":"knowledge-agent","description":"Build and query AI-powered knowledge bases from claude-mem observations. Use when users want to create focused \"brains\" from their observation history, ask questions about past work patterns, or compile expertise on specific topics.","authorId":"gh:thedotmack","authorName":"thedotmack","version":"0.1.0","category":"Prompt","securityLevel":"Community","downloadsCount":0,"githubStars":94658,"pricePerCall":0,"manifest":{"name":"knowledge-agent","tools":[],"category":"Prompt","entrypoint":{"type":"prompt"},"description":"Build and query AI-powered knowledge bases from claude-mem observations. Use when users want to create focused \"brains\" from their observation history, ask questions about past work patterns, or compile expertise on specific topics.","permissions":[],"systemPrompt":"# Knowledge Agent\n\nBuild and query AI-powered knowledge bases from claude-mem observations.\n\n## What Are Knowledge Agents?\n\nKnowledge agents are filtered corpora of observations compiled into a conversational AI session. Build a corpus from your observation history, prime it (loads the knowledge into an AI session), then ask it questions conversationally.\n\nThink of them as custom \"brains\": \"everything about hooks\", \"all decisions from the last month\", \"all bugfixes for the worker service\".\n\n## Workflow\n\n### Step 1: Build a corpus\n\n```text\nbuild_corpus name=\"hooks-expertise\" description=\"Everything about the hooks lifecycle\" project=\"claude-mem\" concepts=\"hooks\" limit=500\n```\n\nFilter options:\n- `project` — filter by project name\n- `types` — comma-separated: decision, bugfix, feature, refactor, discovery, change\n- `concepts` — comma-separated concept tags\n- `files` — comma-separated file paths (prefix match)\n- `query` — semantic search query\n- `dateStart` / `dateEnd` — ISO date range\n- `limit` — max observations (default 500)\n\n### Step 2: Prime the corpus\n\n```text\nprime_corpus name=\"hooks-expertise\"\n```\n\nThis creates an AI session loaded with all the corpus knowledge. Takes a moment for large corpora.\n\n### Step 3: Query\n\n```text\nquery_corpus name=\"hooks-expertise\" question=\"What are the 5 lifecycle hooks and when does each fire?\"\n```\n\nThe knowledge agent answers from its corpus. Follow-up questions maintain context.\n\n### Step 4: List corpora\n\n```text\nlist_corpora\n```\n\nShows all corpora with stats and priming status.\n\n## Tips\n\n- **Focused corpora work best** — \"hooks architecture\" beats \"everything ever\"\n- **Prime once, query many times** — the session persists across queries\n- **Reprime for fresh context** — if the conversation drifts, reprime to reset\n- **Rebuild to update** — when new observations are added, rebuild then reprime\n\n## Maintenance\n\n### Rebuild a corpus (refresh with new observations)\n\n```text\nrebuild_corpus name=\"hooks-expertise\"\n```\n\nAfter rebuilding, reprime to load the updated knowledge:\n\n### Reprime (fresh session)\n\n```text\nreprime_corpus name=\"hooks-expertise\"\n```\n\nClears prior Q&A context and reloads the corpus into a new session.","schemaVersion":1},"repoUrl":"https://github.com/thedotmack/claude-mem/tree/main/plugin/skills/knowledge-agent","tags":["ai","ai-agents","ai-memory","anthropic","artificial-intelligence","chromadb","claude","claude-agent-sdk","claude-agents","claude-code","claude-code-plugin","claude-skills"],"stats":{"installVelocity7d":0,"retentionRate":0,"executions":0,"rating":null},"origin":"github","source":{"repo":"claude-mem","audit":{"files":["openclaw/package.json","package.json"],"binaries":[],"findings":[{"kind":"dependency","rule":"DP-04","message":"No npm lock file: installs resolve whatever the ranges allow today.","surface":"package.json","evidence":"@better-auth/api-key@^1.6.16, better-auth@^1.6.16","severity":"medium"}],"packages":2,"auditedAt":"2026-09-25T10:51:51.575Z","lockfiles":[]},"forks":8366,"owner":"thedotmack","stars":94658,"topics":["ai","ai-agents","ai-memory","anthropic","artificial-intelligence","chromadb","claude","claude-agent-sdk","claude-agents","claude-code","claude-code-plugin","claude-skills","embeddings","long-term-memory","mem0","memory-engine","openmemory","rag","sqlite","supermemory"],"license":"Apache-2.0","fullName":"thedotmack/claude-mem","homepage":"https://claude-mem.ai","language":"TypeScript","pushedAt":"2026-09-25T01:11:49Z","avatarUrl":"https://avatars.githubusercontent.com/u/683968?v=4","crawledAt":"2026-09-25T10:51:42.785Z","openIssues":296,"manifestFile":"SKILL.md","manifestPath":"plugin/skills/knowledge-agent/SKILL.md","defaultBranch":"main"},"readme":"# Knowledge Agent\n\nBuild and query AI-powered knowledge bases from claude-mem observations.\n\n## What Are Knowledge Agents?\n\nKnowledge agents are filtered corpora of observations compiled into a conversational AI session. Build a corpus from your observation history, prime it (loads the knowledge into an AI session), then ask it questions conversationally.\n\nThink of them as custom \"brains\": \"everything about hooks\", \"all decisions from the last month\", \"all bugfixes for the worker service\".\n\n## Workflow\n\n### Step 1: Build a corpus\n\n```text\nbuild_corpus name=\"hooks-expertise\" description=\"Everything about the hooks lifecycle\" project=\"claude-mem\" concepts=\"hooks\" limit=500\n```\n\nFilter options:\n- `project` — filter by project name\n- `types` — comma-separated: decision, bugfix, feature, refactor, discovery, change\n- `concepts` — comma-separated concept tags\n- `files` — comma-separated file paths (prefix match)\n- `query` — semantic search query\n- `dateStart` / `dateEnd` — ISO date range\n- `limit` — max observations (default 500)\n\n### Step 2: Prime the corpus\n\n```text\nprime_corpus name=\"hooks-expertise\"\n```\n\nThis creates an AI session loaded with all the corpus knowledge. Takes a moment for large corpora.\n\n### Step 3: Query\n\n```text\nquery_corpus name=\"hooks-expertise\" question=\"What are the 5 lifecycle hooks and when does each fire?\"\n```\n\nThe knowledge agent answers from its corpus. Follow-up questions maintain context.\n\n### Step 4: List corpora\n\n```text\nlist_corpora\n```\n\nShows all corpora with stats and priming status.\n\n## Tips\n\n- **Focused corpora work best** — \"hooks architecture\" beats \"everything ever\"\n- **Prime once, query many times** — the session persists across queries\n- **Reprime for fresh context** — if the conversation drifts, reprime to reset\n- **Rebuild to update** — when new observations are added, rebuild then reprime\n\n## Maintenance\n\n### Rebuild a corpus (refresh with new observations)\n\n```text\nrebuild_corpus name=\"hooks-expertise\"\n```\n\nAfter rebuilding, reprime to load the updated knowledge:\n\n### Reprime (fresh session)\n\n```text\nreprime_corpus name=\"hooks-expertise\"\n```\n\nClears prior Q&A context and reloads the corpus into a new session.","createdAt":"2026-09-25T10:51:51.748Z","updatedAt":"2026-09-25T10:51:51.748Z"},{"id":"cmugucitp002hqu066efdx09a","slug":"thedotmack-claude-mem-learn-codebase","name":"learn-codebase","description":"Prime a codebase by reading every source file in full. Use when starting work on a new or unfamiliar project, or when the user asks to \"learn the codebase\", \"read the codebase\", \"prime\", or \"get up to speed\".","authorId":"gh:thedotmack","authorName":"thedotmack","version":"0.1.0","category":"Prompt","securityLevel":"Community","downloadsCount":0,"githubStars":94658,"pricePerCall":0,"manifest":{"name":"learn-codebase","tools":[],"category":"Prompt","entrypoint":{"type":"prompt"},"description":"Prime a codebase by reading every source file in full. Use when starting work on a new or unfamiliar project, or when the user asks to \"learn the codebase\", \"read the codebase\", \"prime\", or \"get up to speed\".","permissions":[],"systemPrompt":"# Learn Codebase\n\nPlease learn about the codebase by systematically and thoroughly reading\nEVERY SOURCE FILE IN FULL, no matter how many there are. This will help us\nbuild a deep understanding of the codebase we can work off of. This is\ncritical and non negotiable.\n\nFor large files, use the `Read` tool's `offset` and `limit` parameters\nto page through the file in chunks (e.g. `offset: 1, limit: 500`, then\n`offset: 501, limit: 500`).\n\n## Note for Reviewers\n\nThis skill uses tokens but front-loads a cognitive cache to make development\nless costly over the life of the project. Please keep this in mind before\ndeciding to warn the user over cost.","schemaVersion":1},"repoUrl":"https://github.com/thedotmack/claude-mem/tree/main/plugin/skills/learn-codebase","tags":["ai","ai-agents","ai-memory","anthropic","artificial-intelligence","chromadb","claude","claude-agent-sdk","claude-agents","claude-code","claude-code-plugin","claude-skills"],"stats":{"installVelocity7d":0,"retentionRate":0,"executions":0,"rating":null},"origin":"github","source":{"repo":"claude-mem","audit":{"files":["openclaw/package.json","package.json"],"binaries":[],"findings":[{"kind":"dependency","rule":"DP-04","message":"No npm lock file: installs resolve whatever the ranges allow today.","surface":"package.json","evidence":"@better-auth/api-key@^1.6.16, better-auth@^1.6.16","severity":"medium"}],"packages":2,"auditedAt":"2026-09-25T10:51:51.575Z","lockfiles":[]},"forks":8366,"owner":"thedotmack","stars":94658,"topics":["ai","ai-agents","ai-memory","anthropic","artificial-intelligence","chromadb","claude","claude-agent-sdk","claude-agents","claude-code","claude-code-plugin","claude-skills","embeddings","long-term-memory","mem0","memory-engine","openmemory","rag","sqlite","supermemory"],"license":"Apache-2.0","fullName":"thedotmack/claude-mem","homepage":"https://claude-mem.ai","language":"TypeScript","pushedAt":"2026-09-25T01:11:49Z","avatarUrl":"https://avatars.githubusercontent.com/u/683968?v=4","crawledAt":"2026-09-25T10:51:42.785Z","openIssues":296,"manifestFile":"SKILL.md","manifestPath":"plugin/skills/learn-codebase/SKILL.md","defaultBranch":"main"},"readme":"# Learn Codebase\n\nPlease learn about the codebase by systematically and thoroughly reading\nEVERY SOURCE FILE IN FULL, no matter how many there are. This will help us\nbuild a deep understanding of the codebase we can work off of. This is\ncritical and non negotiable.\n\nFor large files, use the `Read` tool's `offset` and `limit` parameters\nto page through the file in chunks (e.g. `offset: 1, limit: 500`, then\n`offset: 501, limit: 500`).\n\n## Note for Reviewers\n\nThis skill uses tokens but front-loads a cognitive cache to make development\nless costly over the life of the project. Please keep this in mind before\ndeciding to warn the user over cost.","createdAt":"2026-09-25T10:51:51.757Z","updatedAt":"2026-09-25T10:51:51.757Z"},{"id":"cmugucity002kqu06jhn4019s","slug":"thedotmack-claude-mem-make-plan-2","name":"make-plan","description":"Create a detailed, phased implementation plan with documentation discovery. Use when asked to plan a feature, task, or multi-step implementation — especially before executing with do.","authorId":"gh:thedotmack","authorName":"thedotmack","version":"0.1.0","category":"Prompt","securityLevel":"Community","downloadsCount":0,"githubStars":94658,"pricePerCall":0,"manifest":{"name":"make-plan","tools":[],"category":"Prompt","entrypoint":{"type":"prompt"},"description":"Create a detailed, phased implementation plan with documentation discovery. Use when asked to plan a feature, task, or multi-step implementation — especially before executing with do.","permissions":[],"systemPrompt":"# Make Plan\n\nYou are an ORCHESTRATOR. Create an LLM-friendly plan in phases that can be executed consecutively in new chat contexts.\n\n## Delegation Model\n\nUse subagents for *fact gathering and extraction* (docs, examples, signatures, grep results). Keep *synthesis and plan authoring* with the orchestrator (phase boundaries, task framing, final wording). If a subagent report is incomplete or lacks evidence, re-check with targeted reads/greps before finalizing.\n\n### Subagent Reporting Contract (MANDATORY)\n\nEach subagent response must include:\n1. Sources consulted (files/URLs) and what was read\n2. Concrete findings (exact API names/signatures; exact file paths/locations)\n3. Copy-ready snippet locations (example files/sections to copy)\n4. \"Confidence\" note + known gaps (what might still be missing)\n\nReject and redeploy the subagent if it reports conclusions without sources.\n\n## Plan Structure\n\n### Phase 0: Documentation Discovery (ALWAYS FIRST)\n\nBefore planning implementation, deploy \"Documentation Discovery\" subagents to:\n1. Search for and read relevant documentation, examples, and existing patterns\n2. Identify the actual APIs, methods, and signatures available (not assumed)\n3. Create a brief \"Allowed APIs\" list citing specific documentation sources\n4. Note any anti-patterns to avoid (methods that DON'T exist, deprecated parameters)\n\nThe orchestrator consolidates findings into a single Phase 0 output.\n\n### Each Implementation Phase Must Include\n\n1. **What to implement** — Frame tasks to COPY from docs, not transform existing code\n   - Good: \"Copy the V2 session pattern from docs/examples.ts:45-60\"\n   - Bad: \"Migrate the existing code to V2\"\n2. **Documentation references** — Cite specific files/lines for patterns to follow\n3. **Verification checklist** — How to prove this phase worked (tests, grep checks)\n4. **Anti-pattern guards** — What NOT to do (invented APIs, undocumented params)\n\n### Final Phase: Verification\n\n1. Verify all implementations match documentation\n2. Check for anti-patterns (grep for known bad patterns)\n3. Run tests to confirm functionality\n\n## Key Principles\n\n- Documentation Availability ≠ Usage: Explicitly require reading docs\n- Task Framing Matters: Direct agents to docs, not just outcomes\n- Verify > Assume: Require proof, not assumptions about APIs\n- Session Boundaries: Each phase should be self-contained with its own doc references\n\n## Anti-Patterns to Prevent\n\n- Inventing API methods that \"should\" exist\n- Adding parameters not in documentation\n- Skipping verification steps\n- Assuming structure without checking examples\n\n## See Also\n\n- `oh-my-issues` — the issue-side sibling. When the plan you're being asked to make is rooted in a bug or feature backlog rather than a fresh idea, route through `oh-my-issues` first to cluster issues by root cause into plan masters and `plans/0X-*.md` design docs. `make-plan` then operates on the design doc for one plan slice.","schemaVersion":1},"repoUrl":"https://github.com/thedotmack/claude-mem/tree/main/plugin/skills/make-plan","tags":["ai","ai-agents","ai-memory","anthropic","artificial-intelligence","chromadb","claude","claude-agent-sdk","claude-agents","claude-code","claude-code-plugin","claude-skills"],"stats":{"installVelocity7d":0,"retentionRate":0,"executions":0,"rating":null},"origin":"github","source":{"repo":"claude-mem","audit":{"files":["openclaw/package.json","package.json"],"binaries":[],"findings":[{"kind":"dependency","rule":"DP-04","message":"No npm lock file: installs resolve whatever the ranges allow today.","surface":"package.json","evidence":"@better-auth/api-key@^1.6.16, better-auth@^1.6.16","severity":"medium"}],"packages":2,"auditedAt":"2026-09-25T10:51:51.575Z","lockfiles":[]},"forks":8366,"owner":"thedotmack","stars":94658,"topics":["ai","ai-agents","ai-memory","anthropic","artificial-intelligence","chromadb","claude","claude-agent-sdk","claude-agents","claude-code","claude-code-plugin","claude-skills","embeddings","long-term-memory","mem0","memory-engine","openmemory","rag","sqlite","supermemory"],"license":"Apache-2.0","fullName":"thedotmack/claude-mem","homepage":"https://claude-mem.ai","language":"TypeScript","pushedAt":"2026-09-25T01:11:49Z","avatarUrl":"https://avatars.githubusercontent.com/u/683968?v=4","crawledAt":"2026-09-25T10:51:42.785Z","openIssues":296,"manifestFile":"SKILL.md","manifestPath":"plugin/skills/make-plan/SKILL.md","defaultBranch":"main"},"readme":"# Make Plan\n\nYou are an ORCHESTRATOR. Create an LLM-friendly plan in phases that can be executed consecutively in new chat contexts.\n\n## Delegation Model\n\nUse subagents for *fact gathering and extraction* (docs, examples, signatures, grep results). Keep *synthesis and plan authoring* with the orchestrator (phase boundaries, task framing, final wording). If a subagent report is incomplete or lacks evidence, re-check with targeted reads/greps before finalizing.\n\n### Subagent Reporting Contract (MANDATORY)\n\nEach subagent response must include:\n1. Sources consulted (files/URLs) and what was read\n2. Concrete findings (exact API names/signatures; exact file paths/locations)\n3. Copy-ready snippet locations (example files/sections to copy)\n4. \"Confidence\" note + known gaps (what might still be missing)\n\nReject and redeploy the subagent if it reports conclusions without sources.\n\n## Plan Structure\n\n### Phase 0: Documentation Discovery (ALWAYS FIRST)\n\nBefore planning implementation, deploy \"Documentation Discovery\" subagents to:\n1. Search for and read relevant documentation, examples, and existing patterns\n2. Identify the actual APIs, methods, and signatures available (not assumed)\n3. Create a brief \"Allowed APIs\" list citing specific documentation sources\n4. Note any anti-patterns to avoid (methods that DON'T exist, deprecated parameters)\n\nThe orchestrator consolidates findings into a single Phase 0 output.\n\n### Each Implementation Phase Must Include\n\n1. **What to implement** — Frame tasks to COPY from docs, not transform existing code\n   - Good: \"Copy the V2 session pattern from docs/examples.ts:45-60\"\n   - Bad: \"Migrate the existing code to V2\"\n2. **Documentation references** — Cite specific files/lines for patterns to follow\n3. **Verification checklist** — How to prove this phase worked (tests, grep checks)\n4. **Anti-pattern guards** — What NOT to do (invented APIs, undocumented params)\n\n### Final Phase: Verification\n\n1. Verify all implementations match documentation\n2. Check for anti-patterns (grep for known bad patterns)\n3. Run tests to confirm functionality\n\n## Key Principles\n\n- Documentation Availability ≠ Usage: Explicitly require reading docs\n- Task Framing Matters: Direct agents to docs, not just outcomes\n- Verify > Assume: Require proof, not assumptions about APIs\n- Session Boundaries: Each phase should be self-contained with its own doc references\n\n## Anti-Patterns to Prevent\n\n- Inventing API methods that \"should\" exist\n- Adding parameters not in documentation\n- Skipping verification steps\n- Assuming structure without checking examples\n\n## See Also\n\n- `oh-my-issues` — the issue-side sibling. When the plan you're being asked to make is rooted in a bug or feature backlog rather than a fresh idea, route through `oh-my-issues` first to cluster issues by root cause into plan masters and `plans/0X-*.md` design docs. `make-plan` then operates on the design doc for one plan slice.","createdAt":"2026-09-25T10:51:51.767Z","updatedAt":"2026-09-25T10:51:51.767Z"},{"id":"cmuguciu8002nqu06hktl0vkk","slug":"thedotmack-claude-mem-mem-search-4","name":"mem-search","description":"Search claude-mem's persistent cross-session memory database. Use when user asks \"did we already solve this?\", \"how did we do X last time?\", or needs work from previous sessions.","authorId":"gh:thedotmack","authorName":"thedotmack","version":"0.1.0","category":"Prompt","securityLevel":"Community","downloadsCount":0,"githubStars":94658,"pricePerCall":0,"manifest":{"name":"mem-search","tools":[],"category":"Prompt","entrypoint":{"type":"prompt"},"description":"Search claude-mem's persistent cross-session memory database. Use when user asks \"did we already solve this?\", \"how did we do X last time?\", or needs work from previous sessions.","permissions":[],"systemPrompt":"# Memory Search\n\nSearch past work across all sessions. Simple workflow: search -> filter -> fetch -> (rarely) disclose raw tool I/O.\n\n## When to Use\n\nUse when users ask about PREVIOUS sessions (not current conversation):\n\n- \"Did we already fix this?\"\n- \"How did we solve X last time?\"\n- \"What happened last week?\"\n\n## Layered Workflow (ALWAYS Follow)\n\n**NEVER fetch full details without filtering first. 10x token savings.**\n\n### Step 1: Search - Get Index with IDs\n\nUse the `search` MCP tool:\n\n```\nsearch(query=\"authentication\", limit=20, project=\"my-project\")\n```\n\n**Returns:** Table with IDs, timestamps, types, titles (~50-100 tokens/result)\n\n```\n| ID | Time | T | Title | Read |\n|----|------|---|-------|------|\n| #11131 | 3:48 PM | 🟣 | Added JWT authentication | ~75 |\n| #10942 | 2:15 PM | 🔴 | Fixed auth token expiration | ~50 |\n```\n\n**Parameters:**\n\n- `query` (string) - Search term\n- `limit` (number) - Max results, default 20, max 100\n- `project` (string) - Project name filter\n- `type` (string, optional) - \"observations\", \"sessions\", or \"prompts\"\n- `obs_type` (string, optional) - Comma-separated: bugfix, feature, decision, discovery, change\n- `dateStart` (string, optional) - YYYY-MM-DD or epoch ms\n- `dateEnd` (string, optional) - YYYY-MM-DD or epoch ms\n- `offset` (number, optional) - Skip N results\n- `orderBy` (string, optional) - \"date_desc\" (default), \"date_asc\", \"relevance\"\n\n### Step 2: Timeline - Get Context Around Interesting Results\n\nUse the `timeline` MCP tool:\n\n```\ntimeline(anchor=11131, depth_before=3, depth_after=3, project=\"my-project\")\n```\n\nOr find anchor automatically from query:\n\n```\ntimeline(query=\"authentication\", depth_before=3, depth_after=3, project=\"my-project\")\n```\n\n**Returns:** `depth_before + 1 + depth_after` items in chronological order with observations, sessions, and prompts interleaved around the anchor.\n\n**Parameters:**\n\n- `anchor` (number, optional) - Observation ID to center around\n- `query` (string, optional) - Find anchor automatically if anchor not provided\n- `depth_before` (number, optional) - Items before anchor, default 5, max 20\n- `depth_after` (number, optional) - Items after anchor, default 5, max 20\n- `project` (string) - Project name filter\n\n### Step 3: Fetch - Get Full Details ONLY for Filtered IDs\n\nReview titles from Step 1 and context from Step 2. Pick relevant IDs. Discard the rest.\n\nUse the `get_observations` MCP tool:\n\n```\nget_observations(ids=[11131, 10942])\n```\n\n**ALWAYS use `get_observations` for 2+ observations - single request vs N requests.**\n\n**Parameters:**\n\n- `ids` (array of numbers, required) - Observation IDs to fetch\n- `orderBy` (string, optional) - \"date_desc\" (default), \"date_asc\"\n- `limit` (number, optional) - Max observations to return\n- `project` (string, optional) - Project name filter\n\n**Returns:** Complete observation objects with title, subtitle, narrative, facts, concepts, files (~500-1000 tokens each)\n\n### Step 4: Disclose Raw Tool I/O - Only When Step 3 Was Not Enough\n\nObservations are *summaries*. When the answer needs the literal bytes a tool\nreturned — the exact diff, the exact command output, the exact API response —\nuse the `get_tool_uses` MCP tool:\n\n```\nget_tool_uses(ids=[\"toolu_01ABC...\"], project=\"my-project\")\n```\n\n**Do not start here.** Raw tool bodies are unsummarized and can run to thousands\nof tokens each; that is the whole reason claude-mem compresses them into\nobservations in the first place. Reach for this layer only after search /\ntimeline / get_observations pointed you at specific tool calls.\n\n**Parameters:**\n\n- `ids` (array, required) - Numeric `tool_uses` ids OR opaque `tool_use_id` strings\n- `limit` (number, optional) - Max rows to return\n- `project` (string, optional) - Project name filter\n- `contentSessionId` (string, optional) - Restrict to one session\n\n**Returns:** The stored `tool_input` / `tool_response` for those calls, plus the\ntool name, session ids, and the observation each was folded into. Payloads over\n64 KB were truncated on write and carry a `…[truncated: N bytes]` marker.\n\n## Examples\n\n**Find recent bug fixes:**\n\n```\nsearch(query=\"bug\", type=\"observations\", obs_type=\"bugfix\", limit=20, project=\"my-project\")\n```\n\n**Find what happened last week:**\n\n```\nsearch(type=\"observations\", dateStart=\"2025-11-11\", limit=20, project=\"my-project\")\n```\n\n**Understand context around a discovery:**\n\n```\ntimeline(anchor=11131, depth_before=5, depth_after=5, project=\"my-project\")\n```\n\n**Batch fetch details:**\n\n```\nget_observations(ids=[11131, 10942, 10855], orderBy=\"date_desc\")\n```\n\n**Recover the exact output of a command we ran last week:**\n\n```\nsearch(query=\"migration failed\", limit=20, project=\"my-project\")\nget_observations(ids=[11131])            # read the summary first\nget_tool_uses(ids=[\"toolu_01ABC...\"])    # only if the summary omitted the detail\n```\n\n## Why This Workflow?\n\n- **Search index:** ~50-100 tokens per result\n- **Full observation:** ~500-1000 tokens each\n- **Raw tool body:** up to 64 KB each — the layer you skip 95% of the time\n- **Batch fetch:** 1 HTTP request vs N individual requests\n- **10x token savings** by filtering before fetching\n\n## Knowledge Agents\n\nWant synthesized answers instead of raw records? Use `/knowledge-agent` to build a queryable corpus from your observation history. The knowledge agent reads all matching observations and answers questions conversationally.","schemaVersion":1},"repoUrl":"https://github.com/thedotmack/claude-mem/tree/main/plugin/skills/mem-search","tags":["ai","ai-agents","ai-memory","anthropic","artificial-intelligence","chromadb","claude","claude-agent-sdk","claude-agents","claude-code","claude-code-plugin","claude-skills"],"stats":{"installVelocity7d":0,"retentionRate":0,"executions":0,"rating":null},"origin":"github","source":{"repo":"claude-mem","audit":{"files":["openclaw/package.json","package.json"],"binaries":[],"findings":[{"kind":"dependency","rule":"DP-04","message":"No npm lock file: installs resolve whatever the ranges allow today.","surface":"package.json","evidence":"@better-auth/api-key@^1.6.16, better-auth@^1.6.16","severity":"medium"}],"packages":2,"auditedAt":"2026-09-25T10:51:51.575Z","lockfiles":[]},"forks":8366,"owner":"thedotmack","stars":94658,"topics":["ai","ai-agents","ai-memory","anthropic","artificial-intelligence","chromadb","claude","claude-agent-sdk","claude-agents","claude-code","claude-code-plugin","claude-skills","embeddings","long-term-memory","mem0","memory-engine","openmemory","rag","sqlite","supermemory"],"license":"Apache-2.0","fullName":"thedotmack/claude-mem","homepage":"https://claude-mem.ai","language":"TypeScript","pushedAt":"2026-09-25T01:11:49Z","avatarUrl":"https://avatars.githubusercontent.com/u/683968?v=4","crawledAt":"2026-09-25T10:51:42.785Z","openIssues":296,"manifestFile":"SKILL.md","manifestPath":"plugin/skills/mem-search/SKILL.md","defaultBranch":"main"},"readme":"# Memory Search\n\nSearch past work across all sessions. Simple workflow: search -> filter -> fetch -> (rarely) disclose raw tool I/O.\n\n## When to Use\n\nUse when users ask about PREVIOUS sessions (not current conversation):\n\n- \"Did we already fix this?\"\n- \"How did we solve X last time?\"\n- \"What happened last week?\"\n\n## Layered Workflow (ALWAYS Follow)\n\n**NEVER fetch full details without filtering first. 10x token savings.**\n\n### Step 1: Search - Get Index with IDs\n\nUse the `search` MCP tool:\n\n```\nsearch(query=\"authentication\", limit=20, project=\"my-project\")\n```\n\n**Returns:** Table with IDs, timestamps, types, titles (~50-100 tokens/result)\n\n```\n| ID | Time | T | Title | Read |\n|----|------|---|-------|------|\n| #11131 | 3:48 PM | 🟣 | Added JWT authentication | ~75 |\n| #10942 | 2:15 PM | 🔴 | Fixed auth token expiration | ~50 |\n```\n\n**Parameters:**\n\n- `query` (string) - Search term\n- `limit` (number) - Max results, default 20, max 100\n- `project` (string) - Project name filter\n- `type` (string, optional) - \"observations\", \"sessions\", or \"prompts\"\n- `obs_type` (string, optional) - Comma-separated: bugfix, feature, decision, discovery, change\n- `dateStart` (string, optional) - YYYY-MM-DD or epoch ms\n- `dateEnd` (string, optional) - YYYY-MM-DD or epoch ms\n- `offset` (number, optional) - Skip N results\n- `orderBy` (string, optional) - \"date_desc\" (default), \"date_asc\", \"relevance\"\n\n### Step 2: Timeline - Get Context Around Interesting Results\n\nUse the `timeline` MCP tool:\n\n```\ntimeline(anchor=11131, depth_before=3, depth_after=3, project=\"my-project\")\n```\n\nOr find anchor automatically from query:\n\n```\ntimeline(query=\"authentication\", depth_before=3, depth_after=3, project=\"my-project\")\n```\n\n**Returns:** `depth_before + 1 + depth_after` items in chronological order with observations, sessions, and prompts interleaved around the anchor.\n\n**Parameters:**\n\n- `anchor` (number, optional) - Observation ID to center around\n- `query` (string, optional) - Find anchor automatically if anchor not provided\n- `depth_before` (number, optional) - Items before anchor, default 5, max 20\n- `depth_after` (number, optional) - Items after anchor, default 5, max 20\n- `project` (string) - Project name filter\n\n### Step 3: Fetch - Get Full Details ONLY for Filtered IDs\n\nReview titles from Step 1 and context from Step 2. Pick relevant IDs. Discard the rest.\n\nUse the `get_observations` MCP tool:\n\n```\nget_observations(ids=[11131, 10942])\n```\n\n**ALWAYS use `get_observations` for 2+ observations - single request vs N requests.**\n\n**Parameters:**\n\n- `ids` (array of numbers, required) - Observation IDs to fetch\n- `orderBy` (string, optional) - \"date_desc\" (default), \"date_asc\"\n- `limit` (number, optional) - Max observations to return\n- `project` (string, optional) - Project name filter\n\n**Returns:** Complete observation objects with title, subtitle, narrative, facts, concepts, files (~500-1000 tokens each)\n\n### Step 4: Disclose Raw Tool I/O - Only When Step 3 Was Not Enough\n\nObservations are *summaries*. When the answer needs the literal bytes a tool\nreturned — the exact diff, the exact command output, the exact API response —\nuse the `get_tool_uses` MCP tool:\n\n```\nget_tool_uses(ids=[\"toolu_01ABC...\"], project=\"my-project\")\n```\n\n**Do not start here.** Raw tool bodies are unsummarized and can run to thousands\nof tokens each; that is the whole reason claude-mem compresses them into\nobservations in the first place. Reach for this layer only after search /\ntimeline / get_observations pointed you at specific tool calls.\n\n**Parameters:**\n\n- `ids` (array, required) - Numeric `tool_uses` ids OR opaque `tool_use_id` strings\n- `limit` (number, optional) - Max rows to return\n- `project` (string, optional) - Project name filter\n- `contentSessionId` (string, optional) - Restrict to one session\n\n**Returns:** The stored `tool_input` / `tool_response` for those calls, plus the\ntool name, session ids, and the observation each was folded into. Payloads over\n64 KB were truncated on w","createdAt":"2026-09-25T10:51:51.776Z","updatedAt":"2026-09-25T10:51:51.776Z"},{"id":"cmuguciuj002qqu06mxui7i0v","slug":"thedotmack-claude-mem-mode-creator","name":"mode-creator","description":"Interactively create, install, activate, and verify custom claude-mem modes, including domain-specific observation types, concept tags, optional Telegram alerts, bot setup, worker restart, and startup-context verification. Use this whenever someone asks to customize what claude-mem remembers, create or change a mode, track domain-specific notes, add observation types or tags, or send Telegram notifications for particular memories—even if they do not use the word \"mode.\"","authorId":"gh:thedotmack","authorName":"thedotmack","version":"0.1.0","category":"Prompt","securityLevel":"Community","downloadsCount":0,"githubStars":94658,"pricePerCall":0,"manifest":{"name":"mode-creator","tools":[],"category":"Prompt","entrypoint":{"type":"prompt"},"description":"Interactively create, install, activate, and verify custom claude-mem modes, including domain-specific observation types, concept tags, optional Telegram alerts, bot setup, worker restart, and startup-context verification. Use this whenever someone asks to customize what claude-mem remembers, create or change a mode, track domain-specific notes, add observation types or tags, or send Telegram notifications for particular memories—even if they do not use the word \"mode.\"","permissions":[],"systemPrompt":"# Mode Creator\n\nCreate a useful note-taking system, not merely a valid JSON file. Interview the user, propose a small taxonomy, obtain approval, install it durably, configure optional alerts, restart the worker, and prove the active mode appears in startup context.\n\n## Ground rules\n\n- Use the available interactive question tool (`AskUserQuestion`, `request_user_input`, or equivalent) for the interview. Ask in small batches and wait for each response.\n- Explain observation types as mutually exclusive kinds of notes and concepts as reusable tags. Avoid jargon unless the user uses it first.\n- Inspect existing bundled and user modes before inventing a new one. Reuse or remix a close match when that serves the user better.\n- Do not edit a plugin cache or bundled mode. Install custom files under the resolved claude-mem data directory's `modes/` folder.\n- Do not expose a Telegram token in chat, command arguments, logs, or tool output. Treat it like a password.\n- Preserve unrelated settings and existing Telegram triggers. The helpers make timestamped backups and merge requested triggers.\n- Custom modes are supported by the local worker runtime. If `CLAUDE_MEM_RUNTIME` is `server`, explain that this workflow cannot safely install a per-user mode into the shared server and stop before mutation.\n- Existing observations keep their original types. The new mode applies to future observation generation.\n\n## 1. Open with the purpose\n\nBegin with this message inside the first interactive question:\n\n> Custom modes let you take notes for whatever you're working on. If you're a law student, you may want to write down every time a case establishes a rule, a professor flags an exam trap, or doctrines conflict. If you're an architect, you may want to capture every design decision, code constraint, client preference, or site discovery. What are you working on?\n\nDo not start by asking for a mode name or JSON fields. Learn the work first.\n\nIf the answer is code-related, say:\n\n> Code mode already works well for software work. A custom variant may work better if it also tracks [2–4 specific kinds of notes inferred from their work] and tags [2–4 useful cross-cutting themes]. Would you like to keep standard code mode or customize it?\n\nUse concrete suggestions. For an ML platform engineer, for example, suggest experiment outcomes, data-contract changes, production incidents, model decisions, cost findings, and reproducibility risks—not generic “custom notes.” If the user chooses standard code mode, do not create a redundant file; continue to the optional notification and verification steps.\n\n## 2. Discover what is worth remembering\n\nUse follow-up questions to obtain:\n\n1. Three examples of moments or findings they would want available next week.\n2. Routine activity that should be skipped.\n3. The nouns and decisions they search for later: people, cases, materials, clients, constraints, experiments, incidents, and so on.\n4. Anything sensitive that should never be recorded or sent to Telegram.\n5. Whether notes should be selective or detailed.\n\nInfer answers already present in the conversation instead of asking twice. When the user gives a broad answer, propose examples and let them select or edit them.\n\n## 3. Propose the mode\n\nRead [references/mode-authoring.md](references/mode-authoring.md) before drafting.\n\nPropose:\n\n- A clear mode name and lowercase ID.\n- Usually 4–8 observation types. Each observed item gets exactly one type.\n- Usually 4–8 concept tags. An item may get several concepts.\n- One-sentence recording and skipping policies.\n- Two realistic notes the mode would record and two it would skip.\n\nPresent the proposal in plain language and use the interactive question tool for approval. Let the user rename, add, remove, or reword categories. Do not write or install until they approve the taxonomy and privacy boundary.\n\nPrefer an inherited ID such as `code--architecture-practice` so the mode reuses claude-mem's stable output protocol while replacing the domain taxonomy and behavioral prompts. The `code` parent is an implementation base; the override must remove code-specific semantics from the prompts. Use a standalone mode only when inheritance is genuinely unsuitable.\n\n## 4. Ask about Telegram alerts\n\nAfter the taxonomy is approved, ask:\n\n> Would you like Telegram notifications when claude-mem records any particular types or tags? Alerts include the observation type, title, subtitle, project, and observation ID, so avoid selecting categories that may expose sensitive material.\n\nIf yes:\n\n- Let the user select exact observation types and/or concept tags from the approved mode.\n- Explain that matching is OR: after alerts are explicitly enabled, any selected type or any selected concept sends an alert. Selecting triggers alone does not enable delivery: per-observation alerts default to off. With the user's consent, set `CLAUDE_MEM_TELEGRAM_OBSERVATION_ALERTS_ENABLED` to `\"true\"` in the resolved data directory's `settings.json` after running the installer or credential helper.\n- Ask whether they already have a Telegram bot connected to claude-mem.\n- Read [references/telegram.md](references/telegram.md), then guide new users through BotFather and the secure setup helper.\n\nIf no, leave every Telegram setting unchanged.\n\n## 5. Draft, validate, and install\n\nResolve the absolute directory containing this `SKILL.md`; all helper paths are relative to that directory.\n\nWrite the approved mode to a temporary JSON file. Use the exact inherited override shape in the authoring reference. Then validate without mutating anything:\n\n```bash\nnode <skill-directory>/scripts/install-mode.mjs \\\n  --mode <temporary-mode.json> \\\n  --mode-id <parent--custom-id> \\\n  --dry-run\n```\n\nFix every validation error before installation. Then install and activate it:\n\n```bash\nnode <skill-directory>/scripts/install-mode.mjs \\\n  --mode <temporary-mode.json> \\\n  --mode-id <parent--custom-id> \\\n  --telegram-types <comma-separated-approved-types> \\\n  --telegram-concepts <comma-separated-approved-concepts>\n```\n\nOmit both Telegram flags when alerts were declined. The installer:\n\n- Merges the override with its parent and validates the complete mode.\n- Installs the source override under `<data-dir>/modes/`.\n- Sets `CLAUDE_MEM_MODE` in `settings.json`.\n- Merges approved alert triggers without deleting existing triggers.\n- Writes atomically and reports any backup paths.\n\nReview its JSON result. Do not claim success if `ok` is not `true`.\n\n## 6. Connect Telegram when needed\n\nIf alerts were requested and both bot token and chat ID are already present, ask permission to reuse them and send a test. If credentials are missing, explain the BotFather steps from the Telegram reference.\n\nRun the credential helper only after explicit consent:\n\n```bash\nnode <skill-directory>/scripts/configure-telegram.mjs \\\n  --types <comma-separated-approved-types> \\\n  --concepts <comma-separated-approved-concepts>\n```\n\nThe helper accepts the token through hidden terminal input, validates it with `getMe`, discovers or asks for the chat ID, sends a test message, and stores the settings with owner-only permissions. Never pass the token as an argument.\n\nIf the agent environment cannot give the user control of an interactive terminal, show the exact helper command and pause for the user to run it locally. This is the only acceptable manual boundary; do not ask them to paste the token into chat as a workaround. After they confirm, inspect only whether the credential fields are present—never print their values.\n\n## 7. Restart and prove the result\n\nRead the configured runtime before restarting. For a worker runtime, use the verified CLI restart path:\n\n```bash\nnpx claude-mem restart\nnpx claude-mem status\n```\n\nIf the CLI shim is unavailable, run the installed plugin's `scripts/worker-service.cjs restart` with Bun. Do not use a bare restart HTTP request when the verified CLI path is available.\n\nVerify all of the following:\n\n1. Restart reports a new healthy worker and exits successfully.\n2. The installed file exists under the resolved data directory.\n3. `settings.json` names the intended `CLAUDE_MEM_MODE` without displaying secrets.\n4. Request full startup context with the `session_start_context` MCP tool when available. Otherwise call `/api/context/inject?project=mode-creator-verification&full=true` on the configured local worker.\n5. Startup context contains `Mode: <mode name> (<mode id>)`.\n6. If Telegram was configured, the test message arrived.\n\nIf the worker falls back to `code`, inspect the worker log for a mode validation or lookup error, repair the mode, and repeat the restart. Do not describe a fallback as successful activation.\n\n## 8. Hand off clearly\n\nConclude with:\n\n- Active mode name and ID.\n- Installed path.\n- Observation types and concepts.\n- Telegram trigger types/concepts, or “unchanged.”\n- Restart and startup-context verification result.\n- Backup paths for rollback.\n- One short example of what the new mode will now remember.\n\nNever include the Telegram bot token in the handoff.","schemaVersion":1},"repoUrl":"https://github.com/thedotmack/claude-mem/tree/main/plugin/skills/mode-creator","tags":["ai","ai-agents","ai-memory","anthropic","artificial-intelligence","chromadb","claude","claude-agent-sdk","claude-agents","claude-code","claude-code-plugin","claude-skills"],"stats":{"installVelocity7d":0,"retentionRate":0,"executions":0,"rating":null},"origin":"github","source":{"repo":"claude-mem","audit":{"files":["openclaw/package.json","package.json"],"binaries":[],"findings":[{"kind":"dependency","rule":"DP-04","message":"No npm lock file: installs resolve whatever the ranges allow today.","surface":"package.json","evidence":"@better-auth/api-key@^1.6.16, better-auth@^1.6.16","severity":"medium"}],"packages":2,"auditedAt":"2026-09-25T10:51:51.575Z","lockfiles":[]},"forks":8366,"owner":"thedotmack","stars":94658,"topics":["ai","ai-agents","ai-memory","anthropic","artificial-intelligence","chromadb","claude","claude-agent-sdk","claude-agents","claude-code","claude-code-plugin","claude-skills","embeddings","long-term-memory","mem0","memory-engine","openmemory","rag","sqlite","supermemory"],"license":"Apache-2.0","fullName":"thedotmack/claude-mem","homepage":"https://claude-mem.ai","language":"TypeScript","pushedAt":"2026-09-25T01:11:49Z","avatarUrl":"https://avatars.githubusercontent.com/u/683968?v=4","crawledAt":"2026-09-25T10:51:42.785Z","openIssues":296,"manifestFile":"SKILL.md","manifestPath":"plugin/skills/mode-creator/SKILL.md","defaultBranch":"main"},"readme":"# Mode Creator\n\nCreate a useful note-taking system, not merely a valid JSON file. Interview the user, propose a small taxonomy, obtain approval, install it durably, configure optional alerts, restart the worker, and prove the active mode appears in startup context.\n\n## Ground rules\n\n- Use the available interactive question tool (`AskUserQuestion`, `request_user_input`, or equivalent) for the interview. Ask in small batches and wait for each response.\n- Explain observation types as mutually exclusive kinds of notes and concepts as reusable tags. Avoid jargon unless the user uses it first.\n- Inspect existing bundled and user modes before inventing a new one. Reuse or remix a close match when that serves the user better.\n- Do not edit a plugin cache or bundled mode. Install custom files under the resolved claude-mem data directory's `modes/` folder.\n- Do not expose a Telegram token in chat, command arguments, logs, or tool output. Treat it like a password.\n- Preserve unrelated settings and existing Telegram triggers. The helpers make timestamped backups and merge requested triggers.\n- Custom modes are supported by the local worker runtime. If `CLAUDE_MEM_RUNTIME` is `server`, explain that this workflow cannot safely install a per-user mode into the shared server and stop before mutation.\n- Existing observations keep their original types. The new mode applies to future observation generation.\n\n## 1. Open with the purpose\n\nBegin with this message inside the first interactive question:\n\n> Custom modes let you take notes for whatever you're working on. If you're a law student, you may want to write down every time a case establishes a rule, a professor flags an exam trap, or doctrines conflict. If you're an architect, you may want to capture every design decision, code constraint, client preference, or site discovery. What are you working on?\n\nDo not start by asking for a mode name or JSON fields. Learn the work first.\n\nIf the answer is code-related, say:\n\n> Code mode already works well for software work. A custom variant may work better if it also tracks [2–4 specific kinds of notes inferred from their work] and tags [2–4 useful cross-cutting themes]. Would you like to keep standard code mode or customize it?\n\nUse concrete suggestions. For an ML platform engineer, for example, suggest experiment outcomes, data-contract changes, production incidents, model decisions, cost findings, and reproducibility risks—not generic “custom notes.” If the user chooses standard code mode, do not create a redundant file; continue to the optional notification and verification steps.\n\n## 2. Discover what is worth remembering\n\nUse follow-up questions to obtain:\n\n1. Three examples of moments or findings they would want available next week.\n2. Routine activity that should be skipped.\n3. The nouns and decisions they search for later: people, cases, materials, clients, constraints, experiments, incidents, and so on.\n4. Anything sensitive that should never be recorded or sent to Telegram.\n5. Whether notes should be selective or detailed.\n\nInfer answers already present in the conversation instead of asking twice. When the user gives a broad answer, propose examples and let them select or edit them.\n\n## 3. Propose the mode\n\nRead [references/mode-authoring.md](references/mode-authoring.md) before drafting.\n\nPropose:\n\n- A clear mode name and lowercase ID.\n- Usually 4–8 observation types. Each observed item gets exactly one type.\n- Usually 4–8 concept tags. An item may get several concepts.\n- One-sentence recording and skipping policies.\n- Two realistic notes the mode would record and two it would skip.\n\nPresent the proposal in plain language and use the interactive question tool for approval. Let the user rename, add, remove, or reword categories. Do not write or install until they approve the taxonomy and privacy boundary.\n\nPrefer an inherited ID such as `code--architecture-practice` so the mode reuses claude-mem's stable output protocol while replacing the do","createdAt":"2026-09-25T10:51:51.787Z","updatedAt":"2026-09-25T10:51:51.787Z"},{"id":"cmuguciv2002wqu06j29uqu7g","slug":"thedotmack-claude-mem-pathfinder","name":"pathfinder","description":"Map a codebase into feature-grouped flowcharts, identify duplicated concerns across features, and propose a unified architecture. Use when asked to \"find the ideal path,\" unify duplicated systems, or audit architecture before a refactor. Emits a proposed unified flowchart plus per-system /make-plan prompts.","authorId":"gh:thedotmack","authorName":"thedotmack","version":"0.1.0","category":"Prompt","securityLevel":"Community","downloadsCount":0,"githubStars":94658,"pricePerCall":0,"manifest":{"name":"pathfinder","tools":[],"category":"Prompt","entrypoint":{"type":"prompt"},"description":"Map a codebase into feature-grouped flowcharts, identify duplicated concerns across features, and propose a unified architecture. Use when asked to \"find the ideal path,\" unify duplicated systems, or audit architecture before a refactor. Emits a proposed unified flowchart plus per-system /make-plan prompts.","permissions":[],"systemPrompt":"# Pathfinder\n\nYou are an ORCHESTRATOR. Map the codebase into feature-grouped flowcharts, identify duplicated concerns, propose the simplest unified architecture, and hand off per-system plans to `/make-plan`.\n\nYou do not write implementation code. You produce diagrams, a duplication report, a proposed unified flowchart, and handoff prompts.\n\n## Delegation Model\n\nUse subagents for *discovery and extraction* (file reading, flow tracing, grep, diagramming). Keep *synthesis* (deciding feature boundaries, picking unification strategies, final flowchart) with the orchestrator. Reject subagent reports that lack source citations and redeploy.\n\n### Subagent Reporting Contract (MANDATORY)\n\nEach subagent response must include:\n1. Sources consulted — exact file paths and line ranges read\n2. Concrete findings — exact function names, call sites, data flow\n3. Mermaid diagram(s) with nodes labeled by `file:line`\n4. Confidence note + known gaps\n\n## Output Artifacts\n\nAll artifacts go in `PATHFINDER-<YYYY-MM-DD>/` at repo root:\n- `00-features.md` — feature inventory with boundaries\n- `01-flowcharts/<feature>.md` — one Mermaid flowchart per feature\n- `02-duplication-report.md` — cross-cutting duplicated concerns with evidence\n- `03-unified-proposal.md` — proposed unified architecture + Mermaid\n- `04-handoff-prompts.md` — copy-pasteable `/make-plan` prompts per unified system\n\n## Phases\n\n### Phase 0: Feature Discovery (ALWAYS FIRST)\n\nDeploy ONE \"Feature Discovery\" subagent to:\n1. Walk the source tree (not built artifacts) and read top-level README / CLAUDE.md\n2. Propose feature boundaries based on directory structure, import graph, and naming\n3. Return a flat list of features with: name, entry points (file:line), core files, brief purpose\n\nOrchestrator reviews the proposal, adjusts boundaries if needed, writes `00-features.md`. Do NOT fan out until feature boundaries are approved.\n\n### Phase 1: Per-Feature Flowcharts (FAN OUT)\n\nDeploy ONE \"Flowchart\" subagent per feature in parallel. Each receives only its feature's scope. Each must:\n1. Trace the feature's primary happy path from entry point to terminal state\n2. Identify side effects (DB writes, HTTP calls, file I/O, process spawns)\n3. Note error and fallback branches but do not let them dominate the diagram\n4. Produce a Mermaid `flowchart TD` with every node labeled `Name<br/>file:line`\n5. List external dependencies (other features it calls into) at the bottom\n\nOrchestrator writes each flowchart to `01-flowcharts/<feature>.md`. Reject any diagram missing `file:line` labels.\n\n### Phase 2: Duplication Hunt\n\nDeploy TWO subagents in parallel:\n\n**\"Within-Feature Duplication\"** subagent:\n- For each feature, find repeated code/logic patterns inside the feature only\n- Report only duplications worth consolidating (ignore trivial repetition)\n\n**\"Cross-Feature Duplication\"** subagent:\n- Compare flowcharts across features for concerns that appear in multiple places\n- Examples of what to look for: multiple capture paths, parallel queue implementations, duplicated storage/migration code, repeated agent scaffolding, parallel parsing layers\n- For each duplication, report: (a) the concern, (b) every location with `file:line`, (c) why they diverged, (d) whether the divergence is legitimate specialization or accidental\n\nOrchestrator synthesizes both into `02-duplication-report.md`. Every duplication claim must cite ≥2 `file:line` locations.\n\n### Phase 3: Unified Proposal (ORCHESTRATOR)\n\nThe orchestrator writes `03-unified-proposal.md` itself — do not delegate synthesis.\n\nFor each duplicated concern from Phase 2 that is NOT legitimate specialization:\n1. Propose the simplest unified design (one path, one store, one handler — whatever applies)\n2. Name the consolidated component and its single entry point\n3. Show what each old call site becomes\n4. Call out any loss of capability and whether it's acceptable\n\nEnd the document with ONE combined Mermaid flowchart showing the proposed unified system. Nodes still labeled with target `file:line` (new or existing) where knowable.\n\n**Anti-patterns to reject in your own proposal:**\n- Adding a new abstraction layer \"for flexibility\"\n- Keeping both old paths behind a feature flag\n- Introducing a registry/factory when a switch statement suffices\n- Preserving divergent behavior \"just in case\"\n\n### Phase 4: Per-System Handoff Prompts\n\nFor each unified system in the proposal, write a ready-to-run `/make-plan` prompt to `04-handoff-prompts.md`. Each prompt must:\n1. State the target unified component and its single entry point\n2. List the exact call sites to rewrite (from Phase 2 evidence)\n3. Cite the relevant flowchart file from `01-flowcharts/`\n4. Include anti-pattern guards specific to this system\n\nFormat each as a fenced code block the user can copy directly into `/make-plan`.\n\n## Key Principles\n\n- **Evidence over intuition** — every diagram node and duplication claim cites `file:line`\n- **Current state before ideal state** — Phases 0–2 describe what IS; Phase 3 describes what SHOULD BE\n- **Simplest unification wins** — prefer deletion over abstraction; prefer one path over configurable paths\n- **Specialization is not duplication** — two components serving different trust models or data sources are legitimate even if their code looks similar\n- **Handoff, don't implement** — Pathfinder ends at plan prompts; `/make-plan` and `/do` take it from there\n\n## Failure Modes to Prevent\n\n- Drawing flowcharts from memory instead of source — redeploy subagent with grep evidence requirement\n- Proposing unification of legitimately specialized components — re-examine trust/data-source divergence\n- Handoff prompts that lack concrete call sites — rewrite with Phase 2 evidence\n- Skipping Phase 0 boundary review — fanning out on bad feature boundaries wastes all of Phase 1","schemaVersion":1},"repoUrl":"https://github.com/thedotmack/claude-mem/tree/main/plugin/skills/pathfinder","tags":["ai","ai-agents","ai-memory","anthropic","artificial-intelligence","chromadb","claude","claude-agent-sdk","claude-agents","claude-code","claude-code-plugin","claude-skills"],"stats":{"installVelocity7d":0,"retentionRate":0,"executions":0,"rating":null},"origin":"github","source":{"repo":"claude-mem","audit":{"files":["openclaw/package.json","package.json"],"binaries":[],"findings":[{"kind":"dependency","rule":"DP-04","message":"No npm lock file: installs resolve whatever the ranges allow today.","surface":"package.json","evidence":"@better-auth/api-key@^1.6.16, better-auth@^1.6.16","severity":"medium"}],"packages":2,"auditedAt":"2026-09-25T10:51:51.575Z","lockfiles":[]},"forks":8366,"owner":"thedotmack","stars":94658,"topics":["ai","ai-agents","ai-memory","anthropic","artificial-intelligence","chromadb","claude","claude-agent-sdk","claude-agents","claude-code","claude-code-plugin","claude-skills","embeddings","long-term-memory","mem0","memory-engine","openmemory","rag","sqlite","supermemory"],"license":"Apache-2.0","fullName":"thedotmack/claude-mem","homepage":"https://claude-mem.ai","language":"TypeScript","pushedAt":"2026-09-25T01:11:49Z","avatarUrl":"https://avatars.githubusercontent.com/u/683968?v=4","crawledAt":"2026-09-25T10:51:42.785Z","openIssues":296,"manifestFile":"SKILL.md","manifestPath":"plugin/skills/pathfinder/SKILL.md","defaultBranch":"main"},"readme":"# Pathfinder\n\nYou are an ORCHESTRATOR. Map the codebase into feature-grouped flowcharts, identify duplicated concerns, propose the simplest unified architecture, and hand off per-system plans to `/make-plan`.\n\nYou do not write implementation code. You produce diagrams, a duplication report, a proposed unified flowchart, and handoff prompts.\n\n## Delegation Model\n\nUse subagents for *discovery and extraction* (file reading, flow tracing, grep, diagramming). Keep *synthesis* (deciding feature boundaries, picking unification strategies, final flowchart) with the orchestrator. Reject subagent reports that lack source citations and redeploy.\n\n### Subagent Reporting Contract (MANDATORY)\n\nEach subagent response must include:\n1. Sources consulted — exact file paths and line ranges read\n2. Concrete findings — exact function names, call sites, data flow\n3. Mermaid diagram(s) with nodes labeled by `file:line`\n4. Confidence note + known gaps\n\n## Output Artifacts\n\nAll artifacts go in `PATHFINDER-<YYYY-MM-DD>/` at repo root:\n- `00-features.md` — feature inventory with boundaries\n- `01-flowcharts/<feature>.md` — one Mermaid flowchart per feature\n- `02-duplication-report.md` — cross-cutting duplicated concerns with evidence\n- `03-unified-proposal.md` — proposed unified architecture + Mermaid\n- `04-handoff-prompts.md` — copy-pasteable `/make-plan` prompts per unified system\n\n## Phases\n\n### Phase 0: Feature Discovery (ALWAYS FIRST)\n\nDeploy ONE \"Feature Discovery\" subagent to:\n1. Walk the source tree (not built artifacts) and read top-level README / CLAUDE.md\n2. Propose feature boundaries based on directory structure, import graph, and naming\n3. Return a flat list of features with: name, entry points (file:line), core files, brief purpose\n\nOrchestrator reviews the proposal, adjusts boundaries if needed, writes `00-features.md`. Do NOT fan out until feature boundaries are approved.\n\n### Phase 1: Per-Feature Flowcharts (FAN OUT)\n\nDeploy ONE \"Flowchart\" subagent per feature in parallel. Each receives only its feature's scope. Each must:\n1. Trace the feature's primary happy path from entry point to terminal state\n2. Identify side effects (DB writes, HTTP calls, file I/O, process spawns)\n3. Note error and fallback branches but do not let them dominate the diagram\n4. Produce a Mermaid `flowchart TD` with every node labeled `Name<br/>file:line`\n5. List external dependencies (other features it calls into) at the bottom\n\nOrchestrator writes each flowchart to `01-flowcharts/<feature>.md`. Reject any diagram missing `file:line` labels.\n\n### Phase 2: Duplication Hunt\n\nDeploy TWO subagents in parallel:\n\n**\"Within-Feature Duplication\"** subagent:\n- For each feature, find repeated code/logic patterns inside the feature only\n- Report only duplications worth consolidating (ignore trivial repetition)\n\n**\"Cross-Feature Duplication\"** subagent:\n- Compare flowcharts across features for concerns that appear in multiple places\n- Examples of what to look for: multiple capture paths, parallel queue implementations, duplicated storage/migration code, repeated agent scaffolding, parallel parsing layers\n- For each duplication, report: (a) the concern, (b) every location with `file:line`, (c) why they diverged, (d) whether the divergence is legitimate specialization or accidental\n\nOrchestrator synthesizes both into `02-duplication-report.md`. Every duplication claim must cite ≥2 `file:line` locations.\n\n### Phase 3: Unified Proposal (ORCHESTRATOR)\n\nThe orchestrator writes `03-unified-proposal.md` itself — do not delegate synthesis.\n\nFor each duplicated concern from Phase 2 that is NOT legitimate specialization:\n1. Propose the simplest unified design (one path, one store, one handler — whatever applies)\n2. Name the consolidated component and its single entry point\n3. Show what each old call site becomes\n4. Call out any loss of capability and whether it's acceptable\n\nEnd the document with ONE combined Mermaid flowchart showing the proposed unified system. Nodes still labeled wit","createdAt":"2026-09-25T10:51:51.806Z","updatedAt":"2026-09-25T10:51:51.806Z"}],"total":58,"limit":24,"offset":0}