[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M7148PVC9ARTV6DC4KBF6X0K":3,"skill-same:01M7148PVC9ARTV6DC4KBF6X0K":63},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":31,"linkOnly":32,"markdownContent":33,"markdownBody":34,"frontMatter":35,"refName":37,"commitSha":38,"skillDirectory":39,"forksCount":14,"repositoryHtmlUrl":40,"repositoryHomepageUrl":6,"ownerHtmlUrl":41,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":42,"install":43,"resources":56},"01M7148PVC9ARTV6DC4KBF6X0K","performance-optimizer",null,"Identifies and fixes performance bottlenecks in code, databases, and APIs. Measures before and after to prove improvements.","sapsapshen\u002Fai-memory-router","sapsapshen","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F20347959?v=4","01M6XDQEF1DP50DKF37H81J3J5","shenmian","01M6XDQEJPE41Y3DT2763X8ZJN",0,"MIT","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcopilot\u002Fperformance-optimizer\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30],"performance","performance optimizer","optimizer","safe","development","code","before and after","databases","community","fixes","prove","2026","2026-11-10 10:12:30",false,"---\nname: performance-optimizer\ndescription: \"Identifies and fixes performance bottlenecks in code, databases, and APIs. Measures before and after to prove improvements.\"\ncategory: development\nrisk: safe\nsource: community\ndate_added: \"2026-03-05\"\n---\n\n# Performance Optimizer\n\nFind and fix performance bottlenecks. Measure, optimize, verify. Make it fast.\n\n## When to Use This Skill\n\n- App is slow or laggy\n- User complains about performance\n- Page load times are high\n- API responses are slow\n- Database queries take too long\n- User mentions \"slow\", \"lag\", \"performance\", or \"optimize\"\n\n## The Optimization Process\n\n### 1. Measure First\n\nNever optimize without measuring:\n\n```javascript\n\u002F\u002F Measure execution time\nconsole.time('operation');\nawait slowOperation();\nconsole.timeEnd('operation'); \u002F\u002F operation: 2341ms\n```\n\n**What to measure:**\n- Page load time\n- API response time\n- Database query time\n- Function execution time\n- Memory usage\n- Network requests\n\n### 2. Find the Bottleneck\n\nUse profiling tools to find the slow parts:\n\n**Browser:**\n```\nDevTools → Performance tab → Record → Stop\nLook for long tasks (red bars)\n```\n\n**Node.js:**\n```bash\nnode --prof app.js\nnode --prof-process isolate-*.log > profile.txt\n```\n\n**Database:**\n```sql\nEXPLAIN ANALYZE SELECT * FROM users WHERE email = 'test@example.com';\n```\n\n### 3. Optimize\n\nFix the slowest thing first (biggest impact).\n\n## Common Optimizations\n\n### Database Queries\n\n**Problem: N+1 Queries**\n```javascript\n\u002F\u002F Bad: N+1 queries\nconst users = await db.users.find();\nfor (const user of users) {\n  user.posts = await db.posts.find({ userId: user.id }); \u002F\u002F N queries\n}\n\n\u002F\u002F Good: Single query with JOIN\nconst users = await db.users.find()\n  .populate('posts'); \u002F\u002F 1 query\n```\n\n**Problem: Missing Index**\n```sql\n-- Check slow query\nEXPLAIN SELECT * FROM users WHERE email = 'test@example.com';\n-- Shows: Seq Scan (bad)\n\n-- Add index\nCREATE INDEX idx_users_email ON users(email);\n\n-- Check again\nEXPLAIN SELECT * FROM users WHERE email = 'test@example.com';\n-- Shows: Index Scan (good)\n```\n\n**Problem: SELECT ***\n```javascript\n\u002F\u002F Bad: Fetches all columns\nconst users = await db.query('SELECT * FROM users');\n\n\u002F\u002F Good: Only needed columns\nconst users = await db.query('SELECT id, name, email FROM users');\n```\n\n**Problem: No Pagination**\n```javascript\n\u002F\u002F Bad: Returns all records\nconst users = await db.users.find();\n\n\u002F\u002F Good: Paginated\nconst users = await db.users.find()\n  .limit(20)\n  .skip((page - 1) * 20);\n```\n\n### API Performance\n\n**Problem: No Caching**\n```javascript\n\u002F\u002F Bad: Hits database every time\napp.get('\u002Fapi\u002Fstats', async (req, res) => {\n  const stats = await db.stats.calculate(); \u002F\u002F Slow\n  res.json(stats);\n});\n\n\u002F\u002F Good: Cache for 5 minutes\nconst cache = new Map();\napp.get('\u002Fapi\u002Fstats', async (req, res) => {\n  const cached = cache.get('stats');\n  if (cached && Date.now() - cached.time \u003C 300000) {\n    return res.json(cached.data);\n  }\n  \n  const stats = await db.stats.calculate();\n  cache.set('stats', { data: stats, time: Date.now() });\n  res.json(stats);\n});\n```\n\n**Problem: Sequential Operations**\n```javascript\n\u002F\u002F Bad: Sequential (slow)\nconst user = await getUser(id);\nconst posts = await getPosts(id);\nconst comments = await getComments(id);\n\u002F\u002F Total: 300ms + 200ms + 150ms = 650ms\n\n\u002F\u002F Good: Parallel (fast)\nconst [user, posts, comments] = await Promise.all([\n  getUser(id),\n  getPosts(id),\n  getComments(id)\n]);\n\u002F\u002F Total: max(300ms, 200ms, 150ms) = 300ms\n```\n\n**Problem: Large Payloads**\n```javascript\n\u002F\u002F Bad: Returns everything\nres.json(users); \u002F\u002F 5MB response\n\n\u002F\u002F Good: Only needed fields\nres.json(users.map(u => ({\n  id: u.id,\n  name: u.name,\n  email: u.email\n}))); \u002F\u002F 500KB response\n```\n\n### Frontend Performance\n\n**Problem: Unnecessary Re-renders**\n```javascript\n\u002F\u002F Bad: Re-renders on every parent update\nfunction UserList({ users }) {\n  return users.map(user => \u003CUserCard user={user} \u002F>);\n}\n\n\u002F\u002F Good: Memoized\nconst UserCard = React.memo(({ user }) => {\n  return \u003Cdiv>{user.name}\u003C\u002Fdiv>;\n});\n```\n\n**Problem: Large Bundle**\n```javascript\n\u002F\u002F Bad: Imports entire library\nimport _ from 'lodash'; \u002F\u002F 70KB\n\n\u002F\u002F Good: Import only what you need\nimport debounce from 'lodash\u002Fdebounce'; \u002F\u002F 2KB\n```\n\n**Problem: No Code Splitting**\n```javascript\n\u002F\u002F Bad: Everything in one bundle\nimport HeavyComponent from '.\u002FHeavyComponent';\n\n\u002F\u002F Good: Lazy load\nconst HeavyComponent = React.lazy(() => import('.\u002FHeavyComponent'));\n```\n\n**Problem: Unoptimized Images**\n```html\n\u003C!-- Bad: Large image -->\n\u003Cimg src=\"photo.jpg\" \u002F> \u003C!-- 5MB -->\n\n\u003C!-- Good: Optimized and responsive -->\n\u003Cimg \n  src=\"photo-small.webp\" \n  srcset=\"photo-small.webp 400w, photo-large.webp 800w\"\n  loading=\"lazy\"\n  width=\"400\"\n  height=\"300\"\n\u002F> \u003C!-- 50KB -->\n```\n\n### Algorithm Optimization\n\n**Problem: Inefficient Algorithm**\n```javascript\n\u002F\u002F Bad: O(n²) - nested loops\nfunction findDuplicates(arr) {\n  const duplicates = [];\n  for (let i = 0; i \u003C arr.length; i++) {\n    for (let j = i + 1; j \u003C arr.length; j++) {\n      if (arr[i] === arr[j]) duplicates.push(arr[i]);\n    }\n  }\n  return duplicates;\n}\n\n\u002F\u002F Good: O(n) - single pass with Set\nfunction findDuplicates(arr) {\n  const seen = new Set();\n  const duplicates = new Set();\n  for (const item of arr) {\n    if (seen.has(item)) duplicates.add(item);\n    seen.add(item);\n  }\n  return Array.from(duplicates);\n}\n```\n\n**Problem: Repeated Calculations**\n```javascript\n\u002F\u002F Bad: Calculates every time\nfunction getTotal(items) {\n  return items.reduce((sum, item) => sum + item.price * item.quantity, 0);\n}\n\u002F\u002F Called 100 times in render\n\n\u002F\u002F Good: Memoized\nconst getTotal = useMemo(() => {\n  return items.reduce((sum, item) => sum + item.price * item.quantity, 0);\n}, [items]);\n```\n\n### Memory Optimization\n\n**Problem: Memory Leak**\n```javascript\n\u002F\u002F Bad: Event listener not cleaned up\nuseEffect(() => {\n  window.addEventListener('scroll', handleScroll);\n  \u002F\u002F Memory leak!\n}, []);\n\n\u002F\u002F Good: Cleanup\nuseEffect(() => {\n  window.addEventListener('scroll', handleScroll);\n  return () => window.removeEventListener('scroll', handleScroll);\n}, []);\n```\n\n**Problem: Large Data in Memory**\n```javascript\n\u002F\u002F Bad: Loads entire file into memory\nconst data = fs.readFileSync('huge-file.txt'); \u002F\u002F 1GB\n\n\u002F\u002F Good: Stream it\nconst stream = fs.createReadStream('huge-file.txt');\nstream.on('data', chunk => process(chunk));\n```\n\n## Measuring Impact\n\nAlways measure before and after:\n\n```javascript\n\u002F\u002F Before optimization\nconsole.time('query');\nconst users = await db.users.find();\nconsole.timeEnd('query');\n\u002F\u002F query: 2341ms\n\n\u002F\u002F After optimization (added index)\nconsole.time('query');\nconst users = await db.users.find();\nconsole.timeEnd('query');\n\u002F\u002F query: 23ms\n\n\u002F\u002F Improvement: 100x faster!\n```\n\n## Performance Budgets\n\nSet targets:\n\n```\nPage Load: \u003C 2 seconds\nAPI Response: \u003C 200ms\nDatabase Query: \u003C 50ms\nBundle Size: \u003C 200KB\nTime to Interactive: \u003C 3 seconds\n```\n\n## Tools\n\n**Browser:**\n- Chrome DevTools Performance tab\n- Lighthouse (audit)\n- Network tab (waterfall)\n\n**Node.js:**\n- `node --prof` (profiling)\n- `clinic` (diagnostics)\n- `autocannon` (load testing)\n\n**Database:**\n- `EXPLAIN ANALYZE` (query plans)\n- Slow query log\n- Database profiler\n\n**Monitoring:**\n- New Relic\n- Datadog\n- Sentry Performance\n\n## Quick Wins\n\nEasy optimizations with big impact:\n\n1. **Add database indexes** on frequently queried columns\n2. **Enable gzip compression** on server\n3. **Add caching** for expensive operations\n4. **Lazy load** images and heavy components\n5. **Use CDN** for static assets\n6. **Minify and compress** JavaScript\u002FCSS\n7. **Remove unused dependencies**\n8. **Use pagination** instead of loading all data\n9. **Optimize images** (WebP, proper sizing)\n10. **Enable HTTP\u002F2** on server\n\n## Optimization Checklist\n\n- [ ] Measured current performance\n- [ ] Identified bottleneck\n- [ ] Applied optimization\n- [ ] Measured improvement\n- [ ] Verified functionality still works\n- [ ] No new bugs introduced\n- [ ] Documented the change\n\n## When NOT to Optimize\n\n- Premature optimization (optimize when it's actually slow)\n- Micro-optimizations (save 1ms when page takes 5 seconds)\n- Readable code is more important than tiny speed gains\n- If it's already fast enough\n\n## Key Principles\n\n- Measure before optimizing\n- Fix the biggest bottleneck first\n- Measure after to prove improvement\n- Don't sacrifice readability for tiny gains\n- Profile in production-like environment\n- Consider the 80\u002F20 rule (20% of code causes 80% of slowness)\n\n## Related Skills\n\n- `@database-design` - Query optimization\n- `@codebase-audit-pre-push` - Code review\n- `@bug-hunter` - Debugging\n","# Performance Optimizer\n\nFind and fix performance bottlenecks. Measure, optimize, verify. Make it fast.\n\n## When to Use This Skill\n\n- App is slow or laggy\n- User complains about performance\n- Page load times are high\n- API responses are slow\n- Database queries take too long\n- User mentions \"slow\", \"lag\", \"performance\", or \"optimize\"\n\n## The Optimization Process\n\n### 1. Measure First\n\nNever optimize without measuring:\n\n```javascript\n\u002F\u002F Measure execution time\nconsole.time('operation');\nawait slowOperation();\nconsole.timeEnd('operation'); \u002F\u002F operation: 2341ms\n```\n\n**What to measure:**\n- Page load time\n- API response time\n- Database query time\n- Function execution time\n- Memory usage\n- Network requests\n\n### 2. Find the Bottleneck\n\nUse profiling tools to find the slow parts:\n\n**Browser:**\n```\nDevTools → Performance tab → Record → Stop\nLook for long tasks (red bars)\n```\n\n**Node.js:**\n```bash\nnode --prof app.js\nnode --prof-process isolate-*.log > profile.txt\n```\n\n**Database:**\n```sql\nEXPLAIN ANALYZE SELECT * FROM users WHERE email = 'test@example.com';\n```\n\n### 3. Optimize\n\nFix the slowest thing first (biggest impact).\n\n## Common Optimizations\n\n### Database Queries\n\n**Problem: N+1 Queries**\n```javascript\n\u002F\u002F Bad: N+1 queries\nconst users = await db.users.find();\nfor (const user of users) {\n  user.posts = await db.posts.find({ userId: user.id }); \u002F\u002F N queries\n}\n\n\u002F\u002F Good: Single query with JOIN\nconst users = await db.users.find()\n  .populate('posts'); \u002F\u002F 1 query\n```\n\n**Problem: Missing Index**\n```sql\n-- Check slow query\nEXPLAIN SELECT * FROM users WHERE email = 'test@example.com';\n-- Shows: Seq Scan (bad)\n\n-- Add index\nCREATE INDEX idx_users_email ON users(email);\n\n-- Check again\nEXPLAIN SELECT * FROM users WHERE email = 'test@example.com';\n-- Shows: Index Scan (good)\n```\n\n**Problem: SELECT ***\n```javascript\n\u002F\u002F Bad: Fetches all columns\nconst users = await db.query('SELECT * FROM users');\n\n\u002F\u002F Good: Only needed columns\nconst users = await db.query('SELECT id, name, email FROM users');\n```\n\n**Problem: No Pagination**\n```javascript\n\u002F\u002F Bad: Returns all records\nconst users = await db.users.find();\n\n\u002F\u002F Good: Paginated\nconst users = await db.users.find()\n  .limit(20)\n  .skip((page - 1) * 20);\n```\n\n### API Performance\n\n**Problem: No Caching**\n```javascript\n\u002F\u002F Bad: Hits database every time\napp.get('\u002Fapi\u002Fstats', async (req, res) => {\n  const stats = await db.stats.calculate(); \u002F\u002F Slow\n  res.json(stats);\n});\n\n\u002F\u002F Good: Cache for 5 minutes\nconst cache = new Map();\napp.get('\u002Fapi\u002Fstats', async (req, res) => {\n  const cached = cache.get('stats');\n  if (cached && Date.now() - cached.time \u003C 300000) {\n    return res.json(cached.data);\n  }\n  \n  const stats = await db.stats.calculate();\n  cache.set('stats', { data: stats, time: Date.now() });\n  res.json(stats);\n});\n```\n\n**Problem: Sequential Operations**\n```javascript\n\u002F\u002F Bad: Sequential (slow)\nconst user = await getUser(id);\nconst posts = await getPosts(id);\nconst comments = await getComments(id);\n\u002F\u002F Total: 300ms + 200ms + 150ms = 650ms\n\n\u002F\u002F Good: Parallel (fast)\nconst [user, posts, comments] = await Promise.all([\n  getUser(id),\n  getPosts(id),\n  getComments(id)\n]);\n\u002F\u002F Total: max(300ms, 200ms, 150ms) = 300ms\n```\n\n**Problem: Large Payloads**\n```javascript\n\u002F\u002F Bad: Returns everything\nres.json(users); \u002F\u002F 5MB response\n\n\u002F\u002F Good: Only needed fields\nres.json(users.map(u => ({\n  id: u.id,\n  name: u.name,\n  email: u.email\n}))); \u002F\u002F 500KB response\n```\n\n### Frontend Performance\n\n**Problem: Unnecessary Re-renders**\n```javascript\n\u002F\u002F Bad: Re-renders on every parent update\nfunction UserList({ users }) {\n  return users.map(user => \u003CUserCard user={user} \u002F>);\n}\n\n\u002F\u002F Good: Memoized\nconst UserCard = React.memo(({ user }) => {\n  return \u003Cdiv>{user.name}\u003C\u002Fdiv>;\n});\n```\n\n**Problem: Large Bundle**\n```javascript\n\u002F\u002F Bad: Imports entire library\nimport _ from 'lodash'; \u002F\u002F 70KB\n\n\u002F\u002F Good: Import only what you need\nimport debounce from 'lodash\u002Fdebounce'; \u002F\u002F 2KB\n```\n\n**Problem: No Code Splitting**\n```javascript\n\u002F\u002F Bad: Everything in one bundle\nimport HeavyComponent from '.\u002FHeavyComponent';\n\n\u002F\u002F Good: Lazy load\nconst HeavyComponent = React.lazy(() => import('.\u002FHeavyComponent'));\n```\n\n**Problem: Unoptimized Images**\n```html\n\u003C!-- Bad: Large image -->\n\u003Cimg src=\"photo.jpg\" \u002F> \u003C!-- 5MB -->\n\n\u003C!-- Good: Optimized and responsive -->\n\u003Cimg \n  src=\"photo-small.webp\" \n  srcset=\"photo-small.webp 400w, photo-large.webp 800w\"\n  loading=\"lazy\"\n  width=\"400\"\n  height=\"300\"\n\u002F> \u003C!-- 50KB -->\n```\n\n### Algorithm Optimization\n\n**Problem: Inefficient Algorithm**\n```javascript\n\u002F\u002F Bad: O(n²) - nested loops\nfunction findDuplicates(arr) {\n  const duplicates = [];\n  for (let i = 0; i \u003C arr.length; i++) {\n    for (let j = i + 1; j \u003C arr.length; j++) {\n      if (arr[i] === arr[j]) duplicates.push(arr[i]);\n    }\n  }\n  return duplicates;\n}\n\n\u002F\u002F Good: O(n) - single pass with Set\nfunction findDuplicates(arr) {\n  const seen = new Set();\n  const duplicates = new Set();\n  for (const item of arr) {\n    if (seen.has(item)) duplicates.add(item);\n    seen.add(item);\n  }\n  return Array.from(duplicates);\n}\n```\n\n**Problem: Repeated Calculations**\n```javascript\n\u002F\u002F Bad: Calculates every time\nfunction getTotal(items) {\n  return items.reduce((sum, item) => sum + item.price * item.quantity, 0);\n}\n\u002F\u002F Called 100 times in render\n\n\u002F\u002F Good: Memoized\nconst getTotal = useMemo(() => {\n  return items.reduce((sum, item) => sum + item.price * item.quantity, 0);\n}, [items]);\n```\n\n### Memory Optimization\n\n**Problem: Memory Leak**\n```javascript\n\u002F\u002F Bad: Event listener not cleaned up\nuseEffect(() => {\n  window.addEventListener('scroll', handleScroll);\n  \u002F\u002F Memory leak!\n}, []);\n\n\u002F\u002F Good: Cleanup\nuseEffect(() => {\n  window.addEventListener('scroll', handleScroll);\n  return () => window.removeEventListener('scroll', handleScroll);\n}, []);\n```\n\n**Problem: Large Data in Memory**\n```javascript\n\u002F\u002F Bad: Loads entire file into memory\nconst data = fs.readFileSync('huge-file.txt'); \u002F\u002F 1GB\n\n\u002F\u002F Good: Stream it\nconst stream = fs.createReadStream('huge-file.txt');\nstream.on('data', chunk => process(chunk));\n```\n\n## Measuring Impact\n\nAlways measure before and after:\n\n```javascript\n\u002F\u002F Before optimization\nconsole.time('query');\nconst users = await db.users.find();\nconsole.timeEnd('query');\n\u002F\u002F query: 2341ms\n\n\u002F\u002F After optimization (added index)\nconsole.time('query');\nconst users = await db.users.find();\nconsole.timeEnd('query');\n\u002F\u002F query: 23ms\n\n\u002F\u002F Improvement: 100x faster!\n```\n\n## Performance Budgets\n\nSet targets:\n\n```\nPage Load: \u003C 2 seconds\nAPI Response: \u003C 200ms\nDatabase Query: \u003C 50ms\nBundle Size: \u003C 200KB\nTime to Interactive: \u003C 3 seconds\n```\n\n## Tools\n\n**Browser:**\n- Chrome DevTools Performance tab\n- Lighthouse (audit)\n- Network tab (waterfall)\n\n**Node.js:**\n- `node --prof` (profiling)\n- `clinic` (diagnostics)\n- `autocannon` (load testing)\n\n**Database:**\n- `EXPLAIN ANALYZE` (query plans)\n- Slow query log\n- Database profiler\n\n**Monitoring:**\n- New Relic\n- Datadog\n- Sentry Performance\n\n## Quick Wins\n\nEasy optimizations with big impact:\n\n1. **Add database indexes** on frequently queried columns\n2. **Enable gzip compression** on server\n3. **Add caching** for expensive operations\n4. **Lazy load** images and heavy components\n5. **Use CDN** for static assets\n6. **Minify and compress** JavaScript\u002FCSS\n7. **Remove unused dependencies**\n8. **Use pagination** instead of loading all data\n9. **Optimize images** (WebP, proper sizing)\n10. **Enable HTTP\u002F2** on server\n\n## Optimization Checklist\n\n- [ ] Measured current performance\n- [ ] Identified bottleneck\n- [ ] Applied optimization\n- [ ] Measured improvement\n- [ ] Verified functionality still works\n- [ ] No new bugs introduced\n- [ ] Documented the change\n\n## When NOT to Optimize\n\n- Premature optimization (optimize when it's actually slow)\n- Micro-optimizations (save 1ms when page takes 5 seconds)\n- Readable code is more important than tiny speed gains\n- If it's already fast enough\n\n## Key Principles\n\n- Measure before optimizing\n- Fix the biggest bottleneck first\n- Measure after to prove improvement\n- Don't sacrifice readability for tiny gains\n- Profile in production-like environment\n- Consider the 80\u002F20 rule (20% of code causes 80% of slowness)\n\n## Related Skills\n\n- `@database-design` - Query optimization\n- `@codebase-audit-pre-push` - Code review\n- `@bug-hunter` - Debugging\n",{"name":5,"risk":22,"source":27,"category":23,"date_added":36,"description":7},"2026-03-05","main","7a38d8e7073e61c16eda85681cb32fb68a8657a5","skills-store\u002Fcopilot\u002Fperformance-optimizer","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router","https:\u002F\u002Fgithub.com\u002Fsapsapshen","2026-04-14 21:12:12",{"source":8,"skillName":5,"commands":44,"prompt":54,"zipAvailable":55},[45,48,51],{"tool":46,"command":47},"npx","npx skills add sapsapshen\u002Fai-memory-router --skill performance-optimizer",{"tool":49,"command":50},"bunx","bunx skills add sapsapshen\u002Fai-memory-router --skill performance-optimizer",{"tool":52,"command":53},"pnpm","pnpm dlx skills add sapsapshen\u002Fai-memory-router --skill performance-optimizer","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcopilot\u002Fperformance-optimizer\u002FSKILL.md",true,[57],{"path":58,"resourceType":59,"resourceTypeDesc":60,"sizeBytes":61,"sourceHtmlUrl":62},"README.md","REFERENCE","参考文档",465,"https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcopilot\u002Fperformance-optimizer\u002FREADME.md",[64,88,114,124,137,156],{"skillNo":65,"name":66,"nameZh":6,"description":67,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":68,"categories":69,"keywords":75,"publishedAt":31},"01M71ATQRKG48SH06FQ697T5G9","wechat-search","Search WeChat Official Account articles using OpenClaw's web search and fetch capabilities with compliance-focused design.","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Fwechat-search-release\u002FSKILL.md",[70],{"categoryNo":71,"categoryName":72,"taxonomyType":73,"taxonomyTypeDesc":74},"01JBSEEDCAT000000000000037","律师与法务","PROFESSION","适用职业",[76,77,78,79,80,81,82,83,84,85,86,87],"wechat search","wechat","search","capabilities","openclaw","design","web search","compliance","web","official","fetch","with",{"skillNo":89,"name":90,"nameZh":6,"description":91,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":92,"categories":93,"keywords":94,"publishedAt":31},"01M71ATNAVGZB35PFYM2GC5N00","trend-tap","Real-time trending topics aggregator across 7 platforms (X\u002FTwitter, Reddit, Google Trends, Hacker News, Zhihu, Bilibili, Weibo). Trigger: when user says 'trend', 'trends', 'trend tap', '热点', '热搜', or asks what is trending\u002Fhot. Do NOT use web_search — this skill already fetches live data from all platforms with zero API keys.","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Ftrend-tap\u002FSKILL.md",[],[95,96,97,98,99,100,78,101,102,103,104,105,106,107,108,109,110,111,112,113],"trend","trend tap","tap","api keys","Bash","time","trending","hacker","aggregator","do","when","brew","live","data","google","install","read","across","api",{"skillNo":115,"name":116,"nameZh":6,"description":117,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":118,"categories":119,"keywords":120,"publishedAt":31},"01M71ATJ9AM5KM15AA8PS302EB","trend-radar","Real-time trending topics aggregator across 7 platforms (X\u002FTwitter, Reddit, Google Trends, Hacker News, Zhihu, Bilibili, Weibo). Trigger: when user says 'trend', 'trends', 'trend pulse', '热点', '热搜', or asks what is trending\u002Fhot. Do NOT use web_search — this skill already fetches live data from all platforms with zero API keys.","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Ftrend-radar\u002FSKILL.md",[],[121,122,95,106,107,108,109,99,78,111,123,112,113,105,103,102,101,110,100,98],"trend radar","radar","pulse",{"skillNo":125,"name":126,"nameZh":6,"description":127,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":128,"categories":129,"keywords":130,"publishedAt":31},"01M71ATGF095N3EJM9G8SD0BB5","tech-news-daily","每日科技新闻汇——从全球多个 RSS 源抓取最新科技新闻，翻译（英→中）、去重、排版成每日简报。当用户询问科技新闻、科技新鲜事、每日科技、技术动态、Daily Tech News 或类似表达时触发此技能。","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Ftech-news-daily\u002FSKILL.md",[],[131,132,133,134,135,136],"news","tech","tech news daily","daily","rss","翻译",{"skillNo":138,"name":139,"nameZh":6,"description":140,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":141,"categories":142,"keywords":148,"publishedAt":31},"01M71ATFAEAMQ17M70NQNY7SR8","summarize","Summarize URLs or files with the summarize CLI (web, PDFs, images, audio, YouTube).","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Fsummarize\u002FSKILL.md",[143],{"categoryNo":144,"categoryName":145,"taxonomyType":146,"taxonomyTypeDesc":147},"01JBSEEDCAT000000000000021","资料检索与研究","SCENARIO","使用场景",[139,84,149,150,151,87,106,152,153,154,97,155,110],"Audio","cli","youtube","images","https","files","pdfs",{"skillNo":157,"name":158,"nameZh":6,"description":159,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":160,"categories":161,"keywords":162,"publishedAt":31},"01M71ATDNS3R0M4H936PACQAWZ","sonoscli","Control Sonos speakers (discover\u002Fstatus\u002Fplay\u002Fvolume\u002Fgroup).","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Fsonoscli\u002FSKILL.md",[],[158,163,164,165,110,166,153,167,168,169,170,171],"status","play","go","latest","github","discover","control","cmd","volume"]