[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M69913RW889ST0SXBK34V6DX":3,"skill-same:01M69913RW889ST0SXBK34V6DX":94},{"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":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":47,"commitSha":48,"skillDirectory":49,"forksCount":50,"repositoryHtmlUrl":51,"repositoryHomepageUrl":6,"ownerHtmlUrl":52,"ownerBlogUrl":53,"ownerDescription":54,"updatedAt":55,"install":56,"resources":69},"01M69913RW889ST0SXBK34V6DX","cloud-monitoring-promql-query",null,"Generates valid PromQL queries from Cloud Monitoring metric descriptors and resource parameters. Use when asked to create, generate, write, or format PromQL queries, PromQL strings, or PromQL aggregations for Cloud Monitoring metrics and resources. Don't use for raw metric discovery or metric selection.","google\u002Fskills","google","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F1342004?v=4","01M698VYEFDM0VJBZDYYJ2T83S","Google","01M698WR0H76ENHE587T9EJT89",24122,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fcloud\u002Fcloud-monitoring-promql-query\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"promql","monitoring","cloud","cloud monitoring","cloud monitoring promql query","query","queries","when","metric","for","strings","resources","selection","use","write","format","discovery","generate","create","valid","2026-11-10 10:12:30",false,"---\nname: cloud-monitoring-promql-query\nmetadata:\n  version: \"1.0.1\"\n  category: CloudObservabilityAndMonitoring\ndescription: >-\n  Generates valid PromQL queries from Cloud Monitoring metric descriptors and\n  resource parameters. Use when asked to create, generate, write, or format\n  PromQL queries, PromQL strings, or PromQL aggregations for Cloud Monitoring\n  metrics and resources. Don't use for raw metric discovery or metric selection.\n---\n\n# Cloud Monitoring PromQL Generator\n\nUse this skill to generate a valid PromQL query from any Cloud Monitoring metric\ntype. This guide applies to all Cloud Monitoring metric types by mapping Cloud\nMonitoring metric and resource descriptors to PromQL structures.\n\n## Attribution\n\n**MUST READ**: Before executing any `gcloud`, REST API, or MCP command, you\nMUST read [Usage Attribution](references\u002Fattribution.md). For commands executed\ndirectly in the terminal (never in generated scripts, Terraform, or user code),\nprefix `gcloud` with\n`CLOUDSDK_METRICS_REQUEST_ATTRIBUTION=\"agent-skills\u002F1.0 (skill:cloud-monitoring-promql-query)\"`\nand append `agent-skills\u002F1.0 (skill:cloud-monitoring-promql-query)` to `User-Agent` headers.\n\n## Workflow\n\n### Resolve Project ID (CRITICAL & BLOCKING)\n\nBefore performing any other actions (such as searching code, reading references,\nor running validation), you MUST verify whether the Google Cloud Project ID is\navailable:\n\n1.  **Check Prompt\u002FPayload**: Look for the Project ID in the user's prompt or\n    input.\n2.  **Check Environment**: If the Project ID is not present in the prompt, you\n    MUST run `gcloud config get-value project` to attempt to resolve it from the\n    environment.\n3.  **Ask for Clarification (BLOCKING)**: If the Project ID is not in the prompt\n    AND the `gcloud` command fails, returns an empty string, or is unavailable,\n    you MUST immediately stop. Do NOT generate a PromQL query, do not run the\n    validation script, and do not use placeholders (like `YOUR_PROJECT_ID`). You\n    must refuse to proceed and ask the user to provide the Project ID.\n\n### Inspect Metric and Resource Descriptors\n\n1.  **Use Provided Descriptors First**: If the user's prompt already includes\n    metric descriptor details (such as `metric.type`, `metricKind`, `valueType`,\n    or `monitoredResourceTypes`) or specific resource filter values, use those\n    values directly instead of calling the Cloud Monitoring API.\n2.  **Discover Missing Descriptors**: If exact metric descriptors\n    (`metric.type`, `metricKind`, `valueType`) are missing or underspecified,\n    resolve the target metric type's descriptor using one of these paths:\n    *   **Vague Query**: If the prompt is vague (for example, `\"VM CPU usage\"`),\n        use the `cloud-monitoring-metric-selection` skill first to identify the\n        specific metric type.\n    *   **Known Metric Type**: If you already have the specific metric type name\n        (for example, `compute.googleapis.com\u002Finstance\u002Fcpu\u002Futilization`) but\n        need its descriptor, call the\n        `google-cloud-monitoring:list_metric_descriptors` MCP tool. If the tool\n        is missing, refer to the `cloud-monitoring-metric-selection` skill to\n        configure the Cloud Monitoring MCP server.\n    *   **Fallback**: If the MCP tool cannot be configured, fall back to making\n        a direct Cloud Monitoring API call.\n3.  **Identify Key Fields**: From the retrieved descriptor, identify four key\n    schema attributes:\n    *   **`type`**: The Cloud Monitoring metric type string.\n    *   **`metricKind`**: `GAUGE`, `DELTA`, or `CUMULATIVE`.\n    *   **`valueType`**: `INT64`, `DOUBLE`, `DISTRIBUTION`, or `BOOL`.\n    *   **`monitoredResourceTypes`**: Compatible `resource.type` strings\n        required for resource scoping and grouping.\n\n### Resolve Resource Filters & Discovery Protocol\n\nTo filter data by a specific resource instance, apply these resource rules and\ndiscovery protocols:\n\n1.  **Monitored Resource Filter**: Always include the\n    `monitored_resource=\"\u003Ctype>\"` filter in your query to prevent collisions\n    across services that share metric names.\n    *   **Example**: `monitored_resource=\"gae_app\"`\n2.  **Preserve User Literals (CRITICAL)**: ALWAYS use the literal resource\n    names, namespaces, and IDs provided in the user's prompt. Do **NOT**\n    override or replace these values with active resource names found during\n    Cloud Monitoring discovery unless the user explicitly asked you to find\n    active resources. Telemetry discovery must only be used to identify metric\n    type names and label keys, not to override user input.\n3.  **Resource Identifier Mapping**:\n    *   **Direct & Specific Keys**: Use the most specific resource identifier\n        available. **Example**: `version_id`, `cluster_name`.\n    *   **Name-to-ID Resolution**: If the user filters by a resource *name*\n        (such as `\"instance-1\"`), but the resource schema uses numeric IDs (like\n        `instance_id`), use PromQL string name labels instead of numeric ID\n        labels. **Example**: `instance_name`, `metadata_system_name`.\n    *   **Composite Identifiers**: For resources with hierarchical identifiers\n        (such as Cloud SQL databases), format the filter as a single composite\n        key. Do NOT split them into separate `project_id` and sub-resource\n        labels. **Example**: `database_id=\"{project_id}:{instance_name}\"`.\n4.  **Resource Label Discovery**: The\n    `google-cloud-monitoring:list_metric_descriptors` tool only returns\n    metric-specific labels. If the label schema for a monitored resource is\n    unknown, fetch the resource descriptor directly from the Cloud Monitoring v3\n    REST API (`projects.monitoredResourceDescriptors.get`):\n\n    ```bash\n    TOKEN=$(gcloud auth application-default print-access-token 2>\u002Fdev\u002Fnull || gcloud auth print-access-token)\n    curl -s -H \"Authorization: Bearer ${TOKEN}\" \\\n    \"https:\u002F\u002Fmonitoring.googleapis.com\u002Fv3\u002Fprojects\u002F{project_id}\u002FmonitoredResourceDescriptors\u002F{monitored_resource_type}\"\n    ```\n\n    An HTTP 200 OK response returns the `MonitoredResourceDescriptor` object\n    containing the `labels` array with the exact resource label keys for that\n    resource.\n\n### Choose Aggregation Structure & Defaults\n\nThe query structure and aggregation functions (such as `rate`,\n`histogram_quantile`, `sum`, or `avg`) depend on the metric type and how it is\nvisualized.\n\n1.  **Consult the Reference**: Consult the\n    [Cloud Monitoring to PromQL Basic Aggregations Reference](references\u002Fbasic_aggregations.md)\n    as the single source of truth to map Cloud Monitoring properties (Metric\n    Kind, Value Type, Aligner, Reducer) to their PromQL structures.\n2.  **SRE Aggregation & Visualization Rules**:\n    *   **Do NOT sum or average ratio\u002Fpercentage utilization metrics** (like CPU\n        % or Memory limit utilization) across resource instances. Instead, keep\n        them unaggregated (raw metric), group by instance, or wrap in `topk(30,\n        avg_over_time(...))`.\n    *   **State Label Filtering (CRITICAL)**: Only the metrics\n        `agent.googleapis.com\u002Fmemory\u002Fpercent_used` and\n        `agent.googleapis.com\u002Fdisk\u002Fpercent_used` require `{state!=\"free\"}`. Do\n        **NOT** filter by `{state=\"used\"}`.\n\n### Format & Validate Query\n\nBefore presenting any PromQL queries, validate them using the linter:\n\n#### Python Dependencies\n\nBefore executing the validation script (`scripts\u002Fvalidate_promql.py`), install\nthe required Python dependencies:\n\n```bash\npython3 -c \"import promql_parser\" || pip install promql-parser\n```\n\n#### Validation Procedure\n\n1.  **Format Constraints**:\n    *   **Metric Name Normalization**: Convert Cloud Monitoring metric types to\n        PromQL metric names using this recipe:\n        1.  **Split Domain and Path**: Split the Cloud Monitoring metric type by\n            the first slash (`\u002F`) to separate the domain from the path.\n            *   **Example**:\n                `storage.googleapis.com\u002Fnetwork\u002Freceived_bytes_count` -> domain\n                `storage.googleapis.com`, path `network\u002Freceived_bytes_count`\n        2.  **Normalize Domain**: Replace all periods (`.`) in the domain with\n            underscores (`_`).\n            *   **Example**: `storage.googleapis.com` ->\n                `storage_googleapis_com`\n        3.  **Normalize Path**: Replace all periods (`.`) and slashes (`\u002F`) in\n            the path with underscores (`_`).\n            *   **Example**: `network\u002Freceived_bytes_count` ->\n                `network_received_bytes_count`\n        4.  **Join with Colon**: Join the normalized domain and normalized path\n            with a colon (`:`).\n            *   **Example**:\n                `storage_googleapis_com:network_received_bytes_count`\n        5.  **Native Prometheus Metrics**: If the metric type has no slash, keep\n            it as-is.\n            *   **Example**: `up` -> `up`, `http_requests_total` ->\n                `http_requests_total`\n        6.  **Distribution Suffix**: If the metric's `valueType` is\n            `DISTRIBUTION`, append `_bucket` to the end of the normalized name.\n            *   **Example**:\n                `cloudfunctions.googleapis.com\u002Ffunction\u002Fexecution_times` ->\n                `cloudfunctions_googleapis_com:function_execution_times_bucket`\n    *   Ensure the final query is a **single line with no comments** (no `#` or\n        `\u002F\u002F`). Cloud Monitoring query translation collapses whitespace and can\n        cause code trailing a comment to be ignored or throw parsing errors.\n    *   **Grouping Clause Syntax**: Ensure grouping clauses (such as `by\n        (label)`) only follow aggregation operators (such as `sum`, `avg`,\n        `min`, `max`, or `count`). Never place a grouping clause directly after\n        a metric selector.\n        *   **Incorrect**: `metric{...} by (label)`\n        *   **Correct**: `sum(rate(metric{...}[5m])) by (label)`\n    *   **Fenced Output Code Block**: ALWAYS wrap the final verified PromQL\n        query in a fenced `promql` code block in your final response.\n2.  **Linter Verification**:\n    *   Validate all generated queries in a single batch: `python3\n        \u003Cpath_to_skill>\u002Fscripts\u002Fvalidate_promql.py --query '\u003Cq1>' '\u003Cq2>'`\n    *   If validation fails, read\n        [PromQL Error Recovery Guide](references\u002Fpromql_error_recovery.md) to\n        diagnose and fix common type mismatches and syntax errors before\n        repeating the loop.\n\n## References\n\n*   [Cloud Monitoring PromQL Basic Aggregations Reference](references\u002Fbasic_aggregations.md)\n*   [Cloud Monitoring PromQL Error Recovery Guide](references\u002Fpromql_error_recovery.md)\n*   [Cloud Monitoring PromQL Documentation](https:\u002F\u002Fdocs.cloud.google.com\u002Fmonitoring\u002Fpromql.md.txt)\n*   [Cloud Monitoring Monitored Resource Types Reference](https:\u002F\u002Fdocs.cloud.google.com\u002Fmonitoring\u002Fapi\u002Fresources.md.txt)\n","# Cloud Monitoring PromQL Generator\n\nUse this skill to generate a valid PromQL query from any Cloud Monitoring metric\ntype. This guide applies to all Cloud Monitoring metric types by mapping Cloud\nMonitoring metric and resource descriptors to PromQL structures.\n\n## Attribution\n\n**MUST READ**: Before executing any `gcloud`, REST API, or MCP command, you\nMUST read [Usage Attribution](references\u002Fattribution.md). For commands executed\ndirectly in the terminal (never in generated scripts, Terraform, or user code),\nprefix `gcloud` with\n`CLOUDSDK_METRICS_REQUEST_ATTRIBUTION=\"agent-skills\u002F1.0 (skill:cloud-monitoring-promql-query)\"`\nand append `agent-skills\u002F1.0 (skill:cloud-monitoring-promql-query)` to `User-Agent` headers.\n\n## Workflow\n\n### Resolve Project ID (CRITICAL & BLOCKING)\n\nBefore performing any other actions (such as searching code, reading references,\nor running validation), you MUST verify whether the Google Cloud Project ID is\navailable:\n\n1.  **Check Prompt\u002FPayload**: Look for the Project ID in the user's prompt or\n    input.\n2.  **Check Environment**: If the Project ID is not present in the prompt, you\n    MUST run `gcloud config get-value project` to attempt to resolve it from the\n    environment.\n3.  **Ask for Clarification (BLOCKING)**: If the Project ID is not in the prompt\n    AND the `gcloud` command fails, returns an empty string, or is unavailable,\n    you MUST immediately stop. Do NOT generate a PromQL query, do not run the\n    validation script, and do not use placeholders (like `YOUR_PROJECT_ID`). You\n    must refuse to proceed and ask the user to provide the Project ID.\n\n### Inspect Metric and Resource Descriptors\n\n1.  **Use Provided Descriptors First**: If the user's prompt already includes\n    metric descriptor details (such as `metric.type`, `metricKind`, `valueType`,\n    or `monitoredResourceTypes`) or specific resource filter values, use those\n    values directly instead of calling the Cloud Monitoring API.\n2.  **Discover Missing Descriptors**: If exact metric descriptors\n    (`metric.type`, `metricKind`, `valueType`) are missing or underspecified,\n    resolve the target metric type's descriptor using one of these paths:\n    *   **Vague Query**: If the prompt is vague (for example, `\"VM CPU usage\"`),\n        use the `cloud-monitoring-metric-selection` skill first to identify the\n        specific metric type.\n    *   **Known Metric Type**: If you already have the specific metric type name\n        (for example, `compute.googleapis.com\u002Finstance\u002Fcpu\u002Futilization`) but\n        need its descriptor, call the\n        `google-cloud-monitoring:list_metric_descriptors` MCP tool. If the tool\n        is missing, refer to the `cloud-monitoring-metric-selection` skill to\n        configure the Cloud Monitoring MCP server.\n    *   **Fallback**: If the MCP tool cannot be configured, fall back to making\n        a direct Cloud Monitoring API call.\n3.  **Identify Key Fields**: From the retrieved descriptor, identify four key\n    schema attributes:\n    *   **`type`**: The Cloud Monitoring metric type string.\n    *   **`metricKind`**: `GAUGE`, `DELTA`, or `CUMULATIVE`.\n    *   **`valueType`**: `INT64`, `DOUBLE`, `DISTRIBUTION`, or `BOOL`.\n    *   **`monitoredResourceTypes`**: Compatible `resource.type` strings\n        required for resource scoping and grouping.\n\n### Resolve Resource Filters & Discovery Protocol\n\nTo filter data by a specific resource instance, apply these resource rules and\ndiscovery protocols:\n\n1.  **Monitored Resource Filter**: Always include the\n    `monitored_resource=\"\u003Ctype>\"` filter in your query to prevent collisions\n    across services that share metric names.\n    *   **Example**: `monitored_resource=\"gae_app\"`\n2.  **Preserve User Literals (CRITICAL)**: ALWAYS use the literal resource\n    names, namespaces, and IDs provided in the user's prompt. Do **NOT**\n    override or replace these values with active resource names found during\n    Cloud Monitoring discovery unless the user explicitly asked you to find\n    active resources. Telemetry discovery must only be used to identify metric\n    type names and label keys, not to override user input.\n3.  **Resource Identifier Mapping**:\n    *   **Direct & Specific Keys**: Use the most specific resource identifier\n        available. **Example**: `version_id`, `cluster_name`.\n    *   **Name-to-ID Resolution**: If the user filters by a resource *name*\n        (such as `\"instance-1\"`), but the resource schema uses numeric IDs (like\n        `instance_id`), use PromQL string name labels instead of numeric ID\n        labels. **Example**: `instance_name`, `metadata_system_name`.\n    *   **Composite Identifiers**: For resources with hierarchical identifiers\n        (such as Cloud SQL databases), format the filter as a single composite\n        key. Do NOT split them into separate `project_id` and sub-resource\n        labels. **Example**: `database_id=\"{project_id}:{instance_name}\"`.\n4.  **Resource Label Discovery**: The\n    `google-cloud-monitoring:list_metric_descriptors` tool only returns\n    metric-specific labels. If the label schema for a monitored resource is\n    unknown, fetch the resource descriptor directly from the Cloud Monitoring v3\n    REST API (`projects.monitoredResourceDescriptors.get`):\n\n    ```bash\n    TOKEN=$(gcloud auth application-default print-access-token 2>\u002Fdev\u002Fnull || gcloud auth print-access-token)\n    curl -s -H \"Authorization: Bearer ${TOKEN}\" \\\n    \"https:\u002F\u002Fmonitoring.googleapis.com\u002Fv3\u002Fprojects\u002F{project_id}\u002FmonitoredResourceDescriptors\u002F{monitored_resource_type}\"\n    ```\n\n    An HTTP 200 OK response returns the `MonitoredResourceDescriptor` object\n    containing the `labels` array with the exact resource label keys for that\n    resource.\n\n### Choose Aggregation Structure & Defaults\n\nThe query structure and aggregation functions (such as `rate`,\n`histogram_quantile`, `sum`, or `avg`) depend on the metric type and how it is\nvisualized.\n\n1.  **Consult the Reference**: Consult the\n    [Cloud Monitoring to PromQL Basic Aggregations Reference](references\u002Fbasic_aggregations.md)\n    as the single source of truth to map Cloud Monitoring properties (Metric\n    Kind, Value Type, Aligner, Reducer) to their PromQL structures.\n2.  **SRE Aggregation & Visualization Rules**:\n    *   **Do NOT sum or average ratio\u002Fpercentage utilization metrics** (like CPU\n        % or Memory limit utilization) across resource instances. Instead, keep\n        them unaggregated (raw metric), group by instance, or wrap in `topk(30,\n        avg_over_time(...))`.\n    *   **State Label Filtering (CRITICAL)**: Only the metrics\n        `agent.googleapis.com\u002Fmemory\u002Fpercent_used` and\n        `agent.googleapis.com\u002Fdisk\u002Fpercent_used` require `{state!=\"free\"}`. Do\n        **NOT** filter by `{state=\"used\"}`.\n\n### Format & Validate Query\n\nBefore presenting any PromQL queries, validate them using the linter:\n\n#### Python Dependencies\n\nBefore executing the validation script (`scripts\u002Fvalidate_promql.py`), install\nthe required Python dependencies:\n\n```bash\npython3 -c \"import promql_parser\" || pip install promql-parser\n```\n\n#### Validation Procedure\n\n1.  **Format Constraints**:\n    *   **Metric Name Normalization**: Convert Cloud Monitoring metric types to\n        PromQL metric names using this recipe:\n        1.  **Split Domain and Path**: Split the Cloud Monitoring metric type by\n            the first slash (`\u002F`) to separate the domain from the path.\n            *   **Example**:\n                `storage.googleapis.com\u002Fnetwork\u002Freceived_bytes_count` -> domain\n                `storage.googleapis.com`, path `network\u002Freceived_bytes_count`\n        2.  **Normalize Domain**: Replace all periods (`.`) in the domain with\n            underscores (`_`).\n            *   **Example**: `storage.googleapis.com` ->\n                `storage_googleapis_com`\n        3.  **Normalize Path**: Replace all periods (`.`) and slashes (`\u002F`) in\n            the path with underscores (`_`).\n            *   **Example**: `network\u002Freceived_bytes_count` ->\n                `network_received_bytes_count`\n        4.  **Join with Colon**: Join the normalized domain and normalized path\n            with a colon (`:`).\n            *   **Example**:\n                `storage_googleapis_com:network_received_bytes_count`\n        5.  **Native Prometheus Metrics**: If the metric type has no slash, keep\n            it as-is.\n            *   **Example**: `up` -> `up`, `http_requests_total` ->\n                `http_requests_total`\n        6.  **Distribution Suffix**: If the metric's `valueType` is\n            `DISTRIBUTION`, append `_bucket` to the end of the normalized name.\n            *   **Example**:\n                `cloudfunctions.googleapis.com\u002Ffunction\u002Fexecution_times` ->\n                `cloudfunctions_googleapis_com:function_execution_times_bucket`\n    *   Ensure the final query is a **single line with no comments** (no `#` or\n        `\u002F\u002F`). Cloud Monitoring query translation collapses whitespace and can\n        cause code trailing a comment to be ignored or throw parsing errors.\n    *   **Grouping Clause Syntax**: Ensure grouping clauses (such as `by\n        (label)`) only follow aggregation operators (such as `sum`, `avg`,\n        `min`, `max`, or `count`). Never place a grouping clause directly after\n        a metric selector.\n        *   **Incorrect**: `metric{...} by (label)`\n        *   **Correct**: `sum(rate(metric{...}[5m])) by (label)`\n    *   **Fenced Output Code Block**: ALWAYS wrap the final verified PromQL\n        query in a fenced `promql` code block in your final response.\n2.  **Linter Verification**:\n    *   Validate all generated queries in a single batch: `python3\n        \u003Cpath_to_skill>\u002Fscripts\u002Fvalidate_promql.py --query '\u003Cq1>' '\u003Cq2>'`\n    *   If validation fails, read\n        [PromQL Error Recovery Guide](references\u002Fpromql_error_recovery.md) to\n        diagnose and fix common type mismatches and syntax errors before\n        repeating the loop.\n\n## References\n\n*   [Cloud Monitoring PromQL Basic Aggregations Reference](references\u002Fbasic_aggregations.md)\n*   [Cloud Monitoring PromQL Error Recovery Guide](references\u002Fpromql_error_recovery.md)\n*   [Cloud Monitoring PromQL Documentation](https:\u002F\u002Fdocs.cloud.google.com\u002Fmonitoring\u002Fpromql.md.txt)\n*   [Cloud Monitoring Monitored Resource Types Reference](https:\u002F\u002Fdocs.cloud.google.com\u002Fmonitoring\u002Fapi\u002Fresources.md.txt)\n",{"name":5,"metadata":44,"description":7},{"version":45,"category":46},"1.0.1","CloudObservabilityAndMonitoring","main","bb9b3f464aae37af360d079c1d863524955b0363","skills\u002Fcloud\u002Fcloud-monitoring-promql-query",2005,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills","https:\u002F\u002Fgithub.com\u002Fgoogle","https:\u002F\u002Fopensource.google\u002F","Google ❤️ Open Source","2026-11-14 01:51:35",{"source":8,"skillName":5,"commands":57,"prompt":67,"zipAvailable":68},[58,61,64],{"tool":59,"command":60},"npx","npx skills add google\u002Fskills --skill cloud-monitoring-promql-query",{"tool":62,"command":63},"bunx","bunx skills add google\u002Fskills --skill cloud-monitoring-promql-query",{"tool":65,"command":66},"pnpm","pnpm dlx skills add google\u002Fskills --skill cloud-monitoring-promql-query","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fcloud\u002Fcloud-monitoring-promql-query\u002FSKILL.md",true,[70,76,80,84,90],{"path":71,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":74,"sourceHtmlUrl":75},"references\u002Fattribution.md","REFERENCE","参考文档",1927,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fcloud\u002Fcloud-monitoring-promql-query\u002Freferences\u002Fattribution.md",{"path":77,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":78,"sourceHtmlUrl":79},"references\u002Fbasic_aggregations.md",13064,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fcloud\u002Fcloud-monitoring-promql-query\u002Freferences\u002Fbasic_aggregations.md",{"path":81,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":82,"sourceHtmlUrl":83},"references\u002Fpromql_error_recovery.md",5218,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fcloud\u002Fcloud-monitoring-promql-query\u002Freferences\u002Fpromql_error_recovery.md",{"path":85,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":88,"sourceHtmlUrl":89},"scripts\u002Fvalidate_promql_test.py","SCRIPT","脚本",9798,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fcloud\u002Fcloud-monitoring-promql-query\u002Fscripts\u002Fvalidate_promql_test.py",{"path":91,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":92,"sourceHtmlUrl":93},"scripts\u002Fvalidate_promql.py",7693,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fcloud\u002Fcloud-monitoring-promql-query\u002Fscripts\u002Fvalidate_promql.py",[95,133,164,192,219,243],{"skillNo":96,"name":97,"nameZh":6,"description":98,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":99,"categories":100,"keywords":109,"publishedAt":39},"01M6998S2EZKD3GEJ7F943RZTE","sign-in-with-google-web","Implement, configure, and secure Sign In With Google (SiwG) using Google Identity Services (GIS \u002F `https:\u002F\u002Faccounts.google.com\u002Fgsi\u002Fclient`) across web architectures. Use when creating Google sign-in buttons, implementing Google One Tap with FedCM, integrating GIS in React\u002FNext.js\u002FAngular\u002FHTML, verifying ID tokens on backend runtimes (Python\u002FNode.js\u002FGo\u002FJava), enforcing Google Workspace domain restrictions (`hd`), securing client-side ID tokens via WebCrypto nonces or encrypted IndexedDB, embedding in cross-origin iframes via the Intermediate Iframe API (`https:\u002F\u002Faccounts.google.com\u002Fgsi\u002Fintermediate`), configuring Content Security Policy (CSP), COOP, and Permissions Policy (`identity-credentials-get`) headers, or handling sign-out and revocation. Don't use for legacy Google Sign-In (`gapi.auth2`), Google Cloud IAM service accounts, or Android\u002FiOS native Credential Manager.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fidentity\u002Fsign-in-with-google-web\u002FSKILL.md",[101,106],{"categoryNo":102,"categoryName":103,"taxonomyType":104,"taxonomyTypeDesc":105},"01JBSEEDCAT000000000000009","前端开发","SCENARIO","使用场景",{"categoryNo":107,"categoryName":108,"taxonomyType":104,"taxonomyTypeDesc":105},"01JBSEEDCAT000000000000010","后端与接口",[9,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132],"sign in with google web","sign","with","web","android","go","security","google workspace","google cloud","implement","policy","python","implementing","react","iam","permissions","buttons","secure","manager","identity","architectures","domain","runtimes",{"skillNo":134,"name":135,"nameZh":6,"description":136,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":137,"categories":138,"keywords":148,"publishedAt":39},"01M6998PHPDCAD684VW5WRG83D","dpop-adoption","Implement and debug OAuth 2.0 DPoP (RFC 9449) refresh token sender-constraining for WebCrypto, Node.js ES6, and browser runtimes integrating with Google's OAuth platform. Use when configuring non-extractable asymmetric key pairs (P-256), generating DPoP Proof JWTs for authorization code exchange and token refresh, or handling 400 use_dpop_nonce challenge retry loops at oauth2.googleapis.com\u002Ftoken. Don't use for unconstrained OAuth 2.0 flows (where refresh tokens are not bound to a client key pair), or for Google Cloud IAM \u002F service account authentication.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fidentity\u002Fdpop-adoption\u002FSKILL.md",[139,140,143],{"categoryNo":107,"categoryName":108,"taxonomyType":104,"taxonomyTypeDesc":105},{"categoryNo":141,"categoryName":142,"taxonomyType":104,"taxonomyTypeDesc":105},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":144,"categoryName":145,"taxonomyType":146,"taxonomyTypeDesc":147},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[149,150,9,118,151,152,153,154,155,156,124,157,158,159,160,161,162,129,132,163,26],"dpop adoption","adoption","es6","retry","authentication","flows","challenge","code","browser","loops","at","node","token","pair","platform",{"skillNo":165,"name":166,"nameZh":6,"description":167,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":168,"categories":169,"keywords":176,"publishedAt":39},"01M6998M72TC73EEAQH4XC7EXW","retrieving-developer-knowledge","Searches, retrieves, and synthesizes official Google developer documentation across Google Cloud, AI\u002FGemini, Android, Chrome, Web, Flutter, Go, Firebase, and other Google developer platforms. Integrates with the Developer Knowledge MCP server (search_documents, get_documents, answer_query) or the Developer Knowledge REST API fallback. Use when searching for gcloud CLI commands, API syntax, IAM permissions, official documentation, architectural comparisons, or product choice overviews. Don't use for local filesystem lookups or non-Google documentation.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fdevelopers\u002Fretrieving-developer-knowledge\u002FSKILL.md",[170,171,174,175],{"categoryNo":107,"categoryName":108,"taxonomyType":104,"taxonomyTypeDesc":105},{"categoryNo":172,"categoryName":173,"taxonomyType":104,"taxonomyTypeDesc":105},"01JBSEEDCAT000000000000021","资料检索与研究",{"categoryNo":141,"categoryName":142,"taxonomyType":104,"taxonomyTypeDesc":105},{"categoryNo":144,"categoryName":145,"taxonomyType":146,"taxonomyTypeDesc":147},[177,178,179,180,118,181,182,183,184,185,186,187,188,26,24,189,190,124,191,125],"retrieving developer knowledge","knowledge","developer","MCP","mcp server","official","developer documentation","get","search","local","choice","documents","api","across","documentation",{"skillNo":193,"name":194,"nameZh":6,"description":195,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":196,"categories":197,"keywords":198,"publishedAt":39},"01M6998J2CZEXS9BES9S3WWFKC","migrate-to-rust","Clones, analyzes, plans, and migrates legacy codebases (C++, Fortran, Java, Python, C, Shell) from a GitHub URL or local directory to a modern, high-performance, deterministic, 100% Safe Rust architecture, tracking live telemetry across every task bucket, test failure\u002Ffix cycle, and Profile-Guided Optimization (PGO) stage, and producing a first-person AI storytelling report and interactive HTML infographic. Use when migrating a GitHub repository or local codebase to Rust, porting legacy C++, Fortran, Python, or Java workloads to memory-safe Rust, designing Struct-of-Arrays (SoA) or SIMD Rust architectures, or optimizing Rust ports with LLVM PGO. Don't use for unrelated non-Rust refactoring or single-line syntax questions.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fdevelopers\u002Fmigrate-to-rust\u002FSKILL.md",[],[199,200,201,202,203,204,205,206,121,207,208,209,210,211,212,186,213,214,215,26,216,217,190,218],"migrate to rust","rust","migrate","github","memory","performance","directory","safe","ports","llvm","soa","cycle","porting","fix","arrays","infographic","high-performance","URL","architecture","unrelated",{"skillNo":220,"name":221,"nameZh":6,"description":222,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":223,"categories":224,"keywords":228,"publishedAt":39},"01M6998GCC3K29WZ82KXMB9E02","finding-google-skills","Google platform decision and setup guidance, loaded on demand from Google's skill catalog. Use when a developer is choosing or setting up part of their stack, such as where to run a service, a database, storage, messaging, authentication, analytics, ads, or AI model serving, and a Google product is a reasonable candidate - whether or not a vendor is named - or when a request names a Google product or API. Brings in the matching Google skill so the answer can weigh Google options, their trade-offs, and when they are not the right fit. Skip when the stack is already settled on another provider and no Google product is named, or the task involves no platform choice.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fdevelopers\u002Ffinding-google-skills\u002FSKILL.md",[225,226,227],{"categoryNo":107,"categoryName":108,"taxonomyType":104,"taxonomyTypeDesc":105},{"categoryNo":141,"categoryName":142,"taxonomyType":104,"taxonomyTypeDesc":105},{"categoryNo":144,"categoryName":145,"taxonomyType":146,"taxonomyTypeDesc":147},[9,229,230,231,232,163,233,234,235,236,237,153,238,239,240,187,32,241,26,242,189],"finding google skills","storage","as","messaging","model","trade-offs","provider","answer","fit","catalog","up","decision","database","candidate",{"skillNo":244,"name":245,"nameZh":6,"description":246,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":247,"categories":248,"keywords":251,"publishedAt":39},"01M6998DWNHTH0BS6W1CY8ZXMP","workload-manager-basics","Use this skill to manage Google Cloud Workload Manager evaluations, rules, scanned resources, and validation results by using public client libraries and the REST API. Use when you need to inspect workload best-practice rules, create and run evaluations for Google Cloud general best practices, SAP, SQL Server, or custom organizational rules, review violations, export results to BigQuery, or automate Workload Manager through client libraries because no service-specific public CLI or MCP server is available. Don't use for general Google Compute Engine instance management, VPC configuration, or standard IAM auditing.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fcloud\u002Fworkload-manager-basics\u002FSKILL.md",[249,250],{"categoryNo":107,"categoryName":108,"taxonomyType":104,"taxonomyTypeDesc":105},{"categoryNo":141,"categoryName":142,"taxonomyType":104,"taxonomyTypeDesc":105},[252,253,128,254,9,180,255,118,181,256,257,30,258,26,259,189,124,37,260,261,262],"workload manager basics","workload","basics","cli","review","vpc","inspect","you","libraries","server","run"]