[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6D6RDSCERRYHXPXT7T8JADM":3,"skill-same:01M6D6RDSCERRYHXPXT7T8JADM":47},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":20,"linkOnly":21,"markdownContent":22,"markdownBody":22,"frontMatter":23,"refName":24,"commitSha":25,"skillDirectory":26,"forksCount":27,"repositoryHtmlUrl":28,"repositoryHomepageUrl":6,"ownerHtmlUrl":29,"ownerBlogUrl":30,"ownerDescription":31,"updatedAt":32,"install":33,"resources":46},"01M6D6RDSCERRYHXPXT7T8JADM","performance-profiler",null,"oabdelmaksoud\u002FSuperClaw","oabdelmaksoud","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F50699149?v=4","01M6D5CVVN778ZCDP1WHS816SP","Omar Abdelmaksoud","01M6D5CW1RHNSKCJR85GJACBFT",2,"MIT","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FSuperClaw\u002Fblob\u002Fmain\u002Fupstream-import\u002Fclaude-skills\u002Freferences\u002Fengineering\u002Fperformance-profiler\u002FSKILL.md",[],[18,19],"performance","performance profiler","2026-11-10 10:12:30",false,"# Performance Profiler\n\n**Tier:** POWERFUL  \n**Category:** Engineering  \n**Domain:** Performance Engineering  \n\n---\n\n## Overview\n\nSystematic performance profiling for Node.js, Python, and Go applications. Identifies CPU, memory, and I\u002FO bottlenecks; generates flamegraphs; analyzes bundle sizes; optimizes database queries; detects memory leaks; and runs load tests with k6 and Artillery. Always measures before and after.\n\n## Core Capabilities\n\n- **CPU profiling** — flamegraphs for Node.js, py-spy for Python, pprof for Go\n- **Memory profiling** — heap snapshots, leak detection, GC pressure\n- **Bundle analysis** — webpack-bundle-analyzer, Next.js bundle analyzer\n- **Database optimization** — EXPLAIN ANALYZE, slow query log, N+1 detection\n- **Load testing** — k6 scripts, Artillery scenarios, ramp-up patterns\n- **Before\u002Fafter measurement** — establish baseline, profile, optimize, verify\n\n---\n\n## When to Use\n\n- App is slow and you don't know where the bottleneck is\n- P99 latency exceeds SLA before a release\n- Memory usage grows over time (suspected leak)\n- Bundle size increased after adding dependencies\n- Preparing for a traffic spike (load test before launch)\n- Database queries taking >100ms\n\n---\n\n## Golden Rule: Measure First\n\n```bash\n# Establish baseline BEFORE any optimization\n# Record: P50, P95, P99 latency | RPS | error rate | memory usage\n\n# Wrong: \"I think the N+1 query is slow, let me fix it\"\n# Right: Profile → confirm bottleneck → fix → measure again → verify improvement\n```\n\n---\n\n## Node.js Profiling\n\n### CPU Flamegraph\n\n```bash\n# Method 1: clinic.js (best for development)\nnpm install -g clinic\n\n# CPU flamegraph\nclinic flame -- node dist\u002Fserver.js\n\n# Heap profiler\nclinic heapprofiler -- node dist\u002Fserver.js\n\n# Bubble chart (event loop blocking)\nclinic bubbles -- node dist\u002Fserver.js\n\n# Load with autocannon while profiling\nautocannon -c 50 -d 30 http:\u002F\u002Flocalhost:3000\u002Fapi\u002Ftasks &\nclinic flame -- node dist\u002Fserver.js\n```\n\n```bash\n# Method 2: Node.js built-in profiler\nnode --prof dist\u002Fserver.js\n# After running some load:\nnode --prof-process isolate-*.log | head -100\n```\n\n```bash\n# Method 3: V8 CPU profiler via inspector\nnode --inspect dist\u002Fserver.js\n# Open Chrome DevTools → Performance → Record\n```\n\n### Heap Snapshot \u002F Memory Leak Detection\n\n```javascript\n\u002F\u002F Add to your server for on-demand heap snapshots\nimport v8 from 'v8'\nimport fs from 'fs'\n\n\u002F\u002F Endpoint: POST \u002Fdebug\u002Fheap-snapshot (protect with auth!)\napp.post('\u002Fdebug\u002Fheap-snapshot', (req, res) => {\n  const filename = `heap-${Date.now()}.heapsnapshot`\n  const snapshot = v8.writeHeapSnapshot(filename)\n  res.json({ snapshot })\n})\n```\n\n```bash\n# Take snapshots over time and compare in Chrome DevTools\ncurl -X POST http:\u002F\u002Flocalhost:3000\u002Fdebug\u002Fheap-snapshot\n# Wait 5 minutes of load\ncurl -X POST http:\u002F\u002Flocalhost:3000\u002Fdebug\u002Fheap-snapshot\n# Open both snapshots in Chrome → Memory → Compare\n```\n\n### Detect Event Loop Blocking\n\n```javascript\n\u002F\u002F Add blocked-at to detect synchronous blocking\nimport blocked from 'blocked-at'\n\nblocked((time, stack) => {\n  console.warn(`Event loop blocked for ${time}ms`)\n  console.warn(stack.join('\\n'))\n}, { threshold: 100 }) \u002F\u002F Alert if blocked > 100ms\n```\n\n### Node.js Memory Profiling Script\n\n```javascript\n\u002F\u002F scripts\u002Fmemory-profile.mjs\n\u002F\u002F Run: node --experimental-vm-modules scripts\u002Fmemory-profile.mjs\n\nimport { createRequire } from 'module'\nconst require = createRequire(import.meta.url)\n\nfunction formatBytes(bytes) {\n  return (bytes \u002F 1024 \u002F 1024).toFixed(2) + ' MB'\n}\n\nfunction measureMemory(label) {\n  const mem = process.memoryUsage()\n  console.log(`\\n[${label}]`)\n  console.log(`  RSS:       ${formatBytes(mem.rss)}`)\n  console.log(`  Heap Used: ${formatBytes(mem.heapUsed)}`)\n  console.log(`  Heap Total:${formatBytes(mem.heapTotal)}`)\n  console.log(`  External:  ${formatBytes(mem.external)}`)\n  return mem\n}\n\nconst baseline = measureMemory('Baseline')\n\n\u002F\u002F Simulate your operation\nfor (let i = 0; i \u003C 1000; i++) {\n  \u002F\u002F Replace with your actual operation\n  const result = await someOperation()\n}\n\nconst after = measureMemory('After 1000 operations')\n\nconsole.log(`\\n[Delta]`)\nconsole.log(`  Heap Used: +${formatBytes(after.heapUsed - baseline.heapUsed)}`)\n\n\u002F\u002F If heap keeps growing across GC cycles, you have a leak\nglobal.gc?.() \u002F\u002F Run with --expose-gc flag\nconst afterGC = measureMemory('After GC')\nif (afterGC.heapUsed > baseline.heapUsed * 1.1) {\n  console.warn('⚠️  Possible memory leak detected (>10% growth after GC)')\n}\n```\n\n---\n\n## Python Profiling\n\n### CPU Profiling with py-spy\n\n```bash\n# Install\npip install py-spy\n\n# Profile a running process (no code changes needed)\npy-spy top --pid $(pgrep -f \"uvicorn\")\n\n# Generate flamegraph SVG\npy-spy record -o flamegraph.svg --pid $(pgrep -f \"uvicorn\") --duration 30\n\n# Profile from the start\npy-spy record -o flamegraph.svg -- python -m uvicorn app.main:app\n\n# Open flamegraph.svg in browser — look for wide bars = hot code paths\n```\n\n### cProfile for function-level profiling\n\n```python\n# scripts\u002Fprofile_endpoint.py\nimport cProfile\nimport pstats\nimport io\nfrom app.services.task_service import TaskService\n\ndef run():\n    service = TaskService()\n    for _ in range(100):\n        service.list_tasks(user_id=\"user_1\", page=1, limit=20)\n\nprofiler = cProfile.Profile()\nprofiler.enable()\nrun()\nprofiler.disable()\n\n# Print top 20 functions by cumulative time\nstream = io.StringIO()\nstats = pstats.Stats(profiler, stream=stream)\nstats.sort_stats('cumulative')\nstats.print_stats(20)\nprint(stream.getvalue())\n```\n\n### Memory profiling with memory_profiler\n\n```python\n# pip install memory-profiler\nfrom memory_profiler import profile\n\n@profile\ndef my_function():\n    # Function to profile\n    data = load_large_dataset()\n    result = process(data)\n    return result\n```\n\n```bash\n# Run with line-by-line memory tracking\npython -m memory_profiler scripts\u002Fprofile_function.py\n\n# Output:\n# Line #    Mem usage    Increment   Line Contents\n# ================================================\n#     10   45.3 MiB   45.3 MiB   def my_function():\n#     11   78.1 MiB   32.8 MiB       data = load_large_dataset()\n#     12  156.2 MiB   78.1 MiB       result = process(data)\n```\n\n---\n\n## Go Profiling with pprof\n\n```go\n\u002F\u002F main.go — add pprof endpoints\nimport _ \"net\u002Fhttp\u002Fpprof\"\nimport \"net\u002Fhttp\"\n\nfunc main() {\n    \u002F\u002F pprof endpoints at \u002Fdebug\u002Fpprof\u002F\n    go func() {\n        log.Println(http.ListenAndServe(\":6060\", nil))\n    }()\n    \u002F\u002F ... rest of your app\n}\n```\n\n```bash\n# CPU profile (30s)\ngo tool pprof -http=:8080 http:\u002F\u002Flocalhost:6060\u002Fdebug\u002Fpprof\u002Fprofile?seconds=30\n\n# Memory profile\ngo tool pprof -http=:8080 http:\u002F\u002Flocalhost:6060\u002Fdebug\u002Fpprof\u002Fheap\n\n# Goroutine leak detection\ncurl http:\u002F\u002Flocalhost:6060\u002Fdebug\u002Fpprof\u002Fgoroutine?debug=1\n\n# In pprof UI: \"Flame Graph\" view → find the tallest bars\n```\n\n---\n\n## Bundle Size Analysis\n\n### Next.js Bundle Analyzer\n\n```bash\n# Install\npnpm add -D @next\u002Fbundle-analyzer\n\n# next.config.js\nconst withBundleAnalyzer = require('@next\u002Fbundle-analyzer')({\n  enabled: process.env.ANALYZE === 'true',\n})\nmodule.exports = withBundleAnalyzer({})\n\n# Run analyzer\nANALYZE=true pnpm build\n# Opens browser with treemap of bundle\n```\n\n### What to look for\n\n```bash\n# Find the largest chunks\npnpm build 2>&1 | grep -E \"^\\s+(λ|○|●)\" | sort -k4 -rh | head -20\n\n# Check if a specific package is too large\n# Visit: https:\u002F\u002Fbundlephobia.com\u002Fpackage\u002Fmoment@2.29.4\n# moment: 67.9kB gzipped → replace with date-fns (13.8kB) or dayjs (6.9kB)\n\n# Find duplicate packages\npnpm dedupe --check\n\n# Visualize what's in a chunk\nnpx source-map-explorer .next\u002Fstatic\u002Fchunks\u002F*.js\n```\n\n### Common bundle wins\n\n```typescript\n\u002F\u002F Before: import entire lodash\nimport _ from 'lodash'  \u002F\u002F 71kB\n\n\u002F\u002F After: import only what you need\nimport debounce from 'lodash\u002Fdebounce'  \u002F\u002F 2kB\n\n\u002F\u002F Before: moment.js\nimport moment from 'moment'  \u002F\u002F 67kB\n\n\u002F\u002F After: dayjs\nimport dayjs from 'dayjs'  \u002F\u002F 7kB\n\n\u002F\u002F Before: static import (always in bundle)\nimport HeavyChart from '@\u002Fcomponents\u002FHeavyChart'\n\n\u002F\u002F After: dynamic import (loaded on demand)\nconst HeavyChart = dynamic(() => import('@\u002Fcomponents\u002FHeavyChart'), {\n  loading: () => \u003CSkeleton \u002F>,\n})\n```\n\n---\n\n## Database Query Optimization\n\n### Find slow queries\n\n```sql\n-- PostgreSQL: enable pg_stat_statements\nCREATE EXTENSION IF NOT EXISTS pg_stat_statements;\n\n-- Top 20 slowest queries\nSELECT\n  round(mean_exec_time::numeric, 2) AS mean_ms,\n  calls,\n  round(total_exec_time::numeric, 2) AS total_ms,\n  round(stddev_exec_time::numeric, 2) AS stddev_ms,\n  left(query, 80) AS query\nFROM pg_stat_statements\nWHERE calls > 10\nORDER BY mean_exec_time DESC\nLIMIT 20;\n\n-- Reset stats\nSELECT pg_stat_statements_reset();\n```\n\n```bash\n# MySQL slow query log\nmysql -e \"SET GLOBAL slow_query_log = 'ON'; SET GLOBAL long_query_time = 0.1;\"\ntail -f \u002Fvar\u002Flog\u002Fmysql\u002Fslow-query.log\n```\n\n### EXPLAIN ANALYZE\n\n```sql\n-- Always use EXPLAIN (ANALYZE, BUFFERS) for real timing\nEXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT)\nSELECT t.*, u.name as assignee_name\nFROM tasks t\nLEFT JOIN users u ON u.id = t.assignee_id\nWHERE t.project_id = 'proj_123'\n  AND t.deleted_at IS NULL\nORDER BY t.created_at DESC\nLIMIT 20;\n\n-- Look for:\n-- Seq Scan on large table → needs index\n-- Nested Loop with high rows → N+1, consider JOIN or batch\n-- Sort → can index handle the sort?\n-- Hash Join → fine for moderate sizes\n```\n\n### Detect N+1 Queries\n\n```typescript\n\u002F\u002F Add query logging in dev\nimport { db } from '.\u002Fclient'\n\n\u002F\u002F Drizzle: enable logging\nconst db = drizzle(pool, { logger: true })\n\n\u002F\u002F Or use a query counter middleware\nlet queryCount = 0\ndb.$on('query', () => queryCount++)\n\n\u002F\u002F In tests:\nqueryCount = 0\nconst tasks = await getTasksWithAssignees(projectId)\nexpect(queryCount).toBe(1)  \u002F\u002F Fail if it's 21 (1 + 20 N+1s)\n```\n\n```python\n# Django: detect N+1 with django-silk or nplusone\nfrom nplusone.ext.django.middleware import NPlusOneMiddleware\nMIDDLEWARE = ['nplusone.ext.django.middleware.NPlusOneMiddleware']\nNPLUSONE_RAISE = True  # Raise exception on N+1 in tests\n```\n\n### Fix N+1 — Before\u002FAfter\n\n```typescript\n\u002F\u002F Before: N+1 (1 query for tasks + N queries for assignees)\nconst tasks = await db.select().from(tasksTable)\nfor (const task of tasks) {\n  task.assignee = await db.select().from(usersTable)\n    .where(eq(usersTable.id, task.assigneeId))\n    .then(r => r[0])\n}\n\n\u002F\u002F After: 1 query with JOIN\nconst tasks = await db\n  .select({\n    id: tasksTable.id,\n    title: tasksTable.title,\n    assigneeName: usersTable.name,\n    assigneeEmail: usersTable.email,\n  })\n  .from(tasksTable)\n  .leftJoin(usersTable, eq(usersTable.id, tasksTable.assigneeId))\n  .where(eq(tasksTable.projectId, projectId))\n```\n\n---\n\n## Load Testing with k6\n\n```javascript\n\u002F\u002F tests\u002Fload\u002Fapi-load-test.js\nimport http from 'k6\u002Fhttp'\nimport { check, sleep } from 'k6'\nimport { Rate, Trend } from 'k6\u002Fmetrics'\n\nconst errorRate = new Rate('errors')\nconst taskListDuration = new Trend('task_list_duration')\n\nexport const options = {\n  stages: [\n    { duration: '30s', target: 10 },   \u002F\u002F Ramp up to 10 VUs\n    { duration: '1m',  target: 50 },   \u002F\u002F Ramp to 50 VUs\n    { duration: '2m',  target: 50 },   \u002F\u002F Sustain 50 VUs\n    { duration: '30s', target: 100 },  \u002F\u002F Spike to 100 VUs\n    { duration: '1m',  target: 50 },   \u002F\u002F Back to 50\n    { duration: '30s', target: 0 },    \u002F\u002F Ramp down\n  ],\n  thresholds: {\n    http_req_duration: ['p(95)\u003C500'],   \u002F\u002F 95% of requests \u003C 500ms\n    http_req_duration: ['p(99)\u003C1000'],  \u002F\u002F 99% \u003C 1s\n    errors: ['rate\u003C0.01'],              \u002F\u002F Error rate \u003C 1%\n    task_list_duration: ['p(95)\u003C200'],  \u002F\u002F Task list specifically \u003C 200ms\n  },\n}\n\nconst BASE_URL = __ENV.BASE_URL || 'http:\u002F\u002Flocalhost:3000'\n\nexport function setup() {\n  \u002F\u002F Get auth token once\n  const loginRes = http.post(`${BASE_URL}\u002Fapi\u002Fauth\u002Flogin`, JSON.stringify({\n    email: 'loadtest@example.com',\n    password: 'loadtest123',\n  }), { headers: { 'Content-Type': 'application\u002Fjson' } })\n  \n  return { token: loginRes.json('token') }\n}\n\nexport default function(data) {\n  const headers = {\n    'Authorization': `Bearer ${data.token}`,\n    'Content-Type': 'application\u002Fjson',\n  }\n  \n  \u002F\u002F Scenario 1: List tasks\n  const start = Date.now()\n  const listRes = http.get(`${BASE_URL}\u002Fapi\u002Ftasks?limit=20`, { headers })\n  taskListDuration.add(Date.now() - start)\n  \n  check(listRes, {\n    'list tasks: status 200': (r) => r.status === 200,\n    'list tasks: has items': (r) => r.json('items') !== undefined,\n  }) || errorRate.add(1)\n  \n  sleep(0.5)\n  \n  \u002F\u002F Scenario 2: Create task\n  const createRes = http.post(\n    `${BASE_URL}\u002Fapi\u002Ftasks`,\n    JSON.stringify({ title: `Load test task ${Date.now()}`, priority: 'medium' }),\n    { headers }\n  )\n  \n  check(createRes, {\n    'create task: status 201': (r) => r.status === 201,\n  }) || errorRate.add(1)\n  \n  sleep(1)\n}\n\nexport function teardown(data) {\n  \u002F\u002F Cleanup: delete load test tasks\n}\n```\n\n```bash\n# Run load test\nk6 run tests\u002Fload\u002Fapi-load-test.js \\\n  --env BASE_URL=https:\u002F\u002Fstaging.myapp.com\n\n# With Grafana output\nk6 run --out influxdb=http:\u002F\u002Flocalhost:8086\u002Fk6 tests\u002Fload\u002Fapi-load-test.js\n```\n\n---\n\n## Before\u002FAfter Measurement Template\n\n```markdown\n## Performance Optimization: [What You Fixed]\n\n**Date:** 2026-03-01  \n**Engineer:** @username  \n**Ticket:** PROJ-123  \n\n### Problem\n[1-2 sentences: what was slow, how was it observed]\n\n### Root Cause\n[What the profiler revealed]\n\n### Baseline (Before)\n| Metric | Value |\n|--------|-------|\n| P50 latency | 480ms |\n| P95 latency | 1,240ms |\n| P99 latency | 3,100ms |\n| RPS @ 50 VUs | 42 |\n| Error rate | 0.8% |\n| DB queries\u002Freq | 23 (N+1) |\n\nProfiler evidence: [link to flamegraph or screenshot]\n\n### Fix Applied\n[What changed — code diff or description]\n\n### After\n| Metric | Before | After | Delta |\n|--------|--------|-------|-------|\n| P50 latency | 480ms | 48ms | -90% |\n| P95 latency | 1,240ms | 120ms | -90% |\n| P99 latency | 3,100ms | 280ms | -91% |\n| RPS @ 50 VUs | 42 | 380 | +804% |\n| Error rate | 0.8% | 0% | -100% |\n| DB queries\u002Freq | 23 | 1 | -96% |\n\n### Verification\nLoad test run: [link to k6 output]\n```\n\n---\n\n## Optimization Checklist\n\n### Quick wins (check these first)\n\n```\nDatabase\n□ Missing indexes on WHERE\u002FORDER BY columns\n□ N+1 queries (check query count per request)\n□ Loading all columns when only 2-3 needed (SELECT *)\n□ No LIMIT on unbounded queries\n□ Missing connection pool (creating new connection per request)\n\nNode.js\n□ Sync I\u002FO (fs.readFileSync) in hot path\n□ JSON.parse\u002Fstringify of large objects in hot loop\n□ Missing caching for expensive computations\n□ No compression (gzip\u002Fbrotli) on responses\n□ Dependencies loaded in request handler (move to module level)\n\nBundle\n□ Moment.js → dayjs\u002Fdate-fns\n□ Lodash (full) → lodash\u002Ffunction imports\n□ Static imports of heavy components → dynamic imports\n□ Images not optimized \u002F not using next\u002Fimage\n□ No code splitting on routes\n\nAPI\n□ No pagination on list endpoints\n□ No response caching (Cache-Control headers)\n□ Serial awaits that could be parallel (Promise.all)\n□ Fetching related data in a loop instead of JOIN\n```\n\n---\n\n## Common Pitfalls\n\n- **Optimizing without measuring** — you'll optimize the wrong thing\n- **Testing in development** — profile against production-like data volumes\n- **Ignoring P99** — P50 can look fine while P99 is catastrophic\n- **Premature optimization** — fix correctness first, then performance\n- **Not re-measuring** — always verify the fix actually improved things\n- **Load testing production** — use staging with production-size data\n\n---\n\n## Best Practices\n\n1. **Baseline first, always** — record metrics before touching anything\n2. **One change at a time** — isolate the variable to confirm causation\n3. **Profile with realistic data** — 10 rows in dev, millions in prod — different bottlenecks\n4. **Set performance budgets** — `p(95) \u003C 200ms` in CI thresholds with k6\n5. **Monitor continuously** — add Datadog\u002FPrometheus metrics for key paths\n6. **Cache invalidation strategy** — cache aggressively, invalidate precisely\n7. **Document the win** — before\u002Fafter in the PR description motivates the team\n",{},"main","7b610356e36623652299fa2acb477ff821b1d920","upstream-import\u002Fclaude-skills\u002Freferences\u002Fengineering\u002Fperformance-profiler",0,"https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FSuperClaw","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fo-abdelmaksoud\u002F","Full-Stack Engineer | AI Systems Architect | Building autonomous multi-agent systems","2026-03-08 21:12:53",{"source":7,"skillName":5,"commands":34,"prompt":44,"zipAvailable":45},[35,38,41],{"tool":36,"command":37},"npx","npx skills add oabdelmaksoud\u002FSuperClaw --skill performance-profiler",{"tool":39,"command":40},"bunx","bunx skills add oabdelmaksoud\u002FSuperClaw --skill performance-profiler",{"tool":42,"command":43},"pnpm","pnpm dlx skills add oabdelmaksoud\u002FSuperClaw --skill performance-profiler","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FSuperClaw\u002Fblob\u002Fmain\u002Fupstream-import\u002Fclaude-skills\u002Freferences\u002Fengineering\u002Fperformance-profiler\u002FSKILL.md",true,[],[48,69,83,114,139,158],{"skillNo":49,"name":50,"nameZh":6,"description":51,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":52,"categories":53,"keywords":59,"publishedAt":20},"01M6D88QCPTBZVCRED0NZ1Y8K8","visa-doc-translate","Translate visa application documents (images) to English and create a bilingual PDF with original and translation","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FSuperClaw\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fskills\u002Fvisa-doc-translate\u002FSKILL.md",[54],{"categoryNo":55,"categoryName":56,"taxonomyType":57,"taxonomyTypeDesc":58},"01JBSEEDCAT000000000000002","文档处理","SCENARIO","使用场景",[60,61,62,63,64,65,66,67,68],"translate","doc","visa doc translate","translation","application","create","images","PDF","documents",{"skillNo":70,"name":71,"nameZh":6,"description":72,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":73,"categories":74,"keywords":75,"publishedAt":20},"01M6D88NBM95T3TFM50CYYAP65","verification-loop","A comprehensive verification system for Claude Code sessions.","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FSuperClaw\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fskills\u002Fverification-loop\u002FSKILL.md",[],[76,77,78,79,80,81,82],"verification","loop","verification loop","sessions","code","claude code sessions","system",{"skillNo":84,"name":85,"nameZh":6,"description":86,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":87,"categories":88,"keywords":100,"publishedAt":20},"01M6D88JFZ2P996GVRHJNSZSTM","tdd-workflow","Use this skill when writing new features, fixing bugs, or refactoring code. Enforces test-driven development with 80%+ coverage including unit, integration, and E2E tests.","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FSuperClaw\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fskills\u002Ftdd-workflow\u002FSKILL.md",[89,92,95],{"categoryNo":90,"categoryName":91,"taxonomyType":57,"taxonomyTypeDesc":58},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":93,"categoryName":94,"taxonomyType":57,"taxonomyTypeDesc":58},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":96,"categoryName":97,"taxonomyType":98,"taxonomyTypeDesc":99},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[101,102,103,104,105,106,80,107,108,109,110,111,112,113],"tdd","workflow","tdd workflow","e2e tests","e2e","integration","development","use","test","refactoring","coverage","tests","writing",{"skillNo":115,"name":116,"nameZh":6,"description":117,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":118,"categories":119,"keywords":120,"publishedAt":20},"01M6D88FTHRRSVJMXF2G7MQAK3","swiftui-patterns","SwiftUI architecture patterns, state management with @Observable, view composition, navigation, performance optimization, and modern iOS\u002FmacOS UI best practices.","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FSuperClaw\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fskills\u002Fswiftui-patterns\u002FSKILL.md",[],[121,122,123,124,125,18,126,127,128,129,130,131,132,133,134,135,136,137,138],"patterns","swiftui","swiftui patterns","architecture","macos","state management","best practices","state","ui","Optimization","ios","architecture patterns","Composition","performance optimization","view","management","swiftui architecture","navigation",{"skillNo":140,"name":141,"nameZh":6,"description":142,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":143,"categories":144,"keywords":146,"publishedAt":20},"01M6D88D527QTQT9DKHTRFN6EA","swift-protocol-di-testing","Protocol-based dependency injection for testable Swift code — mock file system, network, and external APIs using focused protocols and Swift Testing.","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FSuperClaw\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fskills\u002Fswift-protocol-di-testing\u002FSKILL.md",[145],{"categoryNo":90,"categoryName":91,"taxonomyType":57,"taxonomyTypeDesc":58},[147,148,149,150,80,151,152,153,154,82,155,156,157],"swift protocol di testing","protocol","swift","testing","protocols","file","network","injection","dependency","swift testing","dependency injection",{"skillNo":159,"name":160,"nameZh":6,"description":161,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":162,"categories":163,"keywords":164,"publishedAt":20},"01M6D88AJW8H2QNWSW5ZY82R43","swift-concurrency-6-2","Swift 6.2 Approachable Concurrency — single-threaded by default, @concurrent for explicit background offloading, isolated conformances for main actor types.","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FSuperClaw\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fskills\u002Fswift-concurrency-6-2\u002FSKILL.md",[],[165,166,149,167,168,24],"concurrency","swift concurrency","swift concurrency 6 2","default"]