Compare commits

..

1 Commits

Author SHA1 Message Date
Bryan Thompson
337a70e6c9 Add sagemaker-ai plugin (re-list after YAML fix)
sagemaker-ai was dropped from the marketplace in #1762 (validate-plugins
adoption) due to a manifest/YAML error. AWS has since fixed it; the plugin
validates clean at awslabs/agent-plugins@187edde (claude plugin validate passes).

Re-listed as a git-subdir source SHA-pinned to current monorepo HEAD,
matching its sibling AWS entries (deploy-on-aws, databases-on-aws).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 19:16:05 -05:00
4 changed files with 116 additions and 328 deletions

View File

@@ -19,7 +19,7 @@
"url": "https://github.com/42Crunch-AI/claude-plugins.git",
"path": "plugins/api-security-testing",
"ref": "v1.5.5",
"sha": "1db609845441d4fa8862019191e4138e61f77e67"
"sha": "b404d99a3f0bc1f3e74a1638671e2e3319187e2c"
},
"homepage": "https://42crunch.com"
},
@@ -35,7 +35,7 @@
"url": "https://github.com/adobe/skills.git",
"path": "plugins/creative-cloud/adobe-for-creativity",
"ref": "main",
"sha": "e23271f65aa7572f567d085d6baec5c2408e2ad5"
"sha": "8d74ee6b6fdce4a1c46b98b5a66706c9393fc369"
},
"homepage": "https://github.com/adobe/skills/tree/main/plugins/creative-cloud/adobe-for-creativity"
},
@@ -57,7 +57,7 @@
"source": {
"source": "url",
"url": "https://github.com/SalesforceAIResearch/agentforce-adlc.git",
"sha": "1db738befed88c2ee6d068482cfd64a10c97e2ef"
"sha": "1584dd52f388482db78949456addfa29a4c9d9c3"
},
"homepage": "https://github.com/SalesforceAIResearch/agentforce-adlc"
},
@@ -97,22 +97,6 @@
},
"homepage": "https://www.airtable.com"
},
{
"name": "airwallex",
"description": "Airwallex CLI plugin for Claude — skills for payments, billing, invoicing, beneficiary creation, card provisioning, and cashflow management.",
"author": {
"name": "Airwallex"
},
"category": "productivity",
"source": {
"source": "git-subdir",
"url": "https://github.com/airwallex/airwallex-marketplace.git",
"path": "plugins/airwallex",
"ref": "master",
"sha": "a903ab7693a5f6d46f2fab6f895a2f96a879ee0f"
},
"homepage": "https://www.airwallex.com/docs"
},
{
"name": "alloydb",
"description": "Create, connect, and interact with an AlloyDB for PostgreSQL database and data.",
@@ -123,7 +107,7 @@
"source": {
"source": "url",
"url": "https://github.com/gemini-cli-extensions/alloydb.git",
"sha": "bbf4eb3664faf129ab8ff8c4b959d7e59c03d347"
"sha": "4a75653275b095fcacf1508796b0fee8cc758c07"
},
"homepage": "https://cloud.google.com/alloydb"
},
@@ -136,7 +120,7 @@
"url": "https://github.com/awslabs/agent-plugins.git",
"path": "plugins/amazon-location-service",
"ref": "main",
"sha": "fc54dfa24a1f05095b9fcbb4baa4750996bb171d"
"sha": "f16aaf2a4ec7d59963c4fdf91e7358bd485e992e"
},
"homepage": "https://github.com/awslabs/agent-plugins"
},
@@ -177,7 +161,7 @@
"source": {
"source": "url",
"url": "https://github.com/apollographql/skills.git",
"sha": "9ccf13477e116ec095ba9b606212492ffbd42926"
"sha": "e1d07720e9bcfbf867fa2907192c94ec2ed421e1"
},
"homepage": "https://www.apollographql.com"
},
@@ -219,7 +203,7 @@
"source": {
"source": "url",
"url": "https://github.com/atlanhq/agent-toolkit.git",
"sha": "789507c02d2495235240d10d67aaac8b2051023a"
"sha": "b0efcc8e6adc64d052b634ac1103932390413fd9"
},
"homepage": "https://docs.atlan.com/"
},
@@ -242,7 +226,7 @@
"source": "url",
"url": "https://github.com/BrainBlend-AI/atomic-agents.git",
"path": "claude-plugin/atomic-agents",
"sha": "324399402b9b5965313de6a34ea09d6bb149a200"
"sha": "57d6099f499fe21572bdf943396630bd3d968550"
},
"homepage": "https://github.com/BrainBlend-AI/atomic-agents",
"tags": [
@@ -261,7 +245,7 @@
"url": "https://github.com/auth0/agent-skills.git",
"path": "plugins/auth0",
"ref": "main",
"sha": "9d93554c5d91bd087a46f4d6825f80c3eb981945"
"sha": "c38453f6a99bbfeaf73b5be81db987ec6af982da"
},
"homepage": "https://auth0.com/docs/quickstart/agent-skills"
},
@@ -277,7 +261,7 @@
"url": "https://github.com/aws/agent-toolkit-for-aws.git",
"path": "plugins/aws-agents",
"ref": "main",
"sha": "df13dea64baaa1b7031b25d1b2f380756131efec"
"sha": "ba1cc8ca4f063d88ca40c6acf3f670e6321b7a7f"
},
"homepage": "https://github.com/aws/agent-toolkit-for-aws"
},
@@ -290,7 +274,7 @@
"url": "https://github.com/awslabs/agent-plugins.git",
"path": "plugins/aws-amplify",
"ref": "main",
"sha": "fc54dfa24a1f05095b9fcbb4baa4750996bb171d"
"sha": "f16aaf2a4ec7d59963c4fdf91e7358bd485e992e"
},
"homepage": "https://github.com/awslabs/agent-plugins"
},
@@ -306,7 +290,7 @@
"url": "https://github.com/aws/agent-toolkit-for-aws.git",
"path": "plugins/aws-core",
"ref": "main",
"sha": "df13dea64baaa1b7031b25d1b2f380756131efec"
"sha": "ba1cc8ca4f063d88ca40c6acf3f670e6321b7a7f"
},
"homepage": "https://github.com/aws/agent-toolkit-for-aws"
},
@@ -322,7 +306,7 @@
"url": "https://github.com/aws/agent-toolkit-for-aws.git",
"path": "plugins/aws-data-analytics",
"ref": "main",
"sha": "df13dea64baaa1b7031b25d1b2f380756131efec"
"sha": "ba1cc8ca4f063d88ca40c6acf3f670e6321b7a7f"
},
"homepage": "https://github.com/aws/agent-toolkit-for-aws"
},
@@ -351,13 +335,13 @@
"url": "https://github.com/awslabs/agent-plugins.git",
"path": "plugins/aws-serverless",
"ref": "main",
"sha": "fc54dfa24a1f05095b9fcbb4baa4750996bb171d"
"sha": "f16aaf2a4ec7d59963c4fdf91e7358bd485e992e"
},
"homepage": "https://github.com/awslabs/agent-plugins"
},
{
"name": "aws-startup-advisor",
"description": "Personalized architecture, cost, security, and migration guidance for startups. From day-one account setup and security baselines to production-ready infrastructure, cost optimization, and beyond. Includes AWS Activate Credits eligibility, 60+ exclusive startup offers, and multi-account multi-region support. Built on expertise from AWS Startup Solutions Architects and patterns from 350,000+ startups.",
"description": "Skills for startups building on AWS: an Activate knowledge base (FAQ, credits, programs, partner offers, sample architectures, 277+ learn articles), a prompt library of 29+ copy-paste prompts plus installable agents, and an interactive discovery workflow that scaffolds an AWS architecture.",
"author": {
"name": "Amazon Web Services"
},
@@ -367,7 +351,7 @@
"url": "https://github.com/awslabs/startups.git",
"path": "advisor/plugins/aws-startup-advisor",
"ref": "main",
"sha": "30808e64b08ba13aedcecade5a27bfbff06dba09"
"sha": "23a4f5eaf74a0f0fcf86f8a05bd36618a3f5faae"
},
"homepage": "https://github.com/awslabs/startups"
},
@@ -378,7 +362,7 @@
"source": {
"source": "url",
"url": "https://github.com/microsoft/azure-skills.git",
"sha": "58fd90942ab5045481bf1632fa0c2d7746367e13"
"sha": "7cb89c221ecc9eccb71580aaff3695408cdeef2b"
},
"homepage": "https://github.com/microsoft/azure-skills"
},
@@ -416,7 +400,7 @@
"url": "https://github.com/Bigdata-com/bigdata-plugins-marketplace.git",
"path": "plugins/bigdata-com",
"ref": "main",
"sha": "67c30be97a0a3f46bc6e8d56df449ae108eda9c5"
"sha": "c77a09caabdc8783adbcbf8bbe05a0f57da12b19"
},
"homepage": "https://docs.bigdata.com"
},
@@ -444,7 +428,7 @@
"source": {
"source": "url",
"url": "https://github.com/brightdata/skills.git",
"sha": "68651246ad1819b98a1fc15ce10239e55406ff37"
"sha": "da73549126e5834a9230ee5532d4917d43aedf11"
},
"homepage": "https://docs.brightdata.com"
},
@@ -474,7 +458,7 @@
"url": "https://github.com/carta/plugins.git",
"path": "plugins/carta-cap-table",
"ref": "main",
"sha": "ea02da68e7be8bf4bc2bffe8f1fd7253f8d0b101"
"sha": "f512df80dd54fd0a607ece2f18a9d226ca705019"
},
"homepage": "https://carta.com"
},
@@ -490,7 +474,7 @@
"url": "https://github.com/carta/plugins.git",
"path": "plugins/carta-crm",
"ref": "main",
"sha": "ea02da68e7be8bf4bc2bffe8f1fd7253f8d0b101"
"sha": "f512df80dd54fd0a607ece2f18a9d226ca705019"
},
"homepage": "https://carta.com"
},
@@ -506,7 +490,7 @@
"url": "https://github.com/carta/plugins.git",
"path": "plugins/carta-investors",
"ref": "main",
"sha": "ea02da68e7be8bf4bc2bffe8f1fd7253f8d0b101"
"sha": "e66d331cd8e669ee121c96ee35b0c91acd828970"
},
"homepage": "https://carta.com"
},
@@ -522,7 +506,7 @@
"source": {
"source": "url",
"url": "https://github.com/cap-js/mcp-server.git",
"sha": "b78913198fe1021f0d8b36b0e4ba0ca27003452f"
"sha": "92dc99f5ba0c56957ed5d390484693a69ebd1206"
},
"homepage": "https://cap.cloud.sap/"
},
@@ -533,7 +517,7 @@
"source": {
"source": "url",
"url": "https://github.com/ChromeDevTools/chrome-devtools-mcp.git",
"sha": "89718901174be7c0c58a1a2b29281ab2f053cd53"
"sha": "2e039c09e1a273581d9b51081a0feb8a57791947"
},
"homepage": "https://github.com/ChromeDevTools/chrome-devtools-mcp"
},
@@ -627,7 +611,7 @@
"source": {
"source": "url",
"url": "https://github.com/ClickHouse/clickhouse-claude-code-plugin.git",
"sha": "1f30864b720960a797e5c7f6138d328bec3984cb"
"sha": "36889764f504cb92ab71ffe54b4c55488290ed7f"
},
"homepage": "https://github.com/ClickHouse/clickhouse-claude-code-plugin"
},
@@ -659,20 +643,6 @@
},
"homepage": "https://cloud.google.com/sql"
},
{
"name": "cloud-sql-sqlserver",
"description": "Connect to Cloud SQL for SQL Server",
"author": {
"name": "Google LLC"
},
"category": "database",
"source": {
"source": "url",
"url": "https://github.com/gemini-cli-extensions/cloud-sql-sqlserver.git",
"sha": "8e1490ec8f659a5711655d2fa4241597a63d4883"
},
"homepage": "https://github.com/gemini-cli-extensions/cloud-sql-sqlserver"
},
{
"name": "cloudflare",
"source": {
@@ -762,7 +732,7 @@
"source": {
"source": "url",
"url": "https://github.com/CodSpeedHQ/codspeed.git",
"sha": "f79d57d207f039e44a31a976564715f7731e71b6"
"sha": "407dd3c930b8dc5e5655a2d91a65d88f01829955"
},
"homepage": "https://codspeed.io"
},
@@ -799,7 +769,7 @@
"source": {
"source": "url",
"url": "https://github.com/get-convex/convex-backend-skill.git",
"sha": "002f9c834cdb834ddef1e4867d87cb6e80f0acba"
"sha": "ece93250d560f0ce32a24223dea92b33050b2a66"
},
"homepage": "https://github.com/get-convex/convex-backend-skill",
"keywords": [
@@ -830,7 +800,7 @@
"source": {
"source": "url",
"url": "https://github.com/CrowdStrike/foundry-skills.git",
"sha": "b3f4ecb48333d6007117a29650daa1989a228b5c"
"sha": "fb25d60ecdbc0129071802dad210a65168ca55a9"
},
"homepage": "https://github.com/CrowdStrike/foundry-skills"
},
@@ -876,7 +846,7 @@
"source": {
"source": "url",
"url": "https://github.com/dash0hq/dash0-agent-plugin.git",
"sha": "8801a21931d80c543c0f51a4b7eef4cd1311c1b5"
"sha": "d1ad56f86f2a9ae74eccf1df2bb2985c963005b1"
},
"homepage": "https://dash0.com/"
},
@@ -901,7 +871,7 @@
"source": {
"source": "url",
"url": "https://github.com/gemini-cli-extensions/data-agent-kit-starter-pack.git",
"sha": "fb9086456d5fbc780edf86f0ac413345ba628173"
"sha": "86eb482b33d943aa4242ae6f06d627ec12064d46"
},
"homepage": "https://github.com/gemini-cli-extensions/data-agent-kit-starter-pack"
},
@@ -924,7 +894,7 @@
"url": "https://github.com/awslabs/agent-plugins.git",
"path": "plugins/databases-on-aws",
"ref": "main",
"sha": "fc54dfa24a1f05095b9fcbb4baa4750996bb171d"
"sha": "f16aaf2a4ec7d59963c4fdf91e7358bd485e992e"
},
"homepage": "https://github.com/awslabs/agent-plugins"
},
@@ -938,7 +908,7 @@
"source": {
"source": "url",
"url": "https://github.com/datadog-labs/claude-code-plugin.git",
"sha": "96c28a8ce6f258ed54c9a17f16ee206deb8e3f28"
"sha": "eeb2f746a857f8d97f69cd0968fb63874541c112"
},
"homepage": "https://www.datadoghq.com/"
},
@@ -966,7 +936,7 @@
"source": {
"source": "url",
"url": "https://github.com/datarobot-oss/datarobot-agent-skills.git",
"sha": "90a33c0c87362f28be88c14c0ef0f3469e6d2596"
"sha": "4c3dfbd259bc2c6c815f7575d27ca26bc09d0d17"
},
"homepage": "https://datarobot.com"
},
@@ -992,7 +962,7 @@
"url": "https://github.com/awslabs/agent-plugins.git",
"path": "plugins/deploy-on-aws",
"ref": "main",
"sha": "fc54dfa24a1f05095b9fcbb4baa4750996bb171d"
"sha": "f16aaf2a4ec7d59963c4fdf91e7358bd485e992e"
},
"homepage": "https://github.com/awslabs/agent-plugins"
},
@@ -1008,7 +978,7 @@
"url": "https://github.com/wonderwhy-er/DesktopCommanderMCP.git",
"path": "plugins/claude",
"ref": "main",
"sha": "cf857bf061cb3b0e8673717dcac1f0fa2ecbdd40"
"sha": "9c44119a480ec6460f82d59aeb90cf274bc3dd7b"
},
"homepage": "https://desktopcommander.app"
},
@@ -1028,7 +998,7 @@
"source": {
"source": "url",
"url": "https://github.com/dominodatalab/domino-claude-plugin.git",
"sha": "56c3fc39d2f2f26d58d0f27d4dad138b0edec456"
"sha": "47c6e0a7daa11b21eb6e12779c9d679569e8ffe2"
},
"homepage": "https://www.domino.ai"
},
@@ -1056,7 +1026,7 @@
"source": {
"source": "url",
"url": "https://github.com/DuendeSoftware/duende-skills.git",
"sha": "72e39de9f10c5dafaa7f32f58fcdbd5a8f3e5c14"
"sha": "2c803785061db150d8ecea098327b404b74dbf6a"
},
"homepage": "https://duendesoftware.com"
},
@@ -1131,7 +1101,7 @@
"source": {
"source": "url",
"url": "https://github.com/voxel51/fiftyone-skills.git",
"sha": "d34365bd643b889d67dafcc120a8c525699fb54c"
"sha": "6c002d680529e35a2e04adc34c03b564a3991728"
},
"homepage": "https://docs.voxel51.com/"
},
@@ -1160,7 +1130,7 @@
"source": {
"source": "url",
"url": "https://github.com/firecrawl/firecrawl-claude-plugin.git",
"sha": "6768fb78185aab9e5b5a04777f84703863fb025b"
"sha": "e71cec486062680f0c8f8823afcb3558ad81ce60"
},
"homepage": "https://github.com/firecrawl/firecrawl-claude-plugin.git"
},
@@ -1263,7 +1233,7 @@
"source": {
"source": "url",
"url": "https://github.com/huggingface/skills.git",
"sha": "14cea99d5cd028974dbdd8bc12118882cd7a1b67"
"sha": "df627be1837523c91ac6df472e3dc543d3107bd9"
},
"homepage": "https://github.com/huggingface/skills.git"
},
@@ -1277,7 +1247,7 @@
"source": {
"source": "url",
"url": "https://github.com/hunter-io/claude-plugin.git",
"sha": "69c4e59ee573f4ccd8aa38bbc89e356bc8e7f876"
"sha": "9b6146520c48f9dcc6092f106e5c1a5762ca3e7a"
},
"homepage": "https://hunter.io"
},
@@ -1291,7 +1261,7 @@
"source": {
"source": "url",
"url": "https://github.com/heygen-com/hyperframes.git",
"sha": "8228932e17e3371d5cf77ac5d5988f5322892dad"
"sha": "bc3701f5905c5ba7c8cf03c3bbe3a49162d2b1f1"
},
"homepage": "https://hyperframes.heygen.com"
},
@@ -1456,7 +1426,7 @@
"url": "https://github.com/pydantic/skills.git",
"path": "plugins/logfire",
"ref": "main",
"sha": "e412b6d8d4b6199ac577c5ee8653dcff840b3e92"
"sha": "eb17c0da94de81488825c0198475233dc1f06393"
},
"homepage": "https://github.com/pydantic/skills/tree/main/plugins/logfire"
},
@@ -1494,20 +1464,6 @@
},
"homepage": "https://www.ory.sh"
},
{
"name": "lusha",
"description": "Prospect, enrich, and build call-ready lead lists using Lusha's B2B intelligence platform — verified phone numbers, company signals, and lookalike targeting.",
"author": {
"name": "Lusha"
},
"category": "productivity",
"source": {
"source": "url",
"url": "https://github.com/lusha-oss/lusha-mcp-plugin.git",
"sha": "8fc71d5473ea40e01a92001787f0f3caaf5ca30e"
},
"homepage": "https://www.lusha.com"
},
{
"name": "mapbox",
"description": "Mapbox skills and MCP servers for building location-aware applications with AI. Includes geospatial tools, style management, and patterns for web, iOS, Android, and AI agent frameworks.",
@@ -1518,7 +1474,7 @@
"source": {
"source": "url",
"url": "https://github.com/mapbox/mapbox-agent-skills.git",
"sha": "75ac667cae24c7ad7bdbbac55ac0a64d2df1543e"
"sha": "fc705cd9a4f823e10d5d4ee5adad4c6cd16de0a9"
},
"homepage": "https://www.mapbox.com"
},
@@ -1545,7 +1501,7 @@
"url": "https://github.com/modelcontextprotocol/ext-apps.git",
"path": "plugins/mcp-apps",
"ref": "main",
"sha": "a9907802937f1da067cbc4aa48b283cd4cfa7dc8"
"sha": "9a37ad71827d076af06978fa7f7f510449687061"
},
"homepage": "https://modelcontextprotocol.io"
},
@@ -1598,22 +1554,6 @@
},
"homepage": "https://github.com/microsoftdocs/mcp"
},
{
"name": "migration-to-aws",
"description": "Plan a migration from Google Cloud Platform (and OpenAI/Gemini AI workloads) to AWS. Analyzes your Infrastructure-as-Code files, app code, and GCP billing data to discover resources, design an AWS architecture, estimate costs, and generate migration artifacts — including AI-provider mapping to Amazon Bedrock. Processing is local; your data stays in your environment.",
"author": {
"name": "Amazon Web Services"
},
"category": "development",
"source": {
"source": "git-subdir",
"url": "https://github.com/awslabs/startups.git",
"path": "migrate/plugins/migration-to-aws",
"ref": "main",
"sha": "30808e64b08ba13aedcecade5a27bfbff06dba09"
},
"homepage": "https://github.com/awslabs/startups"
},
{
"name": "mintlify",
"description": "Build beautiful documentation sites with Mintlify. Convert non-markdown files into properly formatted MDX pages, add and modify content with correct component use, and automate documentation updates.",
@@ -1637,7 +1577,7 @@
"url": "https://github.com/miroapp/miro-ai.git",
"path": "claude-plugins/miro",
"ref": "main",
"sha": "9d7c3dc0a9a365b298e3808c741c53e2e80d86d1"
"sha": "da5405f866d823c7121ad6c38256f11c60501dbe"
},
"homepage": "https://miro.com"
},
@@ -1648,7 +1588,7 @@
"source": {
"source": "url",
"url": "https://github.com/mongodb/agent-skills.git",
"sha": "9ea7387c7a1638604542c6efd52e5efc6a7fc393"
"sha": "bcd651808429ac1ca1e9f294cee61e42028d27de"
},
"homepage": "https://www.mongodb.com/docs/mcp-server/overview/"
},
@@ -1741,7 +1681,7 @@
"url": "https://github.com/NVIDIA/skills.git",
"path": "plugins/nvidia-skills",
"ref": "main",
"sha": "e695a8397463bbb64d787b3cd88d3c58889be633"
"sha": "62b685a20ac45285cafd1e22782abbed33172c17"
},
"homepage": "https://github.com/NVIDIA/skills"
},
@@ -1757,7 +1697,7 @@
"url": "https://github.com/oracle-samples/oracle-aidp-samples.git",
"path": "ai/claude-code-plugins/oracle-ai-data-platform-workbench-spark-connectors",
"ref": "main",
"sha": "dcd5a5a19537bf9aaa9dd4f48514bc4402bfbc40"
"sha": "6e59f24cd3e8870649e7f9b2e3e106502b43fd5f"
},
"homepage": "https://docs.oracle.com/en/cloud/paas/ai-data-platform/index.html"
},
@@ -1773,7 +1713,7 @@
"url": "https://github.com/growthxai/output.git",
"path": "coding_assistants/claude/plugins/outputai",
"ref": "main",
"sha": "d3c9b1f472358527386f7cc2bb6d4833d9bfe034"
"sha": "0eeffece25b6f471c48b705a214471164b8c5946"
},
"homepage": "https://output.ai"
},
@@ -1821,7 +1761,7 @@
"source": {
"source": "url",
"url": "https://github.com/gopigment/ai-plugins.git",
"sha": "abf36e64750d1323a4cc5fe79161597668231224"
"sha": "4bf16c80558416b9d69fa6531af8588fb2fcbe27"
},
"homepage": "https://www.pigment.com"
},
@@ -1883,7 +1823,7 @@
"source": {
"source": "url",
"url": "https://github.com/PostHog/ai-plugin.git",
"sha": "a487311487bc369ee75e70c893d0a0c5ed478ba8"
"sha": "1b743cdbc568de81da5f41503e5c7caa35a4b270"
},
"homepage": "https://posthog.com/docs/model-context-protocol"
},
@@ -1893,7 +1833,7 @@
"source": {
"source": "url",
"url": "https://github.com/gitroomhq/postiz-agent.git",
"sha": "41c5a9dbd6b2776863e7c05c22e7a385c208321c"
"sha": "238aede6c72672b3201ae0ee533ec0cd53eb51d1"
},
"homepage": "https://postiz.com/agent"
},
@@ -1938,7 +1878,7 @@
"url": "https://github.com/pydantic/skills.git",
"path": "plugins/ai",
"ref": "main",
"sha": "e412b6d8d4b6199ac577c5ee8653dcff840b3e92"
"sha": "eb17c0da94de81488825c0198475233dc1f06393"
},
"homepage": "https://github.com/pydantic/skills/tree/main/plugins/ai"
},
@@ -1976,7 +1916,7 @@
"source": {
"source": "url",
"url": "https://github.com/qdrant/skills.git",
"sha": "cace39df5cc46f7f0c192ced7391d767749142a0"
"sha": "ea62a9857dabcc169597549da7681bd6d4cd13e9"
},
"homepage": "https://skills.qdrant.tech"
},
@@ -2015,7 +1955,7 @@
"source": {
"source": "url",
"url": "https://github.com/quarkusio/quarkus-agent-mcp.git",
"sha": "01847d5d2eca02bc5751cce18deb41ad76a7a873"
"sha": "32cad78bd9040efe31794cfc10f70caf2a724dd9"
},
"homepage": "https://quarkus.io"
},
@@ -2028,7 +1968,7 @@
"url": "https://github.com/railwayapp/railway-skills.git",
"path": "plugins/railway",
"ref": "main",
"sha": "831130cda8a659e8c47addd28be2744e9e67d31c"
"sha": "7718b39037adb6fb33948ff751be7f7086f2da83"
},
"homepage": "https://docs.railway.com/ai/claude-code-plugin"
},
@@ -2051,7 +1991,7 @@
"source": "url",
"url": "https://github.com/RevenueCat/rc-claude-code-plugin.git",
"path": "revenuecat",
"sha": "b34f9bebe02ceb7e3f32e6d7d081cdfb2e7c37a6"
"sha": "81262a339601c4b64b909c370225cbd7917ade1f"
},
"homepage": "https://www.revenuecat.com"
},
@@ -2077,7 +2017,7 @@
"source": {
"source": "url",
"url": "https://github.com/Digital-Process-Tools/claude-remember.git",
"sha": "a4ff96f38622f7c4920dc349d59cc980663336f4"
"sha": "c2c82ab5fd2f4f5c0cddc9c7d8a749655dec4cb9"
},
"homepage": "https://github.com/Digital-Process-Tools/claude-remember"
},
@@ -2091,7 +2031,7 @@
"source": {
"source": "url",
"url": "https://github.com/resend/resend-skills.git",
"sha": "0f598ef55623e37a76f972e93a53ffa91c1dc9d1"
"sha": "376d1c3fb37cc7d22ab21cce836f4d6f323922de"
},
"homepage": "https://resend.com"
},
@@ -2103,7 +2043,7 @@
"source": "url",
"url": "https://github.com/RevenueCat/rc-claude-code-plugin.git",
"path": "revenuecat",
"sha": "b34f9bebe02ceb7e3f32e6d7d081cdfb2e7c37a6"
"sha": "81262a339601c4b64b909c370225cbd7917ade1f"
},
"homepage": "https://www.revenuecat.com"
},
@@ -2188,7 +2128,7 @@
"url": "https://github.com/awslabs/agent-plugins.git",
"path": "plugins/sagemaker-ai",
"ref": "main",
"sha": "fc54dfa24a1f05095b9fcbb4baa4750996bb171d"
"sha": "187edde6e122116b43211049195627a5069bda80"
},
"homepage": "https://github.com/awslabs/agent-plugins"
},
@@ -2202,7 +2142,7 @@
"source": {
"source": "url",
"url": "https://github.com/sanity-io/agent-toolkit.git",
"sha": "7e04973754975e73b306b1d4dbae561160d797e9"
"sha": "d7545f5cc6f8fb39554083b52ad074a6d912db9f"
},
"homepage": "https://www.sanity.io"
},
@@ -2218,7 +2158,7 @@
"source": {
"source": "url",
"url": "https://github.com/cap-js/mcp-server.git",
"sha": "b78913198fe1021f0d8b36b0e4ba0ca27003452f"
"sha": "92dc99f5ba0c56957ed5d390484693a69ebd1206"
},
"homepage": "https://cap.cloud.sap/"
},
@@ -2236,7 +2176,7 @@
"url": "https://github.com/SAP/open-ux-tools.git",
"path": "packages/fiori-mcp-server",
"ref": "main",
"sha": "b326a9a52b1da51effed574587e31fe5a2755b96"
"sha": "7432d23a7b5c3bd1c0a01cf76696bf0c417ecd1f"
},
"homepage": "https://github.com/SAP/open-ux-tools/tree/main/packages/fiori-mcp-server"
},
@@ -2275,7 +2215,7 @@
{
"name": "security-guidance",
"description": "Security review for Claude-generated code. Pattern-based warnings on edits, LLM-powered diff review on Stop, and an agentic commit reviewer that catches injection, XSS, SSRF, hardcoded secrets, and 25+ other vulnerability classes.",
"version": "2.0.3",
"version": "2.0.1",
"author": {
"name": "Anthropic",
"email": "support@anthropic.com"
@@ -2303,7 +2243,7 @@
"source": {
"source": "url",
"url": "https://github.com/getsentry/sentry-for-claude.git",
"sha": "849303a8411c242d250885ffe714235a3bc2f5fe"
"sha": "d6123be331e2224b037e1ffefd27c806e7566dcf"
},
"homepage": "https://github.com/getsentry/sentry-for-claude/tree/main"
},
@@ -2319,7 +2259,7 @@
"url": "https://github.com/getsentry/cli.git",
"path": "plugins/sentry-cli",
"ref": "main",
"sha": "5b78ddaf28252cb514007526025b138569445fd4"
"sha": "db90767935558db16c45036f89e68edaa1dde106"
},
"homepage": "https://sentry.io"
},
@@ -2345,7 +2285,7 @@
"url": "https://github.com/ServiceNow/sdk.git",
"path": "providers/claude/plugin",
"ref": "master",
"sha": "35ef6130d8a49e67b531bde2f987808426273d15"
"sha": "06adf37ca78c270a57f93e7b9dfbb7bf16e24611"
},
"homepage": "https://servicenow.github.io/sdk/"
},
@@ -2406,7 +2346,7 @@
"source": {
"source": "url",
"url": "https://github.com/slackapi/slack-mcp-plugin.git",
"sha": "38fb959299386a6d2c202511ef7e76909a072663"
"sha": "7b9458950d38bb01ddb48b669f9fa89bcdfd98b8"
},
"homepage": "https://github.com/slackapi/slack-mcp-plugin/tree/main"
},
@@ -2436,7 +2376,7 @@
"source": {
"source": "url",
"url": "https://github.com/SonarSource/sonarqube-agent-plugins.git",
"sha": "712b93281f4e67c16ed9b81dde090e1f73f8bfc8"
"sha": "c64e09af314406a8d8806d57cd11cda81578ce20"
},
"homepage": "https://www.sonarsource.com"
},
@@ -2482,7 +2422,7 @@
"url": "https://github.com/stripe/ai.git",
"path": "providers/claude/plugin",
"ref": "main",
"sha": "e27ee0091ed20f7557f3241e00ade3d4846af9d6"
"sha": "99425a010474c6aab745a975d06764e323c2c4d4"
},
"homepage": "https://github.com/stripe/ai/tree/main/providers/claude/plugin"
},
@@ -2516,7 +2456,7 @@
"source": {
"source": "url",
"url": "https://github.com/obra/superpowers.git",
"sha": "6fd4507659784c351abbd2bc264c7162cfd386dc"
"sha": "f2cbfbefebbfef77321e4c9abc9e949826bea9d7"
},
"homepage": "https://github.com/obra/superpowers.git"
},
@@ -2550,7 +2490,7 @@
"source": {
"source": "url",
"url": "https://github.com/JetBrains/teamcity-cli.git",
"sha": "3cc3013c0f8106ffc845b34fb322d763803bcb0e"
"sha": "9436b94b228579ba952aba809357776c3db9ce1a"
},
"homepage": "https://www.jetbrains.com/teamcity/"
},
@@ -2581,7 +2521,7 @@
"source": {
"source": "url",
"url": "https://github.com/togethercomputer/skills.git",
"sha": "9772f2a2f83e2184c341dd2650ac4c7efb76c33b"
"sha": "a1277729f7914d886df213de922865d30a214a9d"
},
"homepage": "https://www.together.ai"
},
@@ -2643,7 +2583,7 @@
"url": "https://github.com/UI5/plugins-coding-agents.git",
"path": "plugins/ui5",
"ref": "main",
"sha": "767ac53cb056a0c900374ccea0df96c54b769eb2"
"sha": "7acd8328399a221e161ae5bb04a5675696f92920"
},
"homepage": "https://github.com/UI5/plugins-coding-agents"
},
@@ -2661,40 +2601,10 @@
"url": "https://github.com/UI5/plugins-coding-agents.git",
"path": "plugins/ui5-typescript-conversion",
"ref": "main",
"sha": "767ac53cb056a0c900374ccea0df96c54b769eb2"
"sha": "7acd8328399a221e161ae5bb04a5675696f92920"
},
"homepage": "https://github.com/UI5/plugins-coding-agents"
},
{
"name": "valtown",
"description": "Build and deploy on Val Town. Bundles the Val Town MCP server and platform skills (HTTP vals, cron/intervals, SQLite, email, OAuth, React UI, third-party integrations, templates).",
"author": {
"name": "Val Town"
},
"category": "deployment",
"source": {
"source": "git-subdir",
"url": "https://github.com/val-town/plugins.git",
"path": "plugin",
"ref": "main",
"sha": "e01069e11ea6e46b8d2d5fd2945f2dd4d33e6a57"
},
"homepage": "https://val.town"
},
{
"name": "vanta",
"description": "The Vanta plugin connects Claude Code to Vanta's security and compliance platform through the Vanta MCP server. It combines Vanta's test-specific remediation intelligence with your local repository context to help you fix compliance failures faster.",
"author": {
"name": "Vanta"
},
"category": "security",
"source": {
"source": "url",
"url": "https://github.com/VantaInc/vanta-mcp-plugin.git",
"sha": "345d86b55faa649e955b7ea5569cf52d8425c2d5"
},
"homepage": "https://help.vanta.com/en/articles/14094979-connecting-to-vanta-mcp#h_887ce3f337"
},
{
"name": "vanta-mcp-plugin",
"description": "The Vanta plugin connects Claude Code to Vanta's security and compliance platform through the Vanta MCP server. It combines Vanta's test-specific remediation intelligence with your local repository context to help you fix compliance failures faster.",
@@ -2730,7 +2640,7 @@
"source": {
"source": "url",
"url": "https://github.com/explorium-ai/vibeprospecting-plugin.git",
"sha": "7ed0c4e2965ee315132c3c714609b46b23b5edc0"
"sha": "c00b11db4efc3e7b7aaffc10d71db33c806d5607"
},
"homepage": "https://www.vibeprospecting.ai/product/claude-plugin"
},
@@ -2755,7 +2665,7 @@
"source": {
"source": "url",
"url": "https://github.com/wix/skills.git",
"sha": "f99715fc149208608a148c0fe0ed16c0f80ee734"
"sha": "c5b343f2dadba06da91ee6de07272161fb68d40d"
},
"homepage": "https://dev.wix.com/docs/wix-cli/guides/development/about-wix-skills"
},
@@ -2848,7 +2758,7 @@
"source": {
"source": "url",
"url": "https://github.com/Zoominfo/zoominfo-mcp-plugin.git",
"sha": "cfdebda5f3ce24d0d964cc0b3e9e5dd9ea9d507d"
"sha": "678c0d1b584b77fb8e0cdc14138fc1afc5a21cf2"
},
"homepage": "https://www.zoominfo.com"
},

View File

@@ -1,6 +1,6 @@
{
"name": "security-guidance",
"version": "2.0.3",
"version": "2.0.1",
"description": "Security review for Claude-generated code. Pattern-based warnings on edits, LLM-powered diff review on Stop, and an agentic commit reviewer that catches injection, XSS, SSRF, hardcoded secrets, and 25+ other vulnerability classes.",
"author": {
"name": "David Dworken",

View File

@@ -65,41 +65,21 @@ SDK_BOOTSTRAP_PHASE_CODES = {
"main": 4, # uncaught exception above main()
}
SDK_BOOTSTRAP_ERR_CODES = {
"pip_no_match": 1,
"dns_fail": 2,
"conn_refused": 3,
"ssl_verify": 4,
"perm_denied": 5,
"no_pip": 6,
"disk_full": 7,
"proxy_auth": 8,
"stderr_timeout": 9, # pip stderr containing "timeout"/"timed out"
"subprocess_timeout": 10, # subprocess.TimeoutExpired (>120s)
# Venv-stage specific categories added after PR #2112 telemetry surfaced
# 2,406 phase=2/err=99 sessions in the first 3h of v2.0.1 — venv phase
# failing in ways the original pip-flavored patterns didn't catch. These
# all split out of what was previously collapsing to _uncategorized.
"venv_ensurepip_fail": 11, # Debian/Ubuntu missing python3-venv;
# stderr mentions ensurepip non-zero exit
# or "ensurepip is not available"
"venv_path_too_long": 12, # Windows MAX_PATH (260) or POSIX
# ENAMETOOLONG — venv writes deep paths
# under state_dir/agent-sdk-venv/Lib/...
"venv_no_module": 13, # `python3 -m venv` itself missing — "No
# module named 'venv'" / "No module named venv"
"venv_already_exists": 14, # Errno 17 / "file exists" — sentinel race
# past O_EXCL or stale dir survived --clear
"venv_setup_failed": 15, # Generic "virtual environment was not
# created successfully" — catches the long
# tail of venv setup failures that don't
# match a more specific category above
# 1698 reserved for future categories; APPEND-ONLY.
"pip_no_match": 1,
"dns_fail": 2,
"conn_refused": 3,
"ssl_verify": 4,
"perm_denied": 5,
"no_pip": 6,
"disk_full": 7,
"proxy_auth": 8,
"stderr_timeout": 9, # pip stderr containing "timeout"/"timed out"
"subprocess_timeout": 10, # subprocess.TimeoutExpired (>120s)
# 1198 reserved for future categories; APPEND-ONLY.
# 99 catches everything else (including "exc:<TypeName>" and "other:<tail>"
# — the original string is debug-loggable but the integer is what makes
# it to telemetry). For the "other:" tail, `sdk_bootstrap_stderr_sig`
# carries a bounded integer hash so we can still distinguish patterns
# in BQ aggregation.
"_uncategorized": 99,
# it to telemetry).
"_uncategorized": 99,
}
@@ -127,37 +107,6 @@ def _encode_err_kind(s):
return SDK_BOOTSTRAP_ERR_CODES["_uncategorized"]
def _encode_stderr_sig(err_kind):
"""Bounded integer hash of the stderr tail captured in "other:<tail>"
err_kinds. Lets us distinguish patterns INSIDE the _uncategorized
(code 99) bucket without unbounded cardinality.
Returns 0 for non-"other:" err_kinds (so the field auto-omits from
emit_metrics on categorized failures — see the emit block in main()).
Strategy: take the tail's first ~30 chars (post-lowercase, post-trim),
SHA-1, fold the first 2 bytes to 0999. Different stderr messages
cluster into different buckets; same stderr always maps to the same
bucket. Cardinality is bounded at 1000, well below any "high
cardinality" alarm — and a real failure mode typically produces
near-identical stderr across thousands of machines, so 1000 buckets
is comfortably wide.
Why first ~30 chars: stderr like "ERROR: Command failed: <full
path>" varies the tail wildly (paths) but the categorization signal
is in the leading words. Dropping the suffix focuses the hash on
the discriminative part.
"""
if not err_kind or not err_kind.startswith("other:"):
return 0
import hashlib
tail = err_kind[len("other:"):].strip().lower()[:30]
if not tail:
return 0
h = hashlib.sha1(tail.encode("utf-8", errors="replace")).digest()
return int.from_bytes(h[:2], "big") % 1000
def _sdk_on_syspath() -> bool:
# find_spec is ~10ms; actually importing the SDK pulls in
# transitive deps and costs ~800ms — too heavy for a
@@ -296,34 +245,7 @@ def main() -> tuple[int, str, str]:
else:
stderr_str = str(stderr_b)
s = stderr_str.lower()
# Venv-specific patterns checked FIRST — they overlap with some pip
# patterns (e.g. "no module named ensurepip" could match no_pip OR
# venv_ensurepip_fail; the venv-stage interpretation is the right
# one when err_phase=="venv"). Order is venv-most-specific →
# pip-historical → generic.
if err_phase == "venv" and (
"ensurepip is not available" in s
or ("ensurepip" in s and "returned non-zero" in s)
or "the virtual environment was not created" in s and "ensurepip" in s
):
err_kind = "venv_ensurepip_fail"
elif err_phase == "venv" and (
"[errno 36]" in s
or "file name too long" in s
or "path too long" in s
):
err_kind = "venv_path_too_long"
elif err_phase == "venv" and (
"no module named venv" in s
or "no module named 'venv'" in s
):
err_kind = "venv_no_module"
elif err_phase == "venv" and (
"[errno 17]" in s
or ("file exists" in s and "venv" in s)
):
err_kind = "venv_already_exists"
elif "no matching distribution" in s or "could not find a version" in s:
if "no matching distribution" in s or "could not find a version" in s:
err_kind = "pip_no_match"
elif "name or service not known" in s or "name resolution" in s \
or "nodename nor servname" in s or "temporary failure in name" in s:
@@ -342,15 +264,6 @@ def main() -> tuple[int, str, str]:
err_kind = "proxy_auth"
elif "timeout" in s or "timed out" in s:
err_kind = "stderr_timeout"
elif err_phase == "venv" and (
"virtual environment was not created" in s
or "error: command" in s and "venv" in s
):
# Generic venv-setup catch-all — matched AFTER the more specific
# venv patterns above so we don't shadow them, but BEFORE the
# other: fallback so generic venv setup failures get their own
# bucket instead of polluting the long-tail signature space.
err_kind = "venv_setup_failed"
else:
# First 60 chars of the last non-empty stderr line — bounded to
# stay inside CC's metric value-length budget. Real failure modes
@@ -459,14 +372,6 @@ if __name__ == "__main__":
# failure path, e.g. state_dir.mkdir perm-denied).
metrics["sdk_bootstrap_phase"] = _encode_phase(err_phase or "pre")
metrics["sdk_bootstrap_err"] = _encode_err_kind(err_kind)
# For "other:<tail>" (encoded err==99), emit a bounded integer
# hash of the stderr tail so BQ can distinguish patterns inside
# the _uncategorized bucket without unbounded cardinality. Zero
# when err_kind is categorized — the schema reader treats 0 as
# "no signal", matching the absence convention.
sig = _encode_stderr_sig(err_kind)
if sig:
metrics["sdk_bootstrap_stderr_sig"] = sig
pv = _plugin_version_int()
if pv:
metrics["pv"] = pv

View File

@@ -221,34 +221,15 @@ def emit_metrics(
task-notification one-liner. Must be in the same JSON line as the metrics
because CC stops scanning stdout after the first {-prefixed line.
`additional_context` (asyncRewake findings): model-visible guidance text.
Delivery channel depends on `hook_event_name` because CC's hook-output
contract is NOT symmetric across events:
- PostToolUse (commit-review, push-sweep): surfaced via the modern
hookSpecificOutput.additionalContext protocol. `PostToolUse` is a
member of CC's hookSpecificOutput discriminated union
(coreSchemas.ts), so the JSON validates and metrics/rewakeSummary
are consumed. See #1375 / #1783 for why this replaced the legacy
stderr + exit(2) shape for PostToolUse.
- Stop / SubagentStop: there is NO `Stop` member in that union, so
emitting hookSpecificOutput{hookEventName:"Stop"} makes the whole
line fail isSyncHookJSONOutput validation — which on the asyncRewake
path silently drops metrics AND rewakeSummary, and (because the
legacy stderr write was removed) leaks the raw JSON to the model as
the rewake body. CC's asyncRewake delivery actually reads
`stderr || stdout` for the model-visible body and only scans stdout
JSON for metrics+rewakeSummary — it never reads additionalContext
on this path. So for Stop we use the documented clean pattern:
guidance on stderr, valid JSON (metrics + rewakeSummary +
top-level decision/reason) on stdout. The top-level decision:"block"
+ reason also covers the sync-fallback path (single-shot `claude -p`,
where asyncRewake degrades to a sync Stop hook that reads
decision/reason). See #2159.
Empty/None additional_context emits neither channel (back-compat for
metrics-only callers).
`additional_context` (asyncRewake findings): model-visible guidance text
that CC surfaces via the modern hook-output protocol
(hookSpecificOutput.additionalContext) instead of the legacy stderr +
exit(2) pair. The caller passes the finding-explanation text it would
have written to stderr; the JSON channel carries it cleanly so CC's UI
shows the reason properly instead of "Permission denied with no reason".
See anthropics/claude-plugins-official#1375 and #1783. Empty/None
means no hookSpecificOutput field is emitted (preserves backward compat
for legacy emit-sites that only want metrics).
`system_message` (optional, asyncRewake only): user-visible TUI message,
distinct from rewakeSummary which is the task-notification one-liner.
@@ -256,9 +237,10 @@ def emit_metrics(
surface; systemMessage adds a per-fire override when the static
rewakeMessage isn't specific enough for the finding being shown.
`hook_event_name` (used only when additional_context is set): selects the
delivery channel above. Defaults to "PostToolUse" (commit-review and
push-sweep are the most common callers); handle_stop_hook passes "Stop".
`hook_event_name` (used only when additional_context is set): which event
the hookSpecificOutput attaches to. Defaults to "PostToolUse" since the
commit-review and push-sweep handlers are the most common callers;
handle_stop_hook explicitly passes "Stop".
"""
head = {}
if _PV and "pv" not in metrics:
@@ -270,23 +252,14 @@ def emit_metrics(
if rewake_summary:
out["rewakeSummary"] = rewake_summary
if additional_context:
if hook_event_name in ("Stop", "SubagentStop"):
# Stop is NOT in CC's hookSpecificOutput union — emitting it there
# fails schema validation and drops metrics+rewakeSummary (#2159).
# Clean pattern: guidance on stderr (the asyncRewake body channel,
# delivered via `stderr || stdout`), top-level decision/reason for
# the sync-fallback path. stdout JSON stays valid so metrics +
# rewakeSummary survive.
sys.stderr.write(additional_context)
sys.stderr.flush()
out["decision"] = "block"
out["reason"] = additional_context
else:
# PostToolUse et al. — valid union member; modern protocol.
out["hookSpecificOutput"] = {
"hookEventName": hook_event_name,
"additionalContext": additional_context,
}
# Wrap in hookSpecificOutput per CC's modern hook-output contract.
# Drops the legacy `sys.stderr.write(...) + sys.exit(2)` shape that
# left CC's UI showing "denied with no reason" (#1783) and triggered
# "json output validation failed" on older CC versions (#1375).
out["hookSpecificOutput"] = {
"hookEventName": hook_event_name,
"additionalContext": additional_context,
}
if system_message:
out["systemMessage"] = system_message
print(json.dumps(out), flush=True)