1. Introdução
Neste codelab, você vai aprender sobre o Google Antigravity (chamado de Antigravity no restante do documento), uma plataforma de desenvolvimento agêntico que evolui o IDE para a era focada em agentes.
Ao contrário dos assistentes de programação padrão que apenas preenchem linhas automaticamente, o Antigravity oferece uma "Central de comando" para gerenciar agentes autônomos que podem planejar, programar e até navegar na Web para ajudar você a criar.
O Antigravity foi projetado como uma plataforma focada em agentes. Ela pressupõe que a IA não é apenas uma ferramenta para escrever código, mas um agente autônomo capaz de planejar, executar, validar e iterar tarefas de engenharia complexas com intervenção humana mínima.
O que você vai aprender
- Instalar e configurar o Antigravity.
- Conheça os principais conceitos do Antigravity, como Agent Manager, Editor, Browser e muito mais.
- Como criar uma habilidade de operações do KCC de nível de produção do zero para gerenciar recursos do Google Cloud com segurança e compliance.
O que é necessário
No momento, o Antigravity está disponível como uma prévia para contas pessoais do Gmail. Ele vem com uma cota sem custo financeiro para usar modelos premium.
O Antigravity precisa ser instalado localmente no seu sistema. O produto está disponível para Mac, Windows e distribuições específicas do Linux. Além da sua máquina, você vai precisar do seguinte:
- Uma conta do Gmail (conta pessoal do Gmail).
- Uma conta e um projeto do Google Cloud
- Um navegador da Web, como o Chrome, que seja compatível com o console do Google Cloud e o Cloud Shell
2. Configuração e requisitos
Configuração do projeto
Criar um projeto do Google Cloud
- No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto na nuvem do Google Cloud.
- Verifique se o faturamento está ativado para seu projeto do Cloud. Saiba como verificar se o faturamento está ativado em um projeto.
Este codelab foi criado para usuários e desenvolvedores de todos os níveis, inclusive iniciantes.
3. Instalação
Se você ainda não tiver o Antigravity instalado, vamos começar instalando o app. No momento, o produto está disponível para prévia, e você pode usar sua conta pessoal do Gmail para começar a usar.
Acesse a página de downloads e clique na versão do sistema operacional adequada ao seu caso. Inicie o instalador de aplicativos e instale-o na sua máquina. Depois de concluir a instalação, inicie o aplicativo Antigravity.
Principais etapas durante a configuração:
- Escolha o fluxo de configuração:recomendamos começar do zero para este codelab.
- Desenvolvimento orientado por revisão (recomendado): escolha essa opção. Isso permite que o agente tome uma decisão e volte ao usuário para aprovação, o que é fundamental para operações de infraestrutura.
Em seguida, configure o Editor e faça login no Google. Por fim, aceite os Termos de Uso.
4. Configuração da infraestrutura: GKE e Config Connector
Antes de criar a skill, você precisa de um ambiente do Google Cloud com o Config Connector (KCC) instalado manualmente e configurado no modo com namespace. Isso permite gerenciar recursos do GCP como objetos do Kubernetes.
Etapa 0: preparar o ambiente
1. Pré-requisitos do cluster
Crie um cluster do GKE com os recursos necessários ativados:
# Set your variables
export PROJECT_ID=$(gcloud config get-value project)
export CLUSTER_NAME="kcc-ops-cluster"
export REGION="us-central1"
# Create the cluster
gcloud container clusters create ${CLUSTER_NAME} \
--region ${REGION} \
--release-channel "regular" \
--workload-pool=${PROJECT_ID}.svc.id.goog \
--logging=SYSTEM \
--monitoring=SYSTEM
# Get cluster credentials
gcloud container clusters get-credentials ${CLUSTER_NAME} --region ${REGION}
2. Instale o operador do Config Connector
O operador mantém sua instalação atualizada.
# Download the latest Config Connector operator
gcloud storage cp gs://configconnector-operator/latest/release-bundle.tar.gz release-bundle.tar.gz
# Extract the bundle
tar zxvf release-bundle.tar.gz
# Install the operator (Standard Cluster)
kubectl apply -f operator-system/configconnector-operator.yaml
3. Configurar o modo com namespace
Crie um recurso ConfigConnector para especificar o modo de operação.
# configconnector.yaml
apiVersion: core.cnrm.cloud.google.com/v1beta1
kind: ConfigConnector
metadata:
name: configconnector.core.cnrm.cloud.google.com
spec:
mode: namespaced
stateIntoSpec: Absent
kubectl apply -f configconnector.yaml
4. Criar uma identidade e um namespace
Neste laboratório, vamos usar o namespace default e uma conta de serviço do Google (GSA) dedicada.
# Set your variables
export PROJECT_ID=$(gcloud config get-value project)
export NAMESPACE="default"
# Create the Google Service Account
gcloud iam service-accounts create kcc-identity --project ${PROJECT_ID}
# Grant permissions on the project
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:kcc-identity@${PROJECT_ID}.iam.gserviceaccount.com" \
--role="roles/owner"
# Grant Metric Writer permissions
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:kcc-identity@${PROJECT_ID}.iam.gserviceaccount.com" \
--role="roles/monitoring.metricWriter"
# Bind GSA to KSA via Workload Identity
gcloud iam service-accounts add-iam-policy-binding \
kcc-identity@${PROJECT_ID}.iam.gserviceaccount.com \
--member="serviceAccount:${PROJECT_ID}.svc.id.goog[cnrm-system/cnrm-controller-manager-${NAMESPACE}]" \
--role="roles/iam.workloadIdentityUser"
5. Configurar o namespace
Crie um ConfigConnectorContext para observar o namespace.
# configconnectorcontext.yaml
apiVersion: core.cnrm.cloud.google.com/v1beta1
kind: ConfigConnectorContext
metadata:
name: configconnectorcontext.core.cnrm.cloud.google.com
namespace: default
spec:
googleServiceAccount: "kcc-identity@${PROJECT_ID}.iam.gserviceaccount.com"
stateIntoSpec: Absent
kubectl apply -f configconnectorcontext.yaml
6. Verificar instalação
Aguarde até que o controlador esteja pronto para o namespace default.
kubectl wait -n cnrm-system \
--for=condition=Ready pod \
-l cnrm.cloud.google.com/component=cnrm-controller-manager \
-l cnrm.cloud.google.com/scoped-namespace=default
5. Gerente de agentes: controle de missão
O Antigravity faz um fork da base de código aberto do Visual Studio Code (VS Code), mas altera radicalmente a experiência do usuário para priorizar o gerenciamento de agentes em vez da edição de texto. A interface é dividida em duas janelas principais distintas: Editor e Agent Manager.
Gerente de agentes
Ao iniciar o Antigravity, o usuário geralmente é recebido pelo Gerenciador de agentes. Essa interface funciona como um painel da Central de controle. Ele foi projetado para orquestração de alto nível, permitindo que os desenvolvedores gerem, monitorem e interajam com vários agentes que operam de forma assíncrona em diferentes espaços de trabalho ou tarefas.
Nessa visão, o desenvolvedor atua como um arquiteto. Eles definem objetivos de alto nível. Cada uma dessas solicitações gera uma instância de agente dedicada. A interface mostra uma visualização desses fluxos de trabalho paralelos, exibindo o status de cada agente, os artefatos que eles produziram (planos, resultados, diferenças) e as solicitações pendentes de aprovação humana.
6. Navegador e artefatos antigravidade
O Antigravity cria artefatos ao planejar e realizar o trabalho. São arquivos Markdown avançados, diagramas de arquitetura, imagens, gravações de navegador e diferenças de código.
Os artefatos resolvem a "lacuna de confiança"
Quando um agente afirma: "Corrigi o bug", o desenvolvedor precisa ler o código para verificar. No Antigravity, o agente produz um artefato para provar isso.
Artefatos
Estes são os principais artefatos produzidos pela Antigravity:
Task Lists: um plano estruturado gerado antes de escrever o código.Implementation Plan: mudanças arquitetadas com detalhes técnicos.Walkthrough: um resumo das mudanças e como testá-las.Browser Recordings: gravações em vídeo de sessões do navegador para verificação da interface.
Navegador Antigravity
Quando o agente precisa interagir com a Web, ele invoca um subagente de navegador. Esse subagente pode clicar, rolar, digitar e ler registros do console. Ele usa um modelo especializado para operar nas páginas abertas no navegador gerenciado pelo Antigravity.
7. Experiência do editor
O editor mantém a familiaridade do VS Code. Ele inclui o explorador de arquivos padrão, o destaque de sintaxe e o ecossistema de extensões.
Principais recursos do Editor:
- Preenchimento automático: sugestões inteligentes aceitas ao pressionar Tab.
- Guia para importar: sugere adicionar dependências ausentes.
- Comandos (
Cmd + I): acione conclusões inline usando linguagem natural. - Painel lateral do agente (
Cmd + L): ative ou desative o painel do agente para fazer perguntas ou consultar arquivos usando@.
8. Enviar feedback
O principal recurso do Antigravity é a capacidade de coletar seu feedback sem esforço. Esses elementos são uma forma de dar feedback ao agente nos comentários no estilo do Google Docs.
Sempre que você adicionar um comentário a um plano ou tarefa, não se esqueça de enviar. Isso direciona o agente para o que você quer.
9. Como criar a habilidade de operações do KCC
Agora que você entende a plataforma, vamos criar a KCC Ops Skill.
O Kubernetes Config Connector (KCC) permite gerenciar recursos do GCP como objetos do K8s. No entanto, ele exige proteções para evitar desvios de configuração, violações de compliance e recriação acidental de recursos.
Etapa 1: estruturar a habilidade
Na raiz do espaço de trabalho, crie a estrutura de diretórios para sua skill:
mkdir -p .agents/skills/kcc-ops/scripts
mkdir -p .agents/skills/kcc-ops/resources/policies/templates
mkdir -p .agents/skills/kcc-ops/resources/policies/constraints
Etapa 2: criar o SKILL.md (o cérebro)
O SKILL.md define os metadados e a "regra de ouro" principal do agente. Crie .agents/skills/kcc-ops/SKILL.md:
---
name: kcc-ops
description: Assists with Config Connector (KCC) configuration, resource generation, and troubleshooting on Google Cloud.
---
# Config Connector (KCC) Operations Skill
Use this skill to manage Google Cloud resources using Kubernetes-style configuration (Config Connector).
## 🛑 GOLDEN RULE: Separate Generation from Application
**NEVER generate and apply a manifest in a single autonomous step.**
1. **Craft:** Write the generated manifest to a local file.
2. **Analyze:** Present the manifest to the user. Perform Impact Analysis and Dry Runs. Explain the consequences of the change (e.g., "If this topic is deleted, the attached subscription becomes orphaned").
3. **Wait:** Pause execution and explicitly wait for user permission to proceed.
4. **Apply:** Only run `kubectl apply` *after* the user has reviewed the manifest and the impact analysis, and then unequivocally confirmed you should proceed.
## Core Responsibilities
0. **Context Verification**: Verify the execution context (cluster, namespace, GCP project, user account) with the user before performing any operations.
1. **Installation & Health**: Verify KCC is properly installed and healthy on the target cluster.
2. **Resource Inventory**: Query and summarize existing KCC resources within a namespace.
3. **Brownfield Bulk Export (Adoption)**: Export existing GCP project resources into valid KCC YAML manifests.
4. **Manifest Generation**: Generate valid YAML manifests for GCP resources using KCC CRDs.
5. **Impact Analysis**: Identify ancillary services and resources (e.g., Cloud Run, Apps) that depend on a resource being modified.
6. **Change Differentiation**: Generate diff summaries for resource edits to support change control.
7. **Policy Compliance**: Vet KCC manifests against OPA/Gatekeeper policies.
8. **Troubleshooting**: Analyze resource status, and consult the troubleshooting guide to resolve reconciliation issues.
## Guidelines for Operations
### 0. Context Verification
Before performing **any operations or executing commands** (including health checks), you **MUST** verify the current execution context and obtain explicit user confirmation.
1. **Read Context:** Use commands like `kubectl config current-context`, `kubectl config view --minify -o jsonpath='{.contexts[0].context.namespace}'`, `gcloud config get-value project`, and `gcloud config get-value account` to determine the active environment.
2. **Present & Ask:** Show this information to the user clearly (e.g., "I see my context is X, namespace is Y, project is Z, and account is A. Is this correct?").
3. **Wait:** Do not proceed with any other steps or scripts until the user has confirmed or provided corrections.
### 1. Installation & Health Check
Before performing operations, ensure the environment is ready:
- **Automation**: You MUST use `./scripts/check-health.sh` to verify namespaces, controllers, and CRDs. Do not use manual kubectl commands for health checks, as the script enforces standard formatting and context verification.
### 2. Resource Inventory & Discovery
To understand the current state of infrastructure:
- **Automation**: You MUST use `./scripts/inventory.sh` to get a summary table of all KCC resources. Do not use manual kubectl queries, as the script is optimized to securely discover all CRDs with context validation.
### 3. Manifest Structure
- All KCC resources belong to the `cnrm.cloud.google.com` API group.
- Use the `cnrm.cloud.google.com/project-id` annotation for cross-project resource management if not using Namespaced Mode.
- Always include `apiVersion`, `kind`, `metadata`, and `spec`.
### 4. Official Resource Reference (Agent Action)
When generating or troubleshooting manifests, you **must not guess** the API schema. Always consult the [Official Config Connector Reference](https://cloud.google.com/config-connector/docs/reference/overview) for the exact API version, kind, and required fields for the specific resource and cross reference with the official [github repository](https://github.com/GoogleCloudPlatform/k8s-config-connector/tree/master/config/crds/resources).
### 5. Troubleshooting Checklist
When a resource is not reconciling (check `kubectl get <kind> <name> -o yaml`):
- **Ready Condition**: Look for `status.conditions` where `type: Ready` and `status: "False"`.
- **Reason/Message**: Check the `reason` and `message` fields in the status conditions.
- **Consult the Guide**: Immediately check `./resources/troubleshooting-guide.md` for definitions of the error reason (e.g. `DependencyInvalid`, `ManagementConflict`) and follow its resolution steps.
- **Common Issues**:
- Permissions: The KCC service account lacks IAM roles.
- Quotas: GCP project quota exceeded.
- Conflicts: Resource already exists or is managed by another tool.
- Immutable Fields: Attempting to change a field that requires resource recreation. Look for "Update failed" errors related to immutable fields.
- Reference Resolution: Check if the resource is waiting for a dependency (e.g., `referenced project not found`).
### 6. Impact Analysis (Ancillary Services)
Before modifying a resource (e.g., GCS Bucket, Pub/Sub Topic), verify whatElse depends on it:
- **Reference Search (Cluster-wide)**: Search for other KCC resources that reference the item.
```bash
# Example: Find resources referencing a bucket named 'my-data-bucket'
kubectl get-all -n <namespace> -o yaml | grep -C 5 "my-data-bucket"
```
- **IAM-based Analysis**: Check for IAM Service Accounts that have roles on the specific resource. A Cloud Run job or GKE Workload Identity might be using those permissions.
- **Common Ancillary Dependencies**:
- **Storage Buckets**: Look for Cloud Run/GKE mounts (CSI), Cloud Functions triggers, or Dataflow jobs.
- **Networks**: Check for Firewall rules, Forwarding rules, and GKE cluster assignments.
- **IAM Policies**: Changing a policy might break access for external applications not managed by KCC.
- **Resource Graph**: Use `gcloud asset search-all-resources` to find resources that might have implicit links.
### 3. Policy Compliance & Best Practices
Evaluate KCC manifests against security and governance policies. The vetting tool supports three source modes:
- **Built-in Mode (Default)**: Uses the skill's high-fidelity `v1beta1` library (300+ Anthos constraints).
- `Usage: ./scripts/vet-policy.sh <manifest-path>`
- **Remote Mode**: Clones and vets against an external Git repository.
- `Usage: ./scripts/vet-policy.sh <manifest-path> <repo-url> [git-ref]`
- ⚠️ **Note**: External libraries like the legacy GCP Policy Library may be out-of-date and cause schema validation errors with modern `gator`.
- **Local Mode**: Vets against a local directory of policies.
- `Usage: ./scripts/vet-policy.sh <manifest-path> /path/to/local/policies`
**Interaction Model:**
1. Call `./scripts/vet-policy.sh` with the appropriate arguments.
2. Interpret the `=== KCC Best Practices ===` and `=== OPA/Gatekeeper ===` reports.
3. Supplement automated findings with manual review for specific security features not yet covered by OPA (e.g., `publicAccessPrevention: enforced`, `versioning: {enabled: true}`).
```bash
# Run the skill's helper script (repo URL and branch are optional)
./scripts/vet-policy.sh manifest.yaml [policy-repo-url] [policy-ref]
```
## Skill Assets
This skill includes additional resources to streamline operations:
- **`scripts/`**: Automation scripts (e.g., `vet-policy.sh`, `bulk-export.sh`).
- **`examples/`**: Reference KCC manifests (e.g., `restricted-bucket.yaml`).
- **`resources/`**: Common templates, documentation snippets, and troubleshooting guides (e.g., `troubleshooting-guide.md`).
### 4. Safety Rails for Applying Manifests
Before applying any KCC manifest update to an existing resource, you MUST:
- **Verify Immutable Fields**: Call `./scripts/verify-immutable.sh <manifest-path>` to detect updates to fields (like `location`, `name`, `project-id`) that trigger destructive resource recreation.
- **Explain Impact**: If destructive changes are detected, you MUST warn the user and explain the downtime/data loss implications before requesting approval.
### 5. Emergency Recovery & Troubleshooting
If a resource is stuck in a "Deletion" or "Error" state:
- **Check for Abondon Flag**: Check if the resource has the `cnrm.cloud.google.com/deletion-policy: abandon` annotation. If it does, you will need to remove the annotation and then force delete the resource.
- **Force Delete**: Call `./scripts/force-delete.sh <kind> <name> [namespace]` to bypass Kubernetes finalizers and remove the resource from the cluster.
- **Orphan Warning**: Inform the user that force-deleting a KCC object may leave an orphaned resource in Google Cloud that requires manual cleanup.
### 6. Change Differentiation
When editing an existing resource, always generate a diff to summarize the change for reviewers or Git history:
- **Local Diff**:
```bash
# Diff a local file against the cluster state
kubectl diff -f modified-resource.yaml
```
- **Commit Summary Template**:
```text
[KCC Change] Update <ResourceName> (<Kind>)
- Field 'spec.foo' changed from 'X' to 'Y'
- Impact: Ancillary service <ServiceName> will see updated <Config>
```
### 9. Best Practices
- **Namespaced Mode**: Prefer namespaced mode for better isolation.
- **Sensitive Data**: Use `spec.credential.secretRef` or similar for sensitive fields.
- **Resource Naming**: Use consistent naming conventions that match your Kubernetes/GCP standards.
- **Annotations**:
- `cnrm.cloud.google.com/deletion-policy: abandon`: Keep GCP resource on KCC deletion.
- `cnrm.cloud.google.com/state-into-spec: absent`: Prevents KCC from syncing GCP state back into the Kubernetes object (useful for avoiding reconciliation loops on fields like node counts).
## Common Resource Examples
### Compute Instance
```yaml
apiVersion: compute.cnrm.cloud.google.com/v1beta1
kind: ComputeInstance
metadata:
name: instance-sample
annotations:
cnrm.cloud.google.com/project-id: "my-project-id"
spec:
machineType: n1-standard-1
zone: us-central1-a
bootDisk:
initializeParams:
sourceImage: projects/debian-cloud/global/images/family/debian-11
networkInterface:
- networkRef:
name: default
```
### Storage Bucket
```yaml
apiVersion: storage.cnrm.cloud.google.com/v1beta1
kind: StorageBucket
metadata:
name: bucket-sample
spec:
location: US
```
### Pub/Sub Topic & Subscription
```yaml
apiVersion: pubsub.cnrm.cloud.google.com/v1beta1
kind: PubSubTopic
metadata:
name: order-events-topic
---
apiVersion: pubsub.cnrm.cloud.google.com/v1beta1
kind: PubSubSubscription
metadata:
name: order-processor-sub
spec:
topicRef:
name: order-events-topic
ackDeadlineSeconds: 30
```
Etapa 3: implementar a ferramenta de inventário
Crie .agents/skills/kcc-ops/scripts/inventory.sh para descobrir recursos do KCC:
#!/bin/bash
# List all resources in the cnrm.cloud.google.com group
KCC_KINDS=$(kubectl api-resources --no-headers | awk '/\.cnrm\.cloud\.google\.com/ {print $1}')
KCC_KINDS_CSV=$(echo "$KCC_KINDS" | paste -sd, -)
printf "%-40s %-30s %-10s %s\n" "KIND" "NAME" "READY" "STATUS/MESSAGE"
kubectl get "$KCC_KINDS_CSV" -A -o custom-columns="KIND:.kind,NAME:.metadata.name,READY:.status.conditions[?(@.type=='Ready')].status,MSG:.status.conditions[?(@.type=='Ready')].message" --ignore-not-found --no-headers
Etapa 4: adicionar a lógica de análise de políticas
Criar .agents/skills/kcc-ops/scripts/vet-policy.sh. Esse script vai usar gator para analisar manifestos em relação às políticas do OPA:
#!/bin/bash
MANIFEST=$1
SKILL_ROOT=$(dirname "$(dirname "$0")")
POLICY_SRC="$SKILL_ROOT/resources/policies"
echo "=== OPA/Gatekeeper Policy Vetting ==="
if command -v gator >/dev/null 2>&1; then
gator test -f "$MANIFEST" -f "$POLICY_SRC/templates" -f "$POLICY_SRC/constraints"
else
echo "Gator not found. Skipping OPA audit."
fi
Etapa 5: implementar a proteção de campo imutável
Essa é uma proteção de segurança essencial. Crie .agents/skills/kcc-ops/scripts/verify-immutable.sh:
#!/bin/bash
MANIFEST=$1
KIND=$(grep "^kind:" "$MANIFEST" | awk '{print $2}')
NAME=$(grep "name:" "$MANIFEST" | head -n 1 | awk '{print $2}')
# Check for changes in common immutable fields
IMMUTABLE_FIELDS=("location" "project-id" "name" "zone" "region")
TEMP_FILE=$(mktemp)
kubectl get "$KIND" "$NAME" -o yaml > "$TEMP_FILE" 2>/dev/null
for field in "${IMMUTABLE_FIELDS[@]}"; do
NEW=$(grep "$field:" "$MANIFEST" | awk '{print $2}')
OLD=$(grep "$field:" "$TEMP_FILE" | awk '{print $2}')
if [ -n "$NEW" ] && [ -n "$OLD" ] && [ "$NEW" != "$OLD" ]; then
echo "🚨 WARNING: Immutable field '$field' is changing! Potential resource recreation."
fi
done
rm "$TEMP_FILE"
Etapa 6: recuperação de emergência (exclusão forçada)
Crie .agents/skills/kcc-ops/scripts/force-delete.sh:
#!/bin/bash
KIND=$1; NAME=$2; NS=${3:-default}
echo "Removing finalizers for $KIND/$NAME in $NS..."
kubectl patch "$KIND" "$NAME" -n "$NS" -p '{"metadata":{"finalizers":null}}' --type=merge
kubectl delete "$KIND" "$NAME" -n "$NS" --wait=false
Etapa 7: finalizar recursos
Torne todos os scripts executáveis:
chmod +x .agents/skills/kcc-ops/scripts/*.sh
10. Testar sua nova habilidade
Agora, inicie uma nova conversa e teste sua habilidade:
- Descoberta:
@kcc-ops Show me all KCC resources in my cluster. - Conformidade: crie um arquivo
bucket.yamlcom um StorageBucket. Pergunte:@kcc-ops Vet my bucket.yaml manifest. - Segurança: tente atualizar o
locationde um bucket embucket.yaml. Pergunte:@kcc-ops Verify my bucket.yaml for immutable changes.
Observe como o agente escolhe de forma inteligente o script correto e segue a "Regra de ouro" do seu SKILL.md.
11. Como proteger o agente
Dar acesso a um agente de IA ao seu terminal é poderoso, mas exige controles.
Acesse Antigravity - Configurações - Terminal e confira a Lista de permissões e a Lista de bloqueios.
- Lista de permissões: adicione
ls,kubectl gete os scripts de habilidade aqui. - Lista de bloqueio: adicione
sudo,rm -rfou outros comandos destrutivos para garantir que o agente SEMPRE peça permissão.
12. Conclusão
Parabéns! Você passou da instalação do Antigravity à criação de uma habilidade de operações do KCC de alta fidelidade.
Você aprendeu:
- Como estender o agente com ferramentas bash personalizadas.
- Como codificar "Regras de ouro" operacionais em um
SKILL.md. - Como fornecer proteções para o gerenciamento de infraestruturas complexas.
A seguir
Expanda sua pasta resources/policies com mais restrições do OPA ou adicione um script check-health.sh para automatizar as verificações de prontidão do cluster.