@raishin/vanguard-frontier-agentic 1.1.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +369 -322
- package/agents/AGENTS.md +263 -21
- package/agents/argocd/README.md +46 -0
- package/agents/argocd/argo-rollouts-progressive-delivery-review-agent/AGENT.md +55 -0
- package/agents/argocd/argo-rollouts-progressive-delivery-review-agent/harnesses/claude-code.agent.md +35 -0
- package/agents/argocd/argo-rollouts-progressive-delivery-review-agent/harnesses/codex.toml +29 -0
- package/agents/argocd/argo-rollouts-progressive-delivery-review-agent/harnesses/copilot.agent.md +35 -0
- package/agents/argocd/argo-rollouts-progressive-delivery-review-agent/harnesses/cursor.agent.md +35 -0
- package/agents/argocd/argo-rollouts-progressive-delivery-review-agent/harnesses/gemini.agent.md +35 -0
- package/agents/argocd/argo-rollouts-progressive-delivery-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/argocd/argo-rollouts-progressive-delivery-review-agent/harnesses/kiro-ide.agent.md +35 -0
- package/agents/argocd/argo-rollouts-progressive-delivery-review-agent/metadata.json +31 -0
- package/agents/argocd/argocd-gitops-review-agent/AGENT.md +55 -0
- package/agents/argocd/argocd-gitops-review-agent/harnesses/claude-code.agent.md +38 -0
- package/agents/argocd/argocd-gitops-review-agent/harnesses/codex.toml +32 -0
- package/agents/argocd/argocd-gitops-review-agent/harnesses/copilot.agent.md +38 -0
- package/agents/argocd/argocd-gitops-review-agent/harnesses/cursor.agent.md +38 -0
- package/agents/argocd/argocd-gitops-review-agent/harnesses/gemini.agent.md +38 -0
- package/agents/argocd/argocd-gitops-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/argocd/argocd-gitops-review-agent/harnesses/kiro-ide.agent.md +38 -0
- package/agents/argocd/argocd-gitops-review-agent/metadata.json +30 -0
- package/agents/aws/aws-live-deployment-guarded-operator-agent/metadata.json +10 -1
- package/agents/aws/aws-live-ecs-rollout-guard-agent/metadata.json +10 -1
- package/agents/aws/aws-live-iac-change-guard-agent/metadata.json +10 -1
- package/agents/aws/aws-live-pipeline-approval-operator-agent/metadata.json +10 -1
- package/agents/aws/aws-live-serverless-release-guard-agent/metadata.json +10 -1
- package/agents/aws/aws-maestro-agent/AGENT.md +55 -0
- package/agents/aws/aws-maestro-agent/harnesses/claude-code.agent.md +38 -0
- package/agents/aws/aws-maestro-agent/harnesses/codex.toml +34 -0
- package/agents/aws/aws-maestro-agent/harnesses/copilot.agent.md +51 -0
- package/agents/aws/aws-maestro-agent/harnesses/cursor.agent.md +40 -0
- package/agents/aws/aws-maestro-agent/harnesses/gemini.agent.md +39 -0
- package/agents/aws/aws-maestro-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/aws/aws-maestro-agent/harnesses/kiro-ide.agent.md +38 -0
- package/agents/aws/aws-maestro-agent/metadata.json +37 -0
- package/agents/aws/aws-private-ca-issuer-review-agent/AGENT.md +53 -0
- package/agents/aws/aws-private-ca-issuer-review-agent/harnesses/claude-code.agent.md +36 -0
- package/agents/aws/aws-private-ca-issuer-review-agent/harnesses/codex.toml +27 -0
- package/agents/aws/aws-private-ca-issuer-review-agent/harnesses/copilot.agent.md +36 -0
- package/agents/aws/aws-private-ca-issuer-review-agent/harnesses/cursor.agent.md +36 -0
- package/agents/aws/aws-private-ca-issuer-review-agent/harnesses/gemini.agent.md +36 -0
- package/agents/aws/aws-private-ca-issuer-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/aws/aws-private-ca-issuer-review-agent/harnesses/kiro-ide.agent.md +36 -0
- package/agents/aws/aws-private-ca-issuer-review-agent/metadata.json +37 -0
- package/agents/azure/AGENTS.md +26 -0
- package/agents/azure/README.md +45 -0
- package/agents/azure/azure-keyvault-certificate-issuer-review-agent/AGENT.md +53 -0
- package/agents/azure/azure-keyvault-certificate-issuer-review-agent/harnesses/claude-code.agent.md +36 -0
- package/agents/azure/azure-keyvault-certificate-issuer-review-agent/harnesses/codex.toml +27 -0
- package/agents/azure/azure-keyvault-certificate-issuer-review-agent/harnesses/copilot.agent.md +36 -0
- package/agents/azure/azure-keyvault-certificate-issuer-review-agent/harnesses/cursor.agent.md +36 -0
- package/agents/azure/azure-keyvault-certificate-issuer-review-agent/harnesses/gemini.agent.md +36 -0
- package/agents/azure/azure-keyvault-certificate-issuer-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/azure/azure-keyvault-certificate-issuer-review-agent/harnesses/kiro-ide.agent.md +36 -0
- package/agents/azure/azure-keyvault-certificate-issuer-review-agent/metadata.json +36 -0
- package/agents/azure/azure-live-aks-rollout-guard-agent/AGENT.md +57 -0
- package/agents/azure/azure-live-aks-rollout-guard-agent/PERMISSIONS.md +56 -0
- package/agents/azure/azure-live-aks-rollout-guard-agent/PREFLIGHT.md +48 -0
- package/agents/azure/azure-live-aks-rollout-guard-agent/ROLLBACK.md +36 -0
- package/agents/azure/azure-live-aks-rollout-guard-agent/harnesses/claude-code.agent.md +40 -0
- package/agents/azure/azure-live-aks-rollout-guard-agent/harnesses/codex.toml +32 -0
- package/agents/azure/azure-live-aks-rollout-guard-agent/harnesses/copilot.agent.md +53 -0
- package/agents/azure/azure-live-aks-rollout-guard-agent/harnesses/cursor.agent.md +40 -0
- package/agents/azure/azure-live-aks-rollout-guard-agent/harnesses/gemini.agent.md +40 -0
- package/agents/azure/azure-live-aks-rollout-guard-agent/harnesses/kiro-cli.agent.json +1 -0
- package/agents/azure/azure-live-aks-rollout-guard-agent/harnesses/kiro-ide.agent.md +40 -0
- package/agents/azure/azure-live-aks-rollout-guard-agent/metadata.json +36 -0
- package/agents/azure/azure-live-app-service-slot-swap-guard-agent/AGENT.md +57 -0
- package/agents/azure/azure-live-app-service-slot-swap-guard-agent/PERMISSIONS.md +43 -0
- package/agents/azure/azure-live-app-service-slot-swap-guard-agent/PREFLIGHT.md +50 -0
- package/agents/azure/azure-live-app-service-slot-swap-guard-agent/ROLLBACK.md +46 -0
- package/agents/azure/azure-live-app-service-slot-swap-guard-agent/harnesses/claude-code.agent.md +40 -0
- package/agents/azure/azure-live-app-service-slot-swap-guard-agent/harnesses/codex.toml +32 -0
- package/agents/azure/azure-live-app-service-slot-swap-guard-agent/harnesses/copilot.agent.md +53 -0
- package/agents/azure/azure-live-app-service-slot-swap-guard-agent/harnesses/cursor.agent.md +40 -0
- package/agents/azure/azure-live-app-service-slot-swap-guard-agent/harnesses/gemini.agent.md +40 -0
- package/agents/azure/azure-live-app-service-slot-swap-guard-agent/harnesses/kiro-cli.agent.json +1 -0
- package/agents/azure/azure-live-app-service-slot-swap-guard-agent/harnesses/kiro-ide.agent.md +40 -0
- package/agents/azure/azure-live-app-service-slot-swap-guard-agent/metadata.json +35 -0
- package/agents/azure/azure-live-arm-deployment-stack-guard-agent/AGENT.md +57 -0
- package/agents/azure/azure-live-arm-deployment-stack-guard-agent/PERMISSIONS.md +88 -0
- package/agents/azure/azure-live-arm-deployment-stack-guard-agent/PREFLIGHT.md +48 -0
- package/agents/azure/azure-live-arm-deployment-stack-guard-agent/ROLLBACK.md +48 -0
- package/agents/azure/azure-live-arm-deployment-stack-guard-agent/harnesses/claude-code.agent.md +40 -0
- package/agents/azure/azure-live-arm-deployment-stack-guard-agent/harnesses/codex.toml +32 -0
- package/agents/azure/azure-live-arm-deployment-stack-guard-agent/harnesses/copilot.agent.md +53 -0
- package/agents/azure/azure-live-arm-deployment-stack-guard-agent/harnesses/cursor.agent.md +40 -0
- package/agents/azure/azure-live-arm-deployment-stack-guard-agent/harnesses/gemini.agent.md +40 -0
- package/agents/azure/azure-live-arm-deployment-stack-guard-agent/harnesses/kiro-cli.agent.json +1 -0
- package/agents/azure/azure-live-arm-deployment-stack-guard-agent/harnesses/kiro-ide.agent.md +40 -0
- package/agents/azure/azure-live-arm-deployment-stack-guard-agent/metadata.json +36 -0
- package/agents/azure/azure-live-cost-budget-action-guard-agent/AGENT.md +57 -0
- package/agents/azure/azure-live-cost-budget-action-guard-agent/PERMISSIONS.md +93 -0
- package/agents/azure/azure-live-cost-budget-action-guard-agent/PREFLIGHT.md +44 -0
- package/agents/azure/azure-live-cost-budget-action-guard-agent/ROLLBACK.md +49 -0
- package/agents/azure/azure-live-cost-budget-action-guard-agent/harnesses/claude-code.agent.md +40 -0
- package/agents/azure/azure-live-cost-budget-action-guard-agent/harnesses/codex.toml +32 -0
- package/agents/azure/azure-live-cost-budget-action-guard-agent/harnesses/copilot.agent.md +53 -0
- package/agents/azure/azure-live-cost-budget-action-guard-agent/harnesses/cursor.agent.md +40 -0
- package/agents/azure/azure-live-cost-budget-action-guard-agent/harnesses/gemini.agent.md +40 -0
- package/agents/azure/azure-live-cost-budget-action-guard-agent/harnesses/kiro-cli.agent.json +1 -0
- package/agents/azure/azure-live-cost-budget-action-guard-agent/harnesses/kiro-ide.agent.md +40 -0
- package/agents/azure/azure-live-cost-budget-action-guard-agent/metadata.json +36 -0
- package/agents/azure/azure-live-entra-role-assignment-guard-agent/AGENT.md +59 -0
- package/agents/azure/azure-live-entra-role-assignment-guard-agent/harnesses/claude-code.agent.md +42 -0
- package/agents/azure/azure-live-entra-role-assignment-guard-agent/harnesses/codex.toml +34 -0
- package/agents/azure/azure-live-entra-role-assignment-guard-agent/harnesses/copilot.agent.md +55 -0
- package/agents/azure/azure-live-entra-role-assignment-guard-agent/harnesses/cursor.agent.md +44 -0
- package/agents/azure/azure-live-entra-role-assignment-guard-agent/harnesses/gemini.agent.md +43 -0
- package/agents/azure/azure-live-entra-role-assignment-guard-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/azure/azure-live-entra-role-assignment-guard-agent/harnesses/kiro-ide.agent.md +42 -0
- package/agents/azure/azure-live-entra-role-assignment-guard-agent/metadata.json +37 -0
- package/agents/azure/azure-live-keyvault-rotation-purge-guard-agent/AGENT.md +57 -0
- package/agents/azure/azure-live-keyvault-rotation-purge-guard-agent/PERMISSIONS.md +68 -0
- package/agents/azure/azure-live-keyvault-rotation-purge-guard-agent/PREFLIGHT.md +46 -0
- package/agents/azure/azure-live-keyvault-rotation-purge-guard-agent/ROLLBACK.md +44 -0
- package/agents/azure/azure-live-keyvault-rotation-purge-guard-agent/harnesses/claude-code.agent.md +40 -0
- package/agents/azure/azure-live-keyvault-rotation-purge-guard-agent/harnesses/codex.toml +32 -0
- package/agents/azure/azure-live-keyvault-rotation-purge-guard-agent/harnesses/copilot.agent.md +53 -0
- package/agents/azure/azure-live-keyvault-rotation-purge-guard-agent/harnesses/cursor.agent.md +40 -0
- package/agents/azure/azure-live-keyvault-rotation-purge-guard-agent/harnesses/gemini.agent.md +40 -0
- package/agents/azure/azure-live-keyvault-rotation-purge-guard-agent/harnesses/kiro-cli.agent.json +1 -0
- package/agents/azure/azure-live-keyvault-rotation-purge-guard-agent/harnesses/kiro-ide.agent.md +40 -0
- package/agents/azure/azure-live-keyvault-rotation-purge-guard-agent/metadata.json +36 -0
- package/agents/azure/azure-live-pim-jit-activation-guard-agent/AGENT.md +57 -0
- package/agents/azure/azure-live-pim-jit-activation-guard-agent/PERMISSIONS.md +59 -0
- package/agents/azure/azure-live-pim-jit-activation-guard-agent/PREFLIGHT.md +41 -0
- package/agents/azure/azure-live-pim-jit-activation-guard-agent/ROLLBACK.md +48 -0
- package/agents/azure/azure-live-pim-jit-activation-guard-agent/harnesses/claude-code.agent.md +40 -0
- package/agents/azure/azure-live-pim-jit-activation-guard-agent/harnesses/codex.toml +32 -0
- package/agents/azure/azure-live-pim-jit-activation-guard-agent/harnesses/copilot.agent.md +53 -0
- package/agents/azure/azure-live-pim-jit-activation-guard-agent/harnesses/cursor.agent.md +40 -0
- package/agents/azure/azure-live-pim-jit-activation-guard-agent/harnesses/gemini.agent.md +40 -0
- package/agents/azure/azure-live-pim-jit-activation-guard-agent/harnesses/kiro-cli.agent.json +1 -0
- package/agents/azure/azure-live-pim-jit-activation-guard-agent/harnesses/kiro-ide.agent.md +40 -0
- package/agents/azure/azure-live-pim-jit-activation-guard-agent/metadata.json +36 -0
- package/agents/azure/azure-maestro-agent/AGENT.md +56 -0
- package/agents/azure/azure-maestro-agent/harnesses/claude-code.agent.md +39 -0
- package/agents/azure/azure-maestro-agent/harnesses/codex.toml +14 -0
- package/agents/azure/azure-maestro-agent/harnesses/copilot.agent.md +52 -0
- package/agents/azure/azure-maestro-agent/harnesses/cursor.agent.md +41 -0
- package/agents/azure/azure-maestro-agent/harnesses/gemini.agent.md +40 -0
- package/agents/azure/azure-maestro-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/azure/azure-maestro-agent/harnesses/kiro-ide.agent.md +39 -0
- package/agents/azure/azure-maestro-agent/metadata.json +38 -0
- package/agents/backstage/README.md +36 -0
- package/agents/backstage/backstage-scaffolder-template-review-agent/AGENT.md +54 -0
- package/agents/backstage/backstage-scaffolder-template-review-agent/harnesses/claude-code.agent.md +37 -0
- package/agents/backstage/backstage-scaffolder-template-review-agent/harnesses/codex.toml +31 -0
- package/agents/backstage/backstage-scaffolder-template-review-agent/harnesses/copilot.agent.md +37 -0
- package/agents/backstage/backstage-scaffolder-template-review-agent/harnesses/cursor.agent.md +37 -0
- package/agents/backstage/backstage-scaffolder-template-review-agent/harnesses/gemini.agent.md +37 -0
- package/agents/backstage/backstage-scaffolder-template-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/backstage/backstage-scaffolder-template-review-agent/harnesses/kiro-ide.agent.md +37 -0
- package/agents/backstage/backstage-scaffolder-template-review-agent/metadata.json +30 -0
- package/agents/cert-manager/README.md +46 -0
- package/agents/cert-manager/cert-manager-issuer-trust-review-agent/AGENT.md +55 -0
- package/agents/cert-manager/cert-manager-issuer-trust-review-agent/harnesses/claude-code.agent.md +35 -0
- package/agents/cert-manager/cert-manager-issuer-trust-review-agent/harnesses/codex.toml +29 -0
- package/agents/cert-manager/cert-manager-issuer-trust-review-agent/harnesses/copilot.agent.md +35 -0
- package/agents/cert-manager/cert-manager-issuer-trust-review-agent/harnesses/cursor.agent.md +35 -0
- package/agents/cert-manager/cert-manager-issuer-trust-review-agent/harnesses/gemini.agent.md +35 -0
- package/agents/cert-manager/cert-manager-issuer-trust-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/cert-manager/cert-manager-issuer-trust-review-agent/harnesses/kiro-ide.agent.md +35 -0
- package/agents/cert-manager/cert-manager-issuer-trust-review-agent/metadata.json +31 -0
- package/agents/cilium/README.md +46 -0
- package/agents/cilium/cilium-network-policy-review-agent/AGENT.md +55 -0
- package/agents/cilium/cilium-network-policy-review-agent/harnesses/claude-code.agent.md +38 -0
- package/agents/cilium/cilium-network-policy-review-agent/harnesses/codex.toml +32 -0
- package/agents/cilium/cilium-network-policy-review-agent/harnesses/copilot.agent.md +38 -0
- package/agents/cilium/cilium-network-policy-review-agent/harnesses/cursor.agent.md +38 -0
- package/agents/cilium/cilium-network-policy-review-agent/harnesses/gemini.agent.md +38 -0
- package/agents/cilium/cilium-network-policy-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/cilium/cilium-network-policy-review-agent/harnesses/kiro-ide.agent.md +38 -0
- package/agents/cilium/cilium-network-policy-review-agent/metadata.json +37 -0
- package/agents/falco/README.md +36 -0
- package/agents/falco/falco-runtime-threat-rules-review-agent/AGENT.md +49 -0
- package/agents/falco/falco-runtime-threat-rules-review-agent/harnesses/claude-code.agent.md +33 -0
- package/agents/falco/falco-runtime-threat-rules-review-agent/harnesses/codex.toml +31 -0
- package/agents/falco/falco-runtime-threat-rules-review-agent/harnesses/copilot.agent.md +33 -0
- package/agents/falco/falco-runtime-threat-rules-review-agent/harnesses/cursor.agent.md +33 -0
- package/agents/falco/falco-runtime-threat-rules-review-agent/harnesses/gemini.agent.md +33 -0
- package/agents/falco/falco-runtime-threat-rules-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/falco/falco-runtime-threat-rules-review-agent/harnesses/kiro-ide.agent.md +33 -0
- package/agents/falco/falco-runtime-threat-rules-review-agent/metadata.json +31 -0
- package/agents/finops/AGENTS.md +36 -0
- package/agents/finops/README.md +27 -0
- package/agents/finops/finops-cloud-price-advisor-agent/AGENT.md +58 -0
- package/agents/finops/finops-cloud-price-advisor-agent/PERMISSIONS.md +112 -0
- package/agents/finops/finops-cloud-price-advisor-agent/harnesses/claude-code.agent.md +40 -0
- package/agents/finops/finops-cloud-price-advisor-agent/harnesses/codex.toml +33 -0
- package/agents/finops/finops-cloud-price-advisor-agent/harnesses/copilot.agent.md +53 -0
- package/agents/finops/finops-cloud-price-advisor-agent/harnesses/cursor.agent.md +40 -0
- package/agents/finops/finops-cloud-price-advisor-agent/harnesses/gemini.agent.md +40 -0
- package/agents/finops/finops-cloud-price-advisor-agent/harnesses/kiro-cli.agent.json +1 -0
- package/agents/finops/finops-cloud-price-advisor-agent/harnesses/kiro-ide.agent.md +40 -0
- package/agents/finops/finops-cloud-price-advisor-agent/metadata.json +38 -0
- package/agents/fluxcd/README.md +39 -0
- package/agents/fluxcd/fluxcd-kustomization-helmrelease-review-agent/AGENT.md +55 -0
- package/agents/fluxcd/fluxcd-kustomization-helmrelease-review-agent/harnesses/claude-code.agent.md +38 -0
- package/agents/fluxcd/fluxcd-kustomization-helmrelease-review-agent/harnesses/codex.toml +32 -0
- package/agents/fluxcd/fluxcd-kustomization-helmrelease-review-agent/harnesses/copilot.agent.md +38 -0
- package/agents/fluxcd/fluxcd-kustomization-helmrelease-review-agent/harnesses/cursor.agent.md +38 -0
- package/agents/fluxcd/fluxcd-kustomization-helmrelease-review-agent/harnesses/gemini.agent.md +38 -0
- package/agents/fluxcd/fluxcd-kustomization-helmrelease-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/fluxcd/fluxcd-kustomization-helmrelease-review-agent/harnesses/kiro-ide.agent.md +38 -0
- package/agents/fluxcd/fluxcd-kustomization-helmrelease-review-agent/metadata.json +31 -0
- package/agents/istio/README.md +46 -0
- package/agents/istio/istio-ambient-mesh-review-agent/AGENT.md +55 -0
- package/agents/istio/istio-ambient-mesh-review-agent/harnesses/claude-code.agent.md +38 -0
- package/agents/istio/istio-ambient-mesh-review-agent/harnesses/codex.toml +32 -0
- package/agents/istio/istio-ambient-mesh-review-agent/harnesses/copilot.agent.md +38 -0
- package/agents/istio/istio-ambient-mesh-review-agent/harnesses/cursor.agent.md +38 -0
- package/agents/istio/istio-ambient-mesh-review-agent/harnesses/gemini.agent.md +38 -0
- package/agents/istio/istio-ambient-mesh-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/istio/istio-ambient-mesh-review-agent/harnesses/kiro-ide.agent.md +38 -0
- package/agents/istio/istio-ambient-mesh-review-agent/metadata.json +30 -0
- package/agents/kubernetes/README.md +143 -0
- package/agents/kubernetes/external-secrets-operator-review-agent/AGENT.md +49 -0
- package/agents/kubernetes/external-secrets-operator-review-agent/harnesses/claude-code.agent.md +33 -0
- package/agents/kubernetes/external-secrets-operator-review-agent/harnesses/codex.toml +31 -0
- package/agents/kubernetes/external-secrets-operator-review-agent/harnesses/copilot.agent.md +33 -0
- package/agents/kubernetes/external-secrets-operator-review-agent/harnesses/cursor.agent.md +33 -0
- package/agents/kubernetes/external-secrets-operator-review-agent/harnesses/gemini.agent.md +33 -0
- package/agents/kubernetes/external-secrets-operator-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/kubernetes/external-secrets-operator-review-agent/harnesses/kiro-ide.agent.md +33 -0
- package/agents/kubernetes/external-secrets-operator-review-agent/metadata.json +31 -0
- package/agents/kubernetes/kubecost-chargeback-allocation-review-agent/AGENT.md +56 -0
- package/agents/kubernetes/kubecost-chargeback-allocation-review-agent/harnesses/claude-code.agent.md +39 -0
- package/agents/kubernetes/kubecost-chargeback-allocation-review-agent/harnesses/codex.toml +34 -0
- package/agents/kubernetes/kubecost-chargeback-allocation-review-agent/harnesses/copilot.agent.md +39 -0
- package/agents/kubernetes/kubecost-chargeback-allocation-review-agent/harnesses/cursor.agent.md +39 -0
- package/agents/kubernetes/kubecost-chargeback-allocation-review-agent/harnesses/gemini.agent.md +39 -0
- package/agents/kubernetes/kubecost-chargeback-allocation-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/kubernetes/kubecost-chargeback-allocation-review-agent/harnesses/kiro-ide.agent.md +39 -0
- package/agents/kubernetes/kubecost-chargeback-allocation-review-agent/metadata.json +31 -0
- package/agents/kubernetes/kubernetes-live-admission-policy-guard-agent/AGENT.md +59 -0
- package/agents/kubernetes/kubernetes-live-admission-policy-guard-agent/harnesses/claude-code.agent.md +42 -0
- package/agents/kubernetes/kubernetes-live-admission-policy-guard-agent/harnesses/codex.toml +33 -0
- package/agents/kubernetes/kubernetes-live-admission-policy-guard-agent/harnesses/copilot.agent.md +42 -0
- package/agents/kubernetes/kubernetes-live-admission-policy-guard-agent/harnesses/cursor.agent.md +42 -0
- package/agents/kubernetes/kubernetes-live-admission-policy-guard-agent/harnesses/gemini.agent.md +42 -0
- package/agents/kubernetes/kubernetes-live-admission-policy-guard-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/kubernetes/kubernetes-live-admission-policy-guard-agent/harnesses/kiro-ide.agent.md +42 -0
- package/agents/kubernetes/kubernetes-live-admission-policy-guard-agent/metadata.json +36 -0
- package/agents/kubernetes/kubernetes-live-argocd-sync-guard-agent/AGENT.md +59 -0
- package/agents/kubernetes/kubernetes-live-argocd-sync-guard-agent/harnesses/claude-code.agent.md +42 -0
- package/agents/kubernetes/kubernetes-live-argocd-sync-guard-agent/harnesses/codex.toml +33 -0
- package/agents/kubernetes/kubernetes-live-argocd-sync-guard-agent/harnesses/copilot.agent.md +42 -0
- package/agents/kubernetes/kubernetes-live-argocd-sync-guard-agent/harnesses/cursor.agent.md +42 -0
- package/agents/kubernetes/kubernetes-live-argocd-sync-guard-agent/harnesses/gemini.agent.md +42 -0
- package/agents/kubernetes/kubernetes-live-argocd-sync-guard-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/kubernetes/kubernetes-live-argocd-sync-guard-agent/harnesses/kiro-ide.agent.md +42 -0
- package/agents/kubernetes/kubernetes-live-argocd-sync-guard-agent/metadata.json +36 -0
- package/agents/kubernetes/kubernetes-live-mesh-policy-guard-agent/AGENT.md +59 -0
- package/agents/kubernetes/kubernetes-live-mesh-policy-guard-agent/harnesses/claude-code.agent.md +42 -0
- package/agents/kubernetes/kubernetes-live-mesh-policy-guard-agent/harnesses/codex.toml +33 -0
- package/agents/kubernetes/kubernetes-live-mesh-policy-guard-agent/harnesses/copilot.agent.md +42 -0
- package/agents/kubernetes/kubernetes-live-mesh-policy-guard-agent/harnesses/cursor.agent.md +42 -0
- package/agents/kubernetes/kubernetes-live-mesh-policy-guard-agent/harnesses/gemini.agent.md +42 -0
- package/agents/kubernetes/kubernetes-live-mesh-policy-guard-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/kubernetes/kubernetes-live-mesh-policy-guard-agent/harnesses/kiro-ide.agent.md +42 -0
- package/agents/kubernetes/kubernetes-live-mesh-policy-guard-agent/metadata.json +36 -0
- package/agents/kubernetes/kubernetes-live-network-policy-guard-agent/AGENT.md +59 -0
- package/agents/kubernetes/kubernetes-live-network-policy-guard-agent/harnesses/claude-code.agent.md +42 -0
- package/agents/kubernetes/kubernetes-live-network-policy-guard-agent/harnesses/codex.toml +33 -0
- package/agents/kubernetes/kubernetes-live-network-policy-guard-agent/harnesses/copilot.agent.md +42 -0
- package/agents/kubernetes/kubernetes-live-network-policy-guard-agent/harnesses/cursor.agent.md +42 -0
- package/agents/kubernetes/kubernetes-live-network-policy-guard-agent/harnesses/gemini.agent.md +42 -0
- package/agents/kubernetes/kubernetes-live-network-policy-guard-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/kubernetes/kubernetes-live-network-policy-guard-agent/harnesses/kiro-ide.agent.md +42 -0
- package/agents/kubernetes/kubernetes-live-network-policy-guard-agent/metadata.json +36 -0
- package/agents/kubernetes/kubernetes-live-rbac-mutation-guard-agent/AGENT.md +59 -0
- package/agents/kubernetes/kubernetes-live-rbac-mutation-guard-agent/harnesses/claude-code.agent.md +42 -0
- package/agents/kubernetes/kubernetes-live-rbac-mutation-guard-agent/harnesses/codex.toml +34 -0
- package/agents/kubernetes/kubernetes-live-rbac-mutation-guard-agent/harnesses/copilot.agent.md +55 -0
- package/agents/kubernetes/kubernetes-live-rbac-mutation-guard-agent/harnesses/cursor.agent.md +44 -0
- package/agents/kubernetes/kubernetes-live-rbac-mutation-guard-agent/harnesses/gemini.agent.md +43 -0
- package/agents/kubernetes/kubernetes-live-rbac-mutation-guard-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/kubernetes/kubernetes-live-rbac-mutation-guard-agent/harnesses/kiro-ide.agent.md +42 -0
- package/agents/kubernetes/kubernetes-live-rbac-mutation-guard-agent/metadata.json +36 -0
- package/agents/kubernetes/kubernetes-live-velero-restore-guard-agent/AGENT.md +62 -0
- package/agents/kubernetes/kubernetes-live-velero-restore-guard-agent/harnesses/claude-code.agent.md +43 -0
- package/agents/kubernetes/kubernetes-live-velero-restore-guard-agent/harnesses/codex.toml +35 -0
- package/agents/kubernetes/kubernetes-live-velero-restore-guard-agent/harnesses/copilot.agent.md +43 -0
- package/agents/kubernetes/kubernetes-live-velero-restore-guard-agent/harnesses/cursor.agent.md +43 -0
- package/agents/kubernetes/kubernetes-live-velero-restore-guard-agent/harnesses/gemini.agent.md +43 -0
- package/agents/kubernetes/kubernetes-live-velero-restore-guard-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/kubernetes/kubernetes-live-velero-restore-guard-agent/harnesses/kiro-ide.agent.md +43 -0
- package/agents/kubernetes/kubernetes-live-velero-restore-guard-agent/metadata.json +37 -0
- package/agents/kubernetes/kubernetes-maestro-agent/AGENT.md +55 -0
- package/agents/kubernetes/kubernetes-maestro-agent/harnesses/claude-code.agent.md +38 -0
- package/agents/kubernetes/kubernetes-maestro-agent/harnesses/codex.toml +34 -0
- package/agents/kubernetes/kubernetes-maestro-agent/harnesses/copilot.agent.md +38 -0
- package/agents/kubernetes/kubernetes-maestro-agent/harnesses/cursor.agent.md +38 -0
- package/agents/kubernetes/kubernetes-maestro-agent/harnesses/gemini.agent.md +38 -0
- package/agents/kubernetes/kubernetes-maestro-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/kubernetes/kubernetes-maestro-agent/harnesses/kiro-ide.agent.md +38 -0
- package/agents/kubernetes/kubernetes-maestro-agent/metadata.json +40 -0
- package/agents/kubernetes/kubernetes-pod-spec-review-agent/AGENT.md +54 -0
- package/agents/kubernetes/kubernetes-pod-spec-review-agent/harnesses/claude-code.agent.md +37 -0
- package/agents/kubernetes/kubernetes-pod-spec-review-agent/harnesses/codex.toml +27 -0
- package/agents/kubernetes/kubernetes-pod-spec-review-agent/harnesses/copilot.agent.md +37 -0
- package/agents/kubernetes/kubernetes-pod-spec-review-agent/harnesses/cursor.agent.md +37 -0
- package/agents/kubernetes/kubernetes-pod-spec-review-agent/harnesses/gemini.agent.md +37 -0
- package/agents/kubernetes/kubernetes-pod-spec-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/kubernetes/kubernetes-pod-spec-review-agent/harnesses/kiro-ide.agent.md +37 -0
- package/agents/kubernetes/kubernetes-pod-spec-review-agent/metadata.json +38 -0
- package/agents/kubernetes/kubernetes-psa-review-agent/AGENT.md +55 -0
- package/agents/kubernetes/kubernetes-psa-review-agent/harnesses/claude-code.agent.md +36 -0
- package/agents/kubernetes/kubernetes-psa-review-agent/harnesses/codex.toml +29 -0
- package/agents/kubernetes/kubernetes-psa-review-agent/harnesses/copilot.agent.md +36 -0
- package/agents/kubernetes/kubernetes-psa-review-agent/harnesses/cursor.agent.md +36 -0
- package/agents/kubernetes/kubernetes-psa-review-agent/harnesses/gemini.agent.md +36 -0
- package/agents/kubernetes/kubernetes-psa-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/kubernetes/kubernetes-psa-review-agent/harnesses/kiro-ide.agent.md +36 -0
- package/agents/kubernetes/kubernetes-psa-review-agent/metadata.json +37 -0
- package/agents/kubernetes/kubernetes-rbac-review-agent/AGENT.md +55 -0
- package/agents/kubernetes/kubernetes-rbac-review-agent/harnesses/claude-code.agent.md +38 -0
- package/agents/kubernetes/kubernetes-rbac-review-agent/harnesses/codex.toml +32 -0
- package/agents/kubernetes/kubernetes-rbac-review-agent/harnesses/copilot.agent.md +51 -0
- package/agents/kubernetes/kubernetes-rbac-review-agent/harnesses/cursor.agent.md +40 -0
- package/agents/kubernetes/kubernetes-rbac-review-agent/harnesses/gemini.agent.md +39 -0
- package/agents/kubernetes/kubernetes-rbac-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/kubernetes/kubernetes-rbac-review-agent/harnesses/kiro-ide.agent.md +38 -0
- package/agents/kubernetes/kubernetes-rbac-review-agent/metadata.json +36 -0
- package/agents/kubernetes/kubernetes-workload-identity-review-agent/AGENT.md +55 -0
- package/agents/kubernetes/kubernetes-workload-identity-review-agent/harnesses/claude-code.agent.md +37 -0
- package/agents/kubernetes/kubernetes-workload-identity-review-agent/harnesses/codex.toml +29 -0
- package/agents/kubernetes/kubernetes-workload-identity-review-agent/harnesses/copilot.agent.md +37 -0
- package/agents/kubernetes/kubernetes-workload-identity-review-agent/harnesses/cursor.agent.md +37 -0
- package/agents/kubernetes/kubernetes-workload-identity-review-agent/harnesses/gemini.agent.md +37 -0
- package/agents/kubernetes/kubernetes-workload-identity-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/kubernetes/kubernetes-workload-identity-review-agent/harnesses/kiro-ide.agent.md +37 -0
- package/agents/kubernetes/kubernetes-workload-identity-review-agent/metadata.json +37 -0
- package/agents/kyverno/README.md +46 -0
- package/agents/kyverno/kyverno-policy-review-agent/AGENT.md +55 -0
- package/agents/kyverno/kyverno-policy-review-agent/harnesses/claude-code.agent.md +38 -0
- package/agents/kyverno/kyverno-policy-review-agent/harnesses/codex.toml +32 -0
- package/agents/kyverno/kyverno-policy-review-agent/harnesses/copilot.agent.md +38 -0
- package/agents/kyverno/kyverno-policy-review-agent/harnesses/cursor.agent.md +38 -0
- package/agents/kyverno/kyverno-policy-review-agent/harnesses/gemini.agent.md +38 -0
- package/agents/kyverno/kyverno-policy-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/kyverno/kyverno-policy-review-agent/harnesses/kiro-ide.agent.md +38 -0
- package/agents/kyverno/kyverno-policy-review-agent/metadata.json +30 -0
- package/agents/oci/AGENTS.md +28 -0
- package/agents/oci/README.md +45 -0
- package/agents/oci/oci-certificates-issuer-review-agent/AGENT.md +53 -0
- package/agents/oci/oci-certificates-issuer-review-agent/harnesses/claude-code.agent.md +36 -0
- package/agents/oci/oci-certificates-issuer-review-agent/harnesses/codex.toml +27 -0
- package/agents/oci/oci-certificates-issuer-review-agent/harnesses/copilot.agent.md +36 -0
- package/agents/oci/oci-certificates-issuer-review-agent/harnesses/cursor.agent.md +36 -0
- package/agents/oci/oci-certificates-issuer-review-agent/harnesses/gemini.agent.md +36 -0
- package/agents/oci/oci-certificates-issuer-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/oci/oci-certificates-issuer-review-agent/harnesses/kiro-ide.agent.md +36 -0
- package/agents/oci/oci-certificates-issuer-review-agent/metadata.json +36 -0
- package/agents/oci/oci-live-autonomous-db-lifecycle-guard-agent/AGENT.md +57 -0
- package/agents/oci/oci-live-autonomous-db-lifecycle-guard-agent/PERMISSIONS.md +56 -0
- package/agents/oci/oci-live-autonomous-db-lifecycle-guard-agent/PREFLIGHT.md +48 -0
- package/agents/oci/oci-live-autonomous-db-lifecycle-guard-agent/ROLLBACK.md +50 -0
- package/agents/oci/oci-live-autonomous-db-lifecycle-guard-agent/harnesses/claude-code.agent.md +40 -0
- package/agents/oci/oci-live-autonomous-db-lifecycle-guard-agent/harnesses/codex.toml +32 -0
- package/agents/oci/oci-live-autonomous-db-lifecycle-guard-agent/harnesses/copilot.agent.md +53 -0
- package/agents/oci/oci-live-autonomous-db-lifecycle-guard-agent/harnesses/cursor.agent.md +40 -0
- package/agents/oci/oci-live-autonomous-db-lifecycle-guard-agent/harnesses/gemini.agent.md +40 -0
- package/agents/oci/oci-live-autonomous-db-lifecycle-guard-agent/harnesses/kiro-cli.agent.json +1 -0
- package/agents/oci/oci-live-autonomous-db-lifecycle-guard-agent/harnesses/kiro-ide.agent.md +40 -0
- package/agents/oci/oci-live-autonomous-db-lifecycle-guard-agent/metadata.json +36 -0
- package/agents/oci/oci-live-cost-budget-runaway-guard-agent/AGENT.md +57 -0
- package/agents/oci/oci-live-cost-budget-runaway-guard-agent/PERMISSIONS.md +77 -0
- package/agents/oci/oci-live-cost-budget-runaway-guard-agent/PREFLIGHT.md +54 -0
- package/agents/oci/oci-live-cost-budget-runaway-guard-agent/ROLLBACK.md +53 -0
- package/agents/oci/oci-live-cost-budget-runaway-guard-agent/harnesses/claude-code.agent.md +40 -0
- package/agents/oci/oci-live-cost-budget-runaway-guard-agent/harnesses/codex.toml +32 -0
- package/agents/oci/oci-live-cost-budget-runaway-guard-agent/harnesses/copilot.agent.md +53 -0
- package/agents/oci/oci-live-cost-budget-runaway-guard-agent/harnesses/cursor.agent.md +40 -0
- package/agents/oci/oci-live-cost-budget-runaway-guard-agent/harnesses/gemini.agent.md +40 -0
- package/agents/oci/oci-live-cost-budget-runaway-guard-agent/harnesses/kiro-cli.agent.json +1 -0
- package/agents/oci/oci-live-cost-budget-runaway-guard-agent/harnesses/kiro-ide.agent.md +40 -0
- package/agents/oci/oci-live-cost-budget-runaway-guard-agent/metadata.json +36 -0
- package/agents/oci/oci-live-iam-policy-compartment-guard-agent/AGENT.md +57 -0
- package/agents/oci/oci-live-iam-policy-compartment-guard-agent/PERMISSIONS.md +87 -0
- package/agents/oci/oci-live-iam-policy-compartment-guard-agent/PREFLIGHT.md +49 -0
- package/agents/oci/oci-live-iam-policy-compartment-guard-agent/ROLLBACK.md +44 -0
- package/agents/oci/oci-live-iam-policy-compartment-guard-agent/harnesses/claude-code.agent.md +40 -0
- package/agents/oci/oci-live-iam-policy-compartment-guard-agent/harnesses/codex.toml +32 -0
- package/agents/oci/oci-live-iam-policy-compartment-guard-agent/harnesses/copilot.agent.md +53 -0
- package/agents/oci/oci-live-iam-policy-compartment-guard-agent/harnesses/cursor.agent.md +40 -0
- package/agents/oci/oci-live-iam-policy-compartment-guard-agent/harnesses/gemini.agent.md +40 -0
- package/agents/oci/oci-live-iam-policy-compartment-guard-agent/harnesses/kiro-cli.agent.json +1 -0
- package/agents/oci/oci-live-iam-policy-compartment-guard-agent/harnesses/kiro-ide.agent.md +40 -0
- package/agents/oci/oci-live-iam-policy-compartment-guard-agent/metadata.json +36 -0
- package/agents/oci/oci-live-network-security-rule-guard-agent/AGENT.md +59 -0
- package/agents/oci/oci-live-network-security-rule-guard-agent/harnesses/claude-code.agent.md +42 -0
- package/agents/oci/oci-live-network-security-rule-guard-agent/harnesses/codex.toml +34 -0
- package/agents/oci/oci-live-network-security-rule-guard-agent/harnesses/copilot.agent.md +55 -0
- package/agents/oci/oci-live-network-security-rule-guard-agent/harnesses/cursor.agent.md +44 -0
- package/agents/oci/oci-live-network-security-rule-guard-agent/harnesses/gemini.agent.md +43 -0
- package/agents/oci/oci-live-network-security-rule-guard-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/oci/oci-live-network-security-rule-guard-agent/harnesses/kiro-ide.agent.md +42 -0
- package/agents/oci/oci-live-network-security-rule-guard-agent/metadata.json +37 -0
- package/agents/oci/oci-live-oke-rollout-guard-agent/AGENT.md +57 -0
- package/agents/oci/oci-live-oke-rollout-guard-agent/PERMISSIONS.md +92 -0
- package/agents/oci/oci-live-oke-rollout-guard-agent/PREFLIGHT.md +49 -0
- package/agents/oci/oci-live-oke-rollout-guard-agent/ROLLBACK.md +47 -0
- package/agents/oci/oci-live-oke-rollout-guard-agent/harnesses/claude-code.agent.md +40 -0
- package/agents/oci/oci-live-oke-rollout-guard-agent/harnesses/codex.toml +32 -0
- package/agents/oci/oci-live-oke-rollout-guard-agent/harnesses/copilot.agent.md +53 -0
- package/agents/oci/oci-live-oke-rollout-guard-agent/harnesses/cursor.agent.md +40 -0
- package/agents/oci/oci-live-oke-rollout-guard-agent/harnesses/gemini.agent.md +40 -0
- package/agents/oci/oci-live-oke-rollout-guard-agent/harnesses/kiro-cli.agent.json +1 -0
- package/agents/oci/oci-live-oke-rollout-guard-agent/harnesses/kiro-ide.agent.md +40 -0
- package/agents/oci/oci-live-oke-rollout-guard-agent/metadata.json +36 -0
- package/agents/oci/oci-live-resource-manager-stack-guard-agent/AGENT.md +57 -0
- package/agents/oci/oci-live-resource-manager-stack-guard-agent/PERMISSIONS.md +80 -0
- package/agents/oci/oci-live-resource-manager-stack-guard-agent/PREFLIGHT.md +51 -0
- package/agents/oci/oci-live-resource-manager-stack-guard-agent/ROLLBACK.md +45 -0
- package/agents/oci/oci-live-resource-manager-stack-guard-agent/harnesses/claude-code.agent.md +40 -0
- package/agents/oci/oci-live-resource-manager-stack-guard-agent/harnesses/codex.toml +32 -0
- package/agents/oci/oci-live-resource-manager-stack-guard-agent/harnesses/copilot.agent.md +53 -0
- package/agents/oci/oci-live-resource-manager-stack-guard-agent/harnesses/cursor.agent.md +40 -0
- package/agents/oci/oci-live-resource-manager-stack-guard-agent/harnesses/gemini.agent.md +40 -0
- package/agents/oci/oci-live-resource-manager-stack-guard-agent/harnesses/kiro-cli.agent.json +1 -0
- package/agents/oci/oci-live-resource-manager-stack-guard-agent/harnesses/kiro-ide.agent.md +40 -0
- package/agents/oci/oci-live-resource-manager-stack-guard-agent/metadata.json +36 -0
- package/agents/oci/oci-live-vault-key-destruction-guard-agent/AGENT.md +57 -0
- package/agents/oci/oci-live-vault-key-destruction-guard-agent/PERMISSIONS.md +57 -0
- package/agents/oci/oci-live-vault-key-destruction-guard-agent/PREFLIGHT.md +53 -0
- package/agents/oci/oci-live-vault-key-destruction-guard-agent/ROLLBACK.md +49 -0
- package/agents/oci/oci-live-vault-key-destruction-guard-agent/harnesses/claude-code.agent.md +40 -0
- package/agents/oci/oci-live-vault-key-destruction-guard-agent/harnesses/codex.toml +32 -0
- package/agents/oci/oci-live-vault-key-destruction-guard-agent/harnesses/copilot.agent.md +53 -0
- package/agents/oci/oci-live-vault-key-destruction-guard-agent/harnesses/cursor.agent.md +40 -0
- package/agents/oci/oci-live-vault-key-destruction-guard-agent/harnesses/gemini.agent.md +40 -0
- package/agents/oci/oci-live-vault-key-destruction-guard-agent/harnesses/kiro-cli.agent.json +1 -0
- package/agents/oci/oci-live-vault-key-destruction-guard-agent/harnesses/kiro-ide.agent.md +40 -0
- package/agents/oci/oci-live-vault-key-destruction-guard-agent/metadata.json +36 -0
- package/agents/oci/oci-maestro-agent/AGENT.md +58 -0
- package/agents/oci/oci-maestro-agent/harnesses/claude-code.agent.md +41 -0
- package/agents/oci/oci-maestro-agent/harnesses/codex.toml +14 -0
- package/agents/oci/oci-maestro-agent/harnesses/copilot.agent.md +54 -0
- package/agents/oci/oci-maestro-agent/harnesses/cursor.agent.md +43 -0
- package/agents/oci/oci-maestro-agent/harnesses/gemini.agent.md +42 -0
- package/agents/oci/oci-maestro-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/oci/oci-maestro-agent/harnesses/kiro-ide.agent.md +41 -0
- package/agents/oci/oci-maestro-agent/metadata.json +37 -0
- package/agents/opentelemetry/README.md +37 -0
- package/agents/opentelemetry/opentelemetry-collector-config-review-agent/AGENT.md +55 -0
- package/agents/opentelemetry/opentelemetry-collector-config-review-agent/harnesses/claude-code.agent.md +38 -0
- package/agents/opentelemetry/opentelemetry-collector-config-review-agent/harnesses/codex.toml +32 -0
- package/agents/opentelemetry/opentelemetry-collector-config-review-agent/harnesses/copilot.agent.md +38 -0
- package/agents/opentelemetry/opentelemetry-collector-config-review-agent/harnesses/cursor.agent.md +38 -0
- package/agents/opentelemetry/opentelemetry-collector-config-review-agent/harnesses/gemini.agent.md +38 -0
- package/agents/opentelemetry/opentelemetry-collector-config-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/opentelemetry/opentelemetry-collector-config-review-agent/harnesses/kiro-ide.agent.md +38 -0
- package/agents/opentelemetry/opentelemetry-collector-config-review-agent/metadata.json +37 -0
- package/agents/prometheus/README.md +36 -0
- package/agents/prometheus/prometheus-alerting-cardinality-review-agent/AGENT.md +48 -0
- package/agents/prometheus/prometheus-alerting-cardinality-review-agent/harnesses/claude-code.agent.md +32 -0
- package/agents/prometheus/prometheus-alerting-cardinality-review-agent/harnesses/codex.toml +31 -0
- package/agents/prometheus/prometheus-alerting-cardinality-review-agent/harnesses/copilot.agent.md +32 -0
- package/agents/prometheus/prometheus-alerting-cardinality-review-agent/harnesses/cursor.agent.md +32 -0
- package/agents/prometheus/prometheus-alerting-cardinality-review-agent/harnesses/gemini.agent.md +32 -0
- package/agents/prometheus/prometheus-alerting-cardinality-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/prometheus/prometheus-alerting-cardinality-review-agent/harnesses/kiro-ide.agent.md +32 -0
- package/agents/prometheus/prometheus-alerting-cardinality-review-agent/metadata.json +31 -0
- package/agents/sigstore/README.md +38 -0
- package/agents/sigstore/sigstore-cosign-supply-chain-review-agent/AGENT.md +55 -0
- package/agents/sigstore/sigstore-cosign-supply-chain-review-agent/harnesses/claude-code.agent.md +35 -0
- package/agents/sigstore/sigstore-cosign-supply-chain-review-agent/harnesses/codex.toml +29 -0
- package/agents/sigstore/sigstore-cosign-supply-chain-review-agent/harnesses/copilot.agent.md +35 -0
- package/agents/sigstore/sigstore-cosign-supply-chain-review-agent/harnesses/cursor.agent.md +35 -0
- package/agents/sigstore/sigstore-cosign-supply-chain-review-agent/harnesses/gemini.agent.md +35 -0
- package/agents/sigstore/sigstore-cosign-supply-chain-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/sigstore/sigstore-cosign-supply-chain-review-agent/harnesses/kiro-ide.agent.md +35 -0
- package/agents/sigstore/sigstore-cosign-supply-chain-review-agent/metadata.json +31 -0
- package/agents/terraform/README.md +29 -0
- package/agents/terraform/terraform-maestro-agent/AGENT.md +58 -0
- package/agents/terraform/terraform-maestro-agent/harnesses/claude-code.agent.md +41 -0
- package/agents/terraform/terraform-maestro-agent/harnesses/codex.toml +14 -0
- package/agents/terraform/terraform-maestro-agent/harnesses/copilot.agent.md +54 -0
- package/agents/terraform/terraform-maestro-agent/harnesses/cursor.agent.md +43 -0
- package/agents/terraform/terraform-maestro-agent/harnesses/gemini.agent.md +42 -0
- package/agents/terraform/terraform-maestro-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/terraform/terraform-maestro-agent/harnesses/kiro-ide.agent.md +41 -0
- package/agents/terraform/terraform-maestro-agent/metadata.json +38 -0
- package/agents/terraform/terraform-reviewer/harnesses/claude-code.agent.md +29 -0
- package/agents/terraform/terraform-reviewer/harnesses/codex.toml +29 -0
- package/agents/terraform/terraform-reviewer/harnesses/copilot.agent.md +42 -0
- package/agents/terraform/terraform-reviewer/harnesses/cursor.agent.md +31 -0
- package/agents/terraform/terraform-reviewer/harnesses/gemini.agent.md +30 -0
- package/agents/terraform/terraform-reviewer/harnesses/kiro-cli.agent.json +5 -0
- package/agents/terraform/terraform-reviewer/harnesses/kiro-ide.agent.md +29 -0
- package/agents/terraform/terraform-reviewer/metadata.json +10 -1
- package/agents/velero/README.md +41 -0
- package/assets/logos/vanguard-frontier-agentic-logo.png +0 -0
- package/catalog/agents.json +1347 -27
- package/catalog/install-roles.json +455 -0
- package/catalog/skill-manifest.json +1358 -62
- package/catalog/skills.json +1231 -25
- package/package.json +11 -1
- package/scripts/export-marketplace-agents.mjs +129 -10
- package/scripts/gen_azure_live_guards.py +1424 -0
- package/scripts/gen_oci_live_guards.py +1510 -0
- package/scripts/update-catalog-new-agents.py +88 -0
- package/skills/argocd/README.md +30 -0
- package/skills/argocd/argo-rollouts-progressive-delivery-review/SKILL.md +40 -0
- package/skills/argocd/argo-rollouts-progressive-delivery-review/metadata.json +22 -0
- package/skills/argocd/argo-rollouts-progressive-delivery-review/references/workflow-and-output.md +248 -0
- package/skills/argocd/argocd-gitops-review/SKILL.md +43 -0
- package/skills/argocd/argocd-gitops-review/metadata.json +30 -0
- package/skills/argocd/argocd-gitops-review/references/mcp-and-evidence.md +53 -0
- package/skills/argocd/argocd-gitops-review/references/official-sources.md +32 -0
- package/skills/argocd/argocd-gitops-review/references/workflow-and-output.md +120 -0
- package/skills/aws/README.md +3 -1
- package/skills/aws/aws-maestro/SKILL.md +47 -0
- package/skills/aws/aws-maestro/metadata.json +28 -0
- package/skills/aws/aws-maestro/references/official-sources.md +24 -0
- package/skills/aws/aws-maestro/references/safety-checklist.md +42 -0
- package/skills/aws/aws-maestro/references/workflow-and-output.md +129 -0
- package/skills/aws/aws-private-ca-issuer-review/SKILL.md +39 -0
- package/skills/aws/aws-private-ca-issuer-review/metadata.json +21 -0
- package/skills/aws/aws-private-ca-issuer-review/references/official-sources.md +22 -0
- package/skills/aws/aws-private-ca-issuer-review/references/safety-checklist.md +30 -0
- package/skills/aws/aws-private-ca-issuer-review/references/workflow-and-output.md +214 -0
- package/skills/azure/README.md +3 -1
- package/skills/azure/azure-keyvault-certificate-issuer-review/SKILL.md +37 -0
- package/skills/azure/azure-keyvault-certificate-issuer-review/metadata.json +20 -0
- package/skills/azure/azure-keyvault-certificate-issuer-review/references/workflow-and-output.md +190 -0
- package/skills/azure/azure-live-aks-rollout-guard/SKILL.md +49 -0
- package/skills/azure/azure-live-aks-rollout-guard/metadata.json +27 -0
- package/skills/azure/azure-live-aks-rollout-guard/references/official-sources.md +19 -0
- package/skills/azure/azure-live-aks-rollout-guard/references/permission-model.md +54 -0
- package/skills/azure/azure-live-aks-rollout-guard/references/preflight-commands.md +55 -0
- package/skills/azure/azure-live-aks-rollout-guard/references/rollback-playbook.md +38 -0
- package/skills/azure/azure-live-app-service-slot-swap-guard/SKILL.md +49 -0
- package/skills/azure/azure-live-app-service-slot-swap-guard/metadata.json +26 -0
- package/skills/azure/azure-live-app-service-slot-swap-guard/references/official-sources.md +12 -0
- package/skills/azure/azure-live-app-service-slot-swap-guard/references/permission-model.md +40 -0
- package/skills/azure/azure-live-app-service-slot-swap-guard/references/preflight-commands.md +46 -0
- package/skills/azure/azure-live-app-service-slot-swap-guard/references/rollback-playbook.md +46 -0
- package/skills/azure/azure-live-arm-deployment-stack-guard/SKILL.md +49 -0
- package/skills/azure/azure-live-arm-deployment-stack-guard/metadata.json +27 -0
- package/skills/azure/azure-live-arm-deployment-stack-guard/references/official-sources.md +17 -0
- package/skills/azure/azure-live-arm-deployment-stack-guard/references/permission-model.md +68 -0
- package/skills/azure/azure-live-arm-deployment-stack-guard/references/preflight-commands.md +55 -0
- package/skills/azure/azure-live-arm-deployment-stack-guard/references/rollback-playbook.md +53 -0
- package/skills/azure/azure-live-cost-budget-action-guard/SKILL.md +49 -0
- package/skills/azure/azure-live-cost-budget-action-guard/metadata.json +27 -0
- package/skills/azure/azure-live-cost-budget-action-guard/references/official-sources.md +17 -0
- package/skills/azure/azure-live-cost-budget-action-guard/references/permission-model.md +66 -0
- package/skills/azure/azure-live-cost-budget-action-guard/references/preflight-commands.md +48 -0
- package/skills/azure/azure-live-cost-budget-action-guard/references/rollback-playbook.md +40 -0
- package/skills/azure/azure-live-entra-role-assignment-guard/SKILL.md +56 -0
- package/skills/azure/azure-live-entra-role-assignment-guard/metadata.json +28 -0
- package/skills/azure/azure-live-entra-role-assignment-guard/references/official-sources.md +21 -0
- package/skills/azure/azure-live-entra-role-assignment-guard/references/permission-model.md +70 -0
- package/skills/azure/azure-live-entra-role-assignment-guard/references/preflight-commands.md +69 -0
- package/skills/azure/azure-live-entra-role-assignment-guard/references/rollback-playbook.md +51 -0
- package/skills/azure/azure-live-keyvault-rotation-purge-guard/SKILL.md +49 -0
- package/skills/azure/azure-live-keyvault-rotation-purge-guard/metadata.json +27 -0
- package/skills/azure/azure-live-keyvault-rotation-purge-guard/references/official-sources.md +13 -0
- package/skills/azure/azure-live-keyvault-rotation-purge-guard/references/permission-model.md +64 -0
- package/skills/azure/azure-live-keyvault-rotation-purge-guard/references/preflight-commands.md +48 -0
- package/skills/azure/azure-live-keyvault-rotation-purge-guard/references/rollback-playbook.md +44 -0
- package/skills/azure/azure-live-pim-jit-activation-guard/SKILL.md +49 -0
- package/skills/azure/azure-live-pim-jit-activation-guard/metadata.json +27 -0
- package/skills/azure/azure-live-pim-jit-activation-guard/references/official-sources.md +13 -0
- package/skills/azure/azure-live-pim-jit-activation-guard/references/permission-model.md +56 -0
- package/skills/azure/azure-live-pim-jit-activation-guard/references/preflight-commands.md +46 -0
- package/skills/azure/azure-live-pim-jit-activation-guard/references/rollback-playbook.md +45 -0
- package/skills/azure/azure-maestro/SKILL.md +140 -0
- package/skills/azure/azure-maestro/metadata.json +28 -0
- package/skills/backstage/backstage-scaffolder-template-review/SKILL.md +39 -0
- package/skills/backstage/backstage-scaffolder-template-review/metadata.json +21 -0
- package/skills/backstage/backstage-scaffolder-template-review/references/workflow-and-output.md +179 -0
- package/skills/cert-manager/cert-manager-issuer-trust-review/SKILL.md +40 -0
- package/skills/cert-manager/cert-manager-issuer-trust-review/metadata.json +22 -0
- package/skills/cert-manager/cert-manager-issuer-trust-review/references/workflow-and-output.md +222 -0
- package/skills/cilium/README.md +30 -0
- package/skills/cilium/cilium-network-policy-review/SKILL.md +43 -0
- package/skills/cilium/cilium-network-policy-review/metadata.json +30 -0
- package/skills/cilium/cilium-network-policy-review/references/mcp-and-evidence.md +52 -0
- package/skills/cilium/cilium-network-policy-review/references/official-sources.md +30 -0
- package/skills/cilium/cilium-network-policy-review/references/workflow-and-output.md +130 -0
- package/skills/falco/falco-runtime-threat-rules-review/SKILL.md +37 -0
- package/skills/falco/falco-runtime-threat-rules-review/metadata.json +22 -0
- package/skills/falco/falco-runtime-threat-rules-review/references/workflow-and-output.md +249 -0
- package/skills/finops/README.md +30 -0
- package/skills/finops/finops-cloud-price-advisor/SKILL.md +60 -0
- package/skills/finops/finops-cloud-price-advisor/metadata.json +26 -0
- package/skills/finops/finops-cloud-price-advisor/references/currency-handling.md +100 -0
- package/skills/finops/finops-cloud-price-advisor/references/estimation-workflow.md +145 -0
- package/skills/finops/finops-cloud-price-advisor/references/official-sources.md +64 -0
- package/skills/finops/finops-cloud-price-advisor/references/pricing-apis.md +271 -0
- package/skills/fluxcd/fluxcd-kustomization-helmrelease-review/SKILL.md +40 -0
- package/skills/fluxcd/fluxcd-kustomization-helmrelease-review/metadata.json +22 -0
- package/skills/fluxcd/fluxcd-kustomization-helmrelease-review/references/workflow-and-output.md +243 -0
- package/skills/istio/README.md +28 -0
- package/skills/istio/istio-ambient-mesh-review/SKILL.md +43 -0
- package/skills/istio/istio-ambient-mesh-review/metadata.json +30 -0
- package/skills/istio/istio-ambient-mesh-review/references/mcp-and-evidence.md +59 -0
- package/skills/istio/istio-ambient-mesh-review/references/official-sources.md +32 -0
- package/skills/istio/istio-ambient-mesh-review/references/workflow-and-output.md +128 -0
- package/skills/kubernetes/README.md +30 -0
- package/skills/kubernetes/external-secrets-operator-review/SKILL.md +37 -0
- package/skills/kubernetes/external-secrets-operator-review/metadata.json +22 -0
- package/skills/kubernetes/external-secrets-operator-review/references/workflow-and-output.md +280 -0
- package/skills/kubernetes/kubecost-chargeback-allocation-review/SKILL.md +40 -0
- package/skills/kubernetes/kubecost-chargeback-allocation-review/metadata.json +22 -0
- package/skills/kubernetes/kubecost-chargeback-allocation-review/references/workflow-and-output.md +215 -0
- package/skills/kubernetes/kubernetes-live-rbac-mutation-guard/SKILL.md +57 -0
- package/skills/kubernetes/kubernetes-live-rbac-mutation-guard/metadata.json +27 -0
- package/skills/kubernetes/kubernetes-live-rbac-mutation-guard/references/official-sources.md +18 -0
- package/skills/kubernetes/kubernetes-live-rbac-mutation-guard/references/permission-model.md +78 -0
- package/skills/kubernetes/kubernetes-live-rbac-mutation-guard/references/preflight-commands.md +81 -0
- package/skills/kubernetes/kubernetes-live-rbac-mutation-guard/references/rollback-playbook.md +61 -0
- package/skills/kubernetes/kubernetes-maestro/SKILL.md +45 -0
- package/skills/kubernetes/kubernetes-maestro/metadata.json +24 -0
- package/skills/kubernetes/kubernetes-maestro/references/safety-checklist.md +78 -0
- package/skills/kubernetes/kubernetes-maestro/references/workflow-and-output.md +206 -0
- package/skills/kubernetes/kubernetes-pod-security-admission-review/SKILL.md +43 -0
- package/skills/kubernetes/kubernetes-pod-security-admission-review/metadata.json +28 -0
- package/skills/kubernetes/kubernetes-pod-security-admission-review/references/mcp-and-evidence.md +49 -0
- package/skills/kubernetes/kubernetes-pod-security-admission-review/references/official-sources.md +26 -0
- package/skills/kubernetes/kubernetes-pod-security-admission-review/references/workflow-and-output.md +129 -0
- package/skills/kubernetes/kubernetes-pod-spec-review/SKILL.md +38 -0
- package/skills/kubernetes/kubernetes-pod-spec-review/metadata.json +22 -0
- package/skills/kubernetes/kubernetes-pod-spec-review/references/workflow-and-output.md +229 -0
- package/skills/kubernetes/kubernetes-rbac-review/SKILL.md +38 -0
- package/skills/kubernetes/kubernetes-rbac-review/metadata.json +27 -0
- package/skills/kubernetes/kubernetes-rbac-review/references/mcp-and-evidence.md +34 -0
- package/skills/kubernetes/kubernetes-rbac-review/references/official-sources.md +22 -0
- package/skills/kubernetes/kubernetes-rbac-review/references/workflow-and-output.md +44 -0
- package/skills/kubernetes/kubernetes-workload-identity-review/SKILL.md +43 -0
- package/skills/kubernetes/kubernetes-workload-identity-review/metadata.json +29 -0
- package/skills/kubernetes/kubernetes-workload-identity-review/references/mcp-and-evidence.md +57 -0
- package/skills/kubernetes/kubernetes-workload-identity-review/references/official-sources.md +47 -0
- package/skills/kubernetes/kubernetes-workload-identity-review/references/workflow-and-output.md +166 -0
- package/skills/kyverno/README.md +30 -0
- package/skills/kyverno/kyverno-policy-review/SKILL.md +43 -0
- package/skills/kyverno/kyverno-policy-review/metadata.json +30 -0
- package/skills/kyverno/kyverno-policy-review/references/mcp-and-evidence.md +49 -0
- package/skills/kyverno/kyverno-policy-review/references/official-sources.md +31 -0
- package/skills/kyverno/kyverno-policy-review/references/workflow-and-output.md +106 -0
- package/skills/oci/README.md +63 -0
- package/skills/oci/oci-certificates-issuer-review/SKILL.md +37 -0
- package/skills/oci/oci-certificates-issuer-review/metadata.json +20 -0
- package/skills/oci/oci-certificates-issuer-review/references/workflow-and-output.md +207 -0
- package/skills/oci/oci-live-autonomous-db-lifecycle-guard/SKILL.md +49 -0
- package/skills/oci/oci-live-autonomous-db-lifecycle-guard/metadata.json +27 -0
- package/skills/oci/oci-live-autonomous-db-lifecycle-guard/references/official-sources.md +13 -0
- package/skills/oci/oci-live-autonomous-db-lifecycle-guard/references/permission-model.md +49 -0
- package/skills/oci/oci-live-autonomous-db-lifecycle-guard/references/preflight-commands.md +58 -0
- package/skills/oci/oci-live-autonomous-db-lifecycle-guard/references/rollback-playbook.md +44 -0
- package/skills/oci/oci-live-cost-budget-runaway-guard/SKILL.md +49 -0
- package/skills/oci/oci-live-cost-budget-runaway-guard/metadata.json +27 -0
- package/skills/oci/oci-live-cost-budget-runaway-guard/references/official-sources.md +17 -0
- package/skills/oci/oci-live-cost-budget-runaway-guard/references/permission-model.md +59 -0
- package/skills/oci/oci-live-cost-budget-runaway-guard/references/preflight-commands.md +42 -0
- package/skills/oci/oci-live-cost-budget-runaway-guard/references/rollback-playbook.md +44 -0
- package/skills/oci/oci-live-iam-policy-compartment-guard/SKILL.md +49 -0
- package/skills/oci/oci-live-iam-policy-compartment-guard/metadata.json +27 -0
- package/skills/oci/oci-live-iam-policy-compartment-guard/references/official-sources.md +13 -0
- package/skills/oci/oci-live-iam-policy-compartment-guard/references/permission-model.md +71 -0
- package/skills/oci/oci-live-iam-policy-compartment-guard/references/preflight-commands.md +49 -0
- package/skills/oci/oci-live-iam-policy-compartment-guard/references/rollback-playbook.md +62 -0
- package/skills/oci/oci-live-network-security-rule-guard/SKILL.md +57 -0
- package/skills/oci/oci-live-network-security-rule-guard/metadata.json +28 -0
- package/skills/oci/oci-live-network-security-rule-guard/references/official-sources.md +21 -0
- package/skills/oci/oci-live-network-security-rule-guard/references/permission-model.md +65 -0
- package/skills/oci/oci-live-network-security-rule-guard/references/preflight-commands.md +69 -0
- package/skills/oci/oci-live-network-security-rule-guard/references/rollback-playbook.md +79 -0
- package/skills/oci/oci-live-oke-rollout-guard/SKILL.md +49 -0
- package/skills/oci/oci-live-oke-rollout-guard/metadata.json +27 -0
- package/skills/oci/oci-live-oke-rollout-guard/references/official-sources.md +18 -0
- package/skills/oci/oci-live-oke-rollout-guard/references/permission-model.md +80 -0
- package/skills/oci/oci-live-oke-rollout-guard/references/preflight-commands.md +55 -0
- package/skills/oci/oci-live-oke-rollout-guard/references/rollback-playbook.md +45 -0
- package/skills/oci/oci-live-resource-manager-stack-guard/SKILL.md +49 -0
- package/skills/oci/oci-live-resource-manager-stack-guard/metadata.json +27 -0
- package/skills/oci/oci-live-resource-manager-stack-guard/references/official-sources.md +12 -0
- package/skills/oci/oci-live-resource-manager-stack-guard/references/permission-model.md +70 -0
- package/skills/oci/oci-live-resource-manager-stack-guard/references/preflight-commands.md +57 -0
- package/skills/oci/oci-live-resource-manager-stack-guard/references/rollback-playbook.md +51 -0
- package/skills/oci/oci-live-vault-key-destruction-guard/SKILL.md +49 -0
- package/skills/oci/oci-live-vault-key-destruction-guard/metadata.json +27 -0
- package/skills/oci/oci-live-vault-key-destruction-guard/references/official-sources.md +13 -0
- package/skills/oci/oci-live-vault-key-destruction-guard/references/permission-model.md +55 -0
- package/skills/oci/oci-live-vault-key-destruction-guard/references/preflight-commands.md +62 -0
- package/skills/oci/oci-live-vault-key-destruction-guard/references/rollback-playbook.md +55 -0
- package/skills/oci/oci-maestro/SKILL.md +163 -0
- package/skills/oci/oci-maestro/metadata.json +27 -0
- package/skills/opentelemetry/README.md +31 -0
- package/skills/opentelemetry/opentelemetry-collector-config-review/SKILL.md +44 -0
- package/skills/opentelemetry/opentelemetry-collector-config-review/metadata.json +30 -0
- package/skills/opentelemetry/opentelemetry-collector-config-review/references/mcp-and-evidence.md +49 -0
- package/skills/opentelemetry/opentelemetry-collector-config-review/references/official-sources.md +31 -0
- package/skills/opentelemetry/opentelemetry-collector-config-review/references/workflow-and-output.md +155 -0
- package/skills/prometheus/prometheus-alerting-cardinality-review/SKILL.md +38 -0
- package/skills/prometheus/prometheus-alerting-cardinality-review/metadata.json +22 -0
- package/skills/prometheus/prometheus-alerting-cardinality-review/references/workflow-and-output.md +221 -0
- package/skills/sigstore/sigstore-cosign-supply-chain-review/SKILL.md +39 -0
- package/skills/sigstore/sigstore-cosign-supply-chain-review/metadata.json +22 -0
- package/skills/sigstore/sigstore-cosign-supply-chain-review/references/workflow-and-output.md +196 -0
- package/skills/terraform/README.md +29 -0
- package/skills/terraform/terraform-maestro/SKILL.md +123 -0
- package/skills/terraform/terraform-maestro/metadata.json +30 -0
- package/skills/terraform/terraform-maestro/references/official-sources.md +59 -0
- package/skills/terraform/terraform-maestro/references/safety-checklist.md +53 -0
- package/skills/terraform/terraform-maestro/references/workflow-and-output.md +108 -0
- package/skills/velero/velero-backup-restore-guard/SKILL.md +41 -0
- package/skills/velero/velero-backup-restore-guard/metadata.json +21 -0
- package/skills/velero/velero-backup-restore-guard/references/safety-checklist.md +40 -0
- package/skills/velero/velero-backup-restore-guard/references/workflow-and-output.md +202 -0
|
@@ -0,0 +1,1424 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Generator: 6 Azure live-guard agents + 6 paired skills."""
|
|
3
|
+
import os, json, textwrap
|
|
4
|
+
|
|
5
|
+
ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
|
6
|
+
DATE = "2026-04-30"
|
|
7
|
+
|
|
8
|
+
AGENTS = [
|
|
9
|
+
{
|
|
10
|
+
"id": "azure-live-arm-deployment-stack-guard",
|
|
11
|
+
"name": "Azure Live ARM Deployment Stack Guard",
|
|
12
|
+
"summary": "Guard ARM template and Deployment Stack changes with what-if evidence, denySettings review, and explicit approval before execute.",
|
|
13
|
+
"focus": "Guard ARM/Bicep and Deployment Stack changes with `--what-if` evidence, `denySettings` audit, and explicit approval before any ARM execute.",
|
|
14
|
+
"codex_role": "arm-deployment-stack live operator",
|
|
15
|
+
"skill_desc": "Guard live ARM, Bicep, and Deployment Stack changes with what-if evidence, denySettings review, changeset diff, rollback posture, and approval gates.",
|
|
16
|
+
"skill_when": [
|
|
17
|
+
"an ARM or Bicep deployment must be previewed and possibly executed against a live Azure environment",
|
|
18
|
+
"the session involves Deployment Stacks with denySettings and protected resource scopes",
|
|
19
|
+
"a human needs guarded execution help with change evidence and rollback design",
|
|
20
|
+
],
|
|
21
|
+
"response_shape": [
|
|
22
|
+
"Target subscription, resource group, and active principal (az account show evidence)",
|
|
23
|
+
"What-if diff output or deployment preview evidence",
|
|
24
|
+
"denySettings posture and existing denyAssignments on target scope",
|
|
25
|
+
"Approval status and change justification",
|
|
26
|
+
"Proposed or executed ARM/Stack action",
|
|
27
|
+
"Rollback posture (previous template ref or detach plan)",
|
|
28
|
+
"Post-deploy verification steps and open risks",
|
|
29
|
+
],
|
|
30
|
+
"official_docs": [
|
|
31
|
+
"https://learn.microsoft.com/en-us/azure/azure-resource-manager/templates/deploy-what-if",
|
|
32
|
+
"https://learn.microsoft.com/en-us/azure/azure-resource-manager/bicep/deployment-stacks",
|
|
33
|
+
"https://learn.microsoft.com/en-us/azure/role-based-access-control/deny-assignments",
|
|
34
|
+
"https://learn.microsoft.com/en-us/azure/azure-resource-manager/templates/best-practices",
|
|
35
|
+
],
|
|
36
|
+
"security_notes": "Never execute an ARM or Deployment Stack change without what-if evidence, confirmed target scope, denySettings review, and explicit human approval. Repo write access does not authorize live Azure mutations.",
|
|
37
|
+
"permissions_body": textwrap.dedent("""\
|
|
38
|
+
# Least-privilege RBAC guidance
|
|
39
|
+
|
|
40
|
+
## Identity model preference
|
|
41
|
+
|
|
42
|
+
1. PIM-eligible Contributor scoped to **target resource group only** — activated JIT for deploy windows
|
|
43
|
+
2. Service principal with scoped Contributor for CI/CD pipelines — no standing access
|
|
44
|
+
3. Do not use subscription-level Owner or Contributor for routine deployments
|
|
45
|
+
|
|
46
|
+
## Required Microsoft.* actions
|
|
47
|
+
|
|
48
|
+
What-if and Deployment Stacks share the same permission boundary. There is no read-only what-if role;
|
|
49
|
+
the operator must hold write permissions on the resources being deployed.
|
|
50
|
+
|
|
51
|
+
```json
|
|
52
|
+
{
|
|
53
|
+
"Name": "ARM Deployment Stack Guard",
|
|
54
|
+
"IsCustom": true,
|
|
55
|
+
"Description": "Minimum rights for guarded ARM what-if and Deployment Stack changes in one target resource group. Stack deletion is EXCLUDED — it requires a separate PIM-elevated role.",
|
|
56
|
+
"Actions": [
|
|
57
|
+
"Microsoft.Resources/deployments/read",
|
|
58
|
+
"Microsoft.Resources/deployments/write",
|
|
59
|
+
"Microsoft.Resources/deployments/whatIf/action",
|
|
60
|
+
"Microsoft.Resources/deploymentStacks/read",
|
|
61
|
+
"Microsoft.Resources/deploymentStacks/write",
|
|
62
|
+
"Microsoft.Resources/subscriptions/resourceGroups/read"
|
|
63
|
+
],
|
|
64
|
+
"NotActions": [
|
|
65
|
+
"Microsoft.Resources/deploymentStacks/delete"
|
|
66
|
+
],
|
|
67
|
+
"DataActions": [],
|
|
68
|
+
"NotDataActions": [],
|
|
69
|
+
"AssignableScopes": [
|
|
70
|
+
"/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<TARGET_RG>"
|
|
71
|
+
]
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
`deploymentStacks/delete` is in `NotActions` above. Stack deletion requires a **separate
|
|
76
|
+
PIM-eligible role** (see below) activated only for confirmed decommission windows.
|
|
77
|
+
|
|
78
|
+
### PIM-elevated delete role (activate only for planned decommission)
|
|
79
|
+
|
|
80
|
+
```json
|
|
81
|
+
{
|
|
82
|
+
"Name": "ARM Deployment Stack Delete (PIM)",
|
|
83
|
+
"IsCustom": true,
|
|
84
|
+
"Description": "Stack deletion only. Must be PIM-activated with approval and time-bound to a decommission window.",
|
|
85
|
+
"Actions": [
|
|
86
|
+
"Microsoft.Resources/deploymentStacks/read",
|
|
87
|
+
"Microsoft.Resources/deploymentStacks/delete"
|
|
88
|
+
],
|
|
89
|
+
"NotActions": [],
|
|
90
|
+
"AssignableScopes": [
|
|
91
|
+
"/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<TARGET_RG>"
|
|
92
|
+
]
|
|
93
|
+
}
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Assign this role as **PIM-eligible** (not permanent active). Require manager approval
|
|
97
|
+
and a maximum 2-hour activation window. Never combine with `deploymentStacks/write` in
|
|
98
|
+
the same PIM activation unless you are replacing a stack.
|
|
99
|
+
|
|
100
|
+
For each resource type touched by the template, add the matching write action, e.g.
|
|
101
|
+
`Microsoft.Compute/virtualMachines/write` for VMs. This is unavoidable — what-if requires it.
|
|
102
|
+
|
|
103
|
+
## Deployment Stacks denySettings
|
|
104
|
+
|
|
105
|
+
Recommended default for production stacks:
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
az deployment-stack group create \\
|
|
109
|
+
--deny-settings-mode denyDelete \\
|
|
110
|
+
--deny-settings-apply-to-child-scopes \\
|
|
111
|
+
...
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
`denyDelete` generates a platform-enforced `denyAssignment` on all managed resources.
|
|
115
|
+
`denyWriteAndDelete` is stricter — use for compliance-mandated immutable resources.
|
|
116
|
+
|
|
117
|
+
## Do not assign
|
|
118
|
+
|
|
119
|
+
- `Owner` at subscription scope
|
|
120
|
+
- `Contributor` at management-group scope
|
|
121
|
+
- Broad `Microsoft.Resources/*` wildcards
|
|
122
|
+
- `Microsoft.Authorization/roleAssignments/write` (privilege escalation risk)
|
|
123
|
+
"""),
|
|
124
|
+
"preflight_body": textwrap.dedent("""\
|
|
125
|
+
# ARM Deployment Stack — Preflight Commands
|
|
126
|
+
|
|
127
|
+
Run all of these before executing any live ARM or Deployment Stack change.
|
|
128
|
+
|
|
129
|
+
## 1. Confirm identity and active subscription
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
az account show --query "{sub:id, tenant:tenantId, user:user.name, env:environmentName}"
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## 2. What-if on ARM / Bicep template
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
az deployment group what-if \\
|
|
139
|
+
--resource-group <TARGET_RG> \\
|
|
140
|
+
--template-file main.bicep \\
|
|
141
|
+
--parameters @params.prod.json \\
|
|
142
|
+
--result-format FullResourcePayloads
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Stop if what-if shows unexpected deletions or replacements. Deletions require separate approval.
|
|
146
|
+
|
|
147
|
+
## 3. Inspect current Deployment Stack state
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
az deployment-stack group show \\
|
|
151
|
+
--name <STACK_NAME> \\
|
|
152
|
+
--resource-group <TARGET_RG> \\
|
|
153
|
+
--query "{state:provisioningState, denySettings:denySettings, resourceCount:length(resources)}"
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
## 4. Review deny assignments on target scope
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
az role assignment list \\
|
|
160
|
+
--resource-group <TARGET_RG> \\
|
|
161
|
+
--include-deny \\
|
|
162
|
+
--query "[?type=='Microsoft.Authorization/denyAssignments'].{name:name,actions:denyAssignmentPermissions[0].actions}"
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
## 5. Validate template syntax
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
az deployment group validate \\
|
|
169
|
+
--resource-group <TARGET_RG> \\
|
|
170
|
+
--template-file main.bicep \\
|
|
171
|
+
--parameters @params.prod.json
|
|
172
|
+
```
|
|
173
|
+
"""),
|
|
174
|
+
"rollback_body": textwrap.dedent("""\
|
|
175
|
+
# ARM Deployment Stack — Rollback Playbook
|
|
176
|
+
|
|
177
|
+
## Option 1: Re-deploy previous known-good template (incremental)
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
az deployment group create \\
|
|
181
|
+
--resource-group <TARGET_RG> \\
|
|
182
|
+
--template-file main.prev.bicep \\
|
|
183
|
+
--parameters @params.prod.prev.json \\
|
|
184
|
+
--mode Incremental \\
|
|
185
|
+
--name "rollback-$(date +%Y%m%dT%H%M%S)"
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
## Option 2: Detach stack management without deleting resources
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
az deployment-stack group delete \\
|
|
192
|
+
--name <STACK_NAME> \\
|
|
193
|
+
--resource-group <TARGET_RG> \\
|
|
194
|
+
--action-on-unmanage detachAll \\
|
|
195
|
+
--yes
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
Use when the stack definition is wrong but the deployed resources are still healthy.
|
|
199
|
+
|
|
200
|
+
## Option 3: Full stack deletion (nuclear — bypass denySettings first)
|
|
201
|
+
|
|
202
|
+
```bash
|
|
203
|
+
# REQUIRES: denySettings override or prior denyDelete removal
|
|
204
|
+
az deployment-stack group delete \\
|
|
205
|
+
--name <STACK_NAME> \\
|
|
206
|
+
--resource-group <TARGET_RG> \\
|
|
207
|
+
--action-on-unmanage deleteAll \\
|
|
208
|
+
--bypass-stack-out-of-sync-error \\
|
|
209
|
+
--yes
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
WARNING: If `denySettings.mode = denyDelete`, this command fails by design.
|
|
213
|
+
That failure is correct behavior — escalate to a Principal with deny-assignment write rights.
|
|
214
|
+
|
|
215
|
+
## Verify
|
|
216
|
+
|
|
217
|
+
```bash
|
|
218
|
+
az deployment group show \\
|
|
219
|
+
--resource-group <TARGET_RG> \\
|
|
220
|
+
--name <DEPLOYMENT_NAME> \\
|
|
221
|
+
--query "{state:properties.provisioningState, timestamp:properties.timestamp}"
|
|
222
|
+
```
|
|
223
|
+
"""),
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
"id": "azure-live-pim-jit-activation-guard",
|
|
227
|
+
"name": "Azure Live PIM JIT Activation Guard",
|
|
228
|
+
"summary": "Gate PIM eligible role activations with justification, ticket binding, MFA verification, and time-bound scope before approval submission.",
|
|
229
|
+
"focus": "Gate Entra ID PIM eligible role activations with justification, ticket reference, MFA verification, and time-bound scope before submission to the approval workflow.",
|
|
230
|
+
"codex_role": "pim-jit-activation live operator",
|
|
231
|
+
"skill_desc": "Gate Entra ID PIM eligible role activations with justification, MFA, ticket binding, time-bound scope, and approval workflow gates before any privileged Azure role becomes active.",
|
|
232
|
+
"skill_when": [
|
|
233
|
+
"a user or service principal must activate a PIM-eligible Azure or Entra ID role",
|
|
234
|
+
"an approver must review and accept or reject a pending PIM activation request",
|
|
235
|
+
"standing privileged access is being audited and time-bound JIT activation must be enforced",
|
|
236
|
+
],
|
|
237
|
+
"response_shape": [
|
|
238
|
+
"Eligible assignment confirmation (principal, role, scope, schedule)",
|
|
239
|
+
"Existing active assignments check (avoid duplicate activation)",
|
|
240
|
+
"Conditional Access and MFA posture verification",
|
|
241
|
+
"Justification and ticket reference audit",
|
|
242
|
+
"Activation request submission or approval action",
|
|
243
|
+
"Time-bound window and expiry confirmation",
|
|
244
|
+
"Post-activation access verification and open risks",
|
|
245
|
+
],
|
|
246
|
+
"official_docs": [
|
|
247
|
+
"https://learn.microsoft.com/en-us/entra/id-governance/privileged-identity-management/pim-deployment-plan",
|
|
248
|
+
"https://learn.microsoft.com/en-us/entra/id-governance/privileged-identity-management/pim-resource-roles-configure-role-settings",
|
|
249
|
+
"https://learn.microsoft.com/en-us/entra/id-governance/privileged-identity-management/pim-how-to-activate-role",
|
|
250
|
+
"https://learn.microsoft.com/en-us/entra/id-governance/privileged-identity-management/pim-configure-azure-ad-roles",
|
|
251
|
+
],
|
|
252
|
+
"security_notes": "Never activate a PIM role without justification, ticket reference, and MFA confirmation. An agent cannot activate another user's PIM role on their behalf — only the eligible principal may submit. Requires Entra ID P2 or equivalent license.",
|
|
253
|
+
"permissions_body": textwrap.dedent("""\
|
|
254
|
+
# Least-privilege RBAC guidance for PIM JIT operations
|
|
255
|
+
|
|
256
|
+
## Identity model
|
|
257
|
+
|
|
258
|
+
PIM JIT is itself the least-privilege mechanism. The operator holds only an *eligible assignment*
|
|
259
|
+
— not an active one. Activation is time-bounded, MFA-gated, and audit-logged natively.
|
|
260
|
+
|
|
261
|
+
Preferred order:
|
|
262
|
+
1. Entra ID PIM eligible assignment (not standing active)
|
|
263
|
+
2. Time-bound maximum activation duration: 1–4 hours for break-glass, 8 hours maximum
|
|
264
|
+
3. Require approval for roles with management-group or subscription scope
|
|
265
|
+
4. Require justification and ticket reference for all activations
|
|
266
|
+
|
|
267
|
+
## Custom role to read eligible assignments and submit own activation
|
|
268
|
+
|
|
269
|
+
```json
|
|
270
|
+
{
|
|
271
|
+
"Name": "PIM JIT Activation Operator",
|
|
272
|
+
"IsCustom": true,
|
|
273
|
+
"Description": "Read PIM eligible assignments and submit own activation requests.",
|
|
274
|
+
"Actions": [
|
|
275
|
+
"Microsoft.Authorization/roleEligibilitySchedules/read",
|
|
276
|
+
"Microsoft.Authorization/roleEligibilityScheduleRequests/read",
|
|
277
|
+
"Microsoft.Authorization/roleAssignmentSchedules/read",
|
|
278
|
+
"Microsoft.Authorization/roleAssignmentScheduleRequests/write",
|
|
279
|
+
"Microsoft.Authorization/roleAssignments/read"
|
|
280
|
+
],
|
|
281
|
+
"NotActions": [],
|
|
282
|
+
"AssignableScopes": [
|
|
283
|
+
"/subscriptions/<SUBSCRIPTION_ID>"
|
|
284
|
+
]
|
|
285
|
+
}
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
Note: `roleAssignmentScheduleRequests/write` only allows a principal to activate their *own*
|
|
289
|
+
eligible assignment. It does not allow activating another user's role.
|
|
290
|
+
|
|
291
|
+
## Recommended PIM role settings (configure in Entra portal or Graph API)
|
|
292
|
+
|
|
293
|
+
- Maximum activation duration: 8 hours
|
|
294
|
+
- Require MFA on activation: **Yes**
|
|
295
|
+
- Require justification: **Yes**
|
|
296
|
+
- Require ticket information: **Yes** (link to change management system)
|
|
297
|
+
- Require approval for: Owner, User Access Administrator, Global Administrator
|
|
298
|
+
- Notification on activation: send to security team DL
|
|
299
|
+
|
|
300
|
+
## Graceful degradation (tenants without P2 license)
|
|
301
|
+
|
|
302
|
+
Without PIM, use Conditional Access + Azure AD Group membership with time-bounded
|
|
303
|
+
group assignment via Access Packages (Entra ID Governance) as the nearest equivalent.
|
|
304
|
+
|
|
305
|
+
## Do not assign
|
|
306
|
+
|
|
307
|
+
- Standing `Owner` at subscription scope
|
|
308
|
+
- Standing `User Access Administrator` (allows arbitrary role assignments)
|
|
309
|
+
- `Microsoft.Authorization/roleAssignments/write` to non-PIM principals
|
|
310
|
+
"""),
|
|
311
|
+
"preflight_body": textwrap.dedent("""\
|
|
312
|
+
# PIM JIT Activation — Preflight Commands
|
|
313
|
+
|
|
314
|
+
## 1. Check eligible assignments for the current principal
|
|
315
|
+
|
|
316
|
+
```bash
|
|
317
|
+
PRINCIPAL_OID=$(az ad signed-in-user show --query id -o tsv)
|
|
318
|
+
SUB_ID=$(az account show --query id -o tsv)
|
|
319
|
+
|
|
320
|
+
az rest \\
|
|
321
|
+
--method GET \\
|
|
322
|
+
--url "https://management.azure.com/subscriptions/${SUB_ID}/providers/Microsoft.Authorization/roleEligibilitySchedules?\\$filter=principalId+eq+'${PRINCIPAL_OID}'&api-version=2020-10-01" \\
|
|
323
|
+
--query "value[].{role:properties.expandedProperties.roleDefinition.displayName, scope:properties.scope, status:properties.status, endTime:properties.endDateTime}"
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
## 2. Check for already-active assignments (prevent duplicate activation)
|
|
327
|
+
|
|
328
|
+
```bash
|
|
329
|
+
az rest \\
|
|
330
|
+
--method GET \\
|
|
331
|
+
--url "https://management.azure.com/subscriptions/${SUB_ID}/providers/Microsoft.Authorization/roleAssignmentSchedules?\\$filter=principalId+eq+'${PRINCIPAL_OID}'&api-version=2020-10-01" \\
|
|
332
|
+
--query "value[].{role:properties.expandedProperties.roleDefinition.displayName, status:properties.status, endTime:properties.endDateTime}"
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
## 3. Confirm Conditional Access and MFA status
|
|
336
|
+
|
|
337
|
+
```bash
|
|
338
|
+
# Verify the signed-in user's MFA registration
|
|
339
|
+
az rest \\
|
|
340
|
+
--method GET \\
|
|
341
|
+
--url "https://graph.microsoft.com/v1.0/me/authentication/methods" \\
|
|
342
|
+
--resource "https://graph.microsoft.com/"
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
## 4. List pending approval requests (for approvers)
|
|
346
|
+
|
|
347
|
+
```bash
|
|
348
|
+
az rest \\
|
|
349
|
+
--method GET \\
|
|
350
|
+
--url "https://management.azure.com/subscriptions/${SUB_ID}/providers/Microsoft.Authorization/roleAssignmentScheduleRequests?\\$filter=status+eq+'PendingApproval'&api-version=2020-10-01" \\
|
|
351
|
+
--query "value[].{requestor:properties.expandedProperties.principal.displayName, role:properties.expandedProperties.roleDefinition.displayName, justification:properties.justification}"
|
|
352
|
+
```
|
|
353
|
+
"""),
|
|
354
|
+
"rollback_body": textwrap.dedent("""\
|
|
355
|
+
# PIM JIT Activation — Rollback Playbook
|
|
356
|
+
|
|
357
|
+
## Option 1: Self-deactivate an active role early
|
|
358
|
+
|
|
359
|
+
```bash
|
|
360
|
+
SCHED_ID="<ROLE_ASSIGNMENT_SCHEDULE_ID>"
|
|
361
|
+
SUB_ID=$(az account show --query id -o tsv)
|
|
362
|
+
REQUEST_ID=$(uuidgen)
|
|
363
|
+
|
|
364
|
+
az rest \\
|
|
365
|
+
--method PUT \\
|
|
366
|
+
--url "https://management.azure.com/subscriptions/${SUB_ID}/providers/Microsoft.Authorization/roleAssignmentScheduleRequests/${REQUEST_ID}?api-version=2020-10-01" \\
|
|
367
|
+
--body "{
|
|
368
|
+
\\"properties\\": {
|
|
369
|
+
\\"requestType\\": \\"SelfDeactivate\\",
|
|
370
|
+
\\"linkedRoleEligibilityScheduleId\\": \\"${SCHED_ID}\\",
|
|
371
|
+
\\"scheduleInfo\\": {
|
|
372
|
+
\\"expiration\\": { \\"type\\": \\"AfterDuration\\", \\"duration\\": \\"PT0S\\" }
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
}"
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
## Option 2: Cancel a pending activation request (before approval)
|
|
379
|
+
|
|
380
|
+
```bash
|
|
381
|
+
az rest \\
|
|
382
|
+
--method DELETE \\
|
|
383
|
+
--url "https://management.azure.com/subscriptions/${SUB_ID}/providers/Microsoft.Authorization/roleAssignmentScheduleRequests/<REQUEST_ID>?api-version=2020-10-01"
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
## Option 3: Deny a pending approval request (approver action)
|
|
387
|
+
|
|
388
|
+
```bash
|
|
389
|
+
az rest \\
|
|
390
|
+
--method POST \\
|
|
391
|
+
--url "https://management.azure.com/providers/Microsoft.Authorization/roleAssignmentApprovals/<APPROVAL_ID>/stages/<STAGE_ID>?api-version=2021-01-01-preview" \\
|
|
392
|
+
--body "{\\"reviewResult\\": \\"Deny\\", \\"justification\\": \\"<REASON>\\"}"
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
## Verify deactivation
|
|
396
|
+
|
|
397
|
+
```bash
|
|
398
|
+
az rest \\
|
|
399
|
+
--method GET \\
|
|
400
|
+
--url "https://management.azure.com/subscriptions/${SUB_ID}/providers/Microsoft.Authorization/roleAssignmentSchedules?\\$filter=principalId+eq+'${PRINCIPAL_OID}'&api-version=2020-10-01" \\
|
|
401
|
+
--query "value[?properties.status=='Active'].{role:properties.expandedProperties.roleDefinition.displayName}"
|
|
402
|
+
```
|
|
403
|
+
"""),
|
|
404
|
+
},
|
|
405
|
+
{
|
|
406
|
+
"id": "azure-live-aks-rollout-guard",
|
|
407
|
+
"name": "Azure Live AKS Rollout Guard",
|
|
408
|
+
"summary": "Guard AKS deployment rollouts with PDB audit, maxUnavailable and surge check, and explicit pause-before-proceed or undo gate before advancing.",
|
|
409
|
+
"focus": "Guard AKS deployment rollouts by auditing PodDisruptionBudgets, rolling-update strategy, and replica health, then gating kubectl rollout advance or undo with explicit approval.",
|
|
410
|
+
"codex_role": "aks-rollout live operator",
|
|
411
|
+
"skill_desc": "Guard live AKS deployment rollouts with PDB audit, maxUnavailable/surge validation, rollout pause/undo gates, and post-rollout health verification.",
|
|
412
|
+
"skill_when": [
|
|
413
|
+
"a Kubernetes deployment rollout must proceed against a live AKS cluster",
|
|
414
|
+
"a rollout is paused mid-flight and an operator must decide to resume or undo",
|
|
415
|
+
"PDB violations or replica health issues are blocking a rollout and resolution is needed",
|
|
416
|
+
],
|
|
417
|
+
"response_shape": [
|
|
418
|
+
"AKS cluster identity confirmation (az aks show evidence)",
|
|
419
|
+
"Current rollout status and replica health (kubectl rollout status)",
|
|
420
|
+
"PodDisruptionBudget audit and rolling-update strategy review",
|
|
421
|
+
"Approval status for advance, pause, or undo",
|
|
422
|
+
"Proposed or executed kubectl rollout action",
|
|
423
|
+
"Rollback posture (revision history and undo target)",
|
|
424
|
+
"Post-rollout pod health verification and open risks",
|
|
425
|
+
],
|
|
426
|
+
"official_docs": [
|
|
427
|
+
"https://learn.microsoft.com/en-us/azure/aks/operator-best-practices-cluster-security",
|
|
428
|
+
"https://learn.microsoft.com/en-us/azure/aks/concepts-clusters-workloads",
|
|
429
|
+
"https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#rolling-update-deployment",
|
|
430
|
+
"https://kubernetes.io/docs/tasks/run-application/configure-pdb/",
|
|
431
|
+
],
|
|
432
|
+
"security_notes": "Never advance an AKS rollout without PDB audit and replica health check. kubectl rollout undo is safe but must be confirmed before execution to avoid double-rollback churn.",
|
|
433
|
+
"permissions_body": textwrap.dedent("""\
|
|
434
|
+
# Least-privilege RBAC guidance for AKS rollouts
|
|
435
|
+
|
|
436
|
+
## Azure RBAC (control plane — getting credentials)
|
|
437
|
+
|
|
438
|
+
```json
|
|
439
|
+
{
|
|
440
|
+
"Name": "AKS Rollout Guard",
|
|
441
|
+
"IsCustom": true,
|
|
442
|
+
"Description": "Read AKS cluster state and fetch user-level kubeconfig. No cluster admin rights.",
|
|
443
|
+
"Actions": [
|
|
444
|
+
"Microsoft.ContainerService/managedClusters/read",
|
|
445
|
+
"Microsoft.ContainerService/managedClusters/listClusterUserCredential/action"
|
|
446
|
+
],
|
|
447
|
+
"NotActions": [
|
|
448
|
+
"Microsoft.ContainerService/managedClusters/delete",
|
|
449
|
+
"Microsoft.ContainerService/managedClusters/agentPools/write"
|
|
450
|
+
],
|
|
451
|
+
"AssignableScopes": [
|
|
452
|
+
"/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<TARGET_RG>/providers/Microsoft.ContainerService/managedClusters/<CLUSTER_NAME>"
|
|
453
|
+
]
|
|
454
|
+
}
|
|
455
|
+
```
|
|
456
|
+
|
|
457
|
+
Note: `listClusterUserCredential` gives a user-level kubeconfig. What that user can do
|
|
458
|
+
*inside* the cluster is governed by AKS-integrated Entra ID RBAC, not this custom role.
|
|
459
|
+
|
|
460
|
+
## Kubernetes RBAC (data plane — inside the cluster)
|
|
461
|
+
|
|
462
|
+
Bind the operator's Entra ID identity to a namespace-scoped Role:
|
|
463
|
+
|
|
464
|
+
```yaml
|
|
465
|
+
apiVersion: rbac.authorization.k8s.io/v1
|
|
466
|
+
kind: Role
|
|
467
|
+
metadata:
|
|
468
|
+
name: rollout-guard
|
|
469
|
+
namespace: <NAMESPACE>
|
|
470
|
+
rules:
|
|
471
|
+
- apiGroups: ["apps"]
|
|
472
|
+
resources: ["deployments", "replicasets"]
|
|
473
|
+
verbs: ["get", "list", "watch", "patch", "update"]
|
|
474
|
+
- apiGroups: [""]
|
|
475
|
+
resources: ["pods", "pods/log"]
|
|
476
|
+
verbs: ["get", "list", "watch"]
|
|
477
|
+
- apiGroups: ["policy"]
|
|
478
|
+
resources: ["poddisruptionbudgets"]
|
|
479
|
+
verbs: ["get", "list"]
|
|
480
|
+
```
|
|
481
|
+
|
|
482
|
+
## Do not assign
|
|
483
|
+
|
|
484
|
+
- `Azure Kubernetes Service Cluster Admin Role` (full cluster admin kubeconfig)
|
|
485
|
+
- `cluster-admin` ClusterRoleBinding in Kubernetes
|
|
486
|
+
- `Microsoft.ContainerService/managedClusters/agentPools/delete`
|
|
487
|
+
"""),
|
|
488
|
+
"preflight_body": textwrap.dedent("""\
|
|
489
|
+
# AKS Rollout — Preflight Commands
|
|
490
|
+
|
|
491
|
+
## 1. Confirm cluster identity and version
|
|
492
|
+
|
|
493
|
+
```bash
|
|
494
|
+
az aks show \\
|
|
495
|
+
--resource-group <TARGET_RG> \\
|
|
496
|
+
--name <CLUSTER_NAME> \\
|
|
497
|
+
--query "{k8sVersion:kubernetesVersion, state:provisioningState, fqdn:fqdn}"
|
|
498
|
+
```
|
|
499
|
+
|
|
500
|
+
## 2. Fetch user-level kubeconfig
|
|
501
|
+
|
|
502
|
+
```bash
|
|
503
|
+
az aks get-credentials \\
|
|
504
|
+
--resource-group <TARGET_RG> \\
|
|
505
|
+
--name <CLUSTER_NAME> \\
|
|
506
|
+
--overwrite-existing
|
|
507
|
+
kubectl config current-context
|
|
508
|
+
```
|
|
509
|
+
|
|
510
|
+
## 3. Current rollout status (before apply)
|
|
511
|
+
|
|
512
|
+
```bash
|
|
513
|
+
kubectl rollout status deployment/<DEPLOY_NAME> -n <NAMESPACE> --timeout=30s || true
|
|
514
|
+
```
|
|
515
|
+
|
|
516
|
+
## 4. Audit PodDisruptionBudget
|
|
517
|
+
|
|
518
|
+
```bash
|
|
519
|
+
kubectl get pdb -n <NAMESPACE> -o wide
|
|
520
|
+
```
|
|
521
|
+
|
|
522
|
+
Fail-fast if any PDB has `ALLOWED DISRUPTIONS = 0` and the rollout requires restarts.
|
|
523
|
+
|
|
524
|
+
## 5. Audit rolling-update strategy
|
|
525
|
+
|
|
526
|
+
```bash
|
|
527
|
+
kubectl describe deployment <DEPLOY_NAME> -n <NAMESPACE> \\
|
|
528
|
+
| grep -A 5 "RollingUpdateStrategy"
|
|
529
|
+
```
|
|
530
|
+
|
|
531
|
+
## 6. Check unhealthy pods before advancing
|
|
532
|
+
|
|
533
|
+
```bash
|
|
534
|
+
kubectl get pods -n <NAMESPACE> -l app=<APP_LABEL> \\
|
|
535
|
+
--field-selector="status.phase!=Running" -o wide
|
|
536
|
+
```
|
|
537
|
+
"""),
|
|
538
|
+
"rollback_body": textwrap.dedent("""\
|
|
539
|
+
# AKS Rollout — Rollback Playbook
|
|
540
|
+
|
|
541
|
+
## Option 1: Immediate undo (reverts to previous ReplicaSet)
|
|
542
|
+
|
|
543
|
+
```bash
|
|
544
|
+
kubectl rollout undo deployment/<DEPLOY_NAME> -n <NAMESPACE>
|
|
545
|
+
kubectl rollout status deployment/<DEPLOY_NAME> -n <NAMESPACE>
|
|
546
|
+
```
|
|
547
|
+
|
|
548
|
+
## Option 2: Undo to a specific revision
|
|
549
|
+
|
|
550
|
+
```bash
|
|
551
|
+
# List revision history
|
|
552
|
+
kubectl rollout history deployment/<DEPLOY_NAME> -n <NAMESPACE>
|
|
553
|
+
|
|
554
|
+
# Undo to specific revision
|
|
555
|
+
kubectl rollout undo deployment/<DEPLOY_NAME> \\
|
|
556
|
+
--to-revision=<REVISION_NUMBER> \\
|
|
557
|
+
-n <NAMESPACE>
|
|
558
|
+
```
|
|
559
|
+
|
|
560
|
+
## Option 3: Pause a stuck rollout mid-flight
|
|
561
|
+
|
|
562
|
+
```bash
|
|
563
|
+
kubectl rollout pause deployment/<DEPLOY_NAME> -n <NAMESPACE>
|
|
564
|
+
# Inspect, patch if needed, then resume or undo
|
|
565
|
+
kubectl rollout resume deployment/<DEPLOY_NAME> -n <NAMESPACE>
|
|
566
|
+
```
|
|
567
|
+
|
|
568
|
+
## Verify rollback completed
|
|
569
|
+
|
|
570
|
+
```bash
|
|
571
|
+
kubectl rollout status deployment/<DEPLOY_NAME> -n <NAMESPACE>
|
|
572
|
+
kubectl get pods -n <NAMESPACE> -l app=<APP_LABEL>
|
|
573
|
+
kubectl top pods -n <NAMESPACE>
|
|
574
|
+
```
|
|
575
|
+
"""),
|
|
576
|
+
},
|
|
577
|
+
{
|
|
578
|
+
"id": "azure-live-app-service-slot-swap-guard",
|
|
579
|
+
"name": "Azure Live App Service Slot Swap Guard",
|
|
580
|
+
"summary": "Guard App Service slot swaps by auditing sticky settings, warmup probe readiness, and swap-with-preview evidence before final swap commit.",
|
|
581
|
+
"focus": "Guard App Service production slot swaps by auditing sticky app settings, warmup probe readiness, and swap-with-preview staging evidence before final swap commit.",
|
|
582
|
+
"codex_role": "app-service-slot-swap live operator",
|
|
583
|
+
"skill_desc": "Guard live App Service slot swaps with sticky-settings audit, warmup probe verification, swap-with-preview staging, and instant rollback posture.",
|
|
584
|
+
"skill_when": [
|
|
585
|
+
"an App Service slot swap to production must be staged and committed against a live environment",
|
|
586
|
+
"sticky settings or connection strings differ between slots and the operator must audit before swap",
|
|
587
|
+
"a swap-with-preview is in progress and the operator must decide to complete or reset",
|
|
588
|
+
],
|
|
589
|
+
"response_shape": [
|
|
590
|
+
"App Service identity and slot inventory (az webapp deployment slot list)",
|
|
591
|
+
"Sticky settings audit — differences between staging and production",
|
|
592
|
+
"Warmup probe and startup health evidence",
|
|
593
|
+
"Swap-with-preview staging confirmation",
|
|
594
|
+
"Approval status for final swap commit",
|
|
595
|
+
"Rollback posture (reset preview or re-swap back)",
|
|
596
|
+
"Post-swap production health verification and open risks",
|
|
597
|
+
],
|
|
598
|
+
"official_docs": [
|
|
599
|
+
"https://learn.microsoft.com/en-us/azure/app-service/deploy-staging-slots",
|
|
600
|
+
"https://learn.microsoft.com/en-us/azure/app-service/deploy-best-practices",
|
|
601
|
+
"https://learn.microsoft.com/en-us/azure/app-service/configure-common",
|
|
602
|
+
],
|
|
603
|
+
"security_notes": "Never perform a production slot swap without sticky-settings diff audit and warmup health confirmation. A bad swap with no rollback plan can take a production app offline instantly.",
|
|
604
|
+
"permissions_body": textwrap.dedent("""\
|
|
605
|
+
# Least-privilege RBAC guidance for App Service slot swaps
|
|
606
|
+
|
|
607
|
+
## Custom role (slot swap only, one App Service)
|
|
608
|
+
|
|
609
|
+
```json
|
|
610
|
+
{
|
|
611
|
+
"Name": "App Service Slot Swap Guard",
|
|
612
|
+
"IsCustom": true,
|
|
613
|
+
"Description": "Read App Service slot config and perform staged swap. No write to app settings or deployment config.",
|
|
614
|
+
"Actions": [
|
|
615
|
+
"Microsoft.Web/sites/read",
|
|
616
|
+
"Microsoft.Web/sites/slots/read",
|
|
617
|
+
"Microsoft.Web/sites/slots/config/read",
|
|
618
|
+
"Microsoft.Web/sites/slots/slotsswap/action",
|
|
619
|
+
"Microsoft.Web/sites/slotsswap/action",
|
|
620
|
+
"Microsoft.Web/sites/config/read"
|
|
621
|
+
],
|
|
622
|
+
"NotActions": [
|
|
623
|
+
"Microsoft.Web/sites/config/write",
|
|
624
|
+
"Microsoft.Web/sites/slots/config/write",
|
|
625
|
+
"Microsoft.Web/sites/delete",
|
|
626
|
+
"Microsoft.Web/sites/slots/delete"
|
|
627
|
+
],
|
|
628
|
+
"AssignableScopes": [
|
|
629
|
+
"/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<TARGET_RG>/providers/Microsoft.Web/sites/<APP_NAME>"
|
|
630
|
+
]
|
|
631
|
+
}
|
|
632
|
+
```
|
|
633
|
+
|
|
634
|
+
## Nearest built-in role (broader than needed — prefer the custom role above)
|
|
635
|
+
|
|
636
|
+
`Website Contributor` includes swap rights but also allows config writes.
|
|
637
|
+
Use it only when the custom role assignment scope is too difficult to manage.
|
|
638
|
+
|
|
639
|
+
## Do not assign
|
|
640
|
+
|
|
641
|
+
- `Owner` on the App Service — allows deletion
|
|
642
|
+
- `Microsoft.Web/sites/config/write` without change-management gate
|
|
643
|
+
- `Microsoft.Web/sites/slots/delete` — slot deletion is irreversible and excluded from the swap role
|
|
644
|
+
- Subscription-level `Website Contributor` for routine swap operations
|
|
645
|
+
"""),
|
|
646
|
+
"preflight_body": textwrap.dedent("""\
|
|
647
|
+
# App Service Slot Swap — Preflight Commands
|
|
648
|
+
|
|
649
|
+
## 1. List all slots and current states
|
|
650
|
+
|
|
651
|
+
```bash
|
|
652
|
+
az webapp deployment slot list \\
|
|
653
|
+
--name <APP_NAME> \\
|
|
654
|
+
--resource-group <TARGET_RG> \\
|
|
655
|
+
--query "[].{name:name, state:state, host:defaultHostName}"
|
|
656
|
+
```
|
|
657
|
+
|
|
658
|
+
## 2. Audit sticky app settings (settings that do NOT swap with the slot)
|
|
659
|
+
|
|
660
|
+
```bash
|
|
661
|
+
az webapp config appsettings list \\
|
|
662
|
+
--name <APP_NAME> --slot staging \\
|
|
663
|
+
--resource-group <TARGET_RG> \\
|
|
664
|
+
--query "[?slotSetting==true].{name:name, value:value}"
|
|
665
|
+
|
|
666
|
+
az webapp config appsettings list \\
|
|
667
|
+
--name <APP_NAME> --slot production \\
|
|
668
|
+
--resource-group <TARGET_RG> \\
|
|
669
|
+
--query "[?slotSetting==true].{name:name, value:value}"
|
|
670
|
+
```
|
|
671
|
+
|
|
672
|
+
Flag any mismatch in sticky connection strings before proceeding.
|
|
673
|
+
|
|
674
|
+
## 3. Verify warmup and startup health
|
|
675
|
+
|
|
676
|
+
```bash
|
|
677
|
+
az webapp show \\
|
|
678
|
+
--name <APP_NAME> --slot staging \\
|
|
679
|
+
--resource-group <TARGET_RG> \\
|
|
680
|
+
--query "{state:state, usageState:usageState, siteConfig:siteConfig.autoHealEnabled}"
|
|
681
|
+
|
|
682
|
+
curl -I -s "https://<APP_NAME>-staging.azurewebsites.net/health" --max-time 30
|
|
683
|
+
```
|
|
684
|
+
|
|
685
|
+
## 4. Stage the swap-with-preview (does not complete the swap)
|
|
686
|
+
|
|
687
|
+
```bash
|
|
688
|
+
az webapp deployment slot swap \\
|
|
689
|
+
--name <APP_NAME> \\
|
|
690
|
+
--resource-group <TARGET_RG> \\
|
|
691
|
+
--slot staging \\
|
|
692
|
+
--target-slot production \\
|
|
693
|
+
--action preview
|
|
694
|
+
```
|
|
695
|
+
|
|
696
|
+
Validate the preview URL before committing.
|
|
697
|
+
"""),
|
|
698
|
+
"rollback_body": textwrap.dedent("""\
|
|
699
|
+
# App Service Slot Swap — Rollback Playbook
|
|
700
|
+
|
|
701
|
+
## Option 1: Reset a swap-with-preview (safest — no prod change yet)
|
|
702
|
+
|
|
703
|
+
```bash
|
|
704
|
+
az webapp deployment slot swap \\
|
|
705
|
+
--name <APP_NAME> \\
|
|
706
|
+
--resource-group <TARGET_RG> \\
|
|
707
|
+
--slot staging \\
|
|
708
|
+
--target-slot production \\
|
|
709
|
+
--action reset
|
|
710
|
+
```
|
|
711
|
+
|
|
712
|
+
This cancels the preview staging. No traffic was moved to the new version.
|
|
713
|
+
|
|
714
|
+
## Option 2: Re-swap back after a completed swap
|
|
715
|
+
|
|
716
|
+
```bash
|
|
717
|
+
# Swap prod back to staging (restores previous production code)
|
|
718
|
+
az webapp deployment slot swap \\
|
|
719
|
+
--name <APP_NAME> \\
|
|
720
|
+
--resource-group <TARGET_RG> \\
|
|
721
|
+
--slot production \\
|
|
722
|
+
--target-slot staging
|
|
723
|
+
```
|
|
724
|
+
|
|
725
|
+
Speed: swap-back completes in seconds (no warmup required as staging was already warm).
|
|
726
|
+
|
|
727
|
+
## Option 3: Emergency scale-down if app is crashing post-swap
|
|
728
|
+
|
|
729
|
+
```bash
|
|
730
|
+
az webapp stop --name <APP_NAME> --resource-group <TARGET_RG>
|
|
731
|
+
# Fix the issue, then:
|
|
732
|
+
az webapp start --name <APP_NAME> --resource-group <TARGET_RG>
|
|
733
|
+
```
|
|
734
|
+
|
|
735
|
+
## Verify production health after rollback
|
|
736
|
+
|
|
737
|
+
```bash
|
|
738
|
+
az webapp show \\
|
|
739
|
+
--name <APP_NAME> \\
|
|
740
|
+
--resource-group <TARGET_RG> \\
|
|
741
|
+
--query "{state:state, usageState:usageState}"
|
|
742
|
+
|
|
743
|
+
curl -I -s "https://<APP_NAME>.azurewebsites.net/health" --max-time 30
|
|
744
|
+
```
|
|
745
|
+
"""),
|
|
746
|
+
},
|
|
747
|
+
{
|
|
748
|
+
"id": "azure-live-keyvault-rotation-purge-guard",
|
|
749
|
+
"name": "Azure Live Key Vault Rotation Purge Guard",
|
|
750
|
+
"summary": "Guard Key Vault key and secret rotation, soft-delete enforcement, and purge-protection changes, with explicit irreversibility warning before any purge-protection enable.",
|
|
751
|
+
"focus": "Guard Azure Key Vault key and secret rotation operations and purge-protection enablement, surfacing the irreversible nature of purge-protection and requiring explicit acknowledgment before any change.",
|
|
752
|
+
"codex_role": "keyvault-rotation-purge live operator",
|
|
753
|
+
"skill_desc": "Guard Key Vault key rotation, rotation policy changes, soft-delete enforcement, and purge-protection enablement with irreversibility warnings and rollback evidence.",
|
|
754
|
+
"skill_when": [
|
|
755
|
+
"a Key Vault key or secret rotation must be triggered or scheduled against a live vault",
|
|
756
|
+
"soft-delete or purge-protection must be verified or enabled on a production vault",
|
|
757
|
+
"a key or secret has been soft-deleted and recovery or permanent purge must be decided",
|
|
758
|
+
],
|
|
759
|
+
"response_shape": [
|
|
760
|
+
"Vault identity and current soft-delete/purge-protection state",
|
|
761
|
+
"Key or secret version inventory and active version confirmation",
|
|
762
|
+
"Current rotation policy audit",
|
|
763
|
+
"Irreversibility warning for purge-protection (if enabling)",
|
|
764
|
+
"Approval status for rotation or protection change",
|
|
765
|
+
"Proposed or executed Key Vault action",
|
|
766
|
+
"Post-action key version verification and open risks (unrecoverable scenarios listed explicitly)",
|
|
767
|
+
],
|
|
768
|
+
"official_docs": [
|
|
769
|
+
"https://learn.microsoft.com/en-us/azure/key-vault/general/key-vault-recovery",
|
|
770
|
+
"https://learn.microsoft.com/en-us/azure/key-vault/keys/about-keys-details",
|
|
771
|
+
"https://learn.microsoft.com/en-us/azure/key-vault/keys/how-to-configure-key-rotation",
|
|
772
|
+
"https://learn.microsoft.com/en-us/azure/key-vault/general/best-practices",
|
|
773
|
+
],
|
|
774
|
+
"security_notes": "Purge-protection enable is irreversible. Soft-deleted keys can be recovered within the retention window. HSM-backed hard-purged keys cannot be recovered. Never grant purge rights to routine rotation operators.",
|
|
775
|
+
"permissions_body": textwrap.dedent("""\
|
|
776
|
+
# Least-privilege RBAC guidance for Key Vault rotation and purge
|
|
777
|
+
|
|
778
|
+
## Rotation operator role (no delete, no purge)
|
|
779
|
+
|
|
780
|
+
```json
|
|
781
|
+
{
|
|
782
|
+
"Name": "Key Vault Rotation Guard",
|
|
783
|
+
"IsCustom": true,
|
|
784
|
+
"Description": "Rotate keys and update rotation policies. Cannot delete or purge keys/secrets/certificates. Cannot purge the vault itself. Cannot disable soft-delete.",
|
|
785
|
+
"Actions": [
|
|
786
|
+
"Microsoft.KeyVault/vaults/read",
|
|
787
|
+
"Microsoft.KeyVault/vaults/keys/read",
|
|
788
|
+
"Microsoft.KeyVault/vaults/secrets/read"
|
|
789
|
+
],
|
|
790
|
+
"NotActions": [
|
|
791
|
+
"Microsoft.KeyVault/vaults/purge/action",
|
|
792
|
+
"Microsoft.KeyVault/vaults/delete",
|
|
793
|
+
"Microsoft.KeyVault/vaults/write",
|
|
794
|
+
"Microsoft.KeyVault/vaults/accessPolicies/write"
|
|
795
|
+
],
|
|
796
|
+
"DataActions": [
|
|
797
|
+
"Microsoft.KeyVault/vaults/keys/read",
|
|
798
|
+
"Microsoft.KeyVault/vaults/keys/rotate/action",
|
|
799
|
+
"Microsoft.KeyVault/vaults/keys/rotationpolicy/read",
|
|
800
|
+
"Microsoft.KeyVault/vaults/keys/rotationpolicy/write",
|
|
801
|
+
"Microsoft.KeyVault/vaults/secrets/getSecret/action"
|
|
802
|
+
],
|
|
803
|
+
"NotDataActions": [
|
|
804
|
+
"Microsoft.KeyVault/vaults/keys/delete",
|
|
805
|
+
"Microsoft.KeyVault/vaults/keys/purge/action",
|
|
806
|
+
"Microsoft.KeyVault/vaults/secrets/delete",
|
|
807
|
+
"Microsoft.KeyVault/vaults/secrets/purge/action",
|
|
808
|
+
"Microsoft.KeyVault/vaults/certificates/delete",
|
|
809
|
+
"Microsoft.KeyVault/vaults/certificates/purge/action"
|
|
810
|
+
],
|
|
811
|
+
"AssignableScopes": [
|
|
812
|
+
"/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<TARGET_RG>/providers/Microsoft.KeyVault/vaults/<VAULT_NAME>"
|
|
813
|
+
]
|
|
814
|
+
}
|
|
815
|
+
```
|
|
816
|
+
|
|
817
|
+
**Action vs DataAction distinction (security-critical)**:
|
|
818
|
+
`Microsoft.KeyVault/vaults/purge/action` is a **control-plane Action** that purges
|
|
819
|
+
the soft-deleted **vault** itself (irreversible). It is **not** a DataAction and is
|
|
820
|
+
not blocked by `NotDataActions`. It must be in `NotActions`. Certificate operations
|
|
821
|
+
exist on both planes; this role blocks both. Do not assume `NotDataActions` covers
|
|
822
|
+
all destructive Key Vault paths.
|
|
823
|
+
|
|
824
|
+
Nearest built-in roles: `Key Vault Crypto Officer` (for keys), `Key Vault Secrets Officer` (for secrets).
|
|
825
|
+
Both include delete — prefer the custom role above for rotation-only scenarios.
|
|
826
|
+
|
|
827
|
+
## Purge-protection enablement (separate, highly privileged operation)
|
|
828
|
+
|
|
829
|
+
Requires: `Microsoft.KeyVault/vaults/write` on the vault resource.
|
|
830
|
+
Assign via PIM with justification and at most 1-hour activation window.
|
|
831
|
+
|
|
832
|
+
**IRREVERSIBILITY WARNING**: Once `enablePurgeProtection: true` is set on a vault,
|
|
833
|
+
it cannot be unset. All soft-deleted objects in that vault are protected from permanent deletion
|
|
834
|
+
until the soft-delete retention period (7–90 days) expires. This is a one-way door.
|
|
835
|
+
|
|
836
|
+
## Do not assign
|
|
837
|
+
|
|
838
|
+
- `Key Vault Administrator` standing (includes purge rights)
|
|
839
|
+
- `Microsoft.KeyVault/vaults/purge/action` to rotation operators
|
|
840
|
+
- `Microsoft.KeyVault/vaults/accessPolicies/write` to non-admins (legacy access policy model)
|
|
841
|
+
"""),
|
|
842
|
+
"preflight_body": textwrap.dedent("""\
|
|
843
|
+
# Key Vault Rotation & Purge — Preflight Commands
|
|
844
|
+
|
|
845
|
+
## 1. Check vault recovery state
|
|
846
|
+
|
|
847
|
+
```bash
|
|
848
|
+
az keyvault show \\
|
|
849
|
+
--name <VAULT_NAME> \\
|
|
850
|
+
--query "{softDeleteEnabled:properties.enableSoftDelete, purgeProtectionEnabled:properties.enablePurgeProtection, retentionDays:properties.softDeleteRetentionInDays, sku:sku.name}"
|
|
851
|
+
```
|
|
852
|
+
|
|
853
|
+
**STOP** if `purgeProtectionEnabled` is `null` or `false` and you are about to enable it.
|
|
854
|
+
Enabling purge-protection is **irreversible**. Get explicit written approval.
|
|
855
|
+
|
|
856
|
+
## 2. List key versions and active version
|
|
857
|
+
|
|
858
|
+
```bash
|
|
859
|
+
az keyvault key list-versions \\
|
|
860
|
+
--vault-name <VAULT_NAME> \\
|
|
861
|
+
--name <KEY_NAME> \\
|
|
862
|
+
--query "[].{version:kid, enabled:attributes.enabled, expires:attributes.expires, created:attributes.created}" \\
|
|
863
|
+
--output table
|
|
864
|
+
```
|
|
865
|
+
|
|
866
|
+
## 3. Show current rotation policy
|
|
867
|
+
|
|
868
|
+
```bash
|
|
869
|
+
az keyvault key rotation-policy show \\
|
|
870
|
+
--vault-name <VAULT_NAME> \\
|
|
871
|
+
--name <KEY_NAME>
|
|
872
|
+
```
|
|
873
|
+
|
|
874
|
+
## 4. List secrets with expiry audit
|
|
875
|
+
|
|
876
|
+
```bash
|
|
877
|
+
az keyvault secret list \\
|
|
878
|
+
--vault-name <VAULT_NAME> \\
|
|
879
|
+
--query "[].{name:name, expires:attributes.expires, enabled:attributes.enabled}" \\
|
|
880
|
+
--output table
|
|
881
|
+
```
|
|
882
|
+
|
|
883
|
+
## 5. Check for soft-deleted objects awaiting recovery or purge decision
|
|
884
|
+
|
|
885
|
+
```bash
|
|
886
|
+
az keyvault key list-deleted --vault-name <VAULT_NAME> --output table
|
|
887
|
+
az keyvault secret list-deleted --vault-name <VAULT_NAME> --output table
|
|
888
|
+
```
|
|
889
|
+
"""),
|
|
890
|
+
"rollback_body": textwrap.dedent("""\
|
|
891
|
+
# Key Vault Rotation & Purge — Rollback Playbook
|
|
892
|
+
|
|
893
|
+
## Recover a soft-deleted key (within retention window)
|
|
894
|
+
|
|
895
|
+
```bash
|
|
896
|
+
az keyvault key recover \\
|
|
897
|
+
--vault-name <VAULT_NAME> \\
|
|
898
|
+
--name <KEY_NAME>
|
|
899
|
+
```
|
|
900
|
+
|
|
901
|
+
## Recover a soft-deleted secret
|
|
902
|
+
|
|
903
|
+
```bash
|
|
904
|
+
az keyvault secret recover \\
|
|
905
|
+
--vault-name <VAULT_NAME> \\
|
|
906
|
+
--name <SECRET_NAME>
|
|
907
|
+
```
|
|
908
|
+
|
|
909
|
+
## Re-enable a previous key version (roll back to prior version as active)
|
|
910
|
+
|
|
911
|
+
```bash
|
|
912
|
+
az keyvault key set-attributes \\
|
|
913
|
+
--vault-name <VAULT_NAME> \\
|
|
914
|
+
--name <KEY_NAME> \\
|
|
915
|
+
--version <PREVIOUS_VERSION_ID> \\
|
|
916
|
+
--enabled true
|
|
917
|
+
```
|
|
918
|
+
|
|
919
|
+
## Restore rotation policy to previous settings
|
|
920
|
+
|
|
921
|
+
```bash
|
|
922
|
+
az keyvault key rotation-policy update \\
|
|
923
|
+
--vault-name <VAULT_NAME> \\
|
|
924
|
+
--name <KEY_NAME> \\
|
|
925
|
+
--value @rotation-policy-backup.json
|
|
926
|
+
```
|
|
927
|
+
|
|
928
|
+
## CANNOT ROLL BACK
|
|
929
|
+
|
|
930
|
+
- **Purge-protection enable**: once set, cannot be disabled on the vault.
|
|
931
|
+
- **Hard-purged key**: permanently destroyed. Data encrypted exclusively by this
|
|
932
|
+
key version is unrecoverable. Escalate to incident response immediately.
|
|
933
|
+
- **Expired soft-delete retention + no purge-protection**: objects auto-purged
|
|
934
|
+
after retention window expires with no recovery option.
|
|
935
|
+
"""),
|
|
936
|
+
},
|
|
937
|
+
{
|
|
938
|
+
"id": "azure-live-cost-budget-action-guard",
|
|
939
|
+
"name": "Azure Live Cost Budget Action Guard",
|
|
940
|
+
"summary": "Gate subscription and management-group budget action changes and GPU or HPC SKU scale-up against approved spend thresholds before any cost-impacting mutation.",
|
|
941
|
+
"focus": "Gate Azure subscription and management-group budget action changes and GPU/HPC SKU scale-up (NDv5, NCv3, H-series) against approved spend thresholds before any cost-impacting mutation.",
|
|
942
|
+
"codex_role": "cost-budget-action live operator",
|
|
943
|
+
"skill_desc": "Gate Azure budget action changes and GPU/HPC SKU provisioning against approved spend limits, with quota audits and emergency spend-stop playbooks.",
|
|
944
|
+
"skill_when": [
|
|
945
|
+
"a cost budget action threshold or notification must be modified for a subscription or management group",
|
|
946
|
+
"a GPU or HPC VM SKU scale-up is requested and spend-limit approval is required",
|
|
947
|
+
"a runaway cost event is detected and emergency quota reduction or VM deallocation is needed",
|
|
948
|
+
],
|
|
949
|
+
"response_shape": [
|
|
950
|
+
"Active subscription and budget inventory (az consumption budget list)",
|
|
951
|
+
"Current spend vs threshold and forecast (actual vs budget amount)",
|
|
952
|
+
"GPU/HPC quota usage in target region",
|
|
953
|
+
"Approval status for budget change or SKU scale-up",
|
|
954
|
+
"Proposed or executed cost-governance action",
|
|
955
|
+
"Rollback posture (restore previous threshold, quota reduction)",
|
|
956
|
+
"Post-change budget alert and monitoring confirmation",
|
|
957
|
+
],
|
|
958
|
+
"official_docs": [
|
|
959
|
+
"https://learn.microsoft.com/en-us/azure/cost-management-billing/costs/tutorial-acm-create-budgets",
|
|
960
|
+
"https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/azure-subscription-service-limits",
|
|
961
|
+
"https://learn.microsoft.com/en-us/azure/quotas/quickstart-increase-quota-portal",
|
|
962
|
+
"https://learn.microsoft.com/en-us/azure/cost-management-billing/finops/overview-finops",
|
|
963
|
+
],
|
|
964
|
+
"security_notes": "GPU/HPC SKUs (NDv5, H100, A100) can generate $50K+ daily costs. Never approve quota increases or budget threshold raises without explicit spend-approval sign-off from a financial authority.",
|
|
965
|
+
"permissions_body": textwrap.dedent("""\
|
|
966
|
+
# Least-privilege RBAC guidance for cost budget and GPU guard
|
|
967
|
+
|
|
968
|
+
## Custom role (budget read/write + quota read, NO VM creation)
|
|
969
|
+
|
|
970
|
+
```json
|
|
971
|
+
{
|
|
972
|
+
"Name": "Cost Budget Action Guard",
|
|
973
|
+
"IsCustom": true,
|
|
974
|
+
"Description": "Read and modify subscription budgets and read compute quotas. Cannot create VMs. Cannot delete budgets.",
|
|
975
|
+
"Actions": [
|
|
976
|
+
"Microsoft.Consumption/budgets/read",
|
|
977
|
+
"Microsoft.Consumption/budgets/write",
|
|
978
|
+
"Microsoft.CostManagement/budgets/read",
|
|
979
|
+
"Microsoft.CostManagement/budgets/write",
|
|
980
|
+
"Microsoft.CostManagement/query/action",
|
|
981
|
+
"Microsoft.Compute/locations/usages/read",
|
|
982
|
+
"Microsoft.Compute/locations/vmSizes/read",
|
|
983
|
+
"Microsoft.Quota/quotas/read",
|
|
984
|
+
"Microsoft.Quota/usages/read"
|
|
985
|
+
],
|
|
986
|
+
"NotActions": [
|
|
987
|
+
"Microsoft.Compute/virtualMachines/write",
|
|
988
|
+
"Microsoft.Compute/virtualMachineScaleSets/write",
|
|
989
|
+
"Microsoft.Quota/quotas/write",
|
|
990
|
+
"Microsoft.Consumption/budgets/delete",
|
|
991
|
+
"Microsoft.CostManagement/budgets/delete"
|
|
992
|
+
],
|
|
993
|
+
"AssignableScopes": [
|
|
994
|
+
"/subscriptions/<SUBSCRIPTION_ID>"
|
|
995
|
+
]
|
|
996
|
+
}
|
|
997
|
+
```
|
|
998
|
+
|
|
999
|
+
VM creation is explicitly excluded. `Microsoft.Quota/quotas/write` is also excluded:
|
|
1000
|
+
quota increase requests carry spending risk and must go through a separate approval
|
|
1001
|
+
workflow (e.g., Azure Support or an IT-ops request process), not through this role.
|
|
1002
|
+
GPU SKU approval flows through budget-action alerts only — not through quota write.
|
|
1003
|
+
|
|
1004
|
+
**Budget deletion is excluded** (`Microsoft.Consumption/budgets/delete`,
|
|
1005
|
+
`Microsoft.CostManagement/budgets/delete`). Deleting budgets silently removes the
|
|
1006
|
+
only cross-region financial guardrail and disables every threshold alert on the
|
|
1007
|
+
subscription. Cleanup of test or stale budgets must go through a separate
|
|
1008
|
+
PIM-eligible "Cost Budget Cleanup" role, never the standing operational role.
|
|
1009
|
+
|
|
1010
|
+
## Separate PIM role: Cost Budget Cleanup (eligible-only)
|
|
1011
|
+
|
|
1012
|
+
```json
|
|
1013
|
+
{
|
|
1014
|
+
"Name": "Cost Budget Cleanup (PIM-eligible)",
|
|
1015
|
+
"IsCustom": true,
|
|
1016
|
+
"Description": "PIM-only role for deleting stale or test budgets. Eligible-only. Maximum 2-hour activation. MFA + justification required.",
|
|
1017
|
+
"Actions": [
|
|
1018
|
+
"Microsoft.Consumption/budgets/read",
|
|
1019
|
+
"Microsoft.Consumption/budgets/delete",
|
|
1020
|
+
"Microsoft.CostManagement/budgets/read",
|
|
1021
|
+
"Microsoft.CostManagement/budgets/delete"
|
|
1022
|
+
],
|
|
1023
|
+
"AssignableScopes": [
|
|
1024
|
+
"/subscriptions/<SUBSCRIPTION_ID>"
|
|
1025
|
+
]
|
|
1026
|
+
}
|
|
1027
|
+
```
|
|
1028
|
+
|
|
1029
|
+
Configure as PIM-eligible only (never standing active), MFA-gated, time-bounded.
|
|
1030
|
+
|
|
1031
|
+
## Azure Policy guardrail (deploy alongside the custom role)
|
|
1032
|
+
|
|
1033
|
+
Deny GPU VM SKU provisioning without an approved budget tag:
|
|
1034
|
+
|
|
1035
|
+
```json
|
|
1036
|
+
{
|
|
1037
|
+
"if": {
|
|
1038
|
+
"allOf": [
|
|
1039
|
+
{"field": "type", "equals": "Microsoft.Compute/virtualMachines"},
|
|
1040
|
+
{"field": "Microsoft.Compute/virtualMachines/sku.name", "in": [
|
|
1041
|
+
"Standard_ND96asr_v4", "Standard_NC24rs_v3", "Standard_ND40rs_v2",
|
|
1042
|
+
"Standard_HB120rs_v3", "Standard_HB176rs_v4"
|
|
1043
|
+
]},
|
|
1044
|
+
{"field": "tags.BudgetApproval", "exists": "false"}
|
|
1045
|
+
]
|
|
1046
|
+
},
|
|
1047
|
+
"then": {"effect": "Deny"}
|
|
1048
|
+
}
|
|
1049
|
+
```
|
|
1050
|
+
|
|
1051
|
+
## Do not assign
|
|
1052
|
+
|
|
1053
|
+
- `Cost Management Contributor` at management-group scope (modifies all child subscriptions)
|
|
1054
|
+
- `Billing Account Contributor`
|
|
1055
|
+
- `Microsoft.Compute/virtualMachines/write` to this role
|
|
1056
|
+
"""),
|
|
1057
|
+
"preflight_body": textwrap.dedent("""\
|
|
1058
|
+
# Cost Budget Action — Preflight Commands
|
|
1059
|
+
|
|
1060
|
+
## 1. List all budgets and current spend
|
|
1061
|
+
|
|
1062
|
+
```bash
|
|
1063
|
+
az consumption budget list \\
|
|
1064
|
+
--query "[].{name:name, amount:amount, currentSpend:currentSpend.amount, forecastSpend:forecastSpend.amount, timeGrain:timeGrain}" \\
|
|
1065
|
+
--output table
|
|
1066
|
+
```
|
|
1067
|
+
|
|
1068
|
+
## 2. Check GPU/HPC quota usage in target region
|
|
1069
|
+
|
|
1070
|
+
```bash
|
|
1071
|
+
az vm list-usage \\
|
|
1072
|
+
--location <REGION> \\
|
|
1073
|
+
--query "[?contains(name.value, 'GPU') || contains(name.value, 'NC') || contains(name.value, 'ND') || contains(name.value, 'NV')].{name:name.localizedValue, used:currentValue, limit:limit}" \\
|
|
1074
|
+
--output table
|
|
1075
|
+
```
|
|
1076
|
+
|
|
1077
|
+
## 3. Inventory running GPU/HPC VMs across subscription
|
|
1078
|
+
|
|
1079
|
+
```bash
|
|
1080
|
+
az vm list \\
|
|
1081
|
+
--query "[?contains(storageProfile.imageReference.sku, 'gpu') || starts_with(hardwareProfile.vmSize, 'Standard_NC') || starts_with(hardwareProfile.vmSize, 'Standard_ND')].{name:name, size:hardwareProfile.vmSize, rg:resourceGroup, state:powerState}" \\
|
|
1082
|
+
--show-details \\
|
|
1083
|
+
--output table
|
|
1084
|
+
```
|
|
1085
|
+
|
|
1086
|
+
## 4. Show active budget alert thresholds
|
|
1087
|
+
|
|
1088
|
+
```bash
|
|
1089
|
+
az consumption budget show \\
|
|
1090
|
+
--budget-name <BUDGET_NAME> \\
|
|
1091
|
+
--query "{notifications:notifications, amount:amount, filter:filter, startDate:timePeriod.startDate}"
|
|
1092
|
+
```
|
|
1093
|
+
|
|
1094
|
+
## 5. Check quota request history
|
|
1095
|
+
|
|
1096
|
+
```bash
|
|
1097
|
+
az quota request status list \\
|
|
1098
|
+
--scope "/subscriptions/<SUBSCRIPTION_ID>/providers/Microsoft.Compute/locations/<REGION>" \\
|
|
1099
|
+
--query "[].{name:name, status:properties.provisioningState, value:properties.value.limit}" \\
|
|
1100
|
+
--output table
|
|
1101
|
+
```
|
|
1102
|
+
"""),
|
|
1103
|
+
"rollback_body": textwrap.dedent("""\
|
|
1104
|
+
# Cost Budget Action — Rollback Playbook
|
|
1105
|
+
|
|
1106
|
+
## Restore a lowered budget to its previous threshold
|
|
1107
|
+
|
|
1108
|
+
```bash
|
|
1109
|
+
az consumption budget create \\
|
|
1110
|
+
--budget-name <BUDGET_NAME> \\
|
|
1111
|
+
--amount <PREVIOUS_AMOUNT> \\
|
|
1112
|
+
--time-grain Monthly \\
|
|
1113
|
+
--start-date <START_DATE> \\
|
|
1114
|
+
--end-date <END_DATE>
|
|
1115
|
+
```
|
|
1116
|
+
|
|
1117
|
+
## Emergency: deallocate a runaway GPU VM (requires VM operator rights — escalate if needed)
|
|
1118
|
+
|
|
1119
|
+
```bash
|
|
1120
|
+
az vm deallocate \\
|
|
1121
|
+
--resource-group <RG> \\
|
|
1122
|
+
--name <VM_NAME> \\
|
|
1123
|
+
--no-wait
|
|
1124
|
+
# Verify deallocation
|
|
1125
|
+
az vm show --resource-group <RG> --name <VM_NAME> --query "powerState" -d
|
|
1126
|
+
```
|
|
1127
|
+
|
|
1128
|
+
## Scale VMSS to zero during a runaway cost event
|
|
1129
|
+
|
|
1130
|
+
```bash
|
|
1131
|
+
az vmss scale \\
|
|
1132
|
+
--resource-group <RG> \\
|
|
1133
|
+
--name <VMSS_NAME> \\
|
|
1134
|
+
--new-capacity 0
|
|
1135
|
+
```
|
|
1136
|
+
|
|
1137
|
+
## Revert a quota increase (reduce back to previous limit)
|
|
1138
|
+
|
|
1139
|
+
```bash
|
|
1140
|
+
az quota update \\
|
|
1141
|
+
--resource-name "cores" \\
|
|
1142
|
+
--scope "/subscriptions/<SUBSCRIPTION_ID>/providers/Microsoft.Compute/locations/<REGION>" \\
|
|
1143
|
+
--limit-object value=<PREVIOUS_LIMIT> value-type=Individual
|
|
1144
|
+
```
|
|
1145
|
+
|
|
1146
|
+
## Verify budget alert is re-active
|
|
1147
|
+
|
|
1148
|
+
```bash
|
|
1149
|
+
az consumption budget show \\
|
|
1150
|
+
--budget-name <BUDGET_NAME> \\
|
|
1151
|
+
--query "{amount:amount, currentSpend:currentSpend.amount, notifications:notifications}"
|
|
1152
|
+
```
|
|
1153
|
+
"""),
|
|
1154
|
+
},
|
|
1155
|
+
]
|
|
1156
|
+
|
|
1157
|
+
|
|
1158
|
+
HARNESS_TEMPLATE_COPILOT = """\
|
|
1159
|
+
---
|
|
1160
|
+
description: "{summary}"
|
|
1161
|
+
name: "{name}"
|
|
1162
|
+
tools:
|
|
1163
|
+
- "read"
|
|
1164
|
+
- "search"
|
|
1165
|
+
- "search/codebase"
|
|
1166
|
+
- "web/githubRepo"
|
|
1167
|
+
- "web/fetch"
|
|
1168
|
+
- "read/problems"
|
|
1169
|
+
- "execute/runInTerminal"
|
|
1170
|
+
- "execute/getTerminalOutput"
|
|
1171
|
+
- "read/terminalLastCommand"
|
|
1172
|
+
- "read/terminalSelection"
|
|
1173
|
+
disable-model-invocation: false
|
|
1174
|
+
user-invocable: true
|
|
1175
|
+
---
|
|
1176
|
+
|
|
1177
|
+
{body}
|
|
1178
|
+
"""
|
|
1179
|
+
|
|
1180
|
+
|
|
1181
|
+
def harness_body(agent):
|
|
1182
|
+
lines = [
|
|
1183
|
+
f"# {agent['name']}",
|
|
1184
|
+
"",
|
|
1185
|
+
f"Use this canonical agent only for `{agent['id']}` work.",
|
|
1186
|
+
"",
|
|
1187
|
+
"## Required Skill",
|
|
1188
|
+
"",
|
|
1189
|
+
"Before answering, read and follow:",
|
|
1190
|
+
"",
|
|
1191
|
+
f"- `skills/azure/{agent['id']}/SKILL.md`",
|
|
1192
|
+
"",
|
|
1193
|
+
f"Load files under `skills/azure/{agent['id']}/references/` only when the task needs that reference. Do not dump reference text into the response.",
|
|
1194
|
+
"",
|
|
1195
|
+
"## Focus",
|
|
1196
|
+
"",
|
|
1197
|
+
agent["focus"],
|
|
1198
|
+
"",
|
|
1199
|
+
"## Operating Rules",
|
|
1200
|
+
"",
|
|
1201
|
+
f"- Load and follow the bound Azure skill first; do not drift into generic cloud advice.",
|
|
1202
|
+
"- This role is for repos or sessions that may be connected to live Azure credentials, CLI profiles, or real environments.",
|
|
1203
|
+
"- Before any live Azure mutation, confirm subscription, resource group, active principal, exact target resource, expected impact, and explicit human approval.",
|
|
1204
|
+
"- Prefer what-if, dry-run, preview, describe, status, plan, and rollback evidence before mutation.",
|
|
1205
|
+
"- If the target, approval state, or rollback posture is ambiguous, stop and say so.",
|
|
1206
|
+
"- Keep outputs short: target, approval status, evidence, action, rollback, verification, open risks.",
|
|
1207
|
+
"- Never ask for secrets, credentials, access tokens, private keys, or raw environment dumps unless already sanitized and required.",
|
|
1208
|
+
"",
|
|
1209
|
+
"## Response Shape",
|
|
1210
|
+
"",
|
|
1211
|
+
]
|
|
1212
|
+
for i, step in enumerate(agent["response_shape"], 1):
|
|
1213
|
+
lines.append(f"{i}. {step}")
|
|
1214
|
+
return "\n".join(lines)
|
|
1215
|
+
|
|
1216
|
+
|
|
1217
|
+
def write(path, content):
|
|
1218
|
+
os.makedirs(os.path.dirname(path), exist_ok=True)
|
|
1219
|
+
with open(path, "w") as f:
|
|
1220
|
+
f.write(content)
|
|
1221
|
+
print(f" wrote {path.replace(ROOT+'/', '')}")
|
|
1222
|
+
|
|
1223
|
+
|
|
1224
|
+
def agent_md(agent):
|
|
1225
|
+
body = harness_body(agent)
|
|
1226
|
+
return f"""---
|
|
1227
|
+
metadata:
|
|
1228
|
+
author: "github: Raishin"
|
|
1229
|
+
version: "0.1.0"
|
|
1230
|
+
---
|
|
1231
|
+
|
|
1232
|
+
# {agent['name']}
|
|
1233
|
+
|
|
1234
|
+
> Agent for `{agent['id']}`. {agent['summary']}
|
|
1235
|
+
|
|
1236
|
+
## Harness Variants
|
|
1237
|
+
|
|
1238
|
+
- `harnesses/codex.toml` — Codex native agent configuration.
|
|
1239
|
+
- `harnesses/copilot.agent.md` — GitHub Copilot / VS Code custom agent definition.
|
|
1240
|
+
- `harnesses/claude-code.agent.md` — Claude Code Markdown-family adapter.
|
|
1241
|
+
- `harnesses/cursor.agent.md` — Cursor Markdown-family adapter.
|
|
1242
|
+
- `harnesses/gemini.agent.md` — Gemini CLI Markdown-family adapter.
|
|
1243
|
+
- `harnesses/kiro-ide.agent.md` — Kiro IDE Markdown-family adapter.
|
|
1244
|
+
- `harnesses/kiro-cli.agent.json` — Kiro CLI JSON adapter.
|
|
1245
|
+
|
|
1246
|
+
## Canonical Contract
|
|
1247
|
+
|
|
1248
|
+
{body}
|
|
1249
|
+
"""
|
|
1250
|
+
|
|
1251
|
+
|
|
1252
|
+
def codex_toml(agent):
|
|
1253
|
+
rules = "\n".join([
|
|
1254
|
+
"- Load and follow the bound Azure skill first; do not drift into generic cloud advice.",
|
|
1255
|
+
"- This role is for repos or sessions that may be connected to live Azure credentials, CLI profiles, or real environments.",
|
|
1256
|
+
"- Before any live Azure mutation, confirm subscription, resource group, active principal, exact target, expected impact, and explicit human approval.",
|
|
1257
|
+
"- Prefer what-if, dry-run, preview, describe, status, plan, and rollback evidence before mutation.",
|
|
1258
|
+
"- If approval, identity, target, or rollback posture is ambiguous, stop and explain the blocker.",
|
|
1259
|
+
"- Never ask for secrets, credentials, access tokens, account numbers, private keys, or raw environment dumps unless already sanitized and required.",
|
|
1260
|
+
"- Label facts as live evidence, user-provided sanitized evidence, documentation-based, or inference.",
|
|
1261
|
+
])
|
|
1262
|
+
return f"""name = "{agent['id']}_agent"
|
|
1263
|
+
description = "Specialized subagent for {agent['id']}. {agent['summary']}"
|
|
1264
|
+
model = "gpt-5.4"
|
|
1265
|
+
model_reasoning_effort = "high"
|
|
1266
|
+
sandbox_mode = "workspace-write"
|
|
1267
|
+
|
|
1268
|
+
developer_instructions = \"\"\"
|
|
1269
|
+
Load and follow the bound `{agent['id']}` skill first. This agent exists only for that guarded live-Azure role; do not drift into generic cloud advice.
|
|
1270
|
+
|
|
1271
|
+
Token discipline:
|
|
1272
|
+
- Read only SKILL.md first; load references only when the task requires them.
|
|
1273
|
+
- Keep answers compact: target, approval status, evidence, action, rollback, verification, open risks.
|
|
1274
|
+
- Do not paste long docs, raw tool inventories, raw credential output, or full environment dumps.
|
|
1275
|
+
|
|
1276
|
+
Role focus: {agent['focus']}
|
|
1277
|
+
|
|
1278
|
+
Safety contract:
|
|
1279
|
+
{rules}
|
|
1280
|
+
\"\"\"
|
|
1281
|
+
|
|
1282
|
+
[[skills.config]]
|
|
1283
|
+
path = "skills/azure/{agent['id']}/SKILL.md"
|
|
1284
|
+
enabled = true
|
|
1285
|
+
|
|
1286
|
+
[metadata]
|
|
1287
|
+
author = "github: Raishin"
|
|
1288
|
+
"""
|
|
1289
|
+
|
|
1290
|
+
|
|
1291
|
+
def kiro_cli_json(agent):
|
|
1292
|
+
body = harness_body(agent)
|
|
1293
|
+
prompt = body.replace("\\", "\\\\").replace('"', '\\"').replace("\n", "\\n")
|
|
1294
|
+
return f'{{"name": "{agent["name"]}", "description": "{agent["summary"]}", "prompt": "{prompt}"}}\n'
|
|
1295
|
+
|
|
1296
|
+
|
|
1297
|
+
def metadata_json(agent):
|
|
1298
|
+
return json.dumps({
|
|
1299
|
+
"id": f"{agent['id']}-agent",
|
|
1300
|
+
"name": agent["name"],
|
|
1301
|
+
"type": "agent",
|
|
1302
|
+
"provider": "azure",
|
|
1303
|
+
"harnesses": ["codex", "copilot", "claude-code", "cursor", "gemini", "kiro"],
|
|
1304
|
+
"summary": agent["summary"],
|
|
1305
|
+
"source_type": "original",
|
|
1306
|
+
"official_docs": agent["official_docs"],
|
|
1307
|
+
"security_notes": agent["security_notes"],
|
|
1308
|
+
"last_verified": DATE,
|
|
1309
|
+
"path": f"agents/azure/{agent['id']}-agent",
|
|
1310
|
+
"author": "github: Raishin",
|
|
1311
|
+
"version": "0.1.0",
|
|
1312
|
+
}, indent=2) + "\n"
|
|
1313
|
+
|
|
1314
|
+
|
|
1315
|
+
def skill_md(agent):
|
|
1316
|
+
when_items = "\n".join(f"- {w}" for w in agent["skill_when"])
|
|
1317
|
+
return f"""---
|
|
1318
|
+
name: {agent['id']}
|
|
1319
|
+
description: {agent['skill_desc']}
|
|
1320
|
+
metadata:
|
|
1321
|
+
author: "github: Raishin"
|
|
1322
|
+
version: "0.1.0"
|
|
1323
|
+
---
|
|
1324
|
+
|
|
1325
|
+
# {agent['name']}
|
|
1326
|
+
|
|
1327
|
+
## Purpose
|
|
1328
|
+
|
|
1329
|
+
Act as the guarded live Azure operator for {agent['id']} work. Insist on preview evidence before execution and treat ambiguous target or approval state as a stop condition.
|
|
1330
|
+
|
|
1331
|
+
## When to use
|
|
1332
|
+
|
|
1333
|
+
Use this skill when:
|
|
1334
|
+
|
|
1335
|
+
{when_items}
|
|
1336
|
+
|
|
1337
|
+
## Lean operating rules
|
|
1338
|
+
|
|
1339
|
+
- Prefer Azure CLI (`az`) official documentation when available; fall back to Microsoft Learn docs and sanitized user evidence.
|
|
1340
|
+
- Do not execute a live Azure change until subscription, resource group, active principal, and resource ownership are explicit.
|
|
1341
|
+
- Prefer what-if, preview, describe, status, dry-run, plan, and rollback evidence before execution.
|
|
1342
|
+
- If the request skips preview or rollback design, push back.
|
|
1343
|
+
- Never print secrets, access tokens, connection strings, or raw environment values. Summarize sanitized evidence only.
|
|
1344
|
+
- Load references only when needed.
|
|
1345
|
+
|
|
1346
|
+
## References
|
|
1347
|
+
|
|
1348
|
+
Load these only when needed:
|
|
1349
|
+
|
|
1350
|
+
- [Preflight commands](references/preflight-commands.md) — CLI commands to run before any mutation.
|
|
1351
|
+
- [Rollback playbook](references/rollback-playbook.md) — concrete rollback steps for this service.
|
|
1352
|
+
- [Permission model](references/permission-model.md) — RBAC role definitions and PIM guidance.
|
|
1353
|
+
- [Official sources](references/official-sources.md) — authoritative Azure documentation links.
|
|
1354
|
+
|
|
1355
|
+
## Response minimum
|
|
1356
|
+
|
|
1357
|
+
Return, at minimum:
|
|
1358
|
+
|
|
1359
|
+
- confirmed target subscription, resource group, and principal
|
|
1360
|
+
- preflight evidence (what-if diff, status, health check, or plan output)
|
|
1361
|
+
- approval status for the proposed mutation
|
|
1362
|
+
- rollback posture or explicit statement of what cannot be rolled back
|
|
1363
|
+
- post-action verification steps or refusal reason
|
|
1364
|
+
"""
|
|
1365
|
+
|
|
1366
|
+
|
|
1367
|
+
def skill_metadata_json(agent):
|
|
1368
|
+
return json.dumps({
|
|
1369
|
+
"id": agent["id"],
|
|
1370
|
+
"name": agent["name"],
|
|
1371
|
+
"type": "skill",
|
|
1372
|
+
"provider": "azure",
|
|
1373
|
+
"harnesses": ["codex", "claude-code", "cursor", "gemini", "kiro", "other"],
|
|
1374
|
+
"summary": agent["skill_desc"],
|
|
1375
|
+
"source_type": "original",
|
|
1376
|
+
"official_docs": agent["official_docs"],
|
|
1377
|
+
"security_notes": agent["security_notes"],
|
|
1378
|
+
"last_verified": DATE,
|
|
1379
|
+
"path": f"skills/azure/{agent['id']}",
|
|
1380
|
+
"author": "github: Raishin",
|
|
1381
|
+
"version": "0.1.0",
|
|
1382
|
+
}, indent=2) + "\n"
|
|
1383
|
+
|
|
1384
|
+
|
|
1385
|
+
def build():
|
|
1386
|
+
for ag in AGENTS:
|
|
1387
|
+
aid = ag["id"]
|
|
1388
|
+
adir = os.path.join(ROOT, "agents", "azure", f"{aid}-agent")
|
|
1389
|
+
hdir = os.path.join(adir, "harnesses")
|
|
1390
|
+
sdir = os.path.join(ROOT, "skills", "azure", aid)
|
|
1391
|
+
rdir = os.path.join(sdir, "references")
|
|
1392
|
+
os.makedirs(hdir, exist_ok=True)
|
|
1393
|
+
os.makedirs(rdir, exist_ok=True)
|
|
1394
|
+
|
|
1395
|
+
print(f"\n[{aid}]")
|
|
1396
|
+
body = harness_body(ag)
|
|
1397
|
+
|
|
1398
|
+
write(os.path.join(adir, "AGENT.md"), agent_md(ag))
|
|
1399
|
+
write(os.path.join(adir, "PERMISSIONS.md"), f"# Permissions: {ag['name']}\n\n{ag['permissions_body']}\n")
|
|
1400
|
+
write(os.path.join(adir, "PREFLIGHT.md"), ag["preflight_body"])
|
|
1401
|
+
write(os.path.join(adir, "ROLLBACK.md"), ag["rollback_body"])
|
|
1402
|
+
write(os.path.join(adir, "metadata.json"), metadata_json(ag))
|
|
1403
|
+
|
|
1404
|
+
write(os.path.join(hdir, "claude-code.agent.md"), f"---\nname: \"{ag['name']}\"\ndescription: \"{ag['summary']}\"\n---\n\n{body}\n")
|
|
1405
|
+
write(os.path.join(hdir, "cursor.agent.md"), f"---\nname: \"{ag['name']}\"\ndescription: \"{ag['summary']}\"\n---\n\n{body}\n")
|
|
1406
|
+
write(os.path.join(hdir, "gemini.agent.md"), f"---\nname: \"{ag['name']}\"\ndescription: \"{ag['summary']}\"\n---\n\n{body}\n")
|
|
1407
|
+
write(os.path.join(hdir, "kiro-ide.agent.md"), f"---\nname: \"{ag['name']}\"\ndescription: \"{ag['summary']}\"\n---\n\n{body}\n")
|
|
1408
|
+
write(os.path.join(hdir, "copilot.agent.md"), HARNESS_TEMPLATE_COPILOT.format(name=ag["name"], summary=ag["summary"], body=body))
|
|
1409
|
+
write(os.path.join(hdir, "codex.toml"), codex_toml(ag))
|
|
1410
|
+
write(os.path.join(hdir, "kiro-cli.agent.json"), kiro_cli_json(ag))
|
|
1411
|
+
|
|
1412
|
+
write(os.path.join(sdir, "SKILL.md"), skill_md(ag))
|
|
1413
|
+
write(os.path.join(sdir, "metadata.json"), skill_metadata_json(ag))
|
|
1414
|
+
# Stub references (operators load full content from PREFLIGHT/ROLLBACK/PERMISSIONS)
|
|
1415
|
+
write(os.path.join(rdir, "preflight-commands.md"), f"# Preflight Commands\n\nSee `../../PREFLIGHT.md` in the agent directory for executable commands.\n")
|
|
1416
|
+
write(os.path.join(rdir, "rollback-playbook.md"), f"# Rollback Playbook\n\nSee `../../ROLLBACK.md` in the agent directory for the full rollback playbook.\n")
|
|
1417
|
+
write(os.path.join(rdir, "permission-model.md"), f"# Permission Model\n\nSee `../../PERMISSIONS.md` in the agent directory for RBAC role definitions and PIM guidance.\n")
|
|
1418
|
+
write(os.path.join(rdir, "official-sources.md"), f"# Official Sources\n\n" + "\n".join(f"- {u}" for u in ag["official_docs"]) + "\n")
|
|
1419
|
+
|
|
1420
|
+
print("\nAzure live-guard agents + skills generated.")
|
|
1421
|
+
|
|
1422
|
+
|
|
1423
|
+
if __name__ == "__main__":
|
|
1424
|
+
build()
|