원클릭으로
add-app
Scaffold a new app-template application for this home-ops repository
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Scaffold a new app-template application for this home-ops repository
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
| name | add-app |
| description | Scaffold a new app-template application for this home-ops repository |
This skill scaffolds a new application for this repository's Flux layout.
kubernetes/apps/<namespace>/<app>.yamlkubernetes/components/app-template is referenced as spec.chartRef.name: app-templateexternal-secrets with the akeyless ClusterSecretStoreUse the question tool to gather:
downloads, media, or servicesExternalSecretdependsOn entries for the cluster overlay manifestAlways ask for confirmation before writing files.
Before generating files, search kubesearch.dev to find real-world HelmRelease examples:
https://kubesearch.dev/ and search for the app nameExample URL pattern: https://kubesearch.dev/hr/<registry-path> (e.g., https://kubesearch.dev/hr/ghcr.io-johanohly-airtrail)
Before generating files:
Create:
kubernetes/apps/<namespace>/<app>/
At minimum, create:
kustomization.yamlhelmrelease.yamlOptionally create:
externalsecret.yamlprometheusrule.yaml, configmap.yaml, or pvc.yamlocirepository.yaml if there is no namespace specific app-templatekubernetes/apps/<namespace>/<app>/kustomization.yaml---
# yaml-language-server: $schema=https://json.schemastore.org/kustomization
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ./helmrelease.yaml
Add ./externalsecret.yaml only if secrets are needed. Add other resource files only when required.
kubernetes/apps/base/<namespace>/<app>/helmrelease.yaml---
# yaml-language-server: $schema=https://raw.githubusercontent.com/bjw-s-labs/helm-charts/main/charts/other/app-template/schemas/helmrelease-helm-v2.schema.json
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: <app>
spec:
chartRef:
kind: OCIRepository
name: app-template
dependsOn: []
interval: 15m
values:
controllers:
<app>:
containers:
app:
image:
repository: <image-repository>
tag: <image-tag-or-digest>
probes:
liveness:
enabled: true
readiness:
enabled: true
resources:
requests:
cpu: 10m
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
readOnlyRootFilesystem: true
defaultPodOptions:
securityContext:
fsGroup: 1000
fsGroupChangePolicy: OnRootMismatch
runAsGroup: 1000
runAsNonRoot: true
runAsUser: 1000
service:
app:
ports:
http:
port: <port>
Adjust the template to match local patterns in the same namespace. Add route, persistence, env, envFrom, or extra manifests only when needed.
kubernetes/apps/base/<namespace>/<app>/externalsecret.yaml---
# yaml-language-server: $schema=https://kube-schemas.pages.dev/external-secrets.io/externalsecret_v1.json
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: &app <app>
spec:
refreshInterval: 5m
secretStoreRef:
kind: ClusterSecretStore
name: akeyless-secret-store
target:
name: *app
template:
engineVersion: v2
data:
MYKEY: "{{ .MY_KEY_IN_AKEYLESS_JSON }}"
dataFrom:
- extract:
key: <app>
If the app needs templated secret data, mirror patterns from similar existing apps instead of forcing a generic template. Always reference the keys explicitely in the data section if possible.
For each selected cluster, create:
kubernetes/apps/<namespace>/<app>/ks.yaml
Template:
---
# yaml-language-server: $schema=https://kube-schemas.pages.dev/kustomize.toolkit.fluxcd.io/kustomization_v1.json
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: &app <app>
spec:
interval: 1h
path: ./kubernetes/apps/<namespace>/<app>
postBuild:
substitute:
APP: *app
CLUSTER: ${CLUSTER}
prune: true
sourceRef:
kind: GitRepository
name: flux-system
namespace: flux-system
wait: false
Only include components or dependsOn when the app needs them. Follow nearby overlay manifests in the same namespace for exact patterns.
For each selected cluster, update:
kubernetes/apps/<cluster>/<namespace>/kustomization.yaml
Add:
resources:
- ./<app>.yaml
Keep the resource list alphabetized.
Verify that:
kustomization.yaml references the new app.app-template repository name rather than a per-app OCIRepository.ocirepository.yaml for app-template apps in this repository.app-template, stop and ask the user before continuing.Enforces staged execution discipline on large tasks: a written stage plan, delegation to named fable agents where the runtime supports it, a failable verification check at each stage, and a skeptical self-review before delivery. Trigger when the user explicitly asks ("do this thoroughly", "be systematic", "deep work mode") OR when the task objectively spans multiple files, multiple sources, or multiple sessions. Do NOT trigger on ordinary multi-step requests that a direct attempt handles fine. For a run pinned to a specific model, use fable-opus, fable-sonnet, or fable-haiku instead. Always-on guardrails (verify-before-flag, warning batching, sed safety) live in the companion execution-guardrails skill.
Run Kopiur S3 backups alongside VolSync NFS, verify over days, then cutover with full restore from S3
Migrate an app's PVC backup from VolSync to Kopiur with zero data loss
Systematically investigate cluster issues starting from events, following the Flux pipeline down to pod logs
Analyze GitOps repo structure for ordering issues, broken references, missing dependencies, and anti-patterns
Safely upgrade an app's image or chart version, checking for breaking changes and updating the HelmRelease