One-shot scaffolder for a k8s-native nanohype Platform tenant: the k8s-app-tenant chart (which vendors tenant-chart-base and ships per-env values, an ArgoCD ApplicationSet entry, and the Platform, BudgetPolicy and ModelGateway CRs) plus the optional AI building blocks as local packages — the LLM gateway and the vector store. The output satisfies the platform-tenant-contract: a chart with the required templates, the gitops entry, and the Platform CR, with the OTel agents.tenant / agents.platform attributes set and no inline IAM. Pair the packages with a ts-service or agentic-loop for the app's own logic.
Render it
# CLI
npx @nanohype/sdk render-composite platform-tenant --out ./my-app
# SDK
import { LocalSource, renderComposite } from "@nanohype/sdk";
const result = await renderComposite(source, "platform-tenant", variables);
# MCP — from an agent
get_composite({ name: "platform-tenant" })
What it draws together
Variables
Required
AppName string- Kebab-case app name — chart name, namespace, Platform CR name, and the package prefix. Must be lowercase kebab-case starting with a letter.
Tenant string- Owning team: the tenants-<team> namespace the Platform, BudgetPolicy and ModelGateway CRs are applied in, the Platform's spec.tenant, and the team label on the chart's resources and telemetry. Must be lowercase kebab-case.
Image string- Container image base (no tag — pinned per-env in values-{env}.yaml).
Optional
AppMetric string — defaults to ${AppName}- Prefix of the RED series the tenant chart's Grafana dashboard reads: <prefix>_requests_total, <prefix>_errors_total and <prefix>_request_duration_seconds. AppName with each dash as an underscore, the prefix the chart's PrometheusRule derives from the chart name; a single-word AppName needs nothing
Description string — defaults to k8s-native Platform tenant- Short app description for Chart.yaml and README.
Port string — defaults to 8080- Container port the app listens on.
IncludeLlmGateway bool — defaults to true- Include the LLM gateway package (routing + caching + cost tracking, over the Platform ModelGateway by default).
LlmProvider string — defaults to gateway- LLM provider the packages deployed on the substrate call: gateway, the Platform ModelGateway, which holds the Bedrock role there, so none of them holds a model credential
IncludeVectorStore bool — defaults to false- Include the vector store package (embedding storage + similarity search).
VectorProvider string — defaults to memory- Default vector store backend.
IncludeAuditLedger bool — defaults to false- Include the audit ledger package (append-only event log over pluggable storage).
AuditProvider string — defaults to memory- Default audit ledger backend.