google-agents-cli-scaffold
Project scaffolding, deployment configuration, and CI/CD setup for Google ADK agents.
crossplane-renderer
Renders and validates Crossplane compositions with security and policy checks. Automatically activates when testing compositions, rendering examples, or validating resources with Polaris, kube-linter, and Datree. Works standalone or as part of complete KCL validation workflow.
Full skill instructions
This skill automatically activates when:
Standalone Use: Quick composition testing and security validation during development
Integrated Use: Part of the complete validation workflow with kcl-composition-validator skill
kcl fmt)kcl run)For complete pre-commit validation, use kcl-composition-validator which runs all stages.
Purpose: Test that composition renders successfully and preview resources
Command Pattern:
cd infrastructure/base/crossplane/configuration
crossplane render \
examples/<claim-file>.yaml \
<composition-file>.yaml \
functions.yaml \
--extra-resources examples/environmentconfig.yaml \
> /tmp/rendered.yaml
Available Compositions:
App Composition (app-composition.yaml)
app-basic.yaml, app-complete.yamlSQLInstance Composition (sql-instance-composition.yaml)
sqlinstance-basic.yaml, sqlinstance-complete.yamlEKS Pod Identity (epi-composition.yaml)
epi.yamlTest basic App configuration:
cd infrastructure/base/crossplane/configuration
crossplane render \
examples/app-basic.yaml \
app-composition.yaml \
functions.yaml \
--extra-resources examples/environmentconfig.yaml \
> /tmp/app-basic-rendered.yaml
Test complete App configuration:
crossplane render \
examples/app-complete.yaml \
app-composition.yaml \
functions.yaml \
--extra-resources examples/environmentconfig.yaml \
> /tmp/app-complete-rendered.yaml
Test SQLInstance:
crossplane render \
examples/sqlinstance-complete.yaml \
sql-instance-composition.yaml \
functions.yaml \
--extra-resources examples/environmentconfig.yaml \
> /tmp/sqlinstance-rendered.yaml
CRITICAL: Every composition change must pass security and policy validation before committing.
Step 1: Render the Composition
cd infrastructure/base/crossplane/configuration
crossplane render examples/app-complete.yaml app-composition.yaml functions.yaml \
--extra-resources examples/environmentconfig.yaml > /tmp/rendered.yaml
Step 2: Polaris Security Audit
polaris audit --audit-path /tmp/rendered.yaml --format=pretty
Expected output:
Common Polaris Issues:
Step 3: kube-linter Validation
kube-linter lint /tmp/rendered.yaml
Expected: Clean output with no errors
Common kube-linter Issues:
Step 4: Datree Policy Check
datree test /tmp/rendered.yaml --ignore-missing-schemas
Expected: No policy violations (warnings acceptable if documented)
Common Datree Issues:
Before committing composition changes:
Count resources by kind:
grep "^kind:" /tmp/rendered.yaml | sort | uniq -c
Extract specific resource:
# Get Deployment
yq 'select(.kind == "Deployment")' /tmp/rendered.yaml
# Get Service
yq 'select(.kind == "Service")' /tmp/rendered.yaml
# Get HTTPRoute
yq 'select(.kind == "HTTPRoute")' /tmp/rendered.yaml
Check readiness annotations:
# Find resources marked as ready
grep -B 5 'krm.kcl.dev/ready: "True"' /tmp/rendered.yaml
Deployment checks:
# Check replicas
yq 'select(.kind == "Deployment") | .spec.replicas' /tmp/rendered.yaml
# Check image
yq 'select(.kind == "Deployment") | .spec.template.spec.containers[0].image' /tmp/rendered.yaml
# Check resource limits
yq 'select(.kind == "Deployment") | .spec.template.spec.containers[0].resources' /tmp/rendered.yaml
Service checks:
# Check service type
yq 'select(.kind == "Service") | .spec.type' /tmp/rendered.yaml
# Check ports
yq 'select(.kind == "Service") | .spec.ports' /tmp/rendered.yaml
HTTPRoute checks:
# Check hostnames
yq 'select(.kind == "HTTPRoute") | .spec.hostnames' /tmp/rendered.yaml
# Check backend refs
yq 'select(.kind == "HTTPRoute") | .spec.rules[0].backendRefs' /tmp/rendered.yaml
Issue: KCL mutation patterns can cause duplicate resources (see kcl-composition-validator skill)
Detection:
# Count Deployments (should match expected count)
grep -c "kind: Deployment" /tmp/rendered.yaml
# Count Services
grep -c "kind: Service" /tmp/rendered.yaml
# Find duplicate resource names
grep "name:" /tmp/rendered.yaml | sort | uniq -d
If duplicates found:
kcl-composition-validator skill for detailed guidanceWhen developing new composition features:
# 1. Make changes to KCL composition
vim infrastructure/base/crossplane/configuration/kcl/app/main.k
# 2. Quick render test
cd infrastructure/base/crossplane/configuration
crossplane render examples/app-complete.yaml app-composition.yaml functions.yaml \
--extra-resources examples/environmentconfig.yaml > /tmp/test.yaml
# 3. Check output
less /tmp/test.yaml
# 4. Iterate until correct
When changes look good:
# 5. Run security validation
polaris audit --audit-path /tmp/test.yaml --format=pretty
kube-linter lint /tmp/test.yaml
datree test /tmp/test.yaml --ignore-missing-schemas
# 6. Run complete validation (includes KCL formatting/syntax)
./scripts/validate-kcl-compositions.sh
Test with minimal configuration:
crossplane render examples/app-basic.yaml app-composition.yaml functions.yaml \
--extra-resources examples/environmentconfig.yaml > /tmp/minimal.yaml
Test with complete configuration:
crossplane render examples/app-complete.yaml app-composition.yaml functions.yaml \
--extra-resources examples/environmentconfig.yaml > /tmp/complete.yaml
Compare outputs:
diff -u /tmp/minimal.yaml /tmp/complete.yaml | less
Create a custom claim for testing:
# /tmp/my-test-app.yaml
apiVersion: cloud.ogenki.io/v1alpha1
kind: App
metadata:
name: test-app
namespace: apps
spec:
image: nginx:1.25
replicas: 3
database:
enabled: true
size: small
autoscaling:
enabled: true
minReplicas: 2
maxReplicas: 5
Render custom claim:
cd infrastructure/base/crossplane/configuration
crossplane render /tmp/my-test-app.yaml app-composition.yaml functions.yaml \
--extra-resources examples/environmentconfig.yaml > /tmp/my-test-rendered.yaml
Symptom: Error: composition not found
Fix:
infrastructure/base/crossplane/configuration/ directoryyq or kubectlSymptom: Error: function not found or unknown function
Fix:
functions.yaml exists in the same directorycrossplane render)Symptom: References to environment config fail
Fix:
--extra-resources examples/environmentconfig.yamlSymptom: Render completes but output doesn't match expectations
Debug steps:
infrastructure/base/crossplane/configuration/kcl/<module>/kcl-composition-validator skill to validate KCL syntaxSymptom: Error: cannot connect to Docker daemon
Fix:
# Start Docker
sudo systemctl start docker
# Or use podman with docker alias
alias docker=podman
For pre-commit validation, use the comprehensive script:
./scripts/validate-kcl-compositions.sh
This runs:
kcl fmt)kcl run)For security validation (additional step):
# After rendering
polaris audit --audit-path /tmp/rendered.yaml --format=pretty
kube-linter lint /tmp/rendered.yaml
datree test /tmp/rendered.yaml --ignore-missing-schemas
# 1. Modify composition KCL
vim infrastructure/base/crossplane/configuration/kcl/app/main.k
# 2. Render with feature enabled
cd infrastructure/base/crossplane/configuration
crossplane render examples/app-complete.yaml app-composition.yaml functions.yaml \
--extra-resources examples/environmentconfig.yaml > /tmp/test.yaml
# 3. Verify feature resources exist
grep "kind:" /tmp/test.yaml | sort | uniq -c
# 4. Security validation
polaris audit --audit-path /tmp/test.yaml --format=pretty
# Render SQLInstance
crossplane render examples/sqlinstance-complete.yaml sql-instance-composition.yaml functions.yaml \
--extra-resources examples/environmentconfig.yaml > /tmp/db.yaml
# Check generated resources
yq 'select(.kind == "Cluster")' /tmp/db.yaml # CloudNativePG Cluster
yq 'select(.kind == "ScheduledBackup")' /tmp/db.yaml # Backup config
yq 'select(.kind == "AtlasMigration")' /tmp/db.yaml # Migrations
# Validate security
polaris audit --audit-path /tmp/db.yaml --format=pretty
# Create test EnvironmentConfig
cat > /tmp/test-env.yaml <<EOF
apiVersion: cloud.ogenki.io/v1alpha1
kind: EnvironmentConfig
metadata:
name: test-env
data:
environment: prod
region: us-west-2
EOF
# Render with custom environment
crossplane render examples/app-complete.yaml app-composition.yaml functions.yaml \
--extra-resources /tmp/test-env.yaml > /tmp/prod-app.yaml
# Verify environment-specific settings
yq 'select(.kind == "Deployment") | .spec.replicas' /tmp/prod-app.yaml
Render specific composition only (skip others):
# Instead of running full validation script
crossplane render examples/app-basic.yaml app-composition.yaml functions.yaml \
--extra-resources examples/environmentconfig.yaml
Use local function images (if available):
# Pull function images once
docker pull xpkg.upbound.io/crossplane-contrib/function-kcl:latest
# Subsequent renders will use cached image
During development, validate only what changed:
# Skip Polaris/kube-linter/Datree during rapid iteration
# Only run these before commit
Before commit, run all validations:
# Complete validation
./scripts/validate-kcl-compositions.sh
# Security validation
polaris audit --audit-path /tmp/rendered.yaml --format=pretty
kube-linter lint /tmp/rendered.yaml
datree test /tmp/rendered.yaml --ignore-missing-schemas
security-validation.md in this skill folderexamples.md in this skill folderquick-reference.md in this skill folderkcl-composition-validator skillValidation is successful when:
Project scaffolding, deployment configuration, and CI/CD setup for Google ADK agents.
Set up tracing, logging, and monitoring for deployed ADK agents across Cloud Trace, BigQuery, and third-party platforms.
Enterprise Azure infrastructure architect generating Bicep or Terraform from workload descriptions.
Plan and configure production-ready Azure Kubernetes Service clusters with Day-0 and Day-1 best practices.
Raw mechanical interfaces fusing Swiss typographic print with military terminal aesthetics. Rigid grids, extreme type scale contrast, utilitarian color, analog degradation effects. For data-heavy dashboards, portfolios, or editorial sites that need to feel like declassified blueprints.
Web search, scraping, extraction, crawling, and monitoring via ScrapeGraph AI CLI.
Skill for working with Firebase Hosting (Classic). Use this when you want to deploy static web apps, Single Page Apps (SPAs), or simple microservices. Do NOT use for Firebase App Hosting.
Deploy and manage web apps with Firebase App Hosting. Use this skill when deploying Next.js/Angular apps with backends.
Deploy applications and websites to Vercel. Use when the user requests deployment actions like "deploy my app", "deploy and give me the link", "push this live", or "create a preview deployment".
Build SEO-optimized pages at scale using templates, data, and proven playbook patterns.
Design and build isolated, reusable Convex backend components with clear boundaries and app-facing wrappers.
Deploy and manage projects on Vercel using token-based authentication. Use when working with Vercel CLI using access tokens rather than interactive login — e.g. "deploy to vercel", "set up vercel", "add environment variables to vercel".
Opus.ai: Revolutionize Your Web Experience
Build a no-code AI app in minutes.
An IDE for code migration from legacy to modern frameworks through coding agents.
Automate CGI animation in live-action scenes
Branded artistic QR-code concepts
Launch a website in seconds with AI.
Streamline Your Coding Experience with AI Code Helper
Convert any screenshot or design to clean code.