[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6XEE0HWZSWB4TV1W1DCH5S5":3,"skill-same:01M6XEE0HWZSWB4TV1W1DCH5S5":58},{"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":38,"commitSha":39,"skillDirectory":40,"forksCount":14,"repositoryHtmlUrl":41,"repositoryHomepageUrl":6,"ownerHtmlUrl":42,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":43,"install":44,"resources":57},"01M6XEE0HWZSWB4TV1W1DCH5S5","aws-serverless",null,"Proper Lambda function structure with error handling","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\u002Faws-serverless\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30],"aws","aws serverless","serverless","error handling","apache","lambda","structure","error","with","unknown","spawner","2026","2026-11-10 10:12:30",false,"---\nname: aws-serverless\ndescription: \"Proper Lambda function structure with error handling\"\nrisk: unknown\nsource: \"vibeship-spawner-skills (Apache 2.0)\"\ndate_added: \"2026-02-27\"\n---\n\n# AWS Serverless\n\n## Patterns\n\n### Lambda Handler Pattern\n\nProper Lambda function structure with error handling\n\n**When to use**: ['Any Lambda function implementation', 'API handlers, event processors, scheduled tasks']\n\n```python\n```javascript\n\u002F\u002F Node.js Lambda Handler\n\u002F\u002F handler.js\n\n\u002F\u002F Initialize outside handler (reused across invocations)\nconst { DynamoDBClient } = require('@aws-sdk\u002Fclient-dynamodb');\nconst { DynamoDBDocumentClient, GetCommand } = require('@aws-sdk\u002Flib-dynamodb');\n\nconst client = new DynamoDBClient({});\nconst docClient = DynamoDBDocumentClient.from(client);\n\n\u002F\u002F Handler function\nexports.handler = async (event, context) => {\n  \u002F\u002F Optional: Don't wait for event loop to clear (Node.js)\n  context.callbackWaitsForEmptyEventLoop = false;\n\n  try {\n    \u002F\u002F Parse input based on event source\n    const body = typeof event.body === 'string'\n      ? JSON.parse(event.body)\n      : event.body;\n\n    \u002F\u002F Business logic\n    const result = await processRequest(body);\n\n    \u002F\u002F Return API Gateway compatible response\n    return {\n      statusCode: 200,\n      headers: {\n        'Content-Type': 'application\u002Fjson',\n        'Access-Control-Allow-Origin': '*'\n      },\n      body: JSON.stringify(result)\n    };\n  } catch (error) {\n    console.error('Error:', JSON.stringify({\n      error: error.message,\n      stack: error.stack,\n      requestId: context.awsRequestId\n    }));\n\n    return {\n      statusCode: error.statusCode || 500,\n      headers: { 'Content-Type': 'application\u002Fjson' },\n      body: JSON.stringify({\n        error: error.message || 'Internal server error'\n      })\n    };\n  }\n};\n\nasync function processRequest(data) {\n  \u002F\u002F Your business logic here\n  const result = await docClient.send(new GetCommand({\n    TableName: process.env.TABLE_NAME,\n    Key: { id: data.id }\n  }));\n  return result.Item;\n}\n```\n\n```python\n# Python Lambda Handler\n# handler.py\n\nimport json\nimport os\nimport logging\nimport boto3\nfrom botocore.exceptions import ClientError\n\n# Initialize outside handler (reused across invocations)\nlogger = logging.getLogger()\nlogger.setLevel(logging.INFO)\n\ndynamodb = boto3.resource('dynamodb')\ntable = dynamodb.Table(os.environ['TABLE_NAME'])\n\ndef handler(event, context):\n    try:\n        # Parse i\n```\n\n### API Gateway Integration Pattern\n\nREST API and HTTP API integration with Lambda\n\n**When to use**: ['Building REST APIs backed by Lambda', 'Need HTTP endpoints for functions']\n\n```javascript\n```yaml\n# template.yaml (SAM)\nAWSTemplateFormatVersion: '2010-09-09'\nTransform: AWS::Serverless-2016-10-31\n\nGlobals:\n  Function:\n    Runtime: nodejs20.x\n    Timeout: 30\n    MemorySize: 256\n    Environment:\n      Variables:\n        TABLE_NAME: !Ref ItemsTable\n\nResources:\n  # HTTP API (recommended for simple use cases)\n  HttpApi:\n    Type: AWS::Serverless::HttpApi\n    Properties:\n      StageName: prod\n      CorsConfiguration:\n        AllowOrigins:\n          - \"*\"\n        AllowMethods:\n          - GET\n          - POST\n          - DELETE\n        AllowHeaders:\n          - \"*\"\n\n  # Lambda Functions\n  GetItemFunction:\n    Type: AWS::Serverless::Function\n    Properties:\n      Handler: src\u002Fhandlers\u002Fget.handler\n      Events:\n        GetItem:\n          Type: HttpApi\n          Properties:\n            ApiId: !Ref HttpApi\n            Path: \u002Fitems\u002F{id}\n            Method: GET\n      Policies:\n        - DynamoDBReadPolicy:\n            TableName: !Ref ItemsTable\n\n  CreateItemFunction:\n    Type: AWS::Serverless::Function\n    Properties:\n      Handler: src\u002Fhandlers\u002Fcreate.handler\n      Events:\n        CreateItem:\n          Type: HttpApi\n          Properties:\n            ApiId: !Ref HttpApi\n            Path: \u002Fitems\n            Method: POST\n      Policies:\n        - DynamoDBCrudPolicy:\n            TableName: !Ref ItemsTable\n\n  # DynamoDB Table\n  ItemsTable:\n    Type: AWS::DynamoDB::Table\n    Properties:\n      AttributeDefinitions:\n        - AttributeName: id\n          AttributeType: S\n      KeySchema:\n        - AttributeName: id\n          KeyType: HASH\n      BillingMode: PAY_PER_REQUEST\n\nOutputs:\n  ApiUrl:\n    Value: !Sub \"https:\u002F\u002F${HttpApi}.execute-api.${AWS::Region}.amazonaws.com\u002Fprod\"\n```\n\n```javascript\n\u002F\u002F src\u002Fhandlers\u002Fget.js\nconst { getItem } = require('..\u002Flib\u002Fdynamodb');\n\nexports.handler = async (event) => {\n  const id = event.pathParameters?.id;\n\n  if (!id) {\n    return {\n      statusCode: 400,\n      body: JSON.stringify({ error: 'Missing id parameter' })\n    };\n  }\n\n  const item =\n```\n\n### Event-Driven SQS Pattern\n\nLambda triggered by SQS for reliable async processing\n\n**When to use**: ['Decoupled, asynchronous processing', 'Need retry logic and DLQ', 'Processing messages in batches']\n\n```python\n```yaml\n# template.yaml\nResources:\n  ProcessorFunction:\n    Type: AWS::Serverless::Function\n    Properties:\n      Handler: src\u002Fhandlers\u002Fprocessor.handler\n      Events:\n        SQSEvent:\n          Type: SQS\n          Properties:\n            Queue: !GetAtt ProcessingQueue.Arn\n            BatchSize: 10\n            FunctionResponseTypes:\n              - ReportBatchItemFailures  # Partial batch failure handling\n\n  ProcessingQueue:\n    Type: AWS::SQS::Queue\n    Properties:\n      VisibilityTimeout: 180  # 6x Lambda timeout\n      RedrivePolicy:\n        deadLetterTargetArn: !GetAtt DeadLetterQueue.Arn\n        maxReceiveCount: 3\n\n  DeadLetterQueue:\n    Type: AWS::SQS::Queue\n    Properties:\n      MessageRetentionPeriod: 1209600  # 14 days\n```\n\n```javascript\n\u002F\u002F src\u002Fhandlers\u002Fprocessor.js\nexports.handler = async (event) => {\n  const batchItemFailures = [];\n\n  for (const record of event.Records) {\n    try {\n      const body = JSON.parse(record.body);\n      await processMessage(body);\n    } catch (error) {\n      console.error(`Failed to process message ${record.messageId}:`, error);\n      \u002F\u002F Report this item as failed (will be retried)\n      batchItemFailures.push({\n        itemIdentifier: record.messageId\n      });\n    }\n  }\n\n  \u002F\u002F Return failed items for retry\n  return { batchItemFailures };\n};\n\nasync function processMessage(message) {\n  \u002F\u002F Your processing logic\n  console.log('Processing:', message);\n\n  \u002F\u002F Simulate work\n  await saveToDatabase(message);\n}\n```\n\n```python\n# Python version\nimport json\nimport logging\n\nlogger = logging.getLogger()\n\ndef handler(event, context):\n    batch_item_failures = []\n\n    for record in event['Records']:\n        try:\n            body = json.loads(record['body'])\n            process_message(body)\n        except Exception as e:\n            logger.error(f\"Failed to process {record['messageId']}: {e}\")\n            batch_item_failures.append({\n                'itemIdentifier': record['messageId']\n            })\n\n    return {'batchItemFailures': batch_ite\n```\n\n## Anti-Patterns\n\n### ❌ Monolithic Lambda\n\n**Why bad**: Large deployment packages cause slow cold starts.\nHard to scale individual operations.\nUpdates affect entire system.\n\n### ❌ Large Dependencies\n\n**Why bad**: Increases deployment package size.\nSlows down cold starts significantly.\nMost of SDK\u002Flibrary may be unused.\n\n### ❌ Synchronous Calls in VPC\n\n**Why bad**: VPC-attached Lambdas have ENI setup overhead.\nBlocking DNS lookups or connections worsen cold starts.\n\n## ⚠️ Sharp Edges\n\n| Issue | Severity | Solution |\n|-------|----------|----------|\n| Issue | high | ## Measure your INIT phase |\n| Issue | high | ## Set appropriate timeout |\n| Issue | high | ## Increase memory allocation |\n| Issue | medium | ## Verify VPC configuration |\n| Issue | medium | ## Tell Lambda not to wait for event loop |\n| Issue | medium | ## For large file uploads |\n| Issue | high | ## Use different buckets\u002Fprefixes |\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n","# AWS Serverless\n\n## Patterns\n\n### Lambda Handler Pattern\n\nProper Lambda function structure with error handling\n\n**When to use**: ['Any Lambda function implementation', 'API handlers, event processors, scheduled tasks']\n\n```python\n```javascript\n\u002F\u002F Node.js Lambda Handler\n\u002F\u002F handler.js\n\n\u002F\u002F Initialize outside handler (reused across invocations)\nconst { DynamoDBClient } = require('@aws-sdk\u002Fclient-dynamodb');\nconst { DynamoDBDocumentClient, GetCommand } = require('@aws-sdk\u002Flib-dynamodb');\n\nconst client = new DynamoDBClient({});\nconst docClient = DynamoDBDocumentClient.from(client);\n\n\u002F\u002F Handler function\nexports.handler = async (event, context) => {\n  \u002F\u002F Optional: Don't wait for event loop to clear (Node.js)\n  context.callbackWaitsForEmptyEventLoop = false;\n\n  try {\n    \u002F\u002F Parse input based on event source\n    const body = typeof event.body === 'string'\n      ? JSON.parse(event.body)\n      : event.body;\n\n    \u002F\u002F Business logic\n    const result = await processRequest(body);\n\n    \u002F\u002F Return API Gateway compatible response\n    return {\n      statusCode: 200,\n      headers: {\n        'Content-Type': 'application\u002Fjson',\n        'Access-Control-Allow-Origin': '*'\n      },\n      body: JSON.stringify(result)\n    };\n  } catch (error) {\n    console.error('Error:', JSON.stringify({\n      error: error.message,\n      stack: error.stack,\n      requestId: context.awsRequestId\n    }));\n\n    return {\n      statusCode: error.statusCode || 500,\n      headers: { 'Content-Type': 'application\u002Fjson' },\n      body: JSON.stringify({\n        error: error.message || 'Internal server error'\n      })\n    };\n  }\n};\n\nasync function processRequest(data) {\n  \u002F\u002F Your business logic here\n  const result = await docClient.send(new GetCommand({\n    TableName: process.env.TABLE_NAME,\n    Key: { id: data.id }\n  }));\n  return result.Item;\n}\n```\n\n```python\n# Python Lambda Handler\n# handler.py\n\nimport json\nimport os\nimport logging\nimport boto3\nfrom botocore.exceptions import ClientError\n\n# Initialize outside handler (reused across invocations)\nlogger = logging.getLogger()\nlogger.setLevel(logging.INFO)\n\ndynamodb = boto3.resource('dynamodb')\ntable = dynamodb.Table(os.environ['TABLE_NAME'])\n\ndef handler(event, context):\n    try:\n        # Parse i\n```\n\n### API Gateway Integration Pattern\n\nREST API and HTTP API integration with Lambda\n\n**When to use**: ['Building REST APIs backed by Lambda', 'Need HTTP endpoints for functions']\n\n```javascript\n```yaml\n# template.yaml (SAM)\nAWSTemplateFormatVersion: '2010-09-09'\nTransform: AWS::Serverless-2016-10-31\n\nGlobals:\n  Function:\n    Runtime: nodejs20.x\n    Timeout: 30\n    MemorySize: 256\n    Environment:\n      Variables:\n        TABLE_NAME: !Ref ItemsTable\n\nResources:\n  # HTTP API (recommended for simple use cases)\n  HttpApi:\n    Type: AWS::Serverless::HttpApi\n    Properties:\n      StageName: prod\n      CorsConfiguration:\n        AllowOrigins:\n          - \"*\"\n        AllowMethods:\n          - GET\n          - POST\n          - DELETE\n        AllowHeaders:\n          - \"*\"\n\n  # Lambda Functions\n  GetItemFunction:\n    Type: AWS::Serverless::Function\n    Properties:\n      Handler: src\u002Fhandlers\u002Fget.handler\n      Events:\n        GetItem:\n          Type: HttpApi\n          Properties:\n            ApiId: !Ref HttpApi\n            Path: \u002Fitems\u002F{id}\n            Method: GET\n      Policies:\n        - DynamoDBReadPolicy:\n            TableName: !Ref ItemsTable\n\n  CreateItemFunction:\n    Type: AWS::Serverless::Function\n    Properties:\n      Handler: src\u002Fhandlers\u002Fcreate.handler\n      Events:\n        CreateItem:\n          Type: HttpApi\n          Properties:\n            ApiId: !Ref HttpApi\n            Path: \u002Fitems\n            Method: POST\n      Policies:\n        - DynamoDBCrudPolicy:\n            TableName: !Ref ItemsTable\n\n  # DynamoDB Table\n  ItemsTable:\n    Type: AWS::DynamoDB::Table\n    Properties:\n      AttributeDefinitions:\n        - AttributeName: id\n          AttributeType: S\n      KeySchema:\n        - AttributeName: id\n          KeyType: HASH\n      BillingMode: PAY_PER_REQUEST\n\nOutputs:\n  ApiUrl:\n    Value: !Sub \"https:\u002F\u002F${HttpApi}.execute-api.${AWS::Region}.amazonaws.com\u002Fprod\"\n```\n\n```javascript\n\u002F\u002F src\u002Fhandlers\u002Fget.js\nconst { getItem } = require('..\u002Flib\u002Fdynamodb');\n\nexports.handler = async (event) => {\n  const id = event.pathParameters?.id;\n\n  if (!id) {\n    return {\n      statusCode: 400,\n      body: JSON.stringify({ error: 'Missing id parameter' })\n    };\n  }\n\n  const item =\n```\n\n### Event-Driven SQS Pattern\n\nLambda triggered by SQS for reliable async processing\n\n**When to use**: ['Decoupled, asynchronous processing', 'Need retry logic and DLQ', 'Processing messages in batches']\n\n```python\n```yaml\n# template.yaml\nResources:\n  ProcessorFunction:\n    Type: AWS::Serverless::Function\n    Properties:\n      Handler: src\u002Fhandlers\u002Fprocessor.handler\n      Events:\n        SQSEvent:\n          Type: SQS\n          Properties:\n            Queue: !GetAtt ProcessingQueue.Arn\n            BatchSize: 10\n            FunctionResponseTypes:\n              - ReportBatchItemFailures  # Partial batch failure handling\n\n  ProcessingQueue:\n    Type: AWS::SQS::Queue\n    Properties:\n      VisibilityTimeout: 180  # 6x Lambda timeout\n      RedrivePolicy:\n        deadLetterTargetArn: !GetAtt DeadLetterQueue.Arn\n        maxReceiveCount: 3\n\n  DeadLetterQueue:\n    Type: AWS::SQS::Queue\n    Properties:\n      MessageRetentionPeriod: 1209600  # 14 days\n```\n\n```javascript\n\u002F\u002F src\u002Fhandlers\u002Fprocessor.js\nexports.handler = async (event) => {\n  const batchItemFailures = [];\n\n  for (const record of event.Records) {\n    try {\n      const body = JSON.parse(record.body);\n      await processMessage(body);\n    } catch (error) {\n      console.error(`Failed to process message ${record.messageId}:`, error);\n      \u002F\u002F Report this item as failed (will be retried)\n      batchItemFailures.push({\n        itemIdentifier: record.messageId\n      });\n    }\n  }\n\n  \u002F\u002F Return failed items for retry\n  return { batchItemFailures };\n};\n\nasync function processMessage(message) {\n  \u002F\u002F Your processing logic\n  console.log('Processing:', message);\n\n  \u002F\u002F Simulate work\n  await saveToDatabase(message);\n}\n```\n\n```python\n# Python version\nimport json\nimport logging\n\nlogger = logging.getLogger()\n\ndef handler(event, context):\n    batch_item_failures = []\n\n    for record in event['Records']:\n        try:\n            body = json.loads(record['body'])\n            process_message(body)\n        except Exception as e:\n            logger.error(f\"Failed to process {record['messageId']}: {e}\")\n            batch_item_failures.append({\n                'itemIdentifier': record['messageId']\n            })\n\n    return {'batchItemFailures': batch_ite\n```\n\n## Anti-Patterns\n\n### ❌ Monolithic Lambda\n\n**Why bad**: Large deployment packages cause slow cold starts.\nHard to scale individual operations.\nUpdates affect entire system.\n\n### ❌ Large Dependencies\n\n**Why bad**: Increases deployment package size.\nSlows down cold starts significantly.\nMost of SDK\u002Flibrary may be unused.\n\n### ❌ Synchronous Calls in VPC\n\n**Why bad**: VPC-attached Lambdas have ENI setup overhead.\nBlocking DNS lookups or connections worsen cold starts.\n\n## ⚠️ Sharp Edges\n\n| Issue | Severity | Solution |\n|-------|----------|----------|\n| Issue | high | ## Measure your INIT phase |\n| Issue | high | ## Set appropriate timeout |\n| Issue | high | ## Increase memory allocation |\n| Issue | medium | ## Verify VPC configuration |\n| Issue | medium | ## Tell Lambda not to wait for event loop |\n| Issue | medium | ## For large file uploads |\n| Issue | high | ## Use different buckets\u002Fprefixes |\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n",{"name":5,"risk":28,"source":36,"date_added":37,"description":7},"vibeship-spawner-skills (Apache 2.0)","2026-02-27","main","7a38d8e7073e61c16eda85681cb32fb68a8657a5","skills-store\u002Fcopilot\u002Faws-serverless","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router","https:\u002F\u002Fgithub.com\u002Fsapsapshen","2026-04-14 21:12:12",{"source":8,"skillName":5,"commands":45,"prompt":55,"zipAvailable":56},[46,49,52],{"tool":47,"command":48},"npx","npx skills add sapsapshen\u002Fai-memory-router --skill aws-serverless",{"tool":50,"command":51},"bunx","bunx skills add sapsapshen\u002Fai-memory-router --skill aws-serverless",{"tool":53,"command":54},"pnpm","pnpm dlx skills add sapsapshen\u002Fai-memory-router --skill aws-serverless","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcopilot\u002Faws-serverless\u002FSKILL.md",true,[],[59,82,108,118,131,150],{"skillNo":60,"name":61,"nameZh":6,"description":62,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":63,"categories":64,"keywords":70,"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",[65],{"categoryNo":66,"categoryName":67,"taxonomyType":68,"taxonomyTypeDesc":69},"01JBSEEDCAT000000000000037","律师与法务","PROFESSION","适用职业",[71,72,73,74,75,76,77,78,79,80,81,27],"wechat search","wechat","search","capabilities","openclaw","design","web search","compliance","web","official","fetch",{"skillNo":83,"name":84,"nameZh":6,"description":85,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":86,"categories":87,"keywords":88,"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",[],[89,90,91,92,93,94,73,95,96,97,98,99,100,101,102,103,104,105,106,107],"trend","trend tap","tap","api keys","Bash","time","trending","hacker","aggregator","do","when","brew","live","data","google","install","read","across","api",{"skillNo":109,"name":110,"nameZh":6,"description":111,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":112,"categories":113,"keywords":114,"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",[],[115,116,89,100,101,102,103,93,73,105,117,106,107,99,97,96,95,104,94,92],"trend radar","radar","pulse",{"skillNo":119,"name":120,"nameZh":6,"description":121,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":122,"categories":123,"keywords":124,"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",[],[125,126,127,128,129,130],"news","tech","tech news daily","daily","rss","翻译",{"skillNo":132,"name":133,"nameZh":6,"description":134,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":135,"categories":136,"keywords":142,"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",[137],{"categoryNo":138,"categoryName":139,"taxonomyType":140,"taxonomyTypeDesc":141},"01JBSEEDCAT000000000000021","资料检索与研究","SCENARIO","使用场景",[133,79,143,144,145,27,100,146,147,148,91,149,104],"Audio","cli","youtube","images","https","files","pdfs",{"skillNo":151,"name":152,"nameZh":6,"description":153,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":154,"categories":155,"keywords":156,"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",[],[152,157,158,159,104,160,147,161,162,163,164,165],"status","play","go","latest","github","discover","control","cmd","volume"]