From nuon
Generate a Nuon BYOC app configuration from a description of the user's application. Invoke when users describe an app they want to deploy with Nuon, ask about BYOC deployment, mention creating Nuon configs, or want to convert Helm charts (values.yaml, Chart.yaml, ArtifactHub) to Nuon components.
How this skill is triggered — by the user, by Claude, or both
Slash command
/nuon:create-app-configThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are creating a Nuon app configuration.
You are creating a Nuon app configuration.
IMPORTANT: Before generating ANY TOML files, read example files from the examples/ directory in this plugin to confirm the exact format. Start with examples/eks-simple/ for a simple pattern or examples/grafana/ for a complex one. Your generated TOML MUST match the format in those examples exactly.
Ask the user (if not already provided):
Read these files from the plugin for accurate schema and pattern information:
reference/schema.md for valid TOML fieldsreference/patterns.md for architecture patterns matching their use casereference/templating.md for template variable syntaxexamples/ to find the closest matching patternWhen converting Helm charts (user provides values.yaml, Chart.yaml, a Helm repo URL, an ArtifactHub link, or describes a chart they use), classify every value before generating files:
| Category | Destination | When |
|---|---|---|
| Customer Input | inputs.toml → {{ .nuon.inputs.inputs.X }} | Differs per customer |
| Infra-Derived | {{ .nuon.install.sandbox.outputs.X }} | From cloud infrastructure |
| Component-Derived | {{ .nuon.components.X.outputs.Y }} | From another Nuon component |
| Hardcoded Default | Static in values file | Vendor default, rarely changes |
Present the classification to the user as a table before generating files.
Also check Chart.yaml for dependencies (postgresql, redis, mysql, elasticsearch, etc.). For each dependency:
{{ .nuon.components.X.outputs.Y }}examples/grafana/ for the RDS + Helm patternPresent a plan showing:
IMPORTANT: Never fabricate repository paths. Only reference repos/directories from the bundled examples (nuonco/example-app-configs) or repos the user explicitly provides. If a Terraform module doesn't exist in the examples (e.g., S3 bucket, ElastiCache), generate the Terraform source code in src/components// with main.tf, variables.tf, outputs.tf, providers.tf, versions.tf.
IMPORTANT: The directory name MUST match the app name. nuon apps sync uses the directory name to find the app. If you create a directory called my-app/, the nuon apps create command must use --name=my-app. Always ensure these match in your output and "next steps" instructions.
After user approves the plan, generate all configuration files:
metadata.toml - version, display_name, description. May also include readme (path to a README file) and branch (default branch for the app config)inputs.toml - grouped customer inputs. Every [[input]] MUST have display_name and group. Use type (e.g. "string", "number", "boolean") and user_configurable where appropriate. Do NOT use the deprecated internal fieldsandbox.toml - base infrastructure (typically nuonco/aws-eks-sandbox)runner.toml - runner type and configstack.toml - CloudFormation/Bicep template configcomponents/*.toml - numbered, dash-separated names (0-name.toml, 1-name.toml)components/values/*.yaml - templated Helm values if using helm_chart componentspermissions/*.toml - provision, maintenance, deprovision rolesbreak_glass.toml - emergency accessactions/*.toml - healthchecks and operational actionsNuon TOML uses a flat structure - NO nested wrappers like [component]. First line is a type comment.
# helm
name = "webapp"
type = "helm_chart"
chart_name = "webapp"
namespace = "webapp"
storage_driver = "configmap"
dependencies = ["postgres"]
[helm_repo]
repo_url = "https://charts.example.com"
chart = "webapp"
[[values_file]]
contents = "./values/webapp/values.yaml"
# terraform
name = "rds_cluster"
type = "terraform_module"
terraform_version = "1.11.3"
[public_repo]
repo = "org/repo"
directory = "src/components/rds"
branch = "main"
[vars]
identifier = "db-{{ .nuon.install.id }}"
region = "{{ .nuon.install_stack.outputs.region }}"
Key rules:
dependencies NOT depends_on[values] or [[values_file]] for Helm, [vars] or [[var_file]] for Terraformvar arrays or env_var arrays — always use [vars] and [env_vars] mapschart_name required for helm_chart, terraform_version required for terraform_moduletake_ownership, build_timeout, and deploy_timeout fieldspath, patches, enable_helm, load_restrictor0-docker-image.toml (dashes), field naming: name = "docker_image" (underscores)0-docker-image.toml, 1-rds-cluster.toml{{ .nuon.install.id }} in resource names for uniquenessnuonco/aws-eks-sandbox for AWS, nuonco/azure-aks-sandbox for Azure, nuonco/gcp-gke-sandbox for GCP$ARGUMENTS
npx claudepluginhub nuonco/nuon-plugin --plugin nuonProvides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.