Marketing Foundation
Compact two-skill starter: clarify positioning and choose a lead magnet. Use Marketing Launch for the broader eight-skill go-to-market workflow.
The tunnel uses the same cards as the catalogue. Browse only as deep as needed — or load a broad bundle immediately.
SEO, Sales, Agents or another broad area → one bundle call → work.
Read-only access to published skills. Default 8, maximum 10 skills / 120,000 characters.
Compact two-skill starter: clarify positioning and choose a lead magnet. Use Marketing Launch for the broader eight-skill go-to-market workflow.
Build an evidence-led marketing plan from ICP and competition through positioning, campaigns, growth and measurement.
Diagnose architecture and context, plan agent-team responsibilities, then organize project context and session handoffs. Memory and cost-runtime reviews remain outside this pack.
Review the journey from landing page and lead capture through registration, first value and transparent upgrades.
Plan a campaign, draft its channel content and review the work against actual brand guidance.
Prioritize an editorial roadmap and plan how to launch and distribute it across suitable channels.
Understand customer needs, compare competitors and plan a community around real member value.
Choose a relevant lead magnet, then draft a permission-based nurture journey with entry, suppression and exit rules.
Define the API contract, then plan how to observe its latency, failures and retries. Guidance and checklist; no production changes.
Profile a dataset, choose and interpret statistical methods, then validate calculations and conclusions before sharing.
Plan Terraform and telemetry-based alerts for agent reliability and supported quality signals.
---
name: agent-platform-alert-configuration
metadata:
version: "1.0.0"
category: AiAndMachineLearning
description: >-
Configures best-practice alerting policies for AI agents using OpenTelemetry
(OTel) metrics, generating output as Terraform (.tf) configuration files.
Use when analyzing, writing, or deploying alerting policies
to monitor agent latency, error rates, token usage, and quality metrics.
Don't use for standard infrastructure monitoring unrelated to AI agents,
or when the agent is not instrumented with OpenTelemetry (for Reliability, Cost, Safety, Security alerts).
NOTE: Reliability, Cost, Safety, and Security alerts use generic OTel metrics
and work across runtimes (such as Cloud Run, Vertex AI). Quality alerts rely
on Vertex AI Online Monitors and are strictly bound to Vertex AI deployments.
allowed-tools: terraform gcloud python
---
# Agent Platform Alert Configuration
## Critical Steps
### 1. Safety & Confirmation Tiers (CRITICAL)
Before executing any commands or writing configurations on behalf of the user,
you MUST adhere to the following safety tiers based on the action requested:
1. **Tier R: Read-only (`check_telemetry.py` / `gather_agent_info.py`)**
* **Rule**: No confirmation needed. You may execute these scripts
immediately to inspect telemetry status or gather agent configuration
details.
2. **Tier B: Billing & Resource Creation (`create_online_monitor.py` /
provisioning)**
* **Rule**: **Explicit User Confirmation Required**. These actions incur
additional billing charges and create cloud resources. The agent MUST
ALWAYS warn the user explicitly about the potential extra billing costs
of BOTH the Online Monitor (specifically mentioning **LLM evaluations**)
and Telemetry (specifically mentioning **Cloud Trace/Cloud Logging
export**). You MUST STOP and ask for explicit approval before proceeding
with provisioning or providing setup commands.
### 2. Prerequisites & Dependencies
#### Agent Telemetry
* **Disclaimer**: For Reliability, Cost, Safety, and Security alerts to
function, the underlying agent MUST be instrumented to emit OpenTelemetry
(OTel) metrics. If the agent does not emit these metrics, the alerting
policies will have no data stream to evaluate.
#### Python Environment
Before executing any python script in this skill you MUST install the required
dependencies in your environment. Run this command first:
```bash
pip install -r scripts/requirements.txt
```
### 3. Input Assumptions
* **Explicit Project Adherence**: You must ONLY configure alerts, query
telemetry, or interact with the Google Cloud Project(s) explicitly provided
by the user in the prompt. Do NOT assume or use other projects from your
environment or history unless the user explicitly directs you to do so.
* **Sequential File Transformations**: If the user explicitly asks to copy a
file and then modify it, you MUST perform these actions sequentially (copy
first, then modify) rather than writing the final content directly.
### 4. Execution Steps
1. **Mandatory Prerequisite Execution Protocol (SEQUENTIAL)**: Before
generating or writing ANY configuration, you MUST execute these steps in
order:
1. **Step 1: Streamlined Discovery (Mandatory)**: Run
`gather_agent_info.py` to automatically identify agent runtime, verify
telemetry, metric scopes, linked datasets, and more. This script covers
most of the manual verifications listed in subsequent steps.
* Command: `python3 scripts/gather_agent_info.py --project-id
{project_id} --agent-name {agent_name}`
* **Note**: If this script **fails**, returns **partial data**, or
doesn't produce everything you need, you MUST satisfy requirements
by running the manual fallback steps listed in Step 2 and then
perform Step 3 below. If Step 1 succeeds and provides all info,
**SKIP** to Step 3 (Pre-existing Policies Verification).
2. **Step 2: Metric Scope Verification (Fallback)**: Run this ONLY if Step
1 failed to determine the metric scope.
* **Action A (CLI)**: Run `gcloud beta monitoring metrics-scopes list
projects/{project_id}`. If a scoping project is returned, you MUST
deploy policies there.
* **Action B (Code Scan)**: Search Terraform configurations for
`google_monitoring_monitored_project` resources to extract the
scoping project.
* **Action C (Fallback)**: If ambiguous, ASK the user: "Are you using
a multi-project Cloud Monitoring Metric Scope? If so, what is the
scoping project ID?"
3. **Step 3: Pre-existing Policies Verification**: Avoid duplicates.
* **Action**: Scan the target directory to see if aggregated policies
already exist targeting the same metrics (grouped by
`reasoning_engine_id` or `gen_ai_agent_name`). Use
`scan_duplicates.py` to verify.
2. **Alert Policy Type Resource Files**: You MUST list and read files under
`references/` with names ending in `_alert_policies.md` to learn how to
configure alert policies based on type. By default you MUST configure all of
the following alert types UNLESS the user requests to generate explicit
alert policies and/or types. Follow their tables of content to help you find
the reference sections you need to read:
Alert Type | Reference File
:-------------- | :-------------
**Reliability** | [reliability_alert_policies.md](references/reliability_alert_policies.md)
**Quality** | [quality_alert_policies.md](references/quality_alert_policies.md)
**Cost** | [cost_alert_policies.md](references/cost_alert_policies.md)
**Safety** | [safety_alert_policies.md](references/safety_alert_policies.md)
**Security** | [security_alert_policies.md](references/security_alert_policies.md)
### 5. Outputs & Formats
* **Always configure the supported alerting policies** for the target agent:
* **For Reliability Monitoring**: You MUST configure exactly five alerting
policies:
1. **Latency** (anomaly monitoring)
2. **Error Rate - Fast Burn SLO** (1-Hour Window)
3. **Error Rate - Slow Burn SLO** (3-Day Window)
4. **Model Call Error Rate** (SQL-based Observability Analytics
Alerting)
5. **Tool Call Error Rate** (SQL-based Observability Analytics
Alerting)
* **For Quality Monitoring**: You MUST configure exactly three alerting
policies (Requires Vertex AI Online Monitors):
1. **Final Response Quality**
2. **Tool Use Quality**
3. **Hallucination**
* **For Cost Monitoring**: You MUST configure exactly one cost alerting
policy:
1. **Rapid Token Burn Rate** (anomaly monitoring)
* **For Safety Monitoring**: You MUST configure exactly one safety
alerting policy:
1. **High Model Armor Safety Policy Trigger Rate** (SQL-based
Observability Analytics Alerting)
* **For Security Monitoring**: You MUST configure exactly one security
alerting policy:
1. **High IAM Permission Denied Trigger Rate** (SQL-based Observability
Analytics Alerting)
* **Terraform Only**: Write the generated observability configuration ONLY as
Terraform (`.tf`) files (such as `alerts.tf`, `variables.tf`).
- You **ONLY** need to install Terraform if you're asked to deploy the
alerts AND there is no valid Terraform install. SQL-based alerting using
`condition_sql` requires the provider version **>= 6.0.0** (or late 5.x
versions supporting the feature).
- If you are **NOT** asked to deploy the alerts you do not need to install
terraform.
* **Dynamic Multi-Resource Alerting (No Single-Resource Pinning)**: You MUST
NOT hardcode specific agent IDs or resource name filters (for example,
`{gen_ai_agent_name="{agent_name}"}` or
`metric.labels.agent_resource_name="{agent_name}"`) in alerting conditions
unless explicitly requested (for example, "ONLY for this agent"). Merely mentioning
a specific agent name or ID in the request does NOT constitute an explicit
request to pin/filter; you MUST still default to dynamic grouping to cover
all agents. To cover all active agents in the project dynamically:
*Good Example (PromQL Grouping):*
```promql
sum(rate(workload_googleapis_com:gen_ai_invoke_agent_duration_count{monitored_resource="generic_node"}[5m])) by (gen_ai_agent_name)
```
*Bad Example (PromQL Hardcoded Filter):*
```promql
sum(rate(workload_googleapis_com:gen_ai_invoke_agent_duration_count{monitored_resource="generic_node", gen_ai_agent_name="support-bot"}[5m]))
```
* **For Reliability Metrics using PromQL**: ALWAYS use grouping
aggregations. Group by `gen_ai_agent_name` (for example, `by
(gen_ai_agent_name)`). Avoid filtering to a single ID/Name unless
requested.
* **For Quality Metrics using Standard Threshold Filters**: Omit the
`agent_resource_name` filter entirely. Configure the condition filter to
only target the monitored resource type
(`aiplatform.googleapis.com/OnlineEvaluator`) and metric type
(`aiplatform.googleapis.com/online_evaluator/scores`) globally for the
project.
*Good Example (SQL Grouping):*
```sql
SELECT
JSON_VALUE(resource.attributes, '$."cloud.resource_id"') as agent_id,
...
FROM ...
GROUP BY agent_id
```
*Bad Example (SQL Hardcoded Filter):*
```sql
SELECT ...
FROM ...
WHERE JSON_VALUE(resource.attributes, '$."cloud.resource_id"') = 'support-bot'
```
* **For Downstream Calls using SQL**: Omit the `ENDS_WITH` filter
targeting a specific agent name. Instead, extract the agent identifier
(for example, `JSON_VALUE(resource.attributes, '$."cloud.resource_id"')`) and
add it to the `GROUP BY` clause alongside the model or tool name.
* **Directory Inference**: Prefer the path explicitly provided by the user (if
any). Otherwise, deploy configuration files to target Terraform or SRE
folders (such as `monitoring/`, `ops/`, `sre/`). Use tools to locate where
alert policies or state pointers exist in the project, rather than blindly
writing to the root.
* **Notification Channels**: By default, never configure any notification
channels without user input. If the user explicitly provides a notification
channel in their prompt, configure the alerts to use it. If no notification
channel is provided, you MUST explicitly ask the user in your final response
if they would like to configure notification channels. **This is a mandatory
question and you MUST NOT omit it from your response.** **IMPORTANT** Do NOT
make assumptions about notification channels. If you search the codebase for
a notification channel you must ALWAYS confirm with the user before using
it.
* **Plain English Response**: You MUST include a plain English explanation for
what the alerts do in your response. This must explain in plain English what
the alert measures, how the algorithm works, and what a trigger indicates.
### 6. Output Verification
* **Background Task Cleanup**: You MUST verify the status of all background
tasks that you spawn. Before completing your execution and returning your
final response, you MUST terminate or kill any active or hanging background
tasks (using the `manage_task` tool with action `kill`).
* **Validate Configuration**: Run the **Config Linting** tool to make sure all
the output files are written with the correct grammar and structure. See
details about the tool in the `Tooling Scripts` section below.
## Tooling Scripts
Use the following scripts to discover agents, gather configuration details,
resolve duplicates, and validate configs:
1. **Agent Information Gathering**: Streamlines discovery, environment auditing
(Metric Scopes, BQ Datasets, Notification Channels), table derivations (Log
& Trace), and Online Evaluator verifications.
* Command: `python3 scripts/gather_agent_info.py --project-id {project_id}
--agent-name {agent_name}`
2. **Duplicate Verification & Merge**: Verifies pre-existing alerts in the
target folder to ensure changes are merged in-place rather than appended:
* Command: `python3 scripts/scan_duplicates.py {target_tf_dir}
--engine-var '${var.gen_ai_agent_name}'`
3. **Config Linting**: Validates PromQL grammar, matching engine labels, and
HCL structure:
* Command: `python3 scripts/lint_syntax.py {path_to_tf_file}`
* **Self-Correction Loop**: If validation fails (exits non-zero or outputs
errors), you MUST read the command output, locate the line/file
containing the lint error, analyze the PromQL syntax or Terraform HCL
issue, apply adjustments in-place, and re-run the `lint_syntax.py`
validation. Repeat this loop until the validation script passes
successfully.
## Gotchas & Behavioral Corrections
* **Raw Error Boundaries**: Explain that raw error counts or absolute failed
request count boundaries do not scale under changing traffic throughput.
Recommend ratio-based error rate alerts instead.
* **Safe Threshold Modulation E2E Validation**: When verifying a dynamic
metric threshold policy end-to-end, do NOT attempt to force real platform
errors. Instead, deploy the alert policy with standard safe bounds (Z-score
multiplier > 15), then temporarily update standard deviation Z-score limits
to a negative value (for example, > -3) to trigger/verify the "Firing" state before
reverting. Always get confirmation before taking this action proactively.
* **Expected Script Failures**:
* `scan_duplicates.py` exiting with code 1: Parse the JSON
output for duplicate resource targets. Perform in-place upgrade edits,
then re-check until it passes with 0.
* **Avoid Redundant Discovery Calls**: If `gather_agent_info.py`
successfully returns the Trace or Log table names (or writes them to
variables file), do NOT redundantly call
`list_trace_scope_table_names.py` or `list_log_scope_table_names.py`.
These scripts are run internally by `gather_agent_info.py` and are
provided as external Fallbacks only.
* **Script Execution Failures & Self-Correction**: If the execution of
utility scripts (such as `gather_agent_info.py`, `check_telemetry.py`,
`create_online_monitor.py`, `analyze_traffic.py`,
`list_log_scope_table_names.py`, or `list_trace_scope_table_names.py`)
fails unexpectedly, you MUST read and inspect the stdout/stderr logs or
error output. Analyze the error message and attempt to dynamically
correct parameters and retry execution before escalating or
falling back to manual plans. Consult the relevant domain-specific
reference file for detailed troubleshooting steps for specific scripts.
* **Distribution Metric Aligner Constraint**: Standard `ALIGN_MEAN` cannot be
applied to `DELTA` distribution metrics like `online_evaluator/scores`. You
MUST use percentile-based aligners (like `ALIGN_PERCENTILE_50`) to reduce
the score distribution into a comparable numeric stream.
* **HCL Heredoc Interpolation**: When referencing Terraform variables inside
PromQL or SQL queries (which are defined as strings), you MUST use the
${var.variable_name} syntax. Bare references like var.variable_name will
fail at deployment time.
* **Avoid Recursive Directory Operations**: You MUST NOT run recursive listing
or search commands (such as `ls -R`, `find .`, or raw recursive `grep`) from
the repository root if it contains a very large number of files, as this
will freeze your session. Always target specific subdirectories.
## Supporting Links
* [Continuous evaluation with online monitors](https://docs.cloud.google.com/gemini-enterprise-agent-platform/optimize/evaluation/evaluate-online)
* [Agent Platform Quality Metrics](https://docs.cloud.google.com/gemini-enterprise-agent-platform/models/rubric-metric-details)
* [Google Cloud Alerting Policies Guide](https://docs.cloud.google.com/monitoring/alerts)
* [Google Cloud Monitoring PromQL Documentation](https://docs.cloud.google.com/monitoring/promql)
Plan Terraform and telemetry-based alerts for agent reliability and supported quality signals.
Complete original guidance with source attribution and declared limitations.
Clarify the actual task, inspect available evidence and plan the relevant source workflow within authorized scope.
Agent environment, telemetry availability, alert thresholds and notification ownership.
Thresholds are starting assumptions. Do not assert that alerts are installed or quality telemetry exists without actual evidence. Referenced scripts, templates, packages and remote documentation are not bundled or installed. Brief obvious-danger screening only; no functional test or comprehensive security certification.
Use Google Agent Alert Configuration for [TASK]. Clarify Agent environment, telemetry availability, alert thresholds and notification ownership. Identify missing dependencies and assumptions. Loading this guidance grants no permission to change resources, transfer data or incur charges.
Automatic cloud execution, bypassing resource-owner permissions, or treating untested examples as deployed and verified results.
German task routing and precise scope. Original attribution: Google (google/skills repository). Thresholds are starting assumptions. Do not assert that alerts are installed or quality telemetry exists without actual evidence. Referenced scripts, templates, packages and remote documentation are not bundled or installed. Brief obvious-danger screening only; no functional test or comprehensive security certification.
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Copy the text below, then paste it into your chat.